 xcsandClaude Fable 5
|
0e02bb9411
|
fix(task): 终态收尾不等蒸馏 —— 终止接口曾被模型调用吊 13-45 秒到报错
CI / ci (push) Failing after 10s
四单法证:finished_at 与蒸馏条目 created_at 差 13.2/36.3/43.4/44.6 秒。
finish 把终态落库并广播之后同步 await memory.distill(一次真模型调用),
终止路由与放行收尾拍(连带推进器租约)都陪着模型等。改后台跑:
封卷仍在前,失败照旧吞掉不掀终态;三测钉死,改前即 30s 超时。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 03:36:53 +08:00 |
|
 xcsandClaude Fable 5
|
3b9c559a47
|
fix(w05): 落账席那枚印章不再压住旁边的结论 —— 徽章按圈的内径收
用户:「评审放行与落账确认,中间这个有条件推荐这个 svg 挡住旁边的字了」。
在浏览器里量的账:徽章那一坨 .seal-core 139px 宽,而印章圈定死 112px —— 溢出 26px;
右边那句一句话结论从 603px 起,正好被压住。病根是徽章按自己的字宽撑开、又带着
white-space:nowrap 缩不了,而圈是定死的圆(place-items:center 只让它对称地溢出去)。
两条一起治:核心不许超过圈的内径(max-width:calc(100% - 16px));圈里那一枚字号收小、
去掉字距、允许折行(以后有更长的等级名就两行,圆里两行照样是圆)。
改完再量:核心 94px、圈内还余 9px、「有条件推荐」一行放得下、结论那段完全露出来。
验收法记一笔:视觉的账在**真 DOM** 上量 —— 离线渲一份真件挂本地服务,
浏览器里 getBoundingClientRect 前后各取一次,不在脑子里推。包内 +1 测(变异验证过)。
2.24.0 已装库。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 03:06:42 +08:00 |
|
 xcsandClaude Fable 5
|
4174c5f194
|
fix(w05): 调人预算提到 24;「一条都没点到」的打回不再整表重判
用户:「怎么直接最后落帐的步骤直接没了?」—— 那一单终态是 exhausted:结论审核连打回四次,
每打回一次配方就重发一张审核卡、每张 +1 humanCalls,第八次触顶,放行那一步再没机会出现。
屏上看着像「那一步没了」,其实是单子先被烧死了。
① 预算 8 → 24(用户当场定「那你就把预算提高」):常路只要 3 次(补数据 / 审核 / 放行),
而审核每打回一次就多叫一次人。授权面与资源面同一个数;测里改成「两处一致 + 下限 12」,
不再钉死某个具体数字。**这是配置不是机制** —— 机制上的正解是「人自己打回引出的那张卡
不算打扰」(他不是被打扰,是他叫的),已记 debt。
② 「一条都没点到 → 整表算被点名」当天上线、当天撤掉:他那句是「收口结论里面的推荐理由
改为非常不推荐」—— 说的根本不是某条参数,是收口那四格(本来就能在件上直接改)。
整表重判的下场:AI 拿这句话把 5 条参数的结论改成「不匹配」,每条依据都写着
「按审核人意见调整为不匹配:推荐理由改为非常不推荐」——一句与它们无关的话,改了五行。
现在点不到名就一条都不改,并照实说清怎么才办得成(点参数名 / 收口四格在件上改)。
重判与写回同批加「真点到了名」的前提,免得白烧一次模型。
验收:e2e w05 5/5 released、被拒 0,案例 0 四条断言全绿;2.23.0 装库核过(humanCalls=24)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 02:55:05 +08:00 |
|
 xcsandClaude Fable 5
|
3c563525f1
|
fix(engine): 那面「打不回」的旗在容器里被扔了 —— 手写字段清单第三次丢值,改成整包转交
用户:「评审放行与落账确认这一步的验收卡怎么还有重做??你没改上吗?」——
库里的卡确实没有那面旗:装配层算对了、release 转对了、契约也声明了,而**容器那个显式对象**
只转它点到名的那几样,`redoable` 没被点名就在这最后一关静默落地(编译不报、运行时无声)。
同一处已经吃过三次:①fields 写死成 [](验收报告只能看不能改)②blocks 漏一行(卡面块恒空)
③这次。那几行旁边就写着两条「少写一行就静默落地」的警告 —— 措辞治不了的结构治:
context 三样拆出去、**其余整包转交**,以后端口新增可选字段不改这里也到得了。
断言钉在最末端:试跑观测面的卡带上 redoable,e2e 断言「一路到了卡上」。
同批修另一种时序的卡死(同一夜第二次,停掉了一整个 e2e 案例):
**决策卡的回传不发事件、只调 wake**,而 wake 只翻停着的单子 —— 卡刚发出那一刻这一拍还在
running,它空转了一次;随后这一拍把任务 park 回 awaiting,再没有第三样东西会来叫
(实测:卡 02:06:13.250 发出、219ms 后被答,这一拍 .636 才收尾,停到 20 分钟超时)。
修:配方发卡收尾前再看一眼刚发的那张卡还在不在等 —— 已经答了就照实说「还在跑」;
只认这一张卡,别的「等外部回音」照旧是等,不会空转成热循环。
假端口同批改老实:发出去的卡默认就在等(从前发完卡还回「一张待答的都没有」)。
验收:e2e w05 5/5 released、被拒 0,案例 0 四条断言全绿(不摆重做 / 对话区说了话 /
点名要的结论落下去了 / 只动被点名的行);两处变异验证;契约变更 api-report 已刷新。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 02:36:53 +08:00 |
|
 xcsandClaude Fable 5
|
e474275b28
|
fix(w05): 复核轮审核人说了算,并把这一轮改了什么说进对话区
用户第二次实测:「重做还是没有修改掉内容」—— 他写「静态电流结论改成不匹配」,而两颗料的
静态电流都是 5mA,AI 搬出第一轮那份规矩里的第 3 条(硬约束不因措辞变成 match)把他顶了回去:
evidence_note 白纸黑字「维持上一轮 match…硬规矩要求按实际值判定,不能因措辞改变结论」。
**行的范围这次是对的**(只把那一条交给 AI、只写回那一条),错在**谁说了算**。三处想岔了:
① 那条规矩管的是它自己判的时候别被措辞带偏,不是用来否决审核人的;
② 方向也反了 —— 它守的是「不许把不满足说成满足」(危险方向),而他要的是收紧结论;
③ 更根本:审核人在件上本来就能亲手改任何一条四态,AI 在重判这条路上顶回去,
等于同一件事在两条路上给出相反的答案。
改:复核指令明写这条覆盖 —— 他点名要什么结论就落什么,不要顶回去;落的同时 evidence_note
记两句「按谁的意见」+「数据面是什么」,下一个人回看能一眼分清数据判的还是人定的。
同批(用户接着提:「需要把 ai 的修改意见通过右边 ai 聊天窗口展示出来,不然都不知道发生了什么」):
复核完在对话区说一句「按你的意见复核了 N 条 —— <参数名>:<判断依据>」,摆的是件上那一行
自己的话,不另编一句。**它必须排在卡之前** —— 发了卡这一拍就收了,排在卡后面的 say 要等
下一拍才跑:原来那句「差异结论已送审,请核对」实测正是在人答完之后才出现的;而且它与卡自己的
ask 本来就是同一件事,一并退役。
验收:e2e w05 5/5 released、被拒 0;案例 0 三条断言全绿 ——
「复核那一轮在对话区说了话」「打回点名要的结论真落下去了(使能阈值 = conditional)」
「打回只动了被点名的那几条」。包内 +2 测。W05@2.21.0 已装库。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 01:57:52 +08:00 |
|
 xcsandClaude Fable 5
|
cec19adc85
|
fix(engine): 打不回的验收卡不摆那颗钮 —— 全 auto 的放行步没有模型能接住那句意见
用户:「评审放行与落账确认这一步的验收卡不应该有重做的选项,因为这里都没有接入 ai」。
W05 的 T_release 整个由配方跑完(guide 是空串,不问模型),件又是只读的 ——
打回之后没有任何东西能接住那句意见:配方只会原样再提交一次,撞在「打回之后台账没动过
就不许再提交」那道闸上,连撞两拍落成一张「连续撞在同一条判据上」的兜底卡。
一颗按下去只会把单子推进死胡同的钮,不如不摆(墙要配路;没有路就别立那扇门)。
· 契约:AcceptanceWorkOrder.redoable(不写 = 打得回,老卡老行为);
· 装配层按放行那一步的声明现算 —— releaseRedoable 纯函数(有 auto 且 guide 空 → 打不回;
半 auto 与模型驱动照旧打得回,那儿真有模型会读意见),与 decisionCardFace /
executionCardVariant 同一种做法、同一个测试位;
· 卡面收起理由框与那颗钮,换一句真路:「这一步只落账,退不回上一步 —— 有异议就别确认,
去终止这一单重开」;
· **服务端才是门**:redoable:false 的卡收到非 pass 的回传当场拒(redo-unavailable),
直调 API 绕不过;拒回把真路指出来。
S3 结论审核那张审核卡不受影响 —— 它的重做真会带着意见重判(昨夜那一轮)。
测:card-rules 3 条 + releaseRedoable 4 条,两处变异验证;e2e w05 5/5 released、被拒 0。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 01:34:16 +08:00 |
|
 xcsandClaude Fable 5
