Readiness and handoff at 05:20: round six gated and passed CI; round seven half in; the replicator's sixth build pushed
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2 files changed,
+11
−11
.claude/HANDOFF.md+7 −7implementation/carloku-paid-launch/READINESS.md+4 −4
CI passed — run details
diff --git a/.claude/HANDOFF.md b/.claude/HANDOFF.md| index c1aaf0ad5..944b83b0d 100644 |
| --- a/.claude/HANDOFF.md |
| +++ b/.claude/HANDOFF.md |
| @@ -7,17 +7,17 @@ |
| Get Carloku's paid plans live with Stripe Tax and the complete metered model; have the pricing page and signup flow reviewable in the morning. |
| **STATUS:** |
| -Written 04:47 Dublin on 2026-10-02, during the second overnight run (brief: "continue overnight until we're ready to enable payments"; ready means reviewed, tested, integrated code and a scoped enablement plan, not payments switched on). Billing is OFF everywhere. No live Stripe write, no AWS change, no charge, no merge to main. Every payment anyone can see is a labelled simulation. |
| +Written 05:20 Dublin on 2026-10-02, during the second overnight run (brief: "continue overnight until we're ready to enable payments"; ready means reviewed, tested, integrated code and a scoped enablement plan, not payments switched on). Billing is OFF everywhere. No live Stripe write, no AWS change, no charge, no merge to main. Every payment anyone can see is a labelled simulation. |
| -Review servers, all answering 200: pricing page `http://100.119.180.57:38009` (static, rebuilt from site `2fc6388`), signup and billing demo `http://100.119.180.57:41881` (rebuilt 04:4x from the currency branch's tip `b51c2a26`, price book configured, USD/EUR/GBP end to end; Keymail and Stripe simulated), console billing copy `http://100.119.180.57:45033` if still up. |
| +Review servers, all answering 200: pricing page `http://100.119.180.57:38009` (static, rebuilt from site `2fc6388`), signup and billing demo `http://100.119.180.57:41881` (rebuilt 05:1x from the currency branch's tip `124eab27`, price book configured, USD/EUR/GBP end to end; Keymail and Stripe simulated), console billing copy `http://100.119.180.57:45033` if still up. |
| The durable records are on this branch under `implementation/carloku-paid-launch/`: `READINESS.md` (every branch's tip, gate log, CI and review state, with the verified behaviour), `ENABLEMENT.md` (the scoped plan to enable payments: catalog of 36, cutovers, key permissions, webhook, portal, release order, rollback, approvals), `OVERAGE-RATES-PROPOSAL.md` (the USD/GBP rate table for approval), `stripe-live-readiness.json` (remaining list revised for 36 prices and the book), `OUTSTANDING.md` (the metered model's open items and approvals A to K). |
| Decisions received 2026-10-01 evening, applied: the annual bases (28/24/22, 6/5/4.50, 60/50/45 USD/EUR/GBP, team minimum ten) confirmed for implementation only; the currency rulings (USD default, EUR for EU member states, GBP for the UK, visible override, one stored currency for subscription and overages, bands by billing country only); the five currency strings and the regrouped pricing page copy, approved verbatim and applied. Still a draft: the book `2026-10-01-draft1` and the USD/GBP overage rates and floors. |
| Branches (all on the forge, none merged; the local gate is not CI): |
| -- `feat/carloku-multi-currency-20261001` `b51c2a26`: the price book and one stored currency per purchase end to end, the billing page as one form with a signed quote, ownership on every path, the cookies, the demo. Five review rounds, each Opus accept with fixes and Astra reject, each round's findings fixed in the next commit with distinguishing tests and mutation checks (dispositions "Review five" is the latest). Gate and CI passed on `1f005804`; gate on `b51c2a26` running at 04:47, CI pending; sixth review (Opus + Astra) running. No round has yet ended with both reviewers accepting. |
| -- `feat/carloku-metered-replicator-20261001` `1b3cc29e`: fifth build (the fourth review's bounded findings fixed; the deep ones, litestream's first open above all, stated open); gate and CI passed on `1b3cc29e`; fifth review running. |
| +- `feat/carloku-multi-currency-20261001` `124eab27`: the price book and one stored currency per purchase end to end, the billing page as one form with a server-signed quote, ownership on every path, the cookies, the demo. Six review rounds, each Opus accept with fixes and Astra reject, each round's findings fixed in the next commit with distinguishing tests and mutation checks (dispositions "Review six" is the latest). Gate and CI passed on `124eab27`; seventh review: Opus in (accept with fixes, one P2 on a quantity-event outcome list), Astra pending. No round has yet ended with both reviewers accepting. |
| +- `feat/carloku-metered-replicator-20261001`: sixth build pushed 05:2x (the fifth review's bounded findings: the last clean look's hold, the union window, the lifecycle lock, platform links anywhere in the path, world-writable platform directories, sidecar names, vanished files); gate running; sixth review running; the deep items stay open. |
| - `feat/carloku-storage-sole-holder-20261001` `eaf6e63e`: round 9 both accept; CI passed; needs approval K and a cutover date. |
| - `fix/carloku-observe-routes-cleanup-20261001` `023e106c`: both accept; CI passed; merged into this branch at `47c97fa6`; the gate on the launch tip `b953fae4` passed (exit 0, three cross builds). |
| - `feat/carloku-billing-layout-20261001` `c1ae91a0`: merged into the currency branch; its two-form page was replaced by one form. |
| @@ -29,15 +29,15 @@ Branches (all on the forge, none merged; the local gate is not CI): |
| - Paul, copy: the console billing page's 40 strings; the store-refusal copy (`OUTSTANDING.md` 19g); a new sentence for the pricing page's `bands.p3` ("The euro price is what is charged" is wrong under fixed currencies); the approved pricing and currency strings themselves need nothing more. |
| - Paul, rulings: evidence for a held bucket-hour (J); storage on a bucket a store has left (K); the cutover note (M: purchases before the book stay legacy EUR; binary first, variables second). |
| - Scoped approvals, prepared as plans only: Stripe test mode (E) for the fence test and the rehearsal; Stripe live provisioning (F) after the approved book; the Cost and Usage Report export and the scratch-object write (G); Path B on a dev box (H). |
| -- Reviews to read when they land: the currency branch's sixth (`logs/opus-currency-review6.md`, `astra-currency-review6.md`) and the replicator's fifth (`opus-replicator-review5.md`, `astra-replicator-review5.md`). |
| +- Reviews to read when they land: the currency branch's seventh (`logs/opus-currency-review7.md` is in, `astra-currency-review7.md` pending) and the replicator's sixth (`opus-replicator-review6.md`, `astra-replicator-review6.md`). |
| **RECOMMENDED:** |
| -- Read the sixth currency review; if both accept, merge the currency branch into this branch through the forge (`amadan branch merge`, CI green on the tip). Rule on K to let the storage branch follow. |
| +- Fix the seventh currency review's findings (the outcome lists first); if a round ends with both accepting, merge the currency branch into this branch through the forge (`amadan branch merge`, CI green on the tip). Rule on K to let the storage branch follow. |
| - Publish the approved book version as soon as L is given; it is a new entry in `internal/plans/pricebook.json`, the export regenerated and copied to the site, and the 36 lookup keys renamed. |
| - Test-mode rehearsal (E) before anything live: the list in both reviews and in `ENABLEMENT.md` section 6. |
| - Then, each on its own branch: quantity reduction at renewal, the evidence door for a box's first minutes, the AWS principal inventory and the bucket ownership attestation door, Free-tier enforcement, dormancy and pool accounting. |
| **SESSION:** |
| -Running at 04:47: the gate on the currency tip `b51c2a26` (`logs/gate-currency-b51c2a26.txt`), the two sixth-round currency reviews, the two fifth-round replicator reviews, the two replicator reviews (detached `setsid` processes; their output files are named in `READINESS.md`). The demo (pid in `layout-review/demo-redesigned.log`'s process, stop marker `layout-review/demo-redesigned.stop`) and the pricing preview (`python3 -m http.server 38009`) keep serving. |
| +Running at 05:20: the replicator's sixth-build gate, Astra's seventh currency review, the two sixth-round replicator reviews, the two replicator reviews (detached `setsid` processes; their output files are named in `READINESS.md`). The demo (pid in `layout-review/demo-redesigned.log`'s process, stop marker `layout-review/demo-redesigned.stop`) and the pricing preview (`python3 -m http.server 38009`) keep serving. |
| Scratch on the box: `~/.cache/tmp/claude-1001/{currency-wt,replicator-wt,fencing-wt,evidence-wt}` (git worktrees), the demo binaries, `/var/tmp/ck`, `~/.cache/carloku-gate`. The void gate logs are named `*VOID*`. |
diff --git a/implementation/carloku-paid-launch/READINESS.md b/implementation/carloku-paid-launch/READINESS.md| index d248bb61c..db8818132 100644 |
| --- a/implementation/carloku-paid-launch/READINESS.md |
| +++ b/implementation/carloku-paid-launch/READINESS.md |
| @@ -14,17 +14,17 @@ Log files are under `/home/paulca/.local/share/carloku-paid-launch-20260930/logs |
| | Branch | Tip | Gate | CI | Reviews | State | |
| | --- | --- | --- | --- | --- | --- | |
| -| `feat/carloku-multi-currency-20261001` | `b51c2a26` (the fifth review's findings) | `1f005804`: passed 03:26Z (`gate-currency-1f005804.txt`, exit 0, three cross builds, clean tree); `8958392b`, `de81dd70` passed before it. `b51c2a26`: started 03:45Z (`gate-currency-b51c2a26.txt`); the four billing packages passed in full on the same tree before the commit. Void logs, not evidence: `gate-currency-a9304f16.txt`, `gate-currency-f269365a-VOID-dirty-tree.txt` | passed on `de81dd70`, `8958392b`, `1f005804`; `b51c2a26` pushed 04:46, run pending | 1 (`9d104f1d`), 2 (`a88a39e6`), 3 (`de81dd70`), 4 (`8958392b`): each Opus accept with fixes, Astra reject; each round's findings fixed in the next commit with distinguishing tests and mutation checks. 5 at `1f005804`: Opus accept with fixes (five P3), Astra reject (seven: ownership on the listing, reconcile and bind paths, forged agreeing quote fields, the trigger swap not atomic, the review reopening after resolution, the site's build entry point, the check's single page, an own-option shape); every finding of either fixed in `b51c2a26` (ownership on every path, a signed quote, the swap in one transaction, resolution retires the intent, paginated metadata counts, the tautology replaced), seven mutants killed, one equivalent (dispositions, "Review five"). 6 at `b51c2a26`: running (`currency-review6-brief.txt`). No round has yet ended with both reviewers accepting | integrated end to end; not merged | |
| +| `feat/carloku-multi-currency-20261001` | `124eab27` (the sixth review's findings) | passed on `de81dd70`, `8958392b`, `1f005804`, `b51c2a26` and `124eab27` (04:11Z, `gate-currency-124eab27.txt`, exit 0, three cross builds, clean tree). Void logs, not evidence: `gate-currency-a9304f16.txt`, `gate-currency-f269365a-VOID-dirty-tree.txt` | passed on every pushed tip through `124eab27` | Rounds 1 to 6, each Opus accept with fixes and Astra reject, each round's findings fixed in the next commit with distinguishing tests and mutation checks (dispositions, one section per round). Round 6 at `b51c2a26` found the quote signature keyed by a value the form discloses; `124eab27` keys it with a server secret and covers the account and the member count, judges the pass's session against the intent it works on, keys the refusal review by the intent and retires exactly it. Round 7 at `124eab27`: Opus accept with fixes (one P2: the new quantity-event outcome missing from two sibling lists, so a resolved refusal held the account for good; three P3), Astra pending at 05:20. No round has yet ended with both reviewers accepting | integrated end to end; not merged | |
| | `feat/carloku-billing-layout-20261001` | `c1ae91a0` | (templates only; gated inside the currency branch) | passed | none of its own | merged into the currency branch at `5047494b`; its two-form layout was replaced by one form in `8958392b` | |
| | `feat/carloku-storage-sole-holder-20261001` | `eaf6e63e` | passed on `3af02a65`; `eaf6e63e` is wording and reports | passed | 9 rounds; round 9 both accept (omitted-holder class closed) | needs approval K and a recorded cutover date; not merged | |
| -| `feat/carloku-metered-replicator-20261001` | `1b3cc29e` (fifth build) | `01f2b072`: passed 23:47Z; `1b3cc29e`: passed 03:39Z (`gate-replicator-1b3cc29e.txt`, exit 0, three cross builds); the ops tests pass under `/tmp` and `~/.cache` | passed on `01f2b072` and `1b3cc29e` | 3 rounds on the third build; 4 at `01f2b072`: Opus accept with fixes (P2-1 to P2-4), Astra reject (four P1s); the bounded findings fixed in `1b3cc29e` (admission re-check after the read, bounded witness reads, close once, the inherited window passed on, the file-swap lower bound, the chain's starting directory and the DynamicUser link, the safe header read, sidecar names, the inventory's silent drops), the deep ones (litestream's first open, shadow ancestry, requests tracked to completion) stated open (dispositions, "Review four"). 5 at `1b3cc29e`: running | not merged; unwired side work gated on approval H | |
| +| `feat/carloku-metered-replicator-20261001` | sixth build, pushed 05:2x (tip in `~/.cache/tmp/claude-1001/replicator-tip.txt` and the branch page) | passed on `01f2b072`, `1b3cc29e`; the sixth build's gate started 05:2x; the ops, registry and lease tests pass under `/tmp` and `~/.cache` | passed on `01f2b072`, `1b3cc29e`; the sixth build pending | 4 at `01f2b072` and 5 at `1b3cc29e`: each Opus accept with fixes, Astra reject; the bounded findings of each fixed in the next build (dispositions, "Review four", "Review five"); the deep ones open: litestream's own opens, `dataDir` and shadow ancestry, requests tracked to completion, a walk by directory descriptor. 6: running | not merged; unwired side work gated on approval H | |
| | `fix/carloku-observe-routes-cleanup-20261001` | `023e106c` | passed on `51587e00`; `023e106c` changes a test and two docs | passed | both accept at `51587e00` | merged into the launch branch at `47c97fa6` | |
| | `feat/carloku-paid-launch-20260916` (launch) | `b953fae4`: this night's documents (`ea7e3ea6`) + the merge of the observe-routes fix (`47c97fa6`) + the readiness update | passed 03:06Z on `b953fae4` (`gate-launch-b953fae4.txt`, exit 0, three cross builds); last code gate before it on `cd8821c6` | passed on `6a08f88d`; `b953fae4` pushed 04:10, run pending | 17 rounds, no whole-branch pass | the integration target; first accepted side branch merged | |
| | site `feat/paid-pricing-20260916` (GitHub) | `9427c22` | `node --test`: 18 pass (04:4x) | n/a | read-only by the currency reviews (section K); rounds four and five's site findings fixed in `4feb1cd` and `9427c22` | preview served at `http://100.119.180.57:38009`, rebuilt from `4feb1cd` (the `9427c22` change is the build script alone) | |
| ## The flow, behaviour the tests establish (2026-10-02) |
| -These are what the automated tests assert on `b51c2a26`, against fakes of Keymail and Stripe; none of it is proven against the real provider, and the sixth independent review of this code is still running. Tests: (`internal/console`: `TestBillingFormPostsWhatItShows`, |
| +These are what the automated tests assert on `124eab27`, against fakes of Keymail and Stripe; none of it is proven against the real provider, and the seventh independent review of this code is in progress (Opus in, Astra pending). Tests: (`internal/console`: `TestBillingFormPostsWhatItShows`, |
| `TestBillingPageCurrencyControls`, `TestPricingLinkSurvivesSignIn`, |
| `TestCurrencySuggestionCookie`, `TestCountrySuggestionCookie`, |
| `TestBillingInclusionsFollowTheQuotedBand`, |
| @@ -59,7 +59,7 @@ reconcile, calculation, invoice and recovery tests in |
| review of a session paid in the wrong currency retires its intent. |
| Reviews four and five each found some of these wanting; they hold at |
| `b51c2a26` by the tests named, and round six is reading them. |
| -- Demo at `http://100.119.180.57:41881`: rebuilt 04:4x from `b51c2a26` |
| +- Demo at `http://100.119.180.57:41881`: rebuilt 05:1x from `124eab27` |
| (binary `billing-redesigned.test`, started by the stop-marker procedure; |
| the EUR-only binary is kept as `billing-redesigned-eur-only.test.bak`), |
| serving with the price book configured: the whole path from the pricing |