Skip to content

PAY-003A11: Persist Checkout paidAt from admitted Event evidence - #587

Merged
daliu merged 1 commit into
mainfrom
codex/issue-586-checkout-paid-at
Aug 2, 2026
Merged

daliu merged 1 commit into
mainfrom
codex/issue-586-checkout-paid-at

Conversation

@daliu

@daliu daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

Outcome

Checkout payment confirmations now store the already admitted Stripe Event time when they must fill a missing paidAt; they no longer describe webhook receipt time as financial evidence.

Scope

  • Issue: Closes PAY-003A11 — Persist Checkout paidAt from admitted Event evidence #586; atomic child of PAY-003 — Build idempotent asynchronous Stripe event processing #106.
  • What changed: replaced exactly three Checkout-success missing-paidAt fallbacks with Timestamp.fromMillis(event.created * 1000); added one 22-test A11 matrix; added one source-only A11 design section.
  • What did not change: Event admission, target/ownership/provider binding, money validation, status transitions, review flags/outcomes, existing paidAt, replay/no-repair behavior, operational clocks, schema, Rules, indexes, packages, workflows, APIs, migration/backfill, provider configuration, production data, payment/refund/dispute actions, or live behavior.

Officer handoff

  • Officer impact: None — this is a server-only distinction between admitted provider evidence time and operational receipt time. It adds no officer screen, task, field, permission, approval, or recovery action.
  • Officer documentation: None — no officer-facing flow changes. The engineering handoff is the new source-only, NOT LIVE section in STRIPE_COMMERCE_DESIGN.md.
  • Approving role: platform owner plus payment reviewer.
  • Preview or redacted screenshot: None — no visual or officer-visible surface changed.
  • Screenshot checked at: Not applicable (2026-08-01 America/Los_Angeles).
  • Plain-language undo plan: use one small reviewed revert or safe roll-forward for these three substitutions, the named tests, and the named design section. Do not edit a provider object, Event ledger, order, registration, or payment field by hand.
  • Deployment evidence: source and synthetic checks only. No Firebase or Stripe deployment/configuration/action occurred.

Proof by surface

  • Source changed: yes — reviewed head 3f93a9af6eeb1c4b1965fbb2ed99265ebb0444e5, tree 65ce5004636699a0b7f56ee1a787bcf9107fcdc1, patch SHA-256 9c476f07b195a1111a48891ef0e0ce93eb703c7e776d2664b089b8e8ea98afb4.
  • Tests passed: yes — trustworthy RED, A11 22/22, webhook 603/603, Functions 7,065 plus 64 expected skips, frontend 951/951, safety 86/86, SPA 11/11, Rules 418/418, commerce emulator 63/63, lint/YAML/build green.
  • Code merged: not yet.
  • Website published: no; no website source changed.
  • Netlify intended commit verified: no / not relevant to this source-only backend change.
  • runmprc.com verified: no; it was not changed or checked.
  • Firebase deployed: no.
  • Outside provider configured: no.
  • Outside provider verified: no.
  • Production data changed: no.
  • Payment/refund/dispute activity: none.
  • Production behavior verified: no.

Trustworthy RED

On exact base 1c85ec08c274ad9077118d4daf3a6ac9dad118bd, only functions/stripeWebhook.test.js changed (binary diff SHA-256 1e0ad263309df826acec22c11c1b78daf952aba47d903d44ffa5a7fe26a6a3da). Registration and order both retained payment_confirmed, but stored mocked receipt ticks 1800000000001 / 1800000000006 instead of the distinct admitted Event milliseconds 1700000000000.

Verification

  • PAY-003A11 focused: 22/22.
  • Complete webhook file: 603/603.
  • Functions lint: passed.
  • Complete Functions Jest: 7,065 passed; 64 expected skips.
  • Frontend Jest: 951/951.
  • Protected workflow, Firebase verifier, artifact, and dependency safety: 86/86.
  • SPA safety: 11/11.
  • Frontend lint baseline: 118 files; exact reviewed baseline.
  • Workflow YAML parses: passed.
  • Diagnostic production build without sitemap regeneration: passed.
  • Demo Rules emulator: 418/418.
  • Demo commerce command-journal emulator: 63/63.
  • Dependency audit findings unchanged: root full 59, root production 4, Functions 8; no forced upgrade.

