{"slug":"dw-signup-fulfillment","total":16,"limit":100,"offset":0,"since":null,"commits":[{"hash":"b6f0091","date":"2026-07-28 12:00:20 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-28T12:00:18 (1 files) — theme-backups/","body":""},{"hash":"d3d9b16","date":"2026-07-28 11:33:06 -0700","author":"Steve","subject":"webhook: secret-less re-fetch auth (Steve's choice) — re-fetch customer, use real on-file email, idempotent one-gift-per-customer metafield; selftest green","body":""},{"hash":"4a5a683","date":"2026-07-28 11:30:10 -0700","author":"Steve Abrams","subject":"auto-save: 2026-07-28T11:30:09 (1 files) — lib/shopify.js","body":""},{"hash":"766b6b6","date":"2026-07-28 11:16:09 -0700","author":"Steve","subject":"hosting: live on Kamatera dwsignup.agentabrams.com (pm2 :9862, LE cert, DRY_RUN=1) — port 9856 was taken; sync local to 9862","body":""},{"hash":"f385a17","date":"2026-07-28 10:34:18 -0700","author":"Steve","subject":"retail: FINAL = gift card (Steve, memo §2) — re-wire webhook+admin+selftest to giftcard, shared-code demoted to alternate; preserves trade.js customer-id hardening","body":""},{"hash":"379738e","date":"2026-07-28 10:12:31 -0700","author":"Steve Abrams","subject":"harden per contrarian gate: resolve trade customer-id by email + hard-fail instead of __UNKNOWN__ live write (closes memo §5); DEPLOY.md rewritten for wired path B; selftest banner + boot log fixed (no pass echo) — still DRY_RUN","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"d0059b8","date":"2026-07-28 10:04:50 -0700","author":"Steve Abrams","subject":"retail: rewire webhook to sample-locked shared function code (DTD 5/5 path B) — matches approved memo §2, never discounts a roll; selftest now exercises the wired path + fail-loud unset-code guard (still DRY_RUN)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"80fab35","date":"2026-07-28 09:57:26 -0700","author":"Steve Abrams","subject":"go-live prep: CORS for cross-origin /trade/apply + .deploy.conf scaffold (still DRY_RUN)","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>"},{"hash":"26d014b","date":"2026-07-28 09:48:39 -0700","author":"Steve","subject":"theme proposal: returning sign-in front-and-center (email code + Google, no password), remove Forgot-password","body":""},{"hash":"38fc598","date":"2026-07-28 09:43:51 -0700","author":"Steve","subject":"5x: REPORT.md — two consecutive clean sweeps; admin Approve click-through verified","body":""},{"hash":"73e3ebf","date":"2026-07-28 09:42:32 -0700","author":"Steve","subject":"5x: add open root status page + favicon 204 (clean base URL, no phantom JS error)","body":""},{"hash":"a8ed621","date":"2026-07-28 09:34:02 -0700","author":"Steve","subject":"retail: wire automatic gift-card (unique code emailed per signup) as default; selftest green","body":""},{"hash":"471c945","date":"2026-07-28 09:19:36 -0700","author":"Steve","subject":"retail: shared admin master-code model (function discounts are app-scoped; cross-app minting not possible) — service emails RETAIL_SHARED_CODE","body":""},{"hash":"c323e03","date":"2026-07-28 08:18:15 -0700","author":"Steve Abrams","subject":"retail: function-backed unique sample codes (safe sample-lock) + theme modal proposal + house-account","body":"- lib/retail-code.js: per-customer DWSAMP-XXXXXXXX unique code via discountCodeAppCreate\n  referencing the deployed DW Free Samples Discount Function (samples-only, first 3 free,\n  usageLimit 1, appliesOncePerCustomer). Avoids the roll-zeroing money leak of a gift\n  card / plain collection code.\n- lib/shopify.js: add DRY_RUN-safe graphql() helper (mutations short-circuit + log WOULD-call).\n- webhook customers/create now issues the function-code path; giftcard + giftcode-discount\n  kept as clearly-labeled NOT-WIRED alternates.\n- config + .env.example: DISCOUNT_FUNCTION_ID (required at go-live; simulate+WARN in DRY_RUN).\n- selftest: asserts discountCodeAppCreate WOULD-call carries functionId + usageLimit 1 +\n  unique code + emails the code; exits 0 in DRY_RUN.\n- DEPLOY.md: one-time function deploy step; no auto-apply discount; renumbered runbook.\n- docs/theme-modal-proposal.md: BEFORE/AFTER for retail copy, moderated Apply-for-Trade,\n  and Continue-with-Google (proposal only, not deployed)."},{"hash":"d786b75","date":"2026-07-28 07:52:15 -0700","author":"Steve","subject":"rep assignment: fixed DW House Account (not round-robin) per Steve","body":""},{"hash":"bc2558d","date":"2026-07-28 07:47:32 -0700","author":"Steve Abrams","subject":"initial scaffold: DW signup fulfillment (retail gift-card + moderated trade approval + rep round-robin), dry-run","body":"Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n"}]}