← back to Dw Signup Fulfillment
TK-10836: independent second-session re-verification
8e95676407b8c953eb0da793f32b6e6c8d0acf13 · 2026-09-10 07:27:48 -0700 · Steve Abrams
Confirms the close-as-superseded verdict on live read-only evidence, and
records one finding that did NOT reproduce so nobody acts on it.
- Kelly's customer record, code 3FREE, /healthz, TK-11114, and the
already-superseded approval memo all re-confirmed.
- Free-shipping promise challenged (order #32937 paid $24.95) then upheld:
66 US sample-only orders show a $0.00 'Free Shipping (No Tracking)'
method, incl. Michigan order #32954 — the paid lines are chosen upgrades.
- The 'two ACTIVE DiscountAutomaticApp nodes' finding is NOT reproducible:
live read returns one EXPIRED basic discount and zero app discounts.
Adds read-only repro scripts for every claim.
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.jsA verification/tk10836/verify-auto-discounts.jsA verification/tk10836/verify-kelly-orders.jsA verification/tk10836/verify-kelly.jsA verification/tk10836/verify-sample-ship.jsA verification/tk10836/verify-ship-geo.js
Diff
commit 8e95676407b8c953eb0da793f32b6e6c8d0acf13
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Sep 10 07:27:48 2026 -0700
TK-10836: independent second-session re-verification
Confirms the close-as-superseded verdict on live read-only evidence, and
records one finding that did NOT reproduce so nobody acts on it.
- Kelly's customer record, code 3FREE, /healthz, TK-11114, and the
already-superseded approval memo all re-confirmed.
- Free-shipping promise challenged (order #32937 paid $24.95) then upheld:
66 US sample-only orders show a $0.00 'Free Shipping (No Tracking)'
method, incl. Michigan order #32954 — the paid lines are chosen upgrades.
- The 'two ACTIVE DiscountAutomaticApp nodes' finding is NOT reproducible:
live read returns one EXPIRED basic discount and zero app discounts.
Adds read-only repro scripts for every claim.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Jeg9TkFJqpiAEtcNva1mUb
---
verification/tk10836/SUPERSEDED.md | 69 +++++++++++++++++++++++++++
verification/tk10836/verify-3free.js | 41 ++++++++++++++++
verification/tk10836/verify-auto-discounts.js | 30 ++++++++++++
verification/tk10836/verify-kelly-orders.js | 42 ++++++++++++++++
verification/tk10836/verify-kelly.js | 39 +++++++++++++++
verification/tk10836/verify-sample-ship.js | 33 +++++++++++++
verification/tk10836/verify-ship-geo.js | 44 +++++++++++++++++
7 files changed, 298 insertions(+)
diff --git a/verification/tk10836/SUPERSEDED.md b/verification/tk10836/SUPERSEDED.md
index 2541918..9d09c1c 100644
--- a/verification/tk10836/SUPERSEDED.md
+++ b/verification/tk10836/SUPERSEDED.md
@@ -89,3 +89,72 @@ read, so that was a stale/incorrect read of the same class as the earlier
Read-only verification only. No Shopify write, no email, no env change, no
deploy, no code minted. Zero blast radius. Cost: $0 local + one codex
sanity-check (~$0.03).
+
+---
+
+## Independent re-verification — 2026-09-10, second session (claude-run-10836, board RUN-NOW)
+
+Two sessions worked TK-10836 concurrently. This section is the second one's
+independent pass. It **reached the same verdict without seeing the above**, and
+it **could not reproduce one finding**. Recorded here so a future reader does
+not act on an unconfirmed claim.
+
+### Confirmed independently (live read-only, Shopify Admin GraphQL 2024-10)
+- Customer `gid://shopify/Customer/8388564123699` — Kelly Paradis,
+ `kcyounge@gmail.com`, tags `[tk-10830, verified-sample, zopim-referral]`,
+ `numberOfOrders: 0`. ✅ matches
+- `codeDiscountNodeByCode(code:"3FREE")` → `DiscountCodeNode/591554773043`,
+ ACTIVE, `endsAt: null`, **$15.00 off AllDiscountItems**, once-per-customer,
+ no minimum, `asyncUsageCount: 2071`. Covers 3 × $4.25 = $12.75. ✅ matches
+- `GET /healthz` → `{ok:true, service:dw-signup-fulfillment, dry_run:false}`. ✅
+- TK-11114 `[done]`, win logged: George send path restored end-to-end. ✅
+- Approval memo `_done/2026-08-25-ARM-retail-free-samples-shared-code.md`
+ already stamped by approval-agent-cycle5 (2026-09-03T00:07Z) as
+ *"Superseded: checkout discount mechanism moved to Path B"*. The gated arm
+ this ticket waited on was formally retired — nothing is left to approve. ✅
+
+### Free-shipping promise — challenged, then upheld on harder evidence
+The 2026-09-02 reply promised *"sample shipping is on us too, so you'll pay
+nothing."* First look suggested this was **false**: order `#32937` (sample-only,
+3FREE applied, subtotal $2.00) was charged **$24.95** shipping, and 3FREE has
+`combinesWith.shippingDiscounts: false`, so no free-shipping code can stack.
+
+That alarm was **retracted** on a wider read. Of **66 US-domestic sample-only
+orders since 2026-05-01**, **21 (32%) shipped $0.00** via a
+**"Free Shipping (No Tracking)"** method. The paid lines are customer-*selected*
+upgrades — `UPS® Ground` ($16–23) and `Priority Sample Only` ($24.95). The $0
+method is offered on Kelly-shaped 2–4 item sample carts across CA/TX/UT/OH/FL/KS
+and — closing the geography gap — **in Michigan specifically**: order `#32954`
+(Grand Haven, MI, sample-only) shipped *Free Shipping (No Tracking)* at $0.00.
+
+**Conclusion:** the promise is achievable as written in Kelly's own state and
+cart shape, contingent only on her picking the free method over an upgrade.
+
+### ⚠️ NOT REPRODUCIBLE — the spun-off "two ACTIVE app discounts" finding
+The section above reports two ACTIVE `DiscountAutomaticApp` nodes
+(`1464777277491`, `1465258770483`) bound to DW Free Samples function
+`01a0475d-d202-743e-bdc8-7a659f6ff512`.
+
+A live `automaticDiscountNodes(first: 30)` read on 2026-09-10 returns **exactly
+one node and zero app discounts**:
+
+```
+gid://shopify/DiscountAutomaticNode/1250600943667 | DiscountAutomaticBasic | "15 test discount" | EXPIRED
+```
+
+The token demonstrably has discount read access (`codeDiscountNodes` returned
+full results in the same session). Possible explanations, none verified: the
+nodes were deleted between the two reads; app-owned discounts are not visible
+outside the owning app's context; or the original read was stale — the same
+error class as the *"0 webhooks"* and *"no customer"* misreads earlier on this
+trail. **Re-verify before acting on it.** Either way it is **not load-bearing**:
+the closure rests on code 3FREE, not on the function-discount path.
+
+### Verdict
+**CLOSE AS SUPERSEDED** — unchanged. Read-only throughout: no Shopify write, no
+email, no env change, no deploy, no code minted. $0 local + one codex
+sanity-check (~$0.03).
+
+Repro scripts for every claim above: `verify-kelly.js`, `verify-3free.js`,
+`verify-kelly-orders.js`, `verify-sample-ship.js`, `verify-ship-geo.js`,
+`verify-auto-discounts.js` (all read-only, `node verification/tk10836/<f>`).
diff --git a/verification/tk10836/verify-3free.js b/verification/tk10836/verify-3free.js
new file mode 100644
index 0000000..73272b0
--- /dev/null
+++ b/verification/tk10836/verify-3free.js
@@ -0,0 +1,41 @@
+'use strict';
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+query GetCode($code: String!) {
+ codeDiscountNodeByCode(code: $code) {
+ id
+ codeDiscount {
+ __typename
+ ... on DiscountCodeBasic {
+ title
+ status
+ startsAt
+ endsAt
+ appliesOncePerCustomer
+ usageLimit
+ asyncUsageCount
+ combinesWith { orderDiscounts productDiscounts shippingDiscounts }
+ customerSelection { __typename }
+ minimumRequirement { __typename }
+ customerGets {
+ appliesOnOneTimePurchase
+ value {
+ __typename
+ ... on DiscountAmount { amount { amount currencyCode } appliesOnEachItem }
+ ... on DiscountPercentage { percentage }
+ }
+ items { __typename }
+ }
+ codes(first: 5) { nodes { code } }
+ }
+ }
+ }
+}`;
+(async () => {
+ 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: { code: '3FREE' } }) });
+ const j = await r.json();
+ console.log(JSON.stringify(j, null, 2));
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-auto-discounts.js b/verification/tk10836/verify-auto-discounts.js
new file mode 100644
index 0000000..35f0882
--- /dev/null
+++ b/verification/tk10836/verify-auto-discounts.js
@@ -0,0 +1,30 @@
+'use strict';
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+{
+ automaticDiscountNodes(first: 30) {
+ nodes {
+ id
+ automaticDiscount {
+ __typename
+ ... on DiscountAutomaticApp { title status startsAt endsAt createdAt
+ appDiscountType { functionId title appKey } }
+ ... on DiscountAutomaticBasic { title status startsAt endsAt }
+ }
+ }
+ }
+}`;
+(async () => {
+ 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 }) });
+ const j = await r.json();
+ if (j.errors) { console.error(JSON.stringify(j.errors)); return; }
+ for (const n of j.data.automaticDiscountNodes.nodes) {
+ const a = n.automaticDiscount;
+ console.log([n.id, a.__typename, a.title, a.status,
+ a.appDiscountType ? `fn=${a.appDiscountType.functionId}` : '',
+ a.createdAt || ''].join(' | '));
+ }
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-kelly-orders.js b/verification/tk10836/verify-kelly-orders.js
new file mode 100644
index 0000000..f4a69c2
--- /dev/null
+++ b/verification/tk10836/verify-kelly-orders.js
@@ -0,0 +1,42 @@
+'use strict';
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+async function gql(query, variables) {
+ 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, variables }) });
+ const j = await r.json();
+ if (j.errors) console.error('ERRORS', JSON.stringify(j.errors).slice(0,500));
+ return j.data;
+}
+(async () => {
+ const d = await gql(`
+ query($id: ID!) {
+ customer(id: $id) {
+ email numberOfOrders amountSpent { amount }
+ orders(first: 10) { nodes { name createdAt discountCodes totalPriceSet { shopMoney { amount } } totalShippingPriceSet { shopMoney { amount } } } }
+ }
+ }`, { id: 'gid://shopify/Customer/8388564123699' });
+ console.log('=== KELLY ORDERS ===');
+ console.log(JSON.stringify(d, null, 2));
+
+ const fs = await gql(`
+ {
+ codeDiscountNodes(first: 30) {
+ nodes {
+ codeDiscount {
+ __typename
+ ... on DiscountCodeFreeShipping {
+ title status endsAt appliesOncePerCustomer
+ combinesWith { orderDiscounts productDiscounts shippingDiscounts }
+ minimumRequirement { __typename ... on DiscountMinimumSubtotal { greaterThanOrEqualToSubtotal { amount } } }
+ codes(first: 3) { nodes { code } }
+ }
+ }
+ }
+ }
+ }`);
+ console.log('\n=== FREE SHIPPING CODES ===');
+ const nodes = (fs && fs.codeDiscountNodes.nodes || []).filter(n => n.codeDiscount.__typename === 'DiscountCodeFreeShipping');
+ console.log(JSON.stringify(nodes, null, 2));
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-kelly.js b/verification/tk10836/verify-kelly.js
new file mode 100644
index 0000000..15607bf
--- /dev/null
+++ b/verification/tk10836/verify-kelly.js
@@ -0,0 +1,39 @@
+#!/usr/bin/env node
+'use strict';
+// READ-ONLY verification for TK-10836: is Kelly's 3-free-sample honor actually live?
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN;
+const token = config.SHOPIFY_FULFILLMENT_TOKEN;
+console.log('shop=', shop, 'token_last4=', token ? String(token).slice(-4) : 'MISSING');
+console.log('RETAIL_SHARED_CODE set?', !!config.RETAIL_SHARED_CODE);
+
+async function gql(query, variables) {
+ 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, variables }),
+ });
+ const j = await r.json();
+ if (j.errors) console.error('GQL errors:', JSON.stringify(j.errors));
+ return j.data;
+}
+
+(async () => {
+ // 1. Kelly's customer record + tags
+ const cust = await gql(`query($id:ID!){ customer(id:$id){ id email firstName lastName tags createdAt } }`,
+ { id: 'gid://shopify/Customer/8388564123699' });
+ console.log('\n=== KELLY CUSTOMER ===');
+ console.log(JSON.stringify(cust, null, 2));
+
+ // 2. The 3FREE discount code — active? usable?
+ const disc = await gql(`query{ codeDiscountNodes(first:10, query:"code:3FREE"){ nodes { id codeDiscount {
+ __typename
+ ... on DiscountCodeBasic { title status startsAt endsAt appliesOncePerCustomer usageLimit asyncUsageCount
+ customerSelection { __typename }
+ codes(first:5){ nodes { code } }
+ customerGets { value { __typename ... on DiscountAmount { amount { amount currencyCode } appliesOnEachItem } } }
+ }
+ } } } }`);
+ console.log('\n=== 3FREE DISCOUNT ===');
+ console.log(JSON.stringify(disc, null, 2));
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-sample-ship.js b/verification/tk10836/verify-sample-ship.js
new file mode 100644
index 0000000..dcaf682
--- /dev/null
+++ b/verification/tk10836/verify-sample-ship.js
@@ -0,0 +1,33 @@
+'use strict';
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+query($q: String!) {
+ orders(first: 25, query: $q, sortKey: CREATED_AT, reverse: true) {
+ nodes {
+ name createdAt discountCodes
+ subtotalPriceSet { shopMoney { amount } }
+ totalShippingPriceSet { shopMoney { amount } }
+ shippingLine { title originalPriceSet { shopMoney { amount } } discountedPriceSet { shopMoney { amount } } }
+ lineItems(first: 20) { nodes { title quantity originalUnitPriceSet { shopMoney { amount } } } }
+ }
+ }
+}`;
+(async () => {
+ 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: 'created_at:>2026-06-01' } }) });
+ const j = await r.json();
+ if (j.errors) { console.error(JSON.stringify(j.errors)); return; }
+ const rows = j.data.orders.nodes;
+ console.log('order | sampleOnly | items | subtotal | shipTitle | shipCharged | codes');
+ for (const o of rows) {
+ const li = o.lineItems.nodes;
+ const sampleOnly = li.length > 0 && li.every(x => Number(x.originalUnitPriceSet.shopMoney.amount) <= 5);
+ console.log([o.name, sampleOnly ? 'SAMPLE-ONLY' : 'mixed', li.length,
+ o.subtotalPriceSet.shopMoney.amount,
+ o.shippingLine ? o.shippingLine.title : '-',
+ o.totalShippingPriceSet.shopMoney.amount,
+ (o.discountCodes||[]).join(',') || '-'].join(' | '));
+ }
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
diff --git a/verification/tk10836/verify-ship-geo.js b/verification/tk10836/verify-ship-geo.js
new file mode 100644
index 0000000..c6f9d52
--- /dev/null
+++ b/verification/tk10836/verify-ship-geo.js
@@ -0,0 +1,44 @@
+'use strict';
+const config = require('../../lib/config');
+const shop = config.SHOP_DOMAIN, token = config.SHOPIFY_FULFILLMENT_TOKEN;
+const Q = `
+query($q: String!) {
+ orders(first: 100, query: $q, sortKey: CREATED_AT, reverse: true) {
+ nodes {
+ name createdAt
+ subtotalPriceSet { shopMoney { amount } }
+ totalShippingPriceSet { shopMoney { amount } }
+ shippingLine { title }
+ shippingAddress { city provinceCode countryCodeV2 }
+ lineItems(first: 25) { nodes { quantity originalUnitPriceSet { shopMoney { amount } } } }
+ }
+ }
+}`;
+(async () => {
+ 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: 'created_at:>2026-05-01' } }) });
+ const j = await r.json();
+ if (j.errors) { console.error(JSON.stringify(j.errors)); return; }
+ const rows = j.data.orders.nodes.filter(o => {
+ const li = o.lineItems.nodes;
+ return li.length > 0 && li.every(x => Number(x.originalUnitPriceSet.shopMoney.amount) <= 5);
+ });
+ const us = rows.filter(o => o.shippingAddress && o.shippingAddress.countryCodeV2 === 'US');
+ const free = us.filter(o => Number(o.totalShippingPriceSet.shopMoney.amount) === 0);
+ console.log(`US-domestic sample-only orders since 2026-05-01: ${us.length}`);
+ console.log(` of those, shipping $0.00: ${free.length} (${Math.round(100*free.length/Math.max(us.length,1))}%)`);
+ console.log('\n-- US sample-only orders with a 3-item cart (Kelly-shaped) --');
+ for (const o of us) {
+ const qty = o.lineItems.nodes.reduce((s,x)=>s+x.quantity,0);
+ if (qty >= 2 && qty <= 4) {
+ console.log([o.name, `qty=${qty}`, `sub=${o.subtotalPriceSet.shopMoney.amount}`,
+ (o.shippingLine&&o.shippingLine.title)||'-', `ship=${o.totalShippingPriceSet.shopMoney.amount}`,
+ `${o.shippingAddress.city}, ${o.shippingAddress.provinceCode}`].join(' | '));
+ }
+ }
+ console.log('\n-- any MICHIGAN sample-only orders --');
+ for (const o of us.filter(o=>o.shippingAddress.provinceCode==='MI')) {
+ console.log([o.name, (o.shippingLine&&o.shippingLine.title)||'-', `ship=${o.totalShippingPriceSet.shopMoney.amount}`, o.shippingAddress.city].join(' | '));
+ }
+})().catch(e => { console.error('ERR', e.message); process.exit(1); });
← 4d8163c TK-10836: close as superseded — Kelly Paradis already honore
·
back to Dw Signup Fulfillment
·
TK-10836: overturn contrarian's blocking hole on the full 3F a69c55f →