Version. 0.27
Date. 2026-08-05
Charter. standing-notes/dunin7-standing-authorization-charter-v0_1.
Author. Claude Code (execution session). Operator: Marvin Percival.
Supersedes. v0.26 at record 718d1d2. All earlier versions stand as siblings.
Changes from v0.26. CR-2026-168 (B-50) executed to close — the surface's direct type check gated, merged, tagged, pushed. First real run green on the first push.
CR-2026-168 (change-requests/cr-2026-168-surface-typecheck-gate-v0_1.md), execution session, one repository (loomworks). Branch cr-2026-168-typecheck-gate, off main 1fc6a65 (tag surface-ci-gate-v0_1) — re-confirmed unmoved and clean immediately before the merge (C-1).
tsc --noEmit against the whole project: 4 errors, all in the test tree (invisible to next build's own embedded TypeScript pass, which only compiles files the running application reaches — the gap B-50 named). The CR's own §3.1 named a prior reading of four but explicitly did not carry it forward; this session's enumeration is independent and happens to match.
RefreshFocusOnIntent.test.tsx:41 — a vi.fn() mock declared with zero arguments, so its call-args tuple had no index 0 for the test's own assertion to read. Given a variadic signature matching how it's actually invoked.TagChipArea.test.tsx ×3 — two fixtures (TAG_URGENT, TAG_FINANCE) used a stale field name, engagement_id, where the real ProjectTag type requires project_id. The component itself never reads either field — pure fixture drift. Renamed to match the type.All four were fixable without a structural change or an ignore; D-1 held cleanly, and no error was reported that required a halt.
Surface (loomworks, tag surface-typecheck-gate-v0_1, main c12a1ad):
npm run typecheck script (tsc --noEmit).Typecheck step added to the existing ci.yml job, between Lint and Tests — one workflow, not a second (D-2).ci.yml's coverage comment updated in the same commit as the gate itself (D-4) — it now names typecheck as covered, and explains why: the build's own TS pass never reached the test tree, where every Step 0 error lived.
Gate-failure demonstration (D-3): a type error injected into layout.tsx → npm run typecheck exited 2 with the real error; reverted, tree confirmed clean.
No engine change; no file touched outside /Users/dunin7/loomworks — confirmed.
Green on the first push. Run 31013135990: lint, typecheck, tests, build all passed, 3m26s total. No fresh-runner-only surprise this time — unlike CR-2026-167's engine gate, which took three attempts to clear its own first run.
C-1 held — fetch and HEAD re-verify immediately before the merge, clean index confirmed. R-2 held — Checkpoint A required no Operator confirmation and none was taken; Checkpoint B's merge-and-tag-and-push is R-2-authorized including the push. No F-1 crossed. No anomaly (§6) — the run passed clean; nothing to report as an ordinary-case fix this time.
ruff/mypy gating) — still not decided; this CR touched no engine file.ci.yml's comment.engine-ci-gate-v0_1 tag position, since confirmed deliberate and documented, not moved) — resolved by clarification, not by code change; no further action pending.DUNIN7 — Done In Seven LLC — Miami, Florida DUNIN7 — status brief — v0.27 — 2026-08-05 The three gates nobody had named are now two gates and one open decision — B-48, which stays a decision because a backlog nobody agreed to is not a checklist item.