|
8314148ebc
|
fix(w05): 重判的行由确定的一侧圈 —— 打回点名工作温度,不许去改静态电流
用户实测:「我打回让修改工作温度的结论,给我改了静态电流的结论」。库里的证据一字不差:
工作温度它没改(还给了理由:候选值 1℃ 远窄于 -40~+85℃,硬约束不满足 —— 这半截是对的),
而没人问过的静态电流被它从 soft_mismatch 翻成 match,evidence_note 里却写着「维持原判」。
根因不是提示词不够严,是**整表交出去、整表写回来**:没有任何东西限制它只动被点名的那一行,
而「我只改了那一条」这句话本身也出自它嘴里。规范 §4.6 纪律一(行由确定的那一侧决定,
不由 AI 决定)—— 昨天刚加的重判轮自己栽在这条上。
S3 复核轮两笔变四笔(全部只在 case_redo_note != "" 那一轮跑):
① 圈范围:按字面点名(contains,与基座给模型摆的「意见点名对上了哪几行」同一种认法)标
named / kept(明细表新增 redo_scope 列);
② 兜底:一条都没点到(意见说的是整批)→ 整表算被点名,读上一笔刚写下的 tally,不重算;
③ 重判只喂 named 的行 —— 没点名的行 AI 连见都见不到,自然改不着(也省 token);
④ 写回也只写这几行;模型漏答某一条时 else 兜回它上一轮的值。
同批修一条挡了两次路的老毛病(昨夜刚记 debt,今晚又撞停、还卡住了我自己的验证):
人答得比发卡那一拍收尾还快时,回传被判 stale、wake 又被那一拍的 park 覆盖,单子停在
awaiting-event 再没人叫醒。deliver 判了 stale 照旧不跑这一拍,但把停着的单子拨回 running。
验收:e2e w05 5/5 released、被拒 0;案例 0 新断言「打回只动了被点名的那几条,其余行一个字没变」
真跑通过(途中逼出脚本自己的坑:放行会清空草稿层,快照得留在放行之前);
模型调用 案例 0 = 2 次、其余 = 1 次。四处变异验证。W05@2.18.0 已装库。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 01:17:09 +08:00 |
|
 xcsandClaude Fable 5
|
4d2c3657f9
|
feat(w05): 重做的意见交回给 AI 重跑那一步 —— 不再只是把派生列重算一遍
用户:「唯一调用 ai 的这一步,使用重做后是否没有将重做原因带回去重新让 ai 重跑这一步?」
确实没有:S3 那一轮只跑三笔纯投影重算,人写的那句话除了留痕之外无人读 ——
AI 判过的四态一个字不会变,除非他自己在件上逐格改。
平台:引擎把「人这次打回写了什么」注给配方(`case_redo_note`)。
· 下划线不是 case: 前缀 —— S-FEEL 的名字不许带冒号,而它最要紧的用法就是当 when 条件用;
· **没打回也永远绑着空串**:未绑定的名字 `!= ""` 求值为真,不绑就等于那几笔每一轮都跑
(拿真 @sfeel 钉了这条,桩也照真语义写,否则钉不住);
· 静态审认这个名字 —— 它当场拦下过一次未登记的引用,这道门做对了事。
W05@2.17.0:S3 多两笔,都钉在 `case_redo_note != ""` 上 ——
带意见重判(入参多带上一轮四态/影响/依据/UNKNOWN 去向 + 他那句话;判法与第一轮同一份
ASSESS_RULES,后接复核纪律:没被点到、也确实没判错的行原样带回,别趁重判把人改过的冲掉)
+ 判完落回明细(与第一轮同一笔投影,只多一个 when)。判法、出参形状、落明细抽成三个
共享常量,S2 与 S3 共用 —— 各写一份早晚分叉。
验收:e2e w05 5/5 released、被拒 0;案例 0(先点名驳回、再通过)模型调用恰 2 次,
其余四例仍是 1 次 —— 没被打回就不多花一次模型。auto-runner 3 测(含变异验证)、包内 +1。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 00:33:23 +08:00 |
|
 xcsandClaude Fable 5
|
f5435f4c9c
|
fix(engine): 人点「重做」不是「办完了」—— 打回即重开一轮,不再一路推到放行
用户实测:「我重做后怎么直接推进了?不应该是重做刚才那一步吗?」那一单的轨迹逐条对得上:
审核卡发出 → 人带意见交回 →「这一步已经发过卡,不再发第二张」→「自动收步:S3_review」
→ 下一拍发出落账放行的验收卡。意见落进了轨迹(还被 note-anchors 逐行对上了),
而再没有任何东西会去读它。
这条缺陷 2026-08-30 全分支终审已记录成 Important 2、并留着一条坐实病灶的测试,
连「半个修法会把单子卡死」都预判对了。照那个方向修完,两半缺一不可:
① 收步那道门认答复(answerSettlesStep:custom:(人没选任何选项、写了自己的话)与
约定的 reject 都不算办完;空答复照旧算「照原样确认」);
② 同一句判断也让 carded 让位 —— 幂等挡的是「同一问被重复发出去」,而人点重做正是说
「这一轮不算,改了再问我一遍」:配方重跑(该重算的重算)再发一张,日志里说一句
「人把这一步打回重做:<意见>」。
测:坐实那条改写成钉死修复后的行为(历史诊断原样留着);新增「重做但发不出新卡也不收步」
(这一条专管收步门那一半)与「通过照旧收步」;3 条纯函数测。两半各自变异验证。
e2e w05 5/5 released —— 案例 0 现在真的发出两张审核卡(先带意见驳回、再确认通过)。
顺带撞见一条独立的老毛病,已记 debt 未修:人答得比发卡那一拍收尾还快时,回传被判 stale、
wake 又被那一拍的 park 覆盖,单子停在 awaiting-event 再没人叫醒(手工拨回 running 立刻走完)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-09-01 00:03:33 +08:00 |
|
 xcsandClaude Fable 5
|
445aa5ef22
|
fix(w05): 验收工单的面孔在装配层被丢掉 —— 两头都有测,中间那一段把值扔了
用户实测:「你怎么给我发成了执行工单,我需要的是验收工单,然后标题那一块需要是
验收卡的那种绿色」。
一、面孔:engines.ts 发执行工单那一处是一句写死只认 'data' 的三目,配方递下来的
'accept' 静默丢掉 —— 对话区照旧摆「执行工单」。**配方那一头有测(variant 原样递出去)、
前端那一头有测(accept 该穿哪副面孔)、e2e 按标题驱动也全绿,唯独中间没有。**
修:抽成纯函数 executionCardVariant(与旁边 decisionCardFace 同一种做法、同一个测试位),
认 data / accept、拒 review、认不出的当没写;4 测变异验证过。
e2e 同批改**认面孔不认标题**(试跑观测面的 cards 补 variant,契约变更)——
标题是活动自己写的字符串,卡穿哪副面孔由装配层决定,那一次正是两者对不上。
二、颜色:件① 验收工单那一副整套强调色换成验收绿 #0aa294(令牌从 ACCENT_LEDGER
现改选择器得来,与件②③、对话区验收卡一处真源),题头那条写死的浅蓝渐变单独给一条绿的;
数据工单那一副仍是蓝。真渲染核过两副 class 与两套令牌。
验收:e2e w05 5/5 released、被拒 0(面孔断言这一轮真在跑);2563 测、四门禁绿;
2.16.0 装库。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 23:26:09 +08:00 |
|
 xcsandClaude Fable 5
|
ce72da77eb
|
feat(w05): 数据齐了也叫人一次 —— S1 改派只读的验收工单,件同一份、编辑钮收起
用户:「就算数据是足的也进入这个数据工单,就派发一个验收工单,界面和数据要和现在的
第一个数据工单一致,只不过把芯片卡片上的编辑按钮去掉,只展示不能编辑,然后把标题旁边的
数据工单改成验收工单」。
病根在引擎拍首那道 doneWhen 扫描:输入本来就齐的单,S1 的 doneWhen 第一拍就为真,
配方一笔都还没跑,这一步当场被收掉 —— 卡永远发不出去,人一眼没看过就进了 S2。
治法:CMMN 给 S1 标 manualActivation,那道扫描多一个门槛(worldTouched),次序变成
「配方发卡 → 人答 → 下一拍 doneWhen 为真才收」;doneWhen 仍是真门,只是不抢在人前面。
平台:执行工单第三副面孔 variant:'accept'(件只读、人只确认「确认无误」)——
与 mode:'acceptance'(submit 抬起来的收口验收,带打回重做)分清;三副面孔的判断
抽成纯函数 order-face.ts(有测),chat-bubbles 只摆。
活动:S1 两笔互斥的 card(carded 幂等保证一步只发一张)+ 案卷粘着的旗 order_kind;
一张件两副面孔 —— 题头/标题/页脚三处名字与卡角编辑钮按 v-data / v-accept 由样式表挑
(藏的是容器 .fabs,逐枚去盖打不完)。
测:引擎测钉死那一对(标了人工激活 → 卡发得出去、步不收;没标 → 步当场被收、卡发不出);
auto-runner variant 透传;order-face 4 条;包内 2 条(两笔卡 + 粘旗)、view 1 条;
两处变异验证。e2e w05 5/5 released、被拒 0、模型调用恰 1 次 —— 都在库那例摆的正是验收工单。
2558 测、四门禁绿;2.15.0 装库核过。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 22:44:00 +08:00 |
|
 xcsandClaude Fable 5
