@accelerator-mzq/forge 2.0.0 → 3.1.1

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.
Files changed (55) hide show
  1. package/README.md +12 -12
  2. package/dist/cli/commands/ack.d.ts.map +1 -1
  3. package/dist/cli/commands/ack.js +87 -12
  4. package/dist/cli/commands/ack.js.map +1 -1
  5. package/dist/cli/commands/archive.d.ts.map +1 -1
  6. package/dist/cli/commands/archive.js +29 -4
  7. package/dist/cli/commands/archive.js.map +1 -1
  8. package/dist/cli/commands/pause-capture.d.ts +24 -0
  9. package/dist/cli/commands/pause-capture.d.ts.map +1 -0
  10. package/dist/cli/commands/pause-capture.js +87 -0
  11. package/dist/cli/commands/pause-capture.js.map +1 -0
  12. package/dist/cli/index.js +3 -0
  13. package/dist/cli/index.js.map +1 -1
  14. package/dist/core/ack/marker-ack.d.ts +28 -0
  15. package/dist/core/ack/marker-ack.d.ts.map +1 -0
  16. package/dist/core/ack/marker-ack.js +155 -0
  17. package/dist/core/ack/marker-ack.js.map +1 -0
  18. package/dist/core/ack-log.d.ts +17 -1
  19. package/dist/core/ack-log.d.ts.map +1 -1
  20. package/dist/core/ack-log.js +10 -7
  21. package/dist/core/ack-log.js.map +1 -1
  22. package/dist/core/archive/ack-log-consistency.d.ts.map +1 -1
  23. package/dist/core/archive/ack-log-consistency.js +2 -1
  24. package/dist/core/archive/ack-log-consistency.js.map +1 -1
  25. package/dist/core/archive/pause-decisions-fence.d.ts +24 -1
  26. package/dist/core/archive/pause-decisions-fence.d.ts.map +1 -1
  27. package/dist/core/archive/pause-decisions-fence.js +263 -49
  28. package/dist/core/archive/pause-decisions-fence.js.map +1 -1
  29. package/dist/core/markers/types.d.ts +7 -2
  30. package/dist/core/markers/types.d.ts.map +1 -1
  31. package/dist/core/parse/unified-diff.d.ts +26 -0
  32. package/dist/core/parse/unified-diff.d.ts.map +1 -0
  33. package/dist/core/parse/unified-diff.js +61 -0
  34. package/dist/core/parse/unified-diff.js.map +1 -0
  35. package/dist/core/templates/commands/ack-confirm.md +1 -1
  36. package/dist/core/templates/commands/apply.md +15 -6
  37. package/dist/core/templates/commands/verify.md +2 -0
  38. package/dist/core/templates/skills/_shared/tier23-command-bridge.md +34 -0
  39. package/dist/core/templates/skills/exploring.md +3 -3
  40. package/dist/core/templates/skills/finishing-a-development-branch.md +6 -21
  41. package/dist/core/templates/skills/requesting-code-review.md +11 -0
  42. package/dist/core/templates/skills/subagent-driven-development.md +9 -0
  43. package/dist/core/templates/skills/using-forge.md +6 -6
  44. package/dist/core/templates/skills/verification-before-completion.md +7 -18
  45. package/dist/core/templates/skills/writing-plans.md +6 -17
  46. package/dist/core/validate/marker-schema.d.ts.map +1 -1
  47. package/dist/core/validate/marker-schema.js +15 -0
  48. package/dist/core/validate/marker-schema.js.map +1 -1
  49. package/dist/index.d.ts +1 -1
  50. package/dist/index.d.ts.map +1 -1
  51. package/dist/index.js +8 -1
  52. package/dist/index.js.map +1 -1
  53. package/package.json +22 -19
  54. package/scripts/codex-review-helper.mjs +337 -0
  55. package/src/core/codex-review/prompts/adversarial-default.md +105 -0
package/dist/cli/index.js CHANGED
@@ -18,6 +18,7 @@ import { buildPreflightCommand } from './commands/preflight.js';
18
18
  import { buildStageExtensionsCommand } from './commands/stage-extensions.js';
19
19
  import { buildBacklogCommand } from './commands/backlog.js';
20
20
  import { buildMonitorCommand } from './commands/monitor.js';
21
+ import { buildPauseCaptureCommand } from './commands/pause-capture.js';
21
22
  import { maybeRecordCliExit } from '../core/monitor/exit-handler.js';
22
23
  // 创建主命令
23
24
  const program = new Command();
@@ -57,6 +58,8 @@ program.addCommand(buildStageExtensionsCommand());
57
58
  program.addCommand(buildBacklogCommand());
58
59
  // 注册 monitor 子命令组(plan-workflow-monitor)
59
60
  program.addCommand(buildMonitorCommand());
61
+ // 注册 pause-capture 子命令(plan pause-fence Block C — Fluid Pause 锚点捕获)
62
+ program.addCommand(buildPauseCaptureCommand());
60
63
  // workflow-monitor:唯一的 CLI 侧埋点(spec §4)。config 守卫确保关闭时零行为。
