Skip to content

v0.247.0

Latest

Choose a tag to compare

@github-actions github-actions released this 01 Sep 21:24
· 2 commits to main since this release

Round-2 misfire batch — substance verification unskippable, coverage claims two-dimensional

Greenfield's round-2 review (the first field outing of the v0.246.0 mechanisms — routed_to[] adjudication caught a real cross-lane loss on its first run; every sidecar landed in exact v2 shape) also surfaced five misfires. Validated against the run's artifacts and shipped:

Substance verification is one unskippable call. The substance_check_lanes step was a per-lane bash loop in workflow prose, and two field runs skipped it wholesale — lanes stayed in_flight while the consolidator synthesized over unverified files, with only the <lane_files> on-disk-fallback warning standing in between. state substance-check-lanes now performs the whole loop in one CLI call (mtime-quiesce, per-lane Layer-1 claim-check, <30-byte hard-defer, check-agent-output verdict routed by redispatch_count: fresh stub → stub_redispatched, second stub → deferred, missing-after-retry → lane_failed; terminal lanes skip, so re-runs are idempotent). Enforcement lives at the surface a consolidator dispatch cannot skip: dispatch render-filled/run REFUSE the code-reviewer:code_review_parallel target while any non-foreign lane is non-terminal — --allow-unverified-lanes overrides, and a mixed registry then names the status-excluded lanes INSIDE <lane_files> instead of silently dropping them. Both workflow step bodies shrank to one call each.

Coverage claims carry both dimensions. "Every declared file is in a lane" and "the change set is fully reviewed" are different claims, and a field consolidator collapsed them — <unassigned_scope> said "none" while 18 changed files sat outside the declared 47. Lane registration now writes lane-coverage.json (workflow_id-stamped: declared/changed totals, unassigned_declared[], changed_outside_declared[] with full name lists; the declared-scope branch gained the cover computation it never had), and the {unassigned_scope} filler emits BOTH dimensions with routing instructions (review.json::uncovered_scope / ::changed_outside_declared_scope) — the consumption bullet in the synthesis template + workflow mirror updated to match.

Stale cross-run lane artifacts evicted + stamped. lane-snapshot.json survived every reset (it was audit-whitelisted but never evict-registered) — and lane ids recur across reviews, so an 8-lane snapshot from a retired review sat beside a fresh 6-lane run with fully overlapping ids, ready to make assert-lanes-unchanged report every lane rewritten against another review's hashes. The snapshot now carries a workflow_id stamp, a foreign/unstamped snapshot warns-not-compares (same semantics as absent), and lane-snapshot.json + lane-unassigned.txt + lane-coverage.json are all reset-soft evicted.

Prose contracts from what worked. Conditional-severity declaration in both review task templates (severity_if: <condition> → <tier> — a lane's declared escalation condition made its promotion pure arithmetic; the synthesis template now EXECUTES declared conditions and records them in severity_promotions); skeleton-first as a task-level instruction in the synthesis template (two field consolidators died composing the whole document in memory despite the agent-body protocol — task text outranks system-prompt boilerplate); duplicate-@TEST detector one-liner in the python-fastapi hurl reference (passes both static gates, has cost two reviews).

DEF-015 closed as refuted-by-receipt. The first field dispatch bytes aggregate (7 renders, 210,969B) ranks auto_memory 20.2% + graph_impact 17.9% + task 12.5% — content blocks dominate, and both demonstrably converted this run; the narrative directives DEF-015 targeted are minor (4.8%/3.7%).

Gate: K367 (substance routing, render refusal + override honesty, two-dimension coverage, foreign-snapshot guard, prose pins in template + mirror) — every leg probed red-then-green.