# Item 1b-1 — high-stakes L3 depth-audit (verified gaps)

> Multi-agent workflow `l3-audit-1b1` (113 agents, 6.6M tok): 3 high-stakes repos × 6 evidence-based dimension auditors + an **adversarial refute pass** on every claimed gap (filtered 92 claimed → **69 verified real** gaps). Audited against the `mgf-common` L3 reference. Generated 2026-06-25.

Legend: gaps below are **real=true** (survived adversarial refute). Fix MUSTs first.

## ✅ CLOSE-OUT (2026-06-25) — ~47 of 69 fixed + landed (CI-green)

Fixed via the security cluster + a per-repo fix-workflow (code-fix → features+ledger),
each branch ruff + mypy --strict + test-suite green locally **and on CI**:

| PR | Repo | Closed |
|---|---|---|
| `mgf-fed #47` | mgf-fed | SC-11 (token-leak→CI-log), SC-07 (subprocess timeouts), EH-07 (masking except) + 2 regression tests |
| `mgf-cloud #31` | mgf-cloud | **26** — observability wiring (OB-01/LG-02/06/11/SC-17), version single-source (AP-13/REL-03/06), typed exceptions (EH-01/04/12), SC-07 api_timeout, PUBLIC_API regen (AP-10/11/DOC-08), import-linter (PR-01/04), **4 ops verbs** (doctor/explain/bundle/version, OP-01/02/05/07), ledger re-audit → **verified L2** |
| `mgf-fastapi #20` | mgf-fastapi | **11** — SC-08 body-cap-before-HMAC, threat-model doc (SC §12), LG-15 webhook audit event, AP-14 public imports, DOC-12/17 dead-slug sweep (73 refs), **perf-baseline harness** (PF-01/03/05/07/TS-14), ledger re-audit |
| `mgf-fed #48` | mgf-fed | **6** — LG-05 crash logging, LG-11 operation records, TS-01 test-mirror, DOC-09 verb sweep, AP-14 guard + SHOULDs (AP-08/13, DP-13, PR-01), conformance re-baseline to 0.7.0/263-MUST |

### ⏳ Deferred (~22) — honest reasons, not neglect
- **WF-11 + PKG-01** (all 3 repos + fleet): fleet-governance — devpi backfill + generated-template uv-migration (WF-13), and the devpi-vs-Codeberg publish-channel reconciliation. Need a federation decision; tracked here. No repo can fix unilaterally (template-parity).
- **mgf-fed AP-14 Tier-2** (`_io.atomic_write` ×12 etc.): blocked on **mgf-common publishing a public `atomic_write`** (cross-repo — the next concrete step). **SC-10** ties to the same devpi/lockfile work.
- **mgf-fastapi** WF-09 / TS-28 / LG-13: SHOULDs the fix agent judged need more than a quick change.

### Progress + next step
- ✅ **`mgf.common.io.atomic_write` promoted to public** (mgf-common #58) and
  **released as `mgf-common 0.48.0`** (#59 + tag `v0.48.0` → published to devpi,
  verify-devpi confirmed; bundles the `retry` primitive too). Registry regen'd
  to cornerstone **0.48.0** (REL-13).
- ✅ **Cohort pin-walk EXECUTED (2026-06-26).** The 3 direct sibling-deps that
  pinned `<0.48` were bumped `<0.49` + version-bumped + released: **mgf-logship
  0.1.7** (#24, LANDED), **mgf-test-supervisor 0.1.17** (#26, LANDED),
  **mgf-cloud 0.1.2** (#32, landing). ⚠️ *Release gotcha:* a version bump
  REQUIRES regenerating `PUBLIC_API.json` (it embeds `__version__`) — the
  `test_public_api_json_matches_generator_output` pin failed all 3 at once until
  regen; single-sourced-version repos (mgf-cloud) need `uv pip install -e .
  --no-deps` first to refresh editable metadata. (Captured in memory.)
- ✅ **mgf-fed AP-14 Tier-2 swap DONE (committed `dea1b55`, branch
  `chore/adopt-mgf-common-048`).** All 12 `_io.atomic_write`→public
  `mgf.common.io.atomic_write`, pin `>=0.48,<0.49`, 0.7.0→0.7.1, test-mock
  retargeted, PUBLIC_API.json regen'd, **and the closed-box guard tightened**
  (`tests/test_closed_box.py` dropped its lone `_io` blessing → no private
  `mgf.common._*` is blessed now). Local gates all green; pushes the instant the
  cohort hits devpi.
- ✅ **mgf-fed AP-14 — DONE (mgf-common 0.49, 2026-06-27):** the promotions landed
  (`set_identity`, `reset_context`, `RUNTIME_SNAPSHOT_ENV_VAR`); `_DEFERRED` is now
  empty and mgf-fed is fully closed-box. (Original follow-up note below.)
- ⏳ **[superseded]** mgf-fed AP-14 *remaining* (follow-up): the 3 still-`_DEFERRED` private
  reaches — `_identity._set_identity` (×2), `_lifecycle`,
  `_doctor_snapshot.RUNTIME_SNAPSHOT_ENV_VAR` — have **no public mgf.common
  equivalent in 0.48**. Closing them needs a *future* mgf-common minor that
  promotes those seams (a no-side-effect identity setter, a lifecycle reset/
  quiet-logger seam, the runtime-snapshot env var), then drop the `_DEFERRED`
  entries. That's a 1b-1 tail / candidate for the next cornerstone minor.
- ⏳ **REL-13 FLEET RIPPLE — 18-consumer pin-walk (2026-06-26).** The 0.48
  cornerstone made the consistency gate RED for **18** consumers still pinning
  `mgf-common<0.48` (alembic, apiprobe, auth, cloud-provision, django, fastapi,
  hrb, http, livepush, sqlalchemy, tele-core, tele-teltonika, vm-{core,
  firecracker,forensics,interchange,libvirt,sdk}). Each has **two** pins (core
  dep + `[standards]` extra). Walking them **pin-only** (`<0.48`→`<0.49`, no
  version bump — 0.48 is additive, so no PUBLIC_API regen / no tag / no
  republish; republish defers to each repo's next release). No inter-dep ripple
  (no versions change). Serial engine `~/scratch/fleet_pin_walk.sh`. *This is
  the real shape of "adopt a cornerstone minor": the whole fleet must accept it.*
  ✅ **DONE 2026-06-26 — all 18 walked; REL-13 CONSISTENCY GATE GREEN (31 libs).**
  16 merged via normal CI; **alembic + hrb force-merged** — their pin change is
  byte-identical to the 16 and verified-safe, but their CI is blocked by an
  intrinsic **Docker-network race on the 2 heaviest pipelines** (`exit 126
  "network wp_..._0_default not found"` on late/heavy steps; reproduces even
  solo; NOT cron-caused — self-heal `net_prune_lines=0`, reconciler idle, agent
  logs clean. Their code *tests pass*; only the infra-heavy late steps wedge).
  ⚠️ **Open CI-infra follow-up:** root-cause the heavy-pipeline network race
  (likely daemon overload on the 13-step churn; MAX_WORKFLOWS=2). Side-fix:
  age-filtered the self-heal network prune (`--filter until=30m`, agent-14) so it
  can't prune an active pipeline's network in the inter-step gap (a real latent
  bug, though not the alembic/hrb cause).
- **Remaining 1b-1 tail:** mgf-fed 0.7.1 publish + the 18-repo pin-walk →
  registry regen (REL-13 GREEN) → the 3 deferred-private promotions (next
  mgf-common minor) → the fleet-governance pair (WF-11/PKG-01). Then **1b-2**
  (the long-tail siblings, now mostly the same 18 for their own L3 uplift).


**Totals: 54 MUST + 15 SHOULD = 69 verified gaps** across mgf-fed / mgf-cloud / mgf-fastapi.


## `mgf-fed` — significant-gaps (14 MUST + 6 SHOULD)

_mgf-fed is at significant-gaps: 20 adversarially-confirmed real gaps (14 MUST, 6 SHOULD) span security (SC-11 token leaked to the CI log on a publish timeout, SC-10/WF-11 unpinned dependency closure plus an undocumented CVE suppression, SC-07 two unbounded subprocess timeouts), correctness and observability (EH-07 failure-masking broad except in provisioning, AP-14 inbound private reaches into mgf.common, LG-05/LG-11 unlogged top-level crashes and no central operation records), packaging (PKG-01 publishes to devpi while the standard mandates Codeberg), and a conformance tracker plus README that are themselves stale and self-contradictory (DOC-15/CFM-03/CFM-01/OP-04 frozen at v0.1.0 with reconciling counts and false N/As). To reach L3 it must close all 14 MUST violations in code first — env-pass the publish token, add the timeouts, commit a hash-pinned lockfile, narrow the provisioning except, route the private imports through public APIs, wire central-logging operation records, and reconcile the publish channel — and then re-run the per-rule audit against 0.7.0 to produce a complete, internally consistent ledger and an accurate README that actually match the shipped code._


### MUST
| Rule | Fix |
|---|---|
| **SC-11** | Pass the publish token via env (UV_PUBLISH_TOKEN) so it never enters argv, and redact/strip cmd in _run before surfacing str(exc) on TimeoutExpired so the token can't print to the CI log (_release.py:43-48,277). |
| **SC-10** | Commit a uv.lock covering the [cli]/[cloud] surface (hash-pin), and replace the bare CVE-2025-71176 ignore with a documented §10.2 triage (upstream link + unreachability rationale, or an expiry-dated embargo) at pyproject.toml:148. |
| **SC-07** | Add explicit configurable timeouts to the two uncovered subprocess sites (_localci.py:46 woodpecker exec, _bench.py:135 rebaseline) and catch subprocess.TimeoutExpired (not just OSError) at _localci.py. |
| **EH-07** | At _provision.py:289-292 catch only the typed ResourceAlreadyExistsError and let auth/network/quota failures propagate; remove the bare `except Exception ... (continuing)` that masks them before create_server(). |
| **AP-14** | Route the inbound mgf.common._identity/_doctor_snapshot/_lifecycle private imports through public APIs and add an import-linter `forbidden mgf.fed -> mgf.common._*` contract (excluding the blessed _io) wired into CI. |
| **LG-05** | At the top-level catch (__main__.py:273-275) and _localci.py:47-49, LOG.error(..., exc_info=True) (or call the crash reporter) instead of bare print(repr(exc)) so tracebacks ship to the central log. |
| **LG-11** | Emit INFO operation start/end with a stable `operation` field + duration_ms (via get_logger + operation_span) around release.remote, local_ci.exec, and provision.ci_host; flip the stale N/A in the tracker. |
| **TS-01** | Add a committed tests/ mirror allow-list plus a CI mirror-lint step (reuse the catch-up AST walk on self), and create the missing real mirrors for _roster, cli/_explain, cli/_validate, cli/_mgfcli. |
| **WF-11** | Backfill the devpi index, generate and commit a hash-pinned uv.lock, and switch CI installs from range-resolving `pip install -e .[...]` to install-from-lock (or record an explicit expiry-dated deferral). |
| **PKG-01** | Reconcile the publish channel federation-wide: either amend PACKAGE_DISTRIBUTION.md to bless devpi and retarget _release.py off Codeberg, or revert templates/woodpecker/base.yml back to Codeberg and regenerate the fleet; fix the stale CONFORMANCE.md PKG-01 ✅. |
| **CFM-03** | Re-baseline the ledger to the current Index of MUSTs (263/22 families incl. AG-17/18/19, WF-13), reconcile to one count, and correct the false DOC-10/DOC-13 'No FEEDBACK.md' N/As (file exists). |
| **DOC-15** | Re-run the per-rule audit against 0.7.0 (CFM-03), fix every 0.1.0 citation, rewrite the now-false 'thin tool' shape header, and flip the false N/As (esp. OP-07 bundle, plus OP-05/06, LG, PF families). |
| **CFM-01** | Add 'Conformance: L2' plus a relative link to docs/inprogress/MGF_STANDARDS_CONFORMANCE.md in README.md (both prongs in the same place). |
| **OP-04** | Rewrite the README status section from 'Phase 0 / read-only tracker / stubbed' to 0.7.0 reality (all native verbs shipped + optional [cli] governance extra + federation-sibling shape line). |

### SHOULD
| Rule | Fix |
|---|---|
| WF-02 | Add `ruff format --check src tests` to the Lint gate at templates/woodpecker/base.yml (not the generated .woodpecker.yml — WF-13) and regenerate fleet-wide. |
| AP-13 | Add tests/unit/test_version_in_sync.py asserting mgf.fed.__version__ == pyproject project.version (shifts drift catch from tag-time to PR-time). |
| DP-13 | Wrap the handle in a context manager at _release.py:66 (`with zipfile.ZipFile(wheel) as zf: names = zf.namelist()`); optionally add SIM to ruff select. |
| AP-08 | Add 'FA' to ruff lint.select (pyproject.toml:64) for §14/L3 parity and add `from __future__ import annotations` to cli/__init__.py. |
| DOC-09 | Sweep `mgf-common <verb>` -> `mgf-fed <verb>` in STARTHERE.md, FEEDBACK.md (note: ->feedback-howto), docs/claude/CLAUDE.md, docs/standards/README.md, and add a CI grep guard. |
| PR-01 | Extend forbidden_modules (pyproject.toml:145) with typer/fire/prompt_toolkit (and optionally qasync/asyncqt) to meet the §9.5 floor; no source change needed. |

## `mgf-cloud` — significant-gaps (24 MUST + 7 SHOULD)

_mgf-cloud is a fully-built, released (0.1.1) credential-holding cloud-control tool but stands at significant-gaps from L3 — 31 adversarially-verified gaps (24 MUST / 7 SHOULD) dominated by a shipped version-coherence break (__version__/PUBLIC_API.json frozen at 0.1.0 vs pyproject/tag 0.1.1), zero logging/observability/audit wiring across the whole adapter, missing operability commands (doctor/explain/bundle/rich-version), an unenumerated PUBLIC_API.md, and correctness/security defects (non-idempotent create_volume that leaks a billable resource, no OpenStack api_timeout so calls can block forever, uncaught/raw-builtin exceptions). The path to L3 is a handful of high-leverage fixes that each clear several gaps: single-source the version via importlib.metadata + add a sync test, wire mgf.common.observability.setup_logging at both entry points (which alone closes OB-01/LG-02/LG-06/LG-11 and the SC-17 audit seams), enumerate PUBLIC_API.md with per-name tiers + md-drift CI pins, add the doctor/explain/bundle commands, guard create_volume + add api_timeout + route untyped exceptions to the crash reporter, tighten the import-linter contracts, and refresh the stale "Pass-N scaffold" tracker to the shipped reality._


### MUST
| Rule | Fix |
|---|---|
| **AP-13** | Set __version__ from importlib.metadata.version("mgf-cloud") (root of 4 gaps; cheapest fix), regen PUBLIC_API.json, and add tests/unit/test_version_in_sync.py asserting __version__ == pyproject version so drift fails on every push, not just tags. |
| **REL-06** | Same root cause: ship a coherent 0.1.2 with pyproject/__version__/PUBLIC_API.json all aligned and re-tagged; the AP-13 sync test (above) replaces the tag-gated WF-05 check that never ran on v0.1.1. |
| **REL-03** | Bump __version__ + regen PUBLIC_API.json so the PUBLIC_API.md banner's 'mirrors pyproject.toml::project.version' promise is actually true (currently 0.1.0 vs 0.1.1). |
| **OP-04** | Single-source the version (importlib.metadata) + add a push-time sync guard, and refresh README/PUBLIC_API.md/MGF_STANDARDS_CONFORMANCE.md off the stale 'Pass-N scaffold / lands Pass 4-5' framing to the actually-shipped CLI+config+cost+web+remote surface. |
| **EH-12** | Add the sibling existence guard to infomaniak.py create_volume — `if conn.block_storage.find_volume(spec.name, ignore_missing=True): raise ResourceAlreadyExistsError(spec.name)` — and mirror it in FakeProvider.create_volume so retries don't create a duplicate billable volume. |
| **SC-07** | Add a finite api_timeout (e.g. Connection(..., api_timeout=30), ideally config-threaded) in _build_connection so per-call OpenStack REST reads can't block indefinitely; RequestTimeout already maps cleanly via _boundary. |
| **EH-04** | Wrap the CLI entry point with mgf.common.cli's run_and_translate (or add a final `except Exception` calling mgf.common.observability.report_now) so untyped bugs route to a crash report + actionable message instead of a raw traceback. |
| **EH-01** | In cost.py rates_from_config replace `raise FileNotFoundError(msg)` with a typed ConfigError (already imported and in _CLOUD_ERRORS); update tests/unit/test_cost.py to assert the typed error. |
| **OB-01** | Wire the logs pillar (metrics/traces stay legitimately skipped): getLogger(__name__) per module + setup_logging at both entry points — this single wiring is the root of LG-02/LG-06/LG-11/SC-17. |
| **LG-02** | Call mgf.common.observability.setup_logging(fmt='auto') once in CLI main() and fmt='json' in web serve() (plus uvicorn log_config) so logging is configured exactly once per entry point and emits JSON off-TTY. |
| **LG-06** | Route logs to a sink via setup_logging — rotating-file branch for the CLI/library, stdout branch for the web GUI — so the credential-holding tool emits a searchable stream. |
| **LG-11** | Emit INFO operation start/end with a STABLE `operation` field + duration_ms at the _boundary seam and remote.run_commands; don't reuse the raw f-string `what` (it embeds resource ids) — split the verb from the detail fields. |
| **SC-17** | Emit structured INFO audit=true records at the clean seams only — ssh.connect/ssh.disconnect (remote.py) and auth.ok/auth.fail (_build_connection) — carrying host/user/auth_url but never the SecretStr; add a unit test per event. |
| **OP-02** | Add `mgf-cloud doctor` probing app-own state without a live cloud call (clouds.yaml resolves/parses, Credentials.require_complete passes, rates.toml parseable) with pass/fail + file:line and exit=failure-count; keep distinct from the live `provider check`. |
| **OP-05** | Add `mgf-cloud explain` printing the resolved CloudConfig — provider/auth_url/region/cloud-entry + which source won (path / $MGF_CLOUD_CLOUDS_YAML / OS_* / search path); SecretStr auto-redacts, so print the model (don't call get_secret_value). |
| **OP-01** | Make --version/version rich (pkg version + git SHA via build hook + platform.python_version + platform.platform/machine + key dep versions) and fix the wrong-version source so first-triage reports the true release. |
| **OP-07** | Add `mgf-cloud bundle` producing a single redacted diagnostic tarball (active config via mgf-common Redactor + last N log lines + crash reports + doctor output + sysinfo); depends on OP-02/OP-06. |
| **AP-10** | Enumerate all 24 __all__ names in PUBLIC_API.md (Tier + Since + one-line description), replacing the stale 'added in Passes 2-3' deferral, and add the RA-10 second pin (md mentions every name in __all__/PUBLIC_API.json). |
| **AP-11** | Give each public name an explicit stability tier (column = experimental) in the PUBLIC_API.md table and fix the AP-09→AP-11 mis-citation in the banner; folds with the AP-10 listing fix. |
| **DOC-08** | Regenerate PUBLIC_API.md from __all__ (frozen at the 'only __version__' snapshot — 21/24 names absent) and add md-vs-__all__ and md-vs-json drift pins alongside the existing json pin in tests/unit. |
| **PR-01** | In .importlinter, extend core-light source_modules to the full framework-free core (add cost, defaults, the providers factory __init__, providers.fake) and raise the closed-box forbidden floor to include typer/fire/rich/prompt_toolkit/qasync. |
| **PR-04** | Add an import-linter `independence` contract between mgf.cloud.cli and mgf.cloud.web, whitelisting only the lazy launcher edge via ignore_imports = mgf.cloud.cli._app -> mgf.cloud.web. |
| **PKG-01** | Resolve the devpi-vs-Codeberg doc/repo mismatch (deliberate B2 migration): either amend the L1-binding PACKAGE_DISTRIBUTION.md to bless self-hosted devpi or retarget the woodpecker publish/verify back to Codeberg; also fix the now-stale Codeberg comments in pyproject/.woodpecker. |
| **TS-01** | Add tests/test_mirror.py walking src/ against a documented allow-list (defaults.py is currently unmirrored) accommodating the coarse-grouping convention; the existing pytest matrix gates it — no new CI step needed. |

### SHOULD
| Rule | Fix |
|---|---|
| SC-10 | Give each suppressed CVE (CVE-2025-71176, CVE-2026-44405) an in-tree triage record at the vuln_ignore site — option 2 (one-paragraph justification + upstream link) or option 3 (expiry ≤30d); lift the existing CVE-2025-71176 commit rationale into the tree. |
| PR-07 | Add a `PR — PRESENTATION_LAYER` section to MGF_STANDARDS_CONFORMANCE.md classifying PR-01..PR-07 (PR-01 enforced-partial, PR-03/05 ok, PR-04 gap, PR-06 N/A) and refresh the stale version/scaffold framing. |
| PR-02 | Record the single-repo bundling of CLI+web (vs a dedicated mgf-cloud-app) as a deliberate CFM-04 decline-with-rationale in the tracker's §3 ledger (currently 'none yet'). |
| AP-01 | Resolve cost.py's lone missing __all__: rename to _cost.py (internal-by-contract; matches _app.py/_output.py) and update the two importers, or add an explicit __all__ — every other non-underscore module declares one. |
| PKG-06 | Reconcile the misleading pyproject.toml:111-114 comment (describes [tool.uv.sources]/explicit=true 'Codeberg' that isn't present) with the actual single-index devpi reality, or implement the named-index+sources form against the devpi URL. |
| DOC-09 | Edit STARTHERE.md:27 `mgf-common catch-up` → `mgf-fed catch-up` (post-rename) and fix the same ripple in FEEDBACK.md:61; regen the generated CLAUDE.md renders via `mgf-fed catch-up --apply`. |
| OP-06 | Staged with the LG work: route logs to a rotating file sink and add a `mgf-cloud logs` subcommand so destructive mutations (vm/volume/secgroup delete, fip release) are auditable without source-tree path knowledge. |

## `mgf-fastapi` — significant-gaps (16 MUST + 2 SHOULD)

_mgf-fastapi is at significant-gaps: 16 unresolved MUST violations (plus 2 SHOULDs) hold it below its own declared L2, so L3 is out of reach until the per-rule ledger is clean and accurate. Reaching L3 requires closing the live security MUSTs (SC-08 webhook-body size cap, the missing forged-webhook audit event, the SC-12 threat model), the AP-14 closed-box import leak, the logging/reproducibility MUSTs (6 unregistered EVENTS.md rows + lockfile-pinned CI), the entire perf-baseline family (PF-01/03/05/07 + TS-14 via a baselines.json plus a regression harness), the dead mgf-doc-standard references (DOC-12/17), and the conformance-honesty cluster (CFM-02/03 + OP-04 — stop declaring L2 and reconcile the ledger counts)._


### MUST
| Rule | Fix |
|---|---|
| **SC-08** | Enforce a configurable max_body_bytes cap (e.g. 1 MiB) in verify_request (webhooks/_request.py) BEFORE buffering/HMACing the webhook body — reject on Content-Length and on accumulated bytes — to close the pre-auth memory/CPU DoS. |
| **LG-15** | At the verify boundary emit LOG.warning(event='mgf.fastapi.webhook.verification_failed', reason=exc.reason, audit=True) on HmacVerificationError and register it in EVENTS.md, so forged/replayed webhooks leave an audit trail instead of a silent 401. |
| **SC §12 (threat model)** | Add a '## Threat model' paragraph to docs/ARCHITECTURE.md with the five §12 parts (trust boundaries / attacker capabilities / out-of-scope / mitigations / residual risks) tailored to the webhook-HMAC, bearer, and IP-allowlist boundaries. |
| **AP-14** | Repoint db.py:126 docstring and the two test imports to public mgf.common paths (bootstrap / AppContext / bootstrap_for_test) and add an import-linter forbidden contract banning mgf.fastapi -> mgf.common._* so the closed-box rule is mechanically enforced. |
| **LG-15** | Add the 6 missing event rows to docs/reference/EVENTS.md (ip_allowlist.trust_proxy_enabled/denied, auth.misconfigured/rejected, db.setup/teardown) and deliberately handle the mgf_fastapi.db.* underscore->dot rename as an alert-target rename. |
| **WF-11** | Switch CI install steps in the canonical templates/woodpecker/base.yml from `pip install -e .[...]` to a frozen lock install (uv sync --frozen, or pip -r exported requirements.lock --require-hashes) so CI resolves from the committed lock, not floating pyproject ranges. |
| **CFM-02** | Reconcile README.md:78 with the ledger — either close the open MUST gaps to truly reach L2, or soften the headline to 'targets L2' and drop the false 'evidenced by the tracker' clause. |
| **CFM-03** | Re-run the per-rule audit against the current Index of MUSTs (263), add the 4 missing rows (AG-17/18/19, WF-13), derive one consistent total+tally for every summary line, fix the stale v2.8 header, and append a fresh §4 audit-log row. |
| **OP-04** | Align the README L2 headline with the verified below-L2 standing and bump the tracker's 'Current version: 0.6.10' -> 0.6.11 to match pyproject/CHANGELOG. |
| **DOC-17** | Fix FEDERATION.md:7 to point at magogi-admin/mgf-standard/FEDERATION.md, correcting both the dead mgf-doc-standard slug and the mislabeled 'mgf-common' link text. |
| **DOC-12** | Sweep magogi-admin/mgf-doc-standard -> magogi-admin/mgf-standard repo-wide (17 .md files / 73 refs) including the relative path in .claude/commands/sync.md:6, then grep to confirm zero remaining. |
| **PF-01** | Replace absolute wall-clock budgets (_PER_SIZE_BUDGETS_US, _LIFESPAN_BUDGET_MS, _NET_OVERHEAD_BUDGET_US, etc.) across all 6 perf tests with relative regression thresholds vs a recorded baseline. |
| **PF-03** | Add tests/perf/baselines.json (per-metric value/units/recorded_at/recorded_commit/regression_threshold_pct/description) plus tests/perf/hw_tiers.md for every active perf budget. |
| **PF-05** | Add a perf harness (tests/perf/conftest.py with bench+baselines fixtures and assert_no_regression, copying the mgf-common/mgf-fed reference) enforcing warm-up/sample-count and median/p95/p99 summary in the PF result shape. |
| **PF-07** | Make perf failure messages carry metric + baseline value(units) + measured value(units) + regression % + a baselines.json pointer (auto-satisfied once PF-01/PF-03 land). |
| **TS-14** | Drive perf budgets through a recorded baseline + ratio assertion instead of the in-docstring prose baseline (same machine-comparable fix as PF-01/PF-03). |

### SHOULD
| Rule | Fix |
|---|---|
| PKG-01 | Reconcile the lagging L1 doc with the shipped devpi cutover — update PACKAGE_DISTRIBUTION.md to bless the self-hosted devpi endpoints (or repoint CI back at Codeberg) so the standard and .woodpecker.yml name the same index. |
| PF-06 | Annotate the non-obvious hot-path rows in PUBLIC_API.md with time+memory class: HmacWebhookVerifier.verify O(payload), IpAllowlist O(n) CIDR scan, TokenBucket O(k) unbounded per-key memory. |
