PANTHEON·DOC-BIBLE-001·V1.0·2026-06-10

Pantheon App — Design Bible

Context loader for design-agent work on the fleet operator cockpit. What exists, what each page is for, where its data comes from, and what else moves when you move something.

Surface
pantheon.boas.dev · CF Pages + Access
Code
infra-pantheon · src/dashboard/
Brand
pantheon.brand.json v2.0.0
SSOT
APP-BIBLE.md @ 182c584
01

How to Use This Document

This is a context loader, not a spec, PRD, or gate. Read it before touching any pantheon dashboard page. Judgment stays with the agent; this file makes the judgment informed.

Maintenance — Same-PR Rule
Any PR that changes a route, nav item, data source, or shared component updates the bible in the same arc. Drift here is a defect.

Pre-flight ritual

  1. Read the page's charter (§05) — its job, rung, and tier.
  2. Read its "touching this affects" list — open those charters too.
  3. Check §08 Shared Components if the edit reaches layout, ui primitives, or any component named in 2+ charters.
  4. Check §10 Open Decisions — don't re-litigate a flagged decision mid-task or build against an unratified direction.
  5. Brand tokens from global.css --pantheon-* vars (v2.0.0). Never reintroduce shadcn blue or the pre-v32 mint cockpit.
02

Purpose Ladder

The app is the operator's cockpit for the Pantheon fleet. Three rungs, ranked. Every page charter names its rung — a page that can't, or claims two, is a smell (exactly what's wrong with today's SYSTEM section).

WATCH
Is anything dead or broken? What did agents do? — the 30-second morning glance
P1
ACT
What needs my decision? Where do I route work?
P2
BROWSE
State of projects, tasks, agents, resources?
P3

The four daily signals (interview 2026-06-10 — all four load-bearing)

03

Data Tiers — Load-Bearing Constraint

Production is static CF Pages. There is no hub server in prod.

