This is a point-in-time record of the week of 2026-08-31 to 2026-09-06. It was written from the repository's history for that week and is not revised afterwards, so later pages may supersede what it says.

Week of 2026-08-31 to 2026-09-06

Window: 2026-08-31 00:00:00 to 2026-09-06 23:59:59, local author time Recapped: 2026-09-07 Commits in window: 392 (290 non-merge, 102 merges)

The largest week in this repository's history by some distance, and worth saying so before anything else: the prescribed read for a recap was measured at ~19k tokens on a normal week and came to ~190k here. Six plans archived, two of which were also written in the same week; twelve new plan documents were opened. Nearly half of everything — 129 of 290 non-merge commits — belongs to a single plan.

What shipped

Plan 162 — the testing census and CI restructure (129 commits)

Plan 162 exists to run a census of the whole automated test suite for coverage, dead assertions and drift between what CI checks and what the code does, then to close the gaps it finds and restructure CI around what the census showed actually mattered. It inherited its inbox from Plan 161, which had deliberately fixed nothing it discovered.

The week ran the plan from its census to its sixteenth closed stage. The census itself was scoped and numbered (dfa55ae, a0a49c8), then the gaps came off in order: the orphaned test suites wired into CI (5862935), coverage unblinded so its number means something (8c10d95), the two health-sensor censuses given one declared source (17d4fab, a5fda6c, 92ef62b), and the 267-second dbt build + test job decomposed and split into four (5097569, 5dd6bb7, 70d2411, 9f21f87).

Three themes are worth separating out.

Mechanising rules that were previously habits. A sweep moved 34 files to mocker and 16 layer numbers to the contract (5de9a3c); an encoding guard was built at runtime, then rebuilt statically once the runtime version proved to be the wrong shape (a3eea2b, f9a702b, c7d1d33, 8325046); every skip in CI must now be declared or the run fails, demonstrated by adding an undeclared skip to watch the gate fail and then removing it (03553fb, fcec5ac, 7b8ea40).

SQL stopped being paraphrased. G5 — no production module holds SQL at a call site — and G14 — every production .sql file is executed — were closed (9b2f685, 54b516d, dad8f33, 3bcac3a), then Stage X went further: a test may not author SQL either (b45702d), a test may not invent the shape of a relation production defines (815fcf2), and a recorder now captures what text ran against which engine (ae97f83). The resulting execution-coverage gate reports 161 of 161 production .sql files executing, from 9,775 executions across 12 per-job records (2fc6184). The commit is candid that every reading below 161 turned out to be the instrument rather than the repository — CI discarding most of the record, two loaders returning a plain str, fourteen selectors credited only to their wrapper — each found by the gate and fixed on the same branch. The waiver ledger it replaced was then deleted (d7981b3), and 14 SQL waivers were retired, 37 down to 23 (e54c98d).

dbt now builds against production-shaped data (35ed492, da1f3f0), with the gate proved by injecting a deliberate data-test violation to watch it fail and then reverting it (37406c1, e6e3c13).

Two stages were added by production rather than by the suite. Stage K (95cc107, af8f28d) fixed the defect where dashboard and pgadmin — the two services designed to pause no surface — were the two that could never be deployed alone, because V043's CHECK required a non-empty scope on every active record. The second half of that commit is the more useful finding: _set_intent caught bare Exception and rendered every failure as 503 "Database unavailable", so the production diagnosis pointed at the one component that was healthy throughout.

Mid-week the plan was restructured onto Plan 172's new plan-document contract and its stages renumbered from digits to letters (b76904a, 1364808, f0edeca), with a follow-up commit for the bare back-references the sweep missed (9075bbf). Sixteen of twenty-two stages are done; the slice pointer ends the week on Stage S (6d3e3d4).

Plan 138 — public surface refresh (67 commits, archived 2026-09-04)

Plan 138 existed because the live page and README claimed a system the repository no longer was: 36 migrations against 49, 971 tests against 3,661, eleven containers against more than two dozen, and three different make/model counts on one page.

Both surfaces were rewritten from a reconciled contract (1c47893, 515bb82), the landing page moved to / with /info a permanent redirect (c80f494), the page taken same-origin under a strict CSP after a 41.7 MB eager hero video was removed (6695b60), and the hand-maintained roadmap and recap copy replaced with build-time projections CI validates (d411445, 15d028d, e211ecc). Stage 7 made published content servable from the checkout rather than the image (5f00c60), which is why a merged recap now goes live on a git pull with no image build.

