Skip to content

v0.0.11

Choose a tag to compare

@AndrewGrachov AndrewGrachov released this 27 Oct 10:46
· 112 commits to main since this release

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 running row first and then exactly one outcome;
    • every PR operation, as created or reused;
    • 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, partial or unknown, never a false zero. (#983)

  • Claude-code can run gates and publish itself. The factory-gate and factory-control wrappers 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 a cleanup.sh test hung and the repo's test gate 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_run
    • 088_job_pr_operation
    • 089_transcript_tool_event

    They create new tables and do not alter existing ones.

  • New driver setting: TASK_VOLUME_EXPORT_ATTEMPTS, chart value taskVolume.exportAttempts, default 3. 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-gate and factory-control wrappers and the lease-pair helper. Claude-code's managed settings allowlist Bash(factory-gate *) and Bash(factory-control *). Deploy the matching images with the board and driver.

Validation

  • On the release commit: typecheck, lint, npm test, test:db and 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:jobs full 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 lint pass was reused at completion after the publish commit. The PR was recorded once as created and once as reused, 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.

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 filter attribute 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.
  • 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 test pass 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.