Pantheon · Live PRD
● CF ACCESS
Athena · Flagship Artifact · Slice 1 design

One URL an agent opens to orient in seconds,
saturated with live state as work moves.

Every session starts context-starved and rebuilds the same picture from GitHub, the Obsidian/AION wiki, and static PRDs — many commands, many retries. The Live PRD collapses that into one self-saturating surface per project. Sources stay authoritative; the artifact composes them, links back, and stays fresh. This is a mockup of the Pantheon App project's own Live PRD — dogfooded.

project pantheon-hub owner athena board #13 Pantheon App predecessor PR #93 slice 1 of 4 · in design
A

The interface — /project/:slug

The surface an agent (or several, working together) is pointed at. The orientation header is the "start here": authored-once scope, auto-derived where-we-are, what's-next, and a live strip. Below it, the project's tabs — with the Issues tab lit by the live GitHub leg.

🔒 pantheon.boas.dev/project/pantheon-hub ↻ live
Portfolio / Pantheon App / Overview

Pantheon App on-plan

The operator's inspection surface on CF Pages — makes fleet work visible so it stops drifting.
owner · athena ● live
◆ Orientation — start here live 12 open issues3 PRs as of 2m ago · GitHub
Scope · authored-once
The operator's single inspection seat on the fleet. Renders the project registry, portfolio, calendar, and — this effort — a live per-project PRD so any agent can orient from one URL instead of re-deriving context every session. ← fleet_projects_registry.brief_markdown
Where we are · derived
MilestoneSlice 1 — Orientation READ ·62%
Signal 1 blocked 2 P1
Activity14 events · 7d (4 commits, 3 issues, 2 PRs)
SourceGitHub live + registry
What's next
Links
↗ github · boas-dev/infra-pantheon
↗ board · #13 Pantheon App
◦ obsidian · slice 2
◦ aion wiki · slice 3
Overview
Roadmap 4
Issues 15
Decisions soon
Sessions soon
Artifacts soon
Code soon
Strategic goals
🎯

Kill context-rebuild cost

Any agent orients from one URL in seconds — no multi-source scavenger hunt.

38%
🔄

Self-saturation, no rot

Live state auto-derived; durable decisions written back by working agents. The artifact never goes stale.

20%
🤝

Multi-agent handoff surface

Read-at-start / write-at-end. When context clears, the next session resumes from here.

8%
live / derived authored-once deferred slice

◆ Live sources · saturation

GitHub issues / PRswork-state SSOT · 2.5s + cache
live
Project registryscope · Supabase anon
live
Obsidian vaultdecision context
slice 2
AION wikinarrative recall · mnemosyne#174
broken
Static PRDs / refsDocRow links
slice 2

◆ Agents on this

A
athena · steering
H
hephaistos · review
Md
mnemosyne · blocker

◆ Freshness

2m
since last live pull
stale-while-revalidate · CF edge
Descending roadmap — future at top, shipped sinks

Slice 3 · AION narrative recall

planned · blocked on mnemosyne#174

Slice 2 · Write-back + Obsidian/static links

planned · closes the read↔write loop

Slice 1 · Orientation READ surface

in progress · 62% · this spec

