Commit Graph
13 Commits
Author SHA1 Message Date
xcsandClaude Fable 5 ffa1ef1076 件上按 ×:刚加的行直接拿掉,原有的行挂记号 —— 且记号要看得见(W05 1.4.2)
用户:「编辑点击再加一行后,点击旁边的叉没有反应」。两层病:
- 件:E04 那套 jc-row-gone / jc-row-new 的样式挂在它自己的外壳类下,W05 按目标件重做后
  表是 table.on,一条都没跟过来 —— × 按了类是切了、屏上没动静。补四条。
- ui-kit:刚「加一行」加出来的行按 × 也只是挂记号 —— 它从没存在过,挂记号再保存送出去的是
  一条「撤掉一行草稿里没有的行」,服务端只能回认不出。抽成 dropRow:jc-row-new 的直接移除,
  原有的行挂记号、再按摘掉;jsdom 钉两条。
浏览器在用户在跑那一单上实证:加行 1→2,× 后 1;原有行 × 一次挂记号、两次摘掉;取消回 1。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 13:42:35 +08:00
xcsandClaude Fable 5 fa27cef60e 数据工单只建名单上的料:拼出来的料号与在库的料号写下来都当场拒(W05 1.4.1)
用户在新一单上看到件上多出一行要人补的料号。查实:模型在数据工单里给一颗**不存在的**
XL2596S-ADJ 铺了空骨架 —— 库里没有、入参里也没有,是把两个候选的名字拼出来的;
件上于是多出一行、红带点名它缺品牌。存在性核对本身判对了(ADJ found、XL absent),
错在「判对了却多写了一行」—— 事实在模型手里,能判对也能写错。

两道门,都在写入那一刻:
- `parts.profile.internal_pn refersTo sub_eval.pn_check.internal_pn` —— 只许建核对表里核过的料号,
  凭空拼出来的当场拒(参数/资料两张子表的 internal_pn 本就引用 profile,随之一并拦住)。
- 契约新增对象声明 `createOnly`(平台侧,~25 行):标了的表本单只建不改,键已在正式表当场拒并指路。
  它守的是另一形(在库的料被当成新料重建)。只管 Agent 的写路径,人在件上的保存不受此限。
纯函数 `createOnlyViolation` 可测(复合主键按全部键列比);活动侧三张 parts 表标上;剧本补一句。
当前在跑那一单的草稿里拼出来的那行已手工撤掉。2100 测 / typecheck / lint / depcruise 绿;api-report 已刷。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 13:28:25 +08:00
xcsandClaude Fable 5 51c87af583 数据工单有了自己的面孔;件上四处样式对齐;缺库不再问人;5173 反代改回本机
用户在工作台上连报六条(2026-08-27):
- 对话区把数据工单摆成「执行工单」→ 契约 ExecutionWorkOrder.variant:'data'(引擎侧与执行工单无异,
  只换面孔),归一层从卡上带下来,web 新增 DataForm(同一套办法、另一副面孔:色/图标/「数据工单」/「确认写入」),
  办结卡与治理台人类工具目录同步;活动的两张数据工单卡骨架标 variant:"data"。
- 表显示不全不能右滑 → 目标件把 overflow-x:auto 写在 .tbl-wrap,平台包装是 .jc-tbl-wrap,谁都没管到;补一条。
- 表头只留中文 → 三张数据工单表去英文列名与 .thd 小字。
- 编辑态内部料号「只读字 + 输入框」并排 → 目标件 #tbl1 .jc-vcell{display:inline}(id 特异度)盖过
  table.on 的隐藏规则,表 1 每格其实都并排,PN 那格恰好有字;用 id 特异度覆盖回去。
- input 与 select 没对齐 → 徽标从前包 .ro 编辑态留着、压在下拉框头上把那格顶低 13px,改成随只读格一起藏;
  input/select 钉同一高度。
- 第一步「派数据工单还是放弃候选」不该问人 → 决策卡退役(覆盖规格「候选 ≥2 可放弃」那一条,用户定),
  查无记录一律自动派;剧本/说明书/测试/e2e 同步(e2e 新增 expectAsks.max 断言「不该问的没问」)。
顺带:5173 的 /api 反代默认指向一条公网隧道(150.158.83.131:46100 → nps → npc → 本机 :8787),
浏览器每次请求先出公网再绕回来;默认改回本机,要远端的显式给 API_PROXY_TARGET。

