feat(deploy): gate claims on pinned runtime readiness

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:08:37 +02:00
parent d00ffcb402
commit 4310c15eac
17 changed files with 757 additions and 10 deletions

View file

@ -53,7 +53,9 @@ semantics.
| Path | Role |
|------|------|
| `Containerfile` | Image: Python CLI + git + openssh; optional vendored llm-connect |
| `runtime-contract-lock.json` | Exact sibling source revisions and cross-service contract pins |
| `deploy/k8s/railiance/` | Namespace, ConfigMap, Deployment, smoke Job |
| `deploy/scripts/install-pinned-runtime.sh` | Frozen, non-editable host runtime installation |
| `deploy/scripts/railiance-smoke.sh` | Host e2e: clone sandbox → commit → push → hub |
| `rein-aharness smoke` | Deterministic smoke (no Claude Code required) |
@ -62,10 +64,28 @@ semantics.
- Lane 2 deploy key on host + Forgejo write on `coulomb/executor-sandbox`
- Lane 3 AppRole under `~/.local/rein-aharness/approle-binky-mail`
- `source ~/.local/rein-aharness/env`
- `uv` for the frozen host runtime installation
- Hub: `http://127.0.0.1:18000` (ops-bridge) or in-cluster `state-hub.state-hub.svc`
- While profile-absent tenant definitions remain, set a reviewed ISO expiry in
`AGENT_HARNESS_LEGACY_APPROACHES_UNTIL`. The checked-in example expires
2026-12-31; missing or expired values refuse compatibility dispatch.
- Before enabling a profiled definition, list its exact `profile@version` in
`AGENT_HARNESS_REQUIRED_PROFILE_REFS`. Service startup then requires Glas
operational readiness and exercises bwrap/AppArmor for local profiles.
- Treat any `preflight` failure or close-outbox quarantine as not ready. Pending
close evidence is replayed by the first claim-loop cycle before a new claim.
Install or refresh the worker environment only from the checked-in locks:
```bash
./deploy/scripts/install-pinned-runtime.sh
make contract-test
./deploy/scripts/install-claim-loop-user.sh
```
The installer rejects a missing, dirty, or revision-mismatched llm-connect,
Glas, or sand-boxer sibling and uses `uv sync --frozen --no-editable` so the
service does not depend on mutable editable checkout state.
## Build & load image (workstation → railiance01)
@ -96,6 +116,14 @@ ssh railiance01 'bash ~/rein-aharness/deploy/scripts/railiance-smoke.sh'
Expect: local commit + push to `executor-sandbox`, hub event `harness_smoke`,
`.kaizen/metrics/coach/` on the sandbox checkout.
Before starting or restarting the authoritative service, run the same gate the
unit uses:
```bash
ssh railiance01 '~/bin/rein-aharness-claim preflight'
ssh railiance01 '~/bin/rein-aharness-claim close-outbox status'
```
## Personal follow-ups (not T06)
- At **binky cutover only**: attach the same deploy key to `coulomb/binky-control`