|
e47ce92702
|
fix(w05): 两颗料不能是同一颗 —— 起单这一刻立墙,因为路只在这里
用户:「创建活动的启动参数里面不应该能选到同样的两个芯片」。
查下来这不只是没意义,是**把单子做死**:sub_eval.part 的主键是 eval_ref+internal_pn
(role 不在主键里),S1 配方铸的两行撞成同一个主键、后一笔覆盖前一笔,两行收成一行 ——
sub_eval_part_exists_status_found = 2 永不成立,S1 收不了步,而件上那两行人加不出来
(行源 mine:,没有「+加一行」),唯一出路是终止重开。与「两格留空」是同一条链。
平台加互斥声明 x-distinct(契约 distinctGroup)——与 x-link 正相反:那个是引导,这个是墙。
· 前端:别的格占着的候选这一格不列(自己填着的那个永远留着,否则 select 当场变空白),
并说清是谁占了哪个;走「新增」自己写一个同样的 → 小红字 + 启动按不下去;
· 服务端 validateLaunchParams 独立拦(脚本 / API 绕不过),400 点名后填的那格;
· 「算不算同一个」= 去空白 + 不分大小写(launchDistinctKey,前后端同一把尺)——
只挡精确相等的话 lm2596s-5.0 照样进去,混一颗垃圾主数据出来。
W05 两格挂 x-distinct: 'part',2.14.0 已装库核过。
测:服务端 6 条 + 前端 8 条(含联动与互斥合起来的真形状)+ 包内 1 条,三处变异验证过;
四道门禁绿(2548 测)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 22:03:56 +08:00 |
|
 xcsandClaude Fable 5
|
8c5f3a7736
|
feat(activity-ops): 启动表单两格按芯片类型联动 —— 候选带分组键,先填的那格是锚
CI / ci (push) Failing after 10s
契约:launchOption 加 group/groupLabel(x-options.group 从字典表现读人读名)、
launchParam 加 linkGroup(x-link 结组);api-report 已随 --update 入库。
前端 launch-link.ts 纯函数管三条口径:锚摆全量、其余按锚的分组键收窄
(未标类型殿后一组,新增照走);锚粘着 —— 清空只解除收窄不换锚,人改得了主意。
服务端不据此立墙:combo 本就收候选之外的值,类型一致归 S1 收步判据
sub_eval_part_distinct_chip_type_id = 1(数得出来的门)。
W05 清单两格挂上 x-link: chip-type;文档同步。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 18:57:29 +08:00 |
|
 xcsandClaude Fable 5
|
04ec718a66
|
docs(w05): gate_state 开关列入快照
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 18:05:54 +08:00 |
|
 xcsandClaude Fable 5
|
228739eaca
|
fix(w05): 都齐了红条整条收起 —— 开关是案卷真数据 gate_state,不看那句话空不空
2026-08-31 用户:「没有必填字段不需要警告了,还差什么这个红色区域就不要显示」。
病根在一层机制之下:配方把 gate_reason 清成空串时,**空值按列归型不落笔**
(jsonb 合并保旧值)—— 那句话一旦写下就永远清不掉,红条亮过就灭不了。
治法:案卷加开关列 gate_state(tally open/clear,两个值都非空、两个方向都真写),
与发卡条件共用同一句判定(GATE_OPEN_WHEN 一处真源);红条挂 data-class-of=gate_state,
v-clear 整条收起(判断留在样式表);人补齐最后一格保存,quiet 拍照跑 project、
重推件,红条当场消失。空文本 :has(:empty) 兜底保留(首拍还没写过的形)。
107 包内(开关双向 + 一处真源两锚,else 侧变异红过)+ 定向 1109 测;
2.13.0 装库核过(开关/CSS/else=clear)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 18:05:53 +08:00 |
|
 xcsandClaude Fable 5
|
9412dd7aa8
|
docs(w05): 互换动画第二稿入快照
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:53:31 +08:00 |
|
 xcsandClaude Fable 5
|
68faeb4f50
|
fix(w05): 互换动画提到与卡同级 —— 三列网格中间留实体动画道,卡片相应收窄
2026-08-31 用户:「不要把这个动画做到背景板上,会被卡片覆盖;和卡片做到一级,
可以压缩一点卡片的大小」—— 上一稿的对向穿行点走在卡后,只在缝里闪现,基本看不见。
.dossiers 改三列网格(minmax(0,1fr) 76px minmax(0,1fr)):卡片各占左右列自然收窄,
中间 76px 是**谁也盖不住的实体动画道** —— ⇄ 徽居中轻呼吸,两枚信号点绕徽轨道对转
(此上彼下绕圈 = 两颗料换位),底下的虚线总线在道里露出来把两张卡接起来。
窄屏(<620px)卡片竖排,动画道随之收起。浏览器两帧相位实证在转;
105 包内 + 2531 全仓;2.12.1 装库核过(orbit/lane)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:53:31 +08:00 |
|
 xcsandClaude Fable 5
|
1de4ab9862
|
docs(w05): 第六轮入快照 —— gateWhen 条件档 / 量高可缩 / 互换动画
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:44:03 +08:00 |
|
 xcsandClaude Fable 5
|
c4219a7b7d
|
feat(w05+platform): 确认闸条件档 gateWhen —— 类型不一致不许确认;量高改可缩;卡间互换动画
2026-08-31 用户三连:
① 「提示两颗料不是同一个芯片类型…就不应该能写入并继续下一步」——
缺格闸只数必填空不空,管不了跨行一致性。平台加**确认闸条件档**:配方 card 声明
gateWhen(S-FEEL,只读基座读数)+ gateWhenSay,受理回传前在 submitGate 现算
(rows/missing/tally/distinct 全套读数按声明表现读),为假 400、拒回用发卡人那句话;
装包静态审与动作级 when 同一套审;评估不出的条件不成墙(坏表达式装包就拦)。
W05 钉 parts_profile_distinct_chip_type_id <= 1 —— 钉 profile 本表(草稿现读零滞后;
钉 sub_eval.part 那份要等配方 tick,人存完就点确认会被误拦),profile.chip_type_id
加 distinct 声明。e2e 案例 2 的空手探针从此吃的就是这道闸。
② 「页面底部没东西还能向下滑一截」—— ViewContainer 量高从
max(documentElement.scrollHeight, body) 改 body 优先:documentElement 以 iframe 自身
高度为下限,内容缩回后它缩不回去,量高**只涨不缩**(参数编辑态把卡背拉长过一次,
底部从此留一截空白滚动)。body(margin 0)才是内容自己的高。
③ 「两张卡片中间做出可替换的动画」—— 单点单向信号换成**对向双信号点**(左右互穿,
走在卡后、只在缝里现身)+ 中央 ⇄ 徽轻呼吸 —— 这界面是判「可否替换」的,动画说的
就是这件事。reduced-motion 全静。
测:契约 gateWhen 解析 + runner 透传(变异红)+ conditionGateOf 3 例(含坏表达式不成墙)
+ steps/activity 锚;2531 全仓四门绿;2.12.0 装库核过(gateWhen 入库/swapfx);
:8787 已重建重启。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:43:08 +08:00 |
|
 xcsandClaude Fable 5
|
7515885afa
|
docs(w05): 第五轮入快照 —— scopedTargets 按卡编辑 / 顶条合并点名
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:01:40 +08:00 |
|
 xcsandClaude Fable 5
|
26db6c685b
|
feat(w05): 按卡独立编辑 + 缺项点名并进顶条 + 区序换回 + 类型层叠图
2026-08-31 用户四连:
① 「各自编辑各自的部分,不要做联动」—— 平台新增 scopedTargets(ui-kit):开合作用域
跟着触发钮走,三档 —— 钮在本地址宿主的行里→只这一行(A 卡的笔只开 A 卡);钮在别的
宿主的行里→行内属于本地址的宿主(这张卡的卡背);外部闸行→全宿主(老行为,② 的闸
不受影响)。收值与保存不随作用域收窄(collect 仍按地址全量,「只写真改了的行」在
服务端把关)。编辑态/锁面/笔盘显隐 CSS 全部改成按卡(.dossier.on);同地址同时只开
一张卡(笔在别卡编辑中自动隐去,快照键按地址,双开会互相踩)。2 测 + 变异验证。
② 逐块「还差 N 行必填」红带撤下,点名并进顶部「还差什么」—— 同一批基座读数
(_missing/_missing_keys)在顶条出两行子行,数值 0 自己消失;gate_reason 改口。
③ 比对基准与芯片档案区序换回(基准在前)。
④ 比对基准换「层叠双封装」SVG(后面那枚淡出成剪影 —— 一类而非一颗),不再与芯片卡
共用同一枚封装图。
测:ui-kit 35(scoped 2 新,变异红过)+ 包内 105 + 2528 全仓;2.11.0 装库五探针核过
(合并条/无旧红带/类型图/按卡 CSS/基准在前);浏览器实测 XL 卡独自翻背进编辑、LM 卡纹丝不动。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 17:01:06 +08:00 |
|
 xcsandClaude Fable 5
|
05ebecb541
|
docs(w05): 第四轮入快照 —— 笔↔软盘 / 只选不建 / 浅蓝题头
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 16:42:10 +08:00 |
|
 xcsandClaude Fable 5
