state-hub/dashboard/observablehq.config.js

35 lines
1.5 KiB
JavaScript
Raw Normal View History

export default {
root: "src",
title: "Custodian State Hub",
pages: [
{ name: "Overview", path: "/" },
{ name: "Workstreams", path: "/workstreams" },
{ name: "Tasks", path: "/tasks" },
{ name: "Decisions", path: "/decisions" },
{ name: "Progress", path: "/progress" },
feat(state-hub): implement v0.5 — dynamic domains & multi-repo Replaces the hardcoded 6-domain PostgreSQL ENUM with a first-class `domains` DB table, and adds a `managed_repos` table for multi-repo support per domain. P1 — Domain as a DB entity: - Migration b1c2d3e4f5a6: creates `domains` table, migrates topics.domain ENUM column to domain_id FK, drops the domain ENUM type - Domain ORM model (api/models/domain.py) + Pydantic schemas - Domain API router: GET/POST /domains/, GET/PATCH /domains/{slug}/, rename and archive endpoints with EP/TD cascade on rename - Topic model updated: domain_id FK + @property domain_slug for backwards-compatible JSON serialization (field renamed domain → domain_slug) - TopicCreate/TopicRead updated; seed.py rewritten to use FK lookup P2 — Multi-repo support: - ManagedRepo ORM model (api/models/managed_repo.py) + schemas - Repo API router: GET/POST /repos/, GET/PATCH /repos/{slug}/, archive - Makefile: add-domain, rename-domain, add-repo, list-repos targets - register_project.sh: verify domain via /domains/ API + POST /repos/ P3 — MCP tools & live validation: - 6 new MCP tools: list_domains, create_domain, rename_domain, archive_domain, list_domain_repos, register_repo - EP/TD routers: replace hardcoded VALID_DOMAINS set with per-request DB lookup — returns 422 with list of valid slugs on unknown domain - State summary: adds domains: list[DomainSummary] (slug, name, repo_count, active_workstream_count, ep_count, td_count) - TOOLS.md updated with domain management section P4 — Dashboard: - New domains.md page with KPI row + domain cards + repo lists - domains.json.py + repos.json.py data loaders - Domains page added to observablehq.config.js nav - workstreams.md, extensions.md, techdept.md: domain_slug fix + dynamic domain list loaded from /domains/ API (no longer hardcoded) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-02-28 15:20:15 +01:00
{ name: "Domains", path: "/domains" },
{ name: "Repos", path: "/repos" },
{ name: "Extension Points", path: "/extensions" },
{ name: "Technical Debt", path: "/techdept" },
{ name: "Contributions", path: "/contributions" },
{ name: "SBOM", path: "/sbom" },
{
name: "Reference",
collapsible: true,
pages: [
{ name: "Decision Health", path: "/docs/decisions-kpi" },
{ name: "Decisions", path: "/docs/decisions" },
{ name: "Inter-Repo Communication", path: "/docs/inter-repo-communication" },
{ name: "Live Data", path: "/docs/live-data" },
{ name: "Progress Log", path: "/docs/progress-log" },
{ name: "SBOM", path: "/docs/sbom" },
{ name: "Workstream Health", path: "/docs/workstream-health-index" },
{ name: "Workstreams", path: "/docs/workstreams" },
],
},
],
theme: ["air", "near-midnight"],
head: `<link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🗄️</text></svg>">`,
footer: "Custodian State Hub — local-first, append-only, sovereignty-preserving.",
};