CORE-WP-0005-T04 prerequisites resolved: seed full Inter-Hub vocabulary; keep /hubs protected (ops-hub gate expects 401)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-03 01:39:45 +02:00
parent 0a23c9a9b4
commit a33191ab3a
2 changed files with 75 additions and 0 deletions

View File

@@ -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 = [

View File

@@ -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