Readiness and handoff at 08:55: round fifteen's last lifecycle exception closed by the ruling (no record under an open review; retire or keep), round sixteen running; the replicator's fifteenth build
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
3 files changed,
+18
−17
.claude/HANDOFF.md+8 −8implementation/carloku-paid-launch/ENABLEMENT.md+5 −4implementation/carloku-paid-launch/READINESS.md+5 −5
CI passed — run details
diff --git a/.claude/HANDOFF.md b/.claude/HANDOFF.md| index 38331deea..63e4cc182 100644 |
| --- a/.claude/HANDOFF.md |
| +++ b/.claude/HANDOFF.md |
| @@ -7,39 +7,39 @@ |
| 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 07:55 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 08:55 Dublin on 2026-10-02 (the session hit a provider limit at about 08:00 Dublin and resumed at 08:40; nothing was lost: the uncommitted round-fifteen edits were intact and are now committed), 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 07:5x from the currency branch's tip `abd1b76e`, 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 08:5x from the currency branch's tip `3527a066`, 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` `abd1b76e`: 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 refusal review keyed by its intent with the session recorded, the cookies, the demo. Rounds ten to thirteen ended with both reviewers accepting with P3 fixes; **round fourteen did not: Astra found a P2** (a first purchase's record and its intent's retirement were two transactions under no common lock, so a reconciliation paused on the provider read while the operator resolved the review recorded the retired purchase). Fixed in `abd1b76e`: the record consumes the exact standing intent in its own transaction, and the same lifecycle holds on every path (an intent under an open review is never retired by an expiry; a retired intent's completion and subscription events are settled, not retried; a refusal whose session read came back as another session files nothing), with tests that fail without each fix and six killed mutants (dispositions "Review fourteen"). Gate and CI passed through `9574a798`; gate on `abd1b76e` running at 07:55, CI pending; the fifteenth review is reading the fix. These findings were not minor: each round since ten found a real gap in the lifecycle of an intent under review. |
| -- `feat/carloku-metered-replicator-20261001` `90032b61`: thirteenth build. Reviews ten to thirteen (Opus accept with fixes, Astra reject) each found the previous build's own addition wanting; the thirteenth build quotes link targets and compares link entries as written, requires a file's checks to see one inode, and reports a link that cannot be read; review thirteen's bounded items (an injective link encoding, the duplicate check on the kept facts, the two-step link read) are the fourteenth build, not yet committed. Gate and CI passed on `90032b61`. The deep items stay open and are listed in `READINESS.md`; none is minor, and the branch cannot be wired until they are closed or decided (the walk by directory descriptor, litestream's opens by path, durable transition state, the uid binding under approval H, the box-wide refusal decision). |
| +- `feat/carloku-multi-currency-20261001` `3527a066`: 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 refusal review keyed by its intent with the session recorded, the cookies, the demo. Rounds ten to thirteen ended with both reviewers accepting with P3 fixes; **round fourteen did not: Astra found a P2** (a first purchase's record and its intent's retirement were two transactions under no common lock, so a reconciliation paused on the provider read while the operator resolved the review recorded the retired purchase). Fixed in `abd1b76e`: the record consumes the exact standing intent in its own transaction, and the same lifecycle holds on every path (an intent under an open review is never retired by an expiry; a retired intent's completion and subscription events are settled, not retried; a refusal whose session read came back as another session files nothing), with tests that fail without each fix and six killed mutants (dispositions "Review fourteen"). Round fifteen (both accept with fixes) found the last exception to that lifecycle, a purchase corrected at the provider recording under its open review; `3527a066` closes it by the ruling: nothing records on an intent under an open review, and the operator's resolution retires the intent (default) or keeps it (`outcome: keep`) for the corrected purchase to record; a retired intent's events settle whatever intent stands. Gate and CI passed through `abd1b76e`; gate on `3527a066` running at 08:55, CI pending; the sixteenth review is reading it. These findings were not minor: each round since ten found a real gap in the lifecycle of an intent under review. |
| +- `feat/carloku-metered-replicator-20261001` `03b19014`: fifteenth build. Reviews ten to fourteen (Opus accept with fixes, Astra reject) each found the previous build's own addition wanting; the fourteenth build made the link entry one to one and the fifteenth quotes every entry in the inventory's rendering (the drift key), classifies a link by the spelling its entry names, and makes the Accept test tell as-written from cleaned. Gate and CI passed on `ec55b639`; gate on `03b19014` running; the fifteenth review is reading it. The deep items stay open and are listed in `READINESS.md`; none is minor, and the branch cannot be wired until they are closed or decided (the walk by directory descriptor, litestream's opens by path, durable transition state, the uid binding under approval H, the box-wide refusal decision). |
| - `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. |
| - `feat/carloku-late-request-fencing-20261001` `1b61de82`, `feat/carloku-bucket-hour-evidence-20261001` `0aa1fbec`: unchanged (rejected / needs approval J). |
| -- Site `feat/paid-pricing-20260916` (GitHub) `f291a9e`: every amount from the platform's export; country band wiring; exact rates; honest link parameters, static links included; a draft book cannot be published by `check` or `build`; `bands.p3` carries the approved currency explanation; every priced slot, in every currency and band, and every banded inclusion equals its exported value (18 tests pass: `node --test test/*.test.mjs`). |
| +- Site `feat/paid-pricing-20260916` (GitHub) `a7283e7`: every amount from the platform's export; country band wiring; exact rates; honest link parameters, static links included; a draft book cannot be published by `check` or `build`; `bands.p3` carries the approved currency explanation; every priced slot, in every currency and band, and every banded inclusion equals its exported value; a figure is a whole number token on both sides (19 tests pass: `node --test test/*.test.mjs`). |
| **NEEDED:** |
| - Paul, commercial: approve the 36 amounts as an `approved` book version (approval L) together with the USD/GBP overage rates and floors in `OVERAGE-RATES-PROPOSAL.md`, or state other figures; the HALF code word; the proration policy (B); the partial-month rule (C). |
| - Paul, copy: the console billing page's 40 strings; the store-refusal copy (`OUTSTANDING.md` 19g). `bands.p3` is done: the approved currency explanation replaced the converted-euro sentence (site `e091e3f`, 07:0x); it now reads the same as the note under the currency selector. |
| - 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 fifteenth (`logs/opus-currency-review15.md`, `astra-currency-review15.md`); the replicator's fourteenth once its build is pushed. |
| +- Reviews to read when they land: the currency branch's sixteenth (`logs/opus-currency-review16.md`, `astra-currency-review16.md`) and the replicator's fifteenth (`opus-replicator-review15.md`, `astra-replicator-review15.md`). |
| **STILL TO BUILD (code, not approvals; no fake completes these):** quantity reduction at renewal (`OUTSTANDING.md` 14), the Free tier (15), dormancy and pool accounting (16), per-line tax codes across a change (17), the operator doors (18, plus the quantity-history gap door and a rejected-events listing), the meters' own code (replicator unwired with deep items open; store transfer has no source), the two key-memory defects (7, 9). `READINESS.md` has the list with what each means. The tests on the currency branch establish the subscription and currency path against fakes, nothing beyond it. |
| **RECOMMENDED:** |
| -- Read the fifteenth currency review. If both accept with nothing left to fix and CI is green on the tip, merge the currency branch into this branch: a merge commit pushed to this branch, as the observe-routes fix was at `47c97fa6` (`amadan branch merge` lands a branch on main and is not what this step is), then gate the merged tip. If it does not confirm, the next commit answers it the same way. Rule on K to let the storage branch follow. |
| +- Read the sixteenth currency review. If both accept with nothing left to fix and CI is green on the tip, merge the currency branch into this branch: a merge commit pushed to this branch, as the observe-routes fix was at `47c97fa6` (`amadan branch merge` lands a branch on main and is not what this step is), then gate the merged tip. If it does not confirm, the next commit answers it the same way. 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 07:55: the gate on the currency tip `abd1b76e`, the two fifteenth-round currency 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 08:55: the gates on the currency tip `3527a066` and the replicator tip `03b19014`, the two sixteenth-round currency reviews, the two fifteenth 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/ENABLEMENT.md b/implementation/carloku-paid-launch/ENABLEMENT.md| index 9f37c3991..494985851 100644 |
| --- a/implementation/carloku-paid-launch/ENABLEMENT.md |
| +++ b/implementation/carloku-paid-launch/ENABLEMENT.md |
| @@ -199,10 +199,11 @@ Ready means: reviewed, tested, integrated code, and this plan with its |
| approvals granted. It does not mean payments switched on. |
| - Code: the currency branch at its tip is gated locally and pushed; its |
| - tenth to thirteenth independent reviews (Opus and Astra) accepted it |
| - with fixes; the fourteenth found a P2 in the intent's lifecycle (a |
| - resolution during a reconciliation), fixed in `abd1b76e`; the fifteenth |
| - review of that is the one to read before any merge. Readiness is not |
| + tenth to thirteenth and fifteenth independent reviews (Opus and Astra) |
| + accepted it with fixes; the fourteenth found a P2 in the intent's |
| + lifecycle (a resolution during a reconciliation), fixed in `abd1b76e`; |
| + the last exception to that lifecycle is closed in `3527a066` and the |
| + sixteenth review of it is the one to read before any merge. Readiness is not |
| approval-only: the branch merges when a round ends with both reviewers |
| accepting and nothing left to fix, and the metered model needs the code |
| listed below built first. The readiness checklist (`READINESS.md`) names |
diff --git a/implementation/carloku-paid-launch/READINESS.md b/implementation/carloku-paid-launch/READINESS.md| index 164466df3..0811e48bf 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` | `abd1b76e` (the fourteenth review's findings, with reviews ten to fourteen's reports) | passed on every code tip through `9574a798` (06:25Z, `gate-currency-9574a798.txt`, exit 0, three cross builds, clean tree); `abd1b76e`: started 06:50Z (`gate-currency-abd1b76e.txt`); the console package passed in full on the same tree before the commit. Void or superseded logs, not evidence: `gate-currency-a9304f16.txt`, `gate-currency-f269365a-VOID-dirty-tree.txt`, `gate-currency-25487506-ended-on-28dc2629-reports-added-during-run.txt` | passed on every pushed tip through `9574a798`; `abd1b76e` pending | Rounds 1 to 9, each Opus accept with fixes and Astra reject. Rounds 10 to 13: both accept with fixes, P3s. **Round 14 (at `9574a798`): Opus accept with fixes, Astra reject on a P2 that was not wording**: the record of a first purchase and the retirement of its intent were two transactions under no common lock, so a reconciliation paused on the provider read while the operator resolved the review recorded the purchase the operator had just retired. Fixed in `abd1b76e`: the record consumes the exact standing intent in its own transaction and records nothing when it is gone; the same lifecycle on every path (an intent under an open review is never retired by an expiry; a retired intent's completion and subscription events are settled, never retried; a refusal whose session read was answered with another files nothing), each with a test that fails without it and six killed mutants (dispositions "Review fourteen"). Round 15 at `abd1b76e`: running | integrated end to end; not merged; the merge waits on round 15 and CI on the tip | |
| +| `feat/carloku-multi-currency-20261001` | `3527a066` (the fifteenth review's findings, with reviews ten to fifteen's reports) | passed on every code tip through `abd1b76e` (06:54Z, `gate-currency-abd1b76e.txt`, exit 0, three cross builds, clean tree); `3527a066`: started 07:49Z (`gate-currency-3527a066.txt`); the console package passed in full on the same tree before the commit. Void or superseded logs, not evidence: `gate-currency-a9304f16.txt`, `gate-currency-f269365a-VOID-dirty-tree.txt`, `gate-currency-25487506-ended-on-28dc2629-reports-added-during-run.txt` | passed on every pushed tip through `abd1b76e`; `3527a066` pending | Rounds 1 to 9: Opus accept with fixes, Astra reject. Rounds 10 to 13: both accept with fixes (P3s). Round 14: Astra reject on a P2 (a reconciliation paused on the provider read while the operator resolved the review recorded the retired purchase), fixed in `abd1b76e` (the record consumes its exact intent in its own transaction). **Round 15 (at `abd1b76e`): both accept with fixes**; the one exception left to the lifecycle invariant (a purchase corrected at the provider recorded under its open review) is closed in `3527a066` by the ruling: nothing records on an intent under an open review, and the operator's resolution either retires the intent or keeps it for the corrected purchase to record (`outcome`); a retired intent's events settle whatever intent stands. Each fix has a test that fails without it and a killed mutant (dispositions "Review fifteen"). Round 16 at `3527a066`: running. The findings since round ten were not minor: each was a real gap in the lifecycle of an intent under review | integrated end to end; not merged; the merge waits on a round ending with both accepting and nothing left to fix, and CI on the tip | |
| | `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` | `90032b61` (thirteenth build, with reviews eight to twelve's reports) | passed on every code tip through `90032b61` (06:36Z, `gate-replicator-90032b61.txt`, exit 0, three cross builds); the ops package passes under `/tmp`, `~/.cache`, `umask 077` and the race detector | passed on every pushed tip through `90032b61` | 4 to 7: each Opus accept with fixes, Astra reject; 8: both reject on one P1 the eighth build made (fixed in the ninth); 9 to 13: Opus accept with fixes, Astra reject, each round finding the previous build's own addition wanting and the deep items unchanged; 13 at `90032b61`: the link entry's encoding not yet injective (a file name can read as an accepted link entry), the one-inode rule not reaching the listing-time duplicate check, a non-atomic two-step read of a link; the fourteenth build is in hand. Each build's dispositions section lists its killed mutants. The deep items stay open and are listed there: litestream's own opens by path (every reopen), protected endpoints under tenant-replaceable ancestry, a delayed admitted request past the margin, requests across a crash or restart, the header open through a swapped ancestor (a walk by directory descriptor, required before wiring), a tenant sharing the platform's uid, root-run units and a route naming another user's coherent tree (approval H), hibernating aliases and claims on skipped files, whether one tenant's unaccepted links refuse the whole box (a decision before wiring), one tenant's deletion holding every account's days once (a stated cost). None of these is minor: the branch cannot be wired until they are closed or decided | not merged; unwired side work gated on approval H | |
| +| `feat/carloku-metered-replicator-20261001` | `03b19014` (fifteenth build, with reviews eight to fourteen's reports) | passed on every code tip through `ec55b639` (07:01Z, `gate-replicator-ec55b639.txt`, exit 0, three cross builds); `03b19014`: started 07:52Z (`gate-replicator-03b19014.txt`); the ops package passes under `/tmp`, `~/.cache`, `umask 077` and the race detector | passed on every pushed tip through `ec55b639`; `03b19014` pending | 4 to 7: each Opus accept with fixes, Astra reject; 8: both reject on one P1 the eighth build made (fixed in the ninth); 9 to 14: Opus accept with fixes, Astra reject, each round finding the previous build's own addition wanting (14 at `ec55b639`: the inventory's rendering, the drift key, wrote names raw; a second read of a link did not close a re-point-and-restore; the Accept test's case no longer told as-written from cleaned; all three in the fifteenth build); 15 at `03b19014`: running. Each build's dispositions section lists its killed mutants. The deep items stay open and are listed there: litestream's own opens by path (every reopen), protected endpoints under tenant-replaceable ancestry, a delayed admitted request past the margin, requests across a crash or restart, the header open through a swapped ancestor (a walk by directory descriptor, required before wiring), a tenant sharing the platform's uid, root-run units and a route naming another user's coherent tree (approval H), hibernating aliases and claims on skipped files, required coverage that can vanish without an entry, whether one tenant's unaccepted links refuse the whole box (a decision before wiring), one tenant's deletion holding every account's days once (a stated cost). None of these is minor: the branch cannot be wired until they are closed or decided | 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) | this commit: documents only on top of `3d47602b`; last code change the merge of the observe-routes fix (`47c97fa6`) | passed 03:06Z on `b953fae4` (`gate-launch-b953fae4.txt`, exit 0, three cross builds); every commit since is documents | passed on `3d47602b` | 17 rounds, no whole-branch pass | the integration target; first accepted side branch merged | |
| -| site `feat/paid-pricing-20260916` (GitHub) | `f291a9e` (`bands.p3` replaced by the approved explanation at `e091e3f`; every priced slot, inclusion band and figure token pinned exactly after reviews twelve to fourteen) | `node --test test/*.test.mjs`: 18 pass (06:45Z) | n/a | read-only by the currency reviews (section K); rounds four, five, ten, twelve, thirteen and fourteen's site findings fixed | preview served at `http://100.119.180.57:38009` from the tree (rebuilt with the `bands.p3` change) | |
| +| site `feat/paid-pricing-20260916` (GitHub) | `a7283e7` (`bands.p3` replaced by the approved explanation at `e091e3f`; every priced slot, inclusion band and figure token pinned exactly after reviews twelve to fifteen; the token check in `hack/token.mjs` with its counterexamples) | `node --test test/*.test.mjs`: 19 pass (07:45Z) | n/a | read-only by the currency reviews (section K); rounds four, five, ten, twelve to fifteen's site findings fixed | preview served at `http://100.119.180.57:38009` from the tree (rebuilt with the `bands.p3` change) | |
| ## The flow, behaviour the tests establish (2026-10-02) |
| -These are what the automated tests assert on `abd1b76e`, against fakes of Keymail and Stripe; none of it is proven against the real provider. Reviews ten to thirteen accepted the code with fixes; review fourteen found a P2 in the intent's lifecycle (fixed in `abd1b76e`, see the row above) and the fifteenth is reading the fix. The findings have not been minor: each round since ten has found a real gap in the lifecycle of an intent under review, and the branch is not ready to merge until a round ends with both reviewers accepting and nothing left to fix. Tests: (`internal/console`: `TestBillingFormPostsWhatItShows`, |
| +These are what the automated tests assert on `3527a066`, against fakes of Keymail and Stripe; none of it is proven against the real provider. Reviews ten to thirteen and fifteen accepted the code with fixes; review fourteen found a P2 in the intent's lifecycle (fixed in `abd1b76e`); the last exception to that lifecycle is closed in `3527a066` and the sixteenth review is reading it. The findings have not been minor: each round since ten has found a real gap in the lifecycle of an intent under review, and the branch is not ready to merge until a round ends with both reviewers accepting and nothing left to fix. Tests: (`internal/console`: `TestBillingFormPostsWhatItShows`, |
| `TestBillingPageCurrencyControls`, `TestPricingLinkSurvivesSignIn`, |
| `TestCurrencySuggestionCookie`, `TestCountrySuggestionCookie`, |
| `TestBillingInclusionsFollowTheQuotedBand`, |
| @@ -69,7 +69,7 @@ reconcile, calculation, invoice and recovery tests in |
| session expired first; an expiry's answer must name the account before |
| anything is retired; a retired intent's later events are settled, not |
| retried. They hold at `9574a798` by the tests named. |
| -- Demo at `http://100.119.180.57:41881`: rebuilt 07:5x from `abd1b76e` |
| +- Demo at `http://100.119.180.57:41881`: rebuilt 08:5x from `3527a066` |
| (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 |