|
51914292dc
|
feat(w05): 数据工单第四轮九连改 —— 笔↔软盘卡角编辑、只选不建、浅蓝题头、镜像修数字
2026-08-31 用户一次点齐九件,逐条落:
① 两行编辑闸退役 → 卡右上角笔(开当前这一面的编辑)↔ 软盘(保存)+ 叉(放弃);
按钮就是平台的 data-edit-open/save/cancel 触发器,快照/取消机制原样,按面显隐全在样式表。
② 保存一瞬间下拉变数字 → ui-kit mirrorTwins:下拉镜像**选项文案**不镜 value,并把
selected 属性拨到人选的那一项(守卫 CSS 与取消回显都认它)。2 测。
③ 参数输入框占位提示 → 渲染器 twinInputs 认 data-ph 落成 placeholder(平台小扩面,1 测);
值格「规格书上的值 · 查不到留空」,说明格「补充说明 · 选填」。
④ 参数说明空着不再摆「建议」→ 什么都不摆(连兜底破折号一起收)。
⑤ 区序对调:芯片档案在前,比对基准在后。
⑥ **新建芯片类型整条路移除**(只能选已有类型):抽屉与两张编辑表(种子行/Critical-1
修法/thead 回归网)退役,S1 配方 ②③ 自投影删除(八笔→六笔),gateLedgers 收窄到
profile+parameter,writes 同步,gate_reason 与指导书改口「只选不建」;样例改名
「候选缺库·建档定型」;e2e 案例 0 改走选既有 type_1(type_id=90 那套绕坑法随路退役)。
退役面的七条钉测按仓例 it.skip 留墓志铭(钉的是已移除的路径,不是放松断言)。
⑦ 题头回浅蓝渐变(原目标件那条 120°),深色夜景只留验收两件。
⑧ 对话区执行卡不再摆「参考信息」板块(basis 数据照旧随卡走,详情/归档仍有)。
⑨ 比对基准降噪:字段收成丸(名+硬软徽+单位),说明藏进悬浮气泡指上即看;
类型说明一行截断、悬浮展开。
测:ui-kit 33(mirror 2 新)+ 渲染器 61(ph 1 新)+ 包内 104(38 steps 重排)+ 2525 全仓
四门绿;2.10.0 装库 SQL 六探针全中(hd-light/软盘/data-ph/零表格/无 chip_type 编辑面/
gateLedgers 两张);:8787 已重启载入 data-ph 渲染器。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 16:41:14 +08:00 |
|
 xcsandClaude Fable 5
|
f6c8dccb4f
|
docs(w05): 第三轮入快照 —— 去表格化翻面卡 / 多宿主收值
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 15:37:28 +08:00 |
|
 xcsandClaude Fable 5
|
66be5bab6e
|
feat(w05): 数据工单去表格化 —— 翻面芯片卡(背面参数就地改)+ 基准瓷贴卡;平台多宿主收值
2026-08-31 用户第三轮:「界面上东西太多,做成几个区域;类型与核心参数字段做成和芯片卡
差不多的卡片;芯片卡与它的核心参数值合并 —— 点击翻转,背面写核心参数,悬浮要看得出能翻;
这个界面都不再需要表格来展示数据了」。
视图(主画面零表格,表格只活在新建类型抽屉里 —— 表单要加行,加行机制认 tr):
· 比对基准卡:类型丸 + 描述 + 字段瓷贴(名/硬软徽/单位/说明),与芯片卡同语言;
· 芯片卡翻面:正面主数据、背面本颗芯片的核心参数瓷贴(值必填红 / 说明建议橘)。
翻转纯 CSS(checkbox + :has,零脚本;checkbox 无 data-col,collect 不认它),
悬浮出「点击翻面 · 核心参数」提示丸 + 侧倾预告;主数据编辑锁正面、参数编辑自动
翻背面(reduced-motion 下瞬时切换);说明四条收进折叠。
平台(ui-kit ViewContainer,多宿主收值):「参数值印在每张卡背、就地可改」= 同一张表
的行分居两张卡 —— 一个地址一个宿主装不下。hostsOf(querySelectorAll)+ 收值/开合/
镜像/快照全部按宿主清单走;**格子只归最近的 data-edit 祖先**(不然卡背参数会被主数据
的闸收走并进主数据行 —— collect-nested 钉过的静默丢数据换脸回来)。嵌套 data-rows
不带 data-edit 时行为原样(两条旧钉测不动);addRow 仍单宿主(会加行的表都是单宿主)。
途中踩了三脚都逮回:CSS 注释里写了「data-col=」原文把 ②③ 的「全只读」字面断言踩翻
(选择器与注释都不许出现);.flip-cue i 特异度压过 .cue-back{display:none} 两枚提示
丸同时冒出;host 计数断言错把渲染后的数当模版源码的数。
测:ui-kit multihost 3 条(排除规则变异验证)+ 包内 110(翻面/无表格/瓷贴新锚)+
2528 全仓四门绿;2.9.0 装库 SQL 核过(flip/back_host/ftiles/cue/主画面表数=2);
浏览器实测:点卡真翻(背面 5 瓷贴)、参数编辑自动翻背双卡成表单、LM 全值回显。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 15:36:39 +08:00 |
|
 xcsandClaude Fable 5
|
794af58902
|
docs(w05): 第二轮入快照 —— 基准合一卡 / prune:'live' / 蓝图板底
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 14:48:23 +08:00 |
|
 xcsandClaude Fable 5
|
11375eaf93
|
feat(w05): 比对基准合一卡 + prune:'live' —— 类型与字段跟手,只显当前那一种
2026-08-31 用户第二轮:「芯片类型列表还是有问题…和核心参数字段不能合并成一个卡片吗…
两个芯片都选一样的就应该只显示一种,现在只会跟着变多不会跟着变少」+
「卡片下面那个容器黑色和页面背景不搭」。
① 比对基准卡(类型 + 字段合一,只读、跟手):不再列 mine: 草稿镜像(镜像里积着改选前的
旧类型 —— 撤行只在确认那一拍跑,F3 不许在人编辑时静默删行),按案卷锚
(sub_eval.case.chip_type_id,配方每拍现算)嵌套查字典:卡上改选、按保存,quiet 拍
project 照跑,这张卡当场换脸 —— 两颗料同类型时恰好只有那一种;没人选时空态指路。
新建类型收进 details 抽屉(零脚本),两张编辑表原样在抽屉里(种子行/加行机制不动)。
② 契约新增 prune:'live'(quiet 拍也撤):只给**人不会在件上加行**的表用 —— F3 防的是
「人刚加的行被撤」,人加不了行的表没有这个风险,而「改了类型,旧类型的参数行还摆在
屏上」是另一种撒谎。W05 参数骨架 ⑤ 改 'live':改选类型,参数行跟手换。
static-audit 的 prune×humanWrites 审计盖住 'live';规范 §4.6 纪律 5 补这条反面特例;
两档都跳过已落地的行并出声(skipLanded)。
③ 板底改浅色蓝图:深色容器与纸面色阶断裂(用户点名),换强调色极浅晕染 + 淡格线,
走线与信号点用强调色 —— 电路语汇留着,整页只剩 hero 一处深色。
测:契约 'live' 解析 + runner quiet-live 对齐(变异验证)+ 基准卡锚(变异验证)+
steps ⑤ 钉 'live';108 包内 + 全仓四门绿;2.8.1 装库 SQL 核过;:8787 已跑新构建
(watcher 又断,按应急程序手起 node dist/main.js)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 14:47:25 +08:00 |
|
 xcsandClaude Fable 5
|
5a7bb9b58f
|
fix(w05): 数据工单三病一改 —— 档案卡上桌、类型守卫、prune 跳过已落地
2026-08-31 用户实测三连 + 「设计只是头上加了动画,操作感没变」:
① 类型「自己给上了」:data-by 行缺键落回外层同名字段(debt I3),查名 pill 摆出
案卷锚(原 PN)的类型 —— 这一行根本没有的值。守卫认 selectCurrent 按行作用域写的
option[selected]:真选上才摆名,没选摆「待选择」。守卫必须单层 :has ——
:has() 里嵌 :has() 是非法选择器,整条被浏览器静默丢弃(第一版栽过,预览截图逮回)。
② 「品牌…点保存根本不会保存」:块① 行源是 sub_eval.part,那张案卷表没有主数据列,
renderTemplate 只认行作用域 —— 保存真落草稿,显示与孪生件永远空白(四步重写后的
潜伏缺陷:e2e 走 API、浏览器走查在 swap 版上,两条验证线都照不到,真人一填才现形)。
行源改 mine:parts.profile 本身(S1 ④ prune:true 恒有两行),行里天生有全部列。
③ 「改回同一类型,下面还是两个类型」:②③ 自投影为绕「已落地行撤不掉」的死锁
(2026-08-30 e2e 案例 2)特意不带 prune,没落地的陈旧行也跟着积在屏上。
治在平台:draftDrop 加配方专用旗 skipLanded(跳过并出声「N 行已随数据工单入库、
这一笔不清它」,不炸;模型那一路的硬拒一个字不变),②③ 恢复 prune:true ——
死锁与积行两头都收,debt「prune 与确认即入库的架构性冲突」销账。
quiet 拍仍不撤行(F3),清理落在每次确认工单那一拍。
④ 设计:块① 从 11 列横滑表推翻成电路板工作台 —— 深色板底上两张可就地编辑的
芯片档案卡(SOIC 封装 SVG + 角色/在库徽 + 类型行 + 双栏主数据格),编辑态整卡
变表单;三级占位(必填红/建议橘)上卡与参数值表;参数值表所属料号列加角色徽。
嵌套的角色/在库查表全只读(嵌套行里有 data-col 会被 collect 并成一条,测钉死)。
契约:loop-engine port draftDrop +skipLanded/+landed(纯新增,CONTRACT.md 已记,
api-report 已刷)。测:107 包内(三锚变异验证)+ auto-runner skipLanded(变异验证)
+ 2520 全仓;2.7.0 装库 SQL 核过(档案卡宿主/守卫/胶囊/S1 四笔 prune)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 14:12:10 +08:00 |
|
 xcsandClaude Fable 5
|
e2db7cfa01
|
docs(w05): 视图层重设计入快照 + 销 badgeCss 三处一份的债
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 13:06:10 +08:00 |
|
 xcsandClaude Fable 5
