You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Task-owned runners. Setup, gates and declared services run in the task pod (#772, #773). Each root thread gets its own task volume and checkout. Each attempt's tree and session are checkpointed at finalize, a lost volume is restored from its checkpoint, and the reaper retires volumes using board thread facts (#775). The internal reviewer runs in the task pod and claims its review in-band (#774).
Infrastructure loss interrupts a task instead of losing it. Driver takeover works on both executors (#829). An expired lease is recovered as an interruption and keeps its session (#822). Every run's end goes through one termination policy (#824). Settle receipts and a storage-enforced job status graph are in place (#821). Supervisor reports are acknowledged and step invocations are kept separate (#823). Docker and kubernetes now follow one executor contract (#828, #869).
Shared admission. Running-task budgets (total, per org, per repo) are enforced in the claim across every driver and replica (#831). The cross-org claim scan is ordered the same on every replica. Board and driver expose Prometheus metrics. PRs are followed on an interval, so a lost webhook never strands a wait.
Replica-safe API. Migrations are serialized under one advisory lock, workspace clone and purge rows are owned by token, and artifacts are pinned across two API replicas (#830).
Security.
The agent's tool commands run under their own uid (#814).
The runner's GitHub token renews through a lease-authenticated endpoint, so long runs outlive the 1 h App token (#807).
Publication evidence is bound to its content, and log completeness is reported accurately (#825).
The transcript exporter has its own export-only control token (#827).
The API server no longer keeps a filesystem workspace or per-member repo selection (#777, #778).
Fixes
Supervised steps are released when the runner group ends mid-step (#967).
An agent container that ended without agent.exit is read as lost within seconds, on both executors (#920).
The pre-agent setup outcome carries to an adopting or taking-over holder (#917).
A takeover's rebind wait ends once the earlier group is confirmed finished (#928).
Block-helper effects are reconciled across claims with stable effect ids and receipts (#826).
Flaky executor tests are order- and load-independent (#905, #946).
Release pipeline: every image pull goes through mirror.gcr.io instead of ECR Public, whose per-IP data limit refused shared runner IPs. The executors' npm is bumped to 11.21.1.
Upgrade notes
Migrations 070–084 apply on boot, serialized under an advisory lock. 084 enforces the job status transition graph with a trigger.
Chart: the RWX workspaces volume is gone. Remove workspaces.* and dashboard.workspaceRoot from your values. Runners use one per-thread taskVolume instead (accessMode: ReadWriteOncePod, size: 20Gi, ttlMs, boundMs), so the cluster needs a StorageClass that provides RWOP volumes. EFS is no longer needed.
Chart: artifacts.backend defaults to s3.artifacts.s3.bucket and artifacts.s3.region (or endpoint) are required. Set artifacts.backend=filesystem only for a single-replica development install.
Chart: new values.
dashboard.admission.maxRunning / maxRunningPerOrg / maxRunningPerRepo (empty means unlimited).
dashboard.serviceAccount.
The driver gets metricsPort (9464), rebindGraceMs, orphanMinMs, stepWaitMs, repoCloneBase and artifactFlush.*.
Env.
ORG_WORKSPACE_ROOT is removed.
New: ADMISSION_MAX_RUNNING, ADMISSION_MAX_RUNNING_PER_ORG, ADMISSION_MAX_RUNNING_PER_REPO, TASK_VOLUME_TTL_MS, TASK_VOLUME_BOUND_MS, DRIVER_HANDOVER_MS, DRIVER_METRICS_PORT. All are optional.
CLI:@bellows-ai/bellows-cli@0.0.9 publishes under latest.
Validation
CI green on the release commit. Identical runtime code to v0.0.9-rc-4: the only commit after it removes marketing sources.
v0.0.9-rc-4 deployed to a no-EFS EKS stage install with per-thread EBS task volumes, running tasks end to end. The EKS failure-matrix walk was recorded on that stage (#779, #968).
Kind lane 536/0 and test:jobs 342/0 on main for #905.
Known limits
CVE-2026-109869 (undici, inside npm's own vendored tree in the executor images, not reachable at runtime) is in .trivyignore until an npm release vendors undici 6.29.1. Revisit 2026-11-24.
The dashboard stays at one replica (#913).
A workflow wait's re-entry can drop activity that arrived during the previous continuation (#937).
Kind-lane exit cleanup can hang on an API stall (#948).
Load-sensitive timeouts remain in npm test (#972).
Close-time session readouts still run as aux Jobs (#882).
The Atlassian CLI is not yet mirrored and pinned (#384).