@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.
- package/README.md +12 -12
- package/dist/cli/commands/ack.d.ts.map +1 -1
- package/dist/cli/commands/ack.js +87 -12
- package/dist/cli/commands/ack.js.map +1 -1
- package/dist/cli/commands/archive.d.ts +32 -33
- package/dist/cli/commands/archive.d.ts.map +1 -1
- package/dist/cli/commands/archive.js +339 -667
- package/dist/cli/commands/archive.js.map +1 -1
- package/dist/cli/commands/legacy-bridge.js +1 -1
- package/dist/cli/commands/legacy-bridge.js.map +1 -1
- package/dist/cli/commands/upgrade.d.ts.map +1 -1
- package/dist/cli/commands/upgrade.js +2 -51
- package/dist/cli/commands/upgrade.js.map +1 -1
- package/dist/cli/commands/validate.d.ts.map +1 -1
- package/dist/cli/commands/validate.js +4 -25
- package/dist/cli/commands/validate.js.map +1 -1
- package/dist/cli/index.js +0 -9
- package/dist/cli/index.js.map +1 -1
- package/dist/core/ack/marker-ack.d.ts +28 -0
- package/dist/core/ack/marker-ack.d.ts.map +1 -0
- package/dist/core/ack/marker-ack.js +155 -0
- package/dist/core/ack/marker-ack.js.map +1 -0
- package/dist/core/ack-log.d.ts.map +1 -1
- package/dist/core/ack-log.js +10 -7
- package/dist/core/ack-log.js.map +1 -1
- package/dist/core/archive/index.d.ts +2 -3
- package/dist/core/archive/index.d.ts.map +1 -1
- package/dist/core/archive/index.js +7 -5
- package/dist/core/archive/index.js.map +1 -1
- package/dist/core/archive/pause-decisions-fence.js +12 -12
- package/dist/core/archive/pause-decisions-fence.js.map +1 -1
- package/dist/core/archive/summary-builder.d.ts +26 -21
- package/dist/core/archive/summary-builder.d.ts.map +1 -1
- package/dist/core/archive/summary-builder.js +115 -223
- package/dist/core/archive/summary-builder.js.map +1 -1
- package/dist/core/archive/summary-render.d.ts +5 -3
- package/dist/core/archive/summary-render.d.ts.map +1 -1
- package/dist/core/archive/summary-render.js +38 -44
- package/dist/core/archive/summary-render.js.map +1 -1
- package/dist/core/lock.d.ts +46 -0
- package/dist/core/lock.d.ts.map +1 -0
- package/dist/core/lock.js +98 -0
- package/dist/core/lock.js.map +1 -0
- package/dist/core/markers/types.d.ts +27 -134
- package/dist/core/markers/types.d.ts.map +1 -1
- package/dist/core/markers/types.js +10 -1
- package/dist/core/markers/types.js.map +1 -1
- package/dist/core/migrate/index.js +1 -1
- package/dist/core/migrate/index.js.map +1 -1
- package/dist/core/monitor/artifact-observer.d.ts.map +1 -1
- package/dist/core/monitor/artifact-observer.js +28 -78
- package/dist/core/monitor/artifact-observer.js.map +1 -1
- package/dist/core/monitor/divergence-map.d.ts.map +1 -1
- package/dist/core/monitor/divergence-map.js +9 -7
- package/dist/core/monitor/divergence-map.js.map +1 -1
- package/dist/core/monitor/health-verdict.d.ts.map +1 -1
- package/dist/core/monitor/health-verdict.js +2 -1
- package/dist/core/monitor/health-verdict.js.map +1 -1
- package/dist/core/monitor/trace-store.d.ts +1 -1
- package/dist/core/monitor/trace-store.js +2 -2
- package/dist/core/monitor/trace-store.js.map +1 -1
- package/dist/core/monitor/types.d.ts +1 -1
- package/dist/core/monitor/types.d.ts.map +1 -1
- package/dist/core/monitor/types.js +0 -1
- package/dist/core/monitor/types.js.map +1 -1
- package/dist/core/schemas/archive-summary.d.ts +39 -109
- package/dist/core/schemas/archive-summary.d.ts.map +1 -1
- package/dist/core/schemas/archive-summary.js +15 -23
- package/dist/core/schemas/archive-summary.js.map +1 -1
- package/dist/core/templates/commands/ack-confirm.md +1 -1
- package/dist/core/templates/commands/apply.md +51 -114
- package/dist/core/templates/commands/archive.md +43 -160
- package/dist/core/templates/commands/review.md +49 -74
- package/dist/core/templates/commands/upgrade.md +21 -40
- package/dist/core/templates/commands/verify.md +43 -146
- package/dist/core/templates/skills/_shared/tier23-command-bridge.md +34 -0
- package/dist/core/templates/skills/exploring.md +3 -3
- package/dist/core/templates/skills/finishing-a-development-branch.md +6 -21
- package/dist/core/templates/skills/receiving-code-review.md +14 -45
- package/dist/core/templates/skills/requesting-code-review.md +11 -0
- package/dist/core/templates/skills/subagent-driven-development.md +33 -29
- package/dist/core/templates/skills/subagent-driven-discipline.md +28 -28
- package/dist/core/templates/skills/using-forge.md +25 -24
- package/dist/core/templates/skills/verification-before-completion.md +7 -18
- package/dist/core/templates/skills/verifying-three-dimensions.md +93 -169
- package/dist/core/templates/skills/writing-plans.md +6 -17
- package/dist/core/validate/archive-summary-schema.d.ts +1 -1
- package/dist/core/validate/archive-summary-schema.d.ts.map +1 -1
- package/dist/core/validate/archive-summary-schema.js +101 -125
- package/dist/core/validate/archive-summary-schema.js.map +1 -1
- package/dist/core/validate/index.d.ts +0 -1
- package/dist/core/validate/index.d.ts.map +1 -1
- package/dist/core/validate/index.js +2 -1
- package/dist/core/validate/index.js.map +1 -1
- package/dist/core/validate/marker-schema.d.ts +12 -4
- package/dist/core/validate/marker-schema.d.ts.map +1 -1
- package/dist/core/validate/marker-schema.js +98 -605
- package/dist/core/validate/marker-schema.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +8 -1
- package/dist/index.js.map +1 -1
- package/package.json +5 -4
- package/scripts/codex-review-helper.mjs +337 -0
- package/src/core/codex-review/prompts/adversarial-default.md +105 -0
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
[](https://github.com/Accelerator-mzq/forge/releases)
|
|
5
5
|
[](LICENSE)
|
|
6
6
|
|
|
7
|
-
> **
|
|
7
|
+
> **v3.1** 三 harness AI 工作流 plugin。融合 [OpenSpec](https://github.com/Fission-AI/OpenSpec) 产物驱动工作流 + [superpowers](https://github.com/obra/superpowers) 行为塑造 skill,**外加 v1.0 反向加固协议(三级 severity / 三维 verify / 三级 fence / ack 两步)防 AI 在 spec 阶段偷懒**。
|
|
8
8
|
|
|
9
9
|
```bash
|
|
10
10
|
# Tier 1 — Claude Code(全功能,推荐)
|
|
@@ -45,11 +45,11 @@ claude # 启动 Claude Code 会话
|
|
|
45
45
|
|
|
46
46
|
forge 不只是把 superpowers skill 搬到三 harness。v1.0 **fusion completion** 加了 9 块反向加固协议(plan-9a..9j),防 AI 在 spec / verify / archive 三阶段偷懒。
|
|
47
47
|
|
|
48
|
-
### 1. 主流程 6 步 +
|
|
48
|
+
### 1. 主流程 6 步 + 10 slash 命令
|
|
49
49
|
|
|
50
50
|
`/forge:brainstorm` → `/forge:propose` → `/forge:apply` → `/forge:review` → `/forge:verify` → `/forge:archive`。
|
|
51
51
|
|
|
52
|
-
横切命令:`/forge:explore`(非线性思考空间)、`/forge:ack-confirm`(WARNING 两步 ack)、`/forge:upgrade`(legacy 清理 + marker 重签)。
|
|
52
|
+
横切命令:`/forge:explore`(非线性思考空间)、`/forge:ack-confirm`(WARNING 两步 ack)、`/forge:upgrade`(legacy 清理 + marker 重签)、`/forge:codex-adversarial`(对抗性 review)。
|
|
53
53
|
|
|
54
54
|
每步产强校验 marker,后续阶段读 marker 的 `tasks_hash` / `content_hash` / `git.diff_hash` 验证未漂移(`src/core/markers/types.ts`)。
|
|
55
55
|
|
|
@@ -84,15 +84,15 @@ forge 不只是把 superpowers skill 搬到三 harness。v1.0 **fusion completio
|
|
|
84
84
|
|
|
85
85
|
## 安装(三 harness)
|
|
86
86
|
|
|
87
|
-
| Harness |
|
|
88
|
-
| --------------- |
|
|
89
|
-
| **Claude Code** |
|
|
90
|
-
| **OpenCode** |
|
|
91
|
-
| **Codex** |
|
|
87
|
+
| Harness | `/forge:*` slash 命令注册 | workflow bridge | 入口 |
|
|
88
|
+
| --------------- | ---------------------------------------------------------- | ------------------------------ | ------------------------------------------------------ |
|
|
89
|
+
| **Claude Code** | ✅ 全功能(skill auto-trigger + 10 slash 命令 + CLI helper) | — | [`docs/claude-install.md`](docs/claude-install.md) |
|
|
90
|
+
| **OpenCode** | ❌ 不注册 | ✅ best-effort(经命令文件桥接) | [`docs/opencode-install.md`](docs/opencode-install.md) |
|
|
91
|
+
| **Codex** | ❌ 不注册 | ✅ best-effort(经命令文件桥接) | [`docs/codex-install.md`](docs/codex-install.md) |
|
|
92
92
|
|
|
93
93
|
总览 + 选哪个 tier 见 [`docs/installation.md`](docs/installation.md)。
|
|
94
94
|
|
|
95
|
-
## CLI 命令(
|
|
95
|
+
## CLI 命令(17 个顶层子命令)
|
|
96
96
|
|
|
97
97
|
按业务分组,详见 [`docs/cli-reference.md`](docs/cli-reference.md):
|
|
98
98
|
|
|
@@ -129,19 +129,19 @@ forge upgrade --resign-markers <changeId> # plan-9j v1.0+ marker 重签(legacy
|
|
|
129
129
|
|
|
130
130
|
## 状态 + 文档导航
|
|
131
131
|
|
|
132
|
-
**
|
|
132
|
+
**v3.1.0**(本次 Tier 2/3 workflow closure 增量):
|
|
133
133
|
|
|
134
134
|
- 本地 5 命令(`typecheck` / `lint` / `format:check` / `build` / `test`)全 0
|
|
135
135
|
- **1115 tests pass**(`CHANGELOG.md:23`)
|
|
136
136
|
- 自动化 skill eval(`pnpm eval`,`forge-eval/scenarios/` 双轨 baseline)
|
|
137
|
-
-
|
|
137
|
+
- 18 skill + 10 slash 命令 + 17 CLI 子命令
|
|
138
138
|
|
|
139
139
|
**v1.0 fusion completion** 经 Codex CLI(gpt-5.4-codex)累计 5+ 轮对抗性 review(跨 10 sub-plan)+ Opus subagent 多轮自检,共修 200+ 条问题;**v1.1 polish leftover** 经 Codex 七轮 review 累计 32 finding 全处置(0 严重 / 0 阻塞 / 0 Major)。
|
|
140
140
|
|
|
141
141
|
**文档导航**:
|
|
142
142
|
|
|
143
143
|
- [`docs/getting-started.md`](docs/getting-started.md) — v1.1 端到端工作流 + Bug fix 快速路径
|
|
144
|
-
- [`docs/cli-reference.md`](docs/cli-reference.md) —
|
|
144
|
+
- [`docs/cli-reference.md`](docs/cli-reference.md) — 17 CLI 子命令完整参数 + 退出码
|
|
145
145
|
- [`docs/installation.md`](docs/installation.md) — 三 harness 安装总览
|
|
146
146
|
- [`docs/stage-extensions.md`](docs/stage-extensions.md) — stage-extensions framework 协议文档 + config schema + troubleshooting
|
|
147
147
|
- [`docs/codex-review.md`](docs/codex-review.md) — codex review 预置 extension 用户指南
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ack.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ack.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/ack.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwCpC;;;GAGG;AACH,wBAAgB,eAAe,IAAI,OAAO,CA4VzC"}
|
package/dist/cli/commands/ack.js
CHANGED
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
// forge ack confirm <changeId> <findingId> — User 确认,转为正式 ack 日志
|
|
5
5
|
// forge ack reject <changeId> <findingId> --rationale <text> — User 拒绝,删 pending
|
|
6
6
|
import { Command } from 'commander';
|
|
7
|
-
import { readFile, writeFile, unlink, mkdir } from 'node:fs/promises';
|
|
7
|
+
import { readFile, writeFile, unlink, mkdir, copyFile } from 'node:fs/promises';
|
|
8
8
|
import { execFileSync } from 'node:child_process';
|
|
9
9
|
import { resolve, dirname } from 'node:path';
|
|
10
10
|
import { stringify as stringifyYaml, parse as parseYaml } from 'yaml';
|
|
11
|
-
import { appendAckLog, getPendingPath, listPending } from '../../core/ack-log.js';
|
|
11
|
+
import { appendAckLog, getPendingPath, listPending, readAllAckLogEntries, } from '../../core/ack-log.js';
|
|
12
|
+
import { applyMarkerAck } from '../../core/ack/marker-ack.js';
|
|
12
13
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
13
14
|
// 内部 helper
|
|
14
15
|
// ──────────────────────────────────────────────────────────────────────────────
|
|
@@ -46,7 +47,7 @@ export function buildAckCommand() {
|
|
|
46
47
|
.command('propose')
|
|
47
48
|
.description('AI 写 pending ack 文件(需 user confirm 才生效)')
|
|
48
49
|
.argument('<changeId>', 'change 目录 ID,如 add-login')
|
|
49
|
-
.requiredOption('--finding <id>', 'finding
|
|
50
|
+
.requiredOption('--finding <id>', 'finding id:`<number>` 或 `pause_decisions:<number>`')
|
|
50
51
|
.requiredOption('--action <type>', 'ack 类型,如 ack-warning / ack-critical / resign-c-simcode')
|
|
51
52
|
.option('--rationale <text>', 'AI 给出的 rationale(可选)')
|
|
52
53
|
.option('--target-severity <sev>', 'resign-c-simcode action 专用 — 目标 severity (WARNING / SUGGESTION)')
|
|
@@ -96,7 +97,7 @@ export function buildAckCommand() {
|
|
|
96
97
|
.command('confirm')
|
|
97
98
|
.description('User 确认 AI 提议的 ack,写入 ack-log.jsonl 并删除 pending 文件')
|
|
98
99
|
.argument('<changeId>', 'change 目录 ID')
|
|
99
|
-
.argument('<findingId>', 'finding
|
|
100
|
+
.argument('<findingId>', 'finding id:`<number>` 或 `pause_decisions:<number>`')
|
|
100
101
|
.option('--target-severity <sev>', '仅 resign-c-simcode action 必填;confirm 时 user 指定目标 severity 并写回 marker')
|
|
101
102
|
.action(async (changeId, findingId, opts) => {
|
|
102
103
|
const changeRoot = resolve(process.cwd(), 'forge', 'changes', changeId);
|
|
@@ -135,17 +136,36 @@ export function buildAckCommand() {
|
|
|
135
136
|
process.stderr.write(`forge ack confirm: invalid --target-severity "${resolvedTargetSeverity}" (must be WARNING or SUGGESTION)\n`);
|
|
136
137
|
process.exit(2);
|
|
137
138
|
}
|
|
139
|
+
// Task A2: marker ack 字段写入 — user/ackedAt 与 ack-log entry 共用同一值保证一致性
|
|
140
|
+
const ackedAt = new Date().toISOString();
|
|
141
|
+
const user = process.env['USER'] ?? process.env['USERNAME'] ?? 'unknown';
|
|
142
|
+
const markerResult = await applyMarkerAck({
|
|
143
|
+
changeDir: changeRoot,
|
|
144
|
+
action: payload.action,
|
|
145
|
+
findingId,
|
|
146
|
+
user,
|
|
147
|
+
ackedAt,
|
|
148
|
+
rationale: payload.rationale ?? null,
|
|
149
|
+
targetSeverity: resolvedTargetSeverity === 'WARNING' || resolvedTargetSeverity === 'SUGGESTION'
|
|
150
|
+
? resolvedTargetSeverity
|
|
151
|
+
: null,
|
|
152
|
+
});
|
|
153
|
+
if (!markerResult.ok) {
|
|
154
|
+
// marker 写失败(已自恢复) → 不 append ack-log,不删 pending,exit 2
|
|
155
|
+
process.stderr.write(`forge ack confirm: ${markerResult.reason}\n`);
|
|
156
|
+
process.exit(2);
|
|
157
|
+
}
|
|
138
158
|
const ackEntry = {
|
|
139
159
|
schema: 'forge-ack-log/v1',
|
|
140
160
|
kind: 'ack',
|
|
141
|
-
timestamp:
|
|
161
|
+
timestamp: ackedAt,
|
|
142
162
|
action: payload.action,
|
|
143
163
|
change_id: changeId,
|
|
144
164
|
finding_id: findingId,
|
|
145
|
-
user
|
|
165
|
+
user,
|
|
146
166
|
rationale: payload.rationale ?? null,
|
|
147
167
|
git_head: getGitHead(changeRoot),
|
|
148
|
-
finding_hash:
|
|
168
|
+
finding_hash: markerResult.ackLogFindingHash,
|
|
149
169
|
target_severity: resolvedTargetSeverity === 'WARNING' || resolvedTargetSeverity === 'SUGGESTION'
|
|
150
170
|
? resolvedTargetSeverity
|
|
151
171
|
: undefined,
|
|
@@ -155,10 +175,65 @@ export function buildAckCommand() {
|
|
|
155
175
|
target_severity: payload.target_severity ?? null,
|
|
156
176
|
},
|
|
157
177
|
};
|
|
158
|
-
//
|
|
159
|
-
|
|
160
|
-
//
|
|
161
|
-
|
|
178
|
+
// applyMarkerAck 返回 ok=true、ackEntry 构造完成后:
|
|
179
|
+
// 幂等读 ack-log + appendAckLog 整体包进同一 rollback try/catch(Codex MAJOR-1)
|
|
180
|
+
// 保证 readAllAckLogEntries 失败时也触发 rollback,不留 marker 已写的半状态
|
|
181
|
+
try {
|
|
182
|
+
const entries = await readAllAckLogEntries(changeRoot);
|
|
183
|
+
const dup = entries.some((e) => e.kind === 'ack' &&
|
|
184
|
+
e.change_id === changeId &&
|
|
185
|
+
e.finding_id === findingId &&
|
|
186
|
+
e.action === payload.action &&
|
|
187
|
+
e.user === user &&
|
|
188
|
+
e.finding_hash === ackEntry.finding_hash);
|
|
189
|
+
if (!dup)
|
|
190
|
+
await appendAckLog(changeRoot, ackEntry); // 幂等:已存在同 entry 则跳过 append
|
|
191
|
+
}
|
|
192
|
+
catch (e) {
|
|
193
|
+
// ack-log 读/写失败 → 尽力从 .bak 恢复所有已写 marker;保留 pending(retry 可重跑)
|
|
194
|
+
// 收集 restore 失败,不让单个失败中断其余恢复;有未恢复项时输出清晰诊断
|
|
195
|
+
const restoreErrors = [];
|
|
196
|
+
for (const bak of markerResult.backups) {
|
|
197
|
+
const marker = bak.replace(/\.bak$/, '');
|
|
198
|
+
try {
|
|
199
|
+
await copyFile(bak, marker);
|
|
200
|
+
}
|
|
201
|
+
catch (re) {
|
|
202
|
+
restoreErrors.push(`${marker}(.bak: ${bak}): ${re instanceof Error ? re.message : String(re)}`);
|
|
203
|
+
}
|
|
204
|
+
}
|
|
205
|
+
if (restoreErrors.length > 0) {
|
|
206
|
+
process.stderr.write(`forge ack confirm: ack-log 操作失败且 rollback incomplete —— 以下 marker 未恢复,` +
|
|
207
|
+
`请手动用对应 .bak 还原: ${restoreErrors.join('; ')}\n`);
|
|
208
|
+
}
|
|
209
|
+
else {
|
|
210
|
+
process.stderr.write(`forge ack confirm: ack-log 操作失败,marker 已回滚: ${e instanceof Error ? e.message : String(e)}\n`);
|
|
211
|
+
}
|
|
212
|
+
process.exit(1);
|
|
213
|
+
}
|
|
214
|
+
// 成功:先删 pending(它是「未完成」标记;marker+ack-log 已一致即可删)
|
|
215
|
+
// ENOENT 视为幂等成功(pending 可能已被并发/外部清理);其他 unlink 错误 → exit 1
|
|
216
|
+
// (pending 残留会被 archive pending fence 拒签,必须让用户知道)
|
|
217
|
+
try {
|
|
218
|
+
await unlink(latest.path);
|
|
219
|
+
}
|
|
220
|
+
catch (e) {
|
|
221
|
+
if (e.code !== 'ENOENT') {
|
|
222
|
+
process.stderr.write(`forge ack confirm: pending 文件删除失败(残留会被 archive 拒签,请手动清理 ${latest.path}): ` +
|
|
223
|
+
`${e instanceof Error ? e.message : String(e)}\n`);
|
|
224
|
+
process.exit(1);
|
|
225
|
+
}
|
|
226
|
+
// ENOENT → pending 已不在,幂等成功,继续清理 .bak
|
|
227
|
+
}
|
|
228
|
+
// best-effort 清理 .bak(.bak 残留不影响 archive,清理失败不阻断)
|
|
229
|
+
for (const bak of markerResult.backups) {
|
|
230
|
+
try {
|
|
231
|
+
await unlink(bak);
|
|
232
|
+
}
|
|
233
|
+
catch {
|
|
234
|
+
/* .bak 清理失败吞错 —— 不阻断,marker+ack-log 已一致 */
|
|
235
|
+
}
|
|
236
|
+
}
|
|
162
237
|
process.exit(0);
|
|
163
238
|
});
|
|
164
239
|
// ──────────────────────────────────────────────────────────────────────────
|
|
@@ -168,7 +243,7 @@ export function buildAckCommand() {
|
|
|
168
243
|
.command('reject')
|
|
169
244
|
.description('User 拒绝 AI 提议的 ack,写入 reject 日志并删除 pending 文件')
|
|
170
245
|
.argument('<changeId>', 'change 目录 ID')
|
|
171
|
-
.argument('<findingId>', 'finding
|
|
246
|
+
.argument('<findingId>', 'finding id:`<number>` 或 `pause_decisions:<number>`')
|
|
172
247
|
.requiredOption('--rationale <text>', '拒绝理由(必填)')
|
|
173
248
|
.action(async (changeId, findingId, opts) => {
|
|
174
249
|
const changeRoot = resolve(process.cwd(), 'forge', 'changes', changeId);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../src/cli/commands/ack.ts"],"names":[],"mappings":"AAAA,kCAAkC;AAClC,WAAW;AACX,qFAAqF;AACrF,uFAAuF;AACvF,qFAAqF;AAErF,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"ack.js","sourceRoot":"","sources":["../../../src/cli/commands/ack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,16 +1,27 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
2
|
import type { SyncCheckInput } from '../../core/legacy-bridge/sync-check.js';
|
|
3
|
+
/**
|
|
4
|
+
* Forge archive 命令工厂 — v4 简版(沿 plan §6.1 v9 伪代码)
|
|
5
|
+
*
|
|
6
|
+
* 9 步主流程:
|
|
7
|
+
* 1. forgeRoot + changeId selection
|
|
8
|
+
* 2. legacy-bridge preflight(可 graceful skip)
|
|
9
|
+
* 3. spec validate(blocking,永远跑)
|
|
10
|
+
* 4. marker check + v2 schema validate
|
|
11
|
+
* 5. task progress confirm(--yes 跳过)
|
|
12
|
+
* 6. spec deltas(--skip-specs 跳;否则 readDeltas + confirm + applyDeltas)
|
|
13
|
+
* 7. mv change → archive/<archiveDate>-<changeId>(算一次 archiveDate)
|
|
14
|
+
* 8. buildArchiveSummary + 写 archive_summary.yaml
|
|
15
|
+
* 9. legacy-bridge posthook + generateBacklog + appendTraceEvent
|
|
16
|
+
*/
|
|
3
17
|
export declare function buildArchiveCommand(): Command;
|
|
4
18
|
/**
|
|
5
|
-
* preflight 结果 union — caller
|
|
6
|
-
* 与 archive.ts 现有"business-rule fail 处理"convention 一致(line 154 / 160 等)。
|
|
19
|
+
* preflight 结果 union — caller 根据 kind 退出
|
|
7
20
|
*
|
|
8
21
|
* kind 'ok':可继续 archive(graceful skip / 无 affected anchor / --api 跑完无 critical)
|
|
9
|
-
* kind 'ack-missing':ack 未就绪,
|
|
10
|
-
* kind 'critical-pending':**仅 --api
|
|
11
|
-
*
|
|
12
|
-
* kind 'halted-for-fulfillment':**仅 agent 模式产生** —— emit manifest +
|
|
13
|
-
* 暂停态文件已写,archive 应 halt,caller await release + exit 2
|
|
22
|
+
* kind 'ack-missing':ack 未就绪,exit 2
|
|
23
|
+
* kind 'critical-pending':**仅 --api 模式** —— 进程内跑 sync-check 后发现 critical pending
|
|
24
|
+
* kind 'halted-for-fulfillment':**仅 agent 模式** —— emit manifest + 暂停态文件已写,exit 2
|
|
14
25
|
*/
|
|
15
26
|
export type PreflightResult = {
|
|
16
27
|
kind: 'ok';
|
|
@@ -35,27 +46,20 @@ export type PreflightResult = {
|
|
|
35
46
|
* 4. legacy_bridge.enforce_sync != true
|
|
36
47
|
* 5. 无受影响 anchor / 全部读取失败(buildSyncCheckTask 返 null)
|
|
37
48
|
*
|
|
38
|
-
*
|
|
39
|
-
* - **agent 模式(
|
|
40
|
-
*
|
|
41
|
-
* - **--api 模式**:进程内直连 Anthropic API 跑 sync-check + 写 sync-state →
|
|
42
|
-
* 含 critical pending 返 {kind:'critical-pending'};否则返 {kind:'ok'} 续跑 archive。
|
|
49
|
+
* 双模式:
|
|
50
|
+
* - **agent 模式(默认)**:emit sync-check manifest + 暂停态 → halted-for-fulfillment
|
|
51
|
+
* - **--api 模式**:进程内直连 API 跑 sync-check + 写 sync-state → critical-pending 或 ok
|
|
43
52
|
*
|
|
44
|
-
* ack 不就绪
|
|
45
|
-
*
|
|
46
|
-
* **不再调 process.exit / console.error**:caller(archive 命令)负责打印消息 +
|
|
47
|
-
* release archive.lock + exit,避免本函数内 process.exit 跳过 caller finally
|
|
48
|
-
* 导致 archive.lock 文件残留。
|
|
53
|
+
* ack 不就绪 → ack-missing。
|
|
49
54
|
*/
|
|
50
55
|
export declare function runArchivePreflight(forgeRoot: string, changeId: string, opts?: {
|
|
51
56
|
api: boolean;
|
|
52
57
|
}): Promise<PreflightResult>;
|
|
53
58
|
/**
|
|
54
|
-
* Plan 7 §2.5 + Task 6.3:post-archive hook —
|
|
55
|
-
* enforce_sync=true 已由 preflight 跑过;graceful skip 路径同 preflight。
|
|
59
|
+
* Plan 7 §2.5 + Task 6.3:post-archive hook — 不阻塞,enforce_sync=false 时跑(产报告)。
|
|
56
60
|
*
|
|
57
|
-
* agent 模式:emit sync-check manifest(非阻塞,archive
|
|
58
|
-
* --api 模式:进程内直连 API 跑 sync-check + 写 sync-state(
|
|
61
|
+
* agent 模式:emit sync-check manifest(非阻塞,archive 已完成)
|
|
62
|
+
* --api 模式:进程内直连 API 跑 sync-check + 写 sync-state(非阻塞)
|
|
59
63
|
*
|
|
60
64
|
* I-2:archiveDate 由 archive 主流程透传(不自己算 new Date(),避免跨午夜偏一天)。
|
|
61
65
|
*/
|
|
@@ -75,28 +79,23 @@ export declare function emitPreflightSyncCheck(forgeRoot: string, changeId: stri
|
|
|
75
79
|
kind: 'halted-for-fulfillment' | 'skip';
|
|
76
80
|
}>;
|
|
77
81
|
/**
|
|
78
|
-
* agent 模式:enforce_sync=false 时 post-archive emit sync-check manifest(
|
|
82
|
+
* agent 模式:enforce_sync=false 时 post-archive emit sync-check manifest(非阻塞)。
|
|
79
83
|
*
|
|
80
84
|
* archive 已完成;fulfill 后跑 forge legacy-bridge sync-check --apply 出报告。
|
|
81
|
-
* 调用前 gate 检查由 runArchivePostHook 负责。
|
|
82
|
-
*
|
|
83
|
-
* @param ctx 已拼好的 SyncCheckInput(可选;不传则内部自拼,供测试直接调用)
|
|
84
85
|
*/
|
|
85
86
|
export declare function emitPostHookSyncCheck(forgeRoot: string, changeId: string, ctx?: SyncCheckInput): Promise<{
|
|
86
87
|
kind: 'emitted' | 'skip';
|
|
87
88
|
}>;
|
|
88
89
|
/**
|
|
89
|
-
* Task 6.4:forge archive --resume 的 gate
|
|
90
|
+
* Task 6.4:forge archive --resume 的 gate 复核(legacy 留存 — v4 archive 主流程已无 --resume,
|
|
91
|
+
* 但 tests/cli/legacy-bridge/archive-dualpath.test.ts 直接 import 测试此 gate 逻辑,需保留)。
|
|
90
92
|
*
|
|
91
93
|
* 复核两项:
|
|
92
|
-
* ① 产物绑定 — sync-state
|
|
93
|
-
*
|
|
94
|
-
* ② critical 幂等重评 — sync-state 中不得有 severity=critical + status=pending 的差异;
|
|
95
|
-
* 若有,说明 agent 未完全 resolve,不可续跑 archive。
|
|
94
|
+
* ① 产物绑定 — sync-state.produced_from 必须等于暂停态文件的 manifest_hash
|
|
95
|
+
* ② critical 幂等重评 — sync-state 中不得有 severity=critical + status=pending 的差异
|
|
96
96
|
*
|
|
97
|
-
*
|
|
98
|
-
*
|
|
99
|
-
* @returns { ok: true } 表示 gate 通过;{ ok: false, reason } 表示拒绝并附原因
|
|
97
|
+
* v4 备注:archive 命令本身不再调用此函数;legacy-bridge sync-check 命令(若有 resume 路径)
|
|
98
|
+
* 可调用此函数验证 sync-state 绑定。本函数留存为 sync-check 子系统的 building block。
|
|
100
99
|
*/
|
|
101
100
|
export declare function resumeArchiveGateCheck(forgeRoot: string, changeId: string): Promise<{
|
|
102
101
|
ok: true;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/archive.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/archive.ts"],"names":[],"mappings":"AAcA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqBpC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wCAAwC,CAAC;AAwI7E;;;;;;;;;;;;;GAaG;AACH,wBAAgB,mBAAmB,IAAI,OAAO,CAuN7C;AAMD;;;;;;;GAOG;AACH,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,IAAI,CAAA;CAAE,GACd;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,kBAAkB,CAAC;IAAC,aAAa,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACpE;IAAE,IAAI,EAAE,wBAAwB,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC;AAExD;;;;;;;;;;;;;;;GAeG;AACH,wBAAsB,mBAAmB,CACvC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,GAAE;IAAE,GAAG,EAAE,OAAO,CAAA;CAAmB,GACtC,OAAO,CAAC,eAAe,CAAC,CAuE1B;AAED;;;;;;;GAOG;AACH,wBAAsB,kBAAkB,CACtC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE;IAAE,WAAW,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,OAAO,CAAA;CAAE,GAC1C,OAAO,CAAC,IAAI,CAAC,CAwDf;AAkDD;;;;;;;GAOG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,wBAAwB,GAAG,MAAM,CAAA;CAAE,CAAC,CA0BtD;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,GAAG,CAAC,EAAE,cAAc,GACnB,OAAO,CAAC;IAAE,IAAI,EAAE,SAAS,GAAG,MAAM,CAAA;CAAE,CAAC,CAUvC;AA8BD;;;;;;;;;;GAUG;AACH,wBAAsB,sBAAsB,CAC1C,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,GACf,OAAO,CAAC;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,CAqDvD"}
|