|
e18611006b
|
feat(w05): 三张工单件视图层重设计 —— 电路板夜景 hero + 精密检测报告版面,功能绑定逐项保留
用户定:中央工作区不要后台管理端的样子,按 C 端界面重设计,可加主题 SVG 与动画,
只保留功能。三张件换成「精密检测报告」语言:
· 题头深色电路板 hero,三张各一幕 —— 建档台(两颗料的芯片铭牌,由 mine:sub_eval.part
铺行,不在库虚线描边)/ 对决量尺(原 PN → 候选 PN + 推荐等级徽章)/ 落账席(慢转
印章环 + 一句话结论);信号点流动、晶粒呼吸、入场浮起,全部 transform/opacity,
prefers-reduced-motion 全静。
· 正文瓷白报告版面:丝印小标 + 简报卡 + 报告表格;比对光谱(四态分布带 + 刻度)、
落账三卡(大数)、四态计数丸。验收两件仍是用户定的验收绿 #0aa294,数据工单数据蓝。
· 设计系统收进 views/style.ts;目标件时代的 target-style.ts 退役(报表样式只此一处真源);
report.ts 里与 badge.ts 重复的 vtok/badgeCss 收归一处(销一笔 debt)。
功能一个不动:可编辑表的 DOM 结构逐字节保留(data-rows/data-edit/data-col/编辑闸/
种子行/主键钥匙/thead 后置/红带),机制规则(序号计数器、jc-row-static 显隐、
gate-bar :has(:empty)、overflow-x)逐字保留并仍被包内测试钉着。
修掉三个自审逮到的洞:kv 占位破折号只认直接子级(嵌套徽标被「—」盖掉)、光谱条里
不渗计数字、加行钮补 base display:none(从前没开编辑就露着)。
104 包内测 + 2516 全仓测绿;两条新锚(主题色/hero 外壳)变异验证各红过一次;
2.6.0 已装库并 SQL 核过(hero/主题色/种子行/vtok/零脚本逐件中)。
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 13:03:36 +08:00 |
|
 xcsandClaude Opus 5
|
1e3e5d40c6
|
feat(w05): 差异评估结论审核的收口四格可就地改 —— 判定归规则,话归人
用户:「差异评估结论审核这个界面的收口结论下面这 4 个字段也需要可以编辑」
这四格(推荐理由 / 差异摘要 / 替代风险 / 验证要求)原本是**故意**只读的,理由写在源码里:
「让人直接改这几格,等于让他给自己没做的判断盖章」。用户改了这个口径 —— 审核人对结论
有最终发言权。原理由留在注释里备查。
**光把格子打开等于没开**:`RELATION_PROJECTION` 每跑一次就按规则把这四列重写一遍,
而人在件上按保存会触发 quiet 拍、quiet 恰恰跑 project —— 人刚写下的话当场被规则值冲掉,
那是「让你改、改完被冲掉」,比不给改更糟(基座不记「谁写的」,配方分不清一格是人改的
还是自己写的,所以只能从配方这一侧下手)。
改法:S3 换用新的 `RELATION_RECOMPUTE` —— 与 `DIFFERENCE_ITEM_RECOMPUTE` 同一手法,
**只列主键 + recommendation_level**。patch 是稀疏的、DB 侧是 jsonb 浅合并,没列的列原样
留着,人改过的四格因此保得住。**推荐等级仍然重算且不容手改**:它是规则按四态分布算出来
的判据核心(件② 判据表 / 件③ 落账结论 / 出口谓词都读它),「人改四态 → 等级跟着变」
这条链不能断。分工因此是:**判定归规则,话归人**。
代价说在明处,件上那段说明已改口:改完四态,这四格不会自动跟着改口(否则刚写的话就没了)
——「四态改完,记得回头看看这四格还对不对」。界面不撒谎优先于自动。
件上:三句话走 cell(只读份 + 孪生输入),风险只读态摆徽标、编辑态换 select(枚举列不许
直显 low/medium/high),整块一个宿主一道闸,主键钥匙藏在 .rowkey 里但真挂 data-col。
.summary-box 不是表格 —— setOpen 对非表格容器把 .on 落在 data-edit 元素自身,CSS 按
.summary-box.on 写。
测:件上四格可改 + 一个宿主一道闸 + 钥匙在场;S3 重算笔四列一个都不许出现、判定仍在且
与 S2 共用同一条 when 链。四条变异各红一条(S3 退回用 RELATION_PROJECTION / 混进
difference_summary / 混进 risk_level / 判定不再重算)。pnpm gates 退出码 0(2495 测)。
包版本 2.3.0 -> 2.4.0。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 11:53:33 +08:00 |
|
 xcsandClaude Opus 5
|
e5ca9caaa6
|
fix(ledger): 草稿层按诞生序读 —— 保存过的行不再跳到列表末尾
用户:「点击保存后,列表里面的元素每次排列顺序都不一致,需要保持顺序的一致性」
病根在读:`select * from ledger.__draft ... order by updated_at`,而 `put` 的 upsert
分支每次都写 `updated_at = now()` —— **人保存了哪几行,哪几行就跳到列表末尾**;
同一批写下的行(配方一次 project 铺 7 行)`updated_at` 又完全相同,并列之间没有次级键,
PostgreSQL 返回什么顺序都算数(更新一行 = 旧版本作废 + 新版本插到堆尾,物理顺序本来
就会变),于是每保存一次屏上的表就重排一次。
加 `seq bigserial`:insert 那一刻取号、upsert 的 update 分支不碰它 —— 记的正是「这一行
是第几个被写下的」,而配方铺行的顺序就是人期望在件上看到的顺序(原 PN 的参数在前、
候选的在后,组内按字典序 —— 配方那么遍历的)。单键、严格全序、没有并列。
**列加在 DRAFT_DDL 里,不写迁移**:这张表由启动时的 DDL 自建(`container.ts` 调
`DRAFT_DDL`),`landed_at` 立的就是这个先例 —— 头一版我没读到那行注释,写了迁移 0036
又撤掉(journal 已回退;开发库那条孤儿记录无害,drizzle 只按 when 比大小)。
测:ledger 集成测试补一条(对真库),同批写下五行 → 顺序原样;改中间那行、再改另外两行
→ 顺序一个字不变;值确实写进去了(不是靠没写成功换来的稳定);新写的行排末尾。
变异验证:读序退回 updated_at,这一条真红(也证明它连的是真库,不是被 skip 掉)。
pnpm gates 退出码 0(2495 测)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 11:35:03 +08:00 |
|
 xcsandClaude Opus 5
|
2265ab7833
|
fix(desk): 保存那一拍对话区也别出声 —— 「在办事」不亮、say 落工作日志不上对话区
用户:「每次保存的时候右边也会出现 ai 推进中,然后会说一句话,能不能把这个也取消掉」
两处,同一个根:件上按保存会 wake 这一单(「保存即铺格」),runtime 被拨成 running。
① 右边那条办事条:`TaskChat` 的 `working` 只看 runtime === 'running'。它自己的注释
早写着「等人、等外部、已收尾都不算 —— 那时亮『工作中』就是撒谎:环没在转,是在等」——
save-wake 恰恰把「在等人」的单拨成了 running,把这条原则架空了。加 `!awaitingHuman(...)`
是**恢复**那句注释说的语义:有未办结工单 / 未回的卡就是在等人,哪怕 runtime 写着 running。
判断与工作区那一侧同一个函数。
② 那句话:quiet 拍只跑 project 与 say,于是人按几次保存,同一句交代往对话区说几遍。
对话区的纪律是**一轮一句,不是一拍一句**(2026-08-01):只有交出控制权那一拍的交代
摆到人面前;而 quiet 拍压根没交出控制权(人正对着卡填),算不上新一轮。
改:quiet 拍的 say 标 `internal`。压下去不是丢掉 —— `internal` 是两个投影共用的一个旗
(终审 I5/F2):`chat-projection` 据此挡住对话区,`task-log.machinery()` 对 `detail.auto`
开了例外,这一笔在工作日志里照旧看得见(话有插值时值的变化也查得到)。
测:quiet 的 say 标 internal 且工作日志仍在(3 条变异各红一条 —— 退回原样 / 反过来连
非 quiet 也标 / 连 auto 一起去掉;其中「反过来标」红的是既有那条「非 quiet 不标」,
两条互为护栏)。后一半(标了 internal 就进不了对话区)由 chat-projection 既有测钉着,
projectChat 没出模块边界,两半各钉在自己模块里、注释互指。
pnpm gates 退出码 0(2494 测)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 11:16:09 +08:00 |
|
 xcsandClaude Opus 5
|
c8988c912f
|
fix(desk): 有活等着人办就不摆「AI 正在推进这单」—— 保存后那一闪盖掉的是刚重推的件
用户:「在中央工作区修改了内容点击保存后,为什么会出现『AI 正在推进这单』的提示?」
因果链:件上按保存 → afterSave **先重推件、再叫醒任务**(「保存即铺格」,2026-08-29:
人选了芯片类型按保存,配方这才有机会把参数行铺出来;不叫醒格子永远不出现,08-30
走查在这儿卡死过)→ wake 把 runtime 拨成 running → 工作区的 running 判据排在 viewHtml
前面(2026-08-21:正在跑的这一拍要压过上一拍摆下的**陈旧**的件)→ 人刚填完按下保存,
屏上那份刚重推、含着他刚填的值的件被推进场景顶掉几秒。
08-21 那条规则的前提是「viewHtml 是上一次推的,可能陈旧」,而这条路上件比 running
还新,前提不成立;更要紧的是那一拍按「叫了人就等人」的闸(turn-runner,08-27)
**根本不问模型**,而那一屏写着「看材料、写台账、调工具都由它来」——一件没发生,
界面在撒谎。
修:running 那一支加 `&& !holding`。判断收进纯函数 `awaitingHuman`(未办结工单 /
未选决策卡 / 未确认录入卡),与服务端 humanTool.pendingCards 说的是同一句话 ——
**有未答的卡,服务端就不问模型,前端就不说 AI 在推进**,两侧同一条道理的两面。
没有任何卡在等人、AI 真在埋头算时,推进场景照旧摆(2026-08-21 要的正是它)。
6 条新测,四项各做变异验证(去掉工单项 / 决策卡项 / 录入卡项各红一条,恒真红两条 ——
恒真等于把推进场景整个废掉);pnpm gates 退出码 0(2493 测)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 10:59:33 +08:00 |
|
 xcsandClaude Opus 5
