← back to Dw Yolo Loop
cycle 80: c78 set-difference acknowledged-baseline (c78/c79 officer design) — keyed handle#position#status (draft->active escalation fires); ACK_SEED + SELFTEST modes; seeded 153 tuples (145 active+8 draft); SELFTEST PASS (NEW fires, acknowledged quiet, escalation fires) -> c78 installable NOW (alerts only on NEW regression)
479ecde40573959fd748adb852b76854d7271466 · 2026-06-18 02:30:25 -0700 · Steve Abrams
Files touched
A scripts/zero-dollar-orderable-canary/ack-baseline.jsonM scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
Diff
commit 479ecde40573959fd748adb852b76854d7271466
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Thu Jun 18 02:30:25 2026 -0700
cycle 80: c78 set-difference acknowledged-baseline (c78/c79 officer design) — keyed handle#position#status (draft->active escalation fires); ACK_SEED + SELFTEST modes; seeded 153 tuples (145 active+8 draft); SELFTEST PASS (NEW fires, acknowledged quiet, escalation fires) -> c78 installable NOW (alerts only on NEW regression)
---
.../zero-dollar-orderable-canary/ack-baseline.json | 162 +++++++++++++++++++++
.../zero-dollar-orderable-canary.mjs | 68 +++++++--
2 files changed, 219 insertions(+), 11 deletions(-)
diff --git a/scripts/zero-dollar-orderable-canary/ack-baseline.json b/scripts/zero-dollar-orderable-canary/ack-baseline.json
new file mode 100644
index 0000000..acb1fad
--- /dev/null
+++ b/scripts/zero-dollar-orderable-canary/ack-baseline.json
@@ -0,0 +1,162 @@
+{
+ "ts": "2026-06-18T09:29:53.291Z",
+ "note": "acknowledged-pending-fix orderable-$0 set (c80); alert only on NEW tuples beyond this",
+ "count": 153,
+ "activeHits": 145,
+ "draftHits": 8,
+ "tuples": [
+ "going-to-the-library-leather-ama-52501#2#ACTIVE",
+ "going-to-the-library-stone-ama-52503#2#ACTIVE",
+ "pippy-s-peacock-wallpaper-silver-room-setting-pea-53619#2#ACTIVE",
+ "pippy-s-peacock-wallpaper-pea-53619a#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76624#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76627#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76629#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76631#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76633#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76635#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76637#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76640#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76642#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76644#2#ACTIVE",
+ "rustic-glam-vinyl-gpr-76646#2#ACTIVE",
+ "cesare-acoustical-walls-xvy-73252#2#ACTIVE",
+ "cesare-acoustical-walls-act-73255#2#ACTIVE",
+ "cesare-acoustical-walls-act-73256#2#ACTIVE",
+ "cesare-acoustical-walls-act-73260#2#ACTIVE",
+ "cesare-acoustical-walls-act-73261#2#ACTIVE",
+ "ashur-black-leather-texture-wallpaper-cgs-83422#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47466#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47467#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47468#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47469#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47470#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47471#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47472#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47473#2#ACTIVE",
+ "crosby-acoustical-wallcovering-xkl-47474#2#ACTIVE",
+ "lydia-s-croc-embossed-damask-prp-56542#2#ACTIVE",
+ "lydia-s-croc-embossed-damask-prp-56543#2#ACTIVE",
+ "versace-room-setting-9-verroom-46300#2#ACTIVE",
+ "ralph-9000-prl020-06-aiden-stripe-dark-blue-red-white#1#ACTIVE",
+ "ralph-9001-prl020-07-aiden-stripe-blue-dark-blue-white#1#ACTIVE",
+ "ralph-9002-prl020-09-aiden-stripe-black-grey#1#ACTIVE",
+ "ralph-9003-prl020-11-aiden-stripe-natural-white#1#ACTIVE",
+ "ralph-9004-prl020-14-aiden-stripe-teal-blue#1#ACTIVE",
+ "ralph-9005-prl025-09-marrifield-stripe-denim#1#ACTIVE",
+ "ralph-9006-prl025-10-marrifield-stripe-blue-linen#1#ACTIVE",
+ "ralph-9007-prl026-01-spalding-stripe-dark-blue#1#ACTIVE",
+ "ralph-9008-prl026-08-spalding-stripe-dark-blue-white#1#ACTIVE",
+ "ralph-9009-prl026-09-spalding-stripe-black-white#1#ACTIVE",
+ "ralph-9010-prl026-10-spalding-stripe-blue-white#1#ACTIVE",
+ "ralph-9011-prl026-13-spalding-stripe-dark-blue-sand#1#ACTIVE",
+ "ralph-9012-prl026-22-spalding-stripe-ochre#1#ACTIVE",
+ "ralph-9013-prl026-23-spalding-stripe-rosewood#1#ACTIVE",
+ "ralph-9014-prl026-24-spalding-stripe-duck-egg-blue#1#ACTIVE",
+ "ralph-9015-prl026-18-spalding-stripe-red-sand#1#ACTIVE",
+ "ralph-9015-prl050-04-palatine-stripe-midnight#1#ACTIVE",
+ "ralph-9016-prl050-05-palatine-stripe-porcelain-blue#1#ACTIVE",
+ "ralph-9017-prl057-01-gable-stripe-cornflower#1#ACTIVE",
+ "ralph-9018-prl5002-06-monteagle-stripe-light-grey#1#ACTIVE",
+ "ralph-9019-prl5009-02-langford-chalk-stripe-dark-blue#1#ACTIVE",
+ "ralph-9020-prl5020-01-deerpath-trail-plaid-mist#1#ACTIVE",
+ "ralph-9022-prl5020-03-deerpath-trail-plaid-sepia#1#ACTIVE",
+ "ralph-9023-prl5020-04-deerpath-trail-plaid-indigo#1#ACTIVE",
+ "ralph-9024-prl5022-01-beacon-morning-light#1#ACTIVE",
+ "ralph-9025-prl5023-01-mary-day-botanical-slate#1#ACTIVE",
+ "ralph-9026-prl5023-02-mary-day-botanical-tea#1#ACTIVE",
+ "ralph-9027-prl5024-02-down-easter-boats-mist#1#ACTIVE",
+ "ralph-9028-prl5024-03-down-easter-boats-atlantic#1#ACTIVE",
+ "ralph-9029-prl5025-02-captains-log-parchment#1#ACTIVE",
+ "ralph-9030-prl5026-01-pillar-point-floral-bittersweet#1#ACTIVE",
+ "ralph-9031-prl5026-04-pillar-point-floral-dew#1#ACTIVE",
+ "ralph-9032-prl5027-01-shipping-lanes-map-bone#1#ACTIVE",
+ "ralph-9033-prl5027-04-shipping-lanes-map-brilliant-blue#1#ACTIVE",
+ "ralph-9034-prl5029-01-stoneleigh-herringbone-slate#1#ACTIVE",
+ "ralph-9035-prl5029-02-stoneleigh-herringbone-heather#1#ACTIVE",
+ "ralph-9036-prl5029-03-stoneleigh-herringbone-coffee#1#ACTIVE",
+ "ralph-9037-prl5029-04-stoneleigh-herringbone-oyster#1#ACTIVE",
+ "ralph-9038-prl5035-01-boat-blueprint-dark-blue-on-white#1#ACTIVE",
+ "ralph-9039-prl5035-02-boat-blueprint-white-on-dark-blue#1#ACTIVE",
+ "ralph-9040-prl5035-03-boat-blueprint-vintage-blue#1#ACTIVE",
+ "ralph-9041-prl5041-02-starry-stars-sky-black#1#ACTIVE",
+ "ralph-9042-prl5080-01-baileyana-vintage-blue#1#ACTIVE",
+ "ralph-9043-prl5080-02-baileyana-straw#1#ACTIVE",
+ "ralph-9044-prl5080-03-baileyana-indigo#1#ACTIVE",
+ "ralph-9045-prl5081-01-koa-chevron-white#1#ACTIVE",
+ "ralph-9046-prl5081-02-koa-chevron-cobalt#1#ACTIVE",
+ "ralph-9047-prl5081-03-koa-chevron-black#1#ACTIVE",
+ "ralph-9048-prl5082-01-jute-weave-oyster#1#ACTIVE",
+ "ralph-9049-prl5082-02-jute-weave-natural#1#ACTIVE",
+ "ralph-9050-prl5082-03-jute-weave-putty#1#ACTIVE",
+ "ralph-9051-prl5082-04-jute-weave-river#1#ACTIVE",
+ "ralph-9052-prl5082-05-jute-weave-deep-blue#1#ACTIVE",
+ "ralph-9053-prl5082-06-jute-weave-chambray#1#ACTIVE",
+ "ralph-9054-prl5083-01-maslin-weave-cream#1#ACTIVE",
+ "ralph-9055-prl5083-02-maslin-weave-bone#1#ACTIVE",
+ "ralph-9056-prl5083-03-maslin-weave-platinum#1#ACTIVE",
+ "ralph-9057-prl5083-04-maslin-weave-mist#1#ACTIVE",
+ "ralph-9058-prl5083-05-maslin-weave-sky#1#ACTIVE",
+ "ralph-9059-prl5083-06-maslin-weave-bright-blue#1#ACTIVE",
+ "ralph-9060-prl5083-07-maslin-weave-ink#1#ACTIVE",
+ "ralph-9061-prl5083-08-maslin-weave-amethyst#1#ACTIVE",
+ "ralph-9062-prl5083-09-maslin-weave-lilac#1#ACTIVE",
+ "ralph-9063-prl5083-10-maslin-weave-claret#1#ACTIVE",
+ "ralph-9064-prl5083-11-maslin-weave-black#1#ACTIVE",
+ "ralph-9065-prl5083-12-maslin-weave-reed#1#ACTIVE",
+ "ralph-9066-prl5083-13-maslin-weave-putty#1#ACTIVE",
+ "ralph-9067-prl5084-01-britton-silk-desert#1#ACTIVE",
+ "ralph-9068-prl5084-02-britton-silk-cream#1#ACTIVE",
+ "ralph-9069-prl5084-03-britton-silk-pearl#1#ACTIVE",
+ "ralph-9070-prl5084-04-britton-silk-midnight#1#ACTIVE",
+ "ralph-9071-prl5085-01-lantana-weave-plaster#1#ACTIVE",
+ "ralph-9072-prl5085-02-lantana-weave-patina#1#ACTIVE",
+ "ralph-9073-prl5085-03-lantana-weave-indigo#1#ACTIVE",
+ "ralph-9074-prl5085-04-lantana-weave-denim#1#ACTIVE",
+ "ralph-9075-prl5085-05-lantana-weave-coffee#1#ACTIVE",
+ "ralph-9077-prl5087-01-seagrass-weave-flax#1#ACTIVE",
+ "ralph-9078-prl5087-02-seagrass-weave-tide-green#1#ACTIVE",
+ "ralph-9079-prl5087-03-seagrass-weave-night-sky#1#ACTIVE",
+ "ralph-9080-prl703-07-mapleton-stripe-stone#1#ACTIVE",
+ "ralph-9081-prl703-08-mapleton-stripe-vermilion-red#1#ACTIVE",
+ "the-original-yeeha-1950s-cowboy-fabric-cream-copy-1#1#ACTIVE",
+ "ralph-90000-frl5328-01-ralph-lauren#1#ACTIVE",
+ "ralph-90001-frl5331-01-ralph-lauren#1#ACTIVE",
+ "ralph-90002-frl5320-02-ralph-lauren#1#ACTIVE",
+ "ralph-90003-frl5314-01-ralph-lauren#1#ACTIVE",
+ "ralph-90004-frl5325-01-ralph-lauren#1#ACTIVE",
+ "ralph-90005-frl5078-02-ralph-lauren#1#ACTIVE",
+ "ralph-90006-frl2626-02-ralph-lauren#1#ACTIVE",
+ "ralph-90007-frl5013-02-ralph-lauren#1#ACTIVE",
+ "ralph-90008-frl5306-02-ralph-lauren#1#ACTIVE",
+ "ralph-90009-frl5320-01-ralph-lauren#1#ACTIVE",
+ "ralph-90010-frl5306-03-ralph-lauren#1#ACTIVE",
+ "ralph-90011-frl5327-01-ralph-lauren#1#ACTIVE",
+ "ralph-90012-frl5324-01-ralph-lauren#1#ACTIVE",
+ "ralph-90013-frl5329-01-ralph-lauren#1#ACTIVE",
+ "ralph-90014-frl5321-01-ralph-lauren#1#ACTIVE",
+ "ralph-90015-frl5317-01-ralph-lauren#1#ACTIVE",
+ "ralph-90016-frl5145-02-ralph-lauren#1#ACTIVE",
+ "ralph-90017-frl5227-02-ralph-lauren#1#ACTIVE",
+ "ralph-90018-frl5013-03-ralph-lauren#1#ACTIVE",
+ "ralph-90019-frl5318-01-ralph-lauren#1#ACTIVE",
+ "ralph-90020-frl5332-01-ralph-lauren#1#ACTIVE",
+ "ralph-90021-frl5319-01-ralph-lauren#1#ACTIVE",
+ "ralph-90022-frl5330-01-ralph-lauren#1#ACTIVE",
+ "ralph-90023-frl5326-01-ralph-lauren#1#ACTIVE",
+ "ralph-90024-frl5316-01-ralph-lauren#1#ACTIVE",
+ "ralph-90025-frl5329-02-ralph-lauren#1#ACTIVE",
+ "ralph-90026-frl5297-01-ralph-lauren#1#ACTIVE",
+ "ralph-90027-frl5323-02-ralph-lauren#1#ACTIVE",
+ "ralph-90028-frl5323-01-ralph-lauren#1#ACTIVE",
+ "lantana-weave-straw-wallcovering#1#ACTIVE",
+ "poona-cream-wallcovering-arte-international#1#DRAFT",
+ "thebe-terra-commercial-wallcovering-arte-international#1#DRAFT",
+ "bouquet-emerald-commercial-wallcovering-arte-international#1#DRAFT",
+ "cabochon-verdigris-commercial-wallcovering-arte-international#1#DRAFT",
+ "abydos-biscuit-wallcovering-arte-international#1#DRAFT",
+ "seres-ink-wallcovering-romo#2#DRAFT",
+ "wallco-ai-dig_ai_004178#1#DRAFT",
+ "francois-wallcovering-blush-phillipe-romano#1#DRAFT"
+ ]
+}
\ No newline at end of file
diff --git a/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs b/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
index 8999583..f0daa70 100644
--- a/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
+++ b/scripts/zero-dollar-orderable-canary/zero-dollar-orderable-canary.mjs
@@ -24,7 +24,16 @@ const GQL='https://designer-laboratory-sandbox.myshopify.com/admin/api/2024-10/g
const PJ=/phillip[- ]?jeffries/i;
const MIN_ACTIVE_SCAN=Number(process.env.MIN_ACTIVE_SCAN||50000); // completeness floor (real active ~71.7k); survives the RL reprice (decoupled from $0 content)
const BASE_DIR=path.dirname(fileURLToPath(import.meta.url)); const DATA_DIR=path.join(BASE_DIR,'data');
+const ACK_FILE=path.join(BASE_DIR,'ack-baseline.json'); // acknowledged-pending-fix set (c80, c78/c79 officer design)
+const ACK_SEED=process.env.ACK_SEED==='1'; // ACK_SEED=1: write current hits as the acknowledged set, exit 0
+const SELFTEST=process.env.SELFTEST==='1'; // SELFTEST=1: classify a synthetic dataset (no GraphQL) to prove ack logic
const sleep=ms=>new Promise(r=>setTimeout(r,ms));
+// tuple key: handle#position#status — keying on status means a DRAFT-acknowledged $0 that ACTIVATES
+// (draft→active) appears as a NEW tuple and fires (latent→live escalation), not silently acknowledged.
+const tup=h=>(h.pos||[]).map(p=>`${h.h}#${p}#${h.status}`);
+function loadAck(){ try{ return new Set(JSON.parse(fs.readFileSync(ACK_FILE,'utf8')).tuples||[]); }catch{ return null; } }
+// SET-DIFFERENCE (NOT count-delta, per c78 officer): a NEW hit = a tuple not in the acknowledged set.
+function classify(hits, ack){ const nw=[], ak=[]; for(const h of hits){ for(const t of tup(h)){ (ack&&ack.has(t)?ak:nw).push({...h,tuple:t}); } } return {nw, ak}; }
async function gql(q,v){for(let a=0;a<6;a++){try{const r=await fetch(GQL,{method:'POST',headers:{'X-Shopify-Access-Token':TOK,'Content-Type':'application/json'},body:JSON.stringify({query:q,variables:v})});if(r.status===429||r.status>=500){await sleep(2000*(a+1));continue;}const j=await r.json();if(j.errors&&JSON.stringify(j.errors).includes('Throttled')){await sleep(2500*(a+1));continue;}return j;}catch(e){await sleep(1500*(a+1));}}return null;}
// c78-officer fix: fetch inventoryQuantity (DENY+stock>0 IS orderable — was a false-clean hole);
@@ -52,6 +61,20 @@ async function scanStatus(statusQ){
}
console.log(`=== zero-dollar-orderable-canary (READ-ONLY Admin GraphQL, $0) ===`);
+// SELFTEST: prove the ack-baseline set-difference logic without a 10-min GraphQL scan.
+if(SELFTEST){
+ const ack=new Set(['known-a#1#ACTIVE','known-b#2#DRAFT']);
+ const hits=[{h:'known-a',status:'ACTIVE',pos:[1]},{h:'known-b',status:'DRAFT',pos:[2]},{h:'NEW-import',status:'ACTIVE',pos:[1]}];
+ const {nw,ak}=classify(hits,ack);
+ const pass = nw.length===1 && nw[0].h==='NEW-import' && ak.length===2;
+ console.log(`SELFTEST: acknowledged=${ak.length} (expect 2), NEW=${nw.length} (expect 1: ${nw.map(x=>x.h).join(',')})`);
+ // also prove draft->active escalation: a draft-acknowledged tuple seen ACTIVE = NEW
+ const esc=classify([{h:'known-b',status:'ACTIVE',pos:[2]}],ack);
+ const escPass = esc.nw.length===1;
+ console.log(`SELFTEST escalation (draft-ack tuple now ACTIVE): NEW=${esc.nw.length} (expect 1) → ${escPass?'fires':'MISS'}`);
+ console.log(`SELFTEST: ${pass&&escPass?'PASS':'FAIL'}`);
+ process.exit(pass&&escPass?0:1);
+}
if(!TOK){ console.log('🔴 INCONCLUSIVE: SHOPIFY_ADMIN_TOKEN missing — cannot scan'); fs.mkdirSync(DATA_DIR,{recursive:true}); fs.writeFileSync(path.join(DATA_DIR,'latest.json'),JSON.stringify({ts:new Date().toISOString(),verdict:'INCONCLUSIVE',reason:'no token'},null,2)); process.exitCode=2; process.exit(2); }
const act=await scanStatus('status:active');
const dft=await scanStatus('status:draft');
@@ -72,23 +95,46 @@ function vb(hits){ const m={}; hits.forEach(h=>{const k=`${h.vendor}|${h.status}
console.log(`\nactive orderable-$0 by vendor:`); vb(act.hits).forEach(([k,n])=>console.log(` ${k}: ${n}`));
if(dft.hits.length){ console.log(`DRAFT orderable-$0 (latent activation landmine) by vendor:`); vb(dft.hits).forEach(([k,n])=>console.log(` ${k}: ${n}`)); }
+const allHits=[...act.hits,...dft.hits];
+fs.mkdirSync(DATA_DIR,{recursive:true});
+
+// ACK_SEED mode: record the CURRENT orderable-$0 set as acknowledged-pending-fix, then exit clean.
+// (Only meaningful on a complete scan — never seed off a partial/blind crawl.)
+if(ACK_SEED){
+ if(!coverageOk){ console.log(`\n🔴 refusing to seed off an incomplete scan (coverageOk=false)`); process.exit(2); }
+ const tuples=allHits.flatMap(tup);
+ fs.writeFileSync(ACK_FILE, JSON.stringify({ts:new Date().toISOString(),note:'acknowledged-pending-fix orderable-$0 set (c80); alert only on NEW tuples beyond this',count:tuples.length,activeHits:act.hits.length,draftHits:dft.hits.length,tuples},null,2));
+ console.log(`\nACK_SEED → wrote ${ACK_FILE} with ${tuples.length} acknowledged tuples (${act.hits.length} active + ${dft.hits.length} draft). Re-baseline to 0 after the gated reprice (delete this file + ACK_SEED again, or just delete once fixed).`);
+ process.exit(0);
+}
+
+const ack=loadAck(); // null if not seeded yet
+const {nw,ak}=classify(allHits, ack);
const alerts=[];
-if(!coverageOk) alerts.push(`INCONCLUSIVE: scan incomplete/blind (complete=${complete}, activeScanned=${act.scanned} vs floor ${MIN_ACTIVE_SCAN}) — a "0 found" cannot be trusted`);
-else {
- if(act.hits.length>0) alerts.push(`LIVE FREE-CHECKOUT: ${act.hits.length} ACTIVE products with an orderable zero-dollar variant (P1 — gated reprice pending)`);
- if(dft.hits.length>0) alerts.push(`LATENT: ${dft.hits.length} DRAFT products with an orderable zero-dollar variant (the $0 is already in the draft; activation EXPOSES it to checkout)`);
- if(act.truncated+dft.truncated>0) alerts.push(`UNVERIFIED: ${act.truncated+dft.truncated} products >100 variants — $0 past position 100 not checked`);
+if(!coverageOk){
+ alerts.push(`INCONCLUSIVE: scan incomplete/blind (complete=${complete}, activeScanned=${act.scanned} vs floor ${MIN_ACTIVE_SCAN}) — a "0 found" cannot be trusted`);
+} else if(ack===null){
+ // no acknowledged baseline yet → behave as the absolute gate (every hit is "live"); prompts Steve to seed
+ if(act.hits.length>0) alerts.push(`LIVE FREE-CHECKOUT: ${act.hits.length} ACTIVE orderable zero-dollar (no ack-baseline yet — run once with ACK_SEED=1 to acknowledge the known set, then this alerts only on NEW)`);
+ if(dft.hits.length>0) alerts.push(`LATENT: ${dft.hits.length} DRAFT orderable zero-dollar`);
+} else {
+ // SET-DIFFERENCE: loud only on NEW (a tuple not acknowledged = a regression / bad import / draft→active escalation)
+ const newActive=nw.filter(x=>x.status==='ACTIVE'), newDraft=nw.filter(x=>x.status!=='ACTIVE');
+ if(newActive.length>0) alerts.push(`NEW LIVE FREE-CHECKOUT: ${newActive.length} orderable zero-dollar NOT in the acknowledged set (regression / bad import / draft→active) — e.g. ${newActive.slice(0,5).map(x=>x.h).join(', ')}`);
+ if(newDraft.length>0) alerts.push(`NEW LATENT: ${newDraft.length} draft orderable zero-dollar not acknowledged`);
}
+if(coverageOk && act.truncated+dft.truncated>0) alerts.push(`UNVERIFIED: ${act.truncated+dft.truncated} products >100 variants — $0 past position 100 not checked`);
+
let verdict;
if(!coverageOk) verdict='INCONCLUSIVE';
-else if(act.hits.length>0) verdict='ALERT';
+else if(alerts.some(a=>/^NEW|^LIVE FREE-CHECKOUT|^LATENT/.test(a))) verdict='ALERT';
else verdict='HEALTHY';
-console.log(`\n=== VERDICT: ${verdict} ===`);
-if(alerts.length) alerts.forEach(a=>console.log(` 🔴 ${a}`)); else console.log(` 🟢 0 active orderable zero-dollar variants (coverage gate passed)`);
+console.log(`\nacknowledged-pending-fix: ${ack?ak.length:'(none — not seeded)'} | NEW (beyond acknowledged): ${ack?nw.length:'n/a'}`);
+console.log(`=== VERDICT: ${verdict} ===`);
+if(alerts.length) alerts.forEach(a=>console.log(` 🔴 ${a}`)); else console.log(` 🟢 0 NEW orderable zero-dollar beyond the acknowledged set (${ack?ak.length:0} known-open, quietly tracked)`);
-fs.mkdirSync(DATA_DIR,{recursive:true});
-const result={ts:new Date().toISOString(),verdict,activeScanned:act.scanned,draftScanned:dft.scanned,complete,coverageOk,rlActive,activeHits:act.hits.length,draftHits:dft.hits.length,activeByVendor:vb(act.hits),draftByVendor:vb(dft.hits),alerts};
-fs.writeFileSync('/tmp/zero-dollar-orderable-canary.json',JSON.stringify({...result,activeSample:act.hits.slice(0,20),draftSample:dft.hits.slice(0,20)},null,2));
+const result={ts:new Date().toISOString(),verdict,activeScanned:act.scanned,draftScanned:dft.scanned,complete,coverageOk,rlActive,activeHits:act.hits.length,draftHits:dft.hits.length,acknowledged:ack?ak.length:null,newBeyondAck:ack?nw.length:null,newSample:nw.slice(0,15),activeByVendor:vb(act.hits),draftByVendor:vb(dft.hits),alerts};
+fs.writeFileSync('/tmp/zero-dollar-orderable-canary.json',JSON.stringify(result,null,2));
fs.writeFileSync(path.join(DATA_DIR,'latest.json'),JSON.stringify(result,null,2)); // heartbeat for meta-watchdog
console.log(`\nwrote /tmp/zero-dollar-orderable-canary.json + data/latest.json`);
process.exitCode = verdict==='HEALTHY'?0 : verdict==='INCONCLUSIVE'?2 : 3;
← 23c80c1 cycle 79: officer REVISE — harden CNCP wrapper (node JSON.st
·
back to Dw Yolo Loop
·
cycle 80: runbook §3 updated — c78 now INSTALLABLE-NOW (ack- fc4d261 →