codeArbiter 2.6.0: context-drift provenance + just-in-time context injection
[2.6.0] — 2026-06-27
codeArbiter 2.6.0 spans several tracks. The headline additions are context-drift provenance (passive drift detection, a coarse code map, and commit-gate auto-heal) and file-scoped just-in-time context injection, which surfaces the governing decision, control, or spec at the moment an agent reads a file. The --farm preview gains best-of-N sampling and iterative retries for first-time-go accuracy, and commit-gate now lands task-board transitions atomically with the work (ADR-0008). This release also relicenses the project from MIT to AGPLv3 with a proprietary dual-licensing path; see the License note under Changed.
Added
- Best-of-N sampling against the gate (
FARM_SAMPLES, default 1). Because the gate is a deterministic pass/fail oracle and each task runs in an isolated worktree, N candidates are drawn in parallel and the first to pass the gate is accepted. Each sample runs in its own scratch worktree cut from the integration HEAD; the winner's files are taken into the task worktree and merged, the losers discarded. Total in-flight worker calls never exceedFARM_CONCURRENCY— a shared limiter, so sampling shares the budget rather than multiplying it.FARM_SAMPLES=1is byte-for-byte today's single-candidate path (pinned by a regression test). (report F1) - Sampling parameters on the worker call (
FARM_TEMPERATURE,FARM_MAX_TOKENS). The chat body now carriestemperature(default 0; auto-bumped to 0.7 whenFARM_SAMPLES>1so samples diversify) and an optionalmax_tokenscap (default unset = provider default, today's behavior). (report F4) - Best-of-N cost transparency.
farm-report.jsonrecords both the summed sample-token spend and the accepted candidate's own tokens (acceptedPromptTokens/acceptedCompletionTokens), so the N×-tokens trade-off is visible rather than hidden. (report F1) - Task-board transitions land atomically with the work (ADR-0008, #142). commit-gate is now the single board-sync chokepoint. A done-flip
[~]→[x], start-flip[ ]→[~], or a single queued add toopen-tasks.mdis recognized by a new_taskboardlib.classify_board_diffclassifier, retained by commit-gate Phase 6 (not flagged as scope creep), and staged by Phase 7 into the same commit as the work — so the flip is invisible onmainuntil merge, then lands atomically, and an abandoned PR abandons the flip with it. No more laggingchore(board)PR or cross-session board drift. A new/ca:standupadvisory drift sweep (hooks/boardsync.py reconcile, read-only and best-effort) surfaces any merged-but-not-flipped task; the fix still routes through/ca:task. - Context-drift detection, a code map, and commit-gate auto-heal (#145). codeArbiter records which source files back each derived
.codearbiter/doc. When a tracked source changes, a single SessionStart line flags the drift,.codearbiter/code-map.mdgives a coarse orientation map, commit-gate auto-heal re-baselines the provenance or proposes a doc update with the work commit, and/ca:context-checkruns the audit on demand. A drifted claim is suppressed rather than surfaced as if it were fresh. - File-scoped just-in-time context injection (#146). A
PreToolUse:Readhook injects a budgeted (≤150-token), freshness-gated pointer to the security control, accepted ADR, approved spec, or fresh provenance claim that governs the file being read, in that priority order, then always allows the Read. A non-governed Read injects nothing and makes no git call. A spec opts in with an optional**Governs:**header line.
Changed
- Retries are now iterative. On a retry — a failed gate, or a sampling round with no green — the worker is shown its own previous in-scope output, not just the gate-failure tail, so it refines rather than restarts blind. The prior output rides the same
FARM_ENRICH_MAX_BYTESbyte-cap and secret-redaction chokepoint as all injected context; out-of-scope drift is never carried forward. (report F2) - The follow-up harvest runs pre-commit. commit-gate's raise-new harvest moved from after-the-commit to Phase 7 before staging, so a discovered follow-up task rides the work commit as a contingent default; a follow-up that must survive PR abandonment is filed as a GitHub issue instead of the board. (ADR-0008, #142)
- Relicensed from MIT to AGPLv3 with proprietary dual-licensing (#147, ADR-0009). The open-source distribution moves to the GNU AGPLv3, whose network-use clause closes the hosted-fork loophole that MIT leaves open. Copyright is held solely by the owner, who reserves a proprietary dual-licensing path for a planned closed-source SaaS; future contributions require a CLA (see
CLA.md). The change is forward-only, so code already published under MIT stays available under MIT. This supersedes ADR-0006's broad-adoption posture. SeeLICENSEand the README for the full terms.
Fixed
- Mutation-hook least privilege (#143). The pluggable mutation hook (
FARM_MUTATION_CMD) no longer inherits the dispatcher's API key or OAuth token, giving it least-privilege parity with every other child command. - Heredoc commit messages (#139). The commit gate no longer false-blocks a multi-line
git commit -F - <<EOFcommit message (H-09b). /ca:releasehardening (#138). The release skill resolves the baseline tag, the notes heading, release-date consistency, and half-finished-publish recovery through tested helpers, and rebuildsfarm.jsunconditionally on every release.