Version. 0.38
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.37 at record 35a3cf0. All earlier versions stand as siblings.
Changes from v0.37. B-48 read-only inspection completed, CR-2026-173 drafted, filed, and executed — the engine's first real CI quality gate for either checker it ships. Mypy landed exactly as scoped; ruff's zero-tolerance gate was deferred mid-execution, correctly, per its own acceptance criterion's escape clause. One correction filed against the B-48 Step 0 findings, discovered during execution.
loomworks-record)
| Commit | Subject |
|---|---|
| 1ef15d8 | File B-48 quality tooling Step 0 findings v0.1 |
| 43f7601 | File CR-2026-173, B-48 quality tooling gates |
| a164255 | Correct B-48 Step 0 findings: import-untyped v0.2 |
| this filing | status brief v0.38 |
loomworks-engine)
| Commit | Subject |
|---|---|
| fad3804 | CR-2026-173 Steps 1-2: ruff/mypy config fixes |
| 1785bab | CR-2026-173 Step 3: ruff auto-fix pass |
| 8c8fcfa | CR-2026-173 Step 5: mypy non-regression baseline |
| f20a0fb | CR-2026-173 Step 6: wire mypy gate to CI; ruff deferred |
Tagged cr-2026-173-b48-quality-gates at f20a0fb, pushed, origin-verified. Confirmed green on the real main push itself — GitHub Actions run 31142961512, 21m51s, all steps including the new mypy gate.
Step 0 (read-only) found the two checkers' actual shape. inspection-briefs/loomworks-b48-quality-tooling-step-0-findings-v0_1.md: ruff at 3,618 findings (64.8% mechanically fixable, all 800 of the largest non-modernization category traced to FastAPI's own Depends/Path/Query idiom firing on a rule that was never configured to exempt it); mypy at 604 errors (src-only), with import-untyped's 70 findings claimed to trace entirely to the sibling stele package's missing stubs.
CR-2026-173 acted on exactly that evidence. Two config fixes removed the misconfiguration for free (extend-immutable-calls for FastAPI; stele.* added to mypy's ignore-missing-imports). A reviewed auto-fix pass resolved the mechanical remainder (3,068 lines across 752 files — diff-checked for the one real risk, side-effect import removal; the tree's one intentional case, already noqa-marked, survived untouched). Full suite green throughout (3,547 passed, 68 skipped, 0 failed, unchanged from CR-2026-171's baseline).
Mypy's gate landed exactly as scoped. A hand-rolled, dependency-free non-regression baseline (mypy-baseline.txt, scripts/check_mypy_baseline.py) — line-number-stripped by design so an unrelated edit elsewhere in a file can't trip the ratchet, verified both ways locally (a deliberate break fails; shifting every line in a file by one still passes). No prior DUNIN7 repo had a mechanism for this; the choice and its reasoning are recorded in the script's own docstring. Wired into CI ahead of the database stand-up so a failure reports fast. Proven on real infrastructure, not just locally or by inspection: pushed a scratch branch (cr-2026-173-mypy-gate-selftest, never touching main), broke mypy deliberately — run went red with the exact expected message — reverted — full run green in 16m59s. Branch deleted, remote and local, after. Then confirmed again on the real main push itself (run 31142961512, 21m51s, green).
Ruff's zero-tolerance gate was deferred — correctly, and the CR's own text anticipated this exact outcome. The auto-fix pass left 543 non-mechanical findings (E501 line-length, B904 exception chaining, N818 exception naming, F821 among others — real work, not noise, sampled and confirmed not to be a second wave of misconfiguration). CR-2026-173's own acceptance criterion #1 read: "or CC reports and halts if any non-mechanical finding remains after auto-fix, rather than hand-fixing without a scoping decision." That's what happened — halted, reported the full category breakdown to the Operator, and the Operator chose: wire mypy now, leave ruff ungated, file a follow-on scoping note. Same treatment CR-2026-171 gave B-54 — an item that looked small until execution, pulled back out rather than forced through.
One correction filed against the Step 0 findings, found during execution, not before. v0.1 asserted all 70 import-untyped findings traced to stele, "checked without sampling" — that check was not in fact exhaustive. The stele.* config fix resolved 63 of 70; the remaining 7 trace to unrelated third-party stub gaps (pytesseract, pillow_heif ×2, dateutil, boto3, markdown, weasyprint). Filed as inspection-briefs/loomworks-b48-quality-tooling-step-0-findings-v0_2.md — one section corrected, everything else carries forward unchanged. Does not change CR-2026-173's action; the stele fix was exactly correct for the 63 it addressed.
Ruff needs its own follow-on scoping note before a zero-tolerance gate can land. 543 findings, five dominant categories (E501 line-too-long 225, B904 raise-without-from 92, F841 unused-variable 37, N818 exception naming 36, E402 import-position 33), plus 24 F821 undefined-name findings that sampled as a legitimate deferred-forward-reference pattern rather than real bugs — not verified exhaustively, flagged rather than assumed. Options for the scoping note to weigh: a hand-fix pass (real work, unscoped size unknown until someone reads all 543), or a ruff-side non-regression baseline mirroring mypy's mechanism (faster to land, defers the actual cleanup indefinitely — the same tradeoff mypy's baseline makes deliberately, but ruff's own findings are mostly auto-fixable-adjacent style debt rather than mypy's mix of annotation-completeness and real type mismatches, so the tradeoff reads differently). Blocks nothing; every other item in this arc landed.
Nothing. Record main pushed and origin-verified through this filing. Engine main at f20a0fb, tag cr-2026-173-b48-quality-gates, 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.38 — 2026-08-07