静态渲染实证:900px 宽的框里横向能滑 200px;编辑态同一行 3 input + 1 select 全部 32px 同一 y;
只读 PN 格 display:none。活动包 1.4.0;2097 测 / typecheck / lint / depcruise 绿。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 12:36:13 +08:00
xcsandClaude Fable 5 6f7513aa58 W05 收口:五例在收紧断言下全 released · 全被拒 0(活动 1.2.9 → 1.3.6)
第 7–12 轮逼出七条(T–Z),两条是脚本自己的、五条是活动的,其中一条上结构:
- W 参数名写成英文 key,与库里中文行不是同一行 → 27 条里 14 条 UNKNOWN。措辞两遍 +
  乘法对账都拦不住单颗料那一路(5 = 5×1 恒成立),改自指 refersTo:param_name
  只能用台账里已经在用的名字,一颗料时也咬得住。
- V/Z 数据工单那一项的两个方向:建完第一颗就收掉(再给第二颗发卡撞「已办完」)、
  铺完骨架就标 created 直接 finish(撞「从没发过卡」)—— 顺序写死:骨架 → 发卡 →
  拍结束 → 人交回 → 才标 created;absent 没清零不许 finish。
- T P-10 也要「发卡前骨架先有行」;X 第二颗缺库也要先问。
- 脚本:U 一例翻车不拖垮整套;Y 按闸的指示「加一行」;断言收紧 —— 点名的行整例跑完
  仍没出现 = 失败,决策卡按「问的是哪件事」数(第 9 轮逮到一次假绿)。

流程上两条纪律(用户当场纠正):只跑受影响的那一例,改了平台共享面才全跑;先说计划再动手。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 11:13:53 +08:00
xcsandClaude Opus 5 df18882322 脚本 e2e 逼出的八条:闸看错了表 · 拒回喂指针 · 零行骗过闸与哨兵 · 早收不该算撞墙
凭证到位后 `w05` 五案例连跑六轮,逼出八条**浏览器走查逮不到**的缺陷 ——
脚本每张卡都先空手交一次、每个岔路口都按序代答,人手点的时候永远不会去试
「空着交上去会怎样」。末轮:跑到的四例全部 released,三例被拒 0
(第五例停在大模型账户余额不足,不是代码问题)。

平台侧(六条):
- L 数据工单的提交闸没牙 —— 卡没绑表就回落到必交付物,而数据工单要人补的是
  `parts.*` 主数据,不在交付物名单里:闸盯着一堆无关的表、一格不缺,空手交卷一路放行。
  契约新增 `ExecutionWorkOrder.gateLedgers`(这张卡该拦哪几张表,发卡的人说了算),
  `gateAddressesOf` 变三级取一:绑的表 > 卡自报 > 交付物。
- M `finish` 撞 doneWhen 为假的拒回只谈「行与列」,而缺的是一次**工具调用**;
  现在摆出判据原文 + 那几个名字此刻的读数,`tool_*_calls` 读到 0 的单独点名(`unmetWhy`)。
- N 人点了决策卡,模型每拍再发一张,连拒五拍熔断。把「他选的是 approve」写进拒回**没用** ——
  下一拍它又从头翻一次会滚走的窗口。改结构:`answeredCardFact` 把
  「这张卡已答过 → 他选的是什么」做成每拍都在的事实行。
- O 模型传 `requirement: null`,工具 `null.trim()` 当场崩(边界上一律经 `text()` 归一)。
- P 拒回里的 `count=(没写过)` 是 S-FEEL 函数名被当成台账名 —— 假线索模型会去追。
- Q/S 零行 = 零缺,闸与哨兵一起放过空手交卷的数据工单(`emptyGate`:卡自报的表一行都没有
  = 没完成);「早收」头一次只落观察、第二次起才算被拒(与「重发已答过的卡」同一把尺)。

活动侧(1.2.7 → 1.2.9):三张执行工单各自声明 `gateLedgers`;说明书③补「发卡前骨架必须先有行」、
⑤补这张卡的前提(一颗 absent 都不剩);哨兵 `parts_profile_rows >= created` 逐颗对账;
S0_bind 写明发录入卡那一拍别抢写需求行。

