chore(m177): close — Dimension 2.3, and 25 of 25 marked against real tests
Dimension 2.3 had no test. `test_lease_money_gate_refusal` drives an exhausted tenant through the pull path over real HTTP: the wallet is drained AFTER the seed so the row exists holding ZERO — the case the credits gate refuses, as distinct from the absent row it admits, because an unprovisioned tenant is an operator gap and refusing every one of them would turn that into an outage. The poll answers 200 with a null lease, no lease row is written, and nothing is charged against a wallet with nothing to give. The other 24 rows were marked by AUDIT, not by assumption. Eighteen of the 33 tests the spec names do not exist under those names; most exist under the prose-style names the implementer chose, and each row now cites the test that actually proves it — `a_mintable_credentials_handle_never_reaches_the_map` for 2.4, `concurrent_cold_callers_cost_exactly_one_upstream_mint` for 4.5, `past_the_capacity_everything_lands_in_one_series` for 6.4, and so on. Rows whose spec-named test does exist are marked plainly. Dimension 5.1 is DONE for the half this milestone owns and its corpus half is DEFERRED to M178, which is where §5's own note already put it: the frontmatter reader `parseTriggerMarkdownWithJson` has four non-test callers and none is a route this PR owns, so porting it here would add a YAML crate and ~610 lines with zero callers — refused by `unused_crate_dependencies` and the Dead Code Sweep alike, with `serde_norway` fixed there as the default travelling with that half. The `tests/fixtures/fleetbundle/` corpus is real and is read today by `frontmatter_fixtures_test.zig`; reading it from Rust on this branch would mean asserting against a conversion invented for the test rather than the one production runs. What holds here is the `config_json` half — the shapes `fleet_session.zig` resolves — via the twenty-eight `afd_fleet_runtime::config` cases and, end to end, `test_runner_suite_vs_rust_daemon`. M178 inherits `test_fleet_config_corpus_parity` alongside the reader it ports. Spec moves to `docs/v2/done/` at Status DONE. The ephemeral handoff is deleted. Orphan sweep (RULE ORP): `PROMPT_M182_SUBSTRATE_SPEC.md` cited the spec at its `v2/active/` path and now cites `v2/done/`; no other reference to the moved or deleted files survives anywhere in the tree. No changelog entry and no `~/Projects/docs` branch: this milestone is a PORT at a frozen wire (version 2), so no endpoint, command, flag or behaviour a user can observe changed. `orly gate pr` agrees — `docs.updated: no user-surface files on this branch`. The architecture diff this close requires is `docs/architecture/data_flow.md`, revised earlier on this branch. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
K
Kishore Kumar committed
d04e9cf77f5b29eb23ec58c140a37d6c71db856f
Parent: 9291b1d