Skip to content

v0.74.0

Choose a tag to compare

@github-actions github-actions released this 18 Sep 18:30
· 300 commits to main since this release

Changelog

Features

  • bbb6839 feat(build_product): advisory SpecLint under-specification rule (i) + surface spec-quality at ApprovePlan
  • f6967cd feat(build_product): upstream tracker-runner's fork — EnsureEnv bootstrap, deny-by-default oracle (exit 3), advisory native lint, ROUTE_ESCALATE sentinel, review-panel models
  • 856a535 feat(engine): resume rewinds past a fail-closed terminal to the node that failed (#651)
  • 5262b44 feat(jail): writable_paths_mode: prefer — degrade to unjailed with a loud, recorded warning where Landlock is unavailable (#648)
  • 6176d1d feat(workflows): resolve ${graph.workflow_dir} for embedded built-ins by materializing the embed tree into the workdir
  • 5b96c6a feat(workflows): resolve embedded built-in *_file sidecars from the embed FS

Fixes

  • b03ad69 fix(#646 review): gate scoping, fold-before-teardown, gate integrity, abandon-by-default gates, hook output in diffs
  • d6db4ec fix(#654): dead-end rule is exit-only continuation (a fallback sink with onward routing resumes in place); record the strict fallback hop after the budget check
  • f273040 fix(adapter): honor dippin's section-level else -> Node default (#649)
  • 81e18b6 fix(adapter): review follow-ups for #647 — quote ${...} values, keep not for numeric negation, drop dead formatter
  • bbcba83 fix(adapter): serialize edge conditions from dippin's AST so word conjunctions route correctly (#647)
  • b757501 fix(ask_and_execute): capture every candidate, contract-line winner parse, fail-closed routing (#646 items 2, 3)
  • 17a5634 fix(auto_status): tolerant STATUS-line grammar, unclosed-fence handling, early-fail contract on gate-like prompts (#645)
  • 1e269a4 fix(build_product): #640 group R review follow-ups — pick failure aborts, AbortRun resume copy, latch-test comment, backstop wording
  • b8d4488 fix(build_product): #640 group V review — opt-out stamp is a tracked finding, no-stack is a milestone NOTE, snapshots at milestone start, FixMilestone retries in place, deletions scope their package, TEST_SH honored
  • 6c03285 fix(build_product): #901 review round — self-describing manifest, Rust/pytest shapes, none-phrasings, heredoc noise, honest #900 wording
  • 1927154 fix(build_product): #901 round 3 — per-kind names-unavailable downgrade, unforgeable manifest marker, whole-segment prefix match
  • a322a55 fix(build_product): C5 review — ForgeSpec commits only SPEC.md; content-sniff .pem/.key; scope the C5 claim (#640)
  • 9629a77 fix(build_product): contract-test reconcile (#901), stack-detection glob fail-open, #900 pick guards, pytest -k keywords
  • b1d35c8 fix(build_product): fail-closed routing — guard Implement on pick success, abort on mechanical failure, exact markers, verify-fail budget (#640 A1–A6, D11)
  • 71b6b69 fix(build_product): git safety — worktree-aware excludes, safe .gitignore seeding, per-invocation artifact/secret excludes, unsigned hook-respecting checkpoints (#640 C1–C7, E7)
  • 331f08c fix(build_product): green-means-green verification gates (#640 D1-D12, E1, E8, B2, B3)
  • 1e0cd31 fix(build_product): reset per-plan state, dirty-tree preflight, one shared plan parser (#640 B1, B4-B6, C5, E3-E6, E9)
  • 66e7000 fix(build_product): review follow-ups for #640 group S — parser trailers, repo-wide dirty preflight, Cleanup via reset_plan_state
  • efd4691 fix(build_product): unattended agent failures never ship — split EscalateVerification (default abandon) off EscalateReview
  • fbb58d2 fix(engine): cascade halt parity, strict-fallback resume replay, dead-end-only rewind + kind-aware origin copy (#653 follow-up, #654)
  • 090f55b fix(engine): else-aware graph walks + review follow-ups for #649
  • faa6761 fix(engine): emit fallback_latched from all three latch sites; surface FailureReason on stage_failed (#642 review)
  • 94be0e0 fix(engine): one-shot latch for retry-exhausted fallback; tool timeout is a routable fail (#642, #644)
  • 28bc931 fix(engine): re-arm fallback latch per iteration; plumb restart_budget_reset through wire shapes and diagnose (#643 review)
  • 57f5490 fix(engine): run the failure cascade for a failed node whose guards all miss (#653)
  • 4317f46 fix(engine): scope per-target restart budgets to loop iterations (#643)
  • 11b1a96 fix(engine,tool): review follow-ups for #650/#652 — rune-safe reason tail, clear stale fallback origin
  • b7e9205 fix(engine,tool): self-targeting fallback is a no-op (#650); tool FailureReason on non-zero exit (#652)
  • 1911518 fix(examples): #646 review follow-ups — RALPH_COMPLETE containment, ledger blank rows, dotpowers lib docs/guard, no-build-system routes to help
  • e7458f1 fix(examples): #646 sibling pipelines — dash-safe scripts, anchored task ids, green-means-green gates (items 1, 4, 6-12)
  • 3ef8275 fix(examples): every gate's abandon routes to AbortRun so the run ends fail
  • 96b02e1 fix(handlers): accept emphasis between STATUS and colon; point docs at codergen_autostatus.go
  • b3a24e4 fix(human): freeform gates honour the .dip default: (default_choice) under --auto-approve and timeouts
  • 84bf4aa fix(jail): #648 review round 2 — commit the diagnose fixture, os.Root/openat2 degraded tier, branch-key mode validation, doctor + stderr fallback, CI jail step
  • cd29787 fix(jail): #648 review round 3 — no-symlink component walk in the os.Root tier, full-suite Landlock CI job with skip guard, shared branch-key parser
  • c6b6143 fix(superspec): committed scaffold, traceability overlays, merge-conflict route, shared green-gate, gated test_ref, fail-closed routing (#646 item 5)
  • 06162f5 fix(workflows): explicit SourceRef anchor; init copies directive-derived sidecars

Other

  • f6d7f66 chore(init): describe directive-derived sidecar copy in comment and usage
  • 068a20b chore: dedupe countEvents helper after #642 rebase; keep events.go / tracker_diagnose.go under the file-size ratchet
  • e2f05c1 chore: fix stale seedWorkflowDir reference and chmod comment direction
  • c825025 chore: merge-time fixes for #651 — events.go under the size ratchet, AbortRun resume copy, provenance/ResumeFrom wording
  • 7c0f048 ci: allow workflow_dispatch so branch CI can be run on demand (Linux-only jail gates)
  • b247940 ci: block scalar for the Landlock probe step (YAML plain scalar rejects ': ')
  • 3b1d992 ci: block scalar for the jail-test step (plain scalar broke on ': ' in the grep pattern)
  • af06774 ci: dedicated Landlock jail job on ubuntu-24.04 — the Blacksmith runner has no Landlock, so the enforce-path jail suite had been silently skipping
  • 9290148 ci: run the verbose jail-test step before the broad suite so the Linux jail record always exists
  • e3e533d docs(build_product): document the operator stamps; fix the stale Setup preflight wording
  • f0bdc4d docs(build_product): port tracker-runner prompt improvements — VerifyMilestone marker contract + advisory native lint, FixMilestone not-yet-verifiable guidance
  • 5b857e6 docs(claude-md): move engine specs out of CLAUDE.md into docs/architecture/engine.md
  • 81a9536 docs(spec): freeze the writable_paths_mode: prefer contract (#648)
  • cee72fd docs: SPEC.md authoring prompt for build_product
  • 292e846 docs: record the Landlock-less CI runner finding and the jail-linux job (#648)
  • 38a8983 docs: release v0.74.0
  • ddf1946 merge: ${graph.workflow_dir} for embedded built-ins — materialize sidecars to the workdir; library Path-ref seeding parity (#467-for-embedded, #332)
  • f42b9e8 merge: SPEC.md authoring prompt + advisory SpecLint rule (i)
  • 37aa2f7 merge: build_product — stack-detection set -f fix (deeper monorepo manifests were never tested), tracker-runner #901 executed-test manifest + per-milestone contract tests, #900 hardening guards + legacy-extractor fixture, pytest -k keyword guard, venv exclusion, docs
  • 0b69188 merge: build_product — unattended agent failures never ship: ReadSpec/Decompose → AbortRun; EscalateVerification gate (default abandon → AbortRun) for red/unverified builds; EscalateReview kept only for review-budget exhaustion
  • 795d39b merge: build_product/ask_and_execute/superspec — every gate's abandon routes to AbortRun (run ends fail, not success); EscalateReview entry-point copy, site diagram, CLAUDE.md gate sentence, artifacts.md activity-log path corrected
  • 747c94b merge: decompose build_product scripts into scripts/build_product/lib/ (sourced via ${graph.workflow_dir}); init/materialize skip test fixtures; suppress hint-severity lint on the CLI load path
  • 2868eca merge: decompose build_product.dip into prompt/script sidecars; embedded built-ins resolve *_file from embed FS; explicit tracker.SourceRef anchor (#398 follow-up)
  • 5a1ac53 merge: docs — move engine-spec paragraphs from CLAUDE.md into docs/architecture/engine.md (one authoritative text per topic; 4 stale engine.md claims corrected); CLAUDE.md gotchas back to ≤6 lines each
  • b99ac2d merge: docs(build_product) operator stamps documented (README/site/EscalateReview); truthful Setup preflight + verify.sh copy; pre-commit strips GIT_AUTHOR_/GIT_COMMITTER_ so identity assertions pass under the hook
  • f9b3bb4 merge: feat(#648) writable_paths_mode: prefer — host-capability jail refusals degrade to a loud, recorded unjailed run (authoring/backend refusals still refuse); os.Root/openat2 in-process tier; jail-linux CI job with skip guard; FinalCommit re-hardened
  • dd00118 merge: feat(#651) resume rewinds to the node that aborted; --from ; --resume-no-rewind; fallback provenance (origin/outcome/reason/kind) + HaltedAt persisted; terminal halts now save the checkpoint
  • 17fb0c7 merge: fix(#640 A1–A6, D11, E10) build_product routing — strict failures abort instead of shipping, outcome-guarded Pick edge, exact-marker (endswith) conditions, verify-fail budget, audited mark-done override
  • 9438529 merge: fix(#640 B1,B4–B6,C5,E3–E6,E9) build_product state resets + shared plan parser — fresh-run/re-plan resets, dirty-tree preflight, anchored milestone headers, tolerant Files parser, loud counters
  • 6103731 merge: fix(#640 C1–C7, E7) build_product git safety — worktree-correct excludes, idempotent .gitignore seeding (no sort), anchored seeds, secrets denylist with private-key sniff, per-invocation excludes, unsigned checkpoints, loud hook failures
  • 7f7fba5 merge: fix(#640 D1–D12, E1, E8, B2, B3) build_product verification gates — tree-wide stack detection, worktree-scoped go test + reverse deps, anchored -skip, golangci-lint v2 hatch, gate-file integrity + hatch snapshots, native gates alongside Makefile, no rc-2 semantics, operator opt-out protected
  • 83a7c8b merge: fix(#642,#644) one-shot fallback latch on retry exhaustion; Landlock refusal non-retryable; tool timeout routable OutcomeFail; drop writable_paths from FinalCommit
  • d7b32c1 merge: fix(#643) loop-iteration-scoped restart budgets (dominator natural loops); fallback latch re-arms per enclosing-loop restart; reset_by on the wire
  • 5d734e8 merge: fix(#645) tolerant auto_status STATUS grammar; early-fail contract on Verify/Synthesize/Decompose prompts
  • 8343031 merge: fix(#646 items 1,4,6–12) sibling pipeline scripts — adversarial-review dash-safe, dotpowers family shared lib + task-id anchoring, megaplan portable sprint ids, no more rg/fake-green gates, guarded counters, exact RALPH_COMPLETE last line, per-run logs
  • c9bd854 merge: fix(#646 items 2,3,5) ask_and_execute + build_product_with_superspec — decomposed into sidecars (byte-identical), all candidates tested + WINNER: contract, committed scaffold + per-stream traceability overlays, merge-conflict gate, gate integrity, phase gates scoped to the phase, unattended red builds never ship
  • 8607263 merge: fix(#647) edge conditions serialized from dippin's parsed AST — word conjunctions (and/or/not) evaluate correctly at runtime
  • 87af921 merge: fix(#649) honor dippin's section-level else -> Node (success-side only); else-aware restart/dominance walks, simulate plan and var-reach
  • 6b7a6c2 merge: fix(#650,#652) self-targeting fallback is a no-op, abort terminals preserve WIP, fallback origin in failure messages; tool FailureReason on non-zero exit; diagnose counts attempts per stage_started
  • c6edcd3 merge: fix(#653) failed nodes with conditional edges run the full failure cascade (fail edge → retry → fallback_target → on_failure → halt); else never catches failures
  • 623a08c merge: fixture tests for build_product scripts (502 checks) + go test / make test-scripts wiring
  • 7044d20 merge: release docs for v0.74.0
  • ffe2dc7 merge: upstream tracker-runner's build_product deltas — EnsureEnv seed hook (#846), verify.sh exit-3 not-yet-verifiable (#857), positive executed-test oracle (#873), Python discovery + interpreter chain, advisory native lint, ROUTE_ESCALATE sentinel (#840), ReviewCodex gpt-5.6-sol/40 turns (#598), ReviewGemini flash
  • 7c263fa merge: upstream tracker-runner's build_product prompt deltas — VerifyMilestone marker contract (tests-not-yet-verifiable, ROUTE_ESCALATE), advisory-lint facts, FixMilestone not-yet-verifiable guidance; drop the untrue 'EnsureEnv catches make-missing' clauses, pytest -k noted
  • db022fd refactor(build_product): decompose inline prompts/commands into sidecar files
  • c52cec7 refactor(build_product): decompose sidecar scripts into scripts/build_product/lib/ sourced via ${graph.workflow_dir}
  • 445f8f1 refactor(build_product): review follow-ups — no test fixtures in init/materialize, silent dippin hints on load, docs, guard-message cause hint
  • 77bf06b refactor(examples): decompose ask_and_execute + build_product_with_superspec into sidecars
  • ab0bbb7 refactor(jail): split os.Root open/remove helpers under the cognitive ratchet (#648)
  • 45e0007 test(build_product): fixture suites for the 17 tool-script sidecars, wired into go test
  • 54ae1b4 test: fix three Linux-only CI failures on main — stub completer for the sidecar engine test, GNU-first stat in gitignore_test, explicit .ai/decisions check in Cleanup.sh (GNU ls exits 2)