|
11e41b79c5
|
revert(w05): 数据工单退回换版面之前的旧版面(2.3.0),新版面存在 feat/w05-view-swap
用户实测新版面「感觉有点问题」,先退回稳定的旧版面,新版面原样留在分支上随时可切。
退法不是 reset —— 历史与素材都留着:report.ts / target-style.ts / activity.test.ts
三个文件逐字节恢复到 45cec82 的样子(已 diff 核对为零差异),平台侧的探针测试
(view-container-collect-div-rows / -nested / view-render-nested-editable)、目标件 html、
交接件文档全部留在主支 —— 它们钉的是平台行为与素材,不随这次退回作废。
版本号 2.2.2 -> 2.3.0 而不是退回 2.1.9:store.manifest 不传版本时按 installedAt 取
**最近安装**的那一条(不是版本号最大的),库里 2.1.9 那行的 installedAt 比 2.2.2 早,
同版重装又是 no-op —— 只有拿一个新号把旧版面装进去,注册表才真的换回旧版面。
CLAUDE.md 那条战果记录改口标注「已退回」并指向分支,原文留着当索引。
pnpm gates 退出码 0(2487 测;比换版面那版少的 10 条正是随 UI 一起退掉的新版面钉子)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-31 10:31:59 +08:00 |
|
 xcsandClaude Opus 5
|
1373eb4980
|
docs(w05): 入库换版面的目标件 —— target-style.ts 头注与机械抽取的 diff 核对都指着它
CI / ci (push) Failing after 10s
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 21:27:10 +08:00 |
|
 xcsandClaude Opus 5
|
f0789a0f13
|
docs(w05): 换版面收口 —— 终审 Minor(describe 头注漂移)修正 + CLAUDE.md 记战果
终审评审 0 Critical / 0 Important / 1 Minor:件① 的 describe 头注还描述换版面前的
「四块竖排」,断言早已测新结构 —— 头注改写为两轨道 / details 面板 / 瓷贴的现状。
CLAUDE.md 现状快照补一条:换版面三个机制账(宿主闭合标签截刀 / 行内 class-of 只认行
作用域 / data-by 回落真咬人)与全流程走查战果。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 21:26:36 +08:00 |
|
 xcsandClaude Opus 5
|
18de7653bd
|
fix(w05): 走查逮到的三处 —— 漏掉的 profile 闸 · 圆点投影搬到行外包裹层 · 类型查名加诚实守卫
① profile 的编辑闸与缺项红带在第一版 body 里整个漏掉:宿主在而闸不在,轨道打不开编辑,
XL 的必填永远补不上(Task 7 那颗「按不下去的确认钮」同款)。「四道闸」旧断言只查
data-edit 宿主没查 [data-edit-for] 闸,逮不到 —— 断言补强为闸 + 开钮都在。
② 行内的 data-class-of 只认行作用域(renderRows 末段 renderTemplate(…, one) 拿的是
行对象),作用域级读数在行内投不出 —— 圆点上的 data-class-of 是死属性,永远不亮。
投影搬到行外的三层 .pj 包裹层,样式表按后代选择器点亮;代价是两条轨道的圆点一起亮
(基座数本来就是表级的,分到每颗料头上的数基座没有,不编)。
③ data-by 在行缺键时落回外层同名字段(终审 I3 已记档的平台缺陷):XL 没选类型、
它的 sub_eval.part 行与 parts.profile 草稿行都没有 chip_type_id 键,查名 pill 借外层
摊平的 chip_type_id 摆出「DC-DC 降压稳压器」—— 档案卡与字段行都在替人表态。
守卫认 selectCurrent 按这一行自己的值写下的 option[selected]:行里没真选上,
名字不摆、摆「(未选择)」;判断全在样式表。
三条新钉各做变异(恰红一条、复原绿);pnpm gates 退出码 0(2497 测)。2.2.1 -> 2.2.2。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 20:51:04 +08:00 |
|
 xcsandClaude Opus 5
|
64fe4b43c9
|
fix(w05): data-rows 宿主换 <article> —— div 宿主被行模版里第一个 </div> 截断,档案卡当场串行
浏览器走查逮到的真事故:renderRows 的 ROWS 正则按宿主自己的闭合标签非贪婪截取行模版,
<div class="lanes"> 的行模版在 lab 那格的 </div> 处被截半,第二行的展开被浏览器塞进
第一行没闭合的标签里 —— 屏上「候选内部料号 / LM2596S-5.0 / 不在库」三样各来自不同的行。
A2 立的「行容器用行内不会再出现的标签」说的正是宿主(它自己用的就是 <article> 包 <section>),
我在计划里引了这条却把它按在了行标签上。.lanes / .pvgrid 两个宿主同病同修。
防再犯钉:照 ROWS 正则同款截取行模版,断言截出来的内容标签配平(截断必然留下没闭合的
标签)—— 第一版写成「不含宿主闭合标签」是空话:非贪婪截取本来就停在闭合标签之前,
那条断言永远不会红;换配平判法后,两个宿主各自退回 div 的变异都真红、复原绿。
pnpm gates 退出码 0(2496 测);包版本 2.2.0 -> 2.2.1(2.2.0 已装库,安装恒新增)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 20:39:42 +08:00 |
|
 xcsandClaude Opus 5
|
0f40bae0d1
|
feat(w05): input-supplement 照新目标件换版面 —— 两条轨道 + details 面板 + 参数瓷贴
照 docs/ss02-act-05-new/ACT-WORK-05-数据工单-PN主数据创建.html 重排数据工单那一屏,
绑定面与功能一个不动(四张台账、四道闸、两处加行、终审 C1 的 disabled type_id、
主键钥匙全部原样带走)。用户定的三件事:每颗料一条轨道(两条并列)/ 新增类型面板
每行四格(parts.type_param 那张表本就是,搬进 details 面板,独立区退役)/ 不动平台
每步骤卡自带一道闸。
P08_CSS 整段换成新目标件的机械抽取(嵌进 TS 后与源文件 style 区间 diff 零差异);
旧目标件自带的孪生件显隐规则(.jc-vcell/.jc-cell/加删行)改由 BIND_P08 承载,
focus 光环换成新 :root 里真存在的 --data-wash(旧名 --brand-wash 会被浏览器整条丢弃)。
步骤③ 不按轨道分两栏是机制不是偏好:bodyOf 单 querySelector、rowOf 认宿主直接
子元素 —— 嵌套形状会把一颗料的所有参数格并成一条记录(后写的覆盖先写的、静默),
探针用真实 renderView+collect 钉死(view-container-collect-div-rows.test.ts,前一提交)。
瓷贴单块平铺,主键钥匙收进 .rowkey(display:none 但真挂 data-col)。
目标件脚本驱动的状态全部无脚本翻译:保存即铺格顶掉「选类型即时加载」、details 顶掉
.newtype.show、步骤圆点按基座数点亮(_missing 的 v-0 / distinct 的 v-1)、类型不一致
护栏红带按 sub_eval_part_distinct_chip_type_id 的 v-2 档现身;gateprog 进度条如实退掉
(分母不是基座现有的数,编一个就是界面撒谎)。
活动自测 62 -> 72(8 条新钉逐条变异验证:恰红一条、复原即绿);pnpm gates 退出码 0
(2495 测)。包版本 2.1.9 -> 2.2.0(安装恒新增)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 20:29:41 +08:00 |
|
 xcsandClaude Opus 5
|
e38631224a
|
test(w05): 数据工单嵌套 data-rows 探针 —— 钉死 collect() 的并行行为,平坦形状是唯一能用的路
W05「核心参数值」想做成外层按候选料分组(<section>)、内层铺参数瓷贴的嵌套 data-rows 版面。
用真实渲染管线(renderView)产出 DOM 后喂给真实 collect() 实测:rowOf() 爬到 host 的直接
子元素时只能爬到候选料的 <section>(瓷贴与 section 之间还隔着内层 data-rows 留下的一层
<div>),于是一颗料的多个参数瓷贴被并成一条记录、后写的列覆盖先写的,悄悄丢数据 ——
证实预读判断(嵌套 = 并行),用两条断言(记录数 2 非 6、input_voltage/output_voltage 两条
参数在输出里完全消失)钉死,并用四条变异验证(候选数变 3→段数跟 / 摘一整段→记录数跟 /
摘主键 data-col→字段消失)确认断言真的在读结构。
同时钉平坦退路形状(瓷贴直接是 data-edit 宿主的子元素,data-rows 不分料铺):collect()
按瓷贴数返回记录、互不覆盖,行容器换成 <div>/<li> 均成立(现有测试全是 <tr>,没人钉过
非表格行容器)。
renderView(apps/api,tsconfig.node.json)与 collect()(packages/ui-kit,tsconfig.web.json:
jsx react-jsx + DOM lib)不能进同一个测试文件——depcruise 放行,但 typecheck 真红
(TS6142: ViewContainer.tsx 用了 JSX,tsconfig.node.json 没设 --jsx),两侧拆开、
中间用同一段渲染输出的 HTML 字符串接力(两处注释互相点名,防副本漂移)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 20:22:38 +08:00 |
|
 xcsandClaude Opus 5
