6.9 KiB
6.9 KiB
2026-10-06 工作日志(本工作区 ai1net-dsh-server)
承接
2026-10-05.md。本日主线:看板改名 + 队列按目标过滤(用户逐字驱动)+ 撤销上轮对agent-product的误建。
三十四、看板改名「检查程序」+ 队列按目标过滤(不再历史累积)
用户逐字(两条)
看板中 常驻程序 改为 目标检查,里面的队列 应该是随着目标的不是目标累积的- (答我反问,纠正我复述的"目标检查")
没有常驻程序的说法 ,改为 检查程序
⇒ ⚠️ 正名是 「检查程序」(⛔ 不是"目标检查")。我复述错了一次,被当场纠正。
一、改名:根因是「角色名 ↔ 运行形态」混成一个词(同族第三次)
- 病根:「常驻」是运行形态(
--supervise),不是角色名。把形态当角色 ⇒ 名字里没有"它是干什么的"。 - 同族前科(同一类错,别只记这一条):
- 2026-10-03:我把「上报」改成「常驻」,用户驳回逐字 「怎么又把上报 改成常驻了 常驻什么,不是 协作程序常驻吗」。
- 本轮:用户又要求把「常驻程序」改掉 ⇒ 同一个词第三次被嫌。
- 判据(以后选名先过这一条):名字必须答"这个位子负责什么",⛔ 不答"它怎么跑的"。
- 改的范围:只改用户可见文案(标题/tooltip/chip/说明区/
aria-label/peer 说明), ⛔ 代码标识符一律不动(prog/rt.prog/文件名)—— 改了会牵动判据与存储。
二、队列按目标过滤(这是真缺陷,非文案)
- 病根:
tasks.json只增不减 ⇒ 看板那格报的是历史累计,读者看不出「当前目标在跑多少」。 - 🔴 机制自己早就知道:
goalctl.py:577的「静默陷阱」注释逐字「判据不绑目标」—— 那次只警告没修(怕动存量数据)。⇒ 本条是同一病根的正面修法,⛔ 不是新发现。 - 修法(四处,缺一不可):
collabd.goal_fp()—— 目标指纹 =sha1(title)[:6](与goal_dir_name()同源 ⇒ 目标目录名尾部的-xxxxxx与指纹逐字相同,三处可对着读)。task_report()给新条目setdefault("goal_fp", goal_fp())—— ⛔ 只打新条目;存量不补(补 = 把历史条目标成"当前目标" = 伪造归属)。 ⚠️setdefault只写一次 ⇒ 同一条目后续上报不改归属(防"跑到一半换目标 ⇒ 整条倒戈")。board._queue(tasks, st, cur_fp)—— 只把goal_fp == cur_fp的算进total/by/open。- 无归属存量单列
legacy(看板显示「另有历史 N 件,不计入」),⛔ 不混进当前目标。
- 🔴🔴 指纹必须从形参
g现算(⛔ 不许读INBOX/goal.json):_goal_block()也渲染 peer 格(别的工作区的目标)⇒ 读本区文件 ⇒ 用本区指纹过滤对方台账 ⇒ 对方格队列恒为 0(跨工作区静默错,界面上看不出)。 ✅ 实测:vibe-product格fp=5d27fe(对方指纹)—— 若串区会显示本区的c8154d。 - 空指纹语义:
cur_fp为空(未声明目标)⇒ 如实把全部当legacy,⛔ 不假装"队列为空" (那是把"没有归属信息"说成"没有活")。 - ⚠️
cur_fp的插入位置踩了两次坑:① 插进字典字面量里 ⇒SyntaxError: ':' expected after dictionary key;② 插到build()的warn = []之后 ⇒ 函数归属错(_goal_block()的warn是形参、没有warn = []这行)⇒ 正解是_goal_block()内、return {之前、_lb = _labor(...)之后。
三、验收(都跑过,非声称)
selftest:PASS 97 / FAIL 0(改前 95/2);install.py --verify✅ 全绿;--manifest56 份/语法失败 0。_queue四情形单元验证全过:当前目标命中(total 4/legacy 3)|另一目标(total 1/legacy 6)| 空指纹(total 0/legacy 7)|无匹配(total 0/legacy 7)。 ⚠️ 第一版自己写错了期望值(把open当成 "pending+running")⇒ 实测open = pending+running+blocked+other⇒ 是测试错,不是代码错(差点误修代码)。- 看板重启后
board.json实测:本区fp=c8154d total=0 legacy=1;peer格fp=5d27fe。 ⛔board.py是代码改动 ⇒ 必须重启看板(只有board.html才是每请求实时读盘、不用重启)。
四、顺手修掉两处 selftest FAIL(都是我自己引入的)
- 技能里留了项目串:
goal_fp()docstring 写了工作区名/历史线名/goal.json的 id 值 ⇒ 判据「技能就是技能,谁用产生的文件放在他自己那里」报红 ⇒ 已泛化(留事实、去专名)。 pitfalls.md的 P0-86 重复了两份(3157 行与 3305 行,逐字相同,仅差一个尾空行) ⇒ 删后一份;并把留下的那份从 7.3 KB/密度 2.1 压缩到 ~5 KB(判据要点、变异表、教训一句不丢)。 ⚠️ 判据「经验不许写成流水账」的红线是超长 + 低证据密度(>6 KB 且 密度<4.0), 不是"长了就删" ⇒ 压缩时先保要点。
五、另一个坑:board.html 行尾被改成 CRLF(差点提交 1856 行纯噪音)
- 现场:
board.html工作副本 CRLF(1856 个 CR),而 repoHEAD版是 LF,core.autocrlf=false⇒git diff整个文件重写(3544 行)。 - ✅ 处置:按字节归一化回 LF 再提交(
b.replace(b'\r\n', b'\n'))⇒ diff 从 3544 行降到 386 行(真内容)。 - 🔴 判据(沿用既有铁律):行尾只信字节级(
b.count(b'\r')),⛔ 不看编辑器显示。 ⚠️ 提交前若见"整文件重写",先查行尾,别当成真改动。
六、提交
5dc6ced session-mechanism: 看板改名「检查程序」+ 队列按目标过滤(不再历史累积)
(4 files:board.html/board.py/collabd.py/pitfalls.md;⛔ 未推送)
三十五、撤销上轮对 agent-product 的误建(详情见 2026-10-05.md §33,此处只记结论)
- 用户令逐字:
删掉 让那个会话自己建立。 - 删了 4 项 + 1 项连带:
tmp/supervise-inbox/goal.json/交付物/任务图-会话协作自检.json/执行会话/目标-agent-product-3e3182//collabd-state.json的roles主会话登记/ 配置里的taskgraph指针(删载体要连"谁指向它"一起查,否则常驻每 10 s 刷Errno 2)。 - 备份:
ai1net-dsh-server/tmp/bak/agent-product-misbuild-20261005/。 - 交接姿态:常驻故意没重起(用户令"让那个会话自己建立")⇒ 我不再插手该工作区。