DUNIN7 · LOOMWORKS · RECORD
record.dunin7.com
Status Current
Path current-status/dunin7-status-brief-v0_39.md

DUNIN7 — status brief — v0.39

Version. 0.39 Date. 2026-08-07 Charter. standing-notes/dunin7-standing-authorization-charter-v0_1, ratified 2026-07-30. Author. Claude Code (execution session). Operator: Marvin Percival. Supersedes. v0.38 at record a164255. All earlier versions stand as siblings. Changes from v0.38. CR-2026-174 closes the ruff backlog CR-2026-173 correctly deferred — all 543 non-mechanical findings resolved, zero-tolerance CI gate wired and proven red-then-green, tagged and pushed. B-48 arc is now fully complete: both quality checkers gated on main.


1. What landed

Engine (loomworks-engine)

| Commit | Subject | |---|---| | 1b71ff2 | Step 1: E501 config bump + residual manual wraps | | 21e0f37 | Step 4: N818 renames, all 36 | | be1a04d | Step 5: F821 dispositions, all 24 | | c9a64e4 | Step 6: B904 raise-from, all 92 | | eba7033 | Step 7: F841 dispositions, all 37 | | a208a30 | Step 8: E402 dispositions, all 34 | | 7952006e101e08 | Step 9: long tail, 7 parts, 22 rule codes | | afdeff5 | Step 11: wire zero-tolerance ruff gate to CI |

Tagged cr-2026-174-ruff-gate-closure at afdeff5, pushed, origin-verified. Confirmed green on the real main push itself — GitHub Actions run 31180591139, 19m10s, all steps including the new ruff gate.


2. CR-2026-174 — the ruff backlog CR-2026-173 deferred, closed

Discipline held throughout: never blind-pattern-fix. Every one of the ~590 findings (543 carried over from CR-2026-173 plus Step 1's E501 residue) was resolved by reading the surrounding code, running the affected tests, or — for exception-type and raise-chain questions — checking empirically, never by applying a rule-code's suggested fix uniformly across all its instances. Genuinely deliberate exceptions got a scoped noqa or per-file-ignores entry with an explanatory comment; everything else was a real fix.

Steps 2–3 (N818, F821) ran read-only before Steps 4–5 touched anything, exactly as instructed. N818's blast-radius check confirmed all 36 exception-class renames were safe (zero cross-repo references, zero wire-serialization of class names); two same-named-in-different-modules pairs were traced individually. F821's per-instance check found 23 legitimate deferred-annotation gaps and one real bug.

Three more bugs surfaced purely as a byproduct of the verification discipline, on top of the F821 one:

  1. composition_orchestrator.py's decide_composition() was missing the event_id kwarg on the "accept a non-final review step" branch — a real TypeError on that path, invisible until this F821 finding forced a read of the function. Fixed, with a new regression test (test_operator_accepts_non_final_review_starts_next_step) that reproduces the original TypeError when the fix is stashed out.
  2. test_cr_2026_145_correction_recognition.py computed a redundant_id and never asserted on it — the test's own name promises the redundant draft gets discarded; it wasn't checking that it actually did. Added the missing assertion (confirmed the real code path does discard it).
  3. api/deps.py had two definitions of get_webauthn_config; the second, weaker one silently shadowed the first, which carries a fallback for apps constructed outside _lifespan. git log -S confirmed the duplicate was an accidental Phase 25 reintroduction of a Phase 14 function. Deleted the shadowing duplicate, restoring the fallback — no current test depended on its absence, so this is a safe restoration.
  4. test_cr_2026_157_external_contribution.py had assert "default_deny" not in r.text or True — a permanently neutered assertion (SIM222 flagged the or True as dead code). Traced the actual 403 path to confirm the underlying claim is true, then dropped or True and verified the assertion holds for real.

The B904 pass caught its own process bug before it shipped. The first detection script assumed ruff's finding row was the except line; it is actually the raise line. This silently misdetected several as exc-bound except clauses (multi-line tuples, trailing comments) as bare, defaulting them to from None instead of from exc. Caught by spot-checking one site whose body clearly used the exception object. The entire pass was reverted (git checkout) and redone with a corrected backward-scan before any of it was committed — nothing incorrect ever reached main.

Step 10 confirmed the floor: full ruff check . = 0 findings; full uv run pytest -q = 3548 passed, 68 skipped, 0 failed (baseline 3547 + the one new regression test).

Step 11's gate, proven the same way CR-2026-173 proved mypy's — on real CI, not by inspection. Pushed a scratch branch (scratch-ruff-gate-proof, never touching main), introduced a throwaway violation (unused, out-of-position import os), confirmed the run failed specifically on the "Ruff — lint (zero-tolerance)" step, reverted, confirmed the full pipeline passed with that same step green. Branch deleted, local and remote. Then confirmed again on the real main push (run 31180591139, 19m10s, green, ruff step at 41s).

One out-of-scope finding flagged, not fixed. docs/api/api-reference.md / api-detail-blocks.html are already stale against the live schema — discovered by accident (running generate_api_docs.py directly to verify an N806 rename didn't change output) and confirmed reproducible even at the CR's own pre-flight baseline (f20a0fb), i.e. pre-existing and unrelated. Reverted rather than committed; noted in the Step 9 part 2 commit message for a follow-on.


3. Decision queue

Nothing open from this arc. B-48 is fully closed: both checkers the engine ships (ruff, mypy) are now gated on main — mypy as a non-regression ratchet against its ~540-error floor, ruff as zero-tolerance. The api-docs staleness finding above is the only carried-forward item, and it predates this CR entirely.


4. What is running

Nothing. Engine main at afdeff5, tag cr-2026-174-ruff-gate-closure, both push-verified and CI-green on the real push. No session in flight.


DUNIN7 — Done In Seven LLC — Miami, Florida DUNIN7 — status brief — v0.39 — 2026-08-07