|
4076621e04
|
docs: 交接件 —— input-supplement 换版面的设计与前提(为上下文压缩而写)
用户已批准的 bounded 改动:把 S1 数据工单那一屏的视图层换成
docs/ss02-act-05-new/ACT-WORK-05-数据工单-PN主数据创建.html 的版面,绑定与功能不动。
用户已定三件事(压缩后不必再问):两条并列轨道 · 新增类型面板每行扩四格且去掉独立字段表 ·
不动平台每步骤卡一道闸。
文档里落了压缩后会用到的全部事实:目标件结构、现有件四个片段的行号与绑定、
P08_CSS 的位置、ViewContainer 的 editable/bodyOf/addRow 机制、gateLedgers 四张表、
必须留着的终审 C1 修复(那个 disabled 的 data-col=type_id)、
以及一条要先验证再往下写的风险(步骤③ 两组瓷贴共用一个宿主时 cellsOf/rowOf 能否正确归行 ——
bodyOf 只找得到一个宿主,认错会把两颗料的参数值混成一行)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 19:32:15 +08:00 |
|
 xcsandClaude Opus 5
|
45cec82984
|
fix(w05): 终审两条 Critical + 地基缺陷的另一半 + 文档与欠账收口
**C1 新建芯片类型会改写既有字典行(共享主数据被静默污染)**
链条逐行复核成立:件上种子行漏挂 data-col → barred 与 isSeq 双保护同时失效
(isSeq 那条是因为 Task 7b 把 type_id 从 integer 改成了 text)→ 落进「全表一致」,
而 H35 的自投影恰好保证这张表只有一行 → 人新建的类型被认成既有 type_id=1 →
确认时随范围放行把既有字典行改名并落进正式表,屏上只说「改了 1 行」。
三条各自成立的裁定叠出来的静默污染。
修法:种子行改成 disabled 的真实 <input data-col=type_id>(desk.ts 零改动),
格子里摆「由系统生成」——不能一声不吭地拿掉,那样人会以为这张档少了一格。
测试不止断言结果:另加两条用**真实 resolveRowKey** 重放病灶/修法两种 cells 形状,
直接证明因果机制。平台根治(全表一致应排除 auto 列)记 debt。
**C2 两个启动参数都选填 → 留空则整单永久无解**
gate_reason 说「在下面把两格补上」,而块① 没有加一行、也不在 gateLedgers ——
一句指向空气的指路。改为必填;第一档改口为唯一真无解的那条路径(两格填了同一个号)。
**I1 地基缺陷只修了一半:recipe.let 同样按对象键序求值**
与 fields 是一模一样的假设,同样住 jsonb 列、同样被 PG 重排;今天不炸只因 W05 那五条
互不引用,而 ADR-014 是给后续所有活动用的。新增 orderLets/letReferences
(把 {in:X} 视为依赖 —— 语义与 fields 不同,故单独实现),auto-runner 与静态审同步接入。
**I2 审核卡按「重做」照样收步推进** —— 坐实为真实平台缺陷(「卡答过了就收步」快道不看裁决),
并证明活动侧加选项救不了、chosenGuidance 那条也救不了(那是喂模型的提示词,
而这条快道存在的目的就是跳过模型)。按裁定只留复现测试,平台未改。
**I4** 同一堵墙撞第二次即发兜底执行工单交人 + 立监听(头一次软化留痕),
不再空转到 exhausted 而人无处可改。
debt +4(C1 根治 / modules→app / thead-after-tbody / data-by 落回外层),
并补写此前被两处引用却从不存在的「refersTo 传递闭包」条目。
文档:ADR-014:201「按声明顺序求值」改对(照它写配方的人会重犯本轮的地基缺陷)、
陈旧注释四处、spec 四处分叉逐条判断处置、端到端测试记录标为历史、
CLAUDE.md 纠正「新建类型端到端通了」那句(它没通过真人路)并更新版本与文档表。
包版本 2.1.9(已装,SQL 直查库内 version/required/gate_reason/视图 HTML 四项核实)。
pnpm gates 退出码 0(2476 通过 / 34 跳过);E04 92/92、I01 55/55 无回归。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 16:09:18 +08:00 |
|
 xcsandClaude Opus 5
|
9f5b1c99d3
|
fix(w05): S3 补一笔只重算派生列 —— 人改了四态,结论才跟得上
浏览器走查实测:件上承诺「你改动下表里任何一条四态,这五项当场重算」,
而把使能阈值由 mismatch 改成 match 保存后,同一行的 judgement_class 仍是
hard_mismatch、risk_level 仍 high —— 行内自相矛盾,结论纹丝不动
(仍「不推荐 / 高风险 / 1 项硬约束不符」)。
断链在:S3 复用的 RELATION_PROJECTION 算结论读的是 judgement_class 的 tally,
而 judgement_class 由 difference_status 在差异明细那一笔的 when 链推出来 ——
那一笔只在 S2。人改的 difference_status 没有任何东西把它转成 judgement_class。
当初不把那一笔放进 S3 是有真理由的:它的 difference_status 走 lookup:'result:items',
而 result: 只在 analyze 那一拍存在,在 S3 重跑会把人刚改的值抹成空。
修法:加 DIFFERENCE_ITEM_RECOMPUTE 作 S3 的第一笔 —— each(mine:…) 不 prune
(避开「已落地行不许 prune」),fields 只有两个主键列 + JUDGEMENT_DERIVED_FIELDS
(judgement_class / risk_level),**一列都不多写**,稀疏 patch 绝不碰
difference_status 与人可改的叙述列;排在 RELATION_PROJECTION 之前。
when 链提成 JUDGEMENT_DERIVED_FIELDS 一处真源,S2 与 S3 spread 同一个,
新测试用 toBe 断言引用相等(不是形状相同)。
**旧测试为什么漏掉**:w05-s3-review-recompute.test.ts 的 HUMAN_EDIT mock 在同一个
patch 里同时写了 difference_status 和 judgement_class —— **把系统本该做的翻译自己
先算好了**,那座缺失的桥就此被掩盖。现改为只写人真能碰的列(difference_status +
evidence_note),并加修前/修后成对断言。
变异验证两路都真红:①拆掉配方里那一笔 → 2/3 红,复原 → 3/3 绿;
②git stash 真 case-model.ts → steps.test.ts 5 条结构测试红,pop → 38/38 绿。
包版本 2.1.8(已装,SQL 核过)。pnpm gates 退出码 0(2454 测)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 13:27:33 +08:00 |
|
 xcsandClaude Opus 5
|
764dab342d
|
fix(w05): 三份件的机械抽样式补齐缺失 class —— 落账件同款会炸,提前拦下
浏览器走查实测:差异评估结论审核件里三个 <svg class="zic"> 撑成 946×946,
整份文档拉到 4625px 高,正文全被挤走 —— 人打开只见灰色巨块,没法逐条核四态。
根因:.zic{width:14px;height:14px} 只在 P08_CSS(数据工单那一段),而
difference-review 用的是 ACC1_CSS。ACC1_CSS / ACC2_CSS 是从目标件机械抽出来的,
report.ts:538 那句既有注释早已承认漏过一批(.jc-vcell/.jc-cell/…),补了几个,
这几个漏了。
按「一次查干净」逐个核三份件用到的每个 class,补齐:
· .zic —— ACC1_CSS **与 ACC2_CSS**(后者即 landing-confirm,同款会炸,走查下一步就会撞上)
· .note .done / .note .need —— ACC1_CSS 与 ACC2_CSS
· .kv-box —— BIND_LANDING
· .risk-badge 缺基座形状(只有配色没有胶囊盒子)—— 人工核对徽标家族一致性时发现,机械扫描漏网
新增自测:三份件用到的 class 必须都能在它自己那段 CSS 里找到定义 ——
将来谁再加一个没定义的 class 就变红。变异验证:删掉 .zic 那条真红,补回真绿。
另:嵌套 data-by 的「只读态显示了并不存在的值」已坐实为渲染器侧机制
(递归合并时行内没有该字段会落回外层同名字段),加 it.fails 钉住,平台修法另议。
包版本 2.1.7。pnpm gates 退出码 0(164 文件 / 2450 测)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 12:51:14 +08:00 |
|
 xcsandClaude Opus 5
|
9e2f7387b2
|
fix(loop-engine): 有卡在等人交回时配方写下新行,收拍前重推画面 —— 短路收拍从不推帧
浏览器走查实测(ACT-WORK-05 数据工单):人给候选料选好芯片类型、按保存,S1_inputs 的
配方在 quiet 模式下铺出 7 行新参数骨架、红带同步点名要填这 7 格,而 `runTurn` 的
「叫了人就等人」分支(spec §5.4)写完就直接 `return { status: 'awaiting' }` —— 真正的
「推一帧」逻辑住在同一函数里更靠后的位置(action 循环之后 / `issuedCardId` 分支),
这条早退根本到不了那里。人刷新页面看到的仍是保存前那份服务端快照(件是渲好推来的,
重放不重渲),被红带点名要填的格子屏上根本不存在,走查到此卡死。
修法:quiet 分支里捕获 `autoRunner.run()` 的返回值,若这一拍真写下或撤掉过行
(`wrote>0 || dropped>0`)且当前在办的这一步声明了 `view`,收拍前调用同一个
`showView` 重推 —— 与 `issuedCardId` 分支「声明了画面才推」同一条纪律;quiet 模式
不迁移计划项状态,`runtime` 用的还是拍首那份,不会重犯 2026-08-23 那次「推错哪一步
画面」的错(这次没跨步,只是把同一步最新的草稿重渲一遍)。
回归测试用真 `createTurnRunner`/真 `createAutoRunner`(不手抄收拍逻辑),给共享 harness
加 `pushedScopes` 记录每次推帧的 scope,断言画面里真带着刚写的那一行(内容比对,不是
计数)。变异验证:git stash 掉修复后该测试从 157/157 变 156 passed + 1 failed
(`expected [] to deeply equal ['input-supplement']`),stash pop 后回到 157/157。
`progress.md` H49 记录过一个高度相似的怀疑:e2e 反复撞见的「答完卡不推进」(案例4×3、
案例3×1,advancing_until 全程为空、零报错)——两者终态日志的最后一行逐字相同
(`等人交回:数据工单… —— 这一拍不动`,task_memory 定格在同一条、之后再无记录)。
候选缺库类案例的两阶段表单(选类型→保存→配方铺出新参数格→还要再填)恰好依赖画面
重推来发现第二轮要填什么;这条早退不推帧能完整解释「零报错 + 永久卡死」。未另跑
e2e 坐实(任务明令不跑,浏览器里留着一单要用来验证),记为高置信度推断。
pnpm gates 退出码 0(2448 passed | 34 skipped,基线 2447 + 本次新增 1 条)。
E04(crm-relationship-coverage)92/92、I01(brand-content-toolkit)55/55,均 exit 0。
manifest.ts 里那处与本次无关的未提交版本号改动(2.1.5→2.1.6)未动、未纳入本提交。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 11:49:27 +08:00 |
|
 xcsandClaude Opus 5