e2e 脚本加 `JCAI_E2E_BEARER` 直供旁路(服务账号 client_credentials 仍是正路)。
门禁 typecheck / lint / depcruise / test(2091)全绿;api:check 的差异仍只在 org/* 与 api/*
(工作树里先前那批鉴权改动),card.d.ts 是本轮的纯新增字段。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 09:31:35 +08:00
xcsandClaude Opus 5 eb80876554 走查逼出的六条:发卡前清单要有行 · 在库要拿得出依据 · 数据工单只建缺的那颗 · 录入卡自带 basis
ACT-WORK-05 差异评估的浏览器全流程走查(六轮六条路径,全部 released),
逐条治了实跑里现形的缺陷。活动包 1.2.2 → 1.2.6:

- H(1.2.3):模型压拍把执行工单发了、清单一行没写,人对着空表 ——
  「先写清单再发卡」只在剧本里,压过拍就只有说明书还在;规矩搬进说明书。
- I(1.2.4,结构治):原 PN 根本不在库,模型两颗都判「在库」,硬阻塞整条路被跳过。
  剧本已写到头 → pn_check 加 found_pn_ref(refersTo + requiredWhen):
  判在库就必须填一个基座查得到的料号,查无此值当场拒、填不出则收不了步。
  这是「机检只读基座数」第六次现形,前五次都是计数,这次是存在性。
- J(1.2.5):数据工单派给了在库的那颗,缺的那颗没人建 ——
  剧本把「建哪几颗」和「要不要问人」写在同一串分岔里,从没写过「found 的不建」;拆成两问。
- K(1.2.6):数据录入卡的参考信息栏摆着引擎内部家具(九个计划项全名)——
  entryCard.basis 契约里可选,活动没声明,基座就兜了内部事实;卡骨架补三行人话。

包内自测 56 → 61 条;门禁 typecheck / lint / depcruise / test(2071)全绿
(api:check 的差异全在 org/* 与 api/*,是工作树里先前那批鉴权改动,本轮未添)。

docs/ACT-WORK-05-端到端测试记录.md:六轮走查的逐轮结论与 A–K 十一条发现总表。
docs/debt.md:四条平台欠账(disable 无路可走 · 前一项不收后一项的件推不出来 ·
拒回数不出缺的是工具调用 · 零行台账的提交闸无牙)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 04:29:40 +08:00
xcsandClaude Opus 5 7ea08fb16a ACT-WORK-05:S3 写盘前先自检工具调用数,堵死漏调 recommend 死循环
实测(R2,两候选)在 S3_assess 熔断:doneWhen 有一半读
tool_..._recommend_calls > 0,而模型只调了 compare-parameters、没调
recommend 就直接写盘、自己拍了推荐等级(数据面看着对,机制上是它自己
定的,绕过了"能算的不问 LLM"这条设计意图)。doneWhen 永远不真、finish
必被拒;拒回文案只说"是不是该写的行/列漏了",把模型的注意力导向行列,
于是连续5拍死循环重写同样的18行明细、2行关系,直至熔断——拒回指错方向
比不给指引更糟这条设计律的又一次现形。

不动 doneWhen(那半句工具读数正是"机检只读基座数"的落点)。改动收在
guide 两处:第二拍结尾点出"推荐等级只能由工具算,不调它这一步收不了步";
第三拍开头加一道自检——写盘前先看两个基座读数是否都>0,recommend 还是
0 就回去调它,不要往下写更不要自拍推荐等级。

包内测试钉死:第三拍段落里必须同时出现两个工具读数名与"自检/先看/必须>0"
这类先决语,第二拍段落里必须点出"推荐等级只能由它算"与"收不了步"。
版本号 1.2.1 → 1.2.2。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 03:25:08 +08:00
xcsandClaude Opus 5 c121349dea ACT-WORK-05:P-08 交回后先 finish 再发 P-10 卡,顺序写死进 guide
实测逮到:人交回 P-08 那张卡(表1+表2)后,模型下一拍直接发了 P-10
的卡,却没先 finish S0d_p08_master——引擎挑工作区画面按"当下还没干完
的第一步"取 view,S0d_p08_master 还 Active 时画面就停在 p08-master-create
不动,人拿到 P-10 的卡却看不见资料表一格,提交闸必然拦死。

两处 guide 补齐先后顺序:S0d_p08_master 交回段落写死"finish 在先、
发卡在后"两步动作串,并点出不收步的后果(画面停在哪);S0d_p10_document
开头加兜底句,若进来时上一项还开着,先补 finish 再发卡。

包内测试钉死这段顺序表述不会被静默删掉或改软。版本号 1.2.0 → 1.2.1。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 02:54:09 +08:00
xcsandClaude Opus 5 c6b02dfd39 ACT-WORK-05:标准化参数集改子表 parts.parameter,与目标件页面结构对齐
用户核对实跑页面后指出:P-08 数据工单做出来的页面结构必须与目标件
《数据工单-01-芯片主数据创建》一致——目标件本就是两张表(表 1 主记录 /
表 2 标准化参数子表),而实现把参数集塞成了表 1 的一个文本列,违反
《SS02-SS03-SS04_Demo台账字段细化与统一方案》§六「重复明细用子表承载,
不在单一文本字段堆叠」。

五处联动改齐:
- 平台基线新增 parts.parameter 主数据表(内部料号+参数名复合主键),
  两颗样例料的参数集从 normalized_parameter_set 文本列拆成 7 行子表数据
  (数值原样搬,一个字未改);parts.profile 物理列保留、不再赋值。
- 活动清单:parts.profile 撤掉该字段声明,新增 parts.parameter 声明
  (internal_pn 引用墙、param_value/constraint_type 必填);版本号
  1.1.1 → 1.2.0。
- 案例模型:S0d_p08_master/S1_input_confirm/S2_normalize 的读写面与
  guide 全部改指向新子表;顺带修正候选计数措辞歧义(实测样例0一张该发
  的决策卡被跳过——"候选absent且候选数≥2"被模型读成"不在库的候选≥2颗",
  改成先分别数"候选总数"与"不在库的候选数"两个数、显式说清楚判据认哪个)。
- caseFileModel 补 parts_parameter_missing 读数,两条哨兵(s_p08_created /
  s_pns_resolved)一并要求这一列不缺必填。
- 报告模版补齐表 2(逐块搬自目标件),主键列挂 data-col,约束类型走
  data-class-of 徽标。
- e2e 套件加性支持"一张卡填两张表"(stage.extraTables),buildEdits
  的 rowKey 泛化支持复合主键数组形态(不破坏既有八套件)。

验证:vitest 413 passed(活动包+平台种子测试全绿)、typecheck/lint/
depcruise 三绿、activities:install 零静态审发现、SQL 核对
parts.parameter 主键与行数(两颗料各7行)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 02:19:39 +08:00
xcsandClaude Fable 5 02ef572470 fix(w05): 评估输入清单两条 Critical 回归 —— 主键丢钥匙、必填填不了
定向复审发现上一轮模版重做(00133c2)新引入两条回归,都出在 sub_eval.input_gap 的缺口表:

- item_key 那格丢了 data-col:一单 11 行,item_key 逐行不同,服务端 resolveRowKey 既在件上
  找不到它、又不是「全表一致」的案号型列(那条路只对 caseKey 成立),人保存任何一行都会
  「认不出它是哪一行」。补回 <span data-col="item_key">,并把「加一行」提示补上「键必须填」。
- status 声明 required:true,又给了「加一行」,却被降成只读徽标——人新加的行永远没有格子
  填这一列,_missing 恒正、提交闸永远拦着(墙不配路)。改回 E04 执行回执同款的混排:
  <select class="jc-cell" data-col="status"> 挨着 <span data-class-of="status"> 徽标,
  只读徽标不裹 .jc-vcell(它没有孪生件),编辑态天然不被 :has(+ .jc-cell) 那条规则藏起来,
  不用动 BIND_CSS。

自查确认另两张可编辑件(parts.profile 的 internal_pn、parts.document 的 internal_pn+doc_seq)
的主键 data-col 本就都在,不是这次回归的范围。

补两条回归网(新 describe「可编辑件的主键与必填列」):①三张可编辑件每个非 caseKey 的主键列
都有 data-col;②每个 required:true 且落在可编辑件上的列都有 data-col。两条从
manifest.declarations.ledger 现读,不是照抄字面值,以后同类回归会自动变红。

P08_CSS 的「空行」复审点:重新用 hexdump 核对源文件 `ACT-WORK-05-数据工单-01-芯片主数据
创建.html` 第 86-89 行(两个 <style> 标签接缝),字节层面确认原文没有空行
(`...border-color:var(--line)}\n.tbl-gap{...}\n</style>\n<style>\n/* ===== 视觉补充段...`,
中间没有任何空行或隐藏字符);target-style.ts 的 P08_CSS 与该区间逐字节相同(Python diff
再次核验,长度 7531 完全一致)。没有改动这段内容——加一行会让它偏离已验证正确的源文件,
详见报告里贴的十六进制证据。

升版本号 1.1.0 → 1.1.1;pnpm activities:install 已验证装包成功。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 01:43:06 +08:00
xcsandClaude Fable 5 00133c2ca0 fix(w05): 五张模版整份重做 —— 逐块搬自四份目标件,不再照 E04/I01 那套版面语言做
用户实跑截图指出:芯片主数据创建的模版样式与给的目标件对不上。病根是 brief 一边说
「版面语言逐字量自目标件」,一边让照 I01 的 prd-style.ts 当视觉底 —— 两句互相矛盾,
《HTML报告生成规范》§7 写的是「搬」不是「照着做」。

- 新增 src/views/target-style.ts:四份目标件的 <style> 块逐字节机械抽取(P08 两段拼接、
  EXEC/ACC1/ACC2 各一段),抽取用 sed 按行号截取、diff 校验零差异;P10 无独立目标件,
  复用 P08 那份壳(规格里数据工单是同一模板按台账实例化)。删掉 src/views/prd-style.ts
  (I01 的视觉底,搬完之后没有任何模版再引用它)。
- 整份重写 src/views/report.ts:<div class="page"><div class="card">…</div></div> 外壳
  逐字节搬自目标件(不再套 .proto-root/.app-shell/.jc-stage 那套 E04/I01 自造的壳),
  内联 SVG 图标(.hic/.zic)原样搬;数据面(哪张表可编辑、哪几列可改、只读件零 data-edit)
  与上一版审查通过的绑定面保持不变。
- 修两处实跑逼出的坑(并入这次重做,未另开一轮):
  ① classToken(展示层消毒,吃掉下划线)与 slug(基座读数消毒,吃掉连字符)是两套不同规则,
     手写 .v-pin_to_pin 这类选择器永远匹配不上,件上显示「待定」——改用 vtok()/badgeCss()
     从 tally 值算选择器,不再手写;
  ② requiredWhen 是按行不按列,缺口表补充内容从前用静态 class="req" 把每一行都标必填,
     改成 <td data-class-of="status"> 按本行 status 值投影,只在 v-gap 那一档出红胶囊。
- 途中发现旧的 CSS 说明性注释里写着字面的「<script>」,会被 host.ts 的
  /<\s*script\b/i 检测判定为「含脚本」在装包时被拒 —— 顺手改写措辞避开(纯文档性质,
  不影响任何绑定或判断)。
- 升版本号 1.0.1 → 1.1.0(版面重做 + 两处呈现层修复是内容变更);pnpm activities:install
  已验证:ACT-WORK-05 · 差异评估(part-substitution-assessment@1.1.0)装包成功。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 01:15:44 +08:00
xcsandClaude Fable 5 c3ab236f70 fix(w05): s_bound 哨兵只在真有料号不在库时开门;全包清掉 disable 教学;version 1.0.1
浏览器全流程走查(样例 1「都在库·常路」)熔断,根因两条:①disable 在本引擎里不可达
(Disabled 只能从 Enabled 来,普通计划项一直停在 Available,disable 恒被拒);②s_bound
在每条路上都开(只看 demand_request_rows/sub_eval_pn_check_rows 两个恒真的读数),都在库
时把两个数据工单项照样推进「当下可为」,逼模型去 disable 它们、连拒五拍。

修:s_bound 的 onPart/ifPart 都改盯 sub_eval_pn_check_exists_status_absent > 0 ——
都在库时门不开,两项静静停在 Available、不进「当下可为」、根本用不上 disable;有缺库时
门照常开。S0_bind 的 guide 与其余各处教 disable 的句子全部清掉,改写清楚「都在库你什么
都不用做」,并明写「任何时候都不要对计划项用 disable」。s_p08_created 未动(都在库时
parts_profile_rows 本就是 0,它本来就不开)。

steps.test.ts 补两条回归测试:s_bound 条件文本含 sub_eval_pn_check_exists_status_absent
> 0(退回旧写法会红);NARRATIVE 与全部 ASSESSMENT_STEPS[].guide 里不出现「disable + 计划
项 id」这种祈使形(正则只逮教模型真去调用的句子,不误伤「不要用 disable」这类禁止句)。

manifest.ts 的 identity.packageVersion 1.0.0 → 1.0.1(安装恒新增,不升版本改动装不进去);
pnpm activities:install 已重装,静态审无提示(零发现,清单行未追加 findings 后缀)。

48/48 测试(steps.test.ts 18 + activity.test.ts 30)与 typecheck 全绿。

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-27 00:33:27 +08:00
xcsandClaude Fable 5 13183b9287 feat(w05): 差异评估活动包骨架与清单 —— 六张主数据追加声明、三张自持单据、两张 DMN、五条样例
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FJcX8A6TWp4GRs41TYryEh
2026-08-26 23:28:17 +08:00