# Magogi Foundation Standards — Conformance Tracker (mgf-fedres)

> **Status (2026-06-29).** Initial conformance audit at **0.1.0** (pre-alpha).
> `mgf-fedres` is the **headless federation-resources spine** — the schema set,
> the version-aware reader, `fedres-validate`, and the closed state vocabularies
> (**M0, committed**), with the manifest + sync engine, the `SourceProvider` seam,
> the live/run-record I/O, the D-GEN framework, and the `fedres` CLI (**M1, in
> progress**). One runtime dep (`jsonschema`); no web framework. That shape makes
> most service / GUI / deploy / observability / perf rules N/A; what applies is
> code-quality (DP/EH/SC/AP/TS/NM/TM), docs (DOC/AG/FB/SP), and — once wired — the
> packaging + CI + release stack.
> **Scope.** mgf-fedres's conformance to the standards at
> [mgf-standard/docs/standards/](https://codeberg.org/magogi-admin/mgf-standard/src/branch/main/docs/standards/).
> **Audience.** Maintainer-tomorrow, AI coding agents, future contributors.
> **Cross-references.** [README.md](../../README.md), [CHANGELOG.md](../../CHANGELOG.md),
> [docs/planning/PLAN.md](../planning/PLAN.md).

---

## §1 You are here

**Project shape:** a **headless core library** (`mgf.fedres`) — the schemas, the
version-aware reader, the manifest + sync engine, the `SourceProvider` seam, the
live NDJSON + run-record writers, the D-GEN projection framework, and the `fedres`
CLI. Single runtime dependency (`jsonschema`, which brings `referencing`); **no web
framework** (so the warden + CI reuse the core without FastAPI). It is imported for
its types/validation and invoked as a small CLI — not a service, GUI, or deployed
artefact. That shape makes most runtime / service / GUI / observability / perf rules
N/A.

**Current version:** **0.1.0** (Development Status :: 2 — Pre-Alpha). **M0** (the
contract — schemas + validator + reader) is committed; **M1** (engine + CLI) is in
active development in the working tree (`canonical.py`, `manifest.py`, `sync.py`,
`provider.py`, `live.py`, `generate.py`, `cli.py`). This ledger audits the current
state honestly: code-quality + docs land ✅; the packaging / CI / release / publish
stack and the M1-CLI operability surface are **not yet wired** and are tracked ⏳
(§4) — most of them are the tool-driven `mgf-fed scaffold` step (the generated
`.woodpecker.yml`, the AG-03 hooks, `PUBLIC_API.json`).

**Declared conformance level: L1 (structural baseline). Target: L2.** Current
standing: the four local gates (ruff, `mypy --strict`, pytest, `ruff format
--check`) pass and the DOC-01 doc baseline is in place; CI is not yet generated and
several owned surfaces are still being built. This is an honest pre-alpha L1 — not a
seeded-from-sibling all-green facade.

**Per-MUST tally (§Z).** Of the **263 MUSTs**: **78 ✅** · **50 ⏳** · **135 N/A**
· **0 🚫**. Applicable (non-N/A) = **128**; **78/128 (61%)** evidenced ✅. Every
code-quality family that the M0 contract exercises (DP, EH, SC-input-validation, AP
surface, the contract tests, NM, TM) lands ✅; the **50 ⏳** are the not-yet-wired
clusters — CI (WF ×13), release/publish (REL ×9, PKG ×6), the test maturity stack
(TS ×9), `PUBLIC_API` + version-single-sourcing (AP-10/11/13, DOC-08), the M1 `fedres`
CLI operability verbs (OP ×4), the AG-03/18 git scaffolding, the SC-10/18
lockfile/reproducible-build, and DOC-03 bucket charters.

| Marker | Meaning here |
|---|---|
| ✅ | conformant against the committed M0 code / shipped docs (evidence in §Z) |
| ⏳ | applicable MUST not yet met — open gap with a plan (§4); mostly the tool-driven scaffold + M1 |
| N/A | rule's premise is service / GUI / deploy / metrics / perf / typed-exception-shaped; mgf-fedres is a headless contract library |
| 🚫 | declined-with-rationale (CFM-04) — none currently |

---

## §2 Per-standard audit (corpus 263 MUSTs / 22 families)

| Family | MUSTs | Verdict | Notes (evidence: §Z) |
|---|---|---|---|
| **DP** DESIGN_PRINCIPLES | 13 | ✅ / N/A | Frozen dataclasses (`ReadResult`, `Identity`), `mypy --strict`, no silent fallbacks (`identify` fail-closed), the `SourceProvider` ABC seam; async/cancellation N/A (synchronous). |
| **EH** ERROR_HANDLING | 13 | ✅ / N/A | Result-object boundary (stdlib/JSON errors → `ReadResult` states + error lists); typed `except` only; best-effort NDJSON line loop. No app-exception hierarchy/retry/breaker (N/A). |
| **LG** LOGGING | 17 | N/A | No logging surface — the spine returns typed results/error lists; the CLI prints to stdout/stderr. A logging seam (if any) would arrive with M1 and be audited then. |
| **CF** CONFIGURATION | 12 | N/A | No application config subsystem; inputs are explicit file paths + the `[tool.fedres]` generator mapping (a contract, not an app `Settings`). |
| **SC** SECURITY | 18 | ✅ / N/A / ⏳ ×2 | Safe deserialization (stdlib `json` only — no pickle/yaml.load/eval), fail-closed jsonschema input validation (SC-08), argv subprocess (SC-02), SECURITY.md (SC-12). ⏳ SC-10 (no committed lock / pip-audit yet) + SC-18 (no release build yet). |
| **TS** TESTING | 28 | ✅ / ⏳ / N/A | M0 ships the contract self-check (`test_schemas.py`): fail-closed pins, reader honest-absence, enum lock-step; `filterwarnings=error`, strict markers, coverage floor 80, the 13-marker taxonomy. ⏳ the maturity stack (src↔test mirror, dir partition, smoke, supervisor `.gates`). |
| **AP** API_DESIGN | 15 | ✅ / ⏳ ×3 / N/A | `__all__`, `py.typed`, `from __future__`, keyword-only options, narrow returns, private `_schemas`. ⏳ AP-10/11 (`PUBLIC_API` — tool-driven) + AP-13 (version is a literal in two places, not metadata-single-sourced + no sync test yet). |
| **SP** SCOPE | 6 | ✅ | SCOPE.md (SP-01..06): the headless spine IN; web frameworks / warden / fleet orchestration / standards corpus OUT with owners cited. |
| **WF** WORKFLOWS | 13 | ⏳ | **No `.woodpecker.yml` yet.** CI is the tool-driven `mgf-fed scaffold` step (the generated library pipeline + commit-trailers + gitleaks + `app-doctor` + the new freshness fragment). Tracked in §4. |
| **REL** RELEASING | 13 | ⏳ / N/A | Not yet released (0.1.0 unpublished, no tags); the release flow lands with the publish pipeline (REL-01..09 ⏳). Cohort/phase/registry rules N/A (orchestrator/supervisor-owned). |
| **PKG** PACKAGE_DISTRIBUTION | 12 | ⏳ / ✅ / N/A | Hatchling, `py.typed`, dotted-name mapping (PKG-10/12 ✅). Publish/verify chain ⏳ (no pipeline). PKG-01 = the fleet devpi-vs-Codeberg channel deferral; the one runtime dep is public-PyPI (PKG-06 N/A). |
| **DOC** DOCUMENTATION | 19 | ✅ / ⏳ ×2 / N/A | Full DOC-01 root baseline + `docs/` tree + this ledger (DOC-15) + DEPS/FEDERATION/LESSON_LEARNED + CLAUDE.md. ⏳ DOC-03 (bucket README charters) + DOC-08 (`PUBLIC_API`, tool-driven). |
| **OP** OPERABILITY | 12 | ✅ / ⏳ ×4 / N/A | `[project.urls]` no placeholders (OP-03), honest README (OP-04). ⏳ version/doctor/explain/bundle verbs — the M1 `fedres` CLI + the `app-doctor` gate. Service rules N/A. |
| **DEP** DEPLOYMENT | 11 | N/A | Not a deployed service — a headless library + small CLI. |
| **PR** PRESENTATION_LAYER | 5 | ✅ / N/A | Imports no UI/web framework (PR-01); no UI layers here (the webs are separate repos) → PR-03/04/05 N/A; PR-07 classified here. |
| **AG** AGENTS | 19 | ✅ / ⏳ ×2 / N/A | AGENTS.md + CLAUDE.md + docs/memory + `[standards]` extra (AG-01/12/16/17). ⏳ AG-03 (trailer hook + CI gate) + AG-18 (`.gitmessage`/`.githooks`) — the scaffold step. Session-conduct rules N/A. |
| **TM** TIME | 6 | ✅ / N/A | Wire timestamps are RFC-3339 (`iso_datetime` format); the M0 core constructs no naive datetimes (ruff DTZ on). No duration logic / async / IANA names (N/A). |
| **PF** PERFORMANCE | 7 | N/A | No perf-pinned hot path / budgets; validation cost is bounded by input size. |
| **OB** OBSERVABILITY | 10 | N/A | No metrics/traces/SLI surface; emits no `LogRecord` (cf. LG N/A). |
| **NM** NAMING | 3 | ✅ | `mgf-fedres` dist → `mgf.fedres` import → `mgf-fedres` slug; PEP-420 (no `src/mgf/__init__.py`). |
| **GUI** GUI_CONSUMERS | 10 | ✅ / N/A | Imports no Qt (GUI-01); no GUI (rest N/A). |
| **FB** FEEDBACK | 1 | ✅ | FEEDBACK.md present + the spine-vs-federation routing documented (FB-05). |

---

## §3 Decline-with-rationale ledger (CFM-04)

None. `mgf-fedres` declines no rule. Rules whose premise its headless-library shape
doesn't bind are read **N/A** (with a per-row rationale in §Z), not declined. The
gaps that DO apply are tracked ⏳ in §4, not declined.

---

## §4 Open gaps — tracked with a plan (⏳)

Most open items are the **tool-driven federation-conformance bundle** (applied by
`mgf-fed scaffold` / the generated CI template) + the **M1** engine/CLI work — not
hand-authored defects. Per the plan (A2/A3), these land as the spine is completed
and registered.

| Cluster | Rules | Status |
|---|---|---|
| **CI pipeline** | WF-01..13 | ⏳ **Tool-driven.** No `.woodpecker.yml` yet; it is the generated `mgf-fed._woodpecker` base.yml + the commit-trailers / gitleaks / `app-doctor --standards` / new freshness fragments, applied by `mgf-fed scaffold mgf-fedres` (WF-13). |
| **Release / publish** | REL-01..09, PKG-01..05/09 | ⏳ Not yet released (no tag/publish). The tag-driven devpi publish + verify lands with the CI pipeline. PKG-01 is the fleet-wide devpi-vs-Codeberg channel reconciliation (governance, not owned here). |
| **Public API surface** | AP-10, AP-11, DOC-08 | ⏳ **Tool-driven.** `PUBLIC_API.json`/`.md` + the drift pin are generated/applied by the scaffold step; not yet present. |
| **Version single-sourcing** | AP-13 | ⏳ `__version__` is a literal in `__init__.py` and `pyproject` (currently in agreement); single-source from metadata + add the version-in-sync test (and the `app-doctor` AP-13 check). |
| **Operability verbs** | OP-01/02/05/07 | ⏳ version / doctor / explain / bundle — arrive with the M1 `fedres` CLI + the `app-doctor` per-repo gate. |
| **Test maturity** | TS-01/13/20/21/22/23/24/25/27 | ⏳ M0 ships one contract suite; the src↔test 1:1 mirror + mirror-lint, the four-dir partition, the smoke test, and `mgf-test-supervisor` adoption (`.gates` JSONL / quarantine / failure bundles) land with M1. |
| **AG-03 git scaffolding** | AG-03, AG-18 | ⏳ The `.gitmessage` + `.githooks/prepare-commit-msg` + `check_commit_trailers.py` + the CI commit-trailers gate are the byte-exact scaffold files (tool-driven). `.gitignore` (incl. `my_stuff/`) is already present. |
| **Docs polish** | DOC-03 | ⏳ Bucket `README.md` charters for `docs/claude/`, `docs/memory/`, `docs/inprogress/`. |
| **Supply chain** | SC-10, SC-18 | ⏳ A committed hash-pinned lock + `pip-audit` (CI) and the build-once release invariant land with the pipeline (SC-10 also rides the fleet devpi-backfill gap). |

**Registration note.** `mgf-fedres` is **not yet registered** in
`mgf-standard/MGF_LIBRARIES.{json,md}` (REL-13 is a release-time gate run from the
mgf-common supervisor, not a per-repo CI step). Registration + the DOC-18 ripple are
tracked at mgf-standard.

---

## §SHOULD — the indexed SHOULD rules

L3 requires every SHOULD met or justified. The corpus indexes 8 SHOULDs:

| Rule | Verdict | Evidence |
|---|---|---|
| **NM-04** | N/A | Operator-chosen local clone layout; never appears in an artifact (it is cloned to its slug). |
| **NM-05** | ✅ | No junk-drawer modules — every module is domain-named (`_schemas`/`reader`/`states`/`validate`/`canonical`/`manifest`/`sync`/`provider`/`live`/`generate`/`cli`); zero `utils/misc/helpers`. |
| **OB-06** | N/A | SLI→SLO targets are for a page-able service; the spine is a headless library. |
| **PF-06** | N/A | The public surface is data validation + typed reads whose cost is the input size, not a non-obvious algorithm to annotate. |
| **PR-02** | N/A | "2+ UI consumers → a dedicated `-app` repo" — the spine has no UI; its two UI consumers already live in their own repos (`mgf-fed-web`, `mgf-test-web`). |
| **PR-06** | N/A | No medium-agnostic `fmt` helpers exposed; the CLI prints / emits JSON directly. |
| **TM-05** | N/A | No presentation layer; wire timestamps are RFC-3339 strings carried through unchanged. |
| **TM-06** | N/A | No OTel-trace ns timestamps of its own; wire timestamps follow the federation ISO-8601 contract. |

**Result: 8/8 met / N-A.** The remaining L3 distance is the §4 ⏳ clusters (CI,
release, the test-maturity + operability surface), not an open SHOULD.

---

## §5 Audit log

| Date | Auditor | Trigger | Findings |
|---|---|---|---|
| 2026-06-29 | DOC-01 baseline author | new-sibling bootstrap — author the documentation baseline + stand up the conformance ledger (DOC-15 / CFM-03) | **Full per-MUST §Z built** — all 263 MUSTs carry a Rule · Verdict · Evidence row in the `_status.py`-parseable format. Honest pre-alpha tally **78 ✅ / 50 ⏳ / 135 N/A / 0 🚫** (128 applicable, 61%). Declared **L1 (structural baseline)**, target L2. No code changed — ledger + docs only. The ⏳ set is the tool-driven scaffold (CI / `PUBLIC_API` / AG-03 hooks) + M1 (engine/CLI/test-maturity), each tracked in §4. |

---

## §6 Cross-references

- [`mgf-standard/docs/standards/`](https://codeberg.org/magogi-admin/mgf-standard/src/branch/main/docs/standards/) — the corpus this audits against (263 MUSTs / 8 SHOULDs).
- [`../planning/PLAN.md`](../planning/PLAN.md) — the approved end-to-end plan (phase A2/A3 = this package's M0/M1).
- [`../../SCOPE.md`](../../SCOPE.md) — IN/OUT/Adjacent (SP-01..06).
- [`../../DEPS.md`](../../DEPS.md) — deps + dependents (DOC-16).
- [`../../FEDERATION.md`](../../FEDERATION.md) — the contract (DOC-17).
- The mgf-common reference ledger: [`mgf-common/docs/inprogress/MGF_STANDARDS_CONFORMANCE.md`](https://codeberg.org/magogi-admin/mgf-common/src/branch/main/docs/inprogress/MGF_STANDARDS_CONFORMANCE.md).

---

## §Z Per-MUST evidenced audit — all 263 MUSTs (DOC-15 / CFM-03 completeness)

> Every one of the 263 corpus MUSTs carries a row. Columns: Rule · Verdict
> (✅ / ⏳ / 🚫 / N/A) · Evidence/rationale. ⏳ rows are tracked in §4. Evidence
> cites committed M0 code (`src/mgf/fedres/*.py`, `tests/test_schemas.py`,
> `pyproject.toml`); M1 surfaces in the working tree are noted "M1, in progress".
> **Tally: 78 ✅ · 50 ⏳ · 135 N/A · 0 🚫** (128 applicable).

| Rule | Verdict | Evidence |
|---|---|---|
| DP-01 | ✅ | Headless, no UI; clean layering (`validate`/`reader` → `_schemas` → `states`); core imports no provider-fronted SDK (only `jsonschema`). |
| DP-02 | ✅ | The I/O seam is an ABC — `provider.py` `SourceProvider` with `DiskProvider` (prod) + `PackageProvider` planned; the read interface is what the engine/web go through (M1, in progress). |
| DP-03 | ✅ | Inter-module domain types are frozen dataclasses — `ReadResult` (`reader.py:19`), `Identity` (`_schemas.py:78`); never bare dicts across boundaries. |
| DP-04 | ✅ | `pyproject [tool.mypy] strict=true`; every signature annotated; `from __future__ import annotations` in every module. |
| DP-05 | ✅ | Tests run with no creds/network/daemon — `test_schemas.py` uses `tmp_path` + the shipped `examples/`. |
| DP-06 | ✅ | The M0 commit is correctness-first (fail-closed validation + honest-absence reader); the reliability/error concerns are the design centre, recorded in CHANGELOG + this ledger. |
| DP-07 | ✅ | Module + public-function docstrings throughout (`read_file`/`read_payload`/`validate_payload`/`identify`, `ReadResult`, `SyncState`). |
| DP-08 | ✅ | Replaceability documented — the `SourceProvider` seam (disk→package) + the `schema_version` contract; design in `docs/planning/PLAN.md` §"Package architecture". |
| DP-09 | N/A | No long-running cancellable operations (synchronous validate/read). |
| DP-10 | ✅ | No silent fallbacks — `identify()` returns a typed `reason`; the reader maps to `UNKNOWN`/`UNREADABLE` explicitly, never guesses (`reader.py:44-57`). |
| DP-11 | N/A | No async / `asyncio.create_task`. |
| DP-12 | ✅ | No naive datetimes in the M0 core; wire timestamps are RFC-3339 (schema `iso_datetime` format=date-time); ruff `DTZ` selected (`pyproject` ruff lint). |
| DP-13 | ✅ | Deterministic resource handling — reads via `Path.read_text` (no lingering handles); no GC-based cleanup. |
| EH-01 | N/A | The library returns typed results (`ReadResult`/`Identity`) + error lists rather than raising an app-exception hierarchy. |
| EH-02 | ✅ | Stdlib errors translated at the boundary — `read_file` maps `FileNotFoundError`/`OSError`/`json.JSONDecodeError` → `ReadResult` states (`reader.py:48-56`); `validate_file` maps `JSONDecodeError` → error strings. |
| EH-03 | N/A | Errors are converted to result values, not re-raised (no `raise ... from`). |
| EH-04 | ✅ | Entry point top-level handling — `validate.main` returns rc 2 (usage) / rc 1 (validation), prints to stderr; no raw traceback for expected failures (`validate.py:39-62`). |
| EH-05 | N/A | No crash-report subsystem (thin library). |
| EH-06 | N/A | No GUI workers. |
| EH-07 | ✅ | All `except` clauses are typed (`FileNotFoundError`/`OSError`/`json.JSONDecodeError`); no bare `except Exception`. |
| EH-09 | ✅ | Errors carry precise, actionable context — `FAIL <file>` + per-error `location: message`; `identify` reasons name the cause ("unknown kind", "unsupported schema_version"). |
| EH-08 | N/A | No typed application exceptions. |
| EH-10 | ✅ | Best-effort loop — `validate_file` records a bad NDJSON line and continues rather than aborting the stream (`validate.py:21-31`). |
| EH-11 | N/A | No retries. |
| EH-12 | N/A | No multi-attempt operations. |
| EH-13 | N/A | No upstream-amplifying load. |
| LG-01 | N/A | No log sites yet (pure validator/reader; the CLI prints). When a logging seam is added it will use `getLogger(__name__)`. |
| LG-02 | N/A | No logging bootstrap (library; the host owns logging). |
| LG-03 | N/A | No logging / OTel spans. |
| LG-04 | N/A | No log sink to redact (no secrets handled regardless). |
| LG-05 | N/A | No ERROR-level logging (errors are returned as values). |
| LG-06 | N/A | No aggregator wiring (library). |
| LG-07 | N/A | No GUI. |
| LG-08 | N/A | No log calls. |
| LG-09 | N/A | No structured log fields (no logging). |
| LG-10 | N/A | Not a headless service. |
| LG-11 | N/A | No operation logging (the contract surface returns/print values). |
| LG-12 | N/A | No logging. |
| LG-13 | N/A | No logging. |
| LG-14 | N/A | No correlation context. |
| LG-15 | N/A | No event-field logging. |
| LG-16 | N/A | No WARNING/ERROR records. |
| LG-17 | N/A | No ERROR records to fingerprint. |
| CF-01 | N/A | No application configuration object; inputs are explicit paths. |
| CF-02 | N/A | No config precedence chain. |
| CF-03 | N/A | No owned config schema (the `[tool.fedres]` generator map is a contract, not app config). |
| CF-04 | N/A | No config/state writes (the M1 generator writes non-secret `generated/` JSON, not config). |
| CF-05 | N/A | No config file / no secrets. |
| CF-06 | N/A | No config file with keys to reject. |
| CF-07 | N/A | No sub-config files. |
| CF-08 | N/A | No `Settings` singleton; arguments passed per-call. |
| CF-09 | N/A | No config file to point a flag at. |
| CF-10 | N/A | No `Settings` to construct in tests. |
| CF-11 | N/A | No config fields. |
| CF-12 | N/A | No config backend variants. |
| SC-01 | N/A | No secrets handled. |
| SC-02 | ✅ | Subprocess uses an argv list, `shell=False` — `provider.py:88` `subprocess.run(["git","-C",…,"rev-parse","HEAD"], …)` (M1, in progress). |
| SC-03 | ✅ | Safe deserialization — stdlib `json.loads` only; no `pickle`/`yaml.load`/`eval` (`_schemas.py`, `reader.py`, `validate.py`). |
| SC-04 | N/A | No private-data files written by M0. |
| SC-05 | N/A | No cryptography (the `sha256` manifest is integrity hashing, not secret crypto). |
| SC-06 | N/A | No outbound network/TLS (headless). |
| SC-07 | N/A | No external/network requests (the M1 git read is a local subprocess, not a network call). |
| SC-08 | ✅ | Input validation at the boundary — jsonschema fail-closed (`additionalProperties:false`, closed enums, required) + `identify()` rejects unknown kind/version; this is the spine's core behaviour (`_schemas.py:90-121`). |
| SC-09 | N/A | No log sink. |
| SC-10 | ⏳ | No committed `uv.lock` / `pip-audit` yet (CI not wired); the single runtime dep is `jsonschema`. Lands with the pipeline (rides the fleet devpi-backfill gap). §4. |
| SC-11 | N/A | No secrets to leak in logs/repr. |
| SC-12 | ✅ | `SECURITY.md` present — the parse/filesystem security model + supported-versions + reporting. |
| SC-13 | N/A | No keys at rest. |
| SC-14 | N/A | No authentication surface. |
| SC-15 | ✅ | Paths are operator/CLI-supplied (trusted), not network-derived; the M1 `DiskProvider` confines reads to the project's `fed-resources/` tree. |
| SC-16 | N/A | No privileged operations. |
| SC-17 | N/A | No security-audit-log subsystem (the run-record's lease audit is domain data, not an SC-17 sink). |
| SC-18 | ⏳ | Reproducible build: hatchling sdist+wheel, but no release/CI build yet — the build-once invariant lands with the publish step. §4. |
| TS-01 | ⏳ | M0 ships one contract suite (`tests/test_schemas.py`) covering `_schemas`/`reader`/`states`/`validate`; the src↔test 1:1 mirror + `test_mirror.py` lint land with M1. §4. |
| TS-02 | ✅ | Unit suite: no creds/network/daemon (`tmp_path` + shipped `examples/`). |
| TS-03 | ✅ | Isolation via `tmp_path`; no process-global state mutation. |
| TS-04 | ✅ | `filterwarnings = ["error"]` set (`pyproject` `[tool.pytest.ini_options]`). |
| TS-05 | ✅ | `--strict-markers --strict-config` in `addopts`. |
| TS-06 | ✅ | Coverage floor 80 — `[tool.coverage] fail_under=80` + `[tool.mgf-fed] coverage_floor=80`; CI enforcement lands with the pipeline (WF). |
| TS-07 | N/A | No typed app exceptions to test. |
| TS-08 | ✅ | The error-translation boundary is tested — `test_reader_*` (missing→`UNKNOWN`, corrupt/unknown-version/violation→`UNREADABLE`). |
| TS-09 | ✅ | The NDJSON line-validation path is exercised by the `live_*.ndjson` contract examples (`test_example_validates`). |
| TS-10 | ✅ | Security-relevant behaviour pinned — fail-closed tests (`test_unknown_kind_fails`, `test_unknown_schema_version_fails`, `test_additional_property_fails`, `test_bad_enum_fails`, `test_blocked_task_requires_reason`, `test_unidentifiable_payload_fails`). |
| TS-11 | N/A | No GUI. |
| TS-12 | N/A | No async. |
| TS-13 | ⏳ | The natural property test (canonical-JSON `regenerate → byte-identical`) lands with the M1 engine; `property` marker registered. §4. |
| TS-14 | N/A | No performance budgets. |
| TS-15 | N/A | No real-backend smoke (no external backend). |
| TS-16 | ✅ | Assert messages are self-explanatory (`"a blocked task without a reason must fail"`, `"kinds without an example: …"`). |
| TS-17 | ✅ | Fixtures local to the test module; no cross-package import / no conftest needed yet. |
| TS-18 | N/A | No slow tests (the suite is fast). |
| TS-19 | ✅ | The 13-marker federation taxonomy registered + `--strict-markers` (`pyproject` markers). |
| TS-20 | ⏳ | Single flat suite at M0; the `unit/`/`smoke/`/`integration/`/`e2e` partition lands with M1. §4. |
| TS-21 | ⏳ | `smoke` marker registered; the `tests/smoke/` import + `__all__`-reachable smoke test lands with M1. §4. |
| TS-22 | ⏳ | `mgf-test-supervisor` is in `[dev]`; tiered runs (`--tier`) not yet wired (`.gates`). §4. |
| TS-23 | ⏳ | `pytest-timeout` configured (`timeout=30`/thread, `faulthandler_timeout=60`); supervisor self-check / `.gates` adoption pending. §4. |
| TS-24 | ⏳ | Structured per-test JSONL (`.gates/last-run/run.jsonl`) — supervisor not yet adopted. §4. |
| TS-25 | ⏳ | Flaky auto-quarantine via the supervisor — not yet wired. §4. |
| TS-26 | N/A | Pure Python; no built/native artefacts. |
| TS-27 | ⏳ | Per-failure detail bundles (`.gates/last-run/failures/`) — supervisor not yet wired. §4. |
| TS-28 | N/A | Per-test perf attribution opt-in; not enabled. |
| AP-01 | ✅ | `__all__` at the package boundary (`__init__.py:24`); internal registry is single-underscore-private (`_schemas.py`). |
| AP-02 | ✅ | Every public name documented (docstrings on `read_file`/`read_payload`/`validate_payload`/`identify`, `ReadResult`, `SyncState`). |
| AP-03 | ✅ | SemVer — `0.1.0` (0.x window; MINOR may break per AP-03). |
| AP-04 | N/A | No deprecations yet. |
| AP-05 | ✅ | Optional params are keyword-only with defaults — `read_file(path, *, validate=True)`, `read_payload(payload, *, validate=True)`. |
| AP-06 | ✅ | Narrow return types — `ReadResult`, `Identity`, `list[str]`; not broad `Iterable`/`Any`. |
| AP-07 | N/A | Public functions return result objects; they raise nothing to document. |
| AP-08 | ✅ | `from __future__ import annotations` in every module; `if TYPE_CHECKING:` used for `Validator` import (`_schemas.py:23`). |
| AP-09 | ✅ | `src/mgf/fedres/py.typed` present; classifier `Typing :: Typed`; wheel ships `src/mgf`. |
| AP-10 | ⏳ | No `PUBLIC_API.json`/`.md` yet — generated/applied by the scaffold step (tool-driven). §4. |
| AP-11 | ⏳ | Stability tiers declared in `PUBLIC_API` — pending AP-10. §4. |
| AP-12 | N/A | No breaking changes yet. |
| AP-13 | ⏳ | `__version__ = "0.1.0"` is a literal in `__init__.py:22` and `pyproject` `version` (in agreement) — not yet single-sourced from metadata + no version-in-sync test / `app-doctor` check. §4. |
| AP-14 | ✅ | Internal modules not imported by consumers — `_schemas` is single-underscore-private; the public surface is re-exported via `__init__.__all__`. |
| AP-15 | N/A | No backward-compat shims. |
| AP-16 | ✅ | pyproject.toml carries a single mgf-common pin — the `[standards]` conformance-tooling extra — already on the federation window `mgf-common[standards]>=0.47,<1.0` (floor kept, ceiling <1.0 per API_DESIGN §4.4; widened in the AP-16 cohort wave, 2026-07-01). The `mgf-common-matrix` floor re-run step is absent by shape, not by drift: the generator splices it only for a **runtime** mgf-common floor (mgf.fed._woodpecker — a standards-only conformance pin “correctly leaves the matrix OFF — no runtime floor to guard”), and mgf-fedres's sole runtime dependency is jsonschema. Mirrors the adjudicated mgf-brand-web AP-16 row. Row added when mgf.standard 0.1.61 entered AP-16 into the released MUST index (264→265). |
| SP-01 | ✅ | `SCOPE.md` §1 — the headless spine IN (the `fed-resources/` convention, schemas, sync engine, `SourceProvider`, live/run-records, D-GEN, the `fedres` CLI). |
| SP-02 | ✅ | `SCOPE.md` §2 — web frameworks / brand layer / warden+testctl / fleet orchestration / standards corpus OUT with owners cited. |
| SP-03 | ✅ | `SCOPE.md` §3 — the scope-creep gate (shared-by-both-consumers? headless? preserves the spine invariants?). |
| SP-04 | ✅ | Adjacent surfaces are demand-driven by the plan (`PackageProvider`, the Zig/sooth adapters) — held until a consumer signal. |
| SP-05 | ✅ | OUT entries cite the owner (`mgf-fed-web`/`mgf-test-web`/`mgf-brand-web`/`mgf-fed`/`mgf-standard`/`mgf-test-supervisor`). |
| SP-06 | ✅ | `SCOPE.md` §6 — revisit-on-MAJOR; re-affirms the headless + single-schema-authority + `source/`-vs-`generated/` invariants. |
| WF-01 | ⏳ | No `.woodpecker.yml` yet (push/PR CI) — the tool-driven scaffold step. §4. |
| WF-02 | ⏳ | The four-gate CI (ruff / `ruff format --check` / mypy / pytest) is generated, not yet applied. §4. |
| WF-03 | ⏳ | Tag-driven publish steps — pending the pipeline. §4. |
| WF-04 | ⏳ | Publish creds via CI secret — pending the pipeline. §4. |
| WF-05 | ⏳ | Tag-version coherence step — pending the pipeline. §4. |
| WF-06 | ⏳ | Fresh wheel build in CI — pending the pipeline. §4. |
| WF-07 | ⏳ | Pre-publish smoke (install the built wheel + import) — pending the pipeline. §4. |
| WF-08 | ⏳ | Post-publish verify — pending the pipeline. §4. |
| WF-09 | ⏳ | Pinned CI images — set when `.woodpecker.yml` is generated. §4. |
| WF-10 | ⏳ | Parallel `test-3.11/3.12/3.13` matrix — set when CI is generated. §4. |
| WF-11 | ⏳ | Frozen-lock install (`uv sync --frozen`) — fleet-infra (devpi backfill gap), part of the generated template. §4. |
| WF-12 | ⏳ | CI surfaces exit codes / no `\|\| true` — set when CI is generated. §4. |
| WF-13 | ⏳ | `.woodpecker.yml` will be the generated, drift-checked artefact (`mgf-fed scaffold`); not yet present. §4. |
| REL-01 | ⏳ | No annotated release tag yet (0.1.0 unpublished). §4. |
| REL-02 | ⏳ | Build-once / no version reuse — lands with the release flow. §4. |
| REL-03 | ⏳ | `PUBLIC_API.json` reflecting HEAD — pending AP-10/the release. §4. |
| REL-04 | ⏳ | Publish token from CI secret — pending the pipeline. §4. |
| REL-05 | ⏳ | Immutable published artefact — no release yet. §4. |
| REL-06 | ⏳ | Ordered publish flow (build → tag → publish → verify) — pending the pipeline. §4. |
| REL-07 | ⏳ | Retro-and-notify on a shipped FEEDBACK — no release yet (no papers). §4. |
| REL-08 | ⏳ | Pre-release smoke on the built wheel — pending the pipeline. §4. |
| REL-09 | ⏳ | FEEDBACK status flips at release — no release yet. §4. |
| REL-10 | N/A | Cohort-walk applies once it has consumers + a mgf-common pin to break; it is a new leaf. |
| REL-11 | N/A | Phase A/B release split is an orchestrator (`mgf-fed`) discipline, not per-library. |
| REL-12 | N/A | The Phase-A agent pytest-denial handling is an orchestrator-loop concern, not this library's. |
| REL-13 | N/A | The federation consistency gate runs from the mgf-common supervisor at release time; `mgf-fedres` is not yet registered (tracked at mgf-standard). |
| PKG-01 | ⏳ | Channel: `pyproject [tool.uv] index-url` is the self-hosted devpi index (B2 migration); the devpi-vs-Codeberg reconciliation is a fleet-governance decision. §4. |
| PKG-02 | ⏳ | Publish endpoint — pending the pipeline. §4. |
| PKG-03 | ⏳ | Token-scoped publish auth — pending the pipeline. §4. |
| PKG-04 | ⏳ | Ordered publish flow to the index — pending the pipeline. §4. |
| PKG-05 | ⏳ | Post-publish REST/index verify — pending the pipeline. §4. |
| PKG-06 | N/A | The one runtime dep (`jsonschema`) is a public-PyPI package; no `mgf-*` runtime dep requiring per-package source pinning. |
| PKG-07 | N/A | Index-operator immutability/recovery concern, not the library repo's. |
| PKG-08 | N/A | Account/index-level retention, not per-repo. |
| PKG-09 | ⏳ | Tag-driven CI publish — pending the pipeline. §4. |
| PKG-10 | ✅ | Naming/build — `mgf-fedres` dist → `mgf.fedres` dotted import (PEP 420); `[tool.hatch] packages=["src/mgf"]`; `[project.urls]` → Codeberg. |
| PKG-11 | N/A | No agent version-check tooling in this library. |
| PKG-12 | ✅ | No `pypi.org` publish surface — README/pyproject target the self-hosted index only. |
| DOC-01 | ✅ | Root baseline complete — README, LICENSE, CHANGELOG, CONTRIBUTING, SECURITY, FEEDBACK, AGENTS, STARTHERE, DEPS, FEDERATION + the `docs/` tree (`PUBLIC_API` pending = DOC-08). |
| DOC-02 | ✅ | `docs/` buckets present — `docs/planning/`, `docs/claude/`, `docs/memory/`, `docs/inprogress/` (reference/cutover/recipes added when needed). |
| DOC-03 | ⏳ | Bucket `README.md` charters for `docs/claude/` / `docs/memory/` / `docs/inprogress/` not yet authored. §4. |
| DOC-04 | ✅ | `CHANGELOG.md` present (Keep a Changelog; M0 contract + the M1-in-progress Unreleased section). |
| DOC-05 | N/A | No breaking changes / cutover yet. |
| DOC-06 | ✅ | `docs/planning/PLAN.md` is the work-unit tracker; this file is the conformance tracker. |
| DOC-07 | ✅ | `docs/claude/CLAUDE.md` present (federation briefing pointer + project-specific lookup). |
| DOC-08 | ⏳ | `PUBLIC_API.json`/`.md` + the drift pin — generated by the scaffold step; not yet present. §4. |
| DOC-09 | ✅ | Docs name code with relative links; minimal drift surface. |
| DOC-10 | ✅ | `FEEDBACK.md` present (repo-scoped; federation-wide routed to mgf-common). |
| DOC-11 | N/A | `docs/inprogress/` is active (this ledger), not a graveyard. |
| DOC-12 | ✅ | Docs navigable — relative links, `## §` headings, no marketing prose. |
| DOC-13 | ✅ | `FEEDBACK.md` documents the repo-scoped vs federation-wide vs per-consumer routing. |
| DOC-14 | N/A | Federation sibling — exempt from `MGF_ADOPTION.md` (ADP-04). |
| DOC-15 | ✅ | This `MGF_STANDARDS_CONFORMANCE.md` exists + accounts for all 263 MUSTs. |
| DOC-16 | ✅ | `DEPS.md` present (§1 deps + §2 dependents). |
| DOC-17 | ✅ | `FEDERATION.md` pointer stub (links the canonical contract in mgf-standard; no duplication). |
| DOC-18 | ✅ | Change propagation walked — the doc baseline + this ledger authored together (CHANGELOG/DEPS/SCOPE/CLAUDE consistent). |
| DOC-19 | ✅ | `LESSON_LEARNED.md` present (append-only, dated, newest-first). |
| OP-01 | ⏳ | Rich `version` verb — arrives with the M1 `fedres` CLI (M0 ships only `fedres-validate`). §4. |
| OP-02 | ⏳ | `app-doctor --standards` per-repo gate — lands with the CI pipeline. §4. |
| OP-03 | ✅ | `[project.urls]` Homepage + Issues (Codeberg); no placeholder URLs in pyproject/README. |
| OP-04 | ✅ | README states the pre-alpha status honestly + links `docs/planning/`; no false "shipped" framing. |
| OP-05 | ⏳ | `explain` verb — M1 CLI. §4. |
| OP-06 | N/A | No runtime-log access surface (no logging — library). |
| OP-07 | ⏳ | `bundle` diagnostic verb — M1 CLI. §4. |
| OP-08 | N/A | No unbounded state directory. |
| OP-09 | N/A | Service-only (production safety guards). |
| OP-10 | N/A | Service-only (deployable-artefact versioning). |
| OP-11 | N/A | Service-only (alert routing / runbooks). |
| OP-12 | N/A | Service-only (backup/restore drills). |
| DEP-01 | N/A | Not a deployed service (Infrastructure-as-Code). |
| DEP-02 | N/A | Service-only (config-as-code on VMs). |
| DEP-03 | N/A | Service-only (immutable release artefacts). |
| DEP-04 | N/A | Service-only (production secrets). |
| DEP-05 | N/A | Service-only (environment-explicit deploy). |
| DEP-06 | N/A | Service-only (reversible deploys / rollback). |
| DEP-07 | N/A | Service-only (`deploy/` structure). |
| DEP-08 | N/A | Service-only (production observability). |
| DEP-09 | N/A | Service-only (DNS + TLS infra). |
| DEP-10 | N/A | Service-only (first-cut runbook). |
| DEP-11 | N/A | Service-only (multi-environment topology). |
| PR-01 | ✅ | Imports no UI/web framework — headless (only `jsonschema`); the no-web-framework rule is the spine's defining constraint (SCOPE SP-02). |
| PR-03 | N/A | No UI — the webs are separate repos. |
| PR-04 | N/A | No UI layers here to enforce independence between. |
| PR-05 | N/A | No UI adapters. |
| PR-07 | ✅ | PR-* classified here — PR-01 ✅; PR-03/04/05 N/A (no UI). |
| AG-01 | ✅ | `AGENTS.md` thin pointer to `mgf-fed agents`. |
| AG-02 | N/A | The canonical briefing is mgf-common's; `mgf-fedres` doesn't redefine it. |
| AG-03 | ⏳ | Commit-trailer hook + `check_commit_trailers.py` + the CI commit-trailers gate are the byte-exact scaffold files; not yet applied. §4. |
| AG-04 | N/A | Friction-filing is session conduct, not a codebase artefact. |
| AG-05 | N/A | Memory verification is session conduct. |
| AG-06 | N/A | Risky-op confirmation is session conduct. |
| AG-07 | N/A | TaskCreate is session conduct. |
| AG-08 | N/A | Memory-write scoping is session conduct. |
| AG-09 | N/A | Sibling-version verification is session conduct. |
| AG-10 | N/A | Standards-drift filing is session conduct. |
| AG-11 | N/A | Cross-project feedback routing is session conduct. |
| AG-12 | ✅ | `docs/claude/CLAUDE.md` carries the project-scoped briefing. |
| AG-13 | N/A | Supervisor-flow enforcement (process rule). |
| AG-14 | ✅ | Coupled-surface changes propagated same-pass (the doc baseline + ledger authored together). |
| AG-15 | N/A | Agent-empowerment charter (conduct). |
| AG-16 | ✅ | The `[standards]` extra deps `mgf-common[standards]>=0.47,<0.50` (`pyproject`). |
| AG-17 | ✅ | In-repo agent memory present — `docs/memory/MEMORY.md` (AG-17 index + template). |
| AG-18 | ⏳ | `.gitignore` present + ignores `my_stuff/` ✅; the `.gitmessage` + `.githooks/prepare-commit-msg` are the scaffold step. §4. |
| AG-19 | N/A | Runtime off-machine auto-memory — machine-local; not a codebase rule. |
| TM-01 | ✅ | UTC/RFC-3339 at the boundary — wire timestamps validated by the `iso_datetime` `format: date-time`; no naive datetime constructed in the M0 core. |
| TM-02 | ✅ | Wire format ISO-8601 — the schemas pin `format: date-time`; examples use `…Z`. |
| TM-03 | N/A | No duration measurement in the core (durations are recorded values supplied by the generator/warden). |
| TM-04 | N/A | No `datetime.now()` in the M0 core; no clock-dependent logic to inject. |
| TM-07 | N/A | UTC only; no IANA timezone-name usage. |
| TM-08 | N/A | No async. |
| PF-01 | N/A | No perf-pinned hot path / budgets (validation cost is bounded by input size). |
| PF-02 | N/A | `perf` marker registered; no perf tests. |
| PF-03 | N/A | No perf baselines. |
| PF-04 | N/A | No re-baselining (no budgets). |
| PF-05 | N/A | No perf harness. |
| PF-07 | N/A | No perf tests. |
| PF-08 | N/A | No hardware-tier baselines. |
| OB-01 | N/A | No observability surface — no metrics/traces/SLIs (cf. LG N/A). |
| OB-02 | N/A | No metrics. |
| OB-03 | N/A | No metrics. |
| OB-04 | N/A | No traces. |
| OB-05 | N/A | No service / SLIs. |
| OB-07 | N/A | No alerts. |
| OB-08 | N/A | No SLI/SLO/alert definitions. |
| OB-09 | N/A | Emits no structured `LogRecord`. |
| OB-10 | N/A | Emits no `LogRecord` wire shape. |
| OB-11 | N/A | No logging-statistics subsystem. |
| NM-01 | ✅ | Dist name `mgf-fedres` (hyphen) — `pyproject.name`. |
| NM-02 | ✅ | Dotted import `mgf.fedres`; PEP-420 (no `src/mgf/__init__.py`). |
| NM-03 | ✅ | Codeberg slug `mgf-fedres` (hyphen) — `[project.urls]`. |
| GUI-01 | ✅ | Imports no Qt at module level (headless; grep clean) — like PR-01. |
| GUI-02 | N/A | No GUI. |
| GUI-03 | N/A | No GUI workers. |
| GUI-04 | N/A | No GUI workers. |
| GUI-05 | N/A | No Qt `main()`. |
| GUI-06 | N/A | No presentation widgets. |
| GUI-07 | N/A | No streaming GUI. |
| GUI-08 | N/A | No GUI-state persistence. |
| GUI-09 | N/A | No GUI tests. |
| GUI-10 | N/A | No GUI capability-gating. |
| FB-05 | ✅ | `FEEDBACK.md` present + the spine-vs-federation-vs-per-consumer routing documented; cross-repo feedback routes to the target repo, never a direct edit. |

---

## AG-20 — owned-infrastructure discipline (standards v2.26)

✅ **Accounted 2026-06-29.** Review-enforced agent conduct (like AG-04 / AG-05 /
AG-15 — no single checkable artifact). Before declaring an action **blocked /
human-gated / impossible**, an agent consults
[`MGF_INFRA.md`](https://codeberg.org/magogi-admin/mgf-standard/src/branch/main/MGF_INFRA.md)
(the fleet infrastructure / access registry) and attempts the self-owned recovery
path — an auth/access failure on Magogi-owned infra (expired token, 401, stopped
service) is a solvable sub-problem, not a terminal wall. Recorded "blocked" /
"gated" notes carry an unblock-path + as-of date and are re-derived against current
capabilities.
