[object Object]

← back to Designerwallcoverings

TK-10895: storefront verify needs a CDN grace period

e14d23e1823ac09b5fa547cdddb4668bb88d58d5 · 2026-09-10 11:23:51 -0700 · Steve

The 45-product run flagged 3 HARD FAIL 'storefront pos1 is $4.25'. Re-read a
minute later: all 3 correct. The storefront is CDN-fronted, so a 1.2s post-write
read can serve a stale document - a false LEAK, the sixth false ordering reading
on this ticket, this time from the right oracle read too early.

Now waits 2.5s and re-reads once after 4s before flagging. Distinguishes 'not
propagated yet' from 'actually wrong'.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>

Files touched

Diff

commit e14d23e1823ac09b5fa547cdddb4668bb88d58d5
Author: Steve <steve@designerwallcoverings.com>
Date:   Thu Sep 10 11:23:51 2026 -0700

    TK-10895: storefront verify needs a CDN grace period
    
    The 45-product run flagged 3 HARD FAIL 'storefront pos1 is $4.25'. Re-read a
    minute later: all 3 correct. The storefront is CDN-fronted, so a 1.2s post-write
    read can serve a stale document - a false LEAK, the sixth false ordering reading
    on this ticket, this time from the right oracle read too early.
    
    Now waits 2.5s and re-reads once after 4s before flagging. Distinguishes 'not
    propagated yet' from 'actually wrong'.
    
    Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
---
 scripts/tk10895-trancheB-golive-269.mjs | 12 +++++++++---
 1 file changed, 9 insertions(+), 3 deletions(-)

diff --git a/scripts/tk10895-trancheB-golive-269.mjs b/scripts/tk10895-trancheB-golive-269.mjs
index 1860a82..609b717 100644
--- a/scripts/tk10895-trancheB-golive-269.mjs
+++ b/scripts/tk10895-trancheB-golive-269.mjs
@@ -142,7 +142,7 @@ for (const [i, w] of work.entries()) {
     // VERIFY ON THE RENDERED STOREFRONT — the Admin API returns a stale variant order after a
     // GraphQL reorder and has now produced FIVE false readings of this exact defect on this ticket.
     // The storefront is what Google Merchant Center reads, so it is the only oracle that counts.
-    await sleep(1200);
+    await sleep(2500);   // storefront is CDN-fronted; a 1.2s read produced 3 false LEAK flags
     let sf = null;
     for (let a = 1; a <= 4 && !sf; a++) {
       try { const r = await fetch(`https://designerwallcoverings.com/products/${p.handle}.json`);
@@ -151,8 +151,14 @@ for (const [i, w] of work.entries()) {
     }
     if (!sf) { console.log(`${tag} WARN — could not read storefront to verify (write itself succeeded)`); warn++; }
     else {
-      const sv = [...sf.variants].sort((a,b)=>a.position-b.position);
-      if (!(parseFloat(sv[0]?.price) > 50)) { console.log(`${tag} HARD FAIL — storefront pos1 is $${sv[0]?.price}`); warn++; }
+      let sv = [...sf.variants].sort((a,b)=>a.position-b.position);
+      if (!(parseFloat(sv[0]?.price) > 50)) {
+        // one re-read before crying leak — CDN propagation, not a defect
+        await sleep(4000);
+        try { const r2 = await fetch(`https://designerwallcoverings.com/products/${p.handle}.json`);
+              if (r2.ok) sv = [...(await r2.json()).product.variants].sort((a,b)=>a.position-b.position); } catch {}
+      }
+      if (!(parseFloat(sv[0]?.price) > 50)) { console.log(`${tag} HARD FAIL — storefront pos1 is $${sv[0]?.price} after re-read`); warn++; }
     }
   }
   if (p.options?.[0]?.name && p.options[0].name !== 'Size') {

← e0c030e TK-10895: post-verify must read the STOREFRONT, not the Admi  ·  back to Designerwallcoverings  ·  TK-10895: bring main's copies to the final verified state (2 a6afe99 →