# `mgf-fedres` — scope policy

> What belongs in the federation-resources spine (family **SP**). A proposed
> addition is in scope only if it passes the §3 gate.

## §1 In scope (SP-01)

The **headless, shared core** that both federation web tools build on:

- **The `fed-resources/` convention** — the per-project directory contract:
  `source/` (authored single-source), `generated/` (schema-governed, freshness-
  gated, committed), `feedback/` (authored rounds), `live/` (ephemeral NDJSON).
- **The schema set** — one versioned, symmetric authority (`schema_version 0.1`)
  across the four governance classes (gated state, gated/reproduce-exempt,
  authored, live/ephemeral wire), plus the `fedres-validate` validator.
- **The version-aware reader** — honest-absence loading (`UNKNOWN` / `UNREADABLE`,
  never a guess) and the closed state vocabularies (`SyncState`, test status).
- **The sync engine** — canonical-JSON, the per-file `sha256` manifest, the
  shallow (manifest) + deep (`regenerate → byte-identical`, non-mutating) check,
  and the first-class sync states.
- **The `SourceProvider` seam** — `DiskProvider` now, `PackageProvider` later.
- **The live/run-record I/O** — the NDJSON reader/writer + the run-record writer.
- **The D-GEN framework** — the `source/ → generated/` projection contract and
  reference projectors (each project authors one source; `generated/` is its
  projection).
- **The `fedres` CLI** — the deterministic, JSON-emitting contract surface
  (`status` / `check` / `generate` / `run --trace` / `tail`) + the freshness gate.

The boundary: **everything that does not need a browser** lives here, so the core
is unit-testable headless and reusable (the warden consumes it without FastAPI).

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

| Not here | Why | Where instead |
|---|---|---|
| Any web framework / HTTP server / templates | the spine is headless by design | `mgf-fed-web`, `mgf-test-web[web]` |
| The brand-web CSS / instrument layer | presentation, not the spine | `mgf-brand-web` |
| The warden daemon + `testctl` + lease registry + runner adapters | testing-authority runtime | `mgf-test-web` (base) |
| Fleet orchestration (gates, release, drift, registry) | federation-wide tooling | `mgf-fed` |
| Defining the standards corpus / the registry | the standards source of truth | `mgf-standard` |
| Running pytest tiers | the test executor | `mgf-test-supervisor` (driven as a library) |

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

A PR MUST answer: (1) is it needed by **both** consuming tools (or the warden) —
i.e. genuinely shared spine, not a single consumer's concern? (2) does it keep the
core **headless** (no web/UI framework import)? (3) does it preserve the spine's
invariants — **generated-not-asserted**, **honest-absence**, the single schema
authority, and **no second source of truth** (`source/` is authored, `generated/`
is strictly its projection)? Any "no/unclear" blocks it.

## §6 Revisiting scope (SP-06)

Revisited at every MAJOR boundary; re-affirms the headless + single-schema-
authority + `source/`-vs-`generated/` invariants.
