# Ops Hub Activity-Core Fallback Validation Date: 2026-06-15 Workplan: `IHUB-WP-0022` ## Validation Result The State Hub fallback path is implemented and tested in activity-core, but no live fallback event exists in State Hub yet. Direct query: ```text GET http://127.0.0.1:8000/progress/?event_type=ops_inventory_probe&limit=20 ``` Observed result on 2026-06-15: ```json [] ``` This means Inter-Hub can accept the fallback-first design, but cannot yet cite live `ops_inventory_probe` evidence as a closure artifact. ## What Is Validated Activity-core local tests validate the fallback sink shape: - `state-hub-progress` posts one compact `ops_inventory_probe` progress event per run. - The fallback idempotency key is stable: `activity_core_run_id:context_key:ops_inventory_probe`. - The posted summary is compact, for example: `Ops inventory probe: 1 ok, 0 degraded, 0 down, 1 skipped`. - The detail includes `activity_id`, `activity_core_run_id`, `scheduled_for`, `source_type`, `context_key`, `idempotency_key`, and a compact `probe` payload. - The compact probe strips response bodies, authorization headers, credentials, URL query strings, and token-like values. - Inter-Hub sink config absence is a clean skip with `reason = missing_inter_hub_config`. - When config is present but submission is not implemented, the result is a clean skip with `reason = inter_hub_sink_deferred`. ## What Is Not Yet Validated - No live activity-core worker has posted an `ops_inventory_probe` event to the local State Hub instance. - No live Inter-Hub event has been submitted from activity-core. - No production `OPS_HUB_KEY` handoff has been verified. - No `OPS_HUB_WIDGET_MAPPING` has been deployed into the activity-core runtime. - No per-entity widget mapping has been smoke-tested against production ops-hub widgets. ## Gaps Compared With Inter-Hub Submission State Hub fallback is useful as continuity evidence, but it is not a full replacement for Inter-Hub submission: - It records one compact run summary, not one governed widget event per entity. - It cannot attach annotations directly to the affected service or endpoint widget. - It does not prove ops-hub manifest vocabulary enforcement. - It does not prove API consumer, key, rate-limit, or widget mapping behavior. - It does not populate Inter-Hub event lists for hub dashboards or downstream widget governance workflows. ## Closure Recommendation `ACTIVITY-WP-0007/T06` should not close as fully activated based on the current State Hub state, because no live `ops_inventory_probe` progress event exists. Two acceptable closure paths remain: 1. Fallback-deferred closure: run one disabled/manual activity-core probe, confirm a live non-secret `ops_inventory_probe` progress event in State Hub, and explicitly record that Inter-Hub submission is deferred until `IHUB-WP-0022-T03/T04/T07` complete. 2. Full Inter-Hub closure: provision `OPS_HUB_KEY`, deploy `OPS_HUB_WIDGET_MAPPING`, seed/verify the ops-hub widgets, and submit one accepted Inter-Hub event per activity-core event type. Until one of those paths is satisfied, Inter-Hub should keep the activity-core closure gate open. ## Next Evidence To Capture - Progress id for the first live `ops_inventory_probe` event. - Non-secret summary counts from that progress detail. - Confirmation that Inter-Hub sink remains skipped cleanly while config is absent or deferred. - After ops-hub activation, event ids for one accepted Inter-Hub submission per event type.