Implement REIN-A-0002 ops_run claim loop and approach registry.

Add activity-core ops_run client, approach selection (FI/Binky/mail/agent),
claim-loop worker with lease heartbeat, CLI run --from-ops-run and claim-loop,
install units, and docs demoting issue-core to legacy external tickets.
T05 timer cutover remains operator after five clean cycles.
This commit is contained in:
tegwick 2026-08-03 20:04:25 +02:00
parent 9644202eb2
commit 8200a672ea
15 changed files with 1807 additions and 73 deletions

View file

@ -4,7 +4,7 @@ type: workplan
title: "Ops run claim loop and approach selection"
domain: agents
repo: rein-aharness
status: ready
status: in_progress
owner: grok
topic_slug: rein-aharness
priority: high
@ -40,7 +40,7 @@ ops under WP-0022 and issue-core INTENT.
```task
id: REIN-A-0002-T01
status: todo
status: done
priority: high
state_hub_task_id: "a5e32652-ba3f-4cc5-8d41-0d9f3022c50e"
```
@ -62,7 +62,7 @@ Map ops_run → existing `TaskSpec` (or thin OpsRunSpec). Tests with httpx mock.
```task
id: REIN-A-0002-T02
status: todo
status: done
priority: high
state_hub_task_id: "c307b119-1bff-4d5c-a911-5b5259de5c86"
```
@ -88,7 +88,7 @@ agent session; structured llm-connect before open-ended coding agent).
```task
id: REIN-A-0002-T03
status: todo
status: done
priority: high
state_hub_task_id: "31fb7df3-83a3-4f18-a7b9-9be49e226837"
```
@ -107,17 +107,17 @@ state_hub_task_id: "31fb7df3-83a3-4f18-a7b9-9be49e226837"
```task
id: REIN-A-0002-T04
status: todo
status: done
priority: high
state_hub_task_id: "93190150-4df7-47f4-b52e-29b997f9aaf0"
```
- Ensure definition labels include approach keys (`research-brief`, `automated`, …).
- Wire `AGENT_HARNESS_REPO_MAP` / roots for `freedom-intelligence`, `binky-control`.
- Document railiance install of claim-loop service.
- FI labels already include `research-brief` + `automated`.
- `AGENT_HARNESS_REPO_MAP` documented in claim-loop.env.example + ops-run-claim-loop.md.
- Install: `deploy/scripts/install-claim-loop-user.sh`.
**Done when:** end-to-end: trigger FI def → ops_run claimed → brief path +
`fi_daily_brief` (or skip if not due).
**Prod e2e** (operator after WP-0026-T07 migrate): trigger FI → claim-loop once →
`fi_daily_brief`. Code path + install docs landed.
---
@ -130,12 +130,14 @@ priority: medium
state_hub_task_id: "a04a98e3-ca6a-4a18-b6fd-47a77047ca90"
```
After **5 clean weekday cycles** (or 5 forced triggers):
**Procedure landed:** `deploy/docs/timer-cutover.md` + FI `docs/recurrence-ops.md`
updated for claim-loop primary / timer break-glass.
1. Disable FI + Binky host oneshot timers **or** set them to “poll once if queue
backlog” only.
2. Update domain `OperatingRhythm.md` / `docs/recurrence-ops.md`.
3. Keep install scripts with break-glass section.
Still open on railiance:
1. Fill proof table (5 clean cycles).
2. Disable FI + Binky host oneshot timers.
3. Keep install scripts for break-glass.
**Done when:** docs + railiance state match; dual-clock residual closed for FI/Binky.
@ -145,7 +147,7 @@ After **5 clean weekday cycles** (or 5 forced triggers):
```task
id: REIN-A-0002-T06
status: todo
status: done
priority: medium
state_hub_task_id: "cca10835-d6fc-4ce1-a361-d2d1f2693872"
```
@ -158,10 +160,13 @@ state_hub_task_id: "cca10835-d6fc-4ce1-a361-d2d1f2693872"
## Acceptance
- [ ] Claim loop does not require Forgejo or issue-core for FI/Binky ops
- [ ] Approach table selects fi-research-brief / brief-daily without host “schedule”
- [ ] Timers demoted after proof window
- [ ] ACT-ADR-005 / ACTIVITY-WP-0026 contracts implemented
- [x] Claim loop does not require Forgejo or issue-core for FI/Binky ops
- [x] Approach table selects fi-research-brief / brief-daily without host “schedule”
- [ ] Timers demoted after proof window (**T05** operator)
- [x] ACT-ADR-005 / ACTIVITY-WP-0026 contracts implemented
**Shipped:** `ops_run_client`, `approaches`, `claim_loop`, CLI `claim-loop` /
`run --from-ops-run` / `poll --source=ops-run`, unit tests, install + cutover docs.
## Out of scope