Publish ecosystem architecture, event mapping, capability bridge, and async-base decision docs; add cross-repo regression script; update extraction boundary and bootstrap status; archive WP-0058 touch-ups.
4.8 KiB
4.8 KiB
Hub Ecosystem Architecture
Updated: 2026-07-09
Workplan: CUST-WP-0057
Status: Active decision record
Purpose
Define how hub-core, state-hub, and core-hub compose into one FOS hub
stack. This document resolves naming confusion and entity ownership without
merging repositories.
Three-layer model
| Layer | Repo | Role | Production URL |
|---|---|---|---|
| Library | hub-core |
Shared models, schemas, router factories, MCP wrapper, utils | None — pip/uv import only |
| Dev coordination | state-hub |
File-first workplans, tasks, decisions, consistency sync, dev MCP | Local / operator (127.0.0.1:8000) |
| Production framework | core-hub |
Inter-Hub successor: hubs, manifests, widgets, /api/v2, operator console |
hub.coulomb.social |
┌─────────────────┐
│ core-hub │ Production framework (/api/v2)
│ (async service)│
└────────┬────────┘
│ imports utils; HTTP bridge to dev data (future)
┌──────────────┼──────────────┐
▼ ▼ ▼
┌────────────┐ ┌────────────┐ ┌────────────┐
│ hub-core │◄─│ state-hub │ │ ops-hub │
│ (library) │ │ (dev host) │ │ (consumer) │
└────────────┘ └────────────┘ └────────────┘
Naming glossary
| Name | What it is | What it is not |
|---|---|---|
| hub-core | Python package hub_core — library boundary |
A running hub service |
| core-hub | Production interaction framework service | The shared library |
| state-hub | Dev coordination host (State Hub / dev-hub) | The Inter-Hub /api/v2 framework |
Mnemonic: hub-core = core primitives; core-hub = core framework runtime.
Canonical entity ownership
| Entity family | Canonical owner | Notes |
|---|---|---|
domains, managed_repos (registry) |
hub-core models; state-hub host |
core-hub uses hubs table — see capability bridge doc |
agent_messages |
hub-core + state-hub |
core-hub does not duplicate; reads via State Hub API when needed |
progress_events |
hub-core + state-hub |
Dev coordination audit trail |
interaction_events |
core-hub |
Widget-scoped ops evidence (/api/v2/interaction-events) |
capability_catalog, capability_requests |
hub-core + state-hub |
Maturity and workflow lane |
hub_capability_manifests |
core-hub |
Inter-Hub manifest contract |
hubs, widgets, api_consumers, api_keys |
core-hub |
Framework registry only |
workplans, tasks, decisions |
state-hub |
File-first authority; core-hub may index later |
tpsc_*, policy documents |
hub-core + state-hub |
core-hub references evidence, does not reimplement |
| Slug/pagination/path utils | hub-core |
All hosts import; no local duplicates |
Governing decisions
- Compose, do not merge — three repos remain; shared code moves into
hub-core. - hub-core stays a library — no
uvicornentrypoint, no K8s manifests. - core-hub owns
/api/v2— Inter-Hub compatibility is non-negotiable for ops-hub and activity-core. - state-hub owns dev coordination — workplan files remain source of truth until a recorded ADR says otherwise.
- Separate SQLAlchemy metadata — each runtime keeps its own
Base; router factories inject host models. - Incremental adoption — core-hub adopts hub-core utilities first; framework models stay local.
Integration contracts
| From | To | Mechanism | Status |
|---|---|---|---|
state-hub |
hub-core |
Editable package import | Done (CUST-WP-0048) |
core-hub |
hub-core |
Editable package import (utils) | In progress (CORE-WP-0009) |
core-hub |
state-hub |
HTTP read APIs for progress/messages | Deferred (STATE-WP-0070) |
ops-hub |
core-hub |
/api/v2 bootstrap |
Production |
| Agents | state-hub |
dev-hub MCP | Production |
| Operators | core-hub |
Operator CLI + console | Production |
See also:
hub-ecosystem-event-mapping.md— progress vs interaction eventshub-ecosystem-capability-bridge.md— catalog vs manifest IDshub-core-extraction-boundary.md— library extraction history
Non-goals
- Renaming
hub-coreorcore-hubrepositories - Moving State Hub workplan tables into core-hub in this lane
- Replacing core-hub
/api/v2with state-hub routes - Publishing hub-core to public PyPI (path/editable deps remain fine)