@entelligentsia/forgecli 1.0.21 → 1.0.36
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/CHANGELOG.md +346 -0
- package/README.md +2 -0
- package/dist/CHANGELOG-forge-plugin.md +281 -0
- package/dist/bin/argv.d.ts +2 -2
- package/dist/bin/argv.js +25 -0
- package/dist/bin/argv.js.map +1 -1
- package/dist/bin/forge.js +12 -0
- package/dist/bin/forge.js.map +1 -1
- package/dist/bin/init.d.ts +23 -0
- package/dist/bin/init.js +123 -0
- package/dist/bin/init.js.map +1 -0
- package/dist/bin/uninstall.d.ts +20 -0
- package/dist/bin/uninstall.js +141 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.d.ts +40 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js +593 -0
- package/dist/extensions/forgecli/claude-bootstrap/bootstrap.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.d.ts +46 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js +245 -0
- package/dist/extensions/forgecli/claude-bootstrap/settings-merge.js.map +1 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.d.ts +23 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js +215 -0
- package/dist/extensions/forgecli/claude-bootstrap/uninstall.js.map +1 -0
- package/dist/extensions/forgecli/dashboard/component.js +10 -7
- package/dist/extensions/forgecli/dashboard/component.js.map +1 -1
- package/dist/extensions/forgecli/forge-tools.d.ts +1 -0
- package/dist/extensions/forgecli/forge-tools.js +73 -0
- package/dist/extensions/forgecli/forge-tools.js.map +1 -1
- package/dist/extensions/forgecli/lib/forge-root.d.ts +5 -0
- package/dist/extensions/forgecli/lib/forge-root.js +14 -1
- package/dist/extensions/forgecli/lib/forge-root.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.d.ts +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js +65 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.d.ts +23 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js +140 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-id.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.d.ts +54 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js +349 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js +60 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js +100 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.d.ts +72 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js +204 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-triage-routing.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.d.ts +38 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js +166 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.d.ts +3 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js +55 -0
- package/dist/extensions/forgecli/orchestrators/bug/bug-verdict.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.d.ts +7 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js +293 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js +501 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.d.ts +41 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/bug/run-bug-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.d.ts +43 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js +85 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-entry.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.d.ts +8 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-misc.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.d.ts +28 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js +45 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-notify.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.d.ts +26 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js +75 -0
- package/dist/extensions/forgecli/orchestrators/common/orchestrator-transcript-session.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.d.ts +24 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js +37 -0
- package/dist/extensions/forgecli/orchestrators/common/summary-recovery.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/fix-bug.d.ts +9 -92
- package/dist/extensions/forgecli/orchestrators/fix-bug.js +23 -1695
- package/dist/extensions/forgecli/orchestrators/fix-bug.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-sprint.d.ts +3 -12
- package/dist/extensions/forgecli/orchestrators/run-sprint.js +97 -270
- package/dist/extensions/forgecli/orchestrators/run-sprint.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/run-task.d.ts +10 -214
- package/dist/extensions/forgecli/orchestrators/run-task.js +31 -1481
- package/dist/extensions/forgecli/orchestrators/run-task.js.map +1 -1
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.d.ts +33 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js +135 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-ceremony.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.d.ts +18 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js +55 -0
- package/dist/extensions/forgecli/orchestrators/sprint/sprint-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js +174 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-command.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.d.ts +2 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js +494 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-pipeline.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.d.ts +62 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js +5 -0
- package/dist/extensions/forgecli/orchestrators/task/run-task-types.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.d.ts +4 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js +48 -0
- package/dist/extensions/forgecli/orchestrators/task/task-body.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.d.ts +63 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js +185 -0
- package/dist/extensions/forgecli/orchestrators/task/task-events.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.d.ts +34 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js +78 -0
- package/dist/extensions/forgecli/orchestrators/task/task-gates.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.d.ts +42 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js +370 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phase-dispatch.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js +26 -0
- package/dist/extensions/forgecli/orchestrators/task/task-phases.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.d.ts +9 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js +58 -0
- package/dist/extensions/forgecli/orchestrators/task/task-record.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.d.ts +14 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js +35 -0
- package/dist/extensions/forgecli/orchestrators/task/task-state.js.map +1 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.d.ts +36 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js +152 -0
- package/dist/extensions/forgecli/orchestrators/task/task-verdict-loop.js.map +1 -0
- package/dist/extensions/forgecli/update/forge-update-command.js +10 -7
- package/dist/extensions/forgecli/update/forge-update-command.js.map +1 -1
- package/dist/forge-payload/.base-pack/commands/approve.md +2 -2
- package/dist/forge-payload/.base-pack/commands/check-agent.md +2 -2
- package/dist/forge-payload/.base-pack/commands/collate.md +2 -2
- package/dist/forge-payload/.base-pack/commands/commit.md +2 -2
- package/dist/forge-payload/.base-pack/commands/enhance.md +2 -2
- package/dist/forge-payload/.base-pack/commands/fix-bug.md +2 -2
- package/dist/forge-payload/.base-pack/commands/implement.md +2 -2
- package/dist/forge-payload/.base-pack/commands/init.md +278 -0
- package/dist/forge-payload/.base-pack/commands/new-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/retro.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-code.md +2 -2
- package/dist/forge-payload/.base-pack/commands/review-plan.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-sprint.md +2 -2
- package/dist/forge-payload/.base-pack/commands/run-task.md +2 -2
- package/dist/forge-payload/.base-pack/commands/validate.md +2 -2
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/.base-pack/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/.base-pack/workflows/collator_agent.md +5 -6
- package/dist/forge-payload/.base-pack/workflows/commit_task.md +41 -38
- package/dist/forge-payload/.base-pack/workflows/implement_plan.md +3 -3
- package/dist/forge-payload/.base-pack/workflows/migrate_structural.md +1 -1
- package/dist/forge-payload/.base-pack/workflows-js/wfl-fix-bug.js +42 -6
- package/dist/forge-payload/.base-pack/workflows-js/wfl-init.js +449 -0
- package/dist/forge-payload/.base-pack/workflows-js/wfl-run-task.js +32 -1
- package/dist/forge-payload/.claude-plugin/plugin.json +1 -1
- package/dist/forge-payload/.schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/.schemas/event.schema.json +8 -3
- package/dist/forge-payload/.schemas/migrations.json +141 -0
- package/dist/forge-payload/commands/add-pipeline.md +1 -1
- package/dist/forge-payload/commands/add-task.md +3 -3
- package/dist/forge-payload/commands/ask.md +1 -1
- package/dist/forge-payload/commands/check-agent.md +1 -1
- package/dist/forge-payload/commands/config.md +1 -1
- package/dist/forge-payload/commands/health.md +1 -1
- package/dist/forge-payload/commands/init.md +62 -7
- package/dist/forge-payload/commands/rebuild.md +3 -3
- package/dist/forge-payload/commands/remove.md +1 -1
- package/dist/forge-payload/commands/repair.md +1 -1
- package/dist/forge-payload/commands/report-bug.md +1 -1
- package/dist/forge-payload/commands/status.md +1 -1
- package/dist/forge-payload/commands/update.md +3 -3
- package/dist/forge-payload/hooks/lib/common.cjs +228 -0
- package/dist/forge-payload/hooks/lib/plugin-detection.cjs +106 -0
- package/dist/forge-payload/hooks/lib/update-msg.cjs +23 -0
- package/dist/forge-payload/hooks/lib/update-url.cjs +46 -0
- package/dist/forge-payload/hooks/lib/write-registry.js +53 -0
- package/dist/forge-payload/init/discovery/discover-database.md +32 -0
- package/dist/forge-payload/init/discovery/discover-processes.md +31 -0
- package/dist/forge-payload/init/discovery/discover-routing.md +31 -0
- package/dist/forge-payload/init/discovery/discover-stack.md +33 -0
- package/dist/forge-payload/init/discovery/discover-testing.md +34 -0
- package/dist/forge-payload/init/generation/generate-commands.md +171 -0
- package/dist/forge-payload/init/generation/generate-kb-doc.md +60 -0
- package/dist/forge-payload/init/generation/generate-knowledge-base.md +56 -0
- package/dist/forge-payload/init/generation/generate-persona.md +73 -0
- package/dist/forge-payload/init/generation/generate-personas.md +54 -0
- package/dist/forge-payload/init/generation/generate-skill.md +66 -0
- package/dist/forge-payload/init/generation/generate-skills.md +36 -0
- package/dist/forge-payload/init/generation/generate-template.md +60 -0
- package/dist/forge-payload/init/generation/generate-templates.md +39 -0
- package/dist/forge-payload/init/generation/generate-tools.md +133 -0
- package/dist/forge-payload/init/generation/generate-workflows.md +78 -0
- package/dist/forge-payload/init/phases/phase-1-collect.md +10 -2
- package/dist/forge-payload/init/phases/phase-3-materialize.md +1 -1
- package/dist/forge-payload/init/phases/phase-4-register.md +8 -0
- package/dist/forge-payload/init/workflow-gen-plan.json +17 -0
- package/dist/forge-payload/integrity.json +16 -16
- package/dist/forge-payload/meta/store-schema/event.schema.md +7 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-emission-schema.md +4 -0
- package/dist/forge-payload/meta/workflows/_fragments/event-vocabulary.md +88 -0
- package/dist/forge-payload/meta/workflows/meta-collate.md +5 -6
- package/dist/forge-payload/meta/workflows/meta-commit.md +46 -43
- package/dist/forge-payload/meta/workflows/meta-fix-bug.md +7 -2
- package/dist/forge-payload/meta/workflows/meta-implement.md +3 -3
- package/dist/forge-payload/meta/workflows/meta-migrate.md +1 -1
- package/dist/forge-payload/meta/workflows/meta-orchestrate.md +4 -1
- package/dist/forge-payload/schemas/enum-catalog.json +2 -2
- package/dist/forge-payload/schemas/event.schema.json +8 -3
- package/dist/forge-payload/schemas/structure-manifest.json +5 -12
- package/dist/forge-payload/tools/commit-task.cjs +218 -0
- package/dist/forge-payload/tools/forge-preflight.cjs +268 -0
- package/dist/forge-payload/tools/lib/paths.cjs +12 -11
- package/dist/forge-payload/tools/lib/pricing.cjs +31 -11
- package/dist/forge-payload/tools/query-logger.cjs +34 -0
- package/dist/forge-payload/tools/store-cli.cjs +6 -1
- package/dist/forge-payload/tools/substitute-placeholders.cjs +5 -6
- package/package.json +2 -2
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,352 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
## [Unreleased]
|
|
9
9
|
|
|
10
|
+
### Added
|
|
11
|
+
|
|
12
|
+
- **`4ge uninstall claude [dir] [--purge] [--yes]`** — the counterpart to
|
|
13
|
+
`4ge init claude`. Deterministically reverses the bootstrap: removes the
|
|
14
|
+
vendored Forge scaffold (`.forge/{tools,schemas,init,.base-pack,meta,
|
|
15
|
+
.claude-plugin,cache}`, `.bootstrap-manifest.json`, `.claude/commands/forge`,
|
|
16
|
+
`.claude/workflows`, and the payload's agents/skills), un-merges the Forge
|
|
17
|
+
hooks from `.claude/settings.json`, and un-appends the Forge block from
|
|
18
|
+
`.gitignore`. Safety: **preserves user data by default** (`.forge/config.json`,
|
|
19
|
+
`.forge/store/**`, the KB folder); `--purge` also removes config + store (KB
|
|
20
|
+
is never auto-removed). Refuses to act without a `.bootstrap-manifest.json`
|
|
21
|
+
(proof the project was forge-bootstrapped), edits `settings.json`/`.gitignore`
|
|
22
|
+
rather than deleting them, preserves user-authored agents/skills not in the
|
|
23
|
+
payload, and is idempotent. A `[y/N]` confirm guards it unless `--yes`/`-y` or
|
|
24
|
+
`FORGE_NON_INTERACTIVE=1`.
|
|
25
|
+
|
|
26
|
+
## [1.0.36] — 2026-06-09
|
|
27
|
+
|
|
28
|
+
Orchestrator dashboard logs + autonomous run-sprint + KB-refresh, re-landed onto
|
|
29
|
+
the modular-orchestrator decomposition.
|
|
30
|
+
|
|
31
|
+
### Added
|
|
32
|
+
|
|
33
|
+
- **Orchestrator decision logs on the dashboard.** The shared
|
|
34
|
+
`withOrchestratorTranscript` notify-interception now mirrors every
|
|
35
|
+
orchestrator notify onto its root node (`tree.appendTail(entityId, …)`), and
|
|
36
|
+
the dashboard renders the Activity log for ALL node kinds (not just leaf). The
|
|
37
|
+
task/sprint/bug root node now carries the orchestrator's own narrative — gate
|
|
38
|
+
results, review verdicts, escalations, halts — alongside the per-phase leaf
|
|
39
|
+
nodes' subagent tool-call activity. New granular per-phase lines: `〇 preflight
|
|
40
|
+
ok`, `dispatch persona/model`, resolved `verdict`, `〇 postflight ok`.
|
|
41
|
+
- **KB-link refresh is orchestrator-owned in run-task.** After the writeback
|
|
42
|
+
phase, the pipeline calls `runRefreshKbLinks(cwd)` directly (forge-cli
|
|
43
|
+
subagents run via the Pi runtime and have no Skill tool, so the prior
|
|
44
|
+
`forge:refresh-kb-links` Skill-tool instruction caused a multi-call probe
|
|
45
|
+
loop).
|
|
46
|
+
|
|
47
|
+
### Changed
|
|
48
|
+
|
|
49
|
+
- **`/forge:run-sprint` runs to completion.** Removed the per-task "Continue to
|
|
50
|
+
next task?" confirm and the partial-ceremony-on-decline branch. A sprint
|
|
51
|
+
command now runs all of its tasks, then the single clean-complete ceremony.
|
|
52
|
+
The mid-sprint modal previously turned any UI hiccup into a premature partial
|
|
53
|
+
ceremony (ceremony firing after task 1 with later tasks still draft).
|
|
54
|
+
Deliberate cancellation (abort signal / task halt) still stops the sprint.
|
|
55
|
+
|
|
56
|
+
### Fixed
|
|
57
|
+
|
|
58
|
+
- Dispatch line printed `model=[object Object]` — `modelResolution.model` is a
|
|
59
|
+
`{provider, model}` object; now formatted as `provider:model`.
|
|
60
|
+
|
|
61
|
+
## [1.0.35] — 2026-06-07
|
|
62
|
+
|
|
63
|
+
Re-bundle forge-plugin 1.4.4 — CLI-first field-test gap fixes: paths.commands
|
|
64
|
+
no longer prefix-derived (always `.claude/commands/forge`), explicit
|
|
65
|
+
`paths.forgeRoot=".forge"` write, dev-only tools excluded from the
|
|
66
|
+
structure manifest (instance expectation 49/49, no false /forge:health gaps).
|
|
67
|
+
|
|
68
|
+
## [1.0.34] — 2026-06-07
|
|
69
|
+
|
|
70
|
+
No-dead-vendored-references gate (closes the forge#112 failure class).
|
|
71
|
+
|
|
72
|
+
### Added
|
|
73
|
+
|
|
74
|
+
- **`tools/check-vendored-refs.cjs`** — scans every vendored text file
|
|
75
|
+
(commands, drivers, rulebooks, settings, agents, skills) for
|
|
76
|
+
`.forge/…` / `$FORGE_ROOT/…` path references and fails on any whose
|
|
77
|
+
target doesn't exist post-bootstrap. Wired in twice: vitest
|
|
78
|
+
(`vendored-refs.test.ts`, against the real payload) and `tmp-smoke.sh`
|
|
79
|
+
BOOTSTRAP-9.
|
|
80
|
+
|
|
81
|
+
### Fixed
|
|
82
|
+
|
|
83
|
+
- Two dead references the new gate caught immediately:
|
|
84
|
+
**`forge-preflight.cjs`** (referenced by the run-task driver +
|
|
85
|
+
meta-fix-bug/meta-orchestrate — /forge:run-task would have hit a dead tool
|
|
86
|
+
on first use) added to `TOOLS_TO_COPY`, and
|
|
87
|
+
**`init/workflow-gen-plan.json`** (referenced by rebuild.md) bundled.
|
|
88
|
+
|
|
89
|
+
## [1.0.33] — 2026-06-07
|
|
90
|
+
|
|
91
|
+
Re-bundle forge-plugin 1.4.3 — wfl-init.js Phase 2 verify invocations carry
|
|
92
|
+
the required `--kb-path` ([forge#112](https://github.com/Entelligentsia/forge/issues/112) follow-up).
|
|
93
|
+
|
|
94
|
+
## [1.0.32] — 2026-06-07
|
|
95
|
+
|
|
96
|
+
Re-bundle forge-plugin 1.4.2 — wfl-init.js Workflow-API rewrite
|
|
97
|
+
([forge#112](https://github.com/Entelligentsia/forge/issues/112): phase
|
|
98
|
+
callbacks silently discarded → init ran 0 agents but reported success;
|
|
99
|
+
parallel() thunks; agent(prompt, opts) arg order; missing schema opts).
|
|
100
|
+
|
|
101
|
+
### Fixed
|
|
102
|
+
|
|
103
|
+
- **`build-payload` bundles the full `init/` rulebook tree** — `discovery/`
|
|
104
|
+
(5 prompts) and `generation/` (11 rulebooks) join `phases/`. Bundling only
|
|
105
|
+
`phases/` left wfl-init.js discovery/KB-doc subagents with dead rulebook
|
|
106
|
+
references in vendored projects.
|
|
107
|
+
|
|
108
|
+
## [1.0.31] — 2026-06-07
|
|
109
|
+
|
|
110
|
+
Re-bundle forge-plugin 1.4.1 — wfl-init.js Workflow-harness parse fix
|
|
111
|
+
(`export default` wrapper stripped; every `/forge:init` dispatch previously
|
|
112
|
+
failed at launch with "SyntaxError: Unexpected keyword 'export'").
|
|
113
|
+
Projects bootstrapped with the broken driver: re-run `4ge init claude .`
|
|
114
|
+
(idempotent repair overwrites `.claude/workflows/wfl-init.js`).
|
|
115
|
+
|
|
116
|
+
## [1.0.30] — 2026-06-07
|
|
117
|
+
|
|
118
|
+
Fixed `/forge:*` command namespace — full project vendoring (bundles forge-plugin 1.4.0).
|
|
119
|
+
|
|
120
|
+
### Changed
|
|
121
|
+
|
|
122
|
+
- **Bootstrap Step 4 — full `/forge:*` command surface vendored.** Replaces the
|
|
123
|
+
init.md-only install: the union of `.base-pack/commands/` (17 sprint-workflow
|
|
124
|
+
shims, now static `/forge:*` files) and `commands/` (utility commands) vendors
|
|
125
|
+
into `.claude/commands/forge/`. On name collision (`init.md`, `check-agent.md`,
|
|
126
|
+
`enhance.md`) the `.base-pack` version wins. Project-prefix namespaces
|
|
127
|
+
(`/acme:*`, `/hello:*`) are retired — wfl:init no longer generates them
|
|
128
|
+
(plugin 1.4.0 `getCommandsSubdir()` is fixed to `forge`).
|
|
129
|
+
|
|
130
|
+
- **Bootstrap Step 4c — Forge-root content vendored into `.forge/`.** `init/`
|
|
131
|
+
(wfl:init phase rulebooks), `.base-pack/` (Phase 3 materialization source —
|
|
132
|
+
substitute-placeholders probes it first), `meta/` (rebuild/migrate sources +
|
|
133
|
+
skill-recommendations), and `.claude-plugin/plugin.json` (version source).
|
|
134
|
+
The vendored `.forge/` now serves as a complete Forge root for the
|
|
135
|
+
`${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` fallback every command carries.
|
|
136
|
+
|
|
137
|
+
- **Bootstrap Step 4d — Claude Code assets vendored into `.claude/`.**
|
|
138
|
+
`agents/` (store-query-validator, tomoshibi) and `skills/` (4 skill dirs).
|
|
139
|
+
|
|
140
|
+
- **`forge.bundledVersion`** corrected to track the actually-bundled plugin
|
|
141
|
+
(1.4.0; had drifted at 1.2.21).
|
|
142
|
+
|
|
143
|
+
### Fixed
|
|
144
|
+
|
|
145
|
+
- **`composeUpdateKickoff` directive patch** handles both the plugin ≥ 1.4.0
|
|
146
|
+
`${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` form and the legacy
|
|
147
|
+
`${CLAUDE_PLUGIN_ROOT}` form when retargeting `update.md`.
|
|
148
|
+
|
|
149
|
+
## [1.0.29] — 2026-06-07
|
|
150
|
+
|
|
151
|
+
`4ge init claude` bootstrap repair, round 2 — hook runtime deps (PostToolUse MODULE_NOT_FOUND in 1.0.28).
|
|
152
|
+
|
|
153
|
+
### Fixed
|
|
154
|
+
|
|
155
|
+
- **`hooks/lib/` vendored (bootstrap Step 3b + build-payload 2e4).** Hook scripts
|
|
156
|
+
require `./lib/common.cjs` / `./lib/write-registry.js` at runtime; neither the
|
|
157
|
+
payload nor the bootstrap shipped `hooks/lib/`, so `validate-write`, `post-init`,
|
|
158
|
+
and `post-sprint` failed with MODULE_NOT_FOUND on every matching tool call
|
|
159
|
+
(fail-open, but noisy in the Claude Code UI).
|
|
160
|
+
|
|
161
|
+
- **`query-logger.cjs` added to `TOOLS_TO_COPY`.** The settings.json PostToolUse:Bash
|
|
162
|
+
hook points at `.forge/tools/query-logger.cjs`, but the tool was never bundled into
|
|
163
|
+
the payload — a hard exit-1 hook error on every Bash call in a bootstrapped project.
|
|
164
|
+
|
|
165
|
+
- **`tools/package.json` CJS scope marker vendored (FORGE-BUG-030 parity).** The
|
|
166
|
+
bootstrap copy filter (`*.cjs`/`*.js` only) dropped the `{"type":"commonjs"}`
|
|
167
|
+
marker build-payload writes into `tools/` — vendored `lib/*.js` would resolve as
|
|
168
|
+
ESM and crash in `"type":"module"` host projects.
|
|
169
|
+
|
|
170
|
+
## [1.0.28] — 2026-06-07
|
|
171
|
+
|
|
172
|
+
`4ge init claude` bootstrap repair — vendor hook scripts + schemas (first-field-test regressions in 1.0.27).
|
|
173
|
+
|
|
174
|
+
### Fixed
|
|
175
|
+
|
|
176
|
+
- **Bootstrap Step 3b — hook scripts vendored.** `bootstrapClaudeProject()` now copies
|
|
177
|
+
`payload/hooks/*.cjs` into `.forge/tools/hooks/` — the exact paths the Step 7 settings
|
|
178
|
+
wiring points at. In 1.0.27 the copy step was missing entirely, so every wired hook
|
|
179
|
+
(SessionStart, PreToolUse, PostToolUse, PermissionRequest) fired `node` against a
|
|
180
|
+
nonexistent file and failed with MODULE_NOT_FOUND on session start.
|
|
181
|
+
|
|
182
|
+
- **Bootstrap Step 3c — schemas vendored.** `payload/schemas/*.json` + `schemas/_defs/`
|
|
183
|
+
are now copied into `.forge/schemas/` (previously scaffolded empty), per the
|
|
184
|
+
cli-first-bootstrap ADR ("vendor tools → `.forge/tools/` + schemas").
|
|
185
|
+
|
|
186
|
+
- **`settings-merge.ts` — query-logger retarget.** `query-logger.cjs` is a tool, not a
|
|
187
|
+
hook script (plugin `hooks.json` points it at `tools/query-logger.cjs`); the settings
|
|
188
|
+
block now targets `$CLAUDE_PROJECT_DIR/.forge/tools/query-logger.cjs` instead of the
|
|
189
|
+
nonexistent `tools/hooks/query-logger.cjs`.
|
|
190
|
+
|
|
191
|
+
- Bootstrap manifest `steps` now records `vendor-hooks` and `vendor-schemas`.
|
|
192
|
+
|
|
193
|
+
## [1.0.27] — 2026-06-07
|
|
194
|
+
|
|
195
|
+
`4ge init claude` — settings hooks wiring, gitignore, preflight, hand-off UX (FORGE-S31-T03).
|
|
196
|
+
|
|
197
|
+
### Added
|
|
198
|
+
|
|
199
|
+
- **`settings-merge.ts`** — new `mergeForgeHooks()` + `buildForgeHooksBlock()` module with
|
|
200
|
+
merge-not-clobber semantics for wiring Forge hooks into project `.claude/settings.json`.
|
|
201
|
+
Handles 6 branches: absent file (create), empty object (add hooks key), existing without hooks
|
|
202
|
+
(merge in), unrelated hooks (merge Forge entries without overwriting), already-present (no-op),
|
|
203
|
+
malformed JSON (error, never overwrites). Fully idempotent: second run returns `"already-present"`.
|
|
204
|
+
|
|
205
|
+
- **Bootstrap Step 7** — `bootstrapClaudeProject()` now wires Forge hooks into project
|
|
206
|
+
`.claude/settings.json` via `mergeForgeHooks()`. All 8 hook entries (7 task-workflow hooks +
|
|
207
|
+
`forge-permissions`) are written with commands pointing at
|
|
208
|
+
`$CLAUDE_PROJECT_DIR/.forge/tools/hooks/<name>.cjs`. Outcome (`created`/`skipped`/`warnings`)
|
|
209
|
+
reported in `BootstrapResult` per existing conventions.
|
|
210
|
+
|
|
211
|
+
- **Bootstrap Step 8** — idempotent `.gitignore` append. Ported `updateGitignore()` from
|
|
212
|
+
`phase4-register.ts` as a pure standalone function (no `ctx.ui`). If `.gitignore` is present
|
|
213
|
+
and does not already contain a `.forge/store/events/` parent pattern, appends the standard
|
|
214
|
+
Forge gitignore block. Skips silently when absent or already covered.
|
|
215
|
+
|
|
216
|
+
- **Bootstrap Step 9** — preflight check for Claude Code availability (`runPreflight()`). Detects
|
|
217
|
+
`claude` binary reachability via `execFileSync("claude", ["--version"])`. Non-fatal: adds an
|
|
218
|
+
actionable warning to `result.warnings` if unavailable, but does not flip `result.ok`. Returns
|
|
219
|
+
`BootstrapPreflight { claudeAvailable, workflowToolChecked, warnings }` attached to `BootstrapResult`.
|
|
220
|
+
|
|
221
|
+
- **`BootstrapPreflight` type** — new sub-object on `BootstrapResult` with `claudeAvailable: boolean`,
|
|
222
|
+
`workflowToolChecked: boolean` (always `false` in T03 — no reliable offline check), and `warnings: string[]`.
|
|
223
|
+
Additive change — T02 tests remain green.
|
|
224
|
+
|
|
225
|
+
- **Hand-off UX** — `init.ts` now prints a structured multi-line message naming `/forge:init`,
|
|
226
|
+
explaining the one-time hooks-approval prompt, and listing all 7 task-workflow hooks by name
|
|
227
|
+
and event type. Prepends a warning line if Claude Code was not found on PATH.
|
|
228
|
+
|
|
229
|
+
- **Test suite** — 9-fixture `settings-merge.test.ts` covering all merge branches; 11 new assertions
|
|
230
|
+
in `bootstrap.test.ts` for Steps 7–9 and idempotency.
|
|
231
|
+
|
|
232
|
+
## [1.0.26] — 2026-06-07
|
|
233
|
+
|
|
234
|
+
CLI-first bootstrap: new `4ge init claude [dir]` bin subcommand (FORGE-S31-T02).
|
|
235
|
+
|
|
236
|
+
### Added
|
|
237
|
+
|
|
238
|
+
- **`forge init claude [dir]` subcommand** — new bin route that deterministically
|
|
239
|
+
bootstraps a Claude Code project from the bundled forge-payload in seconds.
|
|
240
|
+
Zero LLM tokens, zero network access, pure fs. Scaffolds `.forge/` skeleton
|
|
241
|
+
+ store dirs, vendors tools+lib into `.forge/tools/`, installs
|
|
242
|
+
`.claude/commands/forge/init.md` from payload, and installs all four
|
|
243
|
+
`.claude/workflows/wfl-*.js` drivers. Writes `.forge/.bootstrap-manifest.json`
|
|
244
|
+
with payload version and integrity hash. Idempotent repair: a second consecutive
|
|
245
|
+
run is a byte-identical no-op; partial bootstraps are repaired file-by-file.
|
|
246
|
+
`.forge/config.json` and `.forge/store/**` are never touched.
|
|
247
|
+
|
|
248
|
+
- **`src/extensions/forgecli/claude-bootstrap/bootstrap.ts`** — the pure-fs
|
|
249
|
+
bootstrap module (`bootstrapClaudeProject(opts)`) with clean/partial/complete
|
|
250
|
+
idempotency, fast-fail payload validation, and structured `BootstrapResult`
|
|
251
|
+
(created/skipped/warnings). Grep-negative: no fetch/network, no store writes,
|
|
252
|
+
no sendUserMessage, no ctx.ui.
|
|
253
|
+
|
|
254
|
+
- **Vitest tests** in
|
|
255
|
+
`test/extensions/forgecli/claude-bootstrap/bootstrap.test.ts` — 17 tests
|
|
256
|
+
covering clean / partial / complete (no-op) / non-writable / payload-validation
|
|
257
|
+
/ init.md install / wfl-drivers / grep-negative ACs branches. All integration-
|
|
258
|
+
style against the real function (no fs mocking).
|
|
259
|
+
|
|
260
|
+
- **argv.ts**: extended `ForgeAction` union with `"init"`; added `init claude [dir]`
|
|
261
|
+
parse branch before the fast-path subcommand block.
|
|
262
|
+
|
|
263
|
+
- **`src/bin/init.ts`** — `parseInitArgs()` + `runInit()` handler following the
|
|
264
|
+
`runDoctor` / `runUpdate` / `runConfig` structural convention.
|
|
265
|
+
|
|
266
|
+
- **forge.ts**: wired `forgeAction === "init"` dispatch branch; updated help text.
|
|
267
|
+
|
|
268
|
+
## [1.0.25] — 2026-06-06
|
|
269
|
+
|
|
270
|
+
Coordinated release matching forge plugin **v1.2.21**. Both changes come from
|
|
271
|
+
the first live firing of the deterministic commit phase (HELLO-BUG-002
|
|
272
|
+
transcript analysis).
|
|
273
|
+
|
|
274
|
+
### Added
|
|
275
|
+
|
|
276
|
+
- **`forge_commit` named tool** — the commit phase's primary invocation
|
|
277
|
+
surface on forgecli: typed TypeBox params (`entity`, `id`, `message`,
|
|
278
|
+
`trailer`, `also[]`, `dryRun`, `skipGate`; deliberately **no `force`** —
|
|
279
|
+
operator-gated, never reachable from a subagent), argv-array spawn of
|
|
280
|
+
`commit-task.cjs` (no shell-quoting of the commit message), terminal-status
|
|
281
|
+
phase-ownership guard, full hook/governor visibility. Injected into every
|
|
282
|
+
subagent via the standard `ForgeToolDefs` surface.
|
|
283
|
+
|
|
284
|
+
### Fixed
|
|
285
|
+
|
|
286
|
+
- **fix-bug pipeline now performs the orchestrator-owned post-triage status
|
|
287
|
+
transitions** (`reported → triaged → in-progress`, per `meta-fix-bug.md`
|
|
288
|
+
step 2). Previously unimplemented: every bug reached the commit phase still
|
|
289
|
+
`reported`, tripping `commit-task`'s status guard and sending the subagent
|
|
290
|
+
through an illegal-transition recovery loop. Idempotent on resume
|
|
291
|
+
(`postTriageTransitions` helper, unit-tested).
|
|
292
|
+
- Re-vendored plugin payload at **v1.2.21** (commit-task check-ignore
|
|
293
|
+
pre-filter + nothing-to-commit no-op success).
|
|
294
|
+
|
|
295
|
+
## [1.0.24] — 2026-06-06
|
|
296
|
+
|
|
297
|
+
### Added
|
|
298
|
+
|
|
299
|
+
- **`forgeRoot` self-heal** (testbench clone-portability). A git-tracked
|
|
300
|
+
`.forge/config.json` may carry a `paths.forgeRoot` stamped on another
|
|
301
|
+
machine (global npm prefix, Claude plugin cache). When the configured path
|
|
302
|
+
does not exist, `discoverForgeConfig` now falls back to this forgecli's
|
|
303
|
+
bundled payload instead of handing callers a dangling root that breaks
|
|
304
|
+
`forge_store` (and every Forge command) on a fresh clone. The original
|
|
305
|
+
path is preserved in `healedFrom` for diagnostics. Enables the
|
|
306
|
+
forge-testbench *clone → main → run* contract.
|
|
307
|
+
|
|
308
|
+
## [1.0.23] — 2026-06-06
|
|
309
|
+
|
|
310
|
+
Coordinated release matching forge plugin **v1.2.20** (deterministic commit
|
|
311
|
+
choreography — forge-engineering#40).
|
|
312
|
+
|
|
313
|
+
### Changed
|
|
314
|
+
|
|
315
|
+
- **Commit phase cost collapse.** `forge.bundledVersion` 1.2.18 → 1.2.20:
|
|
316
|
+
the bundled `commit_task.md` now routes the entire commit choreography
|
|
317
|
+
through the new `commit-task.cjs` (added to `TOOLS_TO_COPY`) — preflight
|
|
318
|
+
gate, status precondition, staging from `files_changed` provenance,
|
|
319
|
+
commit-boundary guard, `git commit`, terminal transition in ONE tool call.
|
|
320
|
+
The commit phase, previously the most expensive phase of the pipeline
|
|
321
|
+
(15–31% of run input tokens; 25–55 turns on glm-4.7), shrinks to
|
|
322
|
+
inspect-once → craft message → one tool call. The generated workflow also
|
|
323
|
+
shrank 5.2KB → 3.9KB of per-turn context.
|
|
324
|
+
- New allowlist pin: workflow-referenced tools (invisible to the TS
|
|
325
|
+
source-scan) are now asserted present in `TOOLS_TO_COPY` —
|
|
326
|
+
`commit-task.cjs` is the first entry.
|
|
327
|
+
|
|
328
|
+
## [1.0.22] — 2026-06-06
|
|
329
|
+
|
|
330
|
+
Coordinated release matching forge plugin **v1.2.18** (event-type vocabulary
|
|
331
|
+
spec owner — forge-engineering#39).
|
|
332
|
+
|
|
333
|
+
### Fixed
|
|
334
|
+
|
|
335
|
+
- **Bug-pipeline fail events are no longer dropped.** `BUG_TYPE_TOKENS`'
|
|
336
|
+
`fix-revision-requested` (approve fail) and `bug-commit-failed` (commit
|
|
337
|
+
fail) were rejected by the bundled event schema since their introduction —
|
|
338
|
+
every fix-bug approve-revision/commit-failure event and its token telemetry
|
|
339
|
+
was silently discarded (warn-and-continue). The re-vendored v1.2.18 payload
|
|
340
|
+
accepts them; `forge.bundledVersion` pin moved 1.0.10 → 1.2.18.
|
|
341
|
+
|
|
342
|
+
### Added
|
|
343
|
+
|
|
344
|
+
- **Sprint-grain lifecycle events.** `forge:run-sprint` now store-emits
|
|
345
|
+
`sprint-start` (once, before the task loop, fresh starts only) and
|
|
346
|
+
`task-dispatch` (before each task dispatch), completing the four-token
|
|
347
|
+
sprint vocabulary it already half-emitted (`sprint-complete`/
|
|
348
|
+
`sprint-halted`) — parity with the `wfl:run-sprint` JS driver.
|
|
349
|
+
- **Event-vocabulary contract test**
|
|
350
|
+
(`test/extensions/forgecli/event-vocabulary-contract.test.ts`): every
|
|
351
|
+
store-emitted `type` token in the orchestrators and skill-curation
|
|
352
|
+
emitters must be a member of the vendored schema enum. This is the
|
|
353
|
+
recurrence guard for the #39 drift class — an invented token now fails CI
|
|
354
|
+
instead of silently dropping events at runtime.
|
|
355
|
+
|
|
10
356
|
## [1.0.21] — 2026-06-05
|
|
11
357
|
|
|
12
358
|
The transcript-archive release: every orchestrator run is now permanently
|
package/README.md
CHANGED
|
@@ -18,6 +18,8 @@
|
|
|
18
18
|
|
|
19
19
|
forge-cli generates a project-specific engineering knowledge base, sprint workflows, agent personas, and an SDLC pipeline — then drives them from your terminal on the [pi-coding-agent] runtime. Model-agnostic. No editor lock-in.
|
|
20
20
|
|
|
21
|
+
> **Two ways to run Forge.** Drive it headless in your terminal on the pi runtime (this README), **or** scaffold Forge into a Claude Code project with `4ge init claude .` and run the `/forge:*` slash commands inside Claude Code — remove it with `4ge uninstall claude`. The `4ge init` path is the supported way to add Forge to Claude Code and **replaces the deprecated marketplace plugin install** ([why](https://github.com/Entelligentsia/forge#distribution)).
|
|
22
|
+
|
|
21
23
|
## Why
|
|
22
24
|
|
|
23
25
|
- **Structured SDLC, in any terminal.** Plan → implement → review → validate → commit chains, gated by your own personas and audience rules.
|
|
@@ -5,6 +5,287 @@ Format: newest first. Breaking changes are marked **△ Breaking**.
|
|
|
5
5
|
|
|
6
6
|
---
|
|
7
7
|
|
|
8
|
+
## [1.4.5] — 2026-06-09
|
|
9
|
+
|
|
10
|
+
Collate-workflow KB-link refresh is orchestrator-owned under forge-cli. The
|
|
11
|
+
generated collate workflow no longer instructs the collator subagent to invoke
|
|
12
|
+
the `forge:refresh-kb-links` Skill tool — forge-cli subagents run via the Pi
|
|
13
|
+
runtime, which has no Skill tool, so the instruction triggered a multi-call
|
|
14
|
+
bash-probe loop before falling back. The Claude Code TUI standalone path still
|
|
15
|
+
uses the Skill tool; under forge-cli the run-task orchestrator owns the KB
|
|
16
|
+
refresh after the writeback phase. Prose-only change to `collator_agent.md`
|
|
17
|
+
(base-pack) and `meta-collate.md`.
|
|
18
|
+
|
|
19
|
+
**Regenerate:** workflows:collator_agent
|
|
20
|
+
|
|
21
|
+
> Manual: run `/forge:update` (or `/forge:rebuild`) to regenerate the collate workflow.
|
|
22
|
+
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
## [1.4.4] — 2026-06-07
|
|
26
|
+
|
|
27
|
+
First full CLI-first field test (git.git, ~500 source files) — `/forge:init`
|
|
28
|
+
passed all phases; gap analysis surfaced three config/manifest defects.
|
|
29
|
+
|
|
30
|
+
### Fixed
|
|
31
|
+
|
|
32
|
+
- **`paths.commands` config drift** — `phase-1-collect.md` still carried a
|
|
33
|
+
prefix-derived instruction ("if prefix is `HELLO`, write
|
|
34
|
+
`.claude/commands/hello`") that survived the 1.4.0 namespace redesign; the
|
|
35
|
+
config-writer followed it and check-structure reported commands 0/14. The
|
|
36
|
+
path is ALWAYS `.claude/commands/forge`.
|
|
37
|
+
- **`paths.forgeRoot` written as an absolute npm-global payload path** — no
|
|
38
|
+
rulebook said what to write, so the register agent improvised. New explicit
|
|
39
|
+
`generate-tools.md` step: `paths.forgeRoot = ".forge"` (the vendored
|
|
40
|
+
`.forge/` IS the Forge root; absolute paths break on upgrades/nvm switches).
|
|
41
|
+
- **False "missing tools" gaps (49/59)** — `build-manifest.cjs` now excludes
|
|
42
|
+
the 10 plugin-development tools (`build-manifest`, `gen-integrity`,
|
|
43
|
+
`token-forensics`, …) from the `tools` namespace: the structure manifest
|
|
44
|
+
describes project instances, and dev tools are never vendored.
|
|
45
|
+
`structure-manifest.json` regenerated; instance expectation is now 49/49.
|
|
46
|
+
|
|
47
|
+
## [1.4.3] — 2026-06-07
|
|
48
|
+
|
|
49
|
+
### Fixed
|
|
50
|
+
|
|
51
|
+
- **`wfl-init.js` Phase 2 verify invocations matched the tool's real CLI**
|
|
52
|
+
([forge#112](https://github.com/Entelligentsia/forge/issues/112) follow-up).
|
|
53
|
+
Prompts said `verify-phase.cjs --phase 2` bare; the tool requires
|
|
54
|
+
`--phase 2 --kb-path <path>` and exits 2 without it. Both invocations now
|
|
55
|
+
pass `--kb-path "${kbFolder}"`. Contract gates added: every driver
|
|
56
|
+
verify-phase invocation must use a supported phase (1–3) and `--phase 2`
|
|
57
|
+
must carry `--kb-path`.
|
|
58
|
+
|
|
59
|
+
## [1.4.2] — 2026-06-07
|
|
60
|
+
|
|
61
|
+
### Fixed
|
|
62
|
+
|
|
63
|
+
- **`wfl-init.js` ran zero agents but reported fabricated success
|
|
64
|
+
([forge#112](https://github.com/Entelligentsia/forge/issues/112)).** Four
|
|
65
|
+
Workflow-API misuses: `phase(title, callback)` callbacks (containing every
|
|
66
|
+
phase body) were silently discarded by the harness; `parallel()` received
|
|
67
|
+
in-flight promises instead of thunks; `agent()` got the model tier as first
|
|
68
|
+
arg instead of `opts.model`; structured results lacked `opts.schema` so
|
|
69
|
+
`.ok` reads were undefined. `/forge:init` "completed" in ~3 ms with 0 agents
|
|
70
|
+
and hardcoded `ok: true`. Phase bodies now run inline, fan-outs use thunks,
|
|
71
|
+
every agent call is `agent(prompt, { model, label, phase, schema })`, and
|
|
72
|
+
the final report reflects real phase results (halts return `ok: false` with
|
|
73
|
+
the failure reason). Rulebook reads use vendored `.forge/init/...` paths
|
|
74
|
+
with a direct-analysis fallback for absent prompt files. Fix ported from
|
|
75
|
+
the field-validated patch authored against the live testbench run.
|
|
76
|
+
|
|
77
|
+
### Added
|
|
78
|
+
|
|
79
|
+
- **`wfl-drivers-parse.test.cjs` API-contract gates** — all drivers checked
|
|
80
|
+
for phase-callback misuse, promise-instead-of-thunk `parallel()` calls,
|
|
81
|
+
reversed `agent()` args, and dead `init/**.md` rulebook references.
|
|
82
|
+
|
|
83
|
+
## [1.4.1] — 2026-06-07
|
|
84
|
+
|
|
85
|
+
### Fixed
|
|
86
|
+
|
|
87
|
+
- **`wfl-init.js` failed to launch — "SyntaxError: Unexpected keyword 'export'".**
|
|
88
|
+
The driver shipped wrapped in `export default async function wflInit(args)`,
|
|
89
|
+
but the Workflow harness permits exactly one export (the leading `meta`
|
|
90
|
+
literal) and evaluates the remainder as an async function body. The body now
|
|
91
|
+
runs at top level reading the `args` global, matching the other three
|
|
92
|
+
drivers. Every `/forge:init` → `workflow('wfl:init')` dispatch was dead on
|
|
93
|
+
arrival before this fix.
|
|
94
|
+
|
|
95
|
+
### Added
|
|
96
|
+
|
|
97
|
+
- **`wfl-drivers-parse.test.cjs`** — regression gate that parses all base-pack
|
|
98
|
+
`wfl-*.js` drivers exactly the way the Workflow harness does (single meta
|
|
99
|
+
export, body as async function body with workflow globals in scope).
|
|
100
|
+
|
|
101
|
+
## [1.4.0] — 2026-06-07
|
|
102
|
+
|
|
103
|
+
### Changed — △ Breaking
|
|
104
|
+
|
|
105
|
+
- **Fixed `/forge:*` command namespace (CLI-first redesign).** Project-prefix
|
|
106
|
+
command namespaces (`/acme:*`, `/hello:*`) are retired — every project gets
|
|
107
|
+
the same `/forge:*` surface, with full parity between Claude Code and the
|
|
108
|
+
pure CLI (`4ge`):
|
|
109
|
+
- `tools/lib/paths.cjs` — `getCommandsSubdir()` returns `'forge'`
|
|
110
|
+
unconditionally (prefix arg is vestigial, kept for caller compat).
|
|
111
|
+
- `init/base-pack/commands/*.md` — `/{{PREFIX}}:` → literal `/forge:`
|
|
112
|
+
(26 occurrences, 17 files). Command templates are now fully static.
|
|
113
|
+
- `tools/substitute-placeholders.cjs` — materializes commands to
|
|
114
|
+
`.claude/commands/forge/` regardless of project prefix.
|
|
115
|
+
- Rulebooks updated: `generate-commands.md`, `phase-3-materialize.md`,
|
|
116
|
+
`phase-1-collect.md` (config `paths.commands` example), `meta-migrate.md`,
|
|
117
|
+
`migrate_structural.md`, `commands/add-task.md` next-steps text.
|
|
118
|
+
- The prefix-derived namespace existed to avoid collisions with the Forge
|
|
119
|
+
*plugin's* own `/forge:*` commands — moot now that the plugin mechanism
|
|
120
|
+
is retired in favour of project-vendored commands.
|
|
121
|
+
- **Migration:** existing projects keep working with their old
|
|
122
|
+
`.claude/commands/<prefix>/` files; re-materialize to get
|
|
123
|
+
`.claude/commands/forge/`, then delete the prefix directory.
|
|
124
|
+
|
|
125
|
+
- **`FORGE_ROOT` vendored fallback in every command.** All 33 resolution
|
|
126
|
+
lines across `commands/*.md` and `init/base-pack/commands/*.md` change from
|
|
127
|
+
`${CLAUDE_PLUGIN_ROOT}` to `${CLAUDE_PLUGIN_ROOT:-$(pwd)/.forge}` — in a
|
|
128
|
+
plugin-installed session the plugin root still wins; in a plugin-less
|
|
129
|
+
project bootstrapped by `4ge init claude` the vendored `.forge/` (tools,
|
|
130
|
+
schemas, hooks, init, meta) serves as the Forge root.
|
|
131
|
+
|
|
132
|
+
## [1.3.0] — 2026-06-07
|
|
133
|
+
|
|
134
|
+
### Added
|
|
135
|
+
|
|
136
|
+
- **`init/base-pack/commands/init.md`** — new project-local command wrapper
|
|
137
|
+
installed by `4ge init claude .` into `.claude/commands/forge/`. Contains
|
|
138
|
+
the full hoisted-prompt flow (KB folder prompt, CLAUDE.md offer, timestamp
|
|
139
|
+
minting), dispatches `workflow('wfl:init', args)`, handles the
|
|
140
|
+
Workflow-tool-missing error explicitly, presents the marketplace-skills offer
|
|
141
|
+
from `result.skillMatches` post-workflow, invokes `forge:refresh-kb-links`
|
|
142
|
+
via the Skill tool, and emits the final report (KB doc count, workflow count,
|
|
143
|
+
command count, accepted/skipped skills). Uses vendored `.forge/tools/` paths
|
|
144
|
+
only — no `$FORGE_ROOT` / `${CLAUDE_PLUGIN_ROOT}` references.
|
|
145
|
+
|
|
146
|
+
### Changed
|
|
147
|
+
|
|
148
|
+
- **`commands/init.md` (plugin-side)** — Execute section rewritten to dispatch
|
|
149
|
+
`workflow('wfl:init', args)` with hoisted interactive prompts (KB folder
|
|
150
|
+
prompt, CLAUDE.md offer, timestamp minting). Replaces the previous
|
|
151
|
+
`Read $FORGE_ROOT/init/sdlc-init.md` instruction. Includes the explicit
|
|
152
|
+
Workflow-tool-missing error halt (Iron Law 5 — no silent degradation or
|
|
153
|
+
fallback to `sdlc-init.md`).
|
|
154
|
+
|
|
155
|
+
- **`init/phases/phase-1-collect.md`** — Pre-flight Knowledge Base Folder block
|
|
156
|
+
and Step 5 (Marketplace Skills) annotated as orchestrator-owned when the
|
|
157
|
+
orchestrator pre-supplies the values. Annotations are informational — no step
|
|
158
|
+
renames or renumbers (forge-cli `run-phases.ts` glob freeze maintained).
|
|
159
|
+
|
|
160
|
+
- **`init/phases/phase-4-register.md`** — Step 11 (Tomoshibi/refresh-kb-links)
|
|
161
|
+
and Step 13 (CLAUDE.md prompt) annotated as orchestrator-owned. Same
|
|
162
|
+
semantics-preserving annotation policy.
|
|
163
|
+
|
|
164
|
+
- **`init/sdlc-init.md`** — Body reduced to a spec-pointer paragraph: points
|
|
165
|
+
to `wfl-init.js` (orchestration), `commands/init.md` (dispatch surface), and
|
|
166
|
+
`init/phases/` (canonical per-phase contracts). Phase/verify table preserved
|
|
167
|
+
for human readers. File not deleted.
|
|
168
|
+
|
|
169
|
+
---
|
|
170
|
+
|
|
171
|
+
## [1.2.21] — 2026-06-06
|
|
172
|
+
|
|
173
|
+
### Fixed
|
|
174
|
+
|
|
175
|
+
- **`commit-task.cjs` hardened from its first live firing** (HELLO-BUG-002
|
|
176
|
+
transcript analysis, forge-engineering#40):
|
|
177
|
+
- Gitignored staging paths are pre-filtered (`git check-ignore`) and
|
|
178
|
+
warn-skipped — one ignored path no longer aborts the all-or-nothing
|
|
179
|
+
`git add` (the agent had retried the identical failing command).
|
|
180
|
+
- A clean staging set is now a **no-op success**: the tool still seals the
|
|
181
|
+
record's terminal status and returns
|
|
182
|
+
`{ok:true, committed:false, reason:"nothing-to-commit"}` — a bug whose
|
|
183
|
+
fix is already at HEAD ends `fixed` without the agent improvising manual
|
|
184
|
+
transitions. Result JSON gains an explicit `committed` flag.
|
|
185
|
+
|
|
186
|
+
### Changed
|
|
187
|
+
|
|
188
|
+
- **`meta-commit.md`: `forge_commit` named tool is the primary surface on
|
|
189
|
+
forgecli** — typed arguments, no shell-quoting of the commit message, full
|
|
190
|
+
hook/governor visibility. The `node .forge/tools/commit-task.cjs` bash form
|
|
191
|
+
remains the Claude Code fallback. The no-op outcome is documented as
|
|
192
|
+
success ("do not 'fix' a no-op by staging things yourself").
|
|
193
|
+
|
|
194
|
+
---
|
|
195
|
+
|
|
196
|
+
## [1.2.20] — 2026-06-06
|
|
197
|
+
|
|
198
|
+
### Added
|
|
199
|
+
|
|
200
|
+
- **`tools/commit-task.cjs` — deterministic commit choreography**
|
|
201
|
+
(forge-engineering#40). The commit phase was the most expensive phase of
|
|
202
|
+
the pipeline (15–31% of run input tokens across nine instrumented runs)
|
|
203
|
+
because an LLM re-derived deterministic choreography turn-by-turn. The new
|
|
204
|
+
tool owns the whole sequence in one call: preflight gate → status
|
|
205
|
+
precondition (task `approved` / bug `in-progress`) → staging-set derivation
|
|
206
|
+
(record artifact dir + implementation `files_changed` provenance +
|
|
207
|
+
validated `--also` extras) → commit-boundary guard (aborts loudly when the
|
|
208
|
+
index already has staged changes) → `git commit` → terminal transition
|
|
209
|
+
(task → `committed`, bug → `fixed`). `--dry-run` honored, argv-array
|
|
210
|
+
spawns only, `--force` operator-gated transitively via store-cli's
|
|
211
|
+
`FORGE_ALLOW_FORCE`. 11 tests.
|
|
212
|
+
- **Implementation file provenance.** `PHASE_SUMMARY_SCHEMA` gains optional
|
|
213
|
+
`files_changed` (≤100 repo-relative paths); `meta-implement.md` instructs
|
|
214
|
+
recording every created/modified/deleted source path in
|
|
215
|
+
`IMPLEMENTATION-SUMMARY.json` — the commit phase no longer re-derives the
|
|
216
|
+
change surface from git.
|
|
217
|
+
|
|
218
|
+
### Fixed
|
|
219
|
+
|
|
220
|
+
- **`meta-commit.md` no longer commands an impossible store write.** The old
|
|
221
|
+
step 5 said *"Write the SUMMARY and return"* — but `commit` is not in
|
|
222
|
+
`VALID_SUMMARY_PHASES`, so obedient agents hunted for a format that doesn't
|
|
223
|
+
exist and then burned the 3-retry write-verification loop on a write that
|
|
224
|
+
can never validate. The workflow now states the no-summary contract
|
|
225
|
+
explicitly.
|
|
226
|
+
- **Commit-phase flail loops closed at the prompt layer**: batched inspection
|
|
227
|
+
(`git diff --stat` once, one combined diff — never per-file), staging policy
|
|
228
|
+
owned by the tool (manual `git add`/`git commit`/`git reset` forbidden), and
|
|
229
|
+
the premature-commit/reset/redo loop explicitly banned.
|
|
230
|
+
|
|
231
|
+
---
|
|
232
|
+
|
|
233
|
+
## [1.2.19] — 2026-06-06
|
|
234
|
+
|
|
235
|
+
### Fixed
|
|
236
|
+
|
|
237
|
+
- **JS workflow drivers no longer let subagents guess event `type` tokens**
|
|
238
|
+
(forge-engineering#39 Phase 3). `wfl-run-task.js` / `wfl-fix-bug.js` now
|
|
239
|
+
carry `TASK_TYPE_TOKENS` / `BUG_TYPE_TOKENS` maps (verbatim ports of
|
|
240
|
+
`_fragments/event-vocabulary.md`) and inject explicit per-phase guidance
|
|
241
|
+
into the emit instructions: start events MUST NOT carry `type`, complete
|
|
242
|
+
events set the exact pass/fail token, and copying the action value
|
|
243
|
+
(`start`/`complete`) into `type` is explicitly forbidden — that guess-leak
|
|
244
|
+
produced the schema-rejected `type:"start"`/`type:"complete"` store
|
|
245
|
+
residue observed in `events/bugs/`.
|
|
246
|
+
- **`wfl-run-task.js` `emitSkip()` skip events are no longer silently
|
|
247
|
+
rejected** — the event carried `iteration: 0` against the schema's
|
|
248
|
+
`minimum: 1`; every pre-task SKIP_STATUS event was dropped. Now `1`.
|
|
249
|
+
|
|
250
|
+
---
|
|
251
|
+
|
|
252
|
+
## [1.2.18] — 2026-06-06
|
|
253
|
+
|
|
254
|
+
### Added
|
|
255
|
+
|
|
256
|
+
- **Event-type vocabulary now has a spec owner** (forge-engineering#39). New
|
|
257
|
+
canonical fragment `_fragments/event-vocabulary.md` defines the phase→`type`
|
|
258
|
+
token tables for task, bug, and sprint events (pass/fail tokens per phase,
|
|
259
|
+
conditional field requirements, kebab-case convention). The schema enum in
|
|
260
|
+
`event.schema.json` mirrors the fragment; emitters never invent tokens.
|
|
261
|
+
`meta-fix-bug.md`, `meta-orchestrate.md`, `event-emission-schema.md`, and
|
|
262
|
+
the store-schema docs reference it.
|
|
263
|
+
|
|
264
|
+
### Fixed
|
|
265
|
+
|
|
266
|
+
- **Bug-pipeline fail events are no longer silently dropped.**
|
|
267
|
+
`event.schema.json` now accepts `fix-revision-requested` (approve fail) and
|
|
268
|
+
`bug-commit-failed` (commit fail) — the tokens forge-cli's fix-bug
|
|
269
|
+
orchestrator has emitted since 2026-05-15 but the enum rejected, discarding
|
|
270
|
+
the events and their token telemetry (observed live on testbench
|
|
271
|
+
CART-BUG-001).
|
|
272
|
+
- **`bug-skipped` pre-loop skip event is now schema-valid.** New enum token +
|
|
273
|
+
conditional (requires `bugId`, no phase/iteration). The base-pack
|
|
274
|
+
`wfl-fix-bug.js` skip emit was triple-broken: underscore `bug_skipped`
|
|
275
|
+
token (not in enum), missing required `eventId`/`model`/`provider`, and an
|
|
276
|
+
undeclared `reason` key (`additionalProperties: false`). It now emits a
|
|
277
|
+
valid event with the skip reason in `notes` and `model`/`provider` `"n/a"`.
|
|
278
|
+
`meta-fix-bug.md` step 1 references the canonical shape.
|
|
279
|
+
|
|
280
|
+
### Removed
|
|
281
|
+
|
|
282
|
+
- **`bug-fixed` enum token retired** — defined since the bug-pipeline schema
|
|
283
|
+
landed, emitted by no surface, zero occurrences in any store. The
|
|
284
|
+
vocabulary fragment's invariant (every enum token has a named emitter)
|
|
285
|
+
forbids dead tokens.
|
|
286
|
+
|
|
287
|
+
---
|
|
288
|
+
|
|
8
289
|
## [1.2.17] — 2026-06-04
|
|
9
290
|
|
|
10
291
|
### Fixed
|
package/dist/bin/argv.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/** Parsed result when `--version`, `--help`, `doctor`, `update`, `config`, or a fast-path subcommand is requested. */
|
|
2
|
-
export type ForgeAction = "version" | "help" | "doctor" | "update" | "config" | "subcommand" | null;
|
|
1
|
+
/** Parsed result when `--version`, `--help`, `doctor`, `update`, `config`, `init`, or a fast-path subcommand is requested. */
|
|
2
|
+
export type ForgeAction = "version" | "help" | "doctor" | "update" | "config" | "init" | "uninstall" | "subcommand" | null;
|
|
3
3
|
/**
|
|
4
4
|
* Whitelist of bare subcommands that bypass pi and exec a bundled cjs tool
|
|
5
5
|
* directly. Each entry maps the user-typed subcommand to the cjs filename
|