Stage 2 shipped, was deployed, broke /dashboard, and was reverted the same night (2b2808b, then 433cc4d to reapply). The post-mortem (a1f1e4b) is the part worth keeping: the plan's analysis of the Streamlit coupling was simply wrong. It had predicted one failure mode and written an assertion that catches it — verified by mutating the Caddyfile three ways — and that assertion was blind to what actually happened. Streamlit serves one SPA shell for every path and routes client-side, so /dashboard was never a route it recognised; it worked because the fallback landed back on Streamlit through the catch-all, and taking / away removed the fallback. The fix confined Streamlit to a base path (22032bc), the mechanism was measured rather than left as a guess (37f4ba3), and the assertion was rewritten against the base path (f3cc48b).

The plan added three mechanisms to keep the surfaces honest — a commit gate that holds a staged surface until it has been read (3d8ea58), a closeout question that fires when the tree moves under a surface nobody edited (a4166ee), and docs/PUBLIC_SURFACE.md as the one contract its three forms cite (c66ea98). Both gates earned their keep late: Stage 4's found the freshness label wrong in two directions on the same field (db02910), and Stage 6's route matrix, run in full for the first time, found HEAD answering 405 on every public route (b5b4eb2). Archived 13ce139, with presentation work carved out to Plan 174 (9f2984f).

Plan 172 — the plan document contract (15 commits, opened and archived 2026-09-03)

Plan 172 was raised out of Plan 138 Stage 1d and archived two days later. Its case: 98 plan documents had no shape rule — 4% of work-unit sections declared an exit, evidence appeared at four heading depths, and 43 of 44 live plans carried no public section.

It produced docs/PLAN_DOCUMENT.md (8e9bdc0) and five skills at three grains — plan-draft (27c783e), plan-start (5de445e), and note-evidence plus the stage-close/close-out split (0d26683) — along with the plans skill's open-plan operation (380bcf8) and a contract test (5a40ff6). Stage G's planned re-measure was retired in favour of a ratchet asserting the waiver list only shrinks (00d4b74), after three of its four before-numbers proved unreplayable; the ratchet was paid down to 38 on archival (46782cd).

Plan 161 — the testing contract (12 commits, archived 2026-08-31)

Plan 161 replaced a Testing Strategy paragraph that had been accurate in April and quietly false by August with a contract in three forms — docs/TESTING.md, a testing-contract skill, and 17 assertions in CI (cad95c8, 06f90e3, f2f5ab3, 2836a53). Mechanising three measurements the prose half had made by eye found all three low, and the asserting test then failed its own first CI run and proved its own thesis: FastAPI changed include_router between 0.128 and 0.141, so a shallow app.routes walk returned 4 routes for ops instead of 54 without erroring, and only the stale-waiver assertion caught it (2324b0a, e46ce27, 313c914). The unpinned pre-1.0 dependency underneath was recorded against Plan 121 (8c854e0).

Plan 164 — the cycle-close ritual (10 commits, moved to closeout)

Plan 164 gives a home to three steps of the cycle-close routine that had no owner and are only ever correct at the close (266b4d5). It built the ref-hygiene step (df8ea36), made it prevention-first and cross-machine (96b3f8e), and enforced the settings and the recap habit rather than the sweep (0643cbd, c6bcadc). The one-time backfill took 69 remote refs down to 4, deliberately leaving one unmerged branch and two that active worktrees were sitting on; every deleted tip was a strict ancestor of origin/master, so no commit went anywhere, only names did. The merged-branch budget dropped 67 → 5 (7e49b71).

Plan 175 — the commit gate's bundling hole (7 commits, opened and archived 2026-09-04)

Plan 175 was found on 2026-09-04 while reading the gate Plan 138 had just built: the PreToolUse hook ran before the command, so it read an empty index whenever a commit staged its own changes — a bundled git add … && git commit fired the gate, found nothing, and returned 0, indistinguishable from a surface that had been read (1cd7755). Enforcement moved inside git commit (9874473).

The stage reintroduced its own defect twice, which is the finding worth keeping. chmod +x on Windows never reaches the index, so the hook committed as 100644 and git silently declines to run a hook without the execute bit — it would have checked out on macOS installed, configured and never firing (5e3f09d). Then hooks_installed() compared core.hooksPath against the literal string .githooks, and within hours the value in this clone had become an absolute path to the same directory, so git was running the hook while the gate called it uninstalled and refused every agent commit (d9eaf8d).

