@accelerator-mzq/forge 3.0.0 → 4.0.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.
Files changed (105) 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 +32 -33
  6. package/dist/cli/commands/archive.d.ts.map +1 -1
  7. package/dist/cli/commands/archive.js +339 -667
  8. package/dist/cli/commands/archive.js.map +1 -1
  9. package/dist/cli/commands/legacy-bridge.js +1 -1
  10. package/dist/cli/commands/legacy-bridge.js.map +1 -1
  11. package/dist/cli/commands/upgrade.d.ts.map +1 -1
  12. package/dist/cli/commands/upgrade.js +2 -51
  13. package/dist/cli/commands/upgrade.js.map +1 -1
  14. package/dist/cli/commands/validate.d.ts.map +1 -1
  15. package/dist/cli/commands/validate.js +4 -25
  16. package/dist/cli/commands/validate.js.map +1 -1
  17. package/dist/cli/index.js +0 -9
  18. package/dist/cli/index.js.map +1 -1
  19. package/dist/core/ack/marker-ack.d.ts +28 -0
  20. package/dist/core/ack/marker-ack.d.ts.map +1 -0
  21. package/dist/core/ack/marker-ack.js +155 -0
  22. package/dist/core/ack/marker-ack.js.map +1 -0
  23. package/dist/core/ack-log.d.ts.map +1 -1
  24. package/dist/core/ack-log.js +10 -7
  25. package/dist/core/ack-log.js.map +1 -1
  26. package/dist/core/archive/index.d.ts +2 -3
  27. package/dist/core/archive/index.d.ts.map +1 -1
  28. package/dist/core/archive/index.js +7 -5
  29. package/dist/core/archive/index.js.map +1 -1
  30. package/dist/core/archive/pause-decisions-fence.js +12 -12
  31. package/dist/core/archive/pause-decisions-fence.js.map +1 -1
  32. package/dist/core/archive/summary-builder.d.ts +26 -21
  33. package/dist/core/archive/summary-builder.d.ts.map +1 -1
  34. package/dist/core/archive/summary-builder.js +115 -223
  35. package/dist/core/archive/summary-builder.js.map +1 -1
  36. package/dist/core/archive/summary-render.d.ts +5 -3
  37. package/dist/core/archive/summary-render.d.ts.map +1 -1
  38. package/dist/core/archive/summary-render.js +38 -44
  39. package/dist/core/archive/summary-render.js.map +1 -1
  40. package/dist/core/lock.d.ts +46 -0
  41. package/dist/core/lock.d.ts.map +1 -0
  42. package/dist/core/lock.js +98 -0
  43. package/dist/core/lock.js.map +1 -0
  44. package/dist/core/markers/types.d.ts +27 -134
  45. package/dist/core/markers/types.d.ts.map +1 -1
  46. package/dist/core/markers/types.js +10 -1
  47. package/dist/core/markers/types.js.map +1 -1
  48. package/dist/core/migrate/index.js +1 -1
  49. package/dist/core/migrate/index.js.map +1 -1
  50. package/dist/core/monitor/artifact-observer.d.ts.map +1 -1
  51. package/dist/core/monitor/artifact-observer.js +28 -78
  52. package/dist/core/monitor/artifact-observer.js.map +1 -1
  53. package/dist/core/monitor/divergence-map.d.ts.map +1 -1
  54. package/dist/core/monitor/divergence-map.js +9 -7
  55. package/dist/core/monitor/divergence-map.js.map +1 -1
  56. package/dist/core/monitor/health-verdict.d.ts.map +1 -1
  57. package/dist/core/monitor/health-verdict.js +2 -1
  58. package/dist/core/monitor/health-verdict.js.map +1 -1
  59. package/dist/core/monitor/trace-store.d.ts +1 -1
  60. package/dist/core/monitor/trace-store.js +2 -2
  61. package/dist/core/monitor/trace-store.js.map +1 -1
  62. package/dist/core/monitor/types.d.ts +1 -1
  63. package/dist/core/monitor/types.d.ts.map +1 -1
  64. package/dist/core/monitor/types.js +0 -1
  65. package/dist/core/monitor/types.js.map +1 -1
  66. package/dist/core/schemas/archive-summary.d.ts +39 -109
  67. package/dist/core/schemas/archive-summary.d.ts.map +1 -1
  68. package/dist/core/schemas/archive-summary.js +15 -23
  69. package/dist/core/schemas/archive-summary.js.map +1 -1
  70. package/dist/core/templates/commands/ack-confirm.md +1 -1
  71. package/dist/core/templates/commands/apply.md +51 -114
  72. package/dist/core/templates/commands/archive.md +43 -160
  73. package/dist/core/templates/commands/review.md +49 -74
  74. package/dist/core/templates/commands/upgrade.md +21 -40
  75. package/dist/core/templates/commands/verify.md +43 -146
  76. package/dist/core/templates/skills/_shared/tier23-command-bridge.md +34 -0
  77. package/dist/core/templates/skills/exploring.md +3 -3
  78. package/dist/core/templates/skills/finishing-a-development-branch.md +6 -21
  79. package/dist/core/templates/skills/receiving-code-review.md +14 -45
  80. package/dist/core/templates/skills/requesting-code-review.md +11 -0
  81. package/dist/core/templates/skills/subagent-driven-development.md +33 -29
  82. package/dist/core/templates/skills/subagent-driven-discipline.md +28 -28
  83. package/dist/core/templates/skills/using-forge.md +25 -24
  84. package/dist/core/templates/skills/verification-before-completion.md +7 -18
  85. package/dist/core/templates/skills/verifying-three-dimensions.md +93 -169
  86. package/dist/core/templates/skills/writing-plans.md +6 -17
  87. package/dist/core/validate/archive-summary-schema.d.ts +1 -1
  88. package/dist/core/validate/archive-summary-schema.d.ts.map +1 -1
  89. package/dist/core/validate/archive-summary-schema.js +101 -125
  90. package/dist/core/validate/archive-summary-schema.js.map +1 -1
  91. package/dist/core/validate/index.d.ts +0 -1
  92. package/dist/core/validate/index.d.ts.map +1 -1
  93. package/dist/core/validate/index.js +2 -1
  94. package/dist/core/validate/index.js.map +1 -1
  95. package/dist/core/validate/marker-schema.d.ts +12 -4
  96. package/dist/core/validate/marker-schema.d.ts.map +1 -1
  97. package/dist/core/validate/marker-schema.js +98 -605
  98. package/dist/core/validate/marker-schema.js.map +1 -1
  99. package/dist/index.d.ts +1 -1
  100. package/dist/index.d.ts.map +1 -1
  101. package/dist/index.js +8 -1
  102. package/dist/index.js.map +1 -1
  103. package/package.json +5 -4
  104. package/scripts/codex-review-helper.mjs +337 -0
  105. package/src/core/codex-review/prompts/adversarial-default.md +105 -0
