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

6.3 KiB
Raw Blame History

id type title domain repo status owner topic_slug created updated parent_project parent_workplan stream related state_hub_workstream_id
ACTIVITY-WP-0029 workplan Hub port and schedule alignment for State Hub retirement infotech activity-core finished grok infotech 2026-08-09 2026-08-22 prj-state-hub-retirement SHR-WP-0001 S5
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
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

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

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

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

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

  • Caller map lists owner + current URL for every State Hub / core-hub call (docs/state-hub-caller-map.md)
  • Sweep still fires from activity-core and hits repo-manager (or dual-run) (CONSISTENCY_SWEEP_URL / REPO_MANAGER_URL; default State Hub adapter)
  • Ops evidence uses hub-core's canonical interaction port; the legacy Core Hub sink is rollback-only
  • 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)