feat(runtime): heartbeat immediately after claim
Some checks failed
Governed runtime contract / contract (push) Failing after 1s
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:
parent
4310c15eac
commit
44f5bb9d88
7 changed files with 242 additions and 11 deletions
|
|
@ -14,6 +14,7 @@ activity-core emit_tasks
|
|||
▼
|
||||
rein-aharness claim-loop
|
||||
POST /ops-runs/claim
|
||||
POST /ops-runs/{id}/heartbeat (immediate ownership proof; fail closed)
|
||||
harness_profile_ref present? ─ yes → Glas ExecutionRequest → gateway
|
||||
│ no
|
||||
└─→ select_approach(labels, definition, hint) → legacy executor
|
||||
|
|
@ -41,9 +42,11 @@ Profile-absent rows keep the legacy coexistence path, but cannot carry a grant.
|
|||
| `AGENT_HARNESS_OPS_LABELS_MODE` | `any` | `any` or `all` |
|
||||
| `AGENT_HARNESS_OPS_LEASE_SECONDS` | `900` | claim lease |
|
||||
| `AGENT_HARNESS_CLAIM_INTERVAL` | `30` | empty-queue poll interval |
|
||||
| `AGENT_HARNESS_REQUIRED_PROFILE_REFS` | unset | comma-separated exact production `profile@version` refs checked at startup |
|
||||
| `AGENT_HARNESS_LEGACY_APPROACHES_UNTIL` | unset | ISO expiry date required for profile-absent compatibility routing |
|
||||
| `AGENT_HARNESS_REPO_MAP` | `{}` | JSON slug→checkout path |
|
||||
| `AGENT_HARNESS_REPO_ROOTS` | `~:~/work` | slug search roots |
|
||||
| `REIN_AHARNESS_STATE_DIR` | user state directory | private repository-lock, metrics, and close-outbox state |
|
||||
|
||||
Example map on railiance01:
|
||||
|
||||
|
|
@ -154,6 +157,19 @@ Glas, sand-boxer, and llm-connect before running the contract/claim suites, so
|
|||
the optional `pytest.importorskip` development behavior cannot turn a missing
|
||||
production dependency into a green release result.
|
||||
|
||||
Forgejo runs the same gate from
|
||||
`.forgejo/workflows/runtime-contract.yaml` on every main push. It follows the
|
||||
estate runner contract (direct clone, no `actions/checkout`), detaches every
|
||||
sibling at the revision declared in the runtime lock, applies the frozen uv
|
||||
resolution, and needs no deployment or cluster credential.
|
||||
|
||||
`make recovery-test` is the deterministic pre-deploy recovery gate. It covers
|
||||
initial and periodic lease rejection, adapter cancellation, repository-lock
|
||||
release, response-lost close reconciliation, pending-close claim blocking,
|
||||
every permanent Activity Core close code (including `expired_lease`), and Glas
|
||||
cancellation. It does not replace the isolated expired-row API smoke or the
|
||||
natural-run and sandbox-cleanup observations required from the deployed host.
|
||||
|
||||
### Host access to cluster services (no port-forward)
|
||||
|
||||
On railiance01 (single-node k3s), set **k8s://** pseudo-URLs in
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue