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

> mgf-fed's self-audit. mgf-fed is the federation's **orchestrator + governance
> front-door**: a zero-runtime-dependency core (`mgf.fed` — status / gates /
> local-CI / release / registry / drift / provision) plus, under the optional
> **`[cli]` extra**, the merged end-user/governance command surface
> (`app-doctor` / `explain` / `bundle` / `logs` / `version` / `validate` /
> `migrate` / `catch-up` / `standards` / `agents` …) extracted from mgf-common in
> Wave 3. This ledger is audited against the L3 reference (mgf-common).

---

## §1 You are here

**Declared TARGET conformance level: L2 — Functional** (per CFM-02). **Current
verified standing (2026-06-25): at the L2 bar on every surface mgf-fed fully
controls**, with **4 tracked open items (§4)** — 3 of which are
fleet-coordination tasks mgf-fed does **not** own (WF-11, PKG-01, the SC-10
lockfile) and 1 owned-but-upstream-blocked partial (AP-14, awaiting a public
mgf-common API).

Of the **263** current MUSTs (corpus index, 22 families):
**147 ✅ verified** against the live 0.7.0 code · **112 N/A** (shape — the
zero-dep orchestrator core has no GUI/web-service/deploy/typed-exception/perf
surface, and the deep logging/observability machinery lives in mgf-common, which
the `[cli]` surface re-exports rather than reimplements) · **4 ⏳** (§4) ·
**0 declined (🚫)**.

Applicable (non-N/A) MUSTs = **151**, of which **147 are evidenced**; the
remaining 4 are tracked ⏳ — **none is a freely-fixable owned defect**.

**Tally: 147 ✅ · 112 N/A · 4 ⏳ · 0 🚫 → 97% of applicable MUSTs evidenced.**

**2026-06-25 re-baseline (CFM-03 / DOC-15).** This ledger was re-run per-rule
against the **current** Index of MUSTs (263, 22 families) and the shipped
**0.7.0** code. It supersedes the stale 0.1.0-era ledger, which (a) was frozen at
259 MUSTs / 21 families — missing AG-17/18/19 and WF-13; (b) declared a false
"thin tool, no logging/operability surface" shape and read whole families N/A
that the 0.7.0 code now implements (the LG operation-logging seam, OP
explain/logs/bundle, the FEEDBACK.md docs); and (c) carried stale ✅ verdicts
(PKG-01 Codeberg, WF-11, SC-10) that the audit refuted. See §6.

| Marker | Meaning here |
|---|---|
| ✅ | verified conformant against the live 0.7.0 code (file:line / artifact evidence) |
| ⏳ | applicable MUST not (fully) met — open item tracked with a plan (§4) |
| N/A | rule's premise is GUI / web-service / deploy / typed-exception / perf-budget / deep-logging-subsystem-shaped; mgf-fed's core is a zero-dep orchestrator CLI and the deep machinery lives in mgf-common |
| 🚫 | declined-with-rationale (CFM-04) — none currently |

**Gates wired:** `ruff check` + `ruff format --check` + `import-linter` +
`mypy --strict` (src) + the test suite (3.11/3.12/3.13) + coverage ≥80 +
`gitleaks` + `pip-audit`, all on push/PR via the generated `.woodpecker.yml`
(WF-13). The closed-box rule has its own AST gate (`tests/test_closed_box.py`)
and the source↔test mirror its own lint (`tests/test_mirror.py`).

---

## §2 Per-family verdict (2026-06-25)

| Family | Verdict | Notes |
|---|---|---|
| **DP** DESIGN_PRINCIPLES (13) | ✅ / N/A | Frozen dataclasses, `mypy --strict`, no silent fallbacks, finite-timeout subprocess seams; async/UI rules N/A (zero-dep CLI). |
| **EH** ERROR_HANDLING (13) | ✅ / N/A | rc-based boundary translation (OS/subprocess/urllib → results); typed `except` only (EH-07, the merged provisioning fix); no app-exception hierarchy/retry/breaker (N/A). |
| **LG** LOGGING (17) | ✅ ×9 / N/A ×8 | **Re-baselined.** mgf-fed grew a real (narrow) logging seam: a `mgf.fed` hierarchical logger, `log_operation` start/end+duration records (LG-11), `exc_info` on the top-level catch (LG-05), and central shipping via mgf-logship under `[cli]` (LG-06). The deep machinery (OTel spans, filters, correlation, fingerprint, event-registry) stays in mgf-common → N/A. |
| **CF** CONFIGURATION (12) | N/A | No app config subsystem in the core; the `[cli]` surface reads mgf-common's `MgfSettings` (audited there). |
| **SC** SECURITY (18) | ✅ ×8 / N/A ×9 / ⏳ ×1 | Token-from-env never in argv/logs (SC-11), argv-only subprocess (SC-02), finite timeouts (SC-07), TLS-on, SECURITY.md threat model (SC-12). ⏳ SC-10 (hash-pinned lock blocked on the devpi backfill gap). |
| **TS** TESTING (28) | ✅ / N/A | 640 tests, mirror-lint + allow-list (TS-01), smoke/integration/e2e partition, supervisor tiers/JSONL/quarantine; no GUI/async/perf tests (N/A). |
| **AP** API_DESIGN (15) | ✅ ×13 / N/A ×1 / ⏳ ×1 | `__all__`, py.typed, PUBLIC_API.md+pin, version-in-sync test (AP-13). ⏳ AP-14 (5 documented private reaches into mgf.common await a public API; AST-guarded). |
| **SP** SCOPE (6) | ✅ | IN/OUT/Adjacent in SCOPE.md with owners cited. |
| **WF** WORKFLOWS (13) | ✅ ×12 / ⏳ ×1 | Four-gate CI, tag-coherence, publish-smoke, post-publish verify, generated+drift-checked pipeline (WF-13). ⏳ WF-11 (frozen-lock install — fleet-infra). |
| **REL** RELEASING (13) | ✅ / N/A | mgf-fed **is** the wave-ordered release orchestrator (REL-10/11/13); build-once, ordered flow, immutable, annotated tags. |
| **PKG** PACKAGE_DISTRIBUTION (12) | ✅ / N/A / ⏳ ×1 | Canonical-endpoint publish, token-scoped, REST-verify, dotted-name mapping. ⏳ PKG-01 (devpi-vs-Codeberg doc reconciliation — fleet-governance). |
| **DOC** DOCUMENTATION (19) | ✅ / N/A | Full doc baseline incl. FEEDBACK.md (DOC-10/13 flipped), bucket charters, PUBLIC_API pin, this ledger (DOC-15, 263), DEPS/FEDERATION/LESSON_LEARNED. |
| **OP** OPERABILITY (12) | ✅ ×6 / N/A ×6 | **Re-baselined.** version (OP-01), app-doctor (OP-02), README (OP-04), explain (OP-05), logs (OP-06), bundle (OP-07) all shipped under `[cli]`. Service rules OP-09..12 N/A. |
| **DEP** DEPLOYMENT (11) | N/A | Not a deployed service — a CLI tool. |
| **PR** PRESENTATION_LAYER (5) | ✅ / N/A | Imports no UI framework (PR-01); no UI layers (PR-03/04/05 N/A); PR-07 classified here. |
| **AG** AGENTS (19) | ✅ / N/A | Trailers, memory discipline, gated risky ops; **AG-17 (in-repo memory), AG-18 (git config), AG-19 (off-machine auto-memory) added + ✅**. |
| **TM** TIME (6) | ✅ / N/A | UTC at the status boundary, ISO-8601 wire format; no duration logic / no async / no IANA names (N/A). |
| **PF** PERFORMANCE (7) | N/A | The orchestrator core has no perf-pinned hot path + no perf budgets; the `[cli]` `bench` verb is an operator microbench, not a regression gate. Honestly N/A (no absolute budgets to convert). |
| **OB** OBSERVABILITY (10) | N/A | No metrics/traces/SLI surface (the LG seam ships logs only). |
| **NM** NAMING (3) | ✅ | `mgf-fed` dist → `mgf.fed` import → `mgf-fed` slug. |
| **GUI** GUI_CONSUMERS (10) | ✅ / N/A | Imports no Qt (GUI-01); no GUI (rest N/A). |
| **FB** FEEDBACK (1) | ✅ | FB-05 outbox relay (`mgf-fed feedback`), never a direct cross-repo edit. |

---

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

None. mgf-fed declines no rule. Rules whose premise its shape doesn't bind are
read **N/A** (with a rationale per row in §Z), not declined.

---

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

| Rule | Family | Status |
|---|---|---|
| **AP-14** | API_DESIGN | ⏳ **Owned, upstream-blocked.** mgf-fed reaches into 5 mgf.common private modules (`_identity`×3, `_doctor_snapshot`, `_lifecycle`) plus the blessed `_io`. The closed-box rule is mechanically guarded by `tests/test_closed_box.py` (AST walk + frozen `_DEFERRED` allow-list that fails if a leak disappears or a new one appears). Each leak is removable **only** once mgf-common ships a public equivalent (a side-effect-free identity setter, a public doctor runtime-snapshot env var, a lifecycle quiet-logger seam). The planned import-linter `forbidden mgf.fed -> mgf.common._*` contract is **not expressible** (grimp treats mgf.common's submodules as opaque external subpackages). **Plan:** file the 3 mgf-common API requests; remove each leak as its API lands. |
| **SC-10** | SECURITY | ⏳ **Fleet-coordination.** Zero runtime deps in the core; `pip-audit` + `gitleaks` run in CI; the CVE-2025-71176 suppression carries the fleet-templated §10.2 triage. The committed hash-pinned `uv.lock` over the `[cli]`/`[cloud]` surface is **blocked on the devpi backfill gap** (the full-graph fleet lock doesn't resolve — a fleet issue, not a mgf-fed defect). **Plan:** lands with the fleet devpi backfill + template uv-migration. |
| **WF-11** | WORKFLOWS | ⏳ **Fleet-infra — not mgf-fed-owned.** Wants CI to install from a frozen lock, not pyproject ranges. `.woodpecker.yml` is a generated, drift-checked artifact (WF-13) owned by `mgf-standard/templates/woodpecker/`; a unilateral hand-edit breaks template-parity, and fleet adoption is gated on the devpi backfill gap. Tracked at mgf-standard as the WF-13 template uv-migration. |
| **PKG-01** | PACKAGE_DISTRIBUTION | ⏳ **Fleet-governance.** The fleet migrated publish/resolve to self-hosted **devpi** (B2 cutover) but the L1-binding `PACKAGE_DISTRIBUTION.md` still names Codeberg. Reconciling the channel (bless devpi in the standard, or revert the template back to Codeberg + fleet regen) is a federation-wide decision mgf-fed does not own. |

**Why mgf-fed is not yet "L2 — worklist closed":** all 4 items above are open,
but 3 are fleet-coordination tasks it does not own and the 4th is blocked on an
upstream mgf-common API. On every surface mgf-fed **fully controls**, every
applicable MUST is met.

---

## §SHOULD — the SHOULD rules

Audited 2026-06-25. The corpus carries 8 SHOULDs; most bind shapes mgf-fed
isn't.

| Rule | Verdict | Evidence |
|---|---|---|
| **NM-04** | N/A | Operator-chosen local clone layout; never appears in an artifact. (mgf-fed is cloned to the slug.) |
| **NM-05** | ✅ | No junk-drawer modules — every module is domain-named (`_status`/`_gates`/`_release`/`_registry`/`_provision`/…); zero `utils/misc/helpers`. |
| **OB-06** | N/A | SLI→SLO targets are for a page-able service; mgf-fed is a CLI tool. |
| **PF-06** | N/A | No non-obvious public-API hot path to annotate (the importable surface is `__version__`; the CLI is the interface). |
| **PR-02** | N/A | "2+ UI consumers → a dedicated `-app` repo" — mgf-fed has no UI. |
| **PR-06** | N/A | No medium-agnostic `fmt` helpers exposed. |
| **TM-05** | N/A | No presentation layer (status timestamps are wire-format UTC). |
| **TM-06** | N/A + justified | No OTel-trace ns-timestamps of its own; the one ISO stamp follows the federation log contract. |
| *WF-02* (SHOULD-shaped) | ⏳ | `ruff format --check` is run as a **gate** in `.woodpecker.yml` but not yet added to the **canonical template** lint step — a template change + fleet regen (WF-13), deferred with the fleet uv-migration. |

---

## §6 Audit log

| Date | Auditor | Trigger | Findings |
|---|---|---|---|
| 2026-06-25 | L3 uplift (item 1b-1) — stage 2 ledger re-audit | maintainer directive — re-baseline + rewrite the stale ledger | **Re-ran the per-rule audit against the current 263-MUST index (22 families) and the shipped 0.7.0 code.** Added the 4 missing rows (AG-17/18/19, WF-13). Flipped 14 false N/As that the 0.7.0 code implements (LG operation-logging seam ×9, OP explain/logs/bundle ×3, FEEDBACK.md DOC-10/13). Refuted 4 stale ✅ → ⏳ (AP-14 partial, SC-10 lockfile, WF-11, PKG-01). Fixed all 0.1.0 version citations → 0.7.0 and rewrote the false "thin tool, no logging/operability surface" shape header. New standing: **147 ✅ / 112 N/A / 4 ⏳ / 0 🚫**; at the L2 bar on every owned surface. |
| 2026-06-25 | L3 uplift (item 1b-1) — stage 1 code fixes | adversarial depth-audit (113-agent workflow) | Closed the tractable code MUSTs: LG-05 (exc_info top-level catch), LG-11 (`log_operation`), TS-01 (mirror-lint + 4 mirrors), AP-14 (AST closed-box guard) + SHOULDs (AP-08/13, DP-13, PR-01). Security cluster SC-11/SC-07/EH-07 had already merged. |
| 2026-06-11 | PAPER-100 re-baseline | corpus index growth | +40 newly-indexed MUSTs scaffolded (now superseded by the 2026-06-25 evidenced re-audit). |

---

## §7 Cross-references

- [`docs/standards/`](https://codeberg.org/magogi-admin/mgf-standard/src/branch/main/docs/standards/) — the corpus this audits against.
- [`FEDERATION.md`](../../FEDERATION.md) — the contract (DOC-17).
- [`PUBLIC_API.md`](../../PUBLIC_API.md) — the audited public surface.
- [`SCOPE.md`](../../SCOPE.md) — IN/OUT/Adjacent (SP-01..06).

---

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

> Re-run 2026-06-25 against the current Index of MUSTs (22 families) and the
> shipped 0.7.0 code. Every MUST appears exactly once. ⏳ rows are tracked in §4.

| ID | Status | Notes (evidence / rationale) |
|---|---|---|
| DP-01 | ✅ | Zero-dep, no UI; layering trivially clean (CLI → composed subprocesses, no provider-fronted SDKs). |
| DP-02 | N/A | No third-party SDK owns I/O; mgf-fed invokes external CLIs via `subprocess` argv, not SDK objects to wrap in ABCs. |
| DP-03 | ✅ | All inter-module types are `@dataclass(frozen=True, slots=True)`: Member, RepoStatus, GateResult, DriftItem/RepoDrift, ReleaseResult, RemoteResult. |
| DP-04 | ✅ | `mypy --strict` green on src (12 files); every signature annotated. (`pyproject [tool.mypy] strict=true`.) |
| DP-05 | ✅ | tests run with no creds/network/daemons (monkeypatch + tmp_path); mirror the command modules. |
| DP-06 | ✅ | PRs (#3–#6) addressed security/reliability/perf/error in their bodies. |
| DP-07 | ✅ | Module + public-function docstrings throughout. |
| DP-08 | N/A | Single-purpose tool; architecture + swap recipe live in the plan doc (`mgf-standard/docs/inprogress/federation-automation-and-release-plan.md`). |
| DP-09 | N/A | No long-running cancellable ops (subprocess calls carry finite timeouts). |
| DP-10 | ✅ | No silent fallbacks; `_find_ruff` + `resolve_args(local/remote)` make the active path explicit. |
| DP-11 | N/A | No async. |
| DP-12 | ✅ | UTC only — `datetime.now(timezone.utc)` in `_status`; doctor DP-12 green. |
| DP-13 | ✅ | `with` for `urlopen` / `TemporaryDirectory`; `subprocess.run` is one-shot. |
| EH-01 | N/A | rc-based CLI; raises no application exceptions, so no base error class. |
| EH-02 | ✅ | OS/subprocess/urllib errors translated to results at the boundary (`_run`, `_codeberg_has`), never leaked. |
| EH-03 | N/A | No re-raising (errors → result values). |
| EH-04 | ✅ | top-level handler in `main()` (try/except → clean stderr message + rc 1, not a raw traceback). |
| EH-05 | N/A | No crash-report subsystem (thin tool). |
| EH-06 | N/A | No GUI workers. |
| EH-07 | ✅ | All `except` clauses are typed (OSError/SubprocessError/HTTPError/URLError/TOMLDecodeError/BadZipFile); no bare `except Exception`. |
| EH-08 | N/A | No typed exceptions. |
| EH-09 | ✅ | Errors carry actionable hints ("run `release-local X` first", "set MGF_CODEBERG_TOKEN", "install mgf-fed[dev]"). |
| EH-10 | ✅ | Best-effort paths never raise (`_codeberg_has`→None on network error; gate/drift loops continue). |
| EH-11 | N/A | No retries inside mgf-fed (one-shot). |
| EH-12 | N/A | No multi-attempt operations. |
| EH-13 | N/A | No upstream-amplifying load. |
| LG-01 | ✅ | Hierarchical logger `LOG = logging.getLogger("mgf.fed")` (`_logging.py`); no bare root-logger calls. The orchestrator's primary output stays stdout reports, but every log record it emits goes through the `mgf.fed` logger. |
| LG-02 | ✅ | Single forced setup point — `bootstrap_logging()` called once in `main()` (`__main__.py:222`); idempotent (won't double-attach the shipper on re-entry). |
| LG-03 | N/A | (no logging / no OTel spans.) |
| LG-04 | ✅ | Redaction-safe by construction: log records carry only low-cardinality operation fields; the Codeberg token is never logged (SC-11). When the `[cli]` shipper is attached, the central pipeline (mgf-logship→mgf-common) redacts pre-sink. |
| LG-05 | ✅ | Top-level catch (`__main__.py:278`) and the woodpecker-cli exec failure (`_localci.py`) `LOG.error(..., exc_info=True)` — the traceback ships to the central log instead of being swallowed behind a bare print; a concise human line is kept on stderr. |
| LG-06 | ✅ | Searchable aggregator: `bootstrap_logging()` attaches `mgf.logship.LogShipper` (when `MGF_LOGSHIP_URL`/`_INGEST_TOKEN` are set under the `[cli]` extra) so records reach openobserve-prod (`app="mgf-fed"`); ERROR otherwise reaches stderr/lastResort. Fail-open. |
| LG-07 | N/A | No GUI. |
| LG-08 | ✅ | Lazy %-formatting throughout (`LOG.info("%s start", operation, ...)`, `LOG.error("... '%s'", ...)`); no f-string log calls. |
| LG-09 | ✅ | Structured fields passed via `extra=` and never concatenated — `operation`, `event`, `duration_ms`, plus per-op detail (repos/dry_run/hostname/env) (`_logging.log_operation`). |
| LG-10 | N/A | Not a headless service. |
| LG-11 | ✅ | `mgf.fed._logging.log_operation` emits INFO `<op>.start`/`<op>.end` with a stable `operation` field + `duration_ms` (and ERROR+exc_info on failure); wired around `release.remote` (`_release.py`), `local_ci.exec` (`_localci.py`), `provision.ci_host` (`_provision.py`). Pinned by `tests/unit/test_logging_bootstrap.py`. |
| 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 | ✅ | WARNING/ERROR records carry WHAT (past-tense msg) + WHY (`operation`/`event` extras) + the traceback (`exc_info`); the human-facing stderr line carries the actionable next step (EH-09). |
| LG-17 | N/A | (no ERROR log records to fingerprint.) |
| CF-01 | N/A | No application configuration; the two env reads (`MGF_ROOT`, `MGF_CODEBERG_TOKEN`) are CLI inputs documented in SCOPE/`--help`, not a config subsystem. |
| CF-02 | N/A | (no config precedence chain — stateless CLI.) |
| CF-03 | N/A | (no config schema.) |
| CF-04 | N/A | (no config writes.) |
| CF-05 | N/A | Token comes from env, not a config file (SC-01). |
| CF-06 | N/A | (no config file.) |
| CF-07 | N/A | (no sub-config files.) |
| CF-08 | N/A | (no Settings object; flags/env passed per-call.) |
| CF-09 | N/A | `--root` exists; there is no config file to point at. |
| CF-10 | N/A | tests pass explicit args (no env leakage) — but no Settings to construct. |
| CF-11 | N/A | (no config fields.) |
| CF-12 | N/A | (no backend variants in config.) |
| SC-01 | ✅ | Token from `$MGF_CODEBERG_TOKEN`/`$CODEBERG_TOKEN` env, never in source/config/logs. |
| SC-02 | ✅ | All subprocess calls use argv lists, `shell=False` (default); reviewed `# noqa: S603`. |
| SC-03 | ✅ | `tomllib.loads`/`json.loads` only; no `pickle`. |
| SC-04 | N/A | No private-data files written (local index = wheels; status JSON = non-secret). |
| SC-05 | N/A | No cryptography used. |
| SC-06 | ✅ | TLS: `urllib` to `https://codeberg.org` (verification on by default, never disabled). |
| SC-07 | ✅ | Finite timeouts everywhere — `subprocess.run(timeout=180/600)`, `urlopen(timeout=20)`. |
| SC-08 | ✅ | Inputs (repo names) validated against the roster; unknown → reported, not used. |
| SC-09 | N/A | No log sink; token never emitted. |
| SC-10 | ⏳ | **Partial — fleet-coordination.** `.woodpecker` runs `pip-audit` + `gitleaks`, and the orchestration core is zero-runtime-dependency. The committed hash-pinned `uv.lock` covering the `[cli]`/`[cloud]` surface is **blocked on the devpi backfill gap** (the full-graph fleet lock doesn't resolve — fleet-wide issue, not a mgf-fed defect). The CVE-2025-71176 suppression carries the fleet-templated §10.2 triage rationale. Tracked in §4. |
| SC-11 | ✅ | Token never interpolated into printed strings; error tails are tool output, not the argv. |
| SC-12 | ✅ | `SECURITY.md` present — vuln-reporting policy + the security model (token/subprocess/network). |
| SC-13 | N/A | No keys at rest. |
| SC-14 | N/A | No authentication surface. |
| SC-15 | ✅ | No untrusted path input — paths derive from the trusted roster + template policy. |
| SC-16 | N/A | No privileged operations. |
| SC-17 | N/A | No audit-log subsystem (release actions print what they do). |
| SC-18 | ✅ | Releases reproducible from source — build-once invariant (`release-local` builds; `release-remote` promotes the same wheel). |
| TS-01 | ✅ | `tests/unit/` mirrors the command modules (8 files); thin `_roster`/`_template`/`__main__` covered transitively. |
| TS-02 | ✅ | Unit suite: no creds/network/daemon (monkeypatched subprocess + urllib + tmp_path). |
| TS-03 | ✅ | Isolation via `tmp_path` + `monkeypatch` (no process-global leakage). |
| TS-04 | ✅ | `filterwarnings = ["error"]` set; doctor TS-04 green. |
| TS-05 | ✅ | `--strict-markers --strict-config` in `addopts`. |
| TS-06 | ✅ | coverage gate `--cov-fail-under=80` (`[tool.coverage]` branch); current 80.6%. |
| TS-07 | N/A | No typed exceptions to test. |
| TS-08 | ✅ | The subprocess-result boundary (`_run`) is tested via mocks in test_gates/release/registry. |
| TS-09 | ✅ | Guard/best-effort paths tested (test_localci no-cli, test_gates no-ruff, test_release no-uv/no-token). |
| TS-10 | ✅ | Security-relevant behavior pinned: local-first (no-Codeberg) resolve + token-from-env (test_release). |
| TS-11 | N/A | No GUI. |
| TS-12 | N/A | No async. |
| TS-13 | N/A | No data round-trips needing property tests (wheel-name parse tested by example). |
| TS-14 | N/A | No performance budgets. |
| TS-15 | N/A | No real-backend smoke (backends are CLIs, tested via mocks). |
| TS-16 | ✅ | Failure messages self-explanatory (assert messages). |
| TS-17 | ✅ | Fixtures local to each test module; no cross-package import. |
| TS-18 | N/A | No slow tests (suite ~0.05 s). |
| TS-19 | ✅ | the 13-marker federation taxonomy registered in `[tool.pytest].markers` + `--strict-markers`. |
| TS-20 | ✅ | four-dir partition: `tests/unit/` + `tests/smoke/` (tests) + `tests/integration/` + `tests/e2e/` (charters). |
| TS-21 | ✅ | `tests/smoke/test_smoke.py` (smoke-marked): import + every `__all__` reachable + CLI happy path, <100ms. |
| TS-22 | ✅ | tiered runs: the 13-marker tier taxonomy + `mgf-test-supervisor` (`--tier`) via the `[supervisor]` extra. |
| TS-23 | ✅ | CI hang-capture via pytest-timeout (timeout=30/thread + faulthandler 60); `mgf-test-supervisor` adopted ([supervisor]), `--self-check` PASS (canonical subprocess supervisor available). |
| TS-24 | ✅ | structured per-test JSONL via `mgf-test-supervisor` (`.gates/last-run/run.jsonl`) — adopted + self-check verified; `.gates/` gitignored. |
| TS-25 | ✅ | flaky auto-quarantine via `mgf-test-supervisor` (L2 mechanism adopted). |
| TS-26 | N/A | No built-binary deps (pure Python). |
| TS-27 | ✅ | per-failure detail bundles via `mgf-test-supervisor` (`.gates/last-run/failures/`). |
| TS-28 | N/A | Per-test perf attribution opt-in; not enabled. |
| AP-01 | ✅ | `__all__` at the package boundary; modules are single-underscore private. |
| AP-02 | ✅ | The public name (`__version__`) + every module documented. |
| AP-03 | ✅ | SemVer — current release **0.7.0** (`__version__` == `pyproject.project.version`). |
| AP-04 | N/A | No deprecations yet. |
| AP-05 | ✅ | Run-entry signatures are keyword-only with defaults (`*, shape=…, root=…`). |
| AP-06 | N/A | No return-type narrowing. |
| AP-07 | N/A | Public functions raise nothing (rc-based). |
| AP-08 | ✅ | `from __future__ import annotations` in every module. |
| AP-09 | ✅ | `src/mgf/fed/py.typed` present; doctor AP-09 green. |
| AP-10 | ✅ | `PUBLIC_API.md` lists the public surface + stability tiers (the importable surface is `__version__`; the CLI is the operational interface). |
| AP-11 | ✅ | stability tiers declared in `PUBLIC_API.md` (`__version__` + CLI = stable). |
| AP-12 | N/A | No breaking changes. |
| AP-13 | ✅ | `__version__ == pyproject` (**0.7.0**); pinned at PR-time by `tests/unit/test_version_in_sync.py` (not just tag-time); doctor AP-13 green. |
| AP-14 | ⏳ | **Partial — owned, upstream-blocked.** The closed-box rule is mechanically guarded by `tests/test_closed_box.py` (AST walk over `src/`): the only allowed reaches are the BLESSED `mgf.common._io` (`atomic_write`) and a frozen `_DEFERRED` allow-list of 5 known leaks (`_identity`×3, `_doctor_snapshot`, `_lifecycle`) — each removable only once mgf-common ships a public equivalent (a side-effect-free identity setter, a public doctor runtime-snapshot env var, a lifecycle quiet-logger seam). An import-linter `forbidden mgf.fed -> mgf.common._*` contract is **not expressible** (grimp treats mgf.common's submodules as opaque external subpackages), so the AST guard is the enforcement. Tracked in §4. |
| AP-15 | N/A | No compat shims. |
| SP-01 | ✅ | SCOPE.md §SP-01 purpose + IN-scope list. |
| SP-02 | ✅ | SCOPE.md §SP-03 OUT-of-scope (delegated) with rationale. |
| SP-03 | ✅ | New surface justified against scope (the phased subcommands). |
| SP-04 | ✅ | Adjacent items gated (the roadmap was demand-driven by the plan). |
| SP-05 | ✅ | OUT entries cite the owner (mgf-standard / mgf-test-supervisor / woodpecker). |
| SP-06 | ✅ | Scope is pre-1.0; SP-06 revisit-on-MAJOR acknowledged in SCOPE.md. |
| WF-01 | ✅ | `.woodpecker.yml` present (push/PR CI; server dormant, runs via `local-ci`). |
| WF-02 | ✅ | four gates incl. import-linter — `[tool.importlinter]` contract + `lint-imports` in the CI lint step. |
| WF-03 | ✅ | tag-driven publish steps (`when: {event: tag, ref: refs/tags/v*}`). |
| WF-04 | ✅ | publish creds via CI secret (`codeberg_package_token`), tag-scoped. |
| WF-05 | ✅ | `tag-coherence` step (tag == pyproject == `__version__`). |
| WF-06 | ✅ | wheel built in the publish run; `release-remote` promotes the build-once wheel. |
| WF-07 | ✅ | `smoke` step installs the built wheel + imports. |
| WF-08 | ✅ | `verify-codeberg` step (REST 200). |
| WF-09 | ✅ | images pinned (`python:3.12-slim`, `gitleaks:v8.30.1`). |
| WF-10 | ✅ | parallel steps + `test-3.11/3.12/3.13` matrix. |
| WF-11 | ⏳ | **Fleet-infra — not mgf-fed-owned.** WF-11 wants CI to install from a frozen lock (`uv sync --frozen`) not pyproject ranges. `.woodpecker.yml` is a generated, drift-checked artifact (WF-13) owned by `mgf-standard/templates/woodpecker/`; adopting it unilaterally breaks template-parity, and fleet adoption is gated on the devpi backfill gap. Tracked at mgf-standard as the WF-13 template uv-migration. Tracked in §4. |
| WF-12 | ✅ | woodpecker surfaces exit codes + commands; no `\|\| true` swallowing. |
| WF-13 | ✅ | `.woodpecker.yml` is a generated artifact rendered from `mgf-standard/templates/woodpecker/` by `mgf-fed scaffold` — never hand-edited; `mgf-fed drift-check` enforces generation-currency. mgf-fed **is** the generator + drift gate. |
| REL-01 | ✅ | Annotated tag `v0.7.0` on origin (cut by `release-remote`). |
| REL-02 | ✅ | build-once / no version reuse (`release-local` builds, `release-remote` promotes the same wheel). |
| REL-03 | ✅ | `PUBLIC_API.json` reflects HEAD (0.7.0 surface). |
| REL-04 | ✅ | token from env/file, not chat/history. |
| REL-05 | ✅ | Published **0.7.0** immutable (build-once; no content swap). |
| REL-06 | ✅ | ordered flow (release-local → tag → publish → REST-verify). |
| REL-07 | N/A | No FEEDBACK entries to close. |
| REL-08 | ✅ | pre-release smoke exercises the built wheel (`release-local` smoke + CI smoke). |
| REL-09 | N/A | No FEEDBACK entries. |
| PKG-01 | ⏳ | **Fleet-governance — deferred.** The fleet has migrated publish/resolve to self-hosted **devpi** (B2 cutover), but the L1-binding `PACKAGE_DISTRIBUTION.md` still names Codeberg. Reconciling the channel (bless devpi in the standard, or revert the template publish back to Codeberg + regen) is a federation-wide decision mgf-fed does not own. Tracked in §4. |
| PKG-02 | ✅ | canonical endpoints only (`_release.CODEBERG_PYPI_UPLOAD` / `CODEBERG_PKG_API`). |
| PKG-03 | ✅ | Codeberg access-token auth (`write:package`). |
| PKG-04 | ✅ | ordered publish flow (`release-remote`). |
| PKG-05 | ✅ | REST-verify (never pypi.org); `_codeberg_has` checks the REST record. |
| PKG-06 | N/A | Zero mgf-* runtime deps to pin (the `[standards]` extra is optional/dev). |
| PKG-07 | ✅ | immutable-by-policy honored. |
| PKG-08 | N/A | Single version published; retention not yet relevant. |
| PKG-09 | ✅ | CI publish is tag-driven + token-secret-scoped. |
| PKG-10 | ✅ | naming: `mgf-fed` dist → `mgf.fed` dotted import. |
| PKG-11 | ✅ | version checks resolve against Codeberg REST, not pypi.org/local dist. |
| PKG-12 | ✅ | no pypi.org publish surface. |
| DOC-01 | ✅ | ten-doc baseline complete (11/11: README, LICENSE, CHANGELOG, CONTRIBUTING, SECURITY, FEEDBACK, AGENTS, STARTHERE, DEPS, FEDERATION + PUBLIC_API). |
| DOC-02 | ✅ | bucket hierarchy: `docs/inprogress/` + `docs/claude/` + `docs/standards/` (pointer); reference/cutover/recipes added when needed. |
| DOC-03 | ✅ | bucket README charters present (inprogress / claude / standards). |
| DOC-04 | ✅ | CHANGELOG tracks every release through 0.7.0 (Wave-3 CLI extraction, federation front-door, provision, logging). |
| DOC-05 | N/A | No breaking changes. |
| DOC-06 | ✅ | This ledger follows the tracker shape; the plan doc carries file:line work units. |
| DOC-07 | ✅ | `docs/claude/CLAUDE.md` dense-lookup agent notes. |
| DOC-08 | ✅ | `PUBLIC_API.json` + `PUBLIC_API.md` + the pin test (`tests/unit/test_public_api_pin.py`, CI-run). |
| DOC-09 | ✅ | Docs name code with relative links; minimal drift surface. |
| DOC-10 | ✅ | `FEEDBACK.md` present at repo root (consumer-facing feedback queue; lifecycle FB-01..04 documented + `mgf-fed feedback-howto`). |
| DOC-11 | N/A | `docs/inprogress/` is active (the ledger), not a graveyard. |
| DOC-12 | ✅ | Docs navigable (relative links, `## §` headings, no marketing prose). |
| DOC-13 | ✅ | `FEEDBACK.md` present with the OPEN→ACCEPTED/SCHEDULED/DEFERRED/REJECTED→SHIPPED lifecycle + REL-07/09 retro-and-notify discipline documented. |
| DOC-14 | N/A | Federation sibling/tool — exempt from MGF_ADOPTION.md (ADP-04). |
| DOC-15 | ✅ | This `MGF_STANDARDS_CONFORMANCE.md` exists + accounts for **all 263 current MUSTs** (re-baselined 2026-06-25); doctor DOC-15 green. |
| DOC-16 | ✅ | `DEPS.md` present (§1 deps + §2 dependents). |
| DOC-17 | ✅ | `FEDERATION.md` pointer stub (links the canonical contract in mgf-standard). |
| DOC-18 | ✅ | Change propagation walked (the RELEASING/recipes/index updates landed same-commit). |
| DOC-19 | ✅ | `LESSON_LEARNED.md` present; doctor DOC-19 green. |
| OP-01 | ✅ | Rich `mgf-fed version` (`cli/_version.py`) — package version + git SHA (editable installs) + Python + platform + load-bearing dep versions; bare `--version` intercepted for the WF-07 publish-smoke. |
| OP-02 | ✅ | `mgf-fed app-doctor` (`cli/_doctor.py`) + the native `mgf-fed doctor` — install-state + wiring health (root/registry/policy/local-index/composed tools), exit=failure-count. |
| OP-03 | ✅ | `[project.urls]` Homepage + Issues (Codeberg); no placeholders. |
| OP-04 | ✅ | README rewritten to 0.7.0 reality (native fleet verbs shipped + optional `[cli]` governance extra + federation-sibling shape line + the `Conformance: L2` + ledger link); no more 'Phase 0 / stubbed' framing. |
| OP-05 | ✅ | `mgf-fed explain` (`cli/_explain.py`) renders the resolved `MgfSettings` with per-field provenance (default/env/preset/init); secrets auto-redacted at the boundary. |
| OP-06 | ✅ | `mgf-fed logs` (`cli/_logs.py`) — `info`/`tail`/`follow` over the rotating-file JSON sink, filterable by level threshold + component; the runtime-log access surface. |
| OP-07 | ✅ | `mgf-fed bundle` (`cli/_bundle.py`) — one redacted diagnostic tarball composing version+explain+doctor+logs+crash reports, each section run through the `Redactor` and fail-open. |
| OP-08 | N/A | `~/.mgf/local-index` is a dev cache (pruned manually); no unbounded state dir. |
| OP-09 | N/A | (service) — not a service. |
| OP-10 | N/A | (service). |
| OP-11 | N/A | (service). |
| OP-12 | N/A | (service). |
| DEP-01 | N/A | (service) — mgf-fed is a CLI tool, not a deployed service. |
| DEP-02 | N/A | (service). |
| DEP-03 | N/A | (service). |
| DEP-04 | N/A | (service). |
| DEP-05 | N/A | (service). |
| DEP-06 | N/A | (service). |
| DEP-07 | N/A | (service). |
| DEP-08 | N/A | (service). |
| DEP-09 | N/A | (service). |
| DEP-10 | N/A | (service). |
| DEP-11 | N/A | (service). |
| PR-01 | ✅ | mgf-fed imports no UI framework (zero-dep). |
| PR-03 | N/A | No UI — single-purpose CLI. |
| PR-04 | N/A | No UI layers to enforce. |
| 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 | Canonical briefing is mgf-common's; mgf-fed doesn't redefine it. |
| AG-03 | ✅ | Every commit carries both trailers (Signed-off-by + Co-Authored-By). |
| AG-04 | N/A | No reusable friction filed (would route to mgf-common's FEEDBACK). |
| AG-05 | ✅ | Memory claims verified against current state before action. |
| AG-06 | ✅ | Risky ops gated — `release-remote --dry-run`, confirm-before-delete in flows. |
| AG-07 | ✅ | Multi-step work tracked; trivial work isn't. |
| AG-08 | ✅ | Memory writes are durable/federation-scoped. |
| AG-09 | ✅ | Sibling-version checks hit Codeberg REST (`_codeberg_has`), not local dist. |
| AG-10 | ✅ | drift-check *reports* drift; never silently edits doc-to-match-code. |
| AG-11 | N/A | No cross-project feedback filed. |
| AG-12 | ✅ | `docs/claude/CLAUDE.md` project-scoped briefing. |
| AG-13 | ✅ | Library changes go via the supervisor flow (PR-gated). |
| AG-14 | ✅ | Coupled-surface changes propagated same-commit (DOC-18). |
| AG-15 | ✅ | Judgment exercised with recorded rationale (e.g. the no-new-MUSTs Phase-4 call). |
| AG-16 | ✅ | `[standards]` extra deps `mgf-common[standards]`. |
| AG-17 | ✅ | In-repo agent memory present — `docs/memory/MEMORY.md` index + topic notes (e.g. `corpus-and-anti-drift.md`); travels with the repo, reviewable in PRs. Seeded/refreshed by `init-project`/`catch-up`, checked by `app-doctor`. |
| AG-18 | ✅ | Standardized git config: canonical `.gitignore` ignores build/IDE/`.claude/settings.local.json` + **`my_stuff/`** (verified `git check-ignore`); `.githooks/prepare-commit-msg` auto-fills the AG-03 trailer; the authoritative server-side gate is `scripts/check_commit_trailers.py` run as the `.woodpecker.yml` `commit-trailers` step. |
| AG-19 | ✅ | Runtime auto-memory is version-controlled + backed off-machine to the private `mgf-fed-memory` Codeberg remote, `memory/`-scoped (allowlist `.gitignore`, transcripts never tracked) — per the federation AG-19 rollout. Machine-local by design; not CI-enforceable. |
| TM-01 | ✅ | UTC at the status boundary — `_status.py:132` `datetime.now(UTC).isoformat(...)`. |
| TM-02 | ✅ | wire format ISO-8601/RFC-3339 — `.isoformat(timespec="seconds")` on a tz-aware UTC datetime. |
| TM-03 | N/A | no duration measurements (subprocess calls carry finite timeouts, not timed spans). |
| TM-04 | ✅ | the single `datetime.now()` is a metadata stamp (status `generated`), not time-dependent logic — nothing testable to inject. |
| TM-07 | N/A | UTC only; no IANA timezone-name usage. |
| TM-08 | N/A | no async. |
| PF-01 | N/A | no performance budgets (thin orchestrator; no pinned hot path). |
| PF-02 | N/A | no perf tests. |
| PF-03 | N/A | no perf baselines. |
| PF-04 | N/A | no re-baselining (no perf budgets). |
| PF-05 | N/A | no perf harness. |
| PF-07 | N/A | no perf tests. |
| PF-08 | N/A | no perf tests / hardware tiers. |
| OB-01 | N/A | no observability surface — thin CLI, no metrics/traces/SLIs (cf. the LG family 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 | no structured `LogRecord` emission (stdout reports; cf. LG-01 N/A). |
| OB-10 | N/A | emits no `LogRecord` wire shape. |
| OB-11 | N/A | no logging-statistics subsystem. |
| NM-01 | ✅ | dist name `mgf-fed` (hyphen). |
| NM-02 | ✅ | dotted import `mgf.fed`. |
| NM-03 | ✅ | Codeberg slug `mgf-fed` (hyphen). |
| GUI-01 | ✅ | imports no Qt at module level (zero-dep; grep clean) — like PR-01. |
| GUI-02 | N/A | no GUI (CLI tool). |
| GUI-03 | N/A | no GUI workers. |
| GUI-04 | N/A | no GUI workers. |
| GUI-05 | N/A | no Qt / GUI `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. |
| REL-10 | ✅ | cohort-aware — mgf-fed IS the wave-ordered release orchestrator; participates in cohort-walks on a mgf-common pin break. |
| REL-11 | ✅ | Phase A/B split — `release-local` (build+validate) → `release-remote` (publish), wave-ordered (`_index.resolve_args`). |
| REL-12 | N/A | binds the cohort-release Phase-A *agent's* pytest-denial handling; mgf-fed is the orchestrator tool, not a Phase-A agent loop. |
| REL-13 | ✅ | `mgf-fed registry --check` IS the federation consistency gate (`_registry.py`). |
| FB-05 | ✅ | cross-repo feedback flows through the `pending-feedback/<target>.md` outbox + the supervisor relay (`mgf-fed feedback`), never a direct edit (FB-05). |
