Records absent from central carried random pre-ADR-007 identifiers minted by the retired local hub, which C-06 refused as stale references. Deriving from the canonical record id takes no identity from anything. Refs CUST-WP-0068-T06 Assistant: claude-code Assistant-Model: opus Assistant-Process: 2583210@bnt-lap001 Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
5.4 KiB
| id | type | title | domain | repo | status | owner | topic_slug | priority | created | updated | depends_on | related | state_hub_workstream_id | |||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| REIN-A-0002 | workplan | Ops run claim loop and approach selection | agents | rein-aharness | finished | grok | rein-aharness | high | 2026-08-03 | 2026-08-08 |
|
|
3eb24fcc-cc44-5012-8d67-f95847c69ba7 |
REIN-A-0002 — Ops run claim loop and approach selection
Origin
ACT-ADR-005. Closes the dual-clock residual: host systemd timers currently
execute Binky/FI while activity-core schedules separately. rein-aharness already
polls issue-core (docs/task-intake.md); that path is wrong for internal
ops under WP-0022 and issue-core INTENT.
Goal
- Claim
ops_runfrom activity-core (not issue-core / not Forgejo). - Select an efficient approach (adapter table) and execute.
- Complete/fail the ops_run + domain completion events.
- Cut over FI and Binky off dual wall-clock timers once proven.
Tasks
T01 — activity-core ops_run client
id: REIN-A-0002-T01
status: done
priority: high
state_hub_task_id: "b2aa7a67-bab9-55fc-b295-d6735f5cca8d"
Client module (env: ACTIVITY_CORE_URL, worker credential):
claim(worker_id, labels=…)heartbeat/complete/fail
Map ops_run → existing TaskSpec (or thin OpsRunSpec). Tests with httpx mock.
Blocked on: ACTIVITY-WP-0026-T01 API shape (can stub against openapi draft).
Done when: unit tests green; CLI poll --source=ops-run prototype optional.
T02 — Approach registry (v1 static)
id: REIN-A-0002-T02
status: done
priority: high
state_hub_task_id: "3822d655-cb85-583f-9be9-e1711e302a4b"
Central table/config (code registry, not per-repo cron):
| Match (labels / definition id contains) | Approach command |
|---|---|
research-brief or fi-daily |
fi-research-brief |
rhythm + binky / binky-daily |
brief-daily |
mail-intake |
mail-scan then optional mail-triage |
agent-session |
run with persona/profile |
| unmatched | fail ops_run with clear reason |
Document how to add rows. Prefer cheapest correct path (deterministic before agent session; structured llm-connect before open-ended coding agent).
Done when: pure function tests for match → approach.
T03 — Continuous claim worker
id: REIN-A-0002-T03
status: done
priority: high
state_hub_task_id: "3029e2b6-4190-5f65-a8ae-1d4e7ddaa1b7"
rein-aharness claim-loop(or systemd/service unit): poll interval, lease heartbeat, concurrency 1 default.- On success: domain completion already done by approach; close ops_run.
- On failure: fail ops_run; do not silent drop.
- Metrics/log for SLA.
Done when: can run against railiance actcore-api with a test ops_run.
T04 — Map FI + Binky definitions
id: REIN-A-0002-T04
status: done
priority: high
state_hub_task_id: "5be30f7a-f710-5339-b583-93dd3be3ae5e"
- FI labels already include
research-brief+automated. AGENT_HARNESS_REPO_MAPdocumented in claim-loop.env.example + ops-run-claim-loop.md.- Install:
deploy/scripts/install-claim-loop-user.sh.
Prod e2e 2026-08-03: FI trigger → ops_run claimed by
rein-aharness@railiance01 → approach fi-research-brief → succeeded
(skipped existing brief). User unit rein-aharness-claim-loop.service active.
Proof window for timer cutover (T05) starts here.
T05 — Cutover: timers become break-glass
id: REIN-A-0002-T05
status: done
priority: medium
state_hub_task_id: "7d67dae7-997b-5cf1-bcad-0a51a563c0dd"
Procedure landed: deploy/docs/timer-cutover.md + FI docs/recurrence-ops.md
updated for claim-loop primary / timer break-glass.
Completed on railiance (verified 2026-08-08):
- Five-cycle proof table filled from production claim-loop journal (eight clean FI/Binky cycles observed in total).
- FI host timer is disabled/inactive; Binky host timer is not installed and inactive.
- Install scripts and manual service starts remain documented for break-glass.
Done when: docs + railiance state match; dual-clock residual closed for FI/Binky.
T06 — Deprecate issue-core as ops intake for automation
id: REIN-A-0002-T06
status: done
priority: medium
state_hub_task_id: "34a3fb45-7305-5a51-a13b-2feacbc29a1b"
docs/task-intake.md: issue-core poll = legacy / external ticket path only.- ops_run = primary for activity-core automation labels.
- No Gitea references; Forgejo only if mentioning self-hosted forge projection.
Done when: docs and CLI help text consistent with ACT-ADR-005.
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 (T05)
- 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.
Residual handoff: REIN-A-0003 captures the separately observed unmatched
Binky weekly-review ops run; it does not reopen the completed FI/Binky daily
cutover scope.
Out of scope
- Implementing ops_run schema (ACTIVITY-WP-0026)
- issue-core Forgejo backend fixes
- Full glas-harness multi-rein routing