Record the landing checks for displaced subscriptions

make test passes on the tree of the six commits before this one (it runs
make lint first; 57 packages ok, none failed), and openspec validate
displaced-subscription-waits --strict passes.

Race run (4.9): `go test -race -p 1 -count=1 -run
'^TestReconcile_AGrantIssuedWhileTheReconcileWaitsIsSeen$'
./internal/fulfillment` after test/reset-test-db.sh: ok. The section's
own commit says only that the test also passed under -race; this is the
run the item names.

Breaks, every section CAUGHT: section 1, 6 of 6; section 2, 2 of 2;
section 3, 8 of 8 (the grant_id clause of the pairs view has no break,
for the reason item 3.4 gives); section 4, 27 of 27; section 5, 11 of
11; section 6, 14 of 14.

The organization page's line for a subscription a grant holds the ladder
against was also checked by hand on the Stripe sandbox, a state the
screen harness cannot reach: a member subscribed through Checkout, an
operator issued a grant over the same tier, and the Billing card read
"Delivers nothing on Demo Ladder, which a grant holds" at desktop and
mobile widths.

Items 7.3 to 7.6 (the read-only count on a deployment, the comments
after the push, the candidate issues, the archive) are left open.
This commit is contained in:
2026-10-26 15:18:40 -05:00
parent 04862abe9c
commit 335aa85738
@@ -187,8 +187,8 @@ This change starts from the tree that `reconcile-takes-pool-lock` (#193) leaves,
## 7. Landing
- [ ] 7.1 With the test stack up, `make test` passes (it runs `make lint` first), and `openspec validate displaced-subscription-waits --strict` passes.
- [ ] 7.2 The race run of item 4.9 is in its commit's message, and every section's break list reads CAUGHT or names its unseen breaks with the reason.
- [x] 7.1 With the test stack up, `make test` passes (it runs `make lint` first), and `openspec validate displaced-subscription-waits --strict` passes.
- [x] 7.2 The race run of item 4.9 is in its commit's message, and every section's break list reads CAUGHT or names its unseen breaks with the reason.
- [ ] 7.3 The read-only count (design D14), run by whoever lands the change, before the push that deploys it, on each deployment that ran the console before it, as `console_reader` (`docs/database-management.md`, "The `console_reader` role"). It reads ids, instants, transition types and ranks, and the grant's reason and mark, which the role reads, and no `reason` of a transition, which it does not; it writes nothing. Zero rows means nothing to fix. Each row is a grant the defect took back; the rows go to the maintainer, and each is fixed by hand on his go (the grant issued again, revoked, or left), never by code in this change:
```sql