carlos / platform Public

docs: lock paid launch metering scope

Paul Campbell pushed by claude agent, operated by paul@keymail.dev aed428159b40ce51f389c24656ef8de59de5dca2 parent e41f7b2
3 files changed, +13 −7
  • .claude/HANDOFF.md +2 −2
  • implementation/carloku-paid-launch/AGENT_HANDOFF.md +4 −4
  • implementation/carloku-paid-launch/requirements-audit.json +7 −1

CI passed — run details

diff --git a/.claude/HANDOFF.md b/.claude/HANDOFF.md
index 62ceafb31..1f0e66122 100644
--- a/.claude/HANDOFF.md
+++ b/.claude/HANDOFF.md
@@ -7,11 +7,11 @@
Get Carloku’s paid plans live with Stripe Tax and safe usage billing.
**STATUS:**
-The PaaS tax mapping is committed at `9d500057` and Amadan CI passed. All three copy reviews are approved, but the approved text is not yet applied. Billing remains off; the pricing page, console GET billing page, Stripe catalog, portal, webhook and restricted runtime key are still absent. Metering and enforcement gates also remain incomplete.
+The PaaS tax mapping is committed at `9d500057` and Amadan CI passed. All three copy reviews are approved, but the approved text is not yet applied. Billing remains off; the pricing page, console GET billing page, Stripe catalog, portal, webhook and restricted runtime key are still absent. Paul requires the complete metered model at launch. Object-storage overages must count only transfer AWS charges Team Tito for. Metering and enforcement gates remain incomplete.
**NEEDED:**
- Create an `rk_live` Stripe restricted key for the console; the current 1Password item contains only the full provisioning key.
-- Choose whether object-storage transfer means all customer-served bytes or only AWS-chargeable external transfer. I recommend all verified customer-served bytes because it is observable and customer-favouring when evidence is missing.
+- Build and verify an AWS billing-grade object-storage transfer collector with durable customer attribution; access-log delivered bytes alone are insufficient for charging.
**RECOMMENDED:**
- Apply the approved copy by building the website pricing page and the missing console GET billing page first.
diff --git a/implementation/carloku-paid-launch/AGENT_HANDOFF.md b/implementation/carloku-paid-launch/AGENT_HANDOFF.md
index b0f556eb6..1512984b7 100644
--- a/implementation/carloku-paid-launch/AGENT_HANDOFF.md
+++ b/implementation/carloku-paid-launch/AGENT_HANDOFF.md
@@ -6,7 +6,7 @@ This file is context and instructions for the next coding agent. The branch is a
## Objective and current boundary
-Paul asked to get carloku.com paid pricing live by morning and asked whether Stripe Tax can handle tax. Yes for calculation and collection. The VAT/OSS registrations are active, and Paul approved Stripe's PaaS classification and the plan-specific codes below. He then explicitly requested this branch handoff so another agent can pick up the work.
+Paul asked to get carloku.com paid pricing live by morning and asked whether Stripe Tax can handle tax. Yes for calculation and collection. The VAT/OSS registrations are active, and Paul approved Stripe's PaaS classification and the plan-specific codes below. He requires the complete metered model at launch; annual subscriptions with temporarily waived overages are not an acceptable launch scope. Object-storage overages count only transfer that AWS charges Team Tito for, so delivered-byte access logs alone are not billing authority. He then explicitly requested this branch handoff so another agent can pick up the work.
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.
@@ -73,8 +73,8 @@ make test
- 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.
+- Object-store transfer contract is settled: count only transfer that AWS charges Team Tito for. AWS access logs show delivered bytes but cannot reliably identify every free-transfer case, so they are not sufficient billing authority by themselves. The collector needs billing-grade AWS evidence, durable customer attribution and a hold when that evidence is incomplete.
+- Launch scope is settled: the complete metered model is required. Do not launch annual subscriptions with overages waived or defer any meter as a post-launch follow-up.
## Infrastructure and artifact cautions
@@ -88,6 +88,6 @@ A scratch SQLite experiment was also found replacing local root main.go. It was
1. Read Amadan CI for the final durability-fix commit and inspect the complete branch diff as WIP. The local gate is green, but that does not make the launch ready.
2. Review host wiring: `bindingFailed` is set on unmetered fallbacks but currently only the permanently false attestation prevents billing. Finish per-route move/checkpoint tests and client inventory, source completeness folding, scoped external-client exclusion, crash/late-callback/restart proof, bounded ledger retention and real-disk latency measurement. Keep unattested usage unbillable until proved.
-3. Implement P5 collector with durable deduplication, immutable historical bucket ownership and a settled transfer contract. Prepare exact scoped logging activation before seeking production approval.
+3. Implement P5 collector with durable deduplication, immutable historical bucket ownership and AWS billing-grade classification so only transfer AWS charges Team Tito for reaches overage billing. Prepare exact scoped logging activation before seeking production approval.
4. Complete partial-month billing, quantity/proration collection, operator review/house doors, Free enrollment/caps/idle/flush-only, dormancy warnings/archive and revenue-pool accounting required by the spec. Use the requirements audit rather than treating these as optional follow-ups.
5. After copy approvals, provision and verify the Stripe catalog with the approved per-plan PaaS codes, run the real sandbox purchase/webhook/portal flow, obtain independent reviews, pass Amadan CI and release gates, then land/deploy through the required reviewed path and verify live behaviour. No main merge or deployment is part of this handoff.
diff --git a/implementation/carloku-paid-launch/requirements-audit.json b/implementation/carloku-paid-launch/requirements-audit.json
index bc8d83487..fc6deeb35 100644
--- a/implementation/carloku-paid-launch/requirements-audit.json
+++ b/implementation/carloku-paid-launch/requirements-audit.json
@@ -28,7 +28,7 @@
{
"step": 4,
"requirement": "object-store transfer",
- "observed_status": "parser exists; collector, historical ownership, commercial traffic contract and logging activation incomplete",
+ "observed_status": "commercial contract settled: bill only transfer AWS charges Team Tito for; parser exists, but billing-grade classification, collector, historical ownership and logging activation remain incomplete; delivered-byte access logs alone are insufficient",
"inspection_anchor": "internal/usage/accesslog.go",
"complete": false
},
@@ -131,6 +131,12 @@
"complete": false
}
],
+ "launch_scope": {
+ "complete_metered_model_required": true,
+ "annual_only_with_waived_overages_allowed": false,
+ "object_storage_transfer_basis": "bytes for transfer that AWS charges Team Tito for",
+ "incomplete_attribution_policy": "hold billing"
+ },
"remaining_release_gates": [
"current-tree tests and formatting",
"cross-platform builds",