diff --git a/src/core_hub/seeds.py b/src/core_hub/seeds.py index bf78096..b94bd6a 100644 --- a/src/core_hub/seeds.py +++ b/src/core_hub/seeds.py @@ -35,12 +35,69 @@ WIDGET_TYPES = [ CatalogItem(slug="status-summary", name="Status Summary"), CatalogItem(slug="workplan-board", name="Workplan Board"), CatalogItem(slug="event-stream", name="Event Stream"), + # Inter-Hub compatibility vocabulary (CORE-WP-0005-T04 prerequisite 1): + # the full legacy widget_type_registry so migrated widgets stay + # referentially complete and legacy catalog consumers see a superset. + CatalogItem(slug="action", name="Action Control", description="Button, link, or trigger widget"), + CatalogItem(slug="chart", name="Chart", description="Data visualisation chart widget"), + CatalogItem(slug="chat", name="Chat Region", description="Conversational interaction region"), + CatalogItem(slug="diff", name="Diff / Review", description="Code diff or change review element"), + CatalogItem(slug="form", name="Form", description="Data entry form widget"), + CatalogItem(slug="ops-backup-set", name="ops-backup-set"), + CatalogItem(slug="ops-cluster", name="ops-cluster"), + CatalogItem(slug="ops-endpoint", name="ops-endpoint"), + CatalogItem(slug="ops-environment", name="ops-environment"), + CatalogItem(slug="ops-host", name="ops-host"), + CatalogItem(slug="ops-incident", name="ops-incident"), + CatalogItem(slug="ops-migration-wave", name="ops-migration-wave"), + CatalogItem(slug="ops-readiness-gate", name="ops-readiness-gate"), + CatalogItem(slug="ops-release", name="ops-release"), + CatalogItem(slug="ops-risk", name="ops-risk"), + CatalogItem(slug="ops-runbook", name="ops-runbook"), + CatalogItem(slug="ops-secret-set", name="ops-secret-set"), + CatalogItem(slug="ops-service", name="ops-service"), + CatalogItem(slug="ops-service-catalog", name="ops-service-catalog"), + CatalogItem(slug="panel", name="Status Panel", description="Summary or status information panel"), + CatalogItem(slug="recommendation", name="Recommendation", description="AI or system recommendation block"), + CatalogItem(slug="table", name="Table", description="Tabular data display widget"), + CatalogItem(slug="workflow-step", name="Workflow Step", description="Single step in a multi-step workflow"), ] EVENT_TYPES = [ CatalogItem(slug="interaction.event", name="Interaction Event"), CatalogItem(slug="workplan.progress", name="Workplan Progress"), CatalogItem(slug="evidence.recorded", name="Evidence Recorded"), + # Inter-Hub compatibility vocabulary (see WIDGET_TYPES note). + CatalogItem(slug="abandoned", name="Abandoned"), + CatalogItem(slug="accepted_recommendation", name="Accepted Recommendation"), + CatalogItem(slug="blocked_by_policy", name="Blocked by Policy"), + CatalogItem(slug="clicked", name="Clicked"), + CatalogItem(slug="commented", name="Commented"), + CatalogItem(slug="escalated", name="Escalated"), + CatalogItem(slug="failed", name="Failed"), + CatalogItem(slug="flagged_confusing", name="Flagged Confusing"), + CatalogItem(slug="flagged_helpful", name="Flagged Helpful"), + CatalogItem(slug="focused", name="Focused"), + CatalogItem(slug="ops-backup-verified", name="ops-backup-verified"), + CatalogItem(slug="ops-drift-detected", name="ops-drift-detected"), + CatalogItem(slug="ops-endpoint-verified", name="ops-endpoint-verified"), + CatalogItem(slug="ops-health-checked", name="ops-health-checked"), + CatalogItem(slug="ops-inventory-registered", name="ops-inventory-registered"), + CatalogItem(slug="ops-inventory-updated", name="ops-inventory-updated"), + CatalogItem(slug="ops-migration-gate-failed", name="ops-migration-gate-failed"), + CatalogItem(slug="ops-migration-gate-passed", name="ops-migration-gate-passed"), + CatalogItem(slug="ops-readiness-gate-updated", name="ops-readiness-gate-updated"), + CatalogItem(slug="ops-release-observed", name="ops-release-observed"), + CatalogItem(slug="ops-restore-tested", name="ops-restore-tested"), + CatalogItem(slug="ops-risk-accepted", name="ops-risk-accepted"), + CatalogItem(slug="ops-risk-raised", name="ops-risk-raised"), + CatalogItem(slug="ops-runbook-executed", name="ops-runbook-executed"), + CatalogItem(slug="ops-service-discovered", name="ops-service-discovered"), + CatalogItem(slug="rejected_recommendation", name="Rejected Recommendation"), + CatalogItem(slug="retracted", name="Retracted"), + CatalogItem(slug="retried", name="Retried"), + CatalogItem(slug="submitted", name="Submitted"), + CatalogItem(slug="viewed", name="Viewed"), ] ANNOTATION_CATEGORIES = [ diff --git a/workplans/CORE-WP-0005-data-migration-and-cutover.md b/workplans/CORE-WP-0005-data-migration-and-cutover.md index 28889db..21d8a9b 100644 --- a/workplans/CORE-WP-0005-data-migration-and-cutover.md +++ b/workplans/CORE-WP-0005-data-migration-and-cutover.md @@ -82,6 +82,24 @@ With operator approval, switch production traffic such as `hub.coulomb.social` t list must gain a token before cutover. 3. Operator approval + rollback plan (existing gate). +**Prerequisite resolutions 2026-07-03:** + +1. **Catalog gap — resolved by seeding.** Core Hub's catalogs are static + in-code seeds (`seeds.py`), not DB registries, so extending the migration + bundle schema was the wrong shape. Seeded the complete Inter-Hub + vocabulary instead (23 widget types incl. all 7 orphaned `ops-*` types, + 30 event types) as an explicit Inter-Hub-compatibility block; existing + Core Hub seeds retained. 22 tests pass. Migrated widgets are + referentially complete once the new image ships. +2. **Auth posture — resolved by keeping Core Hub protected.** Consumer + audit found only two `/api/v2/hubs` status consumers: + `ops-hub/interhub_gate_probe.py` **asserts 401** (it encodes the desired + hardened contract and currently fails against Inter-Hub production, + which serves 200), and `railiance-forge/tools/gitea-runner-status.sh` + is informational. No anonymous consumer depends on a 200. Core Hub's + protected listing is therefore an intentional hardening that satisfies + the ops-hub gate at cutover; no code change made. + ## Progress 2026-07-02 — staging import completed