TierMeaningWorks on pantheon.boas.dev?
LIVESupabase-direct PostgREST (anon key, RLS)yes
LOCALHub /api/* endpoints (Express dev server)dead in prod
STUBNotConnected sentinel, awaiting tablesrenders empty state
Constraint
Today only /status is LIVE. Every other data-bearing page is LOCAL or STUB. Tier migration direction is not Apollo's call — flagged to atlas/proteus (D3). Until ruled: new pages SHOULD be LIVE-tier where tables exist; do not silently convert existing LOCAL pages.
04

Information Architecture

Current nav — as shipped (NavRail.tsx:11–35)

COMMAND        Portfolio (/) · Review (/review) · War Room (/war-room)
CONSTELLATION  Athena · Metis · Hermes · Apollo · Hades · Proteus · Plutus · Mnemosyne · Atlas
SYSTEM         Status (/status) · Fleet (/fleet) · Dependencies (/dependencies)
               · Dispatch (/dispatch) · System (/system)
Known defect
SYSTEM's five pages divide by data source, not by user question — Status, Fleet, and System all partially answer "is the fleet healthy?"; Dispatch mixes watching (log) with acting (ask-human queue); Dependencies is a stub.

Proposed IA PROPOSED — D1, pending ratification

Groups renamed to the question they answer. Maps 1:1 onto the four daily signals. Until D1 is ratified, the current nav is the truth — build against current charters.

GroupPagesAnswers
WATCH/status — daemons + Argus + pulse rings + machine health (merges Status + System)anything dead?
/activity — sessions, dispatch log, task movement (Fleet's activity half + Dispatch's log half)what did agents do?
ACT/review — review inbox + ask-human queue (merges Review + Dispatch pending)what needs my decision?
/war-room + /war-room/:id — unchangedlive coordination
/dispatch — send surface + notification settings (loses its log to /activity)route work
BROWSE/ portfolio · /project/:slug — unchangedstate of work?
9 constellation pages — kept, standard anatomy (§06)what is agent X?
/resources — dependencies + cost + machine inventory (merges Dependencies stub + fleet-level cost)resource drift?

Net effect on SYSTEM: 5 overlapping pages → 4 non-overlapping charters.

05

Sitemap & Page Charters

Format: job · rung · tier · data · touching-this-affects.

Command group

/ — PortfolioLandingV3
pages/PortfolioLandingV3.tsx
Portfolio triage grid — every project as a status-chipped card, 3-second scan.
RungBROWSE TierLOCAL useV3Projects → /api/v3/projects
Affectscomponents/portfolio-v3/ (PortfolioCard, FilterBar) · /project/:slug click-through contract · query-keys projects
/review — OperatorReviewPage
pages/OperatorReviewPage.tsx
Operator review inbox — sensitivity / curation / taxonomy queues.
RungACT TierLOCAL useV3Review → /api/v3/review
AffectsD1 merge target for ask-human queue; DispatchPage if merged
/war-room (+ /war-room/:id)
pages/WarRoomPage.tsx · WarRoomSessionPage.tsx
Sessions, decisions, issues, next-steps, analytics; per-session drill-down.
RungACT TierLOCAL useWarRoom* → /api/war-room/*
Affectscomponents/war-room/ (richest family) · MetisPage + MnemosynePage reuse the same hooks — schema change here breaks two BROWSE pages

Constellation group — 9 pages, standard anatomy (§06)

PageJob (domain lens)TierData
/athenastrategic governance: assessments, directives, cross-agent feedLOCALuseAthenaData
/metisresearch/planning lens on decisions + sessionsLOCALuseWarRoomDecisions/Sessions
/hermesintelligence feed + monitor rosterSTUBNotConnected
/apollodesign/frontend domain surfaceSTUBpartial wiring
/hadesguard rails + findingsSTUBNotConnected
/proteusdeployments + service gridSTUBuseProteusData exists
/plutuscost tracking + budget alertsLOCALuseCostData → /api/cost
/mnemosynedecisions + session replayLOCALuseWarRoomDecisions/Sessions
/atlasArgus health + skills + fleet infraLOCALgetArgusStatus, getAgents
Blast radius
All 9 share components/constellation/ (AgentPageHeader, DomainStatsStrip, DomainFeed, AgentRecentSessions) + lib/agent-colors.ts + lib/agent-config.ts. A change to the shared anatomy is a 9-page change — treat as template work, verify ≥2 representative pages (one wired, one stub).

System group

/status — FleetStatusPage
pages/FleetStatusPage.tsx · shipped 2026-06-10 (74a3df9)
Alarm panel — fleet daemons grouped by owner + Argus runs/findings with severity filters.
RungWATCH TierLIVE PostgREST: fleet_daemons, argus_runs, argus_findings
Affectsreference implementation for LIVE-tier pages · D1 merge target for SystemPage rings
/fleet — FleetPage
pages/FleetPage.tsx
Agent roster + task pool + lease/claim tracking.
RungWATCH/BROWSE straddle — charter defect, D1 splits it TierLOCAL getAgents, getPoolTasks
AffectsFleetStatusBar + ConstellationStatus in components/overview/ · seed gap: roster shows 5 agents, spec expects 9
/dependencies — DependencyPage
pages/DependencyPage.tsx
Intended: dependency health across fleet repos. Today: NotConnected stub.
RungWATCH (signal 4) TierSTUB awaiting dep_* tables (proteus)
AffectsD1 merges into /resources · lazy-load when wired (646KB bundle flag)
/dispatch — DispatchPage (+ /dispatch/settings)
pages/DispatchPage.tsx · NotificationSettingsPage.tsx
Dispatch log + sessions + ask-human pending queue; settings = channel CRUD.
RungWATCH + ACT mixed — charter defect, D1 splits log→/activity, queue→/review TierLOCAL
BugDispatchPage.tsx:99 getFleetTasks({limit: 500}) exceeds F2 v1.1 cap → D5
/system — SystemPage
pages/SystemPage.tsx
Pulse-ring health dashboard.
RungWATCH TierLOCAL getPulse → /api/pulse
AffectsD1 merges rings into /status · AthenaPage also surfaces pulse data (overlap)

Project detail

/project/:slug (+ /:tab) — ProjectPageV3
pages/ProjectPageV3.tsx
Single-project deep dive — planning, brief, milestones, decisions, tasks, repos, artifacts, dependencies tabs.
RungBROWSE TierLOCAL useProjectDetailBySlug, usePlanningDocs
Affectscomponents/project-detail/ tab family · portfolio card click-through contract
06

Agent-Page Anatomy — Standard Template

Ratified direction: all 9 constellation pages kept. Every one follows this skeleton; stubs implement it with NotConnected states, never bespoke layouts.

#SlotContent
01AgentPageHeadername, glyph, agent color (lib/agent-colors.ts), domain one-liner
02DomainStatsStrip3–5 KPIs from the agent's domain tables
03Domain feedthe agent's primary stream — findings, decisions, deploys, costs…
04AgentRecentSessionsrecent session activity
05NotConnected sectionsexplicit empty-state naming the missing table — never silent blanks, never mock data presented as live

Wiring a stub = filling slots 02–03 with real queries. Not a redesign license.

07

Data Streams Registry

SourceTierConsumed by
fleet_daemons · argus_runs · argus_findingsLIVE/status
/api/v3/projects · /api/v3/reviewLOCAL/, /review
/api/war-room/* (sessions, decisions, issues, next-steps, deliverables, stats, contributions)LOCAL/war-room, /metis, /mnemosyne, /athena
/api/pulse*LOCAL/system, /athena (partial)
/api/costLOCAL/plutus
/api/argus/*LOCAL/atlas
/api/agents · /api/tasks/active · /api/poolLOCAL/fleet
/api/dispatch/*LOCAL/dispatch, /dispatch/settings
/api/projects/:slug* · /api/project-entities/*LOCAL/project/:slug
/api/fleet-tasksLOCAL/dispatch (F2-cap bug), task views
dep_* tablesabsent/dependencies (stub)

Single-consumer streams are safe to evolve with their page. Multi-consumer streams (war-room family, pulse, agents) require checking every consumer above.

08

Shared Components — Blast-Radius Map

FamilyPathConsumersNote
Shell + navlayout/AppShell.tsx · NavRail.tsxevery pagenav lists at NavRail.tsx:11–35
Constellation templatecomponents/constellation/all 9 agent pagestemplate change = 9-page change
Overview stripscomponents/overview/FleetPage, orphan OverviewPageFleetStatusBar, ConstellationStatus, NotConnected
War-room cardscomponents/war-room/war-room, metis, mnemosyne, athenarichest family
Project-detail tabscomponents/project-detail/ProjectPageV3
Portfolio v3components/portfolio-v3/landinglegacy components/portfolio/ = orphan-adjacent
UI primitivescomponents/ui/everywhereshadcn-derived; token edits in global.css, not per-component
Utility beltBreadcrumb, EmptyState, Skeleton, SummaryCard…cross-pagegrep before renaming props
ContextsRefreshContext · WorkspaceContextshell-level
Query keyslib/query-keys.tsall hookssingle registry — extend, don't fork
09

Build Guidelines

  1. Mockup-first stands. HTML mockup in apollo repo → approval → React in infra-pantheon. Bible read precedes mockup.
  2. Brand: --pantheon-* CSS vars only (global.css, brand.json v2.0.0). Signals: active #22c55e · alert #E8B36A · fault #E86A6A · dormant #6A7AB0 · arc #06b6d4 (ceremonial, max 1/view). JetBrains Mono. Motion budget: pulse-slow 2.4s only. Radius 4px. No shadcn default blue, ever.
  3. Language: all dashboard narrative EN (rule #20). Chrome labels EN here — internal fleet tool, no IS surface.
  4. Tier discipline: new data-bearing page → LIVE tier if tables exist; never present mock/MSW data as live; NotConnected for missing tables.
  5. Deploy: merge to master = ships (deploy-dashboard.yml, heph-hardened, smoke-tested run 27295320871). PR per rule #14 classes; pnpm build 0 TS errors before PR.
  6. Same-PR rule: route/nav/data-source/shared-component change → update the bible in the same arc (apollo-repo commit pairs with the infra-pantheon PR).
  7. Orphans — do not extend (deletion pending D4): OverviewPage, PortfolioPage, ProjectDetailPage + stale tests + legacy components/portfolio/ + useOverviewData.ts.
10

Open Decisions — Mirrored on GH Board #13

#DecisionOwnerState
D1Ratify proposed IA — WATCH/ACT/BROWSE, SYSTEM 5→4 merge planoperatorproposed 2026-06-10
D2Stub wiring order (hermes / apollo / hades / proteus / dependencies) — needs tables per stuboperator + proteusopen
D3Data tier direction — Supabase-direct everywhere vs two-tier public/localatlas + proteusflagged — not apollo's call
D4Orphan deletion timing (3 pages + tests + legacy portfolio components)apolloopen — overlaps constellation-apollo-022
D5DispatchPage.tsx:99 F2-cap bug routingatlas or apolloopen — pre-existing