feat(runtime): heartbeat immediately after claim
Some checks failed
Governed runtime contract / contract (push) Failing after 1s

Assistant: codex
Assistant-Model: gpt-5.6-sol
Assistant-Session: 01a06ba0-10aa-7ea0-b20a-4f3fac39efe9
This commit is contained in:
tegwick 2026-09-04 20:38:01 +02:00
parent 4310c15eac
commit 44f5bb9d88
7 changed files with 242 additions and 11 deletions

View file

@ -585,10 +585,33 @@ uses the frozen uv lock with `--no-editable`. `make contract-test` first imports
all three runtime packages and then runs the cross-package contract/claim
suites, making a missing optional dependency a hard release failure.
T05 remains `progress`: the non-skippable gate still needs CI-runner wiring,
the compatible Activity Core artifact and migration need deployment evidence,
and the documented crash/lease/API-close/sandbox cleanup recovery drills remain
to be executed against the pinned host artifact.
Wired the non-skippable gate into Forgejo Actions on the canonical `self-hosted`
runner label. The workflow uses direct Git clones because the estate host runner
does not support `actions/checkout`, detaches each runtime sibling at the locked
revision, and needs no deployment or cluster credential.
T05 remains `progress`: the compatible Activity Core artifact and migration
need deployment evidence, and the documented crash/lease/API-close/sandbox
cleanup recovery drills remain to be executed against the pinned host artifact.
### Observable lease acceptance — 2026-09-04
Activity Core production evidence showed normal jobs finish before the first
periodic heartbeat interval. The worker now sends one authenticated heartbeat
immediately after claim and before route selection or execution, then retains
the existing periodic heartbeat for longer work. Any initial heartbeat failure
refuses dispatch; a 409 is recorded as pre-dispatch lease loss and neither work
nor terminal close is attempted. Unit coverage proves claim → heartbeat →
execute → close ordering and the 409 fail-closed case.
The deterministic recovery gate passes 13 lease/cancellation/lock/outbox cases,
the non-skippable cross-package gate passes 51 cases, and the complete suite
passes 255 tests without skips.
Source is ready for the requested bounded production observation. Revision,
deployment, and the next natural claim → active heartbeat → terminal run id
will be returned to Activity Core after this change is published and deployed;
no real workload will be delayed or expired to manufacture evidence.
## Re-prove one governed profiled run and close residuals