# `mgf-fed-web` — scope policy

> What belongs in the federation dashboard (family **FW**). A proposed addition is in
> scope only if it passes the §3 gate.

## §1 In scope (FW-01)

The **presentation layer** of the federation dashboard — everything that needs a browser:

- **The FastAPI app** — the ASGI app, routing, the `mgf-fed-web` console (`serve`) entry,
  and the `mgf-brand-web` static mount (`/static/brand`).
- **The lenses (render code)** — Roadmap, In progress, Stalled, Next best, Decisions,
  Changed, Coupling, Architecture — the same code at project + federation scope, rendering
  from the spine's `generated/`.
- **The sync UI** — the sync matrix, per-project + global pills, `Check sync` (non-mutating)
  and `Force-sync` (regenerate-only on governed repos), the full state language.
- **The feedback UI** — composing + delivering `feedback.json` into a target inbox and
  rendering the round thread (`open`/`answered`, `agent_raised`). Non-operative.
- **Follow-live** — the telemetry-tagged live mode on the In-progress lens (tails the
  spine's `live/` NDJSON), with honest idle/ended states.
- **Print / export** — the print stylesheets + the project review pack.
- **The `derived` tagging + honest-absence rendering** — the web computes only orderings
  (e.g. the next-best ranking) and tags them; every absence renders as an explicit state.

The boundary: **everything that needs a browser** lives here; **everything that does not**
lives in the spine.

## §2 Out of scope (FW-02)

| Not here | Why | Where instead |
|---|---|---|
| Schemas, the version-aware reader, the manifest + sync engine, `SourceProvider`, live/run-record I/O, the `fedres` CLI | the headless spine logic — read-only consumed here | `mgf-fedres` |
| The brand tokens / instrument CSS / fonts / assets | the shared presentation kit, mounted not vendored | `mgf-brand-web` |
| Authoring project state (`status`/`roadmap`/`source/` …) | the web is **read-only** on project state — generated-not-asserted | each project's `fed-resources/source/` + its generator |
| The warden daemon + `testctl` + lease registry + the testing console | the testing-authority tool, a sibling on the same spine | `mgf-test-web` (ProofWarden) |
| Fleet orchestration (gates, release, drift, registry) | federation-wide tooling | `mgf-fed` |
| Defining the standards corpus / the registry | the standards source of truth | `mgf-standard` |

## §3 Scope-creep gate (FW-03)

A PR MUST answer: (1) is it **presentation** — does it need a browser? (logic that could
run headless belongs in `mgf-fedres`, not here.) (2) does it keep the dashboard
**read-only on project state** (no authoring; feedback stays non-operative + delivered,
never auto-committed)? (3) does it preserve the invariants — **no second source of truth**
(projection of the spine's `generated/`, never a redraw), **honest-absence** (no blanks /
no stale-as-current), and **`derived` tagging** for anything the web computes? (4) is the
brand layer **additive only** (never reducing the tool's power for styling)? Any
"no/unclear" blocks it.

## §6 Revisiting scope (FW-06)

Revisited at every MAJOR boundary; re-affirms the presentation-only + read-only +
no-second-source-of-truth + honest-absence invariants.
