[object Object]

← 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

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 →