CluPilotCloud/docs/superpowers/specs
nexxo af9d60469e Write down why a half-finished sync blocked itself for a day
A run on 2026-07-29 23:11 created price_1TygdEC7u8NpJ8pOt3nsoyYw at Stripe and
died before the row was written. 9da1358 then added the tax_treatment metadata
field, so the next sweep sent the same idempotency key with different parameters
and Stripe refused it — for twenty-four hours, and not only for the sweep:
AddonPrices::ensure() also runs inside a customer's module booking.

Two defects, one spec: nothing asks Stripe what it already has, and the key
covers less than the call sends. The spec settles what identity means here
(product, amount, currency, interval — never metadata, which Stripe lets you
edit) and where the key's fingerprint may go (the catalogue calls, never a
refund, where a duplicate costs the customer their money twice).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-07-30 10:06:44 +02:00
..
2026-07-25-host-onboarding-design.md fix(engine): fail on unresolvable pipeline step; make worker the WG hub 2026-07-25 10:53:40 +02:00
2026-07-27-mailboxes-design.md Design mailboxes as records, not as one more secret 2026-07-27 20:51:03 +02:00
2026-07-27-operator-identity-design.md Delete the users row once the operator has moved out of it 2026-07-27 20:44:56 +02:00
2026-07-30-stripe-price-adoption-design.md Write down why a half-finished sync blocked itself for a day 2026-07-30 10:06:44 +02:00