← back to Dw Signup Fulfillment
TK-10836: REVERSE the close verdict — Kelly's own checkout shows $24.95 shipping
ec11bce76404553d04f2799e5bf98692fdd8678e · 2026-09-10 07:35:04 -0700 · Steve Abrams
The contrarian gate was right: nobody had checked Kelly's actual cart.
AbandonedCheckout/34015098110003 (2026-08-24, kyounge@umich.edu, Ann Arbor MI):
3 samples, items subtotal $0.00, discount $12.75 already applied, tax $0.00,
TOTAL $24.95 — i.e. $24.95 of pure shipping. Abandoned. A second 7-sample
checkout the same day ($59.90) was also abandoned.
The earlier 'free shipping is available' survey proved the $0 method exists in
general, not that it was offered on her cart. And 3FREE is irrelevant to the
blocker: it discounts ITEMS only, her items were already $0.00, so it cannot
reduce a shipping line. The reply we sent 4x told her the $25 'won't apply'.
Ticket stays blocked, blocker re-pointed. Nothing sent, nothing written.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jeg9TkFJqpiAEtcNva1mUb
Files touched
M verification/tk10836/SUPERSEDED.mdA verification/tk10836/verify-3free-cart-shapes.jsA verification/tk10836/verify-abandonment.jsA verification/tk10836/verify-kelly-checkout-breakdown.js
Diff
commit ec11bce76404553d04f2799e5bf98692fdd8678e
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 10 07:35:04 2026 -0700
TK-10836: REVERSE the close verdict — Kelly's own checkout shows $24.95 shipping
The contrarian gate was right: nobody had checked Kelly's actual cart.
AbandonedCheckout/34015098110003 (2026-08-24, kyounge@umich.edu, Ann Arbor MI):
3 samples, items subtotal $0.00, discount $12.75 already applied, tax $0.00,
TOTAL $24.95 — i.e. $24.95 of pure shipping. Abandoned. A second 7-sample
checkout the same day ($59.90) was also abandoned.
The earlier 'free shipping is available' survey proved the $0 method exists in
general, not that it was offered on her cart. And 3FREE is irrelevant to the
blocker: it discounts ITEMS only, her items were already $0.00, so it cannot
reduce a shipping line. The reply we sent 4x told her the $25 'won't apply'.
Ticket stays blocked, blocker re-pointed. Nothing sent, nothing written.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jeg9TkFJqpiAEtcNva1mUb
---
verification/tk10836/SUPERSEDED.md | 68 +++++++++++++++++++++
verification/tk10836/verify-3free-cart-shapes.js | 69 ++++++++++++++++++++++
verification/tk10836/verify-abandonment.js | 36 +++++++++++
.../tk10836/verify-kelly-checkout-breakdown.js | 42 +++++++++++++
4 files changed, 215 insertions(+)
diff --git a/verification/tk10836/SUPERSEDED.md b/verification/tk10836/SUPERSEDED.md
index 7aeaf79..436e6b6 100644
--- a/verification/tk10836/SUPERSEDED.md
+++ b/verification/tk10836/SUPERSEDED.md
@@ -210,3 +210,71 @@ forced rate.
**Gate outcome: hole #1 overturned on evidence. CLOSE verdict stands.**
Repro: `node verification/tk10836/verify-3free-shipping-crosstab.js` (read-only).
+
+---
+
+# ⛔ VERDICT REVERSED — 2026-09-10. DO NOT CLOSE THIS TICKET.
+
+**Everything above this line concluded "close as superseded — Kelly was honored."
+That conclusion is WRONG and is retained only as a record of the reasoning.**
+
+The contrarian gate's core objection was correct: nobody had checked Kelly's
+*actual* cart. That record exists, it is hers, and it contradicts the promise.
+
+## The measurement
+
+`AbandonedCheckout/34015098110003` — 2026-08-24T03:36:31Z — `kyounge@umich.edu`
+— ship-to **Ann Arbor, MI**:
+
+| field | value |
+|---|---|
+| line items | 3 samples — Brushed Finesse Pewter, Shimmer Polar White, Finesse Metallic Rose |
+| items subtotal | **$0.00** |
+| total discount | **$12.75** — the 3 samples were *already* discounted to free |
+| tax | $0.00 |
+| **TOTAL** | **$24.95** |
+| **⇒ implied shipping** (total − items − tax) | **$24.95, pure shipping** |
+| outcome | **abandoned** |
+
+Second, same day: `AbandonedCheckout/34017552728115`, `kcyounge@gmail.com`,
+7 samples, items $29.75 + shipping $30.15 = **$59.90** — also abandoned.
+
+## Why the earlier "the promise holds" evidence was insufficient
+The survey above proved the $0.00 *"Free Shipping (No Tracking)"* method **exists**
+and is commonly chosen (238/328 sample-only orders; MI order #32954). That is
+**availability in general — not proof it was offered on Kelly's cart.** Her own
+checkout is the direct measurement, and it says $24.95.
+
+## The failure mode is not the one that was chased
+Both the 3FREE-suppression theory and the rebuttal to it were beside the point:
+
+- Kelly's sample items were **already $0.00 before any code was applied**.
+- **3FREE discounts ITEMS only** ($15 off `AllDiscountItems`). Applied to a $0.00
+ item subtotal it changes nothing, and it **cannot reduce a $24.95 shipping line.**
+- So handing her code 3FREE — the entire content of the 2026-09-02 reply — does
+ **not** address the thing that actually stopped her.
+
+## The reassurance we sent her was factually wrong
+The 2026-09-02 email (sent **4×**) said:
+
+> "…**sample shipping is on us too**, so you'll pay nothing."
+> "(That **$25** you saw earlier was a shipping estimate — **it won't apply** to
+> these complimentary samples.)"
+
+Her recorded checkout says the $25 **was** the shipping, on a cart whose samples
+were already free. She has **0 orders**, **2 abandoned carts**, and has not
+returned in the 8 days since.
+
+## Corrected status
+- TK-10836's *literal* blocker (`RETAIL_SHARED_CODE` unset) **is** genuinely dead —
+ that path is retired and the approval memo was stamped "Superseded" on 2026-09-03.
+ That much of the analysis above stands.
+- But the ticket's **purpose** — Kelly actually receives 3 free samples — is
+ **not achieved**. Blocker re-pointed, not cleared.
+
+## Not fired (all gated)
+No email to Kelly, no discount change, no shipping-rate change, no Shopify write.
+Decision memo drafted for Steve instead.
+
+Repro: `node verification/tk10836/verify-abandonment.js`,
+`node verification/tk10836/verify-kelly-checkout-breakdown.js` (read-only).
diff --git a/verification/tk10836/verify-3free-cart-shapes.js b/verification/tk10836/verify-3free-cart-shapes.js
new file mode 100644
index 0000000..7599a81
--- /dev/null
+++ b/verification/tk10836/verify-3free-cart-shapes.js
@@ -0,0 +1,69 @@
+'use strict';
+// Cody hole #1 revised: do the "free" 3FREE orders actually contain REAL $4.25
+// samples, or $0.00 synthetic items? And does any order match Kelly's exact
+// shape: ~3 real $4.25 samples + code 3FREE ?
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+query($q: String!, $cursor: String) {
+ orders(first: 100, query: $q, sortKey: CREATED_AT, reverse: true, after: $cursor) {
+ pageInfo { hasNextPage endCursor }
+ nodes {
+ name createdAt discountCodes
+ subtotalPriceSet { shopMoney { amount } }
+ totalShippingPriceSet { shopMoney { amount } }
+ shippingLine { title }
+ shippingAddress { provinceCode countryCodeV2 }
+ discountApplications(first: 5) { nodes { __typename allocationMethod
+ ... on DiscountCodeApplication { code }
+ ... on AutomaticDiscountApplication { title } } }
+ lineItems(first: 30) { nodes { title quantity
+ originalUnitPriceSet { shopMoney { amount } } } }
+ }
+ }
+}`;
+async function page(q, cursor) {
+ const r = await fetch(`https://${shop}/admin/api/2024-10/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': token, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query: Q, variables: { q, cursor } }) });
+ const j = await r.json();
+ if (j.errors) throw new Error(JSON.stringify(j.errors));
+ return j.data.orders;
+}
+(async () => {
+ let all = [], cursor = null;
+ for (let i = 0; i < 12; i++) {
+ const p = await page('created_at:>2025-01-01', cursor);
+ all = all.concat(p.nodes);
+ if (!p.pageInfo.hasNextPage) break;
+ cursor = p.pageInfo.endCursor;
+ }
+ const has3free = o => (o.discountCodes||[]).some(c=>String(c).toUpperCase()==='3FREE')
+ || (o.discountApplications.nodes||[]).some(d=>String(d.code||'').toUpperCase()==='3FREE');
+ const rows = all.filter(has3free);
+ console.log(`scanned ${all.length} orders; with code 3FREE: ${rows.length}\n`);
+ console.log('order | realSamples($4.25±) | zeroItems | totalUnits | preDiscountValue | ship | shipTitle | state | discountApps');
+ for (const o of rows) {
+ const li = o.lineItems.nodes;
+ const real = li.filter(x => Number(x.originalUnitPriceSet.shopMoney.amount) >= 3.5 && Number(x.originalUnitPriceSet.shopMoney.amount) <= 6);
+ const zero = li.filter(x => Number(x.originalUnitPriceSet.shopMoney.amount) === 0);
+ const units = li.reduce((s,x)=>s+x.quantity,0);
+ const preVal = li.reduce((s,x)=>s+x.quantity*Number(x.originalUnitPriceSet.shopMoney.amount),0);
+ const apps = o.discountApplications.nodes.map(d=>d.code||d.title||d.__typename).join('+');
+ console.log([o.name, real.reduce((s,x)=>s+x.quantity,0), zero.reduce((s,x)=>s+x.quantity,0), units,
+ '$'+preVal.toFixed(2), '$'+o.totalShippingPriceSet.shopMoney.amount,
+ (o.shippingLine&&o.shippingLine.title)||'(none)',
+ o.shippingAddress?`${o.shippingAddress.provinceCode}/${o.shippingAddress.countryCodeV2}`:'?',
+ apps].join(' | '));
+ }
+ console.log('\n=== KELLY-SHAPE TEST: code 3FREE + >=1 real $4.25 sample + 2-4 real units ===');
+ const kellyShape = rows.filter(o => {
+ const real = o.lineItems.nodes.filter(x => { const p=Number(x.originalUnitPriceSet.shopMoney.amount); return p>=3.5&&p<=6; })
+ .reduce((s,x)=>s+x.quantity,0);
+ return real >= 2 && real <= 4;
+ });
+ for (const o of kellyShape) {
+ console.log(` ${o.name} ${o.createdAt.slice(0,10)} ship=$${o.totalShippingPriceSet.shopMoney.amount} "${(o.shippingLine&&o.shippingLine.title)||''}" ${o.shippingAddress?o.shippingAddress.provinceCode:''}`);
+ }
+ if (!kellyShape.length) console.log(' NONE — no historical precedent for Kelly\'s exact redemption shape.');
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-abandonment.js b/verification/tk10836/verify-abandonment.js
new file mode 100644
index 0000000..9e21353
--- /dev/null
+++ b/verification/tk10836/verify-abandonment.js
@@ -0,0 +1,36 @@
+'use strict';
+// Cody hole #2: is Kelly's 0-orders silent abandonment at checkout?
+// NOTE: abandonedCheckouts query-filtering is unreliable here, so we page and filter client-side.
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const TARGETS = ['kcyounge@gmail.com', 'kyounge@umich.edu'];
+const Q = `
+query($cursor: String) {
+ abandonedCheckouts(first: 100, after: $cursor) {
+ pageInfo { hasNextPage endCursor }
+ nodes { id createdAt customer { id email } totalPriceSet { shopMoney { amount } }
+ lineItems(first: 10) { nodes { title quantity } } }
+ }
+}`;
+(async () => {
+ let all = [], cursor = null;
+ for (let i = 0; i < 15; i++) {
+ const r = await fetch(`https://${shop}/admin/api/2024-10/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': token, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query: Q, variables: { cursor } }) });
+ const j = await r.json();
+ if (j.errors) { console.error('ACCESS:', JSON.stringify(j.errors.map(e=>e.message))); return; }
+ const p = j.data.abandonedCheckouts;
+ all = all.concat(p.nodes);
+ if (!p.pageInfo.hasNextPage) break;
+ cursor = p.pageInfo.endCursor;
+ }
+ console.log(`abandoned checkouts scanned: ${all.length}`);
+ const range = all.map(n=>n.createdAt).sort();
+ console.log(`date range: ${range[0]} .. ${range[range.length-1]}`);
+ const hits = all.filter(n => n.customer && TARGETS.includes(String(n.customer.email||'').toLowerCase()));
+ console.log(`\nKelly abandoned checkouts: ${hits.length}`);
+ console.log(hits.length ? JSON.stringify(hits, null, 2) : ' NONE — no abandoned checkout on either of Kelly\'s emails.');
+ const post = all.filter(n => n.createdAt >= '2026-09-02');
+ console.log(`\n(abandoned checkouts recorded on/after 2026-09-02, any customer: ${post.length})`);
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-kelly-checkout-breakdown.js b/verification/tk10836/verify-kelly-checkout-breakdown.js
new file mode 100644
index 0000000..373c63f
--- /dev/null
+++ b/verification/tk10836/verify-kelly-checkout-breakdown.js
@@ -0,0 +1,42 @@
+'use strict';
+// Decisive: on Kelly's own 3-sample cart, was the $24.95 total SHIPPING or ITEMS?
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+query($id: ID!) {
+ node(id: $id) {
+ ... on AbandonedCheckout {
+ id createdAt abandonedCheckoutUrl
+ customer { email }
+ subtotalPriceSet { shopMoney { amount } }
+ totalPriceSet { shopMoney { amount } }
+ totalTaxSet { shopMoney { amount } }
+ totalDiscountSet { shopMoney { amount } }
+ shippingAddress { city provinceCode countryCodeV2 }
+ lineItems(first: 20) { nodes { title quantity
+
+ } }
+ }
+ }
+}`;
+(async () => {
+ for (const id of ['gid://shopify/AbandonedCheckout/34015098110003','gid://shopify/AbandonedCheckout/34017552728115']) {
+ const r = await fetch(`https://${shop}/admin/api/2024-10/graphql.json`, {
+ method: 'POST', headers: { 'X-Shopify-Access-Token': token, 'Content-Type': 'application/json' },
+ body: JSON.stringify({ query: Q, variables: { id } }) });
+ const j = await r.json();
+ if (j.errors) { console.error(JSON.stringify(j.errors)); continue; }
+ const n = j.data.node;
+ const items = Number(n.subtotalPriceSet.shopMoney.amount);
+ const total = Number(n.totalPriceSet.shopMoney.amount);
+ const tax = Number(n.totalTaxSet ? n.totalTaxSet.shopMoney.amount : 0);
+ console.log(`\n=== ${n.id.split('/').pop()} ${n.createdAt} ${n.customer && n.customer.email} ===`);
+ console.log(` items subtotal : $${items.toFixed(2)}`);
+ console.log(` discounts : $${Number(n.totalDiscountSet?n.totalDiscountSet.shopMoney.amount:0).toFixed(2)}`);
+ console.log(` tax : $${tax.toFixed(2)}`);
+ console.log(` TOTAL : $${total.toFixed(2)}`);
+ console.log(` => implied shipping (total - items - tax): $${(total - items - tax).toFixed(2)}`);
+ console.log(` dest: ${n.shippingAddress ? n.shippingAddress.city+', '+n.shippingAddress.provinceCode+'/'+n.shippingAddress.countryCodeV2 : '(none set)'}`);
+ for (const li of n.lineItems.nodes) console.log(` - ${li.title} x${li.quantity} orig $${""} -> $${""}`);
+ }
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
← a69c55f TK-10836: overturn contrarian's blocking hole on the full 3F
·
back to Dw Signup Fulfillment
·
TK-11361: confirm duplicate DW Free Samples automatics; with f5076d0 →