61
64
  process.on('exit', (code) => {
62
65
  maybeRecordCliExit(process.cwd(), process.argv.slice(2), code);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,28 @@
1
+ export interface MarkerAckResult {
2
+ ok: boolean;
3
+ /** 失败原因(marker/finding 缺失、severity 不合法、marker 写失败已自恢复 等),ok=false 时非空 */
4
+ reason?: string;
5
+ /** ok=true 时:写回 ack-log entry 应带的 finding_hash(ack-pause-warning 为 null) */
6
+ ackLogFindingHash: string | null;
7
+ /**
8
+ * ok=true 时:本次已写 marker 的 .bak 路径列表。供调用方:
9
+ * ack-log 操作失败 → 用 .bak restore 对应 marker(spec §5.1.4 rollback);
10
+ * 成功 → best-effort unlink .bak 清理。ok=false 时为 [](applyMarkerAck 内部已自恢复)。
11
+ */
12
+ backups: string[];
13
+ }
14
+ /**
15
+ * applyMarkerAck — 按 action 定位 marker 并写 ack 字段。**永不抛错**:
16
+ * marker/finding 缺失、severity 不合法、marker 写失败 → 一律返回 { ok:false }
17
+ * (写失败时 writeMarkersAtomic 已自恢复所有 marker)。调用方据 ok=false → exit 2。
18
+ */
19
+ export declare function applyMarkerAck(params: {
20
+ changeDir: string;
21
+ action: string;
22
+ findingId: string;
23
+ user: string;
24
+ ackedAt: string;
25
+ rationale: string | null;
26
+ targetSeverity: 'WARNING' | 'SUGGESTION' | null;
27
+ }): Promise<MarkerAckResult>;
28
+ //# sourceMappingURL=marker-ack.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-ack.d.ts","sourceRoot":"","sources":["../../../src/core/ack/marker-ack.ts"],"names":[],"mappings":"AA6DA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,yEAAyE;IACzE,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,4EAA4E;IAC5E,iBAAiB,EAAE,MAAM,GAAG,IAAI,CAAC;IACjC;;;;OAIG;IACH,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;;GAIG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAC3C,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,cAAc,EAAE,SAAS,GAAG,YAAY,GAAG,IAAI,CAAC;CACjD,GAAG,OAAO,CAAC,eAAe,CAAC,CAgH3B"}
@@ -0,0 +1,155 @@
1
+ // marker-ack.ts: Task A2 — marker ack 字段写入 + 定位逻辑
2
+ // 按 action 类型定位对应 marker 文件,写入 severity_acked_by/at 等 ack 字段
3
+ // 采用原子写 + 备份回滚机制,保证 marker 一致性
4
+ import { readFile, writeFile, rename, copyFile } from 'node:fs/promises';
5
+ import { existsSync } from 'node:fs';
6
+ import { join } from 'node:path';
7
+ import { parse as parseYaml, stringify as stringifyYaml } from 'yaml';
8
+ import { extractHashPayload, computeFindingHash } from '../validate/finding-hash.js';
9
+ /** 原子写单文件:先写 tmp 再 rename,避免写到一半崩溃留下半文件 */
10
+ async function atomicWriteYaml(filePath, obj) {
11
+ const tmp = `${filePath}.tmp`;
12
+ await writeFile(tmp, stringifyYaml(obj), 'utf8');
13
+ await rename(tmp, filePath);
14
+ }
15
+ /**
16
+ * writeMarkersAtomic — 备份并原子写一组 marker;**任一写失败 → 恢复所有已写的、抛错**。
17
+ * 这是 A3 双 marker 自回滚的核心:写第 2 个 marker 失败时第 1 个会被恢复。
18
+ * 返回 .bak 路径列表(与 writes 顺序对齐)。
19
+ */
20
+ async function writeMarkersAtomic(writes) {
21
+ // 先为每个 marker 建备份
22
+ const backups = writes.map((w) => `${w.path}.bak`);
23
+ for (let i = 0; i < writes.length; i++)
24
+ await copyFile(writes[i].path, backups[i]);
25
+ const written = [];
26
+ try {
27
+ for (let i = 0; i < writes.length; i++) {
28
+ await atomicWriteYaml(writes[i].path, writes[i].content);
29
+ written.push(i);
30
+ }
31
+ }
32
+ catch (e) {
33
+ // 尽力恢复所有已写 marker;收集恢复失败,不让单个失败中断其余恢复
34
+ const restoreErrors = [];
35
+ for (const i of written) {
36
+ try {
37
+ await copyFile(backups[i], writes[i].path);
38
+ }
39
+ catch (re) {
40
+ restoreErrors.push(`${writes[i].path}: ${re instanceof Error ? re.message : String(re)}`);
41
+ }
42
+ }
43
+ if (restoreErrors.length > 0) {
44
+ throw new Error(`marker 写失败且 rollback incomplete —— 未恢复: ${restoreErrors.join('; ')}` +
45
+ `;原错误: ${e instanceof Error ? e.message : String(e)}`);
46
+ }
47
+ throw e;
48
+ }
49
+ return backups;
50
+ }
51
+ /**
52
+ * applyMarkerAck — 按 action 定位 marker 并写 ack 字段。**永不抛错**:
53
+ * marker/finding 缺失、severity 不合法、marker 写失败 → 一律返回 { ok:false }
54
+ * (写失败时 writeMarkersAtomic 已自恢复所有 marker)。调用方据 ok=false → exit 2。
55
+ */
56
+ export async function applyMarkerAck(params) {
57
+ const { changeDir, action, findingId, user, ackedAt } = params;
58
+ const verifyPath = join(changeDir, '.verify-passed');
59
+ const reviewPath = join(changeDir, '.review-passed');
60
+ // 统一的失败构造器
61
+ const FAIL = (reason) => ({
62
+ ok: false,
63
+ reason,
64
+ ackLogFindingHash: null,
65
+ backups: [],
66
+ });
67
+ try {
68
+ if (action === 'ack-warning') {
69
+ // 定位 .verify-passed marker 中的 finding,写 severity_acked_by/at
70
+ if (!existsSync(verifyPath))
71
+ return FAIL('.verify-passed 不存在');
72
+ const marker = parseYaml(await readFile(verifyPath, 'utf8'));
73
+ const findings = marker.verify_findings ?? [];
74
+ const f = findings.find((x) => String(x.id) === findingId);
75
+ if (!f)
76
+ return FAIL(`verify_findings 无 id=${findingId}`);
77
+ // 写入 ack 字段
78
+ f.severity_acked_by = user;
79
+ f.severity_acked_at = ackedAt;
80
+ // 原子写,备份用于 A5 事务回滚
81
+ const backups = await writeMarkersAtomic([{ path: verifyPath, content: marker }]);
82
+ // 计算 finding_hash 并返回(ack-warning 不修改 8 字段 payload,hash 不变)
83
+ return {
84
+ ok: true,
85
+ ackLogFindingHash: computeFindingHash(extractHashPayload(f)),
86
+ backups,
87
+ };
88
+ }
89
+ if (action === 'ack-pause-warning') {
90
+ // §5.1.3 步骤 4-5:同步写 .verify-passed 与 .review-passed 的 pause_decisions ack 字段
91
+ // 1. 先全量校验两个 marker 都存在且都含该 pause decision,fail-closed:任一不满足 → 不写任何 marker
92
+ if (!existsSync(verifyPath))
93
+ return FAIL('.verify-passed 不存在');
94
+ if (!existsSync(reviewPath))
95
+ return FAIL('.review-passed 不存在');
96
+ // 剥 "pause_decisions:" 前缀得到数字 id 字符串
97
+ const pdIdStr = findingId.replace(/^pause_decisions:/, '');
98
+ const verifyMarker = parseYaml(await readFile(verifyPath, 'utf8'));
99
+ const reviewMarker = parseYaml(await readFile(reviewPath, 'utf8'));
100
+ const verifyPds = verifyMarker.pause_decisions ?? [];
101
+ const reviewPds = reviewMarker.pause_decisions ?? [];
102
+ const verifyPd = verifyPds.find((pd) => String(pd['id']) === pdIdStr);
103
+ if (!verifyPd)
104
+ return FAIL(`.verify-passed pause_decisions 无 id=${pdIdStr}`);
105
+ const reviewPd = reviewPds.find((pd) => String(pd['id']) === pdIdStr);
106
+ if (!reviewPd)
107
+ return FAIL(`.review-passed pause_decisions 无 id=${pdIdStr}`);
108
+ // 2. 两个 marker 都校验通过 → 写入同一 ack 值(保证一致性)
109
+ verifyPd['severity_acked_by'] = user;
110
+ verifyPd['severity_acked_at'] = ackedAt;
111
+ reviewPd['severity_acked_by'] = user;
112
+ reviewPd['severity_acked_at'] = ackedAt;
113
+ // 3. 双 marker 原子写:第二个写失败时 writeMarkersAtomic 自动恢复第一个并抛错
114
+ const backups = await writeMarkersAtomic([
115
+ { path: verifyPath, content: verifyMarker },
116
+ { path: reviewPath, content: reviewMarker },
117
+ ]);
118
+ // 4. pause decision 无 FindingHashPayload,ackLogFindingHash 为 null
119
+ return { ok: true, ackLogFindingHash: null, backups };
120
+ }
121
+ if (action === 'downgrade') {
122
+ // §5.1 downgrade 行:仅允许 WARNING → SUGGESTION,CRITICAL/SUGGESTION 均拒绝
123
+ if (!existsSync(verifyPath))
124
+ return FAIL('.verify-passed 不存在');
125
+ const marker = parseYaml(await readFile(verifyPath, 'utf8'));
126
+ const findings = marker.verify_findings ?? [];
127
+ const f = findings.find((x) => String(x.id) === findingId);
128
+ if (!f)
129
+ return FAIL(`verify_findings 无 id=${findingId}`);
130
+ // severity 校验:仅 WARNING 允许 downgrade;CRITICAL 无 ack 路径,SUGGESTION 无需降级
131
+ if (f.severity !== 'WARNING') {
132
+ return FAIL(`downgrade 仅允许 WARNING → SUGGESTION,当前 severity=${String(f.severity)} 不支持`);
133
+ }
134
+ // 固定写 'WARNING'(spec 语义:downgraded_from 记录降级前的原始级别)
135
+ f.downgraded_from = 'WARNING';
136
+ // 先改 severity,再重算 hash(使 hash 反映新 severity=SUGGESTION)
137
+ f.severity = 'SUGGESTION';
138
+ f.downgrade_acked_by = params.user;
139
+ f.downgrade_rationale = params.rationale;
140
+ // 重算 finding_hash:此时 f.severity 已是 SUGGESTION
141
+ const newHash = computeFindingHash(extractHashPayload(f));
142
+ f.finding_hash = newHash;
143
+ // 原子写 .verify-passed,备份供 A5 事务回滚
144
+ const backups = await writeMarkersAtomic([{ path: verifyPath, content: marker }]);
145
+ return { ok: true, ackLogFindingHash: newHash, backups };
146
+ }
147
+ // 其余 action:不写 marker,finding_hash 为 null
148
+ return { ok: true, ackLogFindingHash: null, backups: [] };
149
+ }
150
+ catch (e) {
151
+ // marker 写失败 → writeMarkersAtomic 已自恢复所有已写 marker;此处转 ok:false
152
+ return FAIL(`marker 写入失败(已回滚): ${e instanceof Error ? e.message : String(e)}`);
153
+ }
154
+ }
155
+ //# sourceMappingURL=marker-ack.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"marker-ack.js","sourceRoot":"","sources":["../../../src/core/ack/marker-ack.ts"],"names":[],"mappings":"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"}
@@ -37,8 +37,24 @@ export interface EvidenceHelperEntry {
37
37
  prev_entry_hash?: string | null;
38
38
  extra: Record<string, unknown>;
39
39
  }
40
+ /** pause-capture 操作日志条目(kind='pause-capture') — plan pause-fence Block C
41
+ * Fluid Pause 触发时 `forge pause-capture` 写入,记录 pause 时刻 tasks.md 的全部 task id。
42
+ * 沿全 JSONL 链:prev_entry_hash 跨 kind 递推(同 AckEntry / EvidenceHelperEntry)。 */
43
+ export interface PauseCaptureEntry {
44
+ schema: 'forge-ack-log/v1';
45
+ kind: 'pause-capture';
46
+ timestamp: string;
47
+ capture_id: string;
48
+ change_id: string;
49
+ task_ref: string;
50
+ pause_issue_summary: string;
51
+ tasks_md_task_ids: string[];
52
+ git_head: string | null;
53
+ prev_entry_hash?: string | null;
54
+ extra: Record<string, unknown>;
55
+ }
40
56
  /** ack 日志条目判别联合 */
41
- export type AckLogEntry = AckEntry | EvidenceHelperEntry;
57
+ export type AckLogEntry = AckEntry | EvidenceHelperEntry | PauseCaptureEntry;
42
58
  /** listPending 返回的单条记录 */
43
59
  export interface PendingItem {
44
60
  /** 文件绝对路径(plan §7 line 1000 spec 字段名 'path') */
@@ -1 +1 @@
1
- {"version":3,"file":"ack-log.d.ts","sourceRoot":"","sources":["../../src/core/ack-log.ts"],"names":[],"mappings":"AAaA,6BAA6B;AAC7B,MAAM,WAAW,QAAQ;IACvB,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,KAAK,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,eAAe,CAAC,EAAE,SAAS,GAAG,YAAY,CAAC;IAC3C;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,qDAAqD;AACrD,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,kBAAkB,CAAC;IAC3B,IAAI,EAAE,iBAAiB,CAAC;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,EAAE,YAAY,GAAG,eAAe,GAAG,eAAe,GAAG,QAAQ,CAAC;IACzE,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,SAAS,GAAG,SAAS,GAAG,QAAQ,CAAC;IACzC,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB;;;;OAIG;IACH,eAAe,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAChC;AAED,mBAAmB;AACnB,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,mBAAmB,CAAC;AAMzD,0BAA0B;AAC1B,MAAM,WAAW,WAAW;IAC1B,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,yBAAyB;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,2BAA2B;IAC3B,SAAS,EAAE,MAAM,CAAC;CACnB;AAkBD;;;;;;;;;;;GAWG;AACH,wBAAsB,YAAY,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CA0BxF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAO/F;AAED;;;;;;;;GAQG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CA0ChG;AAMD;;;;;;;;GAQG;AACH,wBAAsB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC,CAkBrF;AAED,wCAAwC;AACxC,MAAM,WAAW,uBAAuB;IACtC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;;;GASG;AACH,wBAAgB,iBAAiB,CAC/B,UAAU,EAAE,WAAW,EAAE,EACzB,cAAc,EAAE,MAAM,GAAG,IAAI,EAC7B,gBAAgB,EAAE,MAAM,GAAG,IAAI,GAC9B,uBAAuB,CAsCzB"}
1
+ {"version":3,"file":"ack-log.d.ts","sourceRoot":"","sources":["../../src/core/ack-log.ts"],"names":[],"mappings":"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"}
@@ -10,10 +10,11 @@ import { canonicalHash } from './canonical-json.js'; // plan-9g Task 3:全 JSONL
10
10
  // ──────────────────────────────────────────────────────────────────────────────
11
11
  /** pending-acks 目录相对于 changeRoot 的路径 */
12
12
  const PENDING_DIR_REL = '.evidence/pending-acks';
13
- /** 文件名正则:匹配 <findingId>-<safeTimestamp>.yaml */
14
- // findingId 由数字组成;\d+ 捕获
15
- // safeTimestamp ISO 时间戳中冒号已替换为连字符后的结果
16
- const PENDING_FILE_RE = /^(\d+)-(.+)\.yaml$/;
13
+ /** 文件名正则:匹配 <encodeURIComponent(findingId)>-<safeTimestamp>.yaml */
14
+ // 文件名 <encodeURIComponent(findingId)>-<safeTimestamp>.yaml
15
+ // safeTimestamp = ISO 时间戳冒号替换连字符:YYYY-MM-DDTHH-MM-SS.mmmZ
16
+ // timestamp 段从右精确锚定 → group 1(findingId)即使含 '-' 也无切分歧义
17
+ const PENDING_FILE_RE = /^(.+)-(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}\.\d{3}Z)\.yaml$/;
17
18
  // ──────────────────────────────────────────────────────────────────────────────
18
19
  // 公开 API
19
20
  // ──────────────────────────────────────────────────────────────────────────────
@@ -62,9 +63,10 @@ export async function appendAckLog(changeRoot, entry) {
62
63
  * Windows 安全:ISO 时间戳中的 ':' 替换为 '-'(冒号在 Windows 文件名中非法)
63
64
  */
64
65
  export function getPendingPath(changeRoot, findingId, timestamp) {
65
- // 将 ISO 时间戳中的冒号替换为连字符,确保 Windows 文件系统兼容
66
66
  const safeTimestamp = timestamp.replace(/:/g, '-');
67
- const fileName = `${findingId}-${safeTimestamp}.yaml`;
67
+ // findingId 可能含 ':'(pause_decisions:<id>),encodeURIComponent 编码为 %3A;
68
+ // 纯数字 id 编码后不变 → 向后兼容
69
+ const fileName = `${encodeURIComponent(findingId)}-${safeTimestamp}.yaml`;
68
70
  // path.join 在 Windows 上返回反斜杠;统一替换为正斜杠,使路径在跨平台测试中可靠匹配
69
71
  // Windows 文件系统 API 同时接受正斜杠路径
70
72
  return path.join(changeRoot, PENDING_DIR_REL, fileName).replace(/\\/g, '/');
@@ -99,7 +101,8 @@ export async function listPending(changeRoot, findingId) {
99
101
  if (!match)
100
102
  continue; // 跳过不符合命名规范的文件
101
103
  // match[1] 和 match[2] 由正则捕获组保证存在,但 TypeScript 认为可能 undefined
102
- const parsedFindingId = match[1] ?? '';
104
+ // group 1 encodeURIComponent 编码后的 findingId,decodeURIComponent 还原原始值
105
+ const parsedFindingId = decodeURIComponent(match[1] ?? '');
103
106
  const safeTimestamp = match[2] ?? '';
104
107
  // 可选 findingId 过滤
105
108
  if (findingId !== undefined && parsedFindingId !== findingId)
@@ -1 +1 @@
1
- {"version":3,"file":"ack-log.js","sourceRoot":"","sources":["../../src/core/ack-log.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ack-log.js","sourceRoot":"","sources":["../../src/core/ack-log.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"ack-log-consistency.d.ts","sourceRoot":"","sources":["../../../src/core/archive/ack-log-consistency.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAmBvF;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAqL3B"}
1
+ {"version":3,"file":"ack-log-consistency.d.ts","sourceRoot":"","sources":["../../../src/core/archive/ack-log-consistency.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAIvF;;;;;;;;;;;GAWG;AACH,wBAAsB,yBAAyB,CAC7C,SAAS,EAAE,MAAM,EACjB,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACrC,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC,gBAAgB,CAAC,CAsL3B"}
@@ -57,6 +57,7 @@ export async function validateAckLogConsistency(changeDir, verifyMarker, changeI
57
57
  }
58
58
  }
59
59
  // 2-4. ack-log.jsonl 解析 + marker ↔ ack-log 一致性
60
+ // ackEntries 类型为 AckEntry[],过滤后类型正确收窄,使下游访问 finding_id/action 等专属字段通过 typecheck
60
61
  let ackEntries = [];
61
62
  try {
62
63
  const ackText = await readFile(ackLogPath, 'utf8');
@@ -64,7 +65,7 @@ export async function validateAckLogConsistency(changeDir, verifyMarker, changeI
64
65
  .split('\n')
65
66
  .filter((line) => line.trim())
66
67
  .map((line) => JSON.parse(line))
67
- .filter((e) => e.kind === 'ack'); // 仅看 kind=ack(沿 master §3.12.4)
68
+ .filter((e) => e.kind === 'ack'); // type guard:过滤后收窄为 AckEntry(沿 master §3.12.4)
68
69
  }
69
70
  catch (err) {
70
71
  if (err.code !== 'ENOENT') {
@@ -1 +1 @@
1
- {"version":3,"file":"ack-log-consistency.js","sourceRoot":"","sources":["../../../src/core/archive/ack-log-consistency.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qCAAqC;AACrC,uEAAuE;AAEvE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,EAAyB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAmBvF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,YAAqC,EACrC,QAAgB;IAEhB,kHAAkH;IAClH,MAAM,WAAW,GAAc,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QACxE,CAAC,CAAE,YAAY,CAAC,eAA6B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,iBAAiB,GAAc,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAC9E,CAAC,CAAE,YAAY,CAAC,eAA6B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,+DAA+D;IAC/D,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,EAC5C,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAErD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,sBAAsB,YAAY,CAAC,MAAM,mCAAmC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D;gBAC3K,IAAI,EAAE,UAAU;aACjB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kDAAkD;QAClD,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,IAAI,UAAU,GAAkB,EAAE,CAAC;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACnD,UAAU,GAAG,OAAO;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,gCAAgC;IACtE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;QACD,8CAA8C;IAChD,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAY,CAAC;QACpC,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;QAE1C,4CAA4C;QAC5C,IACE,CAAC,CAAC,QAAQ,KAAK,SAAS;YACxB,CAAC,CAAC,QAAQ,KAAK,KAAK;YACpB,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAC1F,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;oBACvC,OAAO,EAAE,mEAAmE,QAAQ,iBAAiB,CAAC,CAAC,EAAE,0EAA0E;oBACnL,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;gBACF,SAAS;YACX,CAAC;YACD,4DAA4D;YAC5D,MAAM,YAAY,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,eAAe;oBAClC,OAAO,EAAE,yBAAyB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,+DAA+D;oBAC1L,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,2DAA2D;YAC3D,4DAA4D;YAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;oBACvC,OAAO,EAAE,iBAAiB,QAAQ,CAAC,IAAI,iCAAiC,CAAC,CAAC,iBAAiB,sBAAsB;oBACjH,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CACxF,CAAC;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,qBAAqB;oBACxC,OAAO,EAAE,uGAAuG;oBAChH,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,kHAAkH;IAClH,4FAA4F;IAC5F,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAA4B,CAAC;YAC1D,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;YAC1C,gEAAgE;YAChE,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ;oBACxB,CAAC,CAAC,UAAU,KAAK,SAAS;oBAC1B,CAAC,CAAC,MAAM,KAAK,mBAAmB,CACnC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;wBACL,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;wBACvC,OAAO,EAAE,4BAA4B,CAAC,CAAC,EAAE,iFAAiF,SAAS,0EAA0E;wBAC7M,IAAI,EAAE,UAAU;qBACjB,CAAC,CACH,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;wBACL,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;wBACvC,OAAO,EAAE,iBAAiB,QAAQ,CAAC,IAAI,yCAAyC,CAAC,CAAC,iBAAiB,sBAAsB;wBACzH,IAAI,EAAE,UAAU;qBACjB,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"ack-log-consistency.js","sourceRoot":"","sources":["../../../src/core/archive/ack-log-consistency.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,qCAAqC;AACrC,uEAAuE;AAEvE,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AAErF,OAAO,EAAyB,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAIvF;;;;;;;;;;;GAWG;AACH,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,SAAiB,EACjB,YAAqC,EACrC,QAAgB;IAEhB,kHAAkH;IAClH,MAAM,WAAW,GAAc,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QACxE,CAAC,CAAE,YAAY,CAAC,eAA6B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,MAAM,iBAAiB,GAAc,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAC9E,CAAC,CAAE,YAAY,CAAC,eAA6B;QAC7C,CAAC,CAAC,EAAE,CAAC;IACP,+DAA+D;IAC/D,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC;QAC5C,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,eAAe,CAAC,EAC5C,CAAC;QACD,OAAO,EAAE,EAAE,CAAC;IACd,CAAC;IAED,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,eAAe,CAAC,CAAC;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;IAErD,MAAM,OAAO,GAAuB,EAAE,CAAC;IAEvC,wBAAwB;IACxB,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC;QAC1C,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;QAChE,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,KAAK,EAAE,cAAc;gBACrB,OAAO,EAAE,sBAAsB,YAAY,CAAC,MAAM,mCAAmC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,+DAA+D;gBAC3K,IAAI,EAAE,UAAU;aACjB,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,kDAAkD;QAClD,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;IACH,CAAC;IAED,+CAA+C;IAC/C,gFAAgF;IAChF,IAAI,UAAU,GAAe,EAAE,CAAC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QACnD,UAAU,GAAG,OAAO;aACjB,KAAK,CAAC,IAAI,CAAC;aACX,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;aAC7B,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAgB,CAAC;aAC9C,MAAM,CAAC,CAAC,CAAC,EAAiB,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,+CAA+C;IACpG,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAK,GAA6B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YACrD,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;gBACL,QAAQ,EAAE,QAAQ;gBAClB,OAAO,EAAE,4BAA6B,GAAa,CAAC,OAAO,EAAE;aAC9D,CAAC,CACH,CAAC;QACJ,CAAC;QACD,8CAA8C;IAChD,CAAC;IAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,WAAW,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAC5C,MAAM,CAAC,GAAG,WAAW,CAAC,CAAC,CAAY,CAAC;QACpC,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;QAE1C,4CAA4C;QAC5C,IACE,CAAC,CAAC,QAAQ,KAAK,SAAS;YACxB,CAAC,CAAC,QAAQ,KAAK,KAAK;YACpB,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAC5C,CAAC;YACD,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,aAAa,CAC1F,CAAC;YACF,IAAI,CAAC,QAAQ,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;oBACvC,OAAO,EAAE,mEAAmE,QAAQ,iBAAiB,CAAC,CAAC,EAAE,0EAA0E;oBACnL,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;gBACF,SAAS;YACX,CAAC;YACD,4DAA4D;YAC5D,MAAM,YAAY,GAAG,kBAAkB,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;YAC/D,IAAI,QAAQ,CAAC,YAAY,KAAK,YAAY,EAAE,CAAC;gBAC3C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,eAAe;oBAClC,OAAO,EAAE,yBAAyB,QAAQ,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,6BAA6B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,+DAA+D;oBAC1L,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;YACD,2DAA2D;YAC3D,4DAA4D;YAC5D,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC;gBAC1C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;oBACvC,OAAO,EAAE,iBAAiB,QAAQ,CAAC,IAAI,iCAAiC,CAAC,CAAC,iBAAiB,sBAAsB;oBACjH,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,2CAA2C;QAC3C,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,CAAC,kBAAkB,EAAE,CAAC;YAC9C,MAAM,cAAc,GAAG,UAAU,CAAC,IAAI,CACpC,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ,IAAI,CAAC,CAAC,UAAU,KAAK,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,KAAK,WAAW,CACxF,CAAC;YACF,IAAI,CAAC,cAAc,EAAE,CAAC;gBACpB,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;oBACL,QAAQ,EAAE,QAAQ;oBAClB,KAAK,EAAE,GAAG,SAAS,qBAAqB;oBACxC,OAAO,EAAE,uGAAuG;oBAChH,IAAI,EAAE,UAAU;iBACjB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED,0DAA0D;IAC1D,kHAAkH;IAClH,4FAA4F;IAC5F,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,iBAAiB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAClD,MAAM,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAA4B,CAAC;YAC1D,MAAM,SAAS,GAAG,mBAAmB,CAAC,GAAG,CAAC;YAC1C,gEAAgE;YAChE,IAAI,CAAC,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,CAAC,CAAC,iBAAiB,IAAI,CAAC,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7E,MAAM,SAAS,GAAG,mBAAmB,CAAC,CAAC,EAAE,EAAE,CAAC;gBAC5C,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAI,CAC9B,CAAC,CAAC,EAAE,EAAE,CACJ,CAAC,CAAC,SAAS,KAAK,QAAQ;oBACxB,CAAC,CAAC,UAAU,KAAK,SAAS;oBAC1B,CAAC,CAAC,MAAM,KAAK,mBAAmB,CACnC,CAAC;gBACF,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;wBACL,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;wBACvC,OAAO,EAAE,4BAA4B,CAAC,CAAC,EAAE,iFAAiF,SAAS,0EAA0E;wBAC7M,IAAI,EAAE,UAAU;qBACjB,CAAC,CACH,CAAC;oBACF,SAAS;gBACX,CAAC;gBACD,IAAI,QAAQ,CAAC,IAAI,KAAK,CAAC,CAAC,iBAAiB,EAAE,CAAC;oBAC1C,OAAO,CAAC,IAAI,CACV,MAAM,CAAC;wBACL,QAAQ,EAAE,QAAQ;wBAClB,KAAK,EAAE,GAAG,SAAS,oBAAoB;wBACvC,OAAO,EAAE,iBAAiB,QAAQ,CAAC,IAAI,yCAAyC,CAAC,CAAC,iBAAiB,sBAAsB;wBACzH,IAAI,EAAE,UAAU;qBACjB,CAAC,CACH,CAAC;gBACJ,CAAC;YACH,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,YAAY,CAAC,GAAG,OAAO,CAAC,CAAC;AAClC,CAAC"}
@@ -1,13 +1,36 @@
1
+ import type { PauseDecision } from '../markers/types.js';
1
2
  import { type ValidationResult } from '../validate/types.js';
3
+ /** option=2 capture 链固化入参(由 archive 层从 verify marker 取出) */
4
+ export interface PauseFenceOptions {
5
+ verifyAckLogTailHash?: string | null;
6
+ verifyAckLogEntryCount?: number | null;
7
+ changeId?: string;
8
+ }
2
9
  /**
3
10
  * pause_decisions fence 五类业务校验(沿 design §2.1.5)
4
11
  * @param marker — verify-passed / review-passed 等 marker 对象(Record 形)
5
12
  * @param changeDir — change 目录绝对路径(需读 proposal.md / tasks.md / design.md)
13
+ * @param repoRoot — git 仓库根目录绝对路径(Task 5 用于 option=1 `git diff HEAD -- <changeDir>/proposal.md`)
14
+ * @param opts — option=2 capture 链固化入参(Task 11;archive 层从 verify marker 取出)
6
15
  * @param file — 可选错误报告用 marker 文件路径
7
16
  *
8
17
  * v4 codex NEW-MAJOR A6 + B4 联动修订:fence 不再需要 ctx 参数(v3 加 ctx 是为给
9
18
  * `validateScopeEntries` 算 finding_hash;但 v4 NEW-MAJOR B4 改用 `parseMarkdown` 局部段
10
19
  * 校验后,fence 内部不再调 validateScopeEntries,ctx 自然 unused → 沿 YAGNI 移除)
20
+ * Task 11:加 opts 参数(option=2 capture 链固化值),file 移至第 5 位
11
21
  */
12
- export declare function validatePauseDecisionsFence(marker: Record<string, unknown>, changeDir: string, file?: string): Promise<ValidationResult>;
22
+ export declare function validatePauseDecisionsFence(marker: Record<string, unknown>, changeDir: string, repoRoot: string, opts?: PauseFenceOptions, file?: string): Promise<ValidationResult>;
23
+ /**
24
+ * verify/review 双 marker pause_decisions cross-check(design §6.5)。
25
+ * 对两侧 id 相同的 pause_decision,逐字段比对;单侧独有 id 不拒签。
26
+ *
27
+ * 前置假设:各 marker 内 pause_decision 的 id 唯一(design §2.1.5 schema 约定)。
28
+ * 若同侧出现重复 id,reviewById Map 后者覆盖前者 —— 该场景属 marker 数据异常,
29
+ * 不在本函数防御范围(整 marker 镜像 / id 唯一性校验是 design §12 非目标)。
30
+ *
31
+ * @param verifyDecisions — verify marker 的 pause_decisions 数组
32
+ * @param reviewDecisions — review marker 的 pause_decisions 数组
33
+ * @param file — 可选错误报告用 marker 文件路径
34
+ */
35
+ export declare function crossCheckPauseDecisions(verifyDecisions: PauseDecision[], reviewDecisions: PauseDecision[], file?: string): ValidationResult;
13
36
  //# sourceMappingURL=pause-decisions-fence.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"pause-decisions-fence.d.ts","sourceRoot":"","sources":["../../../src/core/archive/pause-decisions-fence.ts"],"names":[],"mappings":"AAeA,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAcvF;;;;;;;;;GASG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CA4G3B"}
1
+ {"version":3,"file":"pause-decisions-fence.d.ts","sourceRoot":"","sources":["../../../src/core/archive/pause-decisions-fence.ts"],"names":[],"mappings":"AAuBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AACzD,OAAO,EAAE,KAAK,gBAAgB,EAA4B,MAAM,sBAAsB,CAAC;AAcvF,4DAA4D;AAC5D,MAAM,WAAW,iBAAiB;IAGhC,oBAAoB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACrC,sBAAsB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACvC,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,2BAA2B,CAC/C,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE,iBAAsB,EAC5B,IAAI,CAAC,EAAE,MAAM,GACZ,OAAO,CAAC,gBAAgB,CAAC,CAyH3B;AAgPD;;;;;;;;;;;GAWG;AACH,wBAAgB,wBAAwB,CACtC,eAAe,EAAE,aAAa,EAAE,EAChC,eAAe,EAAE,aAAa,EAAE,EAChC,IAAI,CAAC,EAAE,MAAM,GACZ,gBAAgB,CA4BlB"}