fix(w05): S2 测试的 stepOf 类型保护改用泛型 Extract,补 {} 兜底的第二个坑

评审判定 PlanStep 标注太松:.fields 落在契约的开放索引签名上,拼写保护回来了但
14 处方括号取值(含 S1 既有三条)全部失去编译期拼写检查。换成泛型 Extract 版
(case-model.ts 四处 item 补 as const 配合),按查的 item 精确narrow 到那一步自己的形状。

Extract 单独应用后 tsc 仍报 13 个错——根因是 brief 给的 7 处测试断言用 `: {}` 兜底,
而"有形对象类型 | {}"在 TS 里恒被吸收成裸 {}(与 stepOf 精不精确无关,5 个隔离复现验证过),
S1 既有断言用的是 `: undefined` 从未踩过。补齐 `: {}` → `: undefined` + `?.` 与两处
for-of 数组补 as const 后,拼错实验复现 TS2551 + "Did you mean" 建议,改回后零错误。

debt.md 补一条:analyze 出参靠 requiredWhen 兜底的字段漏填时,全 auto 步没有就近恢复点
(ADR-014 通用特性,不是 W05 的病)。

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LKMZDwMbyKzjw6Hembwvet
This commit is contained in:
xcs
2026-08-29 16:18:46 +08:00
co-authored by Claude Opus 5
parent 89f0be8b81
commit 1c6978818c
3 changed files with 73 additions and 34 deletions
@@ -120,7 +120,7 @@ export const NARRATIVE = `§0 本活动只回答一件事:**候选内部料号
*/
export const ASSESSMENT_STEPS = [
{
item: 'S1_inputs',
item: 'S1_inputs' as const,
intent: '核对两颗料在不在库、归没归同一个类型、参数值齐不齐;缺什么就派一张数据工单让人补',
guide: '',
writes: ['sub_eval.part', 'sub_eval.case', 'parts.profile', 'parts.parameter'],
@@ -296,7 +296,7 @@ export const ASSESSMENT_STEPS = [
},
},
{
item: 'S2_assess',
item: 'S2_assess' as const,
intent: '把两颗料的核心参数逐条交给模型判四态,系统按规则算推荐等级、风险与验证要求',
guide: '',
writes: ['substitution.difference_item', 'substitution.relation', 'validation.record'],
@@ -509,7 +509,7 @@ export const ASSESSMENT_STEPS = [
},
},
{
item: 'S3_review',
item: 'S3_review' as const,
intent: '把逐条结论摆给人过目,他就地改四态与影响说明,改到没问题为止',
guide: '',
writes: ['substitution.difference_item', 'substitution.relation', 'validation.record'],
@@ -526,7 +526,7 @@ export const ASSESSMENT_STEPS = [
auto: { do: [{ kind: 'say' as const, text: '差异结论已备好,请过目。' }] },
},
{
item: 'T_release',
item: 'T_release' as const,
intent: '把这一签下去会落哪几张表、几行摆清楚,人签字后落账并发口',
guide: '',
/* 人工验收清单:一条一句他拿着这份工单要**亲自核**的动作,不是系统判的判据 */