What shipped, what is waiting for your review and in which order to merge it, plus two mono-volt decisions only you can make.
| PR | What | Size | State |
|---|---|---|---|
| py-mkt #4147 | Backend E2E becomes API journeys: 4 tests to 39, across sync and async APIs | 25 files, +2,759 / -1,157 | 3 real runs green |
| py-mkt #4145 | Test-writing guideline and a fix to the stale integration-test skill | Docs | ready |
| py-mkt #4144 | CLAUDE.md and AGENTS.md cut to the rules every task needs | 417 to 145 lines | after #4145 |
| mono-volt #2975 | Mobile rollout and worktree rules move into mono-volt | Docs | with #4144 |
| next-ops #1794 | First CLAUDE.md for next-ops: entity pickers, backend catalogs | Docs | with #4144 |
The old gate ran 4 checkout tests. There is no k6 anywhere in our repos, only a stale manual Locust file, so the suite stays in pytest on top of the existing real sign-in and Stripe test-mode plumbing. It runs against the same per-build test stack, in parallel with integration.
| Journey | What it proves |
|---|---|
| Auth and session | OTP, sign-up to /me, refresh, logout revokes on both APIs, forged and missing tokens rejected |
| Browse | Event list by venue in date order, details and order book follow a new lowest listing, venue pages agree |
| Buy | 9 wallet cases with literal buyer totals and seller payouts, order cards, transfer status, book quantity, buy limits |
| Sell | Listings created through the real API, edits and cancels visible everywhere, conflict and range errors |
| Offers | Place, withdraw, and a seller filling an open offer on the bidder's own payment intent |
| Authorization | One member cannot see or change another member's listing, cart, offer or order |
| Money | A sale credits the seller as pending, withdrawal rules, notifications to both sides |
| Home and account | Home, feed and explore show upcoming events for the area, saved events and notifications across both APIs |
The suite also turned up five API behaviour bugs, written up in #4147 and not fixed there. Read those before merging.
An audit of about 17.5k tests in 1,699 files found the problems below. Each one maps to a rule in docs/testing/README.md, and every good and bad example in it comes from our own code.
| Problem | Rule that answers it |
|---|---|
| Integration job runs one directory plus a hand-kept file list | Every test runs in CI, no parked tests |
| Tests insert rows and assert the read path echoes them | Arrange through production paths and shared builders |
| 1,038 call-count asserts, 1,058 private attribute reads | Assert observable outcomes with literal expectations |
| Constructor drift in tests nobody runs | Fakes behind interfaces, and CI inclusion so drift fails fast |
| Wall-clock time, literal dates and IDs | Inject now, relative dates, generated IDs |
| About 257 tests skipped wholesale for months | Every skip has a reason, issue, owner and date |
| Money-moving services with little or no coverage | Unit and integration coverage required for money and ticket paths |
Proposed next: a non-blocking CI lane that runs every test directory, fix or delete failures area by area, then make it blocking. After that a lint that stops new mock imports, with today's files as a shrinking allowlist.
The root CLAUDE.md, which AGENTS.md links to, loaded about 10k tokens into every Claude and Codex task, mostly procedure for specific jobs. The new core keeps the rules every task needs and links the rest. Every moved section went verbatim, and #4144 maps each old section to its new file.
| Moved | New home |
|---|---|
| cvdev manual, ports, modes, mobile tailnet, seed commands, branch-name math | docs/dev/stack.md |
| RBAC endpoint steps | docs/rbac/adding-endpoints.md |
| Ohm category steps | docs/ohm/adding-a-category.md |
| Data-layer query reference | docs/data-layers.md |
| Deferred-import internals | docs/ci-cd/deferred-imports.md |
| Mobile rollout and worktree rules | mono-volt CLAUDE.md |
| Entity pickers, RBAC and Volt Desk catalogs | next-ops CLAUDE.md |
Vercel builds every mono-volt merge but assigns the domain only when something promotes a build. Jenkins mono-volt cd is meant to do that, but it has never run: its GitHub webhook still points at the retired Jenkins host and every delivery fails. Production is still on 8f91bf7 from 26 Sept.