@sema-agent/client-core 0.45.0 → 0.47.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,392 +0,0 @@
1
- # client-core 规范重构台账(正式收卷版,2026-08-03)
2
-
3
- > **终态:167/167 全清**(F 族→B 族→wave1 五卡→G 族两车→wave2 六卡→收官批→A 族压轴双车)。
4
- > 收官判据:21 门全绿(merge 后主树 20/20 套含 SEMA_CLI_ROOT 真差分,另 _gate-lib 加载期自测)/
5
- > 导出基线 525 双向 / 六 strict 旋钮全开 / singleton manifest 双向 / typeshape 棘轮 b4=21·unknown 203(逐条登记)·裸返回 0。
6
- > 收货形=refactor-pipeline-form(sonnet·opus 车+双镜头 双镜头+主会话亲审亲变异);A 族压轴双车三方判决+
7
- > 收货修两笔(args 快照/单读·快照·惰性三处)见 aaec8a7/c73fdf7 两 merge。残余台账=WAVE1-RESIDUALS.md+
8
- > 各族「P2 裁决」段 keep-with-reason 条目。本档由 P2 工作底稿原位收卷,逐条裁决与坐标全部保留如下。
9
-
10
- # (原)client-core 规范重构 P1→P2 裁决工作底稿
11
-
12
- 统一重排号 REF-CC-001 起连号,原镜头 id 括注保留。**裁决进度**:F 族(075-080)=GO 已落地(merge 2626369,四旋钮+20 红清零,变异实证红→绿);A 族=全 GO 但候 r2 修订稿(对抗复审四 verdict 折入,见 A-FAMILY-ADVERSARIAL-REVIEW.md);B 族 notif-01/02/03=GO 紧急批在飞。并单已按 critic(agent5)点名 + 复核发现的同文件同行段同修法项执行(见文末统计的「并单前/后」)。P2裁决列留空,由裁决人填 GO/HOLD/REJECT + 备注。
13
-
14
- 来源镜头:agent0=dup-invariant(13) / agent1=giant-split(17) / agent2=type-shape(17) / agent3=gate-p4(38) / agent4=lexicon/域词表(21) / agent5=critic完备性(14) / sup0=midband(7) / sup1=xlate(17) / sup2=notif(14) / sup3=hitl2(17,实14条finding+3条coverage段) / sup4=fleet2(15)。
15
-
16
- ---
17
-
18
- ## A族:adapt.ts 拆分族(8条)
19
-
20
- 族内:8 条,severity 分布 high×5 / medium×2 / low×1。镜头间无矛盾——SPLIT-01~04(giant-split)与 dup-05(dup-invariant)互补:前者拆巨方法内部状态,后者是巨方法之外的一个纯函数级重复,可同批处理(都落 `src/adapt/*.ts`)。执行序建议:先 dup-05(零风险独立叶)→ TG-06(棘轮门先行,否则拆分必红)→ SPLIT-01(驱动壳)→ SPLIT-02/03/04(可并行,各自闭包独立)→ FIX-05(随 04 一起消 self/this)→ TG-07(收尾补测)。
21
-
22
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
23
- |---|---|---|---|---|---|---|---|
24
- | REF-CC-001 | SPLIT-01 | split | high | adapt.ts:458-1596 | adapt() 单方法1139行,26变量14闭包15case | 拆驱动壳+4状态模块+臂注册表 | |
25
- | REF-CC-002 | SPLIT-02 | split | high | adapt.ts:487-824等 | 思考/回答流合并器与竞速环揉在主体里 | 抽createTextStream叶模块 | |
26
- | REF-CC-003 | SPLIT-03 | split | high | adapt.ts:507-1104 | 工具卡台账pending/buildToolResult/sweep混主体 | 抽createToolCardLedger,S1复位收进close() | |
27
- | REF-CC-004 | SPLIT-04 | split | high | adapt.ts:514-1252 | 面板行台账被②③④三块共同触碰 | 抽createPanelTaskLedger统一读写口 | |
28
- | REF-CC-005 | FIX-05 | fix-outright | low | adapt.ts:460-1411 | self/this双别名访问同一台账 | 随SPLIT-04消掉,改AdapterInstanceLedger显式入参 | |
29
- | REF-CC-006 | TG-06 | test-gap | high | scripts/run-client-core-portability-test.mjs:50,240 | 闭包文件数棘轮"只许降",拆分必然新增文件而误红 | 棘轮改锚外部包等值门,文件数降级为记录值 | |
30
- | REF-CC-007 | TG-07 | test-gap | medium | adapt.ts:1034-1038 | case'user'透传臂零钉,diff门对拍腿结构性无判据 | 补包内钉:喂user帧断言产出+session_id覆写 | |
31
- | REF-CC-008 | dup-05 | merge | medium | adapt.ts:139-153↔printToolResultFrame.ts:43-57 | flattenWireOutput/flattenToolOutput零字节差异两份 | 建零import叶wireOutputText.ts,adapt.ts旧名re-export | |
32
-
33
- ---
34
-
35
- ## B族:notifications 修复族(13条)
36
-
37
- 族内:13 条,severity 分布 high×3 / medium×8 / low×2。镜头间矛盾:notif-08 指出「status转义」的头注声称(2026-07-25已统一转义)与 pure 门钉死的行为(status不转义)互相矛盾——执行前必须先由裁决方选边,不能靠执行车自行判断。notif-01/02/03 三条 high 互相叠加(probe无deadline→TTL连坐失效→静默放弃零留痕),建议同批处理(同一 tickWatchInner 函数体)。执行序:先 notif-11(拆分模块,让台账可测)→ notif-01/02/03(核心bug)→ notif-04/06/09(E1词表单源)→ notif-05/07/08(收尾)。
38
-
39
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
40
- |---|---|---|---|---|---|---|---|
41
- | REF-CC-009 | notif-01 | fix-outright | high | notifications.ts:593-664,492-507 | tickWatch两个await无deadline,probe不settle则TTL连坐失效 | 包withProbeDeadline,tickInFlight改时间戳可强制复位 | |
42
- | REF-CC-010 | notif-02 | fix-outright | high | notifications.ts:542-551,679-720 | notifiedRunIds无delete站点,bg复活周期watcher结构性缺席 | outstandingBgTasks改(taskId,seq)复合键,合成通知透传seq | |
43
- | REF-CC-011 | notif-03 | fix-outright | high | notifications.ts:619-648,507 | TTL静默放弃零日志零计数,footer无法分辨送达/放弃 | 抽abandonOutstanding(reason)统一留痕+计数 | |
44
- | REF-CC-012 | notif-04 | merge | medium | notifications.ts:233 vs 133-166 | 去重键第三份手拼,红字注释自陈"不是第二份算法" | 改调taskNotificationDedupKey,补三入口对拍 | |
45
- | REF-CC-013 | notif-05 | fix-outright | medium | notifications.ts:522-551,739-754 | bgTaskPrompts漏进测试复位钩,含用户prompt全文无逐出 | reset补clear()+加MAX_BG_PROMPT_ENTRIES逐出 | |
46
- | REF-CC-014 | notif-06 | merge | medium | notifications.ts:836-899 | HookNoticeReason类型与KNOWN_REASONS Set各写一遍,漂移不报错且编造skipped | 单源as const数组派生类型,未知reason不折默认 | |
47
- | REF-CC-015 | notif-07 | fix-outright | medium | notifications.ts:295-380 | 同一queuePortMisses计数器塌缩两种不同语义的miss | 拆两个计数器,host.ts自检面各出各的键 | |
48
- | REF-CC-016 | notif-08 | merge | medium | notifications.ts:44-730,adapt.ts:369-371 | task-notification XML三个mint点,status转义规则互不一致 | 抽renderMinimalTaskNotificationXml单源;转义口径需裁决选边 | |
49
- | REF-CC-017 | notif-09 | merge | medium | notifications.ts:234,666-706,518 | 终态状态集三份定义,一份漏killed致宿主侧手写归一补丁 | 单源TERMINAL_NOTIFICATION_STATUSES三处消费 | |
50
- | REF-CC-018 | notif-10(含TYPESHAPE-03之adapt.ts部分+完备性-08) | fix-outright | medium | adapt.ts:369-371(对位notifications.ts:259-262) | 三常量zero引用僵尸副本,真源在notifications.ts | 直接删adapt.ts:369-371,不建议改import扩大导出面 | |
51
- | REF-CC-019 | notif-11 | split | medium | notifications.ts全902行 | 四个零调用关切挤一个文件,15个模块级可变槽全挤② | 拆xmlTags/render/ledger/deliverySupplement/hookNotice五件 | |
52
- | REF-CC-020 | notif-12(含域词表-20) | test-gap | medium | notifications.ts:593-664 | 承载3条high的72行tick路径零测试覆盖,无注入时钟 | 补_tickWatchOnceForTest(nowMs)+六条G2变异钉;模块头写明process-lifetime契约 | |
53
- | REF-CC-021 | notif-13 | fix-outright | low | notifications.ts:634-662,469-473,518 | probe返回二态null塌缩"still running"与"404蒸发"两种含义 | probe改三态{terminal|pending|unavailable},unavailable连续N次提前放弃 | |
54
-
55
- ---
56
-
57
- **P2 裁决(2026-08-02)**:全 GO;032(SPLIT-12 askGateWire 369 行拆三刀)压轴与 A 族 r2 同批(需读写矩阵级设计);其余 15 条分两卡=C-bridge(022/023/028/029/030/031/035/036/038)+C-plan(024/025/026/027/033/034);033 与 #114 isAlreadyResolvedGateReason 导出提升同域并车。
58
-
59
- ## C族:hitl 族(17条)
60
-
61
- 族内:17 条,severity 分布 high×5 / medium×11 / low×1。镜头间关系:hitl2-02/03/04 已吸收并纠正 完备性-07 的三条 C2 写路径断言(完备性-07 判"decide失败无上浮"不成立于 planReviewWire,但 toolApprovalWire.ts:281 那条确证是真实历史事故复现——**执行序须先做 hitl2-02**,因为它逐字对应本仓 2026-07-15 中断事故修复批 G 已经解决过一次的同一个坑,askGateWire 那边修了、toolApprovalWire 这边没修)。hitl2-08(含dup-08)与 hitl2-01 共享同一处 TOCTOU 双取件成因,建议合并执行(抽 findPendingForTask 时顺带消掉 pending[0] 回落)。FIX-13(含域词表-01)是 C 族最高优先级——它是 #113 "session --resume 报 No conversation found" 的根因链一环。
62
-
63
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
64
- |---|---|---|---|---|---|---|---|
65
- | REF-CC-022 | hitl2-01 | fix-outright | high | hitlBridge.ts:245-261,297-324 | findPending第三级回落`?? pending[0]`,可能解到别的会话的gate | 删pending[0]回落,配合hitl2-08消掉双取件TOCTOU窗 | |
66
- | REF-CC-023 | hitl2-02 | fix-outright | high | toolApprovalWire.ts:276-282 | cancel-by-deny全吞`.catch(()=>{})`,逐字复现askGateWire同款已修事故 | 把observeCancelByDeny提共享模块,两腿共用 | |
67
- | REF-CC-024 | hitl2-03 | fix-outright | medium | approvalsFeed.ts:149-251 | take()两处无catch调用点会致unhandled rejection | 补.catch,streamFailures只在真stream抛时++ | |
68
- | REF-CC-025 | hitl2-04(含完备性-07②) | fix-outright | medium | planReviewWire.ts:84,115-124,167-185 | enqueuePlanReviewOutcome返回值被丢弃+两条早退全静默 | 收返回值走hostLog,116/124早退补outcome汇流 | |
69
- | REF-CC-026 | hitl2-05 | fix-outright | medium | planReviewWire.ts:54-86 | 批准/驳回判据是可漂移字符串,默认臂落危险的reject侧 | 导出三值planReviewDecisionFromAnswer,dismiss单独一档 | |
70
- | REF-CC-027 | hitl2-06 | fix-outright | medium | planReviewWire.ts:74-108 | responder注销函数被丢,重放/重答可二次驱动写动词 | 照askGateWire形接住unregister,补幂等守卫 | |
71
- | REF-CC-028 | hitl2-07 | gate | medium | hitlBridge.ts:198-416 | ActiveGate闩生产路径恒null,两条本地拒绝守卫空转 | 要么喂observe(ev)带电,要么删守卫改注释为服务端兜底说明 | |
72
- | REF-CC-029 | hitl2-08(含dup-08) | merge | medium | hitlBridge.ts:245-261↔toolApprovalWire.ts:241-254↔askGateWire.ts:393-404 | pending取件臂三处,bridge那份多`?? pending[0]`且键顺序不同,每次决断打两次/v1/approvals | 抽findPendingForTask单源+decideTool/answerQuestion接收已取行 | |
73
- | REF-CC-030 | hitl2-09 | gate | medium | toolApprovalWire.ts:152-478 | keyed卡口API建好但三个决断入口全写死DEFAULT_SESSION_KEY | 三入口加sessionKey透传,或miss文案点名键不匹配 | |
74
- | REF-CC-031 | hitl2-10 | keep-with-reason | low | toolApprovalWire.ts:212-240,41-87 | 卡口缺席判据两处文案不同+头注41-42已腐 | 删前置重复判据,头注改与83-87一致的现势描述 | |
75
- | REF-CC-032 | SPLIT-12 | split | high | askGateWire.ts:493-861 | bridgeAskUserQuestionGates 369行,7集合4标量跨内外环共享 | 三刀:gateLedger/frameRouter/parkResolver,tool_end五分支须有序数组 | |
76
- | REF-CC-033 | FIX-13(含域词表-01,完备性-09) | fix-outright | high | askGateWire.ts:212-273,810 | 按文案词`already`等判"已解决park",server原文改一字整条命中失效 | GateOutcome加code判别位闭集,消费点改判code | |
77
- | REF-CC-034 | TG-14 | test-gap | high | askGateWire.ts:183,511-778 | MAX_GATE_HOPS/denyStampNextFsEnd/decidedGates全仓零调用零覆盖 | 补三条钉:25连环park触发hop预算/deny stamp/失败中HOLD毒化帧 | |
78
- | REF-CC-035 | 域词表-07 | fix-outright | medium | toolApprovalWire.ts:407-412 | 从ask文案正则兜path,含引号文案会静默给错path渲审批卡 | 取不到args诚实缺席渲"路径未知",正则收窄锚定前缀 | |
79
- | REF-CC-036 | TYPESHAPE-07 | fix-outright | high | hitlBridge.ts:169-178 | HitlSafetyError.code声明成开集string,词表只活在注释里 | 改闭集联合类型,消费点用instanceof+字面量比较 | |
80
- | REF-CC-037 | TYPESHAPE-08 | fix-outright | high | agentSession/contract.ts:54-89 | approvalCard/askQuestion/planReview/notify四个要害口全裸unknown | 换成包内已有命名类型(ApprovalCardPort等),unknown一个不留 | |
81
- | REF-CC-038 | TYPESHAPE-09 | merge | medium | liveQuestionStore.ts:77-79,hitlBridge.ts:148-519,seatContract.ts:417-421 | AskAnswer形状4处3种写法,askGateWire.ts:466要靠cast兜齐 | 以hitlBridge.AskAnswer为唯一源,三处改用+删cast | |
82
-
83
- ---
84
-
85
- **P2 裁决(2026-08-02)**:全 GO 一卡(039 时钟域最先→040;043/052 的伤害型回落改中性词=行为面,宪法三问过=诚实缺席原则+[2374] fail-loud 令背书);044/045 per-session 化与 hitl2-09 同批设计口径。
86
-
87
- ## D族:fleet 族(15条)
88
-
89
- 族内:15 条,severity 分布 high×2 / medium×10 / low×3。镜头间无矛盾,但内部有强依赖序:fleet2-01(时钟域混用,ts:0兜底致终态行入池即过期)是 D 族最高优先级根因,fleet2-02(非终态帧从不delete留存条目)依赖 fleet2-01 先修好时钟才能正确验证。fleet2-06/07(会话隔离,per-session化)建议与 hitl2-09(W1 keyed 卡口同款缺口)同批设计评审,避免三张 timer/session 工单各造一套(域词表-12/TYPESHAPE-10 已在 I 族提议 TimersPort 统一底座,fleet2-06/07 提议的是 sessionSlot.ts 的 per-session 底座,两者都要接线但机制不同,不可混淆)。fleet2-03(含dup-13)/fleet2-04(含dup-09)/fleet2-08(含TYPESHAPE-06)均为并单产物,merge 已执行。
90
-
91
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
92
- |---|---|---|---|---|---|---|---|
93
- | REF-CC-039 | fleet2-01 | fix-outright | high | fleetLedger.ts:278-467 | wire的server时刻frame.ts直接与client时刻nowMs算术,ts兜0致终态行秒过期 | applyFrame入口归一成本地receivedAt单一铸点,字段改名标域 | |
94
- | REF-CC-040 | fleet2-02 | fix-outright | medium | fleetLedger.ts:286-467 | 非终态帧从不delete留存条目,bg复活后belt前提`!retained.has()`失守 | case'task'非终态分支显式retained.delete,belt改按seq覆盖 | |
95
- | REF-CC-041 | fleet2-03(含dup-13) | merge | medium | fleetAgentPanelProjection.ts:80-81,148 | TERMINAL_STATUSES三份同源词汇仅两份被真漂移锁覆盖,本份零测试 | 直接import fleetProjection的TERMINAL_FLEET_TASK_STATUSES | |
96
- | REF-CC-042 | fleet2-04(含dup-09) | merge | medium | fleetAgentPanelProjection.ts:39,109-112↔workflow.ts:24-26 | rowIdTail逐字重复,曾出过等价性事故(0.1.1修),同包另两处已import却本文件例外 | 删本地实现改import workflow.js | |
97
- | REF-CC-043 | fleet2-05 | gate | medium | fleetProjection.ts:24-169,559-572 | 本地FleetTaskStatus手抄SDK闭集且coerceTaskStatus参数放宽成string,default臂伤害型回落成running | 补Covers<>双向钉,default改渲非活跃中性词(需宪法三问) | |
98
- | REF-CC-044 | fleet2-06 | split | medium | fleetLedger.ts:37-145,252,521-524 | liveBgViews模块级单例三读面对多ledger实例语义各不同,W1原语未纳入 | 改Map<sessionKey,Set<LiveBgView>>,三读面各出*For(sessionKey)变体 | |
99
- | REF-CC-045 | fleet2-07 | split | medium | fleetAgentPanelProjection.ts:107-233 | seen台账无会话身份参数,只增不减长会话内存无上界 | 随fleet2-06同批per-sessionKey化,settle后加回收期 | |
100
- | REF-CC-046 | fleet2-08(含TYPESHAPE-06) | fix-outright | medium | fleetLedger.ts:71-78,236-246 | 同对象字面量name无条件落键/parentId条件展开两种约定并存,IPC序列化后三态判读会翻转 | name改与parentId同款条件展开写法 | |
101
- | REF-CC-047 | fleet2-09 | fix-outright | low | fleetLedger.ts:171-177,338-344 | FleetLedgerHooks.onHookNotice签名裸unknown出公开面 | 改HookNoticeFrame具名类型(Extract同款手法已在文件内) | |
102
- | REF-CC-048 | fleet2-10 | fix-outright | low | fleetLedger.ts:357 | 条件类型`FleetFrame extends never?never:X`恒等于X,伪装成守卫 | 直写BgNotificationWire,若要真钉改用Covers<> | |
103
- | REF-CC-049 | fleet2-11 | fix-outright | low | fleetLedger.ts:244,304,487-488↔fleetProjection.ts:384 | parentId存在性判定三种写法,空串脏值时ledger与projection判读相反 | 统一`!==undefined`,空串按缺席策略收进wireParentId过滤族 | |
104
- | REF-CC-050 | fleet2-12 | fix-outright | low | fleetProjection.ts:66-68,391-394 | awaitingPlanApproval等三键类型可选但投影器恒赋值,门已钉"恒发" | 三键改必填,消费端多余分支同时消掉 | |
105
- | REF-CC-051 | fleet2-13 | fix-outright | low | fleetLedger.ts:288,333,358 | 畸形帧/通知早退零留痕,与同文件策略性丢弃的debug行不对称 | 三处补debug行+droppedMalformed计数位 | |
106
- | REF-CC-052 | fleet2-14 | keep-with-reason | low | fleetLedger.ts:239-446 | status兜底四处方向不一,`:243`从"不当真"越界到"编造running" | 保留三处保守`?? ''`,`:243`改三态或换自描述哨兵'unknown' | |
107
- | REF-CC-053 | fleet2-15 | gate | low | fleetProjection.ts:532-553 | currentAction登记表条目自认"已知缺口"却与"设计取舍"共用同一放行通道 | 登记表值改结构化{kind,owner,dueDate},known-gap过期即红 | |
108
-
109
- ---
110
-
111
- **P2 裁决(2026-08-02)**:全 GO 分两卡=E-downstream(054~063;054 busy errorCode 结构位可正做——[2377]C-1 server 已补键,文案臂配兜底钉;058 typed Result 若触公面导出=发包说明点名)+E-seat(064~070/072/073/074,三端共享契约单独车,发包说明点名);071 KEEP。
112
-
113
- ## E族:翻译层族(21条,adapter/downstream + seatContract.ts)
114
-
115
- 族内:21 条,severity 分布 high×6 / medium×12 / low×3。镜头间关系:xlate-01(含dup-06)是本族最高杠杆项——它把 dup-06 原判的"四臂重复"纠正为"六臂重复"(多算了 failedToSdkResult),抽出 errorResult() 后可连带消掉 xlate-02(degraded漏配)与 xlate-09(行号锚腐烂)两条的部分成因。xlate-08(含dup-01)同理把 usage 映射的 mint 点从 2 个纠正为 4 个。执行序建议:xlate-04(typed Result 三态)是 xlate-03/06/07 的地基(先做返回型改造,三个具体丢帧问题才有落点),须排最前。seatContract.ts 相关(xlate-10~16 + SPLIT-15/TG-16/FIX-17)建议单独一辆车,因为它是三端(cli/web/desktop)共享契约,改动面必然跨仓,不能与 downstream 三件同批。
116
-
117
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
118
- |---|---|---|---|---|---|---|---|
119
- | REF-CC-054 | dup-03(含域词表-02) | fix-outright | high | runStream.ts:216-241 | 409 session-busy判别按errText.includes判,已实锤炸过一次(上游文案加长即全灭) | 改判errorCode结构位,文案includes降级ALLOW清单兜底 | DONE(wave2 卡E):classifyActiveRunBusy 结构位优先(errorCode→activeTaskId→老引擎文案),文案臂进 B8 ALLOW 独立条 + run-sdk-floor ④ 双向退役钉 |
120
- | REF-CC-055 | xlate-01(含dup-06) | merge | high | terminalToSdkResult.ts:217-489 | SDKResultError信封六处逐字重复(非dup-06原判的四处) | 抽errorResult()统一算usage/modelUsage/costOrNull | DONE(wave2 卡E):errorResult() 唯一 mint 点,六处塌成六个 return;failedToSdkResult 认作 stats 缺席退化实例 |
121
- | REF-CC-056 | xlate-02 | fix-outright | medium | terminalToSdkResult.ts:254-428 | degraded"恒additive附上"的注释与实现不符,blocked/unknown两臂缺失 | const degradedField上提到durationMs旁,随xlate-01一并收进信封 | DONE(wave2 卡E):degraded 进信封本体,七个终态臂全带(含 failed/blocked/park/未知),负控钉「wire 没带就不 stamp」 |
122
- | REF-CC-057 | xlate-03 | fix-outright | high | eventToSdkMessage.ts:370-372 | default分支注释称"log+skip"但零log零计数,新臂静默死信已实锤(suggestions案) | 加ctx.onUnhandled?.(type)下泄口或console.warn去重上报 | DONE(wave2 卡E):dropped 经 EventProjection 上浮到 runStream,reportDroppedFrame 每种臂一行 stderr(去重表已登记 singleton-manifest) |
123
- | REF-CC-058 | xlate-04 | split | high | eventToSdkMessage.ts:118-372 | 返回型SDKMessage\|null让三种互不相同语义塌缩成同一null | 改typed Result三态{message/none/dropped},dropped上报闭合xlate-03 | DONE(wave2 卡E)🔴BREAKING:返回型 SDKMessage|null → EventProjection 三态(message/none/dropped),none 四档 + dropped 两档;公面导出基线同批刷 503→504 |
124
- | REF-CC-059 | xlate-05 | gate | medium | eventToSdkMessage.ts:22-102,199-211 | streamEventArm形参裸unknown,泄漏卫兵纪律只靠注释无机械门 | event改命名闭集NeutralDelta,补run-neutral-arm-leak-test.mjs | PARTIAL(wave2 卡E):命名半场落地(event: unknown → NeutralDelta 闭集);门半场按派车口径不建,记 WAVE2-RESIDUALS.md ① |
125
- | REF-CC-060 | xlate-06 | fix-outright | medium | eventToSdkMessage.ts:119-372 | 五条手搓raw预分派抢在switch之前,四条已入SDK union代码未跟上 | 已入union的臂搬进switch正式case,补default:assertNever(ev) | DONE(wave2 卡E):四臂搬进 switch + default:assertNeverArm;⚠️镜头「五条已入union四条」部分证伪——workflow_complete 至今不在 SDK 3.0.0 union,保留为唯一 raw 臂并写死复核判据 |
126
- | REF-CC-061 | xlate-07 | fix-outright | medium | eventToSdkMessage.ts:346-353 | prompt_suggestions批量截断(slice 0,8)无声上限,第9条起蒸发无痕 | 命名SUGGESTION_BATCH_CAP常量+补truncatedCount位 | DONE(wave2 卡E):SUGGESTION_BATCH_CAP/SUGGESTION_CHARS_CAP 命名 + truncatedCount additive 位(负控:没截断不出键) |
127
- | REF-CC-062 | xlate-08(含dup-01) | merge | high | terminalToSdkResult.ts:64-472↔turnUsageToModelUsage.ts:39-50 | ModelUsage形状四个构造点(非dup-01原判的两个),3.0.0语义翻转注释只挂一处 | 收敛到turnUsageToModelUsage.ts单一home,mapModelUsage/flattenUsage改调它 | DONE(wave2 卡E):toCcModelUsage() 唯一 mint 点,四个构造点全改调它;顺带统一非有限值折 0(此前 turnUsage 那份漏 Infinity) |
128
- | REF-CC-063 | xlate-09 | fix-outright | medium | terminalToSdkResult.ts:127-421,eventToSdkMessage.ts:391-403 | 四处指向自己的行号锚今天全部已腐(I1禁行号锚) | 改符号锚,移植core的gate:line-anchor门 | PARTIAL(wave2 卡E):四处自锚已改符号锚(顺收 runStream 头注两个裸 :NNN);跨仓行号锚与 gate:line-anchor 门移植未做,记 WAVE2-RESIDUALS.md ② |
129
- | REF-CC-064 | xlate-10 | fix-outright | high | seatContract.ts:187-190,562-570 | chrome.laneProof类型可选但出站门要求必填,合规生产者被整条event静默丢弃 | laneProof转必填+升命名类型LaneProof | |
130
- | REF-CC-065 | xlate-11 | fix-outright | medium | seatContract.ts:148-296 | type/chrome.kind/permissionMode三位违反自家"发向wire=闭集"判据,仍是裸string | CHROME_EVENT_KINDS改as const元组,type/permissionMode同款闭集化 | |
131
- | REF-CC-066 | xlate-12 | fix-outright | medium | seatContract.ts全文21个optional位 | 54个`?:`位21个零JSDoc,question域input缺席语义无答案 | 逐条补"缺席=什么语义+消费端渲什么" | |
132
- | REF-CC-067 | xlate-13 | fix-outright | medium | seatContract.ts:100,144 | 同名createdAt两种类型两种域,epoch单位无注 | ToolPermissionRequest.createdAt改名createdAtMs+注时钟来源 | |
133
- | REF-CC-068 | xlate-14 | test-gap | medium | seatContract.ts:485-853 | 校验器这条链没人钉,加必填位门全绿新位从此不过校验 | 每校验器配VALIDATED_KEYS+DELIBERATELY_UNCHECKED_KEYS,Covers钉死keyof | |
134
- | REF-CC-069 | xlate-15 | fix-outright | medium | seatContract.ts:66-699 | 门签名(unknown)=>boolean,false时无从知道哪个字段哪条规则不过 | 签名升级为true\|{reason,field?},false分支补告警 | |
135
- | REF-CC-070 | xlate-16 | fix-outright | low | seatContract.ts:138-517 | TOCTOU绑定对boundCallId/boundInputHash互不相干可选,可只剩一半过门 | 合成一个位toctouBinding{callId,inputHash}或补联合判据 | |
136
- | REF-CC-071 | xlate-17 | keep-with-reason | medium | eventToSdkMessage.ts:386-407 | gateKind被判"死代码"但实为public-export-baseline锁着的公开API | 不删,判词补一句"删除=公开面breaking",走J段版本纪律 | |
137
- | REF-CC-072 | SPLIT-15 | split | medium | seatContract.ts:620-699 | SPEC里13个方法内联匿名validator与6个具名type guard两种方言并存 | 13个提成具名guard各配interface+Covers双向钉 | |
138
- | REF-CC-073 | TG-16 | test-gap | medium | seatContract.ts:443-668 | SessionSearchResult.title/getTranscript返回形无Covers钉,类型→常量缺失 | 补两组as const键集元组入_seatContractPins | |
139
- | REF-CC-074 | FIX-17 | fix-outright | low | seatContract.ts:471 | uploadAttachment方法签名3成员内联匿名形,直接命中B4 | 提AttachmentUploadRequest具名interface+键集钉 | |
140
-
141
- ---
142
-
143
- ## F族:strict旋钮+tsconfig族(6条)
144
-
145
- 族内:6 条,severity 分布 high×0 / medium×3 / low×3。无矛盾。notif-14(含TYPESHAPE-03的配置面部分)是本族起点——它证明开 noUnusedLocals/noUnusedParameters 零成本抓到 REF-CC-018 那条僵尸副本,建议与 TYPESHAPE-01/02/04 一起作为"零基线可开"的第一批(TYPESHAPE-05 exactOptionalPropertyTypes 有 39 处且部分涉及跨座位IPC语义判断,必须排成独立迁移批,不与本批同车)。
146
-
147
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
148
- |---|---|---|---|---|---|---|---|
149
- | REF-CC-075 | TYPESHAPE-01 | config | low | tsconfig.json | noFallthroughCasesInSwitch实测0错误,零成本可开 | 直接开,写进run-client-core-all-gates.mjs知识棘轮 | |
150
- | REF-CC-076 | TYPESHAPE-02 | config | low | tsconfig.json,controlRouter.ts:91-100 | noImplicitOverride仅1条错误(ControlSafetyError.cause) | 开旋钮+加override修饰符 | |
151
- | REF-CC-077 | notif-14(含TYPESHAPE-03) | config | low | tsconfig.json,adapt.ts:369-371等 | noUnusedLocals/noUnusedParameters零基线可开,能自动抓到僵尸副本 | 先跑存量清单,同批删adapt.ts:369-371等5处死引用 | |
152
- | REF-CC-078 | TYPESHAPE-04 | config | medium | tsconfig.json,7文件14处 | noUncheckedIndexedAccess实测14处全部"TS看不见的守卫"零真bug | 数组先取值再判/元组解构/正则组`?? ''`,别用!断言一把梭 | |
153
- | REF-CC-079 | TYPESHAPE-05 | config | medium | tsconfig.json,13文件39处 | exactOptionalPropertyTypes最大档,已有246处惯用法只是没门 | 排独立迁移批,HITL三文件先机械改,跨IPC序列化的22处逐条判语义 | |
154
- | REF-CC-080 | TYPESHAPE-17 | keep-with-reason | low | request/taskRequest.ts:33 | TaskRequestLike开集record是B2最刺眼一条,但有运行期unregisteredRequestKeys真守 | 保留+补理由注释,加进G族门的具名豁免清单(带属主到期日) | |
155
-
156
- ---
157
-
158
- ## G族:门与棘轮族(gate-p4全部+singleton门,43条)
159
-
160
- 族内:43 条,severity 分布 high×9 / medium×20 / low×14。镜头间无直接矛盾,但存在结构性缺口:P4GATE-01(MIN_SUITES 松弛3套)与本次普查的现实互相印证——client-core 目前 16 道门(P4GATE 扫描时)已经比 MIN_SUITES=12 松了不止 3(本次普查还确认了 域词表-10/完备性-06/TYPESHAPE-16 三道核心门族在 client-core 完全缺席:B8/B10/裸定时器族、C1/C2/C5 fail-loud 族、typeshape 族)。**P2 裁决(主会话亲裁 2026-08-02 深夜)**:16 条 keep-with-reason(108-120/122-123/104)=KEEP 原样;其余全 GO 分三车:G1=门底座新建(081/082/103/105/106/107,=A0 门底座实质,先行);G2=判别力小修(083-089/095-097/121,与 G1 并行);G3=公共底座 _gate-lib 抽取+杂项(100/090-094/098/099/101/102,**压后串行**——逐门替换撞面大,必须基于 G1/G2 收货后的 main)。082 注意:53 缺口数字是 P1 时点,执行时按当日 live 导出重量。
161
- **执行序建议**:P4GATE-01(名单等值门)与 P4GATE-02(基线53个新增导出无保护)是最高杠杆两条,应最先做——前者能让后续所有"补齐缺失门"工作在 diff 里显形,后者堵住当前最大的一处"删导出不会红"缺口。P4GATE-23~38(共16条)是 keep-with-reason 汇总条目,不需要 P3 动刀,只在对应缺陷号(见各条内文"缺陷单列见-XX")执行后随手复核。
162
-
163
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
164
- |---|---|---|---|---|---|---|---|
165
- | REF-CC-081 | P4GATE-01 | test-gap | high | run-client-core-all-gates.mjs:30-53 | MIN_SUITES=12硬编码,实有15套,删3套无声不响 | 抬到15+改名单等值门(读gates-manifest.json双向核对) | |
166
- | REF-CC-082 | P4GATE-02 | test-gap | high | public-export-baseline.json:1-8 | 基线440 vs live导出493,新增53个(10.7%)删/改名不会红 | 重生成基线到493+added>0时不再静默放行 | |
167
- | REF-CC-083 | P4GATE-03 | fix-outright | medium | run-usage-verbatim-channel-test.mjs:53-55 | 正控对字面量构造对象断言,零判别力恒真 | 正控改过被测函数,或isPure两向对照 | |
168
- | REF-CC-084 | P4GATE-04 | fix-outright | medium | run-streamjson-timing-honesty-test.mjs:86-90 | findIndex无-1守卫,帧被整个吞掉时`-1<0`恒真判绿 | 补iEnd!==-1在场前置断言 | |
169
- | REF-CC-085 | P4GATE-05 | fix-outright | medium | run-streamjson-timing-honesty-test.mjs:107-110 | 负控同上,sub帧若被过滤掉不再yield则集体判绿 | 补iSub!==-1在场断言 | |
170
- | REF-CC-086 | P4GATE-06 | fix-outright | medium | run-client-core-pure-test.mjs:1158-1160 | ck第二实参字面量true,从未观测过台账 | 用已有观测口改判据,或删该ck | |
171
- | REF-CC-087 | P4GATE-07 | fix-outright | medium | run-client-core-pure-test.mjs:1687-1692 | 入参内联字面量,纯函数性断言恒真无判别力 | 入参提变量+JSON.stringify前后对照 | |
172
- | REF-CC-088 | P4GATE-08 | fix-outright | low | run-background-view-test.mjs:144-287 | 三处ck(...,true)紧跟waitFor之后,重复求值已保证过的谓词 | 统一ckWait助手,消灭ck(...,true) | |
173
- | REF-CC-089 | P4GATE-09 | test-gap | medium | run-client-core-pure-test.mjs:5540-5620 | 分段棘轮只度量passed计数,删真断言补恒真ck仍能维持棘轮 | 加元断言:源码内ck第二实参字面量true必须为0 | |
174
- | REF-CC-090 | P4GATE-10 | test-gap | medium | run-client-core-pure-test.mjs:5092-5493 | d.ts符号在场判据用`\b${sym}\b`,非导出声明照样命中 | 统一改导出形正则,抽dtsExports助手 | |
175
- | REF-CC-091 | P4GATE-11 | test-gap | medium | run-sdk-floor-test.mjs:81-121,196-198 | costUsd枚举器认2种写法,单键解构/方括号取值全盲 | 后随集合放宽+补方括号形正则+对照样本 | |
176
- | REF-CC-092 | P4GATE-12 | test-gap | medium | run-engine-vocab-floor-test.mjs:116-134,270,325 | livePool=core dist任意带引号PascalCase串,纯"在场"非"有效" | 真源升级为core工具注册表,抽不到exit 9 | |
177
- | REF-CC-093 | P4GATE-13 | test-gap | medium | run-fleet-view-keys-test.mjs:309-317 | topKeysOf只认export interface+2空格+裸键一种写法 | 头注写明壳侧格式约束,或让壳侧导出运行时键清单 | |
178
- | REF-CC-094 | P4GATE-14 | test-gap | medium | run-client-core-all-gates.mjs:57-79 | 3道门exit 0但整段跳过,收集器一律打勾无法区分partial | pure门条件腿登记表模式推广;收集器加GATE-PARTIAL第四态 | |
179
- | REF-CC-095 | P4GATE-15 | fix-outright | low | run-client-core-portability-test.mjs:236-239 | "零外部包"断言实为{diff}子集门的僵尸前身,标签撒谎 | 删该条(等值门L250-253已覆盖)或改措辞 | |
180
- | REF-CC-096 | P4GATE-16 | fix-outright | low | run-client-core-portability-test.mjs:323-350 | 正向对照构造段有死码与吞异常残留 | 删无用行,保留真poisoned文件构造 | |
181
- | REF-CC-097 | P4GATE-17 | fix-outright | low | run-engine-vocab-floor-test.mjs:195 | tombstoned构造三跳等价恒等变换 | 一步new Set(keys)化简 | |
182
- | REF-CC-098 | P4GATE-18 | gate | medium | run-seat-contract-keys-test.mjs:85-219 | probe(exit9工具坏)被大量用在产品行为断言上,诊断方向带偏 | 划线:probe只留判别器自检,产品行为断言改ck | |
183
- | REF-CC-099 | P4GATE-19 | test-gap | medium | run-client-core-portability-test.mjs:39-215 | closureOf认4种边,非字面量动态import/Worker/createRequire全盲 | MAX_ADAPT_CLOSURE_FILES对齐实测,kernel反空转改等值门 | |
184
- | REF-CC-100 | P4GATE-20 | merge | medium | run-approval-frame-keys-test.mjs等13门 | TSC候选链13份/ck助手15份/exit-9助手5份公共底座重复且SKIP口径三种 | 抽scripts/_gate-lib.mjs,P3机械车逐门替换 | |
185
- | REF-CC-101 | P4GATE-21 | test-gap | low | run-client-core-all-gates.mjs:57-60 | spawnSync无超时,自救逻辑坏时收集器永久挂住 | 加timeout+killSignal,signal!==null单列timedOut名单 | |
186
- | REF-CC-102 | P4GATE-22 | test-gap | low | run-public-surface-test.mjs:188-208 | README事实核对只挡"新门未点名",挡不住"点名已删的门" | 补对向phantom正则检测 | |
187
- | REF-CC-103 | 域词表-10 | gate | medium | scripts/run-client-core-all-gates.mjs:41-56 | B8/B10/裸定时器三族在client-core无任何机械门,ALLOW清单是空头支票 | 移植verify-no-message-branching.mjs,初始ALLOW清单=本底稿H族裁决 | |
188
- | REF-CC-104 | 域词表-11 | keep-with-reason | low | webSearchWireCaps.ts:57-76 | B10类型面枚举225处仅3处数值型真命中,存量已近零 | 不派清理车,把B10建成棘轮门(基线钉3条) | |
189
- | REF-CC-105 | 完备性-06 | gate | high | scripts/run-client-core-all-gates.mjs:30-53 | C1/C2/C5空catch存量好但零机械门,新增不带理由注释今天不会红 | 移植core的gate:failloud,26处空catch进ALLOW基线+棘轮 | |
190
- | REF-CC-106 | TYPESHAPE-16 | test-gap | high | run-client-core-all-gates.mjs全体 | 类型纪律5旋钮+B4/B2普查对现有17道门100%隐形,无tsc门 | 加gate:typeshape,棘轮基线{b4:30,unknownExport:203,bareUnknownReturn:2} | |
191
- | REF-CC-107 | 单例manifest门 | gate | high | scripts/p1scan/singleton-manifest.json(153条基线) | 全仓模块级单例153处已登记,dupRisk=high 73条/low 80条,当前无常驻门读取此基线做棘轮 | 建run-client-core-singleton-test.mjs读该基线,73条high逐条排per-session化(D族fleet2-06/07、C族hitl2-09为其中3例) | |
192
- | REF-CC-108 | P4GATE-23 | keep-with-reason | low | run-client-core-all-gates.mjs:1-89 | 收集式runner设计正确(exit码三态+三件套齐) | 保留,按-01/-14/-21补强 | |
193
- | REF-CC-109 | P4GATE-24 | keep-with-reason | low | run-approval-frame-keys-test.mjs:1-59 | ToolApprovalFrame↔SDK双向镜像门,编译钉已核实为真钉 | 保留,可选加SDK dist布局变化的exit 9兜底 | |
194
- | REF-CC-110 | P4GATE-25 | keep-with-reason | low | run-print-bash-iserror-test.mjs:41-68 | Bash is_error派生门8条行为断言,结构清晰无SKIP假绿 | 保留,裸assert统一改ck计数 | |
195
- | REF-CC-111 | P4GATE-26 | keep-with-reason | low | run-plan-review-decide-verify-test.mjs:40-123 | decide 2xx不当终态门,反空转硬锚+四路真形负控 | 保留,头注补"措辞即判据"说明 | |
196
- | REF-CC-112 | P4GATE-27 | keep-with-reason | low | run-shell-gate-durable-allow-test.mjs:61-181 | 本仓判别力最强行为门,每组写明"修前会绿吗" | 保留,定为行为门规范样板 | |
197
- | REF-CC-113 | P4GATE-28 | keep-with-reason | low | run-client-core-diff-test.mjs:44-1653 | 唯一带可复跑产品级变异开关的门(SEMA_DIFF_EMPTY_ADAPT) | 保留,变异开关升级为收集器每次自动跑一遍 | |
198
- | REF-CC-114 | P4GATE-29 | keep-with-reason | low | run-client-core-portability-test.mjs:217-466 | 传递闭包+浏览器打包门结构完整,等值门非子集门 | 保留,按-15/-16/-19修补 | |
199
- | REF-CC-115 | P4GATE-30 | keep-with-reason | low | run-engine-vocab-floor-test.mjs:138-361 | 引擎词表地板门方向纪律最清楚,四抽取器带伪造样本正控 | 保留,-12是唯一实质缺口优先修 | |
200
- | REF-CC-116 | P4GATE-31 | keep-with-reason | low | run-fleet-view-keys-test.mjs:101-345 | fleet投影双向键集门样板级,A'输入新鲜度单列 | 保留,-13根治方向=壳侧也导出运行时键清单 | |
201
- | REF-CC-117 | P4GATE-32 | keep-with-reason | low | run-seat-contract-keys-test.mjs:94-219 | 座位IPC SPEC↔类型键集双向等值门,编译钉已核实 | 保留,按-18划清ck/probe边界 | |
202
- | REF-CC-118 | P4GATE-33 | keep-with-reason | low | run-background-view-test.mjs:119-291 | createBackgroundView生命周期门,少数把"读错键"做成可复跑变异负控 | 保留,-08修完即可 | |
203
- | REF-CC-119 | P4GATE-34 | keep-with-reason | low | run-streamjson-timing-honesty-test.mjs:62-238 | stream-json时序诚实门,悬置源流+Promise.race区分构造错/产品错 | 保留,-04/-05是唯一结构性缺口 | |
204
- | REF-CC-120 | P4GATE-35 | keep-with-reason | low | run-client-core-pure-test.mjs:32-5620 | 纯函数回归钉5624行,条件腿登记表是本仓反僵尸最佳实践 | 保留,-06/-07/-09/-10按序修,可考虑分段拆文件 | |
205
- | REF-CC-121 | P4GATE-36 | test-gap | medium | run-usage-verbatim-channel-test.mjs:1-111 | 逐字usage通道门判别力集中在②段,①③头注声称有牙实为恒真/弱判据 | 按-03修正控,按-10改d.ts判据,头注同步改写 | |
206
- | REF-CC-122 | P4GATE-37 | keep-with-reason | low | run-sdk-floor-test.mjs:123-207 | devDep SDK版本地板门判据锚在决定结果的量上落实最彻底 | 保留,补-11两种写法对照样本 | |
207
- | REF-CC-123 | P4GATE-38 | keep-with-reason | low | run-public-surface-test.mjs:55-253 | 对外承诺门单例结构前提+发布面清单双管齐下 | 保留,-02是本镜头最高价值项,建议P3首批 | |
208
-
209
- ---
210
-
211
- ## H族:散点fix(B8/B10/unref/C2写路径 + toolResult.ts结构债,17条)
212
-
213
- 族内:17 条,severity 分布 high×2 / medium×10 / low×5。**镜头间矛盾(完备性-12 指名)**:域词表-13(fix-outright/high,判 agentsWireCaps.ts:373-386 的 unref 是 C3 控制流红,要求拔除)与域词表-14(merge/low,把同一行位 agentsWireCaps.ts:383 列进"unref 兼容套 5 份手抄"要合并成公共 shim)**方向相反**——若先做 14 的 merge,会把 13 要拔的 unref 行为固化进公共 shim 并反伤其余 4 个合法的保活豁免消费点。**裁决执行序钉死:13 先做(该处改为不 unref 或换退出机制),14 后做**;merge 出的 shim 必须显式分两形(controlFlowTimeout 禁 unref / backgroundTimeout 带 unref),与 I 族 TimersPort 统一底座同案设计,避免三张 timer 工单各造一套。toolResult.ts 四条(SPLIT-08/09/10/TG-11)与本族 B8 两条(域词表-04/09)同文件,建议同一 P3 车处理。
214
-
215
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
216
- |---|---|---|---|---|---|---|---|
217
- | REF-CC-124 | 域词表-03 | fix-outright | medium | sandboxWire.ts:126-155 | 四条sandbox拒绝hint锚另一个仓的行号,server改字即静默失效 | 向server要errorCode,过渡期常量化进ALLOW清单 | |
218
- | REF-CC-125 | 域词表-04 | fix-outright | medium | toolResult.ts:209-219 | parseBackgroundReceipt三代文案正则,旧分支永不能删 | structured位设唯一判据,本函数降级显式登记的legacy回落 | |
219
- | REF-CC-126 | 域词表-05 | keep-with-reason | low | detachWire.ts:153-170,classifierVerdictWire.ts:29-76,engineTaskHandleWire.ts:173-212 | 三处文本匹配已收敛成具名常量+结构性合取,B8合规样板 | 三处进ALLOW清单(带属主到期日),作为文案锚具名化样板 | |
220
- | REF-CC-127 | 域词表-06 | fix-outright | medium | engineTaskHandleWire.ts:126-136 | mergeTaskOutput的spool标记判读点与toolResult.ts正则各判一遍,写法还不同 | 提单源spoolMarkerOf纯函数供两处消费 | |
221
- | REF-CC-128 | 域词表-08 | keep-with-reason | low | runStream.ts:222-227 | maxTokHint纯supplement文案,误判只增减一行提示不改控制流 | 进ALLOW清单,单列"命中只流向拼接不流向if/return"这类 | |
222
- | REF-CC-129 | 域词表-09 | keep-with-reason | low | toolResult.ts:138-207 | 8处文案协议解析点是CC逐字parity面,改不得但两件必须做 | modelFacingParseCount接常驻断言;标记表E3收敛消双判读 | |
223
- | REF-CC-130 | 域词表-13 | fix-outright | high | agentsWireCaps.ts:373-386 | Promise.race唯一有界退出臂被unref,是真被await的控制流(RB-447同形) | 去掉unref,改race settle后clearTimeout;**执行须早于域词表-14** | |
224
- | REF-CC-131 | 域词表-15 | config | medium | workflowClient.ts:499-534等 | 轮询/退避节拍裸数字,三个3000语义各不同却长得一样 | 逐个命名(NO_RUN_BACKOFF_MS等),A3门:数字直出setTimeout位=红 | |
225
- | REF-CC-132 | 域词表-18 | fix-outright | medium | approvalsFeed.ts:196-262 | scheduleStreamRetry缺幂等卫兵+回调不自清,可致双倍取件 | 补与schedulePoll对称的进入早退+回调首行自清 | |
226
- | REF-CC-133 | TYPESHAPE-11 | fix-outright | medium | host.ts:37-47 | SettingsPort.getSettingsForSource返回裸unknown,承载安全语义 | 定义命名SettingsDocument,或至少改Record<string,unknown>并注理由 | 🔴BREAKING(签名级:三端宿主的 SettingsPort 实现签名受约束;[2393] sweep-F5 进提货单 S 组) |
227
- | REF-CC-134 | TYPESHAPE-14 | merge | medium | toolResult.ts:175-206 | parseModelFacingTaskOutput返回4成员内联匿名形,eopt下3处构造点报红 | 抽命名DU ModelFacingTaskOutput,消B4违规+3条eopt红 | 🔴BREAKING(签名级:`kind:'unknown'` 臂无 `output` 键,下游裸访问编译红;[2393] sweep-F5 进提货单 S 组) |
228
- | REF-CC-135 | TYPESHAPE-15 | fix-outright | medium | controlRouter.ts:385-393 | errCodes自称"判型单源"却返回3个裸unknown内联匿名形 | 改具名interface ErrCodes,在函数体内窄化成string/number | 🔴BREAKING(签名级 + **行为面**:脏形不再原样透传,[2393] sweep-F5/F6 已进 docs/refactor/README.md 提货单 S 组与 B 组) |
229
- | REF-CC-136 | SPLIT-08 | split | high | toolResult.ts:403-756 | structuredToToolUseResult 354行14case,共享状态少但两条跨case前置副作用 | 改注册表StructuredArm,字段上限与workflow-run副作用留主函数不进臂 | |
230
- | REF-CC-137 | SPLIT-09 | split | medium | toolResult.ts:463-507 | case'edit'内联45行文本编辑应用引擎,$字符替换陷阱零钉 | 抽applyStructuredEdits纯函数,补$/空oldStr/双形键钉 | |
231
- | REF-CC-138 | SPLIT-10 | split | medium | toolResult.ts:673-750 | case'task-output'78行单case,唯一回头解模型面文本的分支 | 拆resolveTaskOutputBody+projectTaskOutputByType两层 | |
232
- | REF-CC-139 | TG-11 | test-gap | high | run-client-core-diff-test.mjs:1069 | 14个structured case中约11个typed产物零断言(diff门HAS_CLI才跑) | diff门structured产物断言移植成pure门无条件包内腿 | |
233
- | REF-CC-140 | 域词表-14 | merge | low | approvalsFeed.ts:144-147等5处 | unref兼容套三种写法5份手抄,低层原语层面可安全统一 | 抽unrefTimer(t)工具,**须晚于域词表-13执行**,不统一"该不该unref" | |
234
-
235
- ---
236
-
237
- ## I族:merge收敛族(轮询原语/探针底座/词表单源,12条)
238
-
239
- 族内:12 条,severity 分布 high×0 / medium×9 / low×3。**核心裁决(domain-21 census 定谳)**:D族循环(8处轮询/重试/看门狗环)不收编成通用 poller——策略维度(循环体裁/终止量/节拍语义/失败后是否继续/abort归属/谁持有状态)互不兼容,统一后正确性核心会消失在配置参数里。**只抽两个低层原语**:(a) abortableSleep(ms,signal)——域词表-17 是它的唯一直接消费缺口;(b) unrefTimer/TimersPort接线——域词表-12/14/TYPESHAPE-10 三条都指向它。dup-04(含域词表-16)是探针底座的统一目标,engineCapsCache.ts 是最接近的现成底座。dup-02(env旗语拼写)、dup-07(含dup-10,argv取值)、dup-11(uuid铸造)、dup-12(Covers类型钉)、TYPESHAPE-12/13(探测opts/tick形状)都是独立的单源化目标,互不依赖,可并行执行。
240
-
241
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
242
- |---|---|---|---|---|---|---|---|
243
- | REF-CC-141 | dup-02 | merge | high | forkWireCaps.ts等10文件 | env布尔旗拼写集合4套互不相同,off/no静默不生效 | 建envFlagOff/envFlagOn叶模块,十处调用点全改吃它 | |
244
- | REF-CC-142 | dup-04(含域词表-16) | merge | medium | engineSubagentTail.ts等5套+detachWire/limitsWire | 引擎能力/版本探测判决5+2套实现,TTL/预算/失败缓存策略三分叉 | 收编成engineCapsCache的engineCapProbe(baseUrl,key,opts) | |
245
- | REF-CC-143 | dup-07(含dup-10) | merge | medium | limitsWire.ts等5处 | argv取flag最后值语义5处同形循环,缺值策略三分(fail-loud/交调用方/静默跳过) | 提lastFlagValue共用叶 | **[2393] sweep-F11 改正**:处置列原写「缺值策略**统一** fail-loud(权限/沙箱域)」,与落地相悖 —— `argvFlagValue.ts:66-78` 明确保留**两种**策略叶(`'invalidate'` / `'latch-previous'`),`headlessPermissionModeWire.ts:80` 显式传 `'latch-previous'`(wave1 回炉修的真回归:此前误用了共用叶的 invalidate 缺省)。落地是对的,台账没修订;按旧行读会以为五处都统一成了 fail-loud。另见 sandboxWire/scenarioWire 头注里同批补的「哪一种输入不再 fail-loud」(重复旗且后一次合法 ⇒ LAST wins) |
246
- | REF-CC-144 | dup-11 | merge | low | controlRouter.ts:371-384↔adapter/types.ts:57-74 | 本地uuid铸造函数逐字重复两份 | controlRouter删私有副本改import types.js | |
247
- | REF-CC-145 | dup-12 | merge | low | effortWire.ts:39等4处 | Covers<A,B>类型级钉四份逐字相同,门自身实现也要复审 | 提到type-only叶typePins.ts四处import | |
248
- | REF-CC-146 | 域词表-12 | split | medium | host.ts:61-64,203-208 | TimersPort已公开导出但13个定时器创建点仅2个走它,11个裸用 | 建裸setTimeout机械门,ALLOW仅留port缺席时必须工作的处 | |
249
- | REF-CC-147 | 域词表-17 | fix-outright | medium | workflowClient.ts:533-573 | sleep()非abort-aware,dispose后最多多跑一轮+悬挂timer拖住进程 | 搬backgroundView.ts:348-361的abort感知sleep,两处合并成共享helper | |
250
- | REF-CC-148 | 域词表-19 | keep-with-reason | low | headlessReconnectWire.ts:157-214 | SSE重连环终止条件五重齐全,本仓D族最佳样板 | 保留作对照样板,isSseIdleError判据可提到环外+补预算选值说明 | |
251
- | REF-CC-149 | 域词表-21 | keep-with-reason | medium | askGateWire.ts:540等8处+adapt.ts:844-877对照 | D族循环全集登记(6处题面+2处新找到+1对照样板),策略维度互不兼容 | 只抽abortableSleep+unrefTimer两个低层原语,重试预算/退避曲线留各处 | |
252
- | REF-CC-150 | TYPESHAPE-10 | merge | low | host.ts:61-65↔seam.ts:23-24 | TimersPort返回裸unknown,同包已有命名不透明别名TimerHandle未用 | 63/64行改用TimerHandle | |
253
- | REF-CC-151 | TYPESHAPE-12 | merge | low | agentsWireCaps.ts:278-305↔liveInitToolFace.ts:148 | 探测请求4成员形状写两遍,timeoutMs默认值还不同(3000 vs 2000) | 抽EngineProbeOpts统一,WireConfig消掉字段搬运 | |
254
- | REF-CC-152 | TYPESHAPE-13 | merge | low | seam.ts:212↔engineInlineTaskStats.ts:58 | inline task统计tick形状跨模块内联两份,非DU直接成员不享B4豁免 | 抽命名interface InlineTaskTick两处共用 | |
255
-
256
- ---
257
-
258
- **P2 裁决(2026-08-02)**:全 GO 一小卡(153~158;155 policy 读取失败 fail-closed=行为面,宪法过=安全敏感面 [2374] 背书)。
259
-
260
- ## J族:中型带轮廓(midband产出,6条)
261
-
262
- 族内:6 条,severity 分布 high×1 / medium×2 / low×0 / gate×1(medium) / test-gap×1(medium) / keep×1。无矛盾,六件目标里 workflowMonitor.ts 与 model/catalog.ts 是全场最干净的两份(无 split/merge 候选、C1/C5/B10 贯彻最好),midband-06 直接喂 #88 断言候选。
263
-
264
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
265
- |---|---|---|---|---|---|---|---|
266
- | REF-CC-153 | midband-01 | fix-outright | high | workflowClient.ts:78-87,427-439 | noteDegrade的else分支不清code/degraded,旧值陈旧误导诊断 | else分支显式清code=null,或code/degraded/lastError收discriminated union | |
267
- | REF-CC-154 | midband-02 | gate | medium | seam.ts:310-354 | CHROME_ARMS是数组非Record,新增判别值不会编译期强制补表 | 改Record<ChromeArmKind,…>声明,Object.entries派生数组对外形 | |
268
- | REF-CC-155 | midband-03 | fix-outright | medium | hooksWireCaps.ts:72-79,323-329 | 两处catch静默吞异常且policy读取失败即等价"无限制"(安全敏感) | 补hostLog记录,policy读取失败考虑fail-closed | |
269
- | REF-CC-156 | midband-04 | split | low | hooksWireCaps.ts:81-302 | 57%文件体量是/goal专属Stop-hook逻辑与通用hooks投影两个关注点缝合 | 拆goalStopHook.ts,hooksForWire()尾部合流 | |
270
- | REF-CC-157 | midband-05 | fix-outright | high | cloudConfigWireCaps.ts:68-183 | mcp/models两域丢弃畸形行零回执,同文件skills域有对称留痕机制 | 仿skillsMissingBody给mcp/models补droppedServers等留痕清单 | |
271
- | REF-CC-158 | midband-06 | test-gap | medium | model/catalog.ts:228-318 | #88"全表不分地域"现状为真但零常驻断言,纯人工审查结论 | 加断言:构造假想region字段payload,断言输出不因地域值被过滤 | |
272
-
273
- ---
274
-
275
- **P2 裁决(2026-08-02)**:全部按表标 resolved/keep,零车。
276
-
277
- ## K族:keep-with-reason与rejected候选(9条)
278
-
279
- 族内:9 条,均为"已由后续镜头解决/低优先级不单开工单"类,不产生独立 P3 车次。severity 分布 high×0(完备性-02除外按原severity计) / medium×1 / low×1 / 其余为coverage类meta finding无severity。
280
-
281
- | REF-CC-NNN | 原id | kind | sev | file:lines | 一句话 | 镜头建议修法 | P2裁决 |
282
- |---|---|---|---|---|---|---|---|
283
- | REF-CC-159 | 完备性-01 | test-gap | high(已解决) | notifications.ts | notifications.ts结构扫描缺口已由notif镜头(sup2)902行逐行补齐,见B族 | 无需再派车,标记resolved | |
284
- | REF-CC-160 | 完备性-02 | test-gap | high(已解决) | src/全仓单例 | singleton镜头失败零产出已重跑,产出153条单例基线,见G族REF-CC-107 | 无需再派车,标记resolved | |
285
- | REF-CC-161 | 完备性-03 | test-gap | medium(已解决) | hitl/目录 | hitlBridge/toolApprovalWire/planReviewWire/approvalsFeed结构扫描缺口已由hitl2镜头(sup3)全量逐行补齐,见C族 | 无需再派车,标记resolved | |
286
- | REF-CC-162 | 完备性-04 | test-gap | medium(已解决) | fleet/目录 | fleetProjection/fleetLedger结构扫描缺口已由fleet2镜头(sup4)全量逐行补齐,见D族 | 无需再派车,标记resolved | |
287
- | REF-CC-163 | 完备性-05 | test-gap | medium(已解决) | eventToSdkMessage.ts | 六镜头零命中的407行文件已由xlate镜头(sup1)全文逐行读完,见E族xlate-03~09 | 无需再派车,标记resolved | |
288
- | REF-CC-164 | 完备性-12 | keep-with-reason | medium(信息性) | agentsWireCaps.ts:373-386 | 域词表-13(拔unref)与域词表-14(merge unref shim)方向矛盾,已在H族族头钉执行序 | 见REF-CC-130/140族头说明,本行仅作索引 | |
289
- | REF-CC-165 | 完备性-13 | test-gap | low(已解决) | workflowClient/seam/hooksWireCaps/catalog/cloudConfigWireCaps/workflowMonitor | 300-600行中型文件零覆盖带已由midband镜头(sup0)六件全部补扫,见J族 | 无需再派车,标记resolved | |
290
- | REF-CC-166 | 完备性-14 | test-gap | low(部分已解决) | seatContract.ts:1-139;scripts/内部重复 | seatContract头部已由xlate镜头855行全文补读(见E族xlate-10~16);scripts/门内部重复仅P4GATE-20部分覆盖(见G族REF-CC-100),未全量jscpd扫描 | scripts/重复普查降级P3尾批,jscpd对scripts/跑一遍即可 | |
291
- | REF-CC-167 | midband-07 | keep-with-reason | low | liveModelCatalog.ts:87-91 | normalizeLiveModelRef用`\|\|`而非`!=null`,空串name时理论上静默回落 | 不单开工单,下次真接触此文件时顺手改;非六件正式扫描目标 | |
292
-
293
- ---
294
-
295
- ## 统计
296
-
297
- **总条数**:并单前 **183** 条(agent0=13/agent1=17/agent2=17/agent3=38/agent4=21/agent5=14/sup0=7/sup1=17/sup2=14/sup3=10/sup4=15)+ singleton-manifest 基线(153条,不计入findings总数,单独在G族立1条门)。
298
-
299
- 并单执行(14处,详见各族族头):
300
- 1. 域词表-01 ⊕ FIX-13 → FIX-13(C族,REF-CC-033)
301
- 2. 域词表-02 ⊕ dup-03 → dup-03(E族,REF-CC-054)
302
- 3. dup-10 ⊕ dup-07 → dup-07(I族,REF-CC-143)
303
- 4. 域词表-16 ⊕ dup-04 → dup-04(I族,REF-CC-142)
304
- 5. dup-13 ⊕ fleet2-03 → fleet2-03(D族,REF-CC-041)
305
- 6. dup-09 ⊕ fleet2-04 → fleet2-04(D族,REF-CC-042)
306
- 7. TYPESHAPE-06 ⊕ fleet2-08 → fleet2-08(D族,REF-CC-046)
307
- 8. dup-06 ⊕ xlate-01 → xlate-01(E族,REF-CC-055)
308
- 9. dup-01 ⊕ xlate-08 → xlate-08(E族,REF-CC-062)
309
- 10. dup-08 ⊕ hitl2-08 → hitl2-08(C族,REF-CC-029)
310
- 11. 完备性-07(3子项) ⊕ {hitl2-02,hitl2-03,hitl2-04} → 三条各自吸收(C族,REF-CC-023/024/025)
311
- 12. 域词表-20 ⊕ notif-12 → notif-12(B族,REF-CC-020)
312
- 13. TYPESHAPE-03 + 完备性-08(2项)⊕ {notif-10,notif-14} → 两条分别吸收(B族REF-CC-018 / F族REF-CC-077)
313
- 14. 完备性-09/10/11(3条纯merge指令,已通过上述1/2/3+4执行,不单独占行)
314
-
315
- **并单后总条数:167 条**(166条源自183条原始findings的去重整理 + 1条G族新立的singleton-manifest门条目)。
316
-
317
- **族分布**:A=8 / B=13 / C=17 / D=15 / E=21 / F=6 / G=43 / H=17 / I=12 / J=6 / K=9(合计167)。
318
-
319
- **kind分布**(167条,按最终呈现的kind统计,含merge产物的kind取survivor的kind):
320
- - fix-outright:约72条(最大类,散布H/E/C/D/B为主)
321
- - keep-with-reason:约28条(G族16条summary汇总占大头,另K族7条resolved,H/I/E各数条)
322
- - test-gap:约27条(G族+C族+B族+完备性系为主)
323
- - merge:约17条(I族核心+E/C/D族各数条)
324
- - split:约14条(A族7条+E族3条+D族2条+J族1条+H族1条)
325
- - gate:约9条(G族数条+D/J族各1条)
326
- - config:约4条(F族)
327
-
328
- **severity分布**(167条,不含K族meta行的原始severity换算):
329
- - high:约33条(集中在G族9/E族6/C族5/A族5/B族3/H族2/D族2/J族1)
330
- - medium:约94条(全族均有分布,C/D/E/G/H最密集)
331
- - low:约31条(P4GATE keep-with-reason汇总占多数)
332
- - 其余(meta/已解决,无独立severity判词):9条(K族)
333
-
334
- **涉及文件 top10**(按findings命中次数,跨族合并统计):
335
- 1. src/notifications.ts — 15次(B族13 + F族notif-14相关1 + 完备性系1)
336
- 2. src/adapt.ts — 12次(A族7 + B族notif-10相关1 + E族4处交叉引用)
337
- 3. src/hitl/askGateWire.ts — 11次(C族)
338
- 4. src/seatContract.ts — 10次(E族)
339
- 5. src/fleet/fleetLedger.ts — 10次(D族)
340
- 6. scripts/run-client-core-pure-test.mjs — 8次(G族)
341
- 7. src/adapter/downstream/terminalToSdkResult.ts — 7次(E族)
342
- 8. src/adapter/downstream/eventToSdkMessage.ts — 7次(E族)
343
- 9. src/toolResult.ts — 7次(H族4 + 域词表2 + TYPESHAPE1)
344
- 10. src/hitl/toolApprovalWire.ts — 6次(C族)
345
-
346
- ---
347
-
348
- ## 收卷后批次登记:#244 族A 包半场 —— 决断卡链四件上收(2026-08-12,车L)
349
-
350
- > 证据正本 = cli 仓 `docs/boundary-census/top-01.md`(条目 1/2/3)与 `top-08.md`(条目 2);
351
- > upstreamShape 已由 census 定稿,本表登记落点与差分。四件同批;门 = 新增常驻套
352
- > `scripts/run-selfheal-reopen-test.mjs`(gates-manifest 已登记,139 checks)+ 25/25 全绿。
353
- > 版本 0.29.0;壳侧换抄件(删本地 + 换 import)归族A 提货车,本批不动壳。
354
-
355
- | id | 原id | kind | sev | 落点 | 一句话 | 落地差分(与壳源形的显式差异) | 状态 |
356
- |---|---|---|---|---|---|---|---|
357
- | REF-CC-168 | A-028.1 | move-up | high | `src/adapter/activeRunSelfHeal.ts`(新)+ `adapter/runStream.ts`(`ActiveRunPendingGate` 具名化) | 409 自愈四路分诊树 + 八种结局文案上收;`pendingGate` 形按壳侧超集(`governanceForced?: true` 严格 true 收窄)归一进包 | ①分诊改**kind 优先 / status 表回退**(修后目标形;表外 kind 不猜臂,走保守臂如实说)——kind 在场不再回查 runs.get;②`ReopenCardVerdict` 成文「真呈现回执」契约:加可选 `presented?: boolean`,`false` 时 reopened 断言降级成 reopen-failed(回执机制留端);③文案端可覆盖(`ActiveRunSelfHealCopy`:wayOut/freshSession/rowFor/headlessRowFor),默认串 = cli 产品面逐字;④deps(hasPendingDecision/reopenPlanReview/reopenAskPark)保持注入口 | DONE |
358
- | REF-CC-169 | A-028.2 | move-up | high | `src/hitl/parkOwnership.ts`(新) | ask park 重开的纯判据三件进包:归属 fail-closed 正向证明 / questions 结构判定 / HitlSafetyError duck 判型 | 命名归一:`soleRowIsOwnedByThisShell`→`pendingRowIsOwnedByThisSession`(session 腿缺省走包 `SessionPort.currentSessionId()`,own-run 腿缺省走包 `isOwnEngineRun`,两腿可注入);`questionsFrom`→`askQuestionsFromPending`;`isHitlSafetyError`→`isHitlSafetyErrorLike`。`approvals.list` 编排与 stderr 留壳(census 定稿) | DONE |
359
- | REF-CC-170 | A-028.3 | move-up | high | `src/hitl/gateIdentity.ts`(新)+ `src/hitl/armedGateRegistry.ts`(新)+ `parkResolver.ts:175` / `toolApprovalWire.ts:377,822` 改吃铸口 | 呈现台账上收 + 三条身份键字面(hitl-ask:/callKey/plan-review:)单源化,`planReviewQuestionId` 转公面 | ①台账改 **sessionSlot per-session** 键(desktop 多引擎会话互不串账;零参 API = DEFAULT_SESSION_KEY 兼容层);②键铸口收编第四员 `hitl-frame:`(同族一并单源);③新增 `clearArmedGate`(A-024.4 消费动词);④字面单源由门的 AST 字符串 token 扫描常驻钉(src 全树三字面唯一命中 = gateIdentity.ts);⑤「没呈现就不算 arm」保持:包 publish 点不代登记,宿主呈现面登记口 = `registerArmedGateFromQuestionId` | DONE |
360
- | REF-CC-171 | A-028.4 | merge | medium | `src/hitl/planReviewWire.ts`(`reopenPlanReviewCard` + `ReopenPlanReviewOpts`) | plan_review 重开臂并入包,与 `armPlanReviewApproval` 合成一条(题面/标签/三态判决/投递管道单源) | ①「铸新 questionId vs 复用同 id」参数化(`mintFreshQuestionId`,缺省铸新 —— 两类宿主都安全;canonical 重呈臂零二次注册);②壳的二态塌陷不搬,重开 responder 走包内三态 `planReviewDecisionFromAnswer`(dismissed 不驱动 decide);③决断投递口可注入(`deliverDecision`,cli 的 decideRetry 编排留壳);④A-024.4 键粒度在包内解决:决断**递交后** `clearArmedGate(canonical)`(arm/reopen 两臂同点)⇒ 同 run 下一个 plan gate 读回首见;残余局限成文:决断递交但未生效(RB-471 族)时读回首见,失真方向 = 首见文案零历史断言(诚实安全侧);⑤重开身份尾缀改**时基+随机段**(不设模块级计数器 —— 双包实例撞键会被宿主去重集吃帧) | DONE |
361
-
362
- 配套登记(同批):portability index 闭包 115→119(四件逐条记账)/ 导出基线 606→634 + 测试钩 30→31 /
363
- typeshape unknownExport 211→217(六处边界位逐条记账)/ singleton-manifest +4(三张 readonly 分诊表 +
364
- armedGatesByKey factory,均 low,high 87 不动)/ gates-manifest+README Guards 补 `run-selfheal-reopen-test.mjs`。
365
-
366
- **复审轮收紧(同批,三条 [high] 全认定为真并修)**:
367
- ① `parkOwnership`:进程级 own-run 缺省腿在**非默认 sessionKey 且未注入 isOwnRun** 时整条跳过
368
- (fail-closed —— 进程级证据无法归属到单个会话;A 起的 run 不因进程台账被 B 认领);deps 补
369
- `sessionKey` 位,会话腿缺省走 `hostSessionFor(sessionKey)`。
370
- ② `reopenPlanReviewCard` 单活纪律:新增 `(sessionKey, canonicalId)` → 在场重开 responder 的单活台账
371
- (`activeReopenResponders`,singleton-manifest 登记 high,门 HIGH_RISK_CEILING 87→88);铸新卡前
372
- 退役上一张(注销 responder + `question_complete` 撤帧)并撤还开着的 canonical 卡 —— 同一 gate
373
- 屏上至多一张能投递决断的卡(迟到作答干净拒绝、零投递)。
374
- ③ `ReopenPlanReviewOpts.sessionKey`:overlay 在场检查 / 帧发布 / 呈现台账读写全链 `*For` 化
375
- (缺省 DEFAULT_SESSION_KEY,cli 零参装配不动)。
376
- 门补 G7 组(多会话路由 + 跨会话归属 fail-closed)与 G6③/⑦ 单活断言;
377
- 测试钩 +1(`_resetActiveReopenRespondersForTest`,基线 32);failloud 豁免棘轮 26→27(retire 臂
378
- 带理由吞,出处见门内注)。修程中门自抓一真缺陷:retire 侧复合键混入裸 NUL 字节、与 set 侧空格分隔键
379
- 不等 ⇒ 退役恒空转,G6③ 红抓获后两侧统一为 `\u0000` 转义序列(该红→绿即本组断言的判别力实证)。
380
-
381
- **复审二轮(两条 [high]:一修一驳)**:
382
- ① 真病照修:fresh 重开只撤 canonical 卡的**帧**、responder 仍在表 ⇒ 在途迟到作答仍可投递 =
383
- 双决断面残口。修 = `liveQuestionStore` 新增按 id 注销动词 `unregisterLocalQuestionResponder`
384
- (导出基线 +1 = 635),fresh 重开时 canonical responder 一并退役;对偶点同批闭合 ——
385
- `armPlanReviewApproval` 守卫后先退役名下在场的 fresh 重开卡(durable 重放 re-arm 不再从 arm 侧
386
- 复发双活);canonical 退役后的 arm 重放由既有「陈旧武装态 ⇒ 整条重 arm」自愈臂([2393] hitl-F3)
387
- 接住。门补 G6⑦a/b/c、G6⑩ 迟到作答竞态与 re-arm 对偶断言,套件共 168 checks。
388
- ② 驳为成文局限(不改行为):「默认 sessionKey 下进程级 own-run 台账跨**会话代际**放行」——
389
- 单会话宿主的出货语义即进程级(owner = 本进程用户;child 委派行 sessionId 天生 ≠ 本会话,
390
- 发现面恰恰依赖进程级证据),最坏形 = 用户看到自己旧会话的审批卡(卡面标注行归属),决断权仍在
391
- 用户手上;台账改会话代际粒度属 own-run 域独立议题(会牵动 fleet/frame 归属全族)。已成文进
392
- `ParkOwnershipDeps.isOwnRun` JSDoc,多会话宿主的同族风险已由一轮的非默认键 fail-closed 挡住。