activity-core/workplans/ACTIVITY-WP-0029-hub-port-alignment.md
codex 1fa9dc18ab
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 1s
fix(workplans): adopt ADR-007 derived identifiers for unregistered records
These workplans exist only in the retired local hub. Their random pre-ADR-007
identifiers are refused by C-06 as stale references, so they cannot be
registered. Deriving from the canonical record id takes no identity from
anything: central does not hold them and the old ids die with the cache.

Records central already holds were deliberately left untouched.

Refs CUST-WP-0068-T06

Assistant: claude-code
Assistant-Model: opus
Assistant-Process: 2583210@bnt-lap001
Assistant-Session: f2bff2d5-e9b2-4338-92ca-10282a927006
2026-08-25 20:05:21 +02:00

154 lines
6.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
id: ACTIVITY-WP-0029
type: workplan
title: "Hub port and schedule alignment for State Hub retirement"
domain: infotech
repo: activity-core
status: finished
owner: grok
topic_slug: infotech
created: "2026-08-09"
updated: "2026-08-22"
parent_project: prj-state-hub-retirement
parent_workplan: SHR-WP-0001
stream: S5
related:
- ACTIVITY-WP-0015
- ACTIVITY-WP-0017
- ACTIVITY-WP-0026
- HUB-WP-0004
- RMGR-WP-0001
- STATE-WP-0079
- CORE-WP-0010
- SHR-ARCH-HUB-0001
state_hub_workstream_id: "0890b1cf-fed0-5c5e-8f7a-d5799b997532"
---
# Hub port and schedule alignment for State Hub retirement
## Goal
Align activity-core **schedules, sinks, and the execution-queue boundary** with
the postState Hub owners so this repo stays the Event Bridge (when / what /
where) and does not absorb work that now has a clearer home.
Reviewed 2026-08-18 against `prj-state-hub-retirement` (SHR-ARCH-HUB-0001,
SHR-INV-0001, child-workplan map S5), `repo-manager` INTENT,
`info-tech-canon` (Task / Organization / Governance / Repository Layout),
and `policy-nexus` INTENT.
## Responsibility map
activity-core **owns** schedule fire, rule/instruction evaluation, bounded
declared side-effects, spawn/run evidence, and the **ops_run claim queue**
(ACTIVITY-WP-0026). It does not own the things it currently *calls*.
| Concern | Owner | activity-core role |
| --- | --- | --- |
| Cron / event / one-shot fire | **activity-core** | Authority |
| Ops-run claim / lease | **activity-core** | Authority (not a task database) |
| Work-item semantics (Task, Commitment, TaskState) | **info-tech-canon** | Consume vocabulary; do not redefine |
| Who is responsible / accountable | **info-tech-canon** Organization Model | Do not invent org roles here |
| Policy *content* (canon, ADRs) | Owning repo | Local files stay source of truth |
| Policy *publication* | **policy-nexus** | Do not publish or host policy |
| Regulatory interpretation | **risk-nexus** | Out of scope |
| Repo registry, file↔index consistency, work-record index | **repo-manager** | Schedule the sweep; do not own C-rules |
| Messages, progress projections, hub ports | **hub-core** (surviving runtime) | Sink / consume after HUB-WP-0004 |
| core-hub `/api/v2` | **CORE-WP-0010** → absorbed into hub-core | Temporary dual-run only |
| Issue projection | **issue-core** | Optional `ISSUE_SINK_TYPE=rest` |
| State Hub routes used today | **STATE-WP-0079** strangler | Compatibility until cutover |
Naming: **hub-core** is the surviving framework *and* runtime
(SHR-ARCH-HUB-0001). **core-hub** is the current production host to be
archived. Do not treat them as interchangeable, and do not add permanent
authorities on State Hub.
Inventory split that T02 must honour (`job:consistency-sweep-remote-all`):
activity-core **stays the executor**; the reconciliation engine **moves** to
repo-manager (`route:POST:/consistency/sweep/remote-all`, disposition `move`).
T04 is a **replace** of State Hub `/execution/*` onto activity-core. That is
**schedule / launch / ops_run** ownership, not workplan file authority (repos)
and not task lifecycle (issue-core / work records / ITC Task Model).
Out of this workplan: SBOM catch-up (CUST-WP-0062 / ACTIVITY-WP-0030, parked).
## Map current State Hub / hub-core callers
```task
id: ACTIVITY-WP-0029-T01
status: done
priority: high
state_hub_task_id: "eef44f5f-1866-5539-adcf-661eeca2419b"
```
Inventory schedules, sinks, and context resolvers that call State Hub or
core-hub APIs. For each caller record: current URL, SHR-INV item if any,
**target owner** (table above), and target port when HUB-WP-0004 has named it
(`port.schedule` is ours to consume, not to invent in hub-core).
Do not retarget a caller to activity-core just because we schedule it.
## Retarget consistency sweep
```task
id: ACTIVITY-WP-0029-T02
status: done
priority: high
state_hub_task_id: "13465801-fe1c-519c-935e-652376b6126a"
```
Keep the activity-core schedule. Point the remote sweep at **repo-manager**
(or the existing State Hub dual-run adapter until RMGR cutover) without losing
C-rule coverage. RMGR-WP-0001 is finished; do not re-implement consistency
inside this repo.
## Align ops evidence sink
```task
id: ACTIVITY-WP-0029-T03
status: done
priority: medium
state_hub_task_id: "2d21912e-32af-5baa-b9f3-ec059d4aa69e"
```
HUB-WP-0004 finished and hub-core became production authority on 2026-08-21.
Activity-core now implements `hub-core-interaction-event` against canonical
`POST /ports/events/interaction`, then verifies the accepted id through
`GET /ports/projections/interaction_events`. The Railiance projection points
`HUB_CORE_BASE_URL` at the in-cluster hub-core runtime and uses this sink; it
does not require the legacy Core Hub widget mapping/runtime-token contract.
The old `core-hub-interaction-event` compatibility sink remains available for
the no-writer rollback window, but is no longer the configured probe path.
General progress callers not yet moved by the retirement strangler continue to
use the State Hub beachhead rather than creating another permanent authority.
Unit and deployment-wiring tests cover catalog envelope shape, readback,
sanitization, missing configuration, and the in-cluster target. A disposable
integration smoke against hub-core 0.2.0 returned `202 Accepted` from the
canonical interaction port and verified the new event through the interaction
projection.
## Execution queue boundary
```task
id: ACTIVITY-WP-0029-T04
status: done
priority: medium
state_hub_task_id: "fc67e34c-25a1-5c3a-9766-fb79c76aef00"
```
Document the contract first, then replace State Hub `/execution/*` callers
with activity-core (ops_run / launch), matching SHR-INV
`workplan-execution-queue`. Explicit non-goals: repo-manager work-record
index, issue-core lifecycle, ITC Task Model types, policy-nexus publication.
## Acceptance
- [x] Caller map lists owner + current URL for every State Hub / core-hub call
(`docs/state-hub-caller-map.md`)
- [x] Sweep still fires from activity-core and hits repo-manager (or dual-run)
(`CONSISTENCY_SWEEP_URL` / `REPO_MANAGER_URL`; default State Hub adapter)
- [x] Ops evidence uses hub-core's canonical interaction port; the legacy Core Hub sink is rollback-only
- [x] Execution boundary is written so `/execution/*` cannot be read as "activity-core owns tasks"
(`docs/execution-queue-boundary.md`, `GET /execution/semantics`, 410 on workplan routes)