Repository navigation
v0.0.11
Highlights
-
Gate runs no longer run twice. When an agent has already passed a gate during its run, task completion reuses that pass instead of running the gate again. It does so only when all of these still hold:
- the gate is the same: same command, image and env values;
- the run claim is the same;
- the files are the same. A publish commit no longer counts as a change.
- nothing touched the tree while the gate ran.
Any read that can't be confirmed runs the gate as before. (#983)
-
Gate and PR activity is recorded and shown. The board records:
- every gate run, with a
runningrow first and then exactly one outcome; - every PR operation, as
createdorreused; - every gate and PR call the agent made, read from its transcript.
The task stats dialog and the activity API show them. Coverage reads
complete,partialorunknown, never a false zero. (#983) - every gate run, with a
-
Claude-code can run gates and publish itself. The
factory-gateandfactory-controlwrappers are built into both runner images and allowlisted for claude-code. Before this, the allowlist refused the agent's gate and publish commands. (#1061) -
Transcripts survive the volume reaper. Before deleting a task volume whose thread isn't complete, the reaper re-uploads any transcript records the exporter never had acknowledged. (#938)
Fixes
- #1061: claude-code's command allowlist refused the gate and publish commands.
- #1045: a runner adopted after a driver takeover kept the old lease, so Jira, GitHub and the branch reporter refused it. (#1049)
- #1064: the gate image ships no
lsof, so acleanup.shtest hung and the repo'stestgate failed on every task. (#1065) - #938: unacknowledged transcript records were lost when a task volume was reaped. (#1042)
Upgrade notes
-
Three new migrations, applied automatically at board start:
087_job_gate_run088_job_pr_operation089_transcript_tool_event
They create new tables and do not alter existing ones.
-
New driver setting:
TASK_VOLUME_EXPORT_ATTEMPTS, chart valuetaskVolume.exportAttempts, default3. It is how many failed re-export rounds the reaper tolerates before it deletes a volume anyway and logs the loss. -
Runner images changed. Both include the
factory-gateandfactory-controlwrappers and the lease-pair helper. Claude-code's managed settings allowlistBash(factory-gate *)andBash(factory-control *). Deploy the matching images with the board and driver.
Validation
- On the release commit: typecheck, lint,
npm test,test:dband the helm assertions (test:k8s) are green. - Upgrade from v0.0.10. That release's schema was seeded with rows, then this release's migrations ran on top. 087–089 applied, every table kept its rows, and the migration ledger grew by exactly three.
verify:ui: 101 of 102 specs pass. The one failure, #1073, is a date-dependent token-usage spec; it fails on v0.0.10 too.- Kind lane (
test:k8s --cluster): 544/0 on the #983 epic. test:jobsfull lane: 379/0 on the #983 epic before its last two slices; not rerun for this release.- Live test on a local kind board with these images, claude-code executor, using throwaway PRs that were closed:
- Agent runs its gates, then publishes. The
lintpass was reused at completion after the publish commit. The PR was recorded once ascreatedand once asreused, and no second PR was opened. - Agent edits after its gates. The change was detected, the gates re-ran, and the PR was recorded as
created.
- Agent runs its gates, then publishes. The
Known limits
- Cases where a gate pass is never reused. The gates then simply run, so this is slower but safe:
- git rewrites content: autocrlf, a text/eol/encoding attribute, or a filter driver that a path's
filterattribute names; - the checkout doesn't record modes or symlinks, or git folds case;
- the index has assume-unchanged or skip-worktree entries, or is split.
- git rewrites content: autocrlf, a text/eol/encoding attribute, or a filter driver that a path's
- A gate pass does not cover git-ignored files the gate reads.
- A repository whose own test suite writes inside the work tree, as this one's does, never gets its
testpass reused: the change guard sees the writes. - Deferred:
- #909: a taken-over run's ad-hoc gate requests keep the lost driver's endpoint;
- #1059: the opencode free-tier model returns empty replies;
- #1060: a kind lane flake.