Skip to content

feat: checkout + order confirmation + payment stub (ADR 0026) - #2

Merged
DanMat merged 1 commit into
mainfrom
feat/checkout
Aug 31, 2026
Merged

feat: checkout + order confirmation + payment stub (ADR 0026)#2
DanMat merged 1 commit into
mainfrom
feat/checkout

Conversation

@DanMat

@DanMat DanMat commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

PR④ of Commerce checkout (Foodmart Slice 4). Private /checkout + /order/{ref} sections + the /ext/shop/checkout action.

Always CSRF-verified; places via CartPort.checkout (server-side prices, atomic reservation); the confirmation is gated to the buyer's order cookie (no ref-guessing IDOR). Payment is a stub. Per-IP flood-limit tracked as a follow-up (compensated by CSRF + cart-token + oversell guard). See ADR 0026. PHPStan max · 16 tests · cs-fixer clean.

🤖 Generated with Claude Code

PR④ of Commerce checkout. Themed private /checkout (order summary +
customer form) and /order/{ref} (confirmation) sections, plus the POST
/ext/shop/checkout action: always CSRF-verified (a cart pre-exists at
checkout), places the cart via CartPort.checkout (server-side prices,
atomic stock reservation), then redirects (POST-redirect-GET) to the
confirmation with a short-lived order cookie. The confirmation is GATED
to that cookie — an order ref can't be guessed to read another buyer's
confirmation (no IDOR). Payment is a stub (order placed 'pending').

Tracked follow-up: a dedicated per-IP checkout flood-limit — deferred
given the compensating controls (CSRF + cart-token-required + the
oversell-guarded atomic reserve). PHPStan max, 16 tests, cs-fixer green.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@DanMat
DanMat merged commit c01931e into main Aug 31, 2026
2 checks passed
@DanMat
DanMat deleted the feat/checkout branch August 31, 2026 03:21
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.

1 participant