Fleet Portfolio list (PR #93)

shipped · the project list

Registry re-curation · 41 projects

shipped · 2026-06-28
● Live · GitHub · boas-dev/infra-pantheon · as of 2m ago
#118Detail Function unbuilt on CF surface — /api/v3/projects/:slug 404sblocked
#121Orientation header — compose authored + derived layersp1
#122github.ts — read-only REST helper + timeout/cachep1
#93Fleet Portfolio list endpoint + registry surfacepr · pending heph
#124Unhide /project/:slug in VITE_PRODUCT buildtask
#95HUB_GITHUB_TOKEN provisioning — Hades handoffdep
This tab is the live leg. Pulled server-side on open with a 2.5s timeout; if GitHub or the token is down it falls back to the last good pull and the header still renders — the page never blanks.
Decisions · endpoint not yet ported — slice 2
Sessions · endpoint not yet ported — slice 2
Artifacts · endpoint not yet ported — slice 2
Code · endpoint not yet ported — slice 2

One source, two consumers — the OKF duality

The orientation is a single OKF Design concept. A human reads it rendered (left); an agent reads the same concept as data (right) via ?format=md. No second, drifting copy — this is what "for both agents and humans" means.

◆ Human reads — rendered page
Scope · Design concept
The operator's single inspection seat on the fleet — renders registry, portfolio, calendar, and this effort's live per-project PRD, so any agent orients from one URL instead of re-deriving context each session.
Status in-progress
MilestoneSlice 1 — Orientation READ ·62%
Ownerathena
◆ Agent reads — /project/pantheon-hub?format=md
---
type: Design
title: Pantheon App — operator inspection surface
description: The operator's single seat on the fleet.
timestamp: "2026-07-01"
status: in-progress
---
The operator's inspection surface on CF Pages —
makes fleet work visible so it stops drifting.
# Schema
- repos: infra-pantheon
- milestone: Slice 1 — Orientation READ (62%)
- owner: athena
# Citations
1. fleet_projects_registry.slug=pantheon-hub
(source-swaps to okf_* store later)
Lint-guarded: the concept carries required frontmatter (type · title · description · timestamp · status) + # Schema / # Citations; the P1–P4 engine rejects any un-cited number or malformed concept before it enters the vault. Same contract the agent emits at write-back.
B

The saturation model — why it stays live

A live PRD only earns the name if it never rots. Three layers, each with its own freshness source. This is the design decision that separates a live artifact from a doc that decays.

Layer 1

Authored-once

Durable scope & thesis — what the project is and why. Written once by Athena, rarely changes.

✎ athena → brief_markdown
Layer 2

Derived

Where-we-are, what-changed, activity — recomposed automatically on every open from source signals. Zero manual upkeep.

⚙ auto · issues · PRs · commits
Layer 3

Written-back

Decisions, next-action, blockers — appended by whichever agent does the work, at session-end. The handoff.

↩ agents · slice 2
The read↔write loop
📖

Read at start

Fresh agent opens the URL, orients in seconds from the saturated header.

─── orient ───▸◂── write back ───
✍️

Write at end

Agent appends decisions + next-action. The artifact carries the context forward past any context-clear.

The honest gap: the app is necessary but not sufficient. The revolution is the behavior — agents actually pointed here at session start and writing back at session end. That's a protocol change to /start + /end, not just code. The app makes it possible; the protocol makes it happen. Both are Athena's to drive.
C

Delivery — thin slices, never "everything at once"

Six prior oversight-dashboard attempts died to scope creep. This ships one narrow vertical at a time on the proven CF-Pages recipe. Slice 1 is the READ half; the loop closes at slice 2.

building
SLICE 1

Orientation READ

  • create :slug Function
  • orientation header
  • live GitHub leg
  • deploy /project/:slug
next
SLICE 2

Write-back + links

  • agent write path
  • Obsidian vault links
  • static-PRD links
  • closes the loop
later
SLICE 3

AION recall

  • narrative decision recall
  • blocked · mnemosyne#174
later
SLICE 4

Mission view

  • multi-agent · one task
  • spans projects
  • precise repo mapping
D

Architecture — Approach A · server-composed hybrid

One CF Pages Function, behind the existing CF Access wall. Supabase reads for the persisted layer, a timeout-bounded GitHub fetch for the live layer, last-good cache fallback. The client stays dumb.

GET /api/v3/projects/:slug (CF Pages Function · behind CF Access)
├─ Supabase (anon · getReadConfig)
│ ├─ fleet_projects_registry → project + brief_markdown authored-once
│ └─ fleet_repositories → repo map (owner_agent join)
├─ GitHub (github.ts · read-only token · ~2.5s timeout)parallel
│ └─ per repo: open issues + PRs → live signal
├─ compose → { project, orientation, live_github, tabs }
└─ fallback: timeout/fail/no-token → stale | not_connected
header still renders · page never blanks
Verified before speccing: the detail Function does not exist on the live surface (only the list endpoint shipped in PR #93). The 8-tab detail UI lives in the client but its backend was never ported from retired src/hub Express — the same two-surfaces trap to avoid. Slice 1 creates the Function; it does not "extend" one.