Plan 146 — the planning system (7 commits)

Last week's recap landed (54fee43), and writing it exposed that the state parser could not see the closeout table (bf989fc) — a defect recorded against the plan alongside a correction to the recap's rename sha (83b9245). CI's Documentation tests job was given PYTHONPATH and workflow_dispatch (404f521, 78e5aad, CAR-42). Handoffs and reports were filed out of docs/plans/ (538c9fa) with every broken reference repointed (4bd29dc).

Plan 142 — scoped operational coordination (6 commits, moved to closeout)

The first real maintenance window produced findings, and this week fixed them: four defects that made the window unrunnable (42a81d6), an observability_fresh check that could never pass on any host (9594d19), and a mounts_expected gate that had to read the findmnt tree (1815b39), with the abort criterion coupled to the boundary table (f5e577a) and the first window's findings closed (0b6191a). Deployed and verified in production (2ff4918).

Plan 139 — test suite maintenance (5 commits, archived 2026-08-31)

Stage F gave tests/integration/sql the real Airflow schema so ops queries crossing into the airflow schema execute at all (f3b4406, 9ea2e27, 9e56012). Stage H was folded into Plan 162 and the plan archived (1107433), with the references its archival left stale cleared (34bc12a).

Plan 149 — Linear as the weekly execution layer (6 commits)

Cycle 1's close was recorded (7fb6a92), and four defects in the seeding skills were fixed: seed to a points budget rather than an issue count (bafcebf), fill-cycle creates the projects it seeds into (a30cdb0), a plan that gets an issue gets a project in both skills (7c2bada), and a Backlog-status issue cannot hold a cycleId (7412a25). ticket-now now always passes assignee explicitly (03abeb1).

Plan 170 and the twelve new plan documents (3 commits, plus singletons)

Plan 170 opened with a container image reclaim policy (a831eb2), resolved its Stage 0 trend question and pulled build cache into scope (aa1c82e), then corrected its own measurement claim — containerd is already on a panel (c4cbcc6).

Eleven other plans were opened this week and filed: 165 subdomain routing, scoped out of Plan 138 (40dda68); 166 container PID 1 does not reap its adopted orphans (640877b); 167 the solver truth in .env.example (67c982f); 168 the generated knowledge substrate at build-order 8 (d8b9913); 169 the public analytics agent (624df20); 171 the coordination failure vocabulary (6d563e9), filed directly out of Stage K's two commits; 173 machine credential lifecycle (f5adf55); and 174 the public site shape (9f2984f). Plans 172 and 175 are covered above; 164 opened and reached closeout in the same week.

Also this week: Plan 129's closeout documentation (11aa6d9), Plan 145's post-mortem closed against the finished plan (972dfa5) with its design attribution corrected against git (1fbf526), Plan 125's four new obligations from the testing contract recorded (5c1944c) and Gate C's evidence archived out of the gitignored cache (e0b33d6), Plan 154's expected-running service count corrected twice (81a5c3d, c60ff6d), and Plan 121 given a record of what local bring-up actually is after scripts/setup.ps1 was deleted (f55b1f5).

Every commit, by plan

The narrative above cites the commits that carry the argument. This is the full roll, so the denominator reconciles. Headings are plan numbers; the last two groups are commits that declare no plan and commits that name none.

162 (129)

138 (67)

172 (15)

161 (12)

164 (10)

146 (7)

175 (7)

142 (6)

149 (6)

139 (5)

170 (3)

121 (2)

125 (2)

145 (2)

154 (2)

129 (1)

165 (1)

166 (1)

167 (1)

168 (1)

169 (1)

171 (1)

173 (1)

174 (1)

none-declared (3)

unattributed (3)

What moved between states

Read from docs/PLANS.md's own history across the window — 57 index revisions, comparing the last revision before 2026-08-31 with the last inside 2026-09-06.

Plan Start of window End of window
129 closeout archived
138 build archived
139 build archived
161 build archived
142 build closeout
164 absent closeout
165 absent backlog
166 absent backlog
167 absent backlog
168 absent build
169 absent backlog
170 absent build
171 absent backlog
173 absent build
174 absent build