@@ -1,287 +1,179 @@
1
- // src/core/archive/summary-builder.ts — plan-9e1 Task 2
2
- // buildArchiveSummary:从 markers + change 目录构造 ArchiveSummary
3
- // collector:
4
- // collectAckedWarnings verify_findings + review_outcomes WARNING + resolved=false + 有 ack
5
- // collectPendingSuggestions verify_findings + review_outcomes 中 SUGGESTION + resolved=false
6
- // collectHandoffEntries — 三类 input 聚合(verify/review SUGGESTION 持挂 + pause_decisions option=3 + scope-entries active)
1
+ // src/core/archive/summary-builder.ts — v4 OpenSpec alignment 简版(plan-v4 Phase 1 Task 1.6)
2
+ //
3
+ // v4 BREAKING change(沿 plan-v4 §6.4 + §10.1.2):
4
+ // - signature 改为 `buildArchiveSummary({ archivePath, changeId, verifyMarker, reviewMarker, deltas })`
5
+ // - 输出 ArchiveSummary v2:仅 schema/version/archived_at/change_id/archive_name/verified_by/
6
+ // reviewed_by/applied_commits/spec_updates_applied/handoff_to_backlog 字段
7
+ // - 删 collectAckedWarnings / collectPendingSuggestions / buildVerifiedInvariants /
8
+ // buildProcessEvidenceSummary / mergePauseDecisions(反加固阵列消亡)
9
+ // - handoff_to_backlog 仅两来源:pause_decisions chosen_option=3 + scope_entries 三段 YAML 块
10
+ // - spec_updates_applied 字段从 forge applyDeltas 实际 SpecDelta[] 转换,operation 沿 create/replace/delete
7
11
  import { readFile } from 'node:fs/promises';
8
12
  import { existsSync } from 'node:fs';
9
- import { join } from 'node:path';
13
+ import { basename, join } from 'node:path';
10
14
  import { ARCHIVE_SUMMARY_VERSION } from '../schemas/archive-summary.js';
11
15
  import { parseMarkdown } from '../parse/markdown.js';
12
16
  import { parseFencedYamlBlocks } from '../parse/fenced-yaml.js';
13
17
  import { SCOPE_ANCHOR_IDS } from '../schemas/scope-entries.js';
14
18
  /**
15
- * 构造 archive_summary 对象
19
+ * buildArchiveSummary v4 — 构造极简 ArchiveSummary v2 对象
16
20
  *
17
- * @param verifyMarker .verify-passed 解析后对象(Record 形)
18
- * @param reviewMarker .review-passed 解析后对象(Record 形)
19
- * @param changeDir change 目录绝对路径(读 proposal.md / design.md 抽 scope-entries)
20
- * @param changeId change id 字符串
21
- * @param fenceResult plan-9g crossCuttingFenceCheck() 输出;9e2 接真实统计(替换 plan-9e1 placeholder)
22
- * @param opts 可选项
21
+ * 沿 plan §6.4 + §10.1.2 v7:
22
+ * - schema:forge-archive-summary/v2
23
+ * - spec_updates_applied:从 deltas 1:1 映射 capability + operation
24
+ * - handoff_to_backlog 两来源:
25
+ * 1) verify/review marker.pause_decisions[] chosen_option=3( out-of-scope)
26
+ * 2) proposal.md + design.md `## Out of Scope` / `## Future Work` YAML 块 active entry
27
+ * - 不再生成 acked_warnings / pending_suggestions / process_evidence_summary / verified_invariants
23
28
  */
