Skip to content

forge 0.14.0

Choose a tag to compare

@forcetrainer forcetrainer released this 05 Nov 17:24
· 13 commits to main since this release

A minor release, because execution behavior changes. This page covers what changed since 0.13.14 (PR #148).

Scope widening replaces the repair-out-of-scope halt

A plan can't name every file a task will need. When a repair touched a file outside the task's diff, forge used to halt repair-out-of-scope for a human, and nearly every one of those halts was approved anyway. In one recent session, all five were approved, and four were on files the plan had declared or the run had already written.

  • Workers may widen, with a reason. After every worker turn (first attempt and every rework lap), forge lists each existing file the worker modified outside its task's **Files:**. The worker records why in a widening record: the reason, plus the finding or requirement it serves.
  • The reviewer arbitrates. Each widened path gets a ruling, accepted or rejected. A rejection becomes a fix finding: the worker reverts it or argues back. If it's rejected a second time, the run halts stuck and the human decides.
  • Close-out lists them. Accepted widenings show up beside the staged deferrals, for information only. Widenings from trivial-tier tasks and inline runs, which have no reviewer, are marked "not reviewed".
  • Only two things still halt: deleting an existing file outside scope (scope-delete), and a worker commit (worker-committed).

A worker can't widen its own scope

  • Detection diffs from a checkpoint, the HEAD and branch recorded before a stage's first worker dispatch and held across rework laps, never from HEAD read afterwards.
  • Scope, the exempt spec files and the citable refs are all read from the plan as committed at that checkpoint. Editing the plan's working copy changes nothing.
  • After every worker turn, HEAD must equal the checkpoint on the same branch. An added commit, reset, amend, branch switch or detached HEAD halts worker-committed and names the commits. The freeze moves no ref; you decide on resume whether they stay.

**Files:** is machine-read

  • Bulleted Create: / Modify: / Test: entries of backticked repo-relative paths, with an optional trailing note.
  • Prose entries ("every portal .tsx the guard flags"), globs, and the single-line form are lint errors naming the task and line.
  • Completed plans aren't migrated. Resuming an older plan whose **Files:** lines are prose needs those lines rewritten first.

CLI changes (forge_dispose.py)

  • New subcommand: widened.
  • Decision CLI: --plan and --checkpoint are now required, and --widenings is new.
  • Removed: --repair-snapshot. It's now a usage error.
  • decision.json: gains a widenings block.

Halt records from before this release that name repair-out-of-scope still resume.

Codex

No hooks/hooks.json change since 0.13.14, so Codex doesn't ask you to re-trust forge's hooks.

Install

claude plugin marketplace update forge
claude plugin update forge@forge        # or: claude plugin install forge@forge

Restart the session to apply. On Codex: codex plugin marketplace add forcetrainer/forge --ref forge--v0.14.0, then codex plugin add forge@forge.