Version. 0.26
Date. 2026-08-04
Charter. standing-notes/dunin7-standing-authorization-charter-v0_1.
Author. Claude Code (execution session). Operator: Marvin Percival.
Supersedes. v0.25 at record 9d26bef. All earlier versions stand as siblings.
Changes from v0.25. CR-2026-167 (B-49) executed to close — both repositories merged, tagged, pushed. First real CI run reported in each — surface green on first try, engine green after three fresh-runner-only fixes.
CR-2026-167 (change-requests/cr-2026-167-ci-gates-v0_1.md), execution session, both repositories, per its own Step 0 → Checkpoint B sequence. Branch cr-2026-167-ci-gates in each, off engine main 7bdbf8b and surface main 7a9adc9 — both re-confirmed unmoved and clean immediately before each merge (C-1).
D-1 — does anything consume the generated docs/api/api-reference.md / api-detail-blocks.html? No. The planning docs' claimed consumer, "the API testing console," was checked against its actual artifact (~/Downloads/loomworks-api-testing-console-v0_1_1.html) — it fetches openapi.json live from the running server, never the generated markdown file. No served page in loomworks-record embeds the generated HTML detail blocks. Per D-1: the check was removed, not regenerated. The docs/api/ drift itself (46 commits, two months) remains real and unaddressed — out of this CR's scope, named rather than papered over.
Engine (loomworks-engine, tag engine-ci-gate-v0_1, main afe8507):
.github/workflows/api-docs.yml removed — 112/112 runs red since 2026-06-07, blocking nothing..github/workflows/tests.yml added — pytest -q on push to main, fresh throwaway Postgres, README's five-command stand-up, Stele checked out as a sibling.README.md — the LOOMWORKS_ENV=test posture-guard trap (D-6), discovered fresh at Step 0.
Surface (loomworks, tag surface-ci-gate-v0_1, main 1fc6a65):
.github/workflows/ci.yml added — this repository's first CI workflow ever (Step 0 confirmed zero workflows, zero runs, in its entire history). Gates lint, tests, build.
Gate-failure demonstrations (D-3), all four, restored after each: engine pytest (assert False in test_posture_guard.py → 12 failed / 3510 passed, exit 1); surface lint (react/jsx-key, exit 1); surface vitest (broken assertion, exit 1); surface build (TS type error, exit 1). All reverted; both trees confirmed clean before merge.
No gate encodes a moving figure (D-4) — both gate on exit code only; test-count figures in header comments are dated descriptive prose, not assertions.
Per the CR's own instruction: gates fire on push, so Checkpoint B is the first time they execute for real, and a fresh-runner failure is the ordinary case, not a surprise — fix and report both rather than disable.
Surface: green on the first push. ci.yml run 30969209734 passed in full (lint, tests, build) in 3m46s.
Engine: green on the fourth push, after three fresh-runner-only findings, each fixed and reported rather than papered over:
path: stele for the sibling checkout resolved inside the workspace, not beside it — uv sync failed, "Distribution not found."path: ../stele) doesn't work — actions/checkout refuses a path outside $GITHUB_WORKSPACE by design. Restructured to check out both repos as engine/ + stele/ siblings under the workspace root instead, with every engine step's working-directory: engine.LOOMWORKS_SECRET_KEY wasn't a valid Fernet key — migrations 0062–0064 construct one directly and raised ValueError. Local runs never hit this because .env already carries a real key. Replaced with a generated throwaway key.
Final run, 30969641939: green, all steps including the full pytest suite, 17m19s total.
C-1 held at every merge — fetch and HEAD re-verify immediately before, in both repositories, all four times (one CR-content merge + three engine fix-merges). 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 — nothing here touches the serving perimeter; CI running in GitHub's own runners is not deployment. No anomaly (§6) — three fresh-runner findings are the CR's own named "ordinary case," not an anomaly condition; each was fixed and reported, the gate was never disabled to force a clean-looking merge.
ruff/mypy gating) and B-50 (surface direct type-check gap) — both named in the new workflows' coverage comments, neither decided here.DUNIN7 — Done In Seven LLC — Miami, Florida DUNIN7 — status brief — v0.26 — 2026-08-04 Two repositories that passed before this CR still pass after it — and now say so on every push, including the three times this session watched the saying itself fail first.