init: workbuddy_skills 重建,仅收录 session-mechanism

- 按用户指示清空原有 25 技能内容,只提交 session-mechanism(57 文件)
- 附 .gitignore(产物 + 本机凭据)
- 令牌明文已脱敏(历史 .neodata_token 与 pitfalls 引用均不入库)
- 本提交为孤儿提交(父提交为空),历史自此重新开始
This commit is contained in:
admin committed 2026-10-05 14:13:24 +08:00
commit 19101acd65
58 files changed
+36134

No files matched your search

@@ -0,0 +1,114 @@
# 动手前必过 · 六条(动手层)
> `pitfalls.md`=**知识**(47 条,问「为什么」时查)。
> 本档=**动作**(开工前照做)。**⛔ 别开工前通读 pitfalls。**
同一天栽过四次,同一个形状:**判据锚点自己没先验 ⇒ 推出了错结论。**
## ⓿ 🔴🔴 说「会怎样」之前,先取证那个后果真的存在
> **这条是 2026-10-03 23:20 立的,当天我又犯了一次(10-04 17:1x)。**
⛔ **不许把自己推测的后果写成事实。** 否则「讲清后果」会退化成
「**编一个后果、说得更像回事**」——**比原句更坏**(原句至少只是啰嗦;编的后果是**假情报**,
会被当真话用)。
**今天(10-04)栽的那次**:我说「没启动脚本 ⇒ 常驻挂在会话进程树上 ⇒ 会话一关就被带走」。
**实测**:pid 19424 连跑 **24.2 h / 8695 轮**,父进程早已退出(孤儿进程)⇒ **不受会话结束影响**。
⇒ 我说的后果**不存在**。而**正确答案早写在 `supervise-persistence.md` 里**(还明写
「⛔ 不能用它论证这种起法也能长期」⇒ 我把它读反了)。
✅ **动手前问两句**:
1. 我要写的这个后果,**能不能拿一条读数证明**?
2. 判据在哪?(**先查判据 ⇒ 再写结论**,⛔ 不是反过来)
📌 同源的第二条红线(也是 10-03 立的):
⚠️ **改文案/解释改到第三轮还说不清 ⇒ 该问的是「这行要不要留」,⛔ 不是继续润色。**
(「看不懂」往往不是措辞问题,是**这行本身就不该在** —— 10-03 与 10-04 两天各撞一次。)
## ① 查状态 → 问那个程序自己
⛔ **不许用 `glob`/手拼路径证明"某文件不存在"**(`glob('**/x')` **不穿透 `.workbuddy` 这类点目录** ⇒ 零命中 ≠ 不存在。今天就是这么把"常驻没跑"报错的)。
```python
import collabd
ok, det = collabd.supervise_alive() # ✅ 让它自己判
hb = collabd.SUP_HB # ✅ 路径问常量
```
| 东西 | 真身 | 程序自判 |
|---|---|---|
| 常驻心跳 | `<WS>/.workbuddy/collab/logs/supervise-heartbeat.json` | `collabd.supervise_alive()` |
| 停止标志 | `<WS>/tmp/supervise-inbox/guard.stop` | `collabd._guard_says_stop()` |
| 目标状态 | `<WS>/tmp/supervise-inbox/goal.json` | `collabd.goal_lifecycle()` |
| 台账四态 | `<WS>/tmp/supervise-inbox/tasks.json` | ⛔ 唯一权威,⛔ 别读 `queue.json`(已退役) |
| 配置 | `<WS>/.workbuddy/collab/collabd.config.json` | — |
## ② 引用读数 → 先看它什么时候写的
台账 V5 写「PASS 48」,真跑 73;V1 写「pid 8024」,现活 19424。`acceptance_state` 每条带 `_更新`(本例停在 **10-02 13:58**)=**"当时验过",不是"现在仍成立"**。
> **凡带「现在/已/还差」的结论,读数一律现取。** pid · 心跳 · 计数 · pass 数 · 端口 · 排期状态——全都会随时间变。
## ③ 写判据 → 先让基线全绿,再谈抓得住
判据正则 `width:\s*\d` 误伤 CSS 里正当的 `max-width:420px` ⇒ 这条**永远红** ⇒ 跑任何变异都"报红" ⇒ **5/5 全 ✅ 全是假象**。
> **恒红比漏网更坏**:它让所有变异都"红" ⇒ 验证作废,而**表面看起来完美**。
> 跑完变异先问「**基线绿吗**」,不是「几条报红」。
三条硬规矩:
1. **基线先全绿** —— 数 `✗` 且 ⛔ 排除「报告型」那些行(既有存量不计入成败)
2. **锚在「结构」或「唯一位置」** —— ⛔ 锚在"文本出现过"上(判 CSS 要**剥注释**+只取那条规则块)
3. **变异脚本带两道护栏** —— `ast.parse` 判据源码 + 必须真找到那条用例(否则"无输出"会被当成"全绿")
④ 🔴 **每个变异改完先验「被检对象真被改了」**(长度差/md5)—— 今天栽过:脚本里锚点写错 ⇒
`replace` 什么都没改 ⇒ 变体被 `⏭` 跳过 ⇒ 汇总却按总数打"6/6 全 ✅" ⇒ **整轮验证作废**。
⇒ **⏭ 跳过必须计入失败**,⛔ 不许从分母里去掉。
### 🔴🔴 写了一天纪律还是栽 ⇒ 那就**上机器**(2026-10-04 收口)
上面 ①~⑤ 是**纪律**。纪律拦不住 —— 我写完当天照样栽。**根因收敛成两条**(⛔ 不是六条各自独立的失误):
| 根因 | 今天的表现(≥6 次) | 机器抓手 |
|---|---|---|
| **A. 判据与被检对象之间的「连接」没被验证** | 判据里 `lambda` **自己重算**;锚在「文本出现过」;夹具只覆盖顺带跑到的分支;锚点凭记忆写 | `judge_audit.py --audit selftest.py` |
| **B. 验证动作本身出错,而我不检查它** | 变异脚本自己 `IndexError` 却照样打 PASS;只重置一份文件 ⇒ 累积污染 | `judge_audit.py --mutate` |
⚠️ **两者的共同签名**:**判据绿灯与被检对象状态无关**。所以解法不是「更小心」,
是**让验证器自己的失败变成读数**(rc≠0 且明说原因),⛔ 不许它输出得像结论。
```bash
# 🔴 每改完判据必跑(⛔ 别手写变异脚本 —— 手写的今天栽了三次)
python scripts/judge_audit.py --audit scripts/selftest.py # 元体检:扫弱锚点写法
python scripts/judge_audit.py --mutate <被检文件> '旧文本' '新文本' -k <用例关键字>
# ↳ rc=2 = 变异没生效/等价(⛔ 作废,⛔ 不许当通过)|报红才算数|自动核对还原 md5
```
⚠️ **元规则表也会假红**:`--audit` 扫的是**写法**,分不清「引用教训」与「犯错误」
(实测把「自建夹具证明 glob 会漏」那条**教训本身**判成了错误用法)⇒ 误报要进
`FALSE_POSITIVE` 且**写清为什么**,⛔ 不许默默加。
## ④ 写沉淀 → 简明,**判据要点一个不许丢**
用户 2026-10-04 明令:「**沉淀的经验不要记成流水账,要简明扼要有效**」(**这条本身也是经验**)。
体检:`pitfalls.md` 47 条 **140 KB**,单条最长 **11 KB**;**我当天新写的两条各 3 KB** —— 比真复杂的 P0-41/22/23 还长 ⇒ **拿流水账充数**。
> **单条上限 6 KB。超了就是流水账**:论证过程、对比表格、逐条展开,⛔ 全删。
> **判据要点不许丢** —— 精简后必须**关键词对账**(长度达标但判据被删 = 更坏,假绿)。
⚠️ 精简的顺序:**先删论证 → 再压表格 → 最后才动措辞**;⛔ 别一上来就重写(会把判据改丢)。
## ⑤ 报结论前 → 四问
1. 这个数字是**现取**的,还是从文档/台账抄的?
2. 我判"不存在/没在跑"时,**问过程序自己了吗**(还是只 glob 了)?
3. 判据改完了吗,**基线绿吗**(不是"几条报红")?
4. 🔴 **我写的每个「会怎样」,都有读数证明吗?**(⛔ 拿不出读数的 ⇒ 删掉那句,
别让它"说得更像回事" —— **编出来的后果比原句更坏**。10-03 立,10-04 又犯。)
---
🔴 **读这份的时机**:开工前 | 报「已完成」之前。**其余时候问「为什么」才去 `pitfalls.md`。**