|
8586f7dac8
|
docs(w05): 重写收口 —— 头注核正、字段说明按现状重写、规范补四条 auto 纪律、CLAUDE.md 记战果
Task 12 的非走查部分(浏览器走查卡在登录、归人工,不在本次范围)。
① index.ts 头注仍写着旧的「三条技能 + 五张模版」,重写后是 0 技能 3 张件,核正
(Ruling H25);包内其余「三条技能/五张/两枚工具/九步」等提法逐处核过,均为带日期的
「从…改成…」历史叙述,不是失实断言,未动。
② docs/数据域字段说明-W05.md 整篇重写(不是打补丁)。旧文档写的是重写前的十张表
(customer.profile/parts.document/demand.request 与 sub_eval 三张旧单据,本活动这次
重写已不再声明),现按 manifest.ts 的 declarations.ledger 逐表核对重写:9 张表、66 列、
20 人填列。写入者词表另定一套(人(件上)/AI(S2 唯一一次 analyze)/配方(project 算出来
的)/基座)——E04/I01 那套多轮 agent 编排的词表在这里说不清楚。逐个 data-edit 核对过
report.ts 才确认写入者归属:S3 的四态等列改成人在件上直接编辑(不再是「人写意见→AI 改」),
sub_eval.part/case、substitution.relation、validation.record 四张表没有任何人工编辑
入口、全部配方算。顺手核了 seed-mvp-data.ts 的基线物理列,注了每张表里这次重写不再
声明的旧列(旧九步版本留下的痕迹),并记下 type_id 这条身份链路是本仓唯一一处
integer→text 加宽声明。
③ docs/活动开发规范.md §4.6 补四条纪律(六条→十条):jsonb 会重排 fields 键序、字段
求值改按依赖拓扑排序不能拿书写顺序当依赖顺序;跨笔顺序仍要自己排(一笔读的是另一笔
写出来的数就要排后面);两笔方向相反的依赖拆两笔写中间夹子表;gateLedgers 同时管
「闸要求非空」与「确认时并进正式表」两件事,漏想一半会悬空引用或永久卡死。§6.5 补第 9
条「测试要能咬住」(镜像测试与读真文件测试证明的是两件事;变异测试本身可能是空的;
能 import 真东西就别手抄)。§7 补两行排障(reset-runs 前先捞证据;dev 进程可能在跑
几小时前的代码,连 tsup --watch 监视进程本身都可能已死)。八条内容逐条去任务报告核过
原始事故与提交号,没有凭印象转述。
④ CLAUDE.md 现状快照追加一条:四步全 auto、两张类型字典、三张件、退役清单;e2e 三例
released 被拒 0(候选缺库/都在库/原PN缺库,模型调用恰 1 次);类型不一致那例撞上已记
debt.md 的 prune 死锁,两颗都缺库那例卡在「答完卡不推进」、真因未定位如实记录;
judgement_class 7/7 逐行核对通过;jsonb 键序地基缺陷的发现与修法(拓扑排序,6636abf)。
顺手核正文档地图里 W05 那一行的旧字段数(十张/110列→九张/66列,与②同步)。
pnpm gates 退出码 0(2447 passed | 34 skipped),与 Task 11 最后一轮记录一致,无回归。
未碰 manifest.ts 里那处与本任务无关的未提交版本号改动(2.1.5→2.1.6,疑似上一个卡在
登录的浏览器走查会话留下)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 11:22:56 +08:00 |
|
 xcsandClaude Opus 5
|
d420284887
|
feat(w05): S2 关系表拆两笔写、S1 自投影类型字典、e2e 跨案例隔离 —— 真跑逼出来的三处
① S2:substitution.relation 拆成两笔同主键覆盖写,中间夹 difference_item ——
difference_item.substitution_relation_id 声明了 refersTo(要求父行已存在),
而 relation 的等级/风险/摘要要读 difference_item 的 tally,两张表互相要对方先写。
② S1:总把选中的那一行 chip_type / type_param 原样投一遍(幂等),
于是这一单的草稿层永不为空 —— parts.chip_type 得以放回 gateLedgers,
新建的类型随「数据工单确认即入库」一起落进正式表,不再留悬空引用。
(此前把它删出名单只顾了闸、没顾落地:引用它的表落了地而它自己没落。)
③ e2e:案例 0 之后做跨案例隔离(withDb + isolationCleanup,不论成败都跑、
失败只告警不拖垮整套)—— LAND_MASTER=1 之下案例 0 为满足 distinct=1 必须把
共享的原 PN 转挂新类型,那一改会落进主数据,案例 1 共用同一颗料就看到假的类型不一致。
断言 expectRevised 改名 expectFinalValue:「点名驳回归属」那条对 W05 不适用
(四步 guide 全空、唯一的 agent 调用发生在意见之前,没有轮次会读到那条观察)。
包版本 2.1.5。pnpm gates 退出码 0。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 07:06:52 +08:00 |
|
 xcsandClaude Opus 5
|
6636abfc39
|
fix(auto): 配方字段按依赖拓扑求值 —— jsonb 会重排对象键,声明顺序靠不住
真跑 e2e 逼出来的地基缺陷。活动清单存在 sys.activity_package.manifest 这个
**jsonb 列**里,而 PG 按「先短后长、同长字典序」重排所有嵌套对象的键。
auto-runner 原先逐字段**按声明顺序**求值、后面的字段靠 ctx.computed 看前面的值 ——
顺序一乱,依赖就断,而且**一声不响**。
W05 实证:judgement_class(15B)被排到它依赖的 difference_status(17B)前面,
求值时后者恒 undefined、when 三级全落空,摔进 constraint_type 兜底档 ——
7 行差异结论全判错,与实际状态无关;而 difference_status 走
lookup:'result:items' 不依赖字段序,所以它是对的。「一个对一个全错」由此而来。
隔离测试复现不出来,因为它直接读 dist/manifest.json,从不经 DB 往返。
修法:字段求值改为**依赖拓扑排序**(Kahn),不用迭代到不动点 ——
后者的数值收敛判据会漏掉「A/B 互相 when 为假、恰好在错误状态下稳定」这种
结构有环却数值收敛的配方;拓扑是结构性判定,不会假阴性。
通用图算法 topoOrder 提进 @utils(契约新增,非破坏);
AutoExpr→依赖名提取因 L4 不能 import L5,在 loop-engine 与 activity-registry
各留一份并互相指路。真正的环由装包静态审当场拒装 —— 不兜底,兜底正是这次出事的形态。
变异验证:git stash 只撤 auto-runner.ts 那一处,两条新测试当场变红,
数值与专查报告的 SQL 转录逐字吻合(使能阈值/match 被误判 hard_mismatch/medium);
stash pop 后 37/37 绿。E04 92/92、I01 55/55 全绿;全仓 2447 测通过。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 07:05:48 +08:00 |
|
 xcsandClaude Opus 5
|
67fa226380
|
fix(w05-e2e): 登录优先级倒过来(服务账号优先)+ 候选缺库案例改两阶段填表 —— 五案例仍未跑成
Round 2 逼出的两处修:
①`login()`/`DIRECT_BEARER` 从「旁路无条件优先」改成「服务账号三变量全齐才是正路,
JCAI_E2E_BEARER 只在缺席时兜底」——实测踩过:.stable/env 留着一枚已过期的真人 token
时,脚本会悄悄绕开新配好的服务账号,五案例全部倒在起单前的 401(未派发,SQL 核过
0 个 testbed 任务被创建)。
②案例 0(候选缺库·新建类型)随 Task 7b 的 parts.chip_type.type_id 从 integer 改
text/auto 重写成两阶段 customFill:先铸自增 type_id、读回来再引用它写 type_param/
profile/parameter,与真人在浏览器里「先建类型保存再选它」同一个顺序。
装包已核实:part-substitution-assessment@2.1.1,六列 ALTER 到 text 全部成功(种子
数据完好)。跑前清理过一批与本次改动无关的旧模型(九步版,08-27)测试残渣
(XL2596S-5.0 在 parts__profile 里的假数据 + 连带 78 行)。
Step 4(五案例)仍未跑成——login() 修好之后卡在新的一处:e2e 服务账号
service-account-task-dispatcher 只有 workbench 端,没有 design 端(试跑起单
挂在设计端),ends=["workbench"],token 里没有 admin 角色。三轮试跑全部倒在
login() 里,没有一个任务被创建。需要人给这个服务账号加能开出 design 端的
realm 角色。
pnpm gates 退出码 0(2422 passed | 34 skipped)。
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
|
2026-08-30 01:22:19 +08:00 |
|