← back to Gmc Titlefix
5x sweep 3: widen storefront check 8 -> all 33, add fault-injection self-test
630865490d27ffbc8519e1f71cbd0d32a5a31787 · 2026-09-11 12:40:42 -0700 · Steve
A check that only ever runs on healthy data proves nothing about its own ability
to fail. S2b now feeds the probe a known-LIVE product and a known-dead handle in
the same sweep and requires them to come back different, so a probe that has
silently stopped discriminating is caught rather than printing green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwXCqw4PdXfTY729wX8BFw
Files touched
M 5x/last-sweep.jsonM 5x/sweep.mjs
Diff
commit 630865490d27ffbc8519e1f71cbd0d32a5a31787
Author: Steve <steve@designerwallcoverings.com>
Date: Fri Sep 11 12:40:42 2026 -0700
5x sweep 3: widen storefront check 8 -> all 33, add fault-injection self-test
A check that only ever runs on healthy data proves nothing about its own ability
to fail. S2b now feeds the probe a known-LIVE product and a known-dead handle in
the same sweep and requires them to come back different, so a probe that has
silently stopped discriminating is caught rather than printing green.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01JwXCqw4PdXfTY729wX8BFw
---
5x/last-sweep.json | 40 ++++------------------------------------
5x/sweep.mjs | 15 ++++++++++++---
2 files changed, 16 insertions(+), 39 deletions(-)
diff --git a/5x/last-sweep.json b/5x/last-sweep.json
index 13a60c5..20908cd 100644
--- a/5x/last-sweep.json
+++ b/5x/last-sweep.json
@@ -1,42 +1,10 @@
{
- "ts": "2026-09-11T19:36:42.695Z",
- "defects": [
- {
- "check": "S2",
- "msg": "dwrw-75513 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75515 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75518 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75520 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75522 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75524 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75525 still returns 200 on the storefront after archiving"
- },
- {
- "check": "S2",
- "msg": "dwrw-75527 still returns 200 on the storefront after archiving"
- }
- ],
+ "ts": "2026-09-11T19:40:29.370Z",
+ "defects": [],
"ledger": [
"S1 shopify: 33/33 archived, 17/17 fix-set intact",
- "S2 storefront: 0/8 gone, control 200",
+ "S2 storefront: 33/33 gone, control buyable=true",
+ "S2b fault-injection: discriminates=true",
"S3 filemaker: 105/105 dated",
"S4 ledgers: 33+105 undo rows",
"S5 claims re-derived"
diff --git a/5x/sweep.mjs b/5x/sweep.mjs
index 8e400e6..2d16b15 100644
--- a/5x/sweep.mjs
+++ b/5x/sweep.mjs
@@ -40,7 +40,7 @@ async function storefront(h){ try{
return {http:r.status,buyable:null,why:'unexpected status'};
}catch(e){ return {http:null,err:String(e).slice(0,60)}; } }
let notBuyable=0,unread=0;
-for(const r of arch.slice(0,8)){ const s=await storefront(r.handle);
+for(const r of arch){ const s=await storefront(r.handle);
if(s.http===null||s.buyable===null){unread++;D('S2',`${r.handle} storefront NOT_MEASURED (${s.err||s.why}) — not a pass`);}
else if(s.buyable) D('S2',`${r.handle} is STILL BUYABLE after archiving (${s.why})`);
else notBuyable++; await new Promise(z=>setTimeout(z,400)); }
@@ -48,8 +48,17 @@ for(const r of arch.slice(0,8)){ const s=await storefront(r.handle);
// could call everything "gone" and look perfectly green while detecting nothing at all.
const ctl=await storefront(fix[0].handle);
if(ctl.buyable!==true) D('S2',`CONTROL ${fix[0].handle} is ACTIVE but probe says buyable=${ctl.buyable} (${ctl.why||ctl.err}) — the probe is not detecting live products`);
-console.log(` archived-not-buyable ${notBuyable}/8 | not-measured ${unread} | control(${fix[0].handle}) http=${ctl.http} buyable=${ctl.buyable}`);
-ledger.push(`S2 storefront: ${notBuyable}/8 gone, control buyable=${ctl.buyable}`);
+console.log(` archived-not-buyable ${notBuyable}/${arch.length} | not-measured ${unread} | control(${fix[0].handle}) http=${ctl.http} buyable=${ctl.buyable}`);
+ledger.push(`S2 storefront: ${notBuyable}/${arch.length} gone, control buyable=${ctl.buyable}`);
+
+// ---- S2b FAULT INJECTION: prove the probe can go RED, not just green.
+console.log('\nS2b fault injection (probe must disagree between a live and a dead product)');
+const live=await storefront(fix[1].handle); // ACTIVE -> must be buyable
+const dead=await storefront('this-handle-does-not-exist-tk11448'); // must be gone
+if(live.buyable!==true) D('S2b',`injected LIVE product ${fix[1].handle} read as buyable=${live.buyable} — probe cannot see live products`);
+if(dead.buyable!==false) D('S2b',`injected DEAD handle read as buyable=${dead.buyable} — probe cannot see dead products`);
+console.log(` live(${fix[1].handle})=${live.buyable} dead(bogus)=${dead.buyable} -> probe discriminates: ${live.buyable===true&&dead.buyable===false}`);
+ledger.push(`S2b fault-injection: discriminates=${live.buyable===true&&dead.buyable===false}`);
// ---- S3 FileMaker: 105 dated + NEGATIVE control (an untouched product must still be blank)
console.log('\nS3 FileMaker (our rows dated; an UNTOUCHED product must still be blank)');
← c0bbc10 5x sweep 1: fix the storefront probe — redirect:follow measu
·
back to Gmc Titlefix
·
5x: TK-11448 verify-and-fix report — 4 sweeps, 1 real defect ffe6554 →