Two archivals are invisible to that diff and must be named separately. Plans 172 and 175 were both opened and archived inside the window, so they read as absent at each endpoint and cancel out. Both appear in completed_plans.md, dated 2026-09-03 and 2026-09-04. This is a limit of an endpoint comparison, not a finding about the week: any plan whose whole life fits inside one window will do the same.

Six plans archived in seven days — 129, 138, 139, 161, 172, 175 — which is the largest number this repository has recorded in one week.

Twelve plan documents were created in the window (164 through 175), and every one of them appears in a table. There is no unindexed plan document this week, which is the defect Plan 146 was written to prevent.

What is still owed

Unattributed commits

Three commits name no plan in either their subject or their body. All three are the snapshot-download credential work on the ops service:

Their bodies mention Plans 108 and 112 as context for why the token format needed scopes, which is not the same as claiming either plan. The enclosing merge commits say where to look — 05de301 (PR #358, car-54-plan-162-stage-10-gate) for the first two and 381d66b (PR #359, car-plan-162-compose-env-wiring) for the third — and 8acf088 discusses Plan 162's Stages 13 and 14 by number. That is a strong hint and not an attribution, so it is recorded as a hint. The work itself is recapped above under Plan 162's Stage P and in What is still owed.

Three further commits state explicitly that they belong to no plan, which is an answer rather than a gap:

b0e3d6a is worth quoting on the point: it says attributing the fix to either Plan 138 or Plan 174 "would be inventing a mapping". d2cc8ba built the mechanism that makes this section shrink — a PreToolUse hook plus a commit-msg hook enforcing that every commit is routed through the attribution skill, written after five commits went through one invocation of it in a single session.

Merges

102 merges: 78 GitHub pull-request merges (#298 through #375) and 24 local integration merges, none of which is recapped — the work they carry is the non-merge commits above, and recapping both would double the week.

Pull-request merges (78)

Merge Date PR Plan named by branch Branch
0316113 2026-08-31 #298 none named docs/recap-2026-08-30
524ee21 2026-08-31 #300 none named millerandrewpreston/car-42-docs-tests-pythonpath
238d0f9 2026-08-31 #299 161 millerandrewpreston/car-33-plan-161-testing-contract
4cd6e54 2026-08-31 #301 138 docs/plan-138-recaps-and-plan-165
2134406 2026-08-31 #303 none named millerandrewpreston/car-42-workflow-dispatch
df2d8a2 2026-08-31 #302 142 millerandrewpreston/car-35-plan-142-stage-4-fix-the-four-stage-23-defects-and-deploy
739b667 2026-08-31 #304 none named millerandrewpreston/car-35-closeout-evidence
7f196ec 2026-08-31 #305 139 millerandrewpreston/car-36-plan-139-stage-f-give-testsintegrationsql-the-airflow-schema
22676f8 2026-08-31 #307 none named millerandrewpreston/car-17-mounts-expected-gate
a1f12d3 2026-08-31 #306 none named millerandrewpreston/car-34-reviewer-skill
02818f8 2026-08-31 #309 none named millerandrewpreston/car-36-closeout-evidence
6fdfa4f 2026-08-31 #308 none named millerandrewpreston/car-17-stage-4-window-findings
b6061e7 2026-08-31 #310 161 plan-161-archive-and-142-closeout
d6bceb6 2026-08-31 #311 none named car-43-contract-enforcement-claim
8072823 2026-08-31 #312 138 docs/plan-138-stage-1-contract
0c3e5dd 2026-08-31 #313 138 car-37-plan-138-gate-0b
7ba7566 2026-08-31 #314 162 car-40-plan-162-census
6bf8997 2026-08-31 #315 138 car-44-plan-138-gate-0
8fc6190 2026-08-31 #316 154 plan-154-expected-service-count
461987b 2026-08-31 #317 none named car-45-stage-1-orphaned-suites-ci
1f90284 2026-08-31 #318 162 car-46-plan-162-stage-2-unblind-coverage
a87245e 2026-08-31 #319 162 car-47-plan-162-stage-3-health-sensor-census
a458877 2026-08-31 #320 138 car-38-plan-138-stage-1a
83ca95a 2026-08-31 #321 162 car-48-plan-162-stage-4-dbt-job-split
63e5b6e 2026-08-31 #322 138 car-39-plan-138-stage-1b
b80ae88 2026-08-31 #323 138 car-56-plan-138-stage-1c
71765f2 2026-09-01 #324 162 car-49-plan-162-stage-5-mechanical-sweeps
9534f89 2026-09-01 #325 162 car-55-plan-162-stage-5b-script-classification
3f40f55 2026-09-01 #326 138 car-57-plan-138-stage-1d
0e12080 2026-09-01 #328 none named fix-master-red-roadmap-and-encoding
244ac0c 2026-09-01 #327 none named fix-public-surface-gate-interpreter
ca052fa 2026-09-01 #329 168 worktree-plan-168-169-public-agent
9199337 2026-09-01 #331 138 car-58-plan-138-stage-1e
144db69 2026-09-01 #330 162 car-50-plan-162-stage-6-container-health
15e310c 2026-09-01 #333 138 car-59-plan-138-stage-1f
7217e98 2026-09-01 #332 162 car-60-plan-162-stage-6b
712762e 2026-09-01 #334 145 docs/plan-145-post-mortem-closeout
95589e1 2026-09-01 #335 138 car-61-plan-138-stage-1h
b18e552 2026-09-01 #336 170 docs/plan-170-container-image-reclaim
fc3a0e9 2026-09-01 #337 138 car-65-plan-138-stage-7
60a1bb5 2026-09-01 #338 138 car-62-plan-138-stage-2
34ce824 2026-09-01 #340 none named car-62-dashboard-bare-path
6d08b0a 2026-09-01 #341 none named car-62-stage-2-postmortem
d23c1d7 2026-09-01 #342 138 car-62-plan-138-stage-2-closeout
bf82d4d 2026-09-01 #339 162 car-51-plan-162-stage-7
acb1aaa 2026-09-02 #345 162 car-52-plan-162-stage-8
00753e2 2026-09-02 #343 138 car-67-plan-138-stage-8-contract
9561678 2026-09-02 #344 162 car-66-plan-162-stage-6c
ff690e0 2026-09-02 #347 162 car-52-plan-162-stage-8-assertions
7cb7f0e 2026-09-02 #348 172 plan-172-plan-authoring
dbbd556 2026-09-02 #346 138 car-68-plan-138-stage-3
4e9ae21 2026-09-02 #349 none named car-52-closeout-evidence
d248002 2026-09-02 #350 162 car-53-plan-162-stage-9
dce7b10 2026-09-02 #351 172 car-69-plan-172-plan-authoring
b54464e 2026-09-03 #352 172 car-70-plan-172-stage-a-contract
63a1e13 2026-09-03 #353 162 car-54-plan-162-stage-10
28ffccd 2026-09-03 #354 138 docs/plan-138-writing-surface-amendment
b578d97 2026-09-03 #355 172 car-73-plan-172-stage-g-baseline
8d76d4c 2026-09-03 #356 138 car-74-plan-138-stage-9
4036c7f 2026-09-03 #357 162 car-54-plan-162-stage-10-snapshot-build
05de301 2026-09-03 #358 162 car-54-plan-162-stage-10-gate
381d66b 2026-09-03 #359 162 car-plan-162-compose-env-wiring
c3176d4 2026-09-03 #360 162 car-plan-162-stage-11-12-exits
b81f091 2026-09-03 #361 162 car-plan-162-stage-15
d273f53 2026-09-03 #362 none named claude/planning-sql-testing-agentic-0fmphc
8efd0fb 2026-09-04 #363 162 car-78-plan-162-stages-10b-10c
90b9ac7 2026-09-04 #364 138 plan-138-closeout
38c3352 2026-09-04 #365 138 plan-138-data-through-bucket-end
fcdc203 2026-09-04 #366 138 plan-138-stage-5
06635c3 2026-09-04 #367 138 plan-138-archive
622e3d7 2026-09-04 #368 175 car-89-plan-175-commit-hooks
26632ad 2026-09-04 #369 175 plan-175-stage-a-record
7bc6cd0 2026-09-04 #370 175 plan-175-closeout
326f5dc 2026-09-04 #371 162 car-79-plan-162-stage-s-rewrite
962e4fc 2026-09-04 #372 164 car-41-plan-164-stages-0-and-3
dbe250e 2026-09-04 #373 none named public-surface-ci-lake-snapshot-copy
4817c01 2026-09-04 #374 162 car-81-plan-162-stage-u-declared-skips
03401ce 2026-09-06 #375 none named claude/linear-issue-162-piece-x-d98xh8

Local integration merges (24)

These carry no PR number. Most are origin/master merged down into a working branch mid-stage; three at the start of the window are branch merges from the docs/plans/ relocation.

Merge Date PR Plan named by branch Subject
c47f6b4 2026-08-31 no PR 149 docs/plan-149-cycle-1-findings, taking master's index
15bb60e 2026-08-31 no PR 145 docs/plan-145-post-mortem-transcript-evidence
5a7b74a 2026-08-31 no PR 131 plan-131-packed-cold-storage, relocating its content to docs/plans/
f8f50de 2026-08-31 no PR 161 branch 'master' into millerandrewpreston/car-33-plan-161-testing-contract
fa754bb 2026-08-31 no PR 138 branch 'master' into docs/plan-138-recaps-and-plan-165
84b9186 2026-08-31 no PR 121 remote-tracking branch 'origin/master' into millerandrewpreston/plan-121-pinning-and-plan-161-closeout
acb0fbe 2026-08-31 no PR 162 remote-tracking branch 'origin/master' into worktree-car-49-plan-162-stage-5
411ab21 2026-09-01 no PR 168 remote-tracking branch 'origin/master' into worktree-plan-168-169-public-agent
12dc913 2026-09-01 no PR 138 remote-tracking branch 'origin/master' into car-58-plan-138-stage-1e
d9a19c5 2026-09-01 no PR 145 remote-tracking branch 'origin/master' into docs/plan-145-post-mortem-closeout
b239e0d 2026-09-01 no PR 170 remote-tracking branch 'origin/master' into docs/plan-170-container-image-reclaim
6adeaf3 2026-09-01 no PR 162 remote-tracking branch 'origin/master' into car-51-plan-162-stage-7
ee79e2a 2026-09-01 no PR 162 origin/master into car-51-plan-162-stage-7
f50960c 2026-09-02 no PR 125 remote-tracking branch 'origin/master' into feature/plan-125-portability-audit
fb9f11b 2026-09-02 no PR 138 remote-tracking branch 'origin/master' into car-68-plan-138-stage-3
73a13e5 2026-09-02 no PR 138 remote-tracking branch 'origin/master' into car-68-plan-138-stage-3
4fce919 2026-09-02 no PR none named remote-tracking branch 'origin/master' into car-52-closeout-evidence
3814c5b 2026-09-02 no PR 162 remote-tracking branch 'origin/master' into car-53-plan-162-stage-9
c71b3d1 2026-09-02 no PR 172 remote-tracking branch 'origin/master' into car-69-plan-172-plan-authoring
3c5ddaa 2026-09-03 no PR 172 origin/master into car-70-plan-172-stage-a-contract (Plan 129 closeout)
be253c1 2026-09-03 no PR 172 remote-tracking branch 'origin/master' into car-73-plan-172-stage-g-baseline
cacfddf 2026-09-03 no PR 162 remote-tracking branch 'origin/master' into car-54-plan-162-stage-10-snapshot-build
396889e 2026-09-04 no PR 162 remote-tracking branch 'origin/master' into car-79-plan-162-stage-s-rewrite
4396304 2026-09-04 no PR 164 origin/master into car-41-plan-164-stages-0-and-3

Two notes on this table. The three merges dated 2026-08-31 that name a branch rather than origin/masterc47f6b4, 15bb60e and 5a7b74a — are the tail of the relocation of plan documents into docs/plans/. The other 21 are origin/master merged down into a working branch mid-stage; they carry work already recapped, from this window or an earlier one, and introduce nothing new.

2b2808b and 433cc4d are absent from both merge tables on purpose. They revert and reapply PR #338's merge, and reverting a merge produces an ordinary single-parent commit, so git counts them among the 290 non-merge commits. They are recapped under Plan 138.

Deferred to the next recap

Zero commits. The window closed at 2026-09-06 23:59:59 and this recap was written on 2026-09-07, so nothing has landed since:

git rev-list --count --all --since='2026-09-06 23:59:59'
# 0

This is the first recap in some time with an empty tail — the measured figure on 2026-08-21 was 117 deferred against 55 in the window. It reflects when the recap was written rather than anything about the week.

docs/recaps/ now holds a file for every complete week from 2026-04-19 to 2026-09-06 with no gap. No week is owed.