carlos / platform Public

Record verified Stripe live-account readiness

Paul Campbell pushed by claude agent, operated by paul@keymail.dev 3c211636fc977ca586ca7c66d65f8bfa0c215521 parent c0d60af
3 files changed, +96 −9
  • implementation/carloku-paid-launch/AGENT_HANDOFF.md +15 −7
  • implementation/carloku-paid-launch/requirements-audit.json +2 −2
  • implementation/carloku-paid-launch/stripe-live-readiness.json +79 −0

CI passed — run details

diff --git a/implementation/carloku-paid-launch/AGENT_HANDOFF.md b/implementation/carloku-paid-launch/AGENT_HANDOFF.md
index b5e01c53e..ffde16ece 100644
--- a/implementation/carloku-paid-launch/AGENT_HANDOFF.md
+++ b/implementation/carloku-paid-launch/AGENT_HANDOFF.md
@@ -1,6 +1,6 @@
# Agent pickup instructions — Carloku paid launch
-CURRENT GATE: local build, vet and `make test` GREEN after fixing the intermittent durability snapshot failure and sustained-drain fallback. Amadan CI passed on the preceding commit; the final reviewed change needs its own CI run. This remains a checkpoint of unfinished work.
+CURRENT GATE: local build, vet and `make test` GREEN after fixing the intermittent durability snapshot failure and sustained-drain fallback. Amadan CI passed on final durability commit `c0d60af8`. This remains a checkpoint of unfinished work.
This file is context and instructions for the next coding agent. The branch is a work-in-progress checkpoint, not a release candidate. Do not merge, deploy, enable billing, or infer that the overnight launch goal was achieved.
@@ -8,7 +8,7 @@ This file is context and instructions for the next coding agent. The branch is a
Paul asked to get carloku.com paid pricing live by morning and asked whether Stripe Tax can handle tax. Yes for calculation/collection; actual registrations and the approved product tax code still need confirmation. He then explicitly requested this branch handoff so another agent can pick up the work.
-Billing remains OFF. No live Stripe requests, charges, catalog mutations, production infrastructure changes, or deployments were made in this session. The platform changes are being checkpointed on `feat/carloku-paid-launch-20260916` at `https://amadan.net/carlos/platform`. Nothing is being merged to main.
+Billing remains OFF. Read-only live Stripe requests verified the account on 2026-09-21; no charges, catalog mutations, production infrastructure changes, or deployments were made. The platform changes are being checkpointed on `feat/carloku-paid-launch-20260916` at `https://amadan.net/carlos/platform`. Nothing is being merged to main.
Read `AGENTS.md` and `docs/superpowers/specs/2026-09-07-carloku-pricing-plans-design.md` before proceeding. `requirements-audit.json` inventories all 18 spec steps and deliberately marks the overall implementation incomplete. `session.md` is the chronological investigation/test log; prefer this handoff for current state where older log entries disagree.
@@ -40,7 +40,7 @@ Read `AGENTS.md` and `docs/superpowers/specs/2026-09-07-carloku-pricing-plans-de
- Quantity/checkout/membership audit tests passed `-race` (49.015s), before the final invoice lock changes. Log: `quantity-complete-root-race.txt`.
- New host ownership, locked-ledger timeout, shutdown/publication and actual fake-HTTP SDK List/Copy/Delete-to-ledger tests passed `-race` (1.551s). Log: `host-durability-sdk-root-race.txt`.
- New activator meter selection plus existing staging-restore tests passed `-race` (1.032s). Log: `activator-metering-root-race.txt`.
-- The prior intermittent failure was real: a snapshot could read SQLite before a background failure drain, then read the latch after that drain cleared it. The fix retries when a committed drain crosses the read and checks the final latch state under the writer mutex, which spans commit and subtraction. A forced-interleaving regression, an arrival-during-read regression, a sustained-drain regression, and the original late-failure test passed repeated `-race` runs. The complete local gate (`go build ./...`, `go vet ./...`, `make test` with JS parity) passed on the final code on 2026-09-18. Amadan CI passed on the previous handoff commit `099586ea`, first fix commit `eea00ee`, and first reviewed amendment `665bcb7`. A single green run did not settle this intermittent bug; CI on the final code is pending.
+- The prior intermittent failure was real: a snapshot could read SQLite before a background failure drain, then read the latch after that drain cleared it. The fix retries when a committed drain crosses the read and checks the final latch state under the writer mutex, which spans commit and subtraction. A forced-interleaving regression, an arrival-during-read regression, a sustained-drain regression, and the original late-failure test passed repeated `-race` runs. The complete local gate (`go build ./...`, `go vet ./...`, `make test` with JS parity) passed on the final code on 2026-09-18. Amadan CI passed on the previous handoff commit `099586ea`, first fix commit `eea00ee`, first reviewed amendment `665bcb7`, and final durability commit `c0d60af8`.
- Opus reviews found and verified three follow-up corrections: arriving failures do not cause retries; after eight crossed drains a ninth snapshot holds a dedicated drain lock so publication gets a stable view; the drainer waits without holding the ordinary recording lock. The ninth-read test proves `Start`/`Finish` still progress and a new failure is counted. Final Opus review found no deadlock or data loss in this diff. Low residual risk: `Close(ctx)` and `Seal` can wait on a fallback read without a context bound, and a long fallback delays drain persistence; this does not block ordinary recording. A reviewer also noted a pre-existing unsynchronized read of `l.state.epoch` in the snapshot; it has not been addressed here.
- CURRENT tree passed all five cross-builds (Darwin arm64/amd64, Linux arm64, Windows amd64/arm64). Log: `handoff-cross.txt`.
- Final whole-branch Fable review and production/authority Opus review remain outstanding. All three Claude agents stopped at the shared usage limit, which reports reset at05:50 Europe/Dublin on2026-09-17 (04:50UTC). No agents remain running. That reset time has now passed; availability has not been rechecked for this handoff. Relevant task briefs/reports are in scratch, especially `durability-host-integration-brief.txt`, `opus-durability-integration-design.txt`, `quantity-history-hardening-brief.txt` and the invoice reports. The older design's arbitrary five-minute late-callback slack is NOT accepted proof.
@@ -57,13 +57,21 @@ make test
`/tmp/k` is a task-owned real directory, mode0700. Do not replace it with a symlink. /tmp had approximately2.9GB free at the last check; cache is on the main disk. Never edit source while a test of that source is running; immutable checkpoint tests may run independently.
+## Stripe live account state (read-only, 2026-09-21)
+
+- 1Password item `Carloku/Stripe Production Keys/Live Key` authenticated successfully against expected merchant `acct_1UD7LXI4Nrr6AEsO`: Ireland, EUR, charges and payouts enabled.
+- The key is a full `sk_live` provisioning key. Production console configuration deliberately requires an `rk_live` restricted key, which does not exist in the inspected item. Never put the full key into console runtime configuration.
+- The live account has zero active products, recurring prices, portal configurations and webhook endpoints.
+- Stripe Tax reports active with an Irish head-office address, but there are zero active tax registrations. The account default is generic tax code `txcd_10000000`; that is not approval to use it for Carloku.
+- `stripe-live-readiness.json` records the exact required 12-price EUR catalog and the remaining mutation gates. No live Stripe object was created or changed.
+- Raw read-only API responses were kept only in task-owned scratch with mode 0600. The 1Password session token must be removed when credential work finishes.
+
## Pending user/external inputs — do not repeatedly ask
-- Stripe authentication for merchant `acct_1UD7LXI4Nrr6AEsO`. The configured Stripe MCP requires authentication; no callable authenticated account or keys are available. Never request keys in chat.
- Actual VAT/OSS registration confirmation and accountant-approved product tax code. Stripe Tax is not itself evidence that registration is complete.
-- Pricing copy review: http://docs-t1.tail5fd3ba.ts.net:40927
-- Billing copy review: http://docs-t1.tail5fd3ba.ts.net:43963
-- Postal/location copy review: http://docs-t1.tail5fd3ba.ts.net:37419
+- Pricing copy review: http://docs-t1.tail5fd3ba.ts.net:37461
+- Billing copy review: http://docs-t1.tail5fd3ba.ts.net:34185
+- Postal/location copy review: http://docs-t1.tail5fd3ba.ts.net:46235
- Review data lives in `writing/{pricing-launch,billing-launch,billing-location}` in scratch. All three servers last responded HTTP200; no result.json was present. No pricing page or billing UI copy has been applied. Apply submitted source strings verbatim; use the writing/copy-review skills for new user-facing copy.
- Object-store transfer contract question is pending: all bytes served directly to customers/apps (including AWS), excluding Carloku's traffic, or only AWS-chargeable external transfer? AWS IP-feed complement is not proof of chargeable traffic; it omits BYOIP/some services.
- Optional annual-only launch/waived-overage question was asked and unanswered. No waiver or reduced launch scope is authorized by silence.
diff --git a/implementation/carloku-paid-launch/requirements-audit.json b/implementation/carloku-paid-launch/requirements-audit.json
index 1811033cb..9df23d071 100644
--- a/implementation/carloku-paid-launch/requirements-audit.json
+++ b/implementation/carloku-paid-launch/requirements-audit.json
@@ -63,7 +63,7 @@
{
"step": 9,
"requirement": "Stripe catalog",
- "observed_status": "not provisioned or verified; account authentication required",
+ "observed_status": "live account authenticated read-only; account has no active products or recurring prices; exact 12-price plan recorded in stripe-live-readiness.json; provisioning blocked on registrations, approved tax code and approved display names",
"inspection_anchor": "external Stripe account",
"complete": false
},
@@ -126,7 +126,7 @@
{
"step": 18,
"requirement": "restricted Stripe key and webhook config",
- "observed_status": "code reads config; deployed restricted secrets and tax preflight unverified",
+ "observed_status": "live sk_live provisioning key found in 1Password and account identity verified; runtime requires a separate rk_live key; webhook endpoint, signing secret and deployed configuration remain absent",
"inspection_anchor": "cmd/console/billing.go; cmd/console/main.go; internal/console/billingservice.go",
"complete": false
}
diff --git a/implementation/carloku-paid-launch/stripe-live-readiness.json b/implementation/carloku-paid-launch/stripe-live-readiness.json
new file mode 100644
index 000000000..8f4666fdd
--- /dev/null
+++ b/implementation/carloku-paid-launch/stripe-live-readiness.json
@@ -0,0 +1,79 @@
+{
+ "checked_at": "2026-09-21T14:56:00Z",
+ "account": {
+ "id": "acct_1UD7LXI4Nrr6AEsO",
+ "country": "IE",
+ "default_currency": "eur",
+ "charges_enabled": true,
+ "payouts_enabled": true
+ },
+ "credential": {
+ "source": "1Password/Carloku/Stripe Production Keys/Live Key",
+ "kind": "sk_live",
+ "runtime_eligible": false,
+ "runtime_requirement": "rk_live"
+ },
+ "observed_live_state": {
+ "active_products": 0,
+ "active_recurring_prices": 0,
+ "active_portal_configurations": 0,
+ "webhook_endpoints": 0,
+ "stripe_tax_status": "active",
+ "active_tax_registrations": 0,
+ "default_tax_code": "txcd_10000000"
+ },
+ "required_catalog": {
+ "terms_version": "2026-09-07-v1",
+ "currency": "eur",
+ "tax_behavior": "exclusive",
+ "recurring_interval": "year",
+ "usage_type": "licensed",
+ "products": [
+ {
+ "plan": "personal",
+ "display_name": "pending approved copy",
+ "prices": {
+ "A": 2400,
+ "B": 1800,
+ "C": 1200,
+ "D": 840
+ }
+ },
+ {
+ "plan": "community",
+ "display_name": "pending approved copy",
+ "prices": {
+ "A": 500,
+ "B": 375,
+ "C": 250,
+ "D": 175
+ }
+ },
+ {
+ "plan": "business",
+ "display_name": "pending approved copy",
+ "prices": {
+ "A": 5000,
+ "B": 3750,
+ "C": 2500,
+ "D": 1750
+ }
+ }
+ ],
+ "price_metadata": [
+ "terms_version",
+ "plan",
+ "band"
+ ]
+ },
+ "remaining_before_live_mutation": [
+ "Confirm Irish domestic VAT and Union OSS registrations, then add the corresponding active Stripe Tax registrations.",
+ "Obtain the accountant-approved Stripe product tax code; do not use the current generic default by assumption.",
+ "Approve customer-facing product names and billing copy.",
+ "Create and verify a restricted live runtime key with only the API permissions the console needs.",
+ "Choose the deployed webhook URL and create the endpoint and signing secret.",
+ "Create and verify the locked customer portal configuration.",
+ "Provision the three products and twelve immutable prices, then record their IDs in CONSOLE_STRIPE_PRICES."
+ ],
+ "mutations_performed": false
+}