24
- export async function buildArchiveSummary(verifyMarker, reviewMarker, changeDir, changeId, fenceResult, opts = {}) {
25
- const archivedAt = opts.archivedAt ?? toIso8601(new Date());
26
- const verifyFindings = Array.isArray(verifyMarker.verify_findings)
27
- ? verifyMarker.verify_findings
28
- : [];
29
- const pauseDecisions = Array.isArray(verifyMarker.pause_decisions)
30
- ? verifyMarker.pause_decisions
31
- : [];
32
- // review marker 也可能携带 pause_decisions(沿 9c superset additive 镜像)
33
- const reviewPauseDecisions = Array.isArray(reviewMarker.pause_decisions)
34
- ? reviewMarker.pause_decisions
35
- : [];
36
- const reviewOutcomes = Array.isArray(reviewMarker.review_outcomes)
37
- ? reviewMarker.review_outcomes
38
- : [];
39
- const acked_warnings = collectAckedWarnings(verifyFindings, reviewOutcomes);
40
- const pending_suggestions = collectPendingSuggestions(verifyFindings, reviewOutcomes);
41
- // 合并 verify + review 的 pause_decisions(去重以 id 为 key,review 镜像优先级低)
42
- const allPauseDecisions = mergePauseDecisions(pauseDecisions, reviewPauseDecisions);
29
+ export async function buildArchiveSummary(input) {
30
+ const archivedAt = input.archivedAt ?? toIso8601(new Date());
31
+ // —— spec_updates_applied:从 SpecDelta 直接映射(name → capability,operation 沿 create/replace/delete)——
32
+ const spec_updates_applied = input.deltas.map((d) => ({
33
+ capability: d.name,
34
+ operation: d.operation,
35
+ }));
36
+ // —— handoff_to_backlog:pause_decisions option=3 + scope_entries active(两来源 union)——
43
37
  const handoff_to_backlog = [
44
- // 第 1 类:SUGGESTION 持挂(直接复用 pending_suggestions,但映射到 HandoffEntry 字段)
45
- ...pending_suggestions.map((s) => ({
46
- source: s.source,
47
- id: s.id,
48
- severity: 'SUGGESTION',
49
- dimension: s.dimension,
50
- check_type: s.check_type,
51
- evidence: s.evidence,
52
- recommendation: s.recommendation,
53
- })),
54
- // 第 2 类:pause_decisions chosen_option=3
55
- ...allPauseDecisions
56
- .filter((p) => p.chosen_option === 3)
57
- .map((p) => ({
58
- source: 'pause_decisions',
59
- id: p.id,
60
- severity: p.severity,
61
- chosen_option: 3,
62
- target_artifact: p.target_artifact,
63
- target_anchor: p.target_anchor,
64
- issue_summary: p.issue_summary,
65
- })),
66
- // 第 3 类:proposal/design scope-entries Out-of-Scope/Future-Work YAML 块的 active entry
67
- ...(await collectScopeEntriesHandoff(changeDir)),
38
+ ...collectPauseDecisionHandoff(input.verifyMarker, input.reviewMarker),
39
+ ...(await collectScopeEntriesHandoff(input.archivePath)),
68
40
  ];
41
+ // —— verified_by / reviewed_by 直读 marker(v2 schema 已校验为非空字符串)——
42
+ const verified_by = String(input.verifyMarker.verified_by ?? 'unknown');
43
+ const reviewed_by = String(input.reviewMarker.reviewed_by ?? 'unknown');
69
44
  return {
70
- schema: 'forge-archive-summary/v1',
45
+ schema: 'forge-archive-summary/v2',
71
46
  version: ARCHIVE_SUMMARY_VERSION,
72
47
  archived_at: archivedAt,
73
- change_id: changeId,
74
- verify_passed: {
75
- verified_invariants: buildVerifiedInvariants(verifyMarker),
76
- },
77
- review_passed: {
78
- reviewers: [String(reviewMarker.reviewed_by ?? 'unknown')],
79
- },
80
- process_evidence_summary: buildProcessEvidenceSummary(fenceResult),
48
+ change_id: input.changeId,
49
+ archive_name: basename(input.archivePath),
50
+ verified_by,
51
+ reviewed_by,
52
+ spec_updates_applied,
81
53
  handoff_to_backlog,
82
- acked_warnings,
83
- pending_suggestions,
84
54
  };
85
55
  }
86
- /** collector1:verify_findings WARNING + ack + review_outcomes WARNING 全名 + acked(v3 BLOCKER 4:resign 后或 v1.0 native 写入) */
87
- function collectAckedWarnings(findings, outcomes) {
88
- const refs = [];
89
- // verify_findings WARNING + ack(plan-9e1 v3 BLOCKER 3 已有,不动)
90
- for (const f of findings) {
91
- if (f.severity === 'WARNING' &&
92
- f.resolved === false &&
93
- f.severity_acked_by &&
94
- f.severity_acked_at) {
95
- refs.push({
96
- source: 'verify_findings',
97
- id: f.id,
98
- dimension: f.dimension,
99
- check_type: f.check_type,
100
- evidence: f.evidence,
101
- acked_by: f.severity_acked_by,
102
- acked_at: f.severity_acked_at,
103
- });
104
- }
105
- }
106
- // review_outcomes WARNING 全名 + acked(v3 BLOCKER 4:resign 后或 v1.0 native 写入)
107
- for (let i = 0; i < outcomes.length; i++) {
108
- const o = outcomes[i];
109
- // C 简码由 fence 拒签,不进 builder(沿 plan-9e1 v3 BLOCKER 3)
110
- // S 简码 / CRITICAL 全名由 fence 拒签,不进 builder
111
- // 仅 WARNING 全名 + accepted=true + rationale 非空(v0.4 review_outcomes 端的 "acked" 等价路径)
112
- if (o.severity === 'WARNING' &&
113
- o.resolved === false &&
114
- o.accepted === true &&
115
- typeof o.rationale === 'string' &&
116
- o.rationale.length > 0) {
117
- refs.push({
118
- source: 'review_outcomes',
119
- id: i,
120
- acked_by: 'review-accepted',
121
- acked_at: '', // review_outcomes 端无 user 字段,沿 plan-9e1 v1 collector1 review-accepted 标记
122
- rationale: o.rationale,
123
- });
124
- }
56
+ /**
57
+ * collectPauseDecisionHandoff:从 verify + review marker 抽 pause_decisions chosen_option=3
58
+ *
59
+ * v4 PauseDecisionSimple 仅 5 字段(paused_at / task_ref / issue_summary / chosen_option / notes),
60
+ * 不再有 v1 target_artifact / target_anchor / severity 等反加固字段。
61
+ * verify + review 两侧 pause_decisions 合并去重( (task_ref, paused_at) 复合 key)。
62
+ */
63
+ function collectPauseDecisionHandoff(verifyMarker, reviewMarker) {
64
+ const all = mergePauseDecisions(extractPauseDecisions(verifyMarker), extractPauseDecisions(reviewMarker));
65
+ const entries = [];
66
+ for (let i = 0; i < all.length; i++) {
67
+ const p = all[i];
68
+ if (!p || p.chosen_option !== 3)
69
+ continue;
70
+ entries.push({
71
+ source: 'pause_decisions',
72
+ id: i, // 数字索引(沿 v4 简化 — 不再有 capture_id 链)
73
+ chosen_option: 3,
74
+ issue_summary: p.issue_summary,
75
+ });
125
76
  }
126
- return refs;
77
+ return entries;
127
78
  }
128
- /** collector2:verify_findings + review_outcomes SUGGESTION + resolved=false(v3 BLOCKER 4:L 简码 + SUGGESTION 全名双格式) */
129
- function collectPendingSuggestions(findings, outcomes) {
130
- const refs = [];
131
- // verify_findings SUGGESTION 全名(plan-9e1 v3 BLOCKER 3 已有,不动)
132
- for (const f of findings) {
133
- if (f.severity === 'SUGGESTION' && f.resolved === false) {
134
- refs.push({
135
- source: 'verify_findings',
136
- id: f.id,
137
- dimension: f.dimension,
138
- check_type: f.check_type,
139
- evidence: f.evidence,
140
- recommendation: f.recommendation,
141
- });
142
- }
143
- }
144
- // review_outcomes L 简码 + SUGGESTION 全名双格式映射(v3 BLOCKER 4 新增)
145
- for (let i = 0; i < outcomes.length; i++) {
146
- const o = outcomes[i];
147
- if ((o.severity === 'L' || o.severity === 'SUGGESTION') && o.resolved === false) {
148
- refs.push({
149
- source: 'review_outcomes',
150
- id: i,
151
- recommendation: o.rationale,
152
- });
153
- }
154
- }
155
- return refs;
79
+ /** marker 安全抽 pause_decisions 数组(非数组返空) */
80
+ function extractPauseDecisions(marker) {
81
+ return Array.isArray(marker.pause_decisions)
82
+ ? marker.pause_decisions
83
+ : [];
156
84
  }
157
85
  /**
158
- * v2 BLOCKER 4 修订:scope-entries YAML 完整性错误(parse 失败 / schema 非法 / anchor_id 不匹配)
159
- * archive.ts 步骤 4.5 try/catch 转 fence business-fail exit 1
86
+ * 合并 verify + review 两侧 pause_decisions
87
+ *
88
+ * 去重策略:以 (task_ref, paused_at) 复合 key 判等,verify 侧优先。
89
+ * v4 简化:不再有 capture_id 锚定,user 在 verify/review 阶段可能各写一次同一 pause,
90
+ * 合并避免 handoff 重复一项。
160
91
  */
161
- export class ScopeEntriesIntegrityError extends Error {
162
- artifactName;
163
- anchorId;
164
- constructor(message, artifactName, anchorId) {
165
- super(message);
166
- this.artifactName = artifactName;
167
- this.anchorId = anchorId;
168
- this.name = 'ScopeEntriesIntegrityError';
92
+ function mergePauseDecisions(verifyPauses, reviewPauses) {
93
+ const keyOf = (p) => `${p.task_ref}@${p.paused_at}`;
94
+ const seen = new Set();
95
+ const out = [];
96
+ for (const p of verifyPauses) {
97
+ const k = keyOf(p);
98
+ if (seen.has(k))
99
+ continue;
100
+ seen.add(k);
101
+ out.push(p);
102
+ }
103
+ for (const p of reviewPauses) {
104
+ const k = keyOf(p);
105
+ if (seen.has(k))
106
+ continue;
107
+ seen.add(k);
108
+ out.push(p);
169
109
  }
110
+ return out;
170
111
  }
171
112
  /**
172
- * collector3 子函数:抽 proposal.md + design.md scope-entries active entry
173
- * v2 BLOCKER 4:parse 失败 / schema 非法 → 抛 ScopeEntriesIntegrityError(不再静默 continue)
113
+ * collectScopeEntriesHandoff:从 archive 后的 proposal.md + design.md scope-entries
114
+ *
115
+ * v4 简化:
116
+ * - 仅扫 forge-oos / forge-future-work 两段(forge-non-goals 是反目标,不做 handoff)
117
+ * - 仅取 status=active 的 entry(inherited/superseded/completed/obsolete 不进)
118
+ * - parse 失败 / schema 不匹配 → 静默跳过(v4 不再 throw fence error,沿 OpenSpec 风格)
119
+ * - changeDir 已归档到 archivePath,本函数从该路径读 proposal/design
174
120
  */
175
- async function collectScopeEntriesHandoff(changeDir) {
121
+ async function collectScopeEntriesHandoff(archivePath) {
176
122
  const entries = [];
177
123
  for (const artifactName of ['proposal.md', 'design.md']) {
178
- const artifactPath = join(changeDir, artifactName);
124
+ const artifactPath = join(archivePath, artifactName);
179
125
  if (!existsSync(artifactPath))
180
126
  continue;
181
- const content = await readFile(artifactPath, 'utf8');
127
+ let content;
128
+ try {
129
+ content = await readFile(artifactPath, 'utf8');
130
+ }
131
+ catch {
132
+ continue; // 读失败静默跳过(archive 已完成,handoff 是衍生产物)
133
+ }
182
134
  const md = parseMarkdown(content);
183
135
  for (const sec of md.sections) {
184
136
  if (!sec.anchor || !SCOPE_ANCHOR_IDS.includes(sec.anchor))
185
137
  continue;
186
- // 仅取 forge-oos / forge-future-work(non-goals 不是 handoff 目标;non-goal 是"反目标",不需 backlog 追踪)
187
138
  const anchorId = sec.anchor;
139
+ // 仅 oos / future-work 进 handoff;non-goals 不进
188
140
  if (anchorId !== 'forge-oos' && anchorId !== 'forge-future-work')
189
141
  continue;
190
142
  let yamlBlocks;
191
143
  try {
192
144
  yamlBlocks = parseFencedYamlBlocks(sec.body);
193
145
  }
194
- catch (err) {
195
- // v2 BLOCKER 4:parse 失败 → 抛错( archive fence 拒签),不再静默跳过
196
- throw new ScopeEntriesIntegrityError(`scope-entries YAML parse failed in ${artifactName} section ${anchorId}: ${err.message}`, artifactName, anchorId);
146
+ catch {
147
+ continue; // v4 静默跳过(不再 throw ScopeEntriesIntegrityError)
197
148
  }
198
149
  if (yamlBlocks.length === 0)
199
- continue; // 段内无 YAML 块允许(空段沿 9b 通过)
150
+ continue;
200
151
  const block = yamlBlocks[0];
201
- if (block.schema !== 'forge-scope-entries/v1') {
202
- throw new ScopeEntriesIntegrityError(`scope-entries schema 非 'forge-scope-entries/v1'(${artifactName} section ${anchorId},实际 ${JSON.stringify(block.schema)})`, artifactName, anchorId);
203
- }
204
- if (block.anchor_id !== anchorId) {
205
- throw new ScopeEntriesIntegrityError(`scope-entries anchor_id 不匹配(${artifactName}:${anchorId} 段内 YAML 块 anchor_id=${JSON.stringify(block.anchor_id)})`, artifactName, anchorId);
206
- }
207
- if (!Array.isArray(block.entries)) {
208
- throw new ScopeEntriesIntegrityError(`scope-entries entries 非数组(${artifactName} section ${anchorId})`, artifactName, anchorId);
209
- }
152
+ if (block.schema !== 'forge-scope-entries/v1')
153
+ continue;
154
+ if (block.anchor_id !== anchorId)
155
+ continue;
156
+ if (!Array.isArray(block.entries))
157
+ continue;
210
158
  for (const e of block.entries) {
211
159
  if (!e || typeof e !== 'object')
212
160
  continue;
213
- // 仅 status=active 进 handoff(inherited/superseded/completed/obsolete 不进)
214
161
  if (e.status !== 'active')
215
162
  continue;
216
163
  entries.push({
217
164
  source: 'scope_entries',
218
165
  id: e.id,
219
- severity: null,
220
166
  category: e.category,
167
+ description: e.description,
221
168
  reason: e.reason,
222
- target_artifact: artifactName,
223
- target_anchor: anchorId === 'forge-oos' ? '## Out of Scope' : '## Future Work',
224
169
  });
225
170
  }
226
171
  }
227
172
  }
228
173
  return entries;
229
174
  }
230
- /** 合并 verify + review pause_decisions(以 id key 去重,verify 优先) */
231
- function mergePauseDecisions(verifyPauses, reviewPauses) {
232
- const byId = new Map();
233
- for (const p of verifyPauses)
234
- byId.set(p.id, p);
235
- for (const p of reviewPauses) {
236
- if (!byId.has(p.id))
237
- byId.set(p.id, p);
238
- }
239
- return [...byId.values()];
240
- }
241
- /** 沿 design verified_invariants 至少含 hash-match + evidence-complete(9d 三维度 fence 已通过) */
242
- function buildVerifiedInvariants(verifyMarker) {
243
- const list = ['hash-match', 'evidence-complete'];
244
- // 9d 三维度 fence 已通过 — 若 verify_findings 字段存在(老 marker 缺则跳),加上 verify-findings-fence
245
- if (Array.isArray(verifyMarker.verify_findings)) {
246
- list.push('verify-findings-fence');
247
- }
248
- if (Array.isArray(verifyMarker.pause_decisions)) {
249
- list.push('pause-decisions-fence');
250
- }
251
- return list;
252
- }
253
- /** Date → 'YYYY-MM-DDTHH:MM:SSZ'(沿 marker-schema.ts:20 ISO 8601 UTC 格式) */
175
+ /** Date 'YYYY-MM-DDTHH:MM:SSZ'(沿 marker-schema.ts ISO 8601 UTC 格式,无 ms) */
254
176
  function toIso8601(d) {
255
177
  return d.toISOString().replace(/\.\d{3}Z$/, 'Z');
256
178
  }
257
- /**
258
- * buildProcessEvidenceSummary — fence 14 不变量统计折数为 ProcessEvidenceSummary
259
- *
260
- * plan-9e2 v2 codex 一轮 MAJOR 修订:4 字段计数
261
- *
262
- * 输出 4 计数:
263
- * - invariants_passed: status='pass' 的数(真过校验)
264
- * - invariants_with_warning: status='warning' 的数(WARNING 经 fail/legacy-skip 优先级筛选后保留)
265
- * - invariants_failed: status='fail' 的数(v1.0 永远 = 0;fence.ok=false 时 archive 已 exit 1 不进本路径)
266
- * - legacy_exempt: status='legacy-skip' 的数(沿 §3.4.4.1)
267
- *
268
- * 不变式:passed + warning + failed + exempt === FENCE_INVARIANT_NAMES.length
269
- *
270
- * 注:不在 builder 内 throw — 让 archive-summary-schema validator 单点把守不变式
271
- * (避免双源校验路径分歧;沿 brainstorm spec §4.2 决策 #1)
272
- */
273
- function buildProcessEvidenceSummary(fenceResult) {
274
- // 按 status 4 态分类统计
275
- const passed = fenceResult.results.filter((r) => r.status === 'pass').length;
276
- const warning = fenceResult.results.filter((r) => r.status === 'warning').length;
277
- const failed = fenceResult.results.filter((r) => r.status === 'fail').length;
278
- const exempt = fenceResult.results.filter((r) => r.status === 'legacy-skip').length;
279
- return {
280
- placeholder: false,
281
- invariants_passed: passed,
282
- invariants_with_warning: warning,
283
- invariants_failed: failed,
284
- legacy_exempt: exempt,
285
- };
286
- }
287
179
  //# sourceMappingURL=summary-builder.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary-builder.js","sourceRoot":"","sources":["../../../src/core/archive/summary-builder.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summary-builder.js","sourceRoot":"","sources":["../../../src/core/archive/summary-builder.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,10 @@
1
1
  import type { ArchiveSummary } from '../schemas/archive-summary.js';
2
2
  /**
3
- * 渲染 archive 完成后的用户输出字符串
4
- * @param summary ArchiveSummary 对象
5
- * @param archiveDirName archive 子目录名(如 '2026-05-12-add-oauth-refresh');用于 yaml 路径提示
3
+ * 渲染 archive 完成后的用户输出字符串(v4 简版)
4
+ *
5
+ * @param summary ArchiveSummary v2 对象
6
+ * @param archiveDirName archive 子目录名(如 '2026-05-20-add-oauth-refresh');
7
+ * caller 已算出,本函数不重复算(避免与 summary.archive_name 同步偏移)
6
8
  */
7
9
  export declare function renderArchiveSummaryOutput(summary: ArchiveSummary, archiveDirName: string): string;
8
10
  //# sourceMappingURL=summary-render.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary-render.d.ts","sourceRoot":"","sources":["../../../src/core/archive/summary-render.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,cAAc,EAAkC,MAAM,+BAA+B,CAAC;AAEpG;;;;GAIG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,GACrB,MAAM,CA8CR"}
1
+ {"version":3,"file":"summary-render.d.ts","sourceRoot":"","sources":["../../../src/core/archive/summary-render.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,cAAc,EAAgB,MAAM,+BAA+B,CAAC;AAElF;;;;;;GAMG;AACH,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,GACrB,MAAM,CAmCR"}
@@ -1,9 +1,16 @@
1
- // src/core/archive/summary-render.ts — plan-9e1 Task 4
2
- // renderArchiveSummaryOutput:把 ArchiveSummary → 用户可读字符串(沿 design §2.4.4 模板)
1
+ // src/core/archive/summary-render.ts — v4 OpenSpec alignment 简版(plan-v4 Phase 1 Task 1.7)
2
+ //
3
+ // v4 BREAKING change(沿 plan-v4 §10.1.2 Task 1.7):
4
+ // - 删读 v1 字段:process_evidence_summary / acked_warnings / pending_suggestions
5
+ // - 保留读 v2 字段:archived_at / change_id / archive_name / verified_by /
6
+ // reviewed_by / spec_updates_applied / handoff_to_backlog
7
+ // - 81 → ~40 行
3
8
  /**
4
- * 渲染 archive 完成后的用户输出字符串
5
- * @param summary ArchiveSummary 对象
6
- * @param archiveDirName archive 子目录名(如 '2026-05-12-add-oauth-refresh');用于 yaml 路径提示
9
+ * 渲染 archive 完成后的用户输出字符串(v4 简版)
10
+ *
11
+ * @param summary ArchiveSummary v2 对象
12
+ * @param archiveDirName archive 子目录名(如 '2026-05-20-add-oauth-refresh');
13
+ * caller 已算出,本函数不重复算(避免与 summary.archive_name 同步偏移)
7
14
  */
8
15
  export function renderArchiveSummaryOutput(summary, archiveDirName) {
9
16
  const lines = [];
@@ -11,54 +18,41 @@ export function renderArchiveSummaryOutput(summary, archiveDirName) {
11
18
  lines.push('');
12
19
  lines.push(`**Change:** ${summary.change_id}`);
13
20
  lines.push(`**Archived to:** forge/changes/archive/${archiveDirName}/`);
14
- lines.push(`**Specs:** ✓ Synced`);
15
- // process_evidence_summary placeholder 显式标注(9e2 9g 后换成真实统计)
16
- if (summary.process_evidence_summary.placeholder) {
17
- lines.push(`**Security:** [process_evidence:placeholder] ${summary.process_evidence_summary.note ?? ''}`);
21
+ lines.push(`**Verified by:** ${summary.verified_by}`);
22
+ lines.push(`**Reviewed by:** ${summary.reviewed_by}`);
23
+ // Spec updates 段(若有,显示 capability + operation 简要)
24
+ if (summary.spec_updates_applied.length > 0) {
25
+ lines.push(`**Specs:** ✓ Synced (${summary.spec_updates_applied.length} update(s))`);
26
+ for (const u of summary.spec_updates_applied) {
27
+ lines.push(` - ${u.capability}: ${u.operation}`);
28
+ }
18
29
  }
19
30
  else {
20
- const p = summary.process_evidence_summary;
21
- lines.push(`**Security:** [process_evidence:passed=${p.invariants_passed ?? 0}/failed=${p.invariants_failed ?? 0}/legacy=${p.legacy_exempt ?? 0}]`);
31
+ lines.push(`**Specs:** (no spec changes)`);
22
32
  }
23
33
  lines.push('');
24
- // Acknowledged Warnings
25
- if (summary.acked_warnings.length > 0) {
26
- lines.push(`### Acknowledged Warnings (${summary.acked_warnings.length})`);
27
- for (const a of summary.acked_warnings) {
28
- lines.push(renderAckedWarning(a));
29
- }
30
- lines.push('');
31
- }
32
- // Pending Suggestions 段
33
- if (summary.pending_suggestions.length > 0) {
34
- lines.push(`### Pending Suggestions (${summary.pending_suggestions.length}) — recorded in archive_summary`);
35
- for (const s of summary.pending_suggestions) {
36
- lines.push(renderPendingSuggestion(s));
34
+ // Handoff 段(若有 entry,逐条列出供 user 跨 change 跟踪)
35
+ if (summary.handoff_to_backlog.length > 0) {
36
+ lines.push(`### Handoff to backlog (${summary.handoff_to_backlog.length})`);
37
+ for (const h of summary.handoff_to_backlog) {
38
+ lines.push(renderHandoffEntry(h));
37
39
  }
38
40
  lines.push('');
39
41
  }
40
- // 提示
42
+ // 收尾提示
41
43
  lines.push(`Review handoff details: cat forge/changes/archive/${archiveDirName}/archive_summary.yaml`);
42
- lines.push(`Cross-change backlog: run \`forge backlog list\` (see forge/backlog/)`);
44
+ lines.push(`Cross-change backlog: run \`forge backlog\` (see forge/backlog/)`);
43
45
  return lines.join('\n');
44
46
  }
45
- /** 渲染单条 AckedWarningRef */
46
- function renderAckedWarning(a) {
47
- const tag = `[WARNING] ${a.source}#${a.id}`;
48
- const dim = a.dimension && a.check_type ? ` (${a.dimension}/${a.check_type})` : '';
49
- const head = `- ${tag}${dim}`;
50
- const ev = a.evidence ? `\n Evidence: ${a.evidence}` : '';
51
- const acked = `\n Acked by: ${a.acked_by}${a.acked_at ? ` at ${a.acked_at}` : ''}`;
52
- const rat = a.rationale ? `\n Rationale: ${a.rationale}` : '';
53
- return `${head}${ev}${acked}${rat}`;
54
- }
55
- /** 渲染单条 SuggestionRef */
56
- function renderPendingSuggestion(s) {
57
- const tag = `[SUGGESTION] ${s.source}#${s.id}`;
58
- const dim = s.dimension && s.check_type ? ` (${s.dimension}/${s.check_type})` : '';
59
- const head = `- ${tag}${dim}`;
60
- const ev = s.evidence ? `\n Source: ${s.evidence}` : '';
61
- const rec = s.recommendation ? `\n Recommendation: ${s.recommendation}` : '';
62
- return `${head}${ev}${rec}`;
47
+ /** 渲染单条 HandoffEntry — 区分 pause_decisions / scope_entries 两来源 */
48
+ function renderHandoffEntry(h) {
49
+ if (h.source === 'pause_decisions') {
50
+ return `- [pause_decisions#${h.id}] ${h.issue_summary ?? '(no summary)'}`;
51
+ }
52
+ // scope_entries
53
+ const cat = h.category ?? 'unspecified';
54
+ const desc = h.description ?? '(no description)';
55
+ const reason = h.reason ? `\n Reason: ${h.reason}` : '';
56
+ return `- [scope_entries:${cat}] ${h.id}: ${desc}${reason}`;
63
57
  }
64
58
  //# sourceMappingURL=summary-render.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"summary-render.js","sourceRoot":"","sources":["../../../src/core/archive/summary-render.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"summary-render.js","sourceRoot":"","sources":["../../../src/core/archive/summary-render.ts"],"names":[],"mappings":"AAAA,0FAA0F;AAC1F,EAAE;AACF,kDAAkD;AAClD,6EAA6E;AAC7E,qEAAqE;AACrE,4DAA4D;AAC5D,eAAe;AAIf;;;;;;GAMG;AACH,MAAM,UAAU,0BAA0B,CACxC,OAAuB,EACvB,cAAsB;IAEtB,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,0CAA0C,cAAc,GAAG,CAAC,CAAC;IACxE,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IACtD,KAAK,CAAC,IAAI,CAAC,oBAAoB,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAEtD,kDAAkD;IAClD,IAAI,OAAO,CAAC,oBAAoB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,KAAK,CAAC,IAAI,CAAC,wBAAwB,OAAO,CAAC,oBAAoB,CAAC,MAAM,aAAa,CAAC,CAAC;QACrF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,oBAAoB,EAAE,CAAC;YAC7C,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,UAAU,KAAK,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,8BAA8B,CAAC,CAAC;IAC7C,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,6CAA6C;IAC7C,IAAI,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1C,KAAK,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC;QAC5E,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAC3C,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC,CAAC,CAAC,CAAC;QACpC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO;IACP,KAAK,CAAC,IAAI,CACR,qDAAqD,cAAc,uBAAuB,CAC3F,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,kEAAkE,CAAC,CAAC;IAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED,iEAAiE;AACjE,SAAS,kBAAkB,CAAC,CAAe;IACzC,IAAI,CAAC,CAAC,MAAM,KAAK,iBAAiB,EAAE,CAAC;QACnC,OAAO,sBAAsB,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,aAAa,IAAI,cAAc,EAAE,CAAC;IAC5E,CAAC;IACD,gBAAgB;IAChB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,IAAI,aAAa,CAAC;IACxC,MAAM,IAAI,GAAG,CAAC,CAAC,WAAW,IAAI,kBAAkB,CAAC;IACjD,MAAM,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzD,OAAO,oBAAoB,GAAG,KAAK,CAAC,CAAC,EAAE,KAAK,IAAI,GAAG,MAAM,EAAE,CAAC;AAC9D,CAAC"}