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)
dfa55aedocs(plan-162): scope the plan now that the census is done (CAR-40)a0a49c8docs(plan-162): number the census as Stage 0 and record its evidence (CAR-40)5862935test(plan-162): run the orphaned suites and wire the survivors into CI (CAR-45)296016cdocs(plan-162): re-own G13 and fold it into Stage 5 (CAR-45)8c10d95test(plan-162): unblind coverage and make its number mean something (CAR-46)92cb718docs(plan-162): scope Stage 5b, separating production scripts from spent ones (CAR-55)2b12294docs(plan-162): reconcile Stage 2 with Stage 1's gap-list convention (CAR-46)c711dccdocs(plan-162): record Stage 2's evidence and unstick the index row (CAR-46)4b6a9c8docs(plan-162): record what CI verified about the coverage gate (CAR-46)17d4fabtest(plan-162): give the two health-sensor censuses one declared sourcea5fda6ctest(plan-162): read the census by path, not by importing it92ef62btest(plan-162): make DAG_SPECS name every DAG the DagBag builds06547b3docs(plan-162): record Stage 3's evidence and point the index at Stage 4d9597efdocs(plan-162): mark Stage 2 complete in the stage table5dd6bb7ci(plan-162): split the dbt build + test job into four jobs (CAR-48)8c54915ci(plan-162): stop two comments impersonating the Airflow pin (CAR-48)5097569measure(plan-162): decompose the per-invocation dbt cost (CAR-48)70d2411ci(plan-162): install per job only what its own suites import (CAR-48)e3b4c82measure(plan-162): probe DuckDB coexistence with dbt in-process (CAR-48)9f21f87perf(plan-162): run the real-build dbt tests in-process (CAR-48)848b22edocs(plan-162): record Stage 4's evidence, measured (CAR-48)4647e6dtest(plan-162): put the read-only guard back, on statements (CAR-48)802adacdocs(plan-162): advance Plan 162's build-order slice to Stage 5 (CAR-48)783ab79ci(plan-162): delete the Stage C measurement rig (CAR-48)4c5c7dddocs(plan-162): bring the coverage section up to date with Stages 2 and 4 (CAR-48)103d987docs(plan-162): record the third reading, and widen every range to match (CAR-48)5de9a3ctest(plan-162): sweep 34 files to mocker and 16 layer numbers to the contract (CAR-49)eaec028test(plan-162): refile test_scrape_listings as the unit test it is (CAR-49)e954306refactor(plan-162): split scripts/ into production and spent (CAR-55)10140efdocs(plan-162): Stage 5b evidence, and scope the incremental-CI question to Stage 10 (CAR-55)0b9d0c4docs(plan-162): add Stage 6b, the guard G13's exception said would be needed1172a7afeat(plan-162): empty ROUTE_WAIVERS and give container_health a test home (CAR-50)d8d607dfix(plan-162): install container_health's deps in the contract job (CAR-50)9741370test(plan-162): unit-test the Docker contract verifier to 99% (CAR-50)184ca11test(plan-162): cover the Promtail checker's replay setup too (CAR-50)c5c7650docs(plan-162): record Stage 6's CI evidence (CAR-50)9dd99f5docs(plan-162): advance the slice pointer to Stage 6b (CAR-50)97f4af8docs(plan-162): keep the status lines general so they stop going stale8325046fix(plan-162): name the encoding on every production text read and writea3eea2btest(plan-162): fail when a text read or write lets the locale decidef9a702btest(plan-162): catch the encoding shapes no static rule can name27288e6fix(plan-162): scope the encoding guard's ignores to third-party modulesc7d1d33refactor(plan-162): check the encoding shapes statically instead of at runtimecc264dbdocs(plan-162): record what CI said about the encoding guardb15c506docs(plan-162): close out Stage 6b and advance the slice pointer to Stage 70d7b436fix(plan-162): skip gitignored files in the encoding guard's file walk9b2f685feat(plan-162): mechanise G5, the inline-SQL gap nothing has ever checked0e4be9atest(plan-162): execute the six Data Health statements against real DuckDBcad86d5refactor(plan-162): extract the seven single-site statements, and execute them54b516dfeat(plan-162): close G5 -- no production module holds SQL at a call site566032ctest(plan-162): close the two holes that closing G5 exposed2af4d5fdocs(plan-162): record Stage 11 and G16, the question Plan 161 did not ask404ef08fix(plan-162): scan production Python, not service packages, for SQL4b05d9drefactor(plan-162): sort the scripts' SQL into what is production and what is not13d8de6fix(plan-162): let the Layer 2 census read where the selector tests already aredad8f33feat(plan-162): drain G14 to one entry, and stop a statement being filed twice23e2913docs(plan-162): add Stage 12, the fixture duplication this plan created3bcac3afeat(plan-162): close G14 -- every production .sql file is executedda72354test(plan-162): execute ops' statements instead of retyping them53f7bf0refactor(plan-162): file admin.py's statements, and unblock the last paraphrases2a98d4bdocs(plan-162): measure the assertion duplication Stage 12 inherits35ed492fix(plan-162): a placeholder in a .sql comment is part of the statementffa8225docs(plan-162): record Stage 7's evidence, and close it88b185ddocs(plan-162): advance the slice pointer to Stage 8 (CAR-51)dfa0facdocs(plan-162): add Stage 6c, the contract-versus-constraint gap a deploy foundfe0ace8docs(plan-162): point the slice cell at Stage 6c, not Stage 8086724fdocs(plan-162): record Stage 7's production deploy95cc107fix(coordination): let a service that pauses no surface be deployed aloneaf8f28dfix(coordination): report why a deploy release failed6b66333docs(plan-162): narrow Stage 8, hand the dashboard Python to Plan 150f6a7077docs(plan-162): close out Stage 6c with its production evidenceceb4f07test(plan-162): assert Layer 2's second clause, and run the scraper's write path unmocked5ffd3fbtest(plan-162): close G8 by running the SRP fetch path unmocked5b8b144docs(plan-162): document SCRAPER_RESULTS_BASE_URL and why it stays unsetcdd2906docs(plan-162): record Stage 8's evidence from CI575ae72docs(plan-162): record Stage 8's deploy, and the half it does not confirmb86fd51docs(plan-162): record Stage 8's cost as 2 estimated, 1 actual9044b8efeat(plan-162): give airflow/dags a reachable .sql convention, and replace two SQL rules with one7011aa1docs(plan-162): close out Stage 8 with its production confirmation3398299docs(plan-162): point Plan 162's slice cell at Stage 9afb3100docs(plan-162): close out Stage 9, and point the slice cell at Stage 1099f7f73docs(plan-162): scope Stage 10 and split it into 10, 10b and 10c35532b4feat(plan-162): build dbt against a production-shaped snapshot (CAR-54)e54c98drefactor(plan-162): retire 14 SQL waivers, 37 -> 23 (CAR-54)2e346cdci(plan-162): hold the snapshot-dbt gate for its own PR (CAR-54)af8b2ecdocs(plan-162): record Stage 10's split, the DAG defect, and the credential trailda1f3f0feat(plan-162): gate dbt on a production snapshot, and fix the DAG that exports it (CAR-54)37406c1test(plan-162): TEMPORARY — inject a data-test violation to prove the gate failse6e3c13docs(plan-162): record Stage 10's deliberate violation, and revert it (CAR-54)a70fb12docs(plan-162): close Stage 10, and open Stage 13 for the skips it exposed (CAR-54)fa2f4c7docs(plan-162): give Stages 11 and 12 the exits they never had71f6b1ddocs(plan-162): open Stage 15 for the defect class the DAG fix only patchedd6a8cb3docs(plan-162): open Stage 16 for SQL a test authors itself44946a3docs(plan-162): record how Stage 16 was arrived atef16b1cdocs(plan-162): size Stage 16 and repoint the slice cell to 10b7ccb735docs(plan-162): rescope Stage 10c and record Stage 10b's decisionsb76904adocs(plan-162): restructure onto the plan-document contract1364808docs(plan-162): repoint every external stage reference at the new letters9075bbfdocs(plan-162): convert the bare stage back-references the sweep missedf0edecadocs(plan-162): reorder the remaining eight stages, and repoint the indexa0c47a1docs(plan-162): estimate Stages R and V at 1 point each30e2b94docs(plan-162): rewrite Stage S around branch coverage, move the recorder to X70127bedocs(plan-162): point Stage T's dependency at X, where the recorder now lives03553fbfeat(plan-162): declare every skip in CI, or fail the runfcec5actest(plan-162): an undeclared skip, to watch the gate fail7b8ea40test(plan-162): remove the demonstration skip, green againf111d02docs(plan-162): close Stage U9253ae7refactor(plan-162): move every executed test statement into tests/sql/b45702dfeat(plan-162): a test may not author SQL either815fcf2feat(plan-162): a test may not invent the shape of a relation production definesae97f83feat(plan-162): record what text ran against which engineec9ad67fix(plan-162): keep the execution record CI was throwing awaye044708feat(plan-162): the SQL execution coverage gate, reporting once before it bites52ee24efix(plan-162): load the last two statements that were read rather than loadedfdba0defix(plan-162): SqlText carries the set of files a statement came from2fc6184feat(plan-162): the SQL execution coverage gate bites -- 161 of 1619cd23batest(plan-162): the execution gate's own CI wiring is asserted, not assumedd7981b3refactor(plan-162): delete the execution-coverage waiver ledger1cc1c67refactor(plan-162): the recorder keys on the argument, not the method namea616d0cfeat(plan-162): declare the routes SQL travels, and assert them both waysd2d0561test(plan-162): guard the denominator every coverage number is a fraction of79d606bdocs(plan-162): record the contract-drift findings this stage did not fixa3d2b17test(plan-162): plan every templated test statement instead of waiving it301beb1feat(plan-162): Plan 129's sampling statements move to files and gain a Layer 2 test6c6dcc0docs(plan-162): a skill for adding SQL, because the reader starts coldae74cf3docs(plan-162): the prior-art comparison conceded more than it measured2906edffix(plan-162): ask for bindings only where there is a placeholder to bind6d3e3d4docs(plan-162): close Stage X, and point the slice at Stage Sde188c8docs(plan-162): the depends-on cell states a dependency, not progress
138 (67)
e0b2054docs(plan-138): publish the recaps, and name the coupling the root move breaks385c2bedocs(plan-138): fix the generator contract Stage 1d and 1e could not be built fromb869275docs(plan-138): reconcile the overview's solver naming with the live path (CAR-37)3cb759bdocs(plan-138): record the Stage 0 baseline and dispose of every drift row (CAR-44)f0a5f81docs(plan-138): correct the baseline's stated measurement basis (CAR-44)fa9ef9bdocs(plan-138): close Gate 0 and open Stage 1a (CAR-38)1c47893docs(plan-138): rebuild the README against the public truth contract (CAR-38)0f3f622docs(plan-138): retitle the cover badge its content no longer matches (CAR-38)3a48febdocs(plan-138): mark both overviews by register, not by disclosure3bc23f1docs(plan-138): bring the storage overview up to date with Plan 145b33c4f9docs(plan-138): drop the README's pointer to a setup script that cannot run (CAR-38)515bb82feat(plan-138): rebuild the landing page against the public truth contractadbc8d0docs(plan-138): record Stage 1b, open Stage 1f, and bring Stages 3 and 5 current7a47f18docs(plan-138): point the build-order row at Stage 1c (CAR-56)e9302d9docs(plan-138): bring the Stage 1 slice table current for 1b and 1c (CAR-56)3d8ea58feat(plan-138): gate public-surface commits on a review skill (CAR-56)436842cdocs(plan-138): record the Stage 1c evidence and point the row at 1d (CAR-56)d411445feat(plan-138): generate the public roadmap projection (CAR-57)b0cec16docs(plan-138): record Stage 1d and promote 1e to the next slice (CAR-57)4a9de43fix(plan-138): regenerate the stale public roadmap projection469d2edfix(plan-138): write test fixtures as UTF-8, not the Windows locale codepagec204d22fix(plan-138): make the public-surface hook run on Windows15d028dfeat(plan-138): project the weekly recaps onto the public site (CAR-58)64ac21cdocs(plan-138): record Stage 1e's publication policy and what it corrected (CAR-58)9d46e6bfix(plan-138): make plan-week regenerate the recap projection it invalidates (CAR-58)ee80754docs(plan-138): record Stage 1e and promote 1f to the next slice (CAR-58)e5452cafix(plan-138): regenerate the roadmap projection the slice-cell edit staled (CAR-58)85f29d8docs(plan-138): teach the plans skill that its two files are published (CAR-58)f632613docs(plan-138): draw the corpus framings onto both surfaces (CAR-59)5367ab0docs(plan-138): advance the slice pointer to Stage 1h (CAR-59)4960b52docs(plan-138): replace the PR sequence with a build order (CAR-61)59b5b15docs(plan-138): draft article D on the April cutovere6b6a48docs(plan-138): rewrite article D's companion post as a teasera4166eedocs(plan-138): add the closeout public-surface question (CAR-61)331b980docs(plan-138): record Stage 1h evidence and advance the slice pointer (CAR-61)3907c2fdocs(plan-138): close the seam that let a slice-pointer edit publish unnoticed (CAR-61)81ddeffdocs(plan-138): point the slice cell at Stage 2 now the ops deploy has landed (CAR-61)a20b94fdocs(plan-138): add Stage 7 -- publish content without an image rebuild5f00c60feat(plan-138): serve generated public content from the checkout, not the image3675e47docs(plan-138): point the remaining stage specs at the moved content patheb45064docs(plan-138): correct the deploy state and the unreachability claim3c53a35docs(plan-138): close out Stage 7, and correct a claim it was publishingc80f494feat(plan-138): make / the public landing page and give the recaps a routeafac29cdocs(plan-138): add the Stage 2 deploy run sheet2b2808bRevert "Merge pull request #338 from whitewalls86/car-62-plan-138-stage-2"a1f1e4bdocs(plan-138): record why Stage 2 was deployed and reverted22032bcfix(plan-138): confine Streamlit to /dashboard/ with a base path37f4ba3docs(plan-138): replace "mechanism unknown" with the measured mechanism433cc4dReapply "Merge pull request #338 from whitewalls86/car-62-plan-138-stage-2"f3cc48btest(plan-138): assert Streamlit under its base path, not under the catch-all6060495docs(plan-138): close out Stage 2 with Gate 2 met, and advance the slice pointer74d17aadocs(plan-138): add Stage 8, extract the public surface contractc66ea98docs(plan-138): extract docs/PUBLIC_SURFACE.md, the public surface contract1cd9afadocs(plan-138): re-measure the status block against the tree4842209docs(plan-138): point the slice cell at Stage 8, not Stage 4847d76edocs(plan-138): record Stage 3's three decisions, which were made and unwritten6695b60feat(plan-138): take the landing page same-origin and drop the hero video50ebf55docs(plan-138): record Stage 3b and 3c evidence, and correct a stale routing comment38eaa66docs(plan-138): bring the Caddy route test's header up to date8761f7cdocs(plan-138): redesign 1g as its own page, and sequence Stage 9 firste211eccfeat(plan-138): publish what a plan is for, not which stage is next0ec6d5afeat(plan-138): close Stage 4 and add Stage 10, covering the surfaces Stage 9 createddb02910fix(plan-138): show the analytics bucket's end, not its labelb8dcc79test(plan-138): close Stage 5 with a README contract and a fallback assertionb5b4eb2fix(plan-138): answer HEAD on every public route, and revalidate the generated artifacts780d393docs(plan-138): record Gate 1h as met, which it has been since Stage 213ce139docs(plan-138): archive the public surface refresh
172 (15)
3f8ca3bdocs(plan-172): open the plan-authoring plan, and Plan 138's stage that consumes it5d45022docs(plan-172): rescope to the plan document, and give it four questions9054f0cdocs(plan-172): bring the index row up to the rescoped plan8e9bdc0docs(plan-172): write the plan-document contract380bcf8feat(plan-172): add the plans skill's open-plan operation27c783efeat(plan-172): add the plan-draft skill9bd25d4docs(plan-172): ask how stages chunk into issues, not one-per-stage5de445efeat(plan-172): add the plan-start skill5a40ff6test(plan-172): mechanise the plan-document contract's public sectionsdb0142efix(plan-172): address PR #352 review findings38da869docs(plan-172): point Stage G at the measurement it actually re-runs0d26683feat(plan-172): split stage-close out of close-out, add note-evidence00d4b74test(plan-172): assert the waiver list only shrinks, retiring Stage G's re-measure219d9ecdocs(plan-172): repoint the five references the close-out split orphaned46782cddocs(plan-172): archive the plan, and pay the waiver ratchet down to 38
161 (12)
cad95c8docs(plan-161): the testing contract, and what it is measured against06f90e3docs(plan-161): one mocking convention, layers ordered by cost, ast as a symptom9a56635docs(plan-161): the restructuring has a plan number, and 139's split is decidedab6c5b3docs(plan-161): CAR-33 closeout evidencedb89cbbdocs(plan-161): the harness must not decide the outcomef2f5ab3test(plan-161): the reviewer skill and the test that asserts the contract (CAR-34)313c914test(plan-161): fail on an empty routing table, and report what was enumerated (CAR-34)e46ce27test(plan-161): enumerate routes from the OpenAPI schema, not a routes walk (CAR-34)2324b0adocs(plan-161): record the FastAPI enumeration failure as CAR-34 evidence5147200test(plan-161): assert gap-list owners against the archive, and reconcile Plan 13992d2f99docs(plans): archive Plan 161 and move Plan 142 to closeout2836a53test(plan-161): assert the contract's claims about its own enforcement (CAR-43)
164 (10)
266b4d5docs(plan-164): a cycle-close ritual, for the three steps nothing owns8bc1c35docs(plan-164):git branch -dchecks the upstream, not HEADdf8ea36feat(plan-164): write the cycle-close order and build the ref-hygiene step96b3f8efeat(plan-164): make ref hygiene prevention-first and cross-machine0643cbdtest(plan-164): enforce the settings and the recap habit, not the sweepc6bcadctest(plan-164): tighten the recap deadline to Wednesday, and pin the boundary7e49b71feat(plan-164): drop the ref ratchet to 5 after the backfill swept 65 branches95ed7f9feat(plan-164): build Stages 1 and 2, and correct the premise that blocked them181b8e1docs(plan-164): close Stages 0, 1, 2 and 3 with their record entriesfee0089docs(plan-164): move to closeout, and backfill Plan 154's public section
146 (7)
54fee43docs(recaps): recap the week of 2026-08-24 to 2026-08-30bf989fcfix(plan-146): the state parser could not see the closeout table83b9245docs(plan-146): correct the recap's rename sha, and record the parser defect404f521fix(plan-146): give the Documentation tests job PYTHONPATH (CAR-42)78e5aadfix(plan-146): add workflow_dispatch so CI can be re-run manually (CAR-42)538c9fadocs(plan-146): file handoffs and reports out of docs/plans/4bd29dcdocs(plan-146): repoint every reference the move broke
175 (7)
1cd7755docs(plan-175): open the commit gate bundling hole plan9874473feat(plan-175): move the public-surface gate inside git commit5e3f09dfix(plan-175): mark the pre-commit hook executable in the indexd9eaf8dfix(plan-175): compare the hooks path as a path, not as a stringb211212docs(plan-175): close Stage A with its record entry2f4cb7fdocs(plan-175): archive the plan with its public summary098eefefix(plan-175): consume the attribution stamp on every accepted message
142 (6)
42a81d6fix(plan-142): the four defects that made a maintenance window unrunnable9594d19fix(plan-142): observability_fresh could never pass, on any host2ff4918docs(plan-142): Stage 4's defects are deployed and verified in production1815b39fix(plan-142): read the findmnt tree so mounts_expected can pass (CAR-17)0b6191afix(plan-142): close the findings the first real window produced (CAR-17)f5e577atest(plan-142): couple the abort criterion to the boundary table (CAR-17)
149 (6)
bafcebfchore(plan-149): seed cycles to a points budget, not an issue count7fb6a92docs(plan-149): record Cycle 1's close, and make category 3 test the slicea30cdb0chore(plan-149): fill-cycle creates the projects it seeds into7c2badachore(plan-149): a plan that gets an issue gets a project, in both skills7412a25chore(plan-149): a Backlog-status issue cannot hold a cycleId03abeb1fix(ticket-now): always pass assignee explicitly on issue creation
139 (5)
f3b4406test(plan-139): give tests/integration/sql the real Airflow schema9ea2e27docs(plan-139): Stage F's CI evidence, measured rather than estimated9e56012docs(plan-139): mark Stage F complete1107433docs(plan-139): fold Stage H into Plan 162 and archive Plan 13934bc12adocs(plan-139): clear the references Plan 139's archival left stale
170 (3)
a831eb2docs(plan-170): add container image reclaim policyaa1c82edocs(plan-170): resolve Stage 0's trend question, pull build cache into scopec4cbcc6docs(plan-170): correct the measurement claim -- containerd is already on a panel
121 (2)
8c854e0docs(plan-121): record the unpinned-FastAPI incident against the constraints itemf55b1f5docs(plan-121): record what local bring-up actually is, after deleting setup.ps1
125 (2)
5c1944cdocs(plan-125): record the four obligations the testing contract now places on its gatese0b33d6docs(plan-125): archive Gate C's evidence out of the gitignored cache
145 (2)
972dfa5docs(plan-145): close the post-mortem against the finished plan1fbf526docs(plan-145): correct the design attribution against git
154 (2)
81a5c3ddocs(plan-154): correct the expected-running service count in the build orderc60ff6ddocs(plan-154): correct the expected-running set and every count derived from it
129 (1)
11aa6d9Plan 129 Closout documentation.
165 (1)
40dda68docs(plan-165): subdomain routing, scoped out of Plan 138
166 (1)
640877bdocs(plan-166): container PID 1 does not reap its adopted orphans
167 (1)
67c982fdocs(plan-167): open Plan 167 and state the solver truth in .env.example
168 (1)
d8b9913docs(plan-168): schedule the generated knowledge substrate at build-order 8
169 (1)
624df20docs(plan-169): file the public analytics agent in the backlog at 46
171 (1)
6d563e9docs(plan-171): file the coordination failure vocabulary
173 (1)
f5adf55docs(plan-173): open machine credential lifecycle in the build order (CAR-77)
174 (1)
9f2984fdocs(plan-174): open the public site shape plan, carved out of Plan 138
none-declared (3)
aaeb4b6chore: delete scripts/setup.ps1, superseded and non-functional since Aprild2cc8bafeat: enforce the commit-attribution skill instead of remembering itb0e3d6adocs: drop the CI lake snapshot from the not-production-serving lists
unattributed (3)
6b9d4f2feat(ops): name and scope the snapshot download tokensaebcacfrefactor(ops): put snapshot credential lookup behind a storage seam8acf088fix(ops): deliver SNAPSHOT_DOWNLOAD_TOKENS to the container, and open Stage 14
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
-
Plan 162 has six stages left — S, T, W, Q, V and R — of twenty-two. The slice pointer ends the week on Stage S, branch coverage for the dbt models (
6d3e3d4). Sixteen closed in one week; the remaining six were reordered on 2026-09-04 (f0edeca,a0c47a1). -
Three
.env.examplekeys have no established answer.8acf088measured 37 keys, four of which nodocker-compose*.ymlreferences. One was the defect it fixed;FASTAPI_ADMIN_KEY,MLFLOW_TRACKING_URIandPROVENANCE_ENVare pre-existing and each needs wiring, deletion, or a declaration that it is script-only. Stage V is deliberately unsized until that investigation runs. -
Stage X recorded contract-drift findings it did not fix (
79d606b). -
Plan 138 archived with two deliverables never produced — the mobile Lighthouse report and the before/after measurements. Four of its completion criteria moved to Plan 174 along with the presentation work. The archive row says so; it is recorded here because an archived plan stops being read.
-
Four closeout gates are open and dated. Plan 164 lands on Cycle 2's close (2026-09-09), Plan 142 on a second maintenance window run through the checked-in procedure (2026-09-30), Plan 146 on
docs/recaps/holding a file for every complete week from 2026-08-17 to 2026-09-13, and Plan 149 on 2026-09-15. Plans 136 and 160 also sit in closeout with dates of 2026-09-17 and 2026-09-13.This recap is itself one of the four files Plan 146's gate counts.
-
Plan 138 Stage 2's revert is a resolved question, not an open one. The mechanism was unknown at the time of
a1f1e4band measured in37f4ba3; it is listed here only so a reader of the revert does not go looking for a loose end.
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:
6b9d4f2feat(ops): name and scope the snapshot download tokensaebcacfrefactor(ops): put snapshot credential lookup behind a storage seam8acf088fix(ops): deliver SNAPSHOT_DOWNLOAD_TOKENS to the container, and open Stage 14
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:
aaeb4b6chore: delete scripts/setup.ps1, superseded and non-functional since Aprild2cc8bafeat: enforce the commit-attribution skill instead of remembering itb0e3d6adocs: drop the CI lake snapshot from the not-production-serving lists
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/master — c47f6b4, 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.