Review

  • Self-review: exact three-file diff; no authorization/App Check change, logging expansion, PII/secret exposure, impossible state, schema/migration, or production fallback.
  • Independent security/runtime review: GO.
  • Independent compatibility/test review: GO.
  • Independent documentation/backup-officer review: GO.
  • No independent finding remains.

Safety review

  • No secrets, recovery codes, private member data, or payment data are included.
  • Planned behavior is marked SOURCE ONLY, NOT LIVE.
  • Skipped checks and deployments are reported as incomplete, not green/live.
  • The named state-flow diagram and text alternative document the evidence projection; topology/data movement did not change.
  • No backup-officer action changed; specialist-only review, undo, and escalation are explicit.

Compatibility and residuals

No schema, migration, backfill, dependency, API, or configuration change. Existing processed Events and paidAt values remain authoritative. Historical receipt-clock values are not repaired. #106 retains Session-created chronology, freshness/skew, already-paid missing-time repair, cancellation policy, provider/API-version proof, retrieval/history repair, PAY-003B/C, reconciliation, alerts, protected release, and live verification.

@netlify

netlify Bot commented Aug 2, 2026 •

Copy link
Copy Markdown

✅ Deploy Preview for luminous-fox-7c393f ready!

Name Link
🔨 Latest commit 3f93a9a
🔍 Latest deploy log https://app.netlify.com/projects/luminous-fox-7c393f/deploys/6a6e98c893f48300081cfbd2
😎 Deploy Preview https://deploy-preview-587--luminous-fox-7c393f.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.

To edit notification comments on pull requests, go to your Netlify project configuration.

@daliu

daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

SELF-REVIEW COMPLETE on exact PR base 1c85ec08c274ad9077118d4daf3a6ac9dad118bd and head 3f93a9af6eeb1c4b1965fbb2ed99265ebb0444e5.

Hosted PR identity is one commit, three files, 485 additions, and 3 deletions. The runtime diff is exactly three right-hand-side substitutions; the other additions are the separately named 22-test matrix and source-only design handoff. The remote branch matches the independently reviewed head/tree/patch identity.

I reviewed authorization/App Check applicability, signed webhook/admission order, target and provider binding, money/status/PaymentIntent predecessors, safe integer/range conversion, replay and transaction retry behavior, existing-time preservation, all branch outcomes, operational clocks, redacted logging, PII/secrets, schema/migration/backfill, production fallback, deployment claims, and officer continuity. No actionable issue remains. Three independent exact-head reviews are also GO.

Merge remains blocked until every hosted CI check is green. The required independent GitHub approval rule is separate from these read-only agent reviews; ordinary merge will be attempted first after all checks pass.

Officer impact: None — no officer-visible or actionable change.

Officer documentation: None — engineering source-only handoff only.

Deployment evidence: source/tests only; not merged, published, Firebase-deployed, provider-configured, applied to production data, or live-verified.

@daliu
daliu merged commit 51723b4 into main Aug 2, 2026
9 checks passed
@daliu
daliu deleted the codex/issue-586-checkout-paid-at branch August 2, 2026 01:12
@daliu

daliu commented Aug 2, 2026

Copy link
Copy Markdown
Contributor Author

FINAL RELEASE AUDIT — #586 is COMPLETE / CLOSED / CLAIM RELEASED.

Exact merge/main: 51723b487ec67bb74620c97e47449ae1319f0daa. Its tree 65ce5004636699a0b7f56ee1a787bcf9107fcdc1 is identical to reviewed head 3f93a9af6eeb1c4b1965fbb2ed99265ebb0444e5. PR CI 30726546061 and exact-main CI 30726642299 passed all five repository jobs.

Full delivery/deployment truth and residuals are recorded in the explicit release marker: #586 (comment)

Officer impact: None — server-only evidence-time projection.

Officer documentation: None — source-only engineering handoff; no officer procedure changed.

Deployment evidence: merged source and synthetic checks only. The preview was non-production, exact-main Netlify failed unpublished, the published site remains #473, and no Firebase/Stripe/provider/data/payment/live action or verification occurred.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PAY-003A11 — Persist Checkout paidAt from admitted Event evidence

1 participant