forge-workflow 0.1.0-beta.3 → 0.1.0-beta.5
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/AGENTS.md +14 -7
- package/CHANGELOG.md +43 -1
- package/README.md +6 -2
- package/bin/forge-cmd.js +21 -1
- package/bin/forge.js +16 -369
- package/docs/INDEX.md +1 -1
- package/docs/guides/BEADS_GITHUB_SYNC.md +2 -31
- package/docs/guides/MIGRATION.md +4 -4
- package/docs/guides/SETUP.md +16 -16
- package/docs/reference/COMMANDS.md +9 -4
- package/docs/reference/INSIGHTS_RECAP.md +9 -20
- package/docs/reference/RELEASE.md +5 -3
- package/docs/reference/TOOLCHAIN.md +8 -0
- package/docs/reference/protected-state-surfaces.md +4 -4
- package/docs/reference/shepherd.md +117 -17
- package/lefthook.yml +12 -0
- package/lib/activation/ensure-forge-home.js +33 -15
- package/lib/adapters/greptile-review-adapter.js +1 -1
- package/lib/adapters/pr-state-adapter.js +397 -100
- package/lib/agents-config.js +5 -0
- package/lib/audit-evidence.js +71 -110
- package/lib/capped-jsonl-log.js +236 -0
- package/lib/commands/_issue.js +31 -46
- package/lib/commands/_manifest.js +1 -1
- package/lib/commands/_registry.js +2 -2
- package/lib/commands/_resolve-command-opts.js +36 -29
- package/lib/commands/claim.js +2 -4
- package/lib/commands/clean.js +196 -32
- package/lib/commands/dev.js +4 -33
- package/lib/commands/hooks.js +358 -13
- package/lib/commands/insights.js +8 -3
- package/lib/commands/merge.js +600 -40
- package/lib/commands/plan.js +23 -115
- package/lib/commands/pr.js +1 -1
- package/lib/commands/preflight.js +11 -2
- package/lib/commands/prime.js +23 -3
- package/lib/commands/push.js +41 -51
- package/lib/commands/recall.js +60 -16
- package/lib/commands/recap.js +6 -1
- package/lib/commands/release.js +18 -4
- package/lib/commands/serve.js +5 -2
- package/lib/commands/setup.js +191 -95
- package/lib/commands/shepherd.js +49 -4
- package/lib/commands/ship.js +22 -23
- package/lib/commands/skill.js +383 -0
- package/lib/commands/status.js +54 -33
- package/lib/commands/test.js +56 -34
- package/lib/commands/worktree.js +247 -43
- package/lib/core/runtime-graph.js +89 -15
- package/lib/doc-assertions.js +297 -0
- package/lib/existing-tdd-gate.js +253 -0
- package/lib/forge-context.js +1 -4
- package/lib/forge-issues.js +64 -491
- package/lib/git-defaults.js +56 -0
- package/lib/harness-capability-matrix.js +5 -5
- package/lib/hook-renderer.js +147 -16
- package/lib/insights.js +96 -80
- package/lib/issue-backend.js +42 -3
- package/lib/kernel/backing-issue.js +14 -2
- package/lib/kernel/broker.js +44 -0
- package/lib/kernel/cli-broker-factory.js +12 -1
- package/lib/kernel/close-on-merge.js +154 -0
- package/lib/kernel/fs-class.js +42 -25
- package/lib/kernel/migrations.js +30 -2
- package/lib/kernel/schema.js +35 -0
- package/lib/kernel/sqlite-driver.js +292 -18
- package/lib/lefthook-wiring.js +21 -1
- package/lib/memory/router.js +16 -1
- package/lib/memory-digest.js +47 -15
- package/lib/memory-recall-events.js +145 -0
- package/lib/memory-recall.js +212 -0
- package/lib/merge-rules.js +8 -4
- package/lib/npm-publish-workflow.js +272 -0
- package/lib/orientation.js +371 -49
- package/lib/plugin-catalog.js +14 -4
- package/lib/pr-bundle.js +9 -6
- package/lib/pr-monitor/journal.js +18 -2
- package/lib/pr-monitor/reconcile-executor.js +842 -0
- package/lib/pr-monitor/reconcile-tick.js +138 -0
- package/lib/pr-monitor/reconcile.js +0 -0
- package/lib/pr-monitor/render-summary.js +196 -0
- package/lib/pr-monitor/shepherd-lease.js +252 -0
- package/lib/pr-monitor/watch-lifecycle.js +14 -2
- package/lib/pr-pull.js +98 -24
- package/lib/pr-shepherd.js +34 -8
- package/lib/preflight/gates.js +65 -18
- package/lib/preflight/runner.js +5 -0
- package/lib/project-memory.js +40 -0
- package/lib/protected-state-authority.js +305 -0
- package/lib/protected-state-surfaces.js +64 -44
- package/lib/release-readiness.js +51 -4
- package/lib/rules-sync.js +4 -0
- package/lib/runtime-health.js +15 -46
- package/lib/shell-utils.js +1 -1
- package/lib/skill-eval.js +750 -0
- package/lib/skills-sync.js +6 -3
- package/lib/smart-merge.js +28 -4
- package/lib/status/identity.js +46 -0
- package/lib/status/presenter.js +0 -35
- package/lib/status/snapshot.js +11 -16
- package/lib/symlink-utils.js +74 -26
- package/lib/upgrade-safety.js +47 -9
- package/lib/using-forge.js +328 -0
- package/lib/workflow/enforce-stage.js +5 -5
- package/lib/workflow/state-manager.js +23 -23
- package/package.json +6 -7
- package/rules/using-forge.md +24 -0
- package/scripts/doc-asserting-tests.js +158 -0
- package/scripts/forge-team/index.sh +0 -5
- package/scripts/forge-team/tests/dispatcher.test.sh +1 -1
- package/scripts/forge-team/tests/workflow-integration.test.sh +0 -1
- package/scripts/lib/behavioral-eval-runner.js +310 -0
- package/scripts/lib/behavioral-eval-runtime.js +456 -0
- package/scripts/lib/eval-evidence.js +328 -0
- package/scripts/lib/eval-runner.js +81 -41
- package/scripts/lib/immutable-eval-corpus.js +309 -0
- package/scripts/lib/promotion-evidence-loader.js +94 -0
- package/scripts/lib/promotion-scorecard.js +314 -0
- package/scripts/npm-release-receipt.js +134 -0
- package/scripts/process-tree.js +761 -0
- package/scripts/protected-state-check.js +47 -22
- package/scripts/run-command-eval.js +29 -1
- package/scripts/sync-d20-audit.js +172 -0
- package/scripts/test-full-suite.js +249 -37
- package/scripts/test.js +184 -44
- package/skills/claim-safety/SKILL.md +4 -0
- package/skills/claim-safety/evals/scorecard.json +41 -0
- package/skills/coverage.json +83 -0
- package/skills/dev/SKILL.md +4 -0
- package/skills/dev/evals/scorecard.json +41 -0
- package/skills/gates/SKILL.md +80 -0
- package/skills/gates/evals/evals.json +38 -0
- package/skills/gates/evals/scorecard.json +41 -0
- package/skills/hermes-forge/SKILL.md +1 -0
- package/skills/hermes-forge/evals/scorecard.json +41 -0
- package/skills/issue-basics/SKILL.md +1 -0
- package/skills/issue-basics/evals/scorecard.json +41 -0
- package/skills/kernel/SKILL.md +38 -0
- package/skills/kernel/evals/scorecard.json +41 -0
- package/skills/memory/SKILL.md +16 -1
- package/skills/memory/evals/scorecard.json +41 -0
- package/skills/parallel-deep-research/SKILL.md +1 -0
- package/skills/parallel-deep-research/evals/scorecard.json +41 -0
- package/skills/plan/SKILL.md +6 -0
- package/skills/plan/evals/scorecard.json +41 -0
- package/skills/portability/SKILL.md +47 -0
- package/skills/portability/evals/evals.json +34 -0
- package/skills/portability/evals/scorecard.json +41 -0
- package/skills/research/SKILL.md +1 -0
- package/skills/research/evals/scorecard.json +41 -0
- package/skills/review/SKILL.md +10 -11
- package/skills/review/evals/scorecard.json +41 -0
- package/skills/rollback/SKILL.md +5 -11
- package/skills/rollback/evals/scorecard.json +41 -0
- package/skills/setup/SKILL.md +91 -0
- package/skills/setup/evals/evals.json +42 -0
- package/skills/setup/evals/scorecard.json +41 -0
- package/skills/shepherd/SKILL.md +84 -38
- package/skills/shepherd/evals/evals.json +21 -9
- package/skills/shepherd/evals/scorecard.json +41 -0
- package/skills/ship/SKILL.md +10 -12
- package/skills/ship/evals/scorecard.json +41 -0
- package/skills/smith/SKILL.md +8 -0
- package/skills/smith/evals/scorecard.json +41 -0
- package/skills/sonarcloud/SKILL.md +1 -0
- package/skills/sonarcloud/evals/scorecard.json +41 -0
- package/skills/sonarcloud-analysis/SKILL.md +1 -0
- package/skills/sonarcloud-analysis/evals/scorecard.json +41 -0
- package/skills/status/SKILL.md +3 -0
- package/skills/status/evals/scorecard.json +41 -0
- package/skills/triage-ready/SKILL.md +2 -0
- package/skills/triage-ready/evals/scorecard.json +41 -0
- package/skills/using-forge/SKILL.md +104 -0
- package/skills/using-forge/evals/scorecard.json +41 -0
- package/skills/validate/SKILL.md +4 -0
- package/skills/validate/evals/scorecard.json +41 -0
- package/skills/verify/SKILL.md +4 -0
- package/skills/verify/evals/scorecard.json +41 -0
- package/skills/worktree/SKILL.md +92 -0
- package/skills/worktree/evals/evals.json +38 -0
- package/skills/worktree/evals/scorecard.json +41 -0
- package/lib/adapters/beads-issue-adapter.js +0 -127
- package/lib/beads-nudge.js +0 -91
- package/lib/beads-setup.js +0 -538
- package/lib/beads-sync-scaffold.js +0 -189
- package/lib/commands/board.js +0 -64
- package/lib/pat-setup.js +0 -207
- package/lib/pr-monitor/render-sticky.js +0 -192
- package/lib/pr-monitor/upsert-sticky.js +0 -169
- package/lib/status/beads-snapshot.js +0 -145
- package/scripts/beads-context.sh +0 -577
- package/scripts/beads-migrate-to-dolt.sh +0 -7
- package/scripts/beads-upgrade-smoke.sh +0 -284
- package/scripts/forge-team/lib/dashboard.sh +0 -316
- package/scripts/forge-team/tests/dashboard.test.sh +0 -155
- package/scripts/lib/beads-migrate-to-dolt.mjs +0 -503
package/AGENTS.md
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
<!-- FORGE:START -->
|
|
1
2
|
# Project Workflow Instructions
|
|
2
3
|
|
|
3
4
|
## Default TDD-First Workflow Template
|
|
4
5
|
|
|
5
6
|
This project ships a **default TDD-first workflow template** with 6 workflow stages plus a composable **research** skill (a phase of `/plan` and usable standalone). In v3, these stages are one configurable composition over Forge runtime building blocks, not a product-wide mandatory ladder. Commands may be invoked as full stages or as smaller skill fragments when the active plan permits it. Pre-merge is an embedded gate in `/ship` and `/review` (not a numbered stage); `/status` and `/shepherd` are utilities (not stages).
|
|
6
7
|
|
|
8
|
+
## Skill Dispatch (auto-trigger)
|
|
9
|
+
|
|
10
|
+
Before ANY response — including clarifying questions or exploring the codebase — if there is even a 1% chance a Forge skill applies, invoke it, then announce `Using [skill] to [purpose]`. Invoke the `using-forge` dispatch skill (auto-discovered from your agent's own skills — Forge setup installs it into each harness's skills dir; it carries the 1%-rule and routing table), or run `forge skill for "<situation>"` for the deterministic best-fit skill. This is agent-agnostic — never branch on harness identity.
|
|
11
|
+
|
|
7
12
|
| Stage | Command | Purpose | Required For |
|
|
8
13
|
|-------|-------------|-----------------------------------------------------------|--------------|
|
|
9
14
|
| 1 | `/plan` | Design intent → research → branch + worktree + task list | Critical, Standard, Refactor |
|
|
@@ -17,7 +22,7 @@ This project ships a **default TDD-first workflow template** with 6 workflow sta
|
|
|
17
22
|
|
|
18
23
|
**Utility**: `/status` — Context check before starting work (not a numbered stage)
|
|
19
24
|
|
|
20
|
-
**Utility**: `/shepherd <pr>` —
|
|
25
|
+
**Utility**: `/shepherd <pr>` — Autonomous PR ownership. `forge shepherd daemon` is a singleton reconcile daemon that owns **all** open PRs for the repo: it converges CI check state into kernel verdicts, re-runs flaky required checks (Tier-A), reaps orphan watchers, and self-retires when no PRs remain — so agents read verdicts (`forge shepherd <pr> --pull --json`, `forge shepherd events`) instead of hand-polling. `forge shepherd <pr>` is the one-shot bounded pass for a single PR. It is a utility, **not** a workflow stage. It **never merges** (the human merges in the GitHub UI) and **never resolves review threads** (that stays with `/review`). `--auto-rebase` is opt-in and default OFF; kill-switches: `FORGE_SHEPHERD_DISABLE`, `forge gate disable rail.auto_shepherd`. **Startup/containment**: Forge automatically wakes the repo-singleton daemon after a supported session start, every successful push, and every successful non-dry-run ship; duplicate starts remain clean no-ops under the O_EXCL lease. Injected CI/test and kill-switch guards return before lock or process work. Forge prefers the session-reaped harness background shell and otherwise detaches from the stable common repository root, never a disposable worktree cwd. See [docs/reference/shepherd.md](docs/reference/shepherd.md).
|
|
21
26
|
|
|
22
27
|
## Automatic Change Classification
|
|
23
28
|
|
|
@@ -115,9 +120,7 @@ Task 2: Validation logic
|
|
|
115
120
|
|
|
116
121
|
## State Management (Single Source of Truth)
|
|
117
122
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
**Current implementation**: The Forge Kernel is the default issue-state authority; issue commands read and write the kernel store unless Beads is explicitly selected (`--issue-backend beads`, `FORGE_ISSUE_BACKEND=beads`, or `issueBackend: beads` in `.forge/config.yaml`), where it serves as an import/export/projection compatibility layer. **Direction (D44)**: continue consolidating issue/workflow/run authority in the Kernel with Beads remaining a compatibility projection. New authority work must follow [docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md](docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md) and [docs/reference/FORGE_KERNEL_STORAGE_MODEL.md](docs/reference/FORGE_KERNEL_STORAGE_MODEL.md).
|
|
123
|
+
**Current implementation**: The Forge Kernel is the sole issue-state authority — every issue command reads and writes the kernel store, with no backend to select. Beads exists only as an inbound migration path: `forge migrate --from beads` imports an existing Beads store into the kernel once, and no Forge command depends on Beads at runtime. **Direction (D45)**: the Kernel owns issue/workflow/run authority outright; Beads is retired as a live feature. New authority work must follow [docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md](docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md) and [docs/reference/FORGE_KERNEL_STORAGE_MODEL.md](docs/reference/FORGE_KERNEL_STORAGE_MODEL.md).
|
|
121
124
|
|
|
122
125
|
```json
|
|
123
126
|
{
|
|
@@ -151,6 +154,7 @@ This project uses the **Professional Git Workflow** with Lefthook for automated
|
|
|
151
154
|
- Offers guided recovery (add tests now, skip with tech debt tracking, emergency override)
|
|
152
155
|
- No AI decision required - automatic validation
|
|
153
156
|
- **Strong default, not a hard floor.** The TDD gate is the default-ON `rail.tdd_intent` rail; turn it off with `forge gate disable rail.tdd_intent` (the `minimal` adoption profile ships it off). The installed hooks read the resolved config at run time, so a disabled rail makes them genuinely inert — enforcement honestly follows your config.
|
|
157
|
+
- **Defers to a gate you already have.** If your repo already runs a TDD / source-test coupling check on pre-commit (any runner: lefthook, husky, the `pre-commit` framework, a raw `.git/hooks/pre-commit`), `forge setup` detects it, does **not** install a second gate on the same commit, turns `rail.tdd_intent` off, and says so. Prefer Forge's gate? Remove yours and run `forge gate enable rail.tdd_intent` — an explicit setting is never overwritten by a later setup.
|
|
154
158
|
|
|
155
159
|
**Pre-push hook validates tests:**
|
|
156
160
|
- Branch protection: blocks direct push to `main`/`master`
|
|
@@ -169,7 +173,7 @@ This project uses the **Professional Git Workflow** with Lefthook for automated
|
|
|
169
173
|
|
|
170
174
|
```bash
|
|
171
175
|
forge push # Branch protection + lint + tests, then push
|
|
172
|
-
forge push --quick # Review-cycle: lint-only push
|
|
176
|
+
forge push --quick # Review-cycle: lint-only end to end (the pre-push hook's test job is skipped too; CI runs the full suite)
|
|
173
177
|
forge worktree create <slug> # Create a worktree
|
|
174
178
|
forge test # Run tests with correct timeouts
|
|
175
179
|
forge sync # Sync issue data
|
|
@@ -231,7 +235,7 @@ See [.mcp.json.example](.mcp.json.example) for configuration (Claude Code: copy
|
|
|
231
235
|
|
|
232
236
|
**Forge v3 / Kernel Plan (active design):**
|
|
233
237
|
- [docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md](docs/work/2026-04-28-skeleton-pivot/forge-kernel-authority-control-plane.md) — canonical Forge Kernel authority reset plan for issue authority, local broker, team authority, adapters, storage, and gates
|
|
234
|
-
- [docs/work/2026-04-28-skeleton-pivot/locked-decisions.md](docs/work/2026-04-28-skeleton-pivot/locked-decisions.md) — D1–
|
|
238
|
+
- [docs/work/2026-04-28-skeleton-pivot/locked-decisions.md](docs/work/2026-04-28-skeleton-pivot/locked-decisions.md) — D1–D45 decisions ledger with rationale + tradeoffs + anti-decisions; D44 supersedes Beads-only authority portions of earlier decisions, and D45 retires Beads as a live feature
|
|
235
239
|
- [docs/work/2026-04-28-skeleton-pivot/v3-redesign-strategy.md](docs/work/2026-04-28-skeleton-pivot/v3-redesign-strategy.md) — historical v3 strategy and background; do not use its legacy default-substrate language over D44
|
|
236
240
|
- See [docs/INDEX.md](docs/INDEX.md) for the full reading order across the v3 design folder
|
|
237
241
|
|
|
@@ -303,7 +307,7 @@ forge insights # Detect recurring evidence patterns, suggest con
|
|
|
303
307
|
forge upgrade # Preview and self-heal safe Forge upgrade readiness
|
|
304
308
|
forge gate <verb> <gate-id> # Toggle a workflow gate, or record/query human-gate approval events
|
|
305
309
|
forge role <role> --use <skill> # Bind a role to a skill/ideology in .forge/config.yaml
|
|
306
|
-
forge merge --auto <pr>
|
|
310
|
+
forge merge --auto <pr> --expect-head <full-sha> --issue <issue-id> # Opt-in guarded merge; exact head + owned issue required (OFF by default)
|
|
307
311
|
```
|
|
308
312
|
|
|
309
313
|
### Rules
|
|
@@ -334,6 +338,7 @@ runtime rail. Turn it off only deliberately: `forge gate disable rail.kernel_tra
|
|
|
334
338
|
- **Unused params**: Prefix with `_` (e.g., `_searchTerm`) — ESLint `no-unused-vars` enforced with `--max-warnings 0`.
|
|
335
339
|
- **Pre-push test env**: `test-env/` fixture tests can fail during actual `git push` due to git mid-push state. Fix the root cause — never use `LEFTHOOK=0`.
|
|
336
340
|
- **Skill sync**: Canonical skills live in `skills/<name>/SKILL.md`; per-agent copies are generated from them. `.agents/skills` (Codex's repo-local discovery path) is committed so a fresh clone gets discovery without `forge setup` — a pre-commit hook keeps it byte-identical to `skills/` and the drift gate enforces it. The other mirrors (`.claude/skills`, `.codex/skills`, `.cursor/skills`, `.hermes/skills`) are gitignored and regenerated at `forge setup`. Never hand-edit a generated mirror — edit the canonical `skills/` source.
|
|
341
|
+
- **Skill invocation metadata**: Canonical skill frontmatter may declare `invocation: model|user`; omission means `model`. Only `ship`, `review`, and `rollback` are currently user-invoked. Keep the field harness-neutral and preserve it byte-identically in every generated mirror.
|
|
337
342
|
|
|
338
343
|
## Session Completion
|
|
339
344
|
|
|
@@ -361,3 +366,5 @@ runtime rail. Turn it off only deliberately: `forge gate disable rail.kernel_tra
|
|
|
361
366
|
- NEVER say "ready to push when you are" - YOU must push
|
|
362
367
|
- If push fails, resolve and retry until it succeeds
|
|
363
368
|
- After fixing review feedback, always push the changes and resolve the related GitHub review threads via the GraphQL API before considering the work complete
|
|
369
|
+
|
|
370
|
+
<!-- FORGE:END -->
|
package/CHANGELOG.md
CHANGED
|
@@ -7,7 +7,49 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
7
7
|
|
|
8
8
|
> **Note**: `/check` was renamed to `/validate` and `/merge` was renamed to `/premerge` in v0.0.3. Historical entries below may use the old names.
|
|
9
9
|
|
|
10
|
-
## [
|
|
10
|
+
## [0.1.0-beta.5] - 2026-08-09
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
|
|
14
|
+
- **Controlled behavioral skill evaluation.** `forge skill eval <skill> --full --tier <30|100|300>` now runs the frozen two-model × current/bounded protocol with exact-head issue/PR attribution, isolated zero-tool runtimes, privacy-safe semantic evidence, fail-closed conflict handling, and deterministic promotion scoring. Thirty cases remain instrumentation-only; evaluation never supplies merge authority. (issue `198bec40-0d65-42a8-b2c2-c682f44fdb22`)
|
|
15
|
+
- **Host-owned Shepherd background transport.** Session startup now forwards an explicitly supplied harness background-shell capability, runs it from the stable Git common root, and preserves the detached fallback when the capability is absent or fails. (#494, issue `60ccc100-506b-46a6-bf96-b2fce3436ed6`)
|
|
16
|
+
- **Critical merge-flow reliability integration plan.** Defines a deterministic safety floor, executable work contracts, configurable risk policy, zero-token owner monitoring, and a sequential exact-head merge slot without constraining model reasoning. (#493, issue `a57a2b2a-3b0d-4fce-bf13-e3e4a386f1c9`, epic `f30e5d29-9099-4029-baec-af39f08b6ee3`)
|
|
17
|
+
- **Model-neutral evaluation evidence and exact-SHA replay.** Adds a privacy-safe content-addressed envelope with fail-closed drift checks while excluding raw prompts, transcripts, tool payloads, secrets, and personal data. (#491, issue `02f5ea90-4a1a-462f-9b22-54eb5d37f6b3`)
|
|
18
|
+
- **Automatic project-local memory recall for Claude Code.** Forge now repairs and reuses its existing `SessionStart` and `UserPromptSubmit` lifecycle hooks to inject bounded Kernel memory automatically. Confirmed memories are presented as project truth; fresh suggested memories are separated and labeled for verification. Scope, staleness, supersession, and seen-key filtering happen before ranking, and privacy-safe recall telemetry records only bounded identifiers and aggregates—not prompt terms or memory bodies. (`36461e50`)
|
|
19
|
+
|
|
20
|
+
### Changed
|
|
21
|
+
|
|
22
|
+
- **Exact-SHA npm publication evidence.** The Forge-generated publish workflow now resolves one immutable tag SHA, requires the complete repository suite and an attributable matching receipt before npm publication, and protects workflow updates with one-time Kernel capabilities instead of forgeable sidecar evidence. (issue `198bec40-0d65-42a8-b2c2-c682f44fdb22`)
|
|
23
|
+
- **Simplified the PR-monitor surface.** The workflow now keeps one canonical
|
|
24
|
+
`pr-verdict:*` label and writes detailed diagnostics to the Actions job summary
|
|
25
|
+
(also available via `forge shepherd --pull --json`); it no longer creates a
|
|
26
|
+
sticky PR comment or the neutral `forge/pr-monitor` check. The label remains a
|
|
27
|
+
visibility projection and never supplies merge authority. (112a348a)
|
|
28
|
+
- Added portable `invocation: model|user` skill metadata with omission defaulting to `model`; `ship`, `review`, and `rollback` are now explicitly user-invoked while canonical and generated skill projections remain byte-identical. (#467, `588e6973`)
|
|
29
|
+
- Documented why Litestream remains a disaster-recovery candidate rather than Forge's multi-machine authority; self-hosted libSQL remains the Phase 2 server target. (#463, `746d839d`)
|
|
30
|
+
|
|
31
|
+
### Fixed
|
|
32
|
+
|
|
33
|
+
- **Windows full-suite drive classification no longer launches a redundant PowerShell probe for every child process.** Persistent mappings still use the bounded `net use` probe; an unclassified non-system drive now fails open as unknown instead of being mislabeled fixed. (#496, issue `1efe5de9-6bfb-448f-8575-624577b829f2`)
|
|
34
|
+
- **Injected synchronous pre-push runners no longer create real process-tracking state.** Targeted-mode unit execution keeps its command and edge-suite assertions while avoiding the Windows process-tree setup that pushed the test beyond Bun's 15-second limit. (issue `54b54219-7cbc-4262-9461-a77112a7c49b`)
|
|
35
|
+
|
|
36
|
+
## [0.1.0-beta.4] - 2026-07-24
|
|
37
|
+
|
|
38
|
+
The **Kernel-only authority and autonomous Shepherd wave** removed the remaining live Beads runtime path while expanding Forge's portable skill and PR-monitoring surfaces.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- Reasoning-driven skill invocation, sub-skill composition, static skill evaluation, and dedicated setup, portability, worktree, and gate skills. (#417-#419, #429-#434)
|
|
43
|
+
- Kernel-backed PR authority, singleton Shepherd leases, reconciliation, daemon execution, and cross-harness triggering guidance. (#420-#428)
|
|
44
|
+
- Query-relevant project-memory recall for supported agent sessions. (#440-#441)
|
|
45
|
+
|
|
46
|
+
### Changed
|
|
47
|
+
|
|
48
|
+
- Issue commands, status, and dashboards now use the Forge Kernel exclusively; the live Beads backend and dashboard surfaces were retired. (#435-#439)
|
|
49
|
+
|
|
50
|
+
### Fixed
|
|
51
|
+
|
|
52
|
+
- Targeted pre-push selection recognizes Forge CLI surfaces, and Shepherd background processes stay hidden and derive required checks consistently on Windows and CI. (#420-#421, #438)
|
|
11
53
|
|
|
12
54
|
## [0.1.0-beta.3] - 2026-07-17
|
|
13
55
|
|
package/README.md
CHANGED
|
@@ -89,6 +89,11 @@ truth through `forge status`, `forge prime`, and `forge orient` — so a session
|
|
|
89
89
|
that dies at 2am resumes cleanly the next morning, on any device, with any
|
|
90
90
|
agent.
|
|
91
91
|
|
|
92
|
+
In Claude Code, Forge also recalls relevant project-local memory automatically
|
|
93
|
+
through its existing lifecycle hooks. Confirmed memories arrive as project
|
|
94
|
+
truth; suggested memories are visibly separated and require verification.
|
|
95
|
+
Every injected memory is scope-checked, budgeted, and provenance-labeled.
|
|
96
|
+
|
|
92
97
|
### 🧹 A lifecycle that cleans up after itself
|
|
93
98
|
|
|
94
99
|
Merged a PR with squash-merge? `forge clean` still knows the worktree is done —
|
|
@@ -151,7 +156,7 @@ so a claim can't quietly outrun the code. What's not delivered yet says
|
|
|
151
156
|
| --- | --- |
|
|
152
157
|
| Knowledge-graph memory (Graphiti) | `memory.backend: graphiti` in `.forge/config.yaml` — temporal, relational recall ([guide](docs/guides/memory-backends.md)) |
|
|
153
158
|
| Global hooks for Codex/Hermes | `forge hooks install --global` (consent-guarded, `--dry-run` first) |
|
|
154
|
-
| Conditional auto-merge | `forge merge --auto <pr>` — off by default
|
|
159
|
+
| Conditional auto-merge | `forge merge --auto <pr> --expect-head <full-sha> --issue <issue-id>` — off by default; requires exact-head and active issue-ownership leases plus protected checks |
|
|
155
160
|
|
|
156
161
|
## A workflow you own
|
|
157
162
|
|
|
@@ -261,7 +266,6 @@ Use `bunx forge ...` (or `npx forge ...`) until the `forge` bin is on your PATH.
|
|
|
261
266
|
| `--dry-run` | Preview planned writes without touching the repo. |
|
|
262
267
|
| `--symlink` | Link instruction files instead of copying, where supported. |
|
|
263
268
|
| `--merge smart\|preserve\|replace` | Choose how setup handles existing instruction files. |
|
|
264
|
-
| `--sync` | Deprecated. Removes old generated Beads/GitHub sync files; future issue sync belongs to Kernel/server authority. |
|
|
265
269
|
|
|
266
270
|
## What you get
|
|
267
271
|
|
package/bin/forge-cmd.js
CHANGED
|
@@ -31,6 +31,16 @@ const VALID_COMMANDS = [
|
|
|
31
31
|
'verify',
|
|
32
32
|
];
|
|
33
33
|
|
|
34
|
+
/**
|
|
35
|
+
* Find the planning doc for a work slug under a `docs/work` tree.
|
|
36
|
+
*
|
|
37
|
+
* Recurses into dated work directories (`YYYY-MM-DD-<slug>`) and returns the
|
|
38
|
+
* first `plan.md`, `design.md`, or `tasks.md` whose directory slug matches.
|
|
39
|
+
*
|
|
40
|
+
* @param {string} dir - Directory to search (typically `docs/work`).
|
|
41
|
+
* @param {string} slug - Work slug, without the date prefix.
|
|
42
|
+
* @returns {string|null} Path to the matching doc, or null when none matches.
|
|
43
|
+
*/
|
|
34
44
|
function findWorkPlanDoc(dir, slug) {
|
|
35
45
|
if (!fs.existsSync(dir)) return null;
|
|
36
46
|
|
|
@@ -60,6 +70,16 @@ function legacyPlanMatchesSlug(fileName, slug) {
|
|
|
60
70
|
return legacySlug === slug;
|
|
61
71
|
}
|
|
62
72
|
|
|
73
|
+
/**
|
|
74
|
+
* Resolve the planning doc that backs a branch.
|
|
75
|
+
*
|
|
76
|
+
* Strips the conventional-commit branch prefix to get the slug, prefers a
|
|
77
|
+
* `docs/work/<date>-<slug>/` doc, and falls back to the legacy flat
|
|
78
|
+
* `docs/plans/` layout.
|
|
79
|
+
*
|
|
80
|
+
* @param {string} branch - Branch name, e.g. `feat/slice-d1-deletion`.
|
|
81
|
+
* @returns {string|null} Path to the planning doc, or null when none exists.
|
|
82
|
+
*/
|
|
63
83
|
function findPlanDocForBranch(branch) {
|
|
64
84
|
const slug = branch.replace(/^(feat|fix|docs|refactor)\//, '');
|
|
65
85
|
const workPlan = findWorkPlanDoc('docs/work', slug);
|
|
@@ -72,7 +92,7 @@ function findPlanDocForBranch(branch) {
|
|
|
72
92
|
|
|
73
93
|
const COMMAND_DESCRIPTIONS = {
|
|
74
94
|
status: 'Detect current workflow stage (1-7)',
|
|
75
|
-
plan: 'Create branch +
|
|
95
|
+
plan: 'Create branch + issue + design doc',
|
|
76
96
|
dev: 'Implement with TDD (RED-GREEN-REFACTOR)',
|
|
77
97
|
validate: 'Run type check, lint, security, tests',
|
|
78
98
|
check: 'Alias for validate (deprecated — use validate)',
|