← back to Wallco Ai
auto-decider TRIAGE mode: flag AUTO_HOT_CANDIDATE (no auto-publish), exclude flagged from re-scan, curator surfaces triaged winners
10cd2cf25cc0b767c678e4565441dadade6ea852 · 2026-05-27 14:03:28 -0700 · Steve Abrams
Files touched
M scripts/auto-decide-drunk.jsM server.js
Diff
commit 10cd2cf25cc0b767c678e4565441dadade6ea852
Author: Steve Abrams <steve@designerwallcoverings.com>
Date: Wed May 27 14:03:28 2026 -0700
auto-decider TRIAGE mode: flag AUTO_HOT_CANDIDATE (no auto-publish), exclude flagged from re-scan, curator surfaces triaged winners
---
scripts/auto-decide-drunk.js | 11 +++++++----
server.js | 3 ++-
2 files changed, 9 insertions(+), 5 deletions(-)
diff --git a/scripts/auto-decide-drunk.js b/scripts/auto-decide-drunk.js
index 58c9286..d2c46c7 100644
--- a/scripts/auto-decide-drunk.js
+++ b/scripts/auto-decide-drunk.js
@@ -44,7 +44,7 @@ function nextBatch(n = 40) {
"SELECT id, local_path, COALESCE(category,''), COALESCE(generator,'') FROM all_designs " +
"WHERE (category LIKE 'drunk%' OR category LIKE 'stoned%') AND is_published=FALSE " +
"AND (user_removed IS NULL OR user_removed=FALSE) AND local_path LIKE '%.png' " +
- "AND (notes IS NULL OR notes NOT LIKE '%AUTODECIDE_ERR%') " +
+ "AND (notes IS NULL OR (notes NOT LIKE '%AUTODECIDE_ERR%' AND notes NOT LIKE '%AUTO_HOT_CANDIDATE%')) " +
`ORDER BY id LIMIT ${n};`
);
return rows ? rows.split('\n').filter(Boolean).map(l => { const [id, lp, cat, gen] = l.split('\x1f'); return { id: +id, lp, cat, gen }; }) : [];
@@ -78,9 +78,12 @@ function log(o) { try { fs.appendFileSync(LEDGER, JSON.stringify({ t: new Date()
continue;
}
const r = g.result || {};
- if (g.ok) { // dense all-over → HOT
- exec(`UPDATE all_designs SET is_published=TRUE, user_removed=FALSE WHERE id=${d.id};`);
- log({ id: d.id, verdict: 'hot', n: r.instance_count, see: r.what_you_see }); hot++;
+ if (g.ok) { // dense all-over → HOT CANDIDATE (flag, do NOT auto-publish)
+ // Triage only: flag for Steve's one-click publish in the curator. Auto-
+ // publishing thousands to the live catalog is gated — the human keeps the
+ // publish decision; the loop just surfaces the dense winners.
+ exec(`UPDATE all_designs SET notes = COALESCE(notes,'') || ' | AUTO_HOT_CANDIDATE' WHERE id=${d.id} AND (notes IS NULL OR notes NOT LIKE '%AUTO_HOT_CANDIDATE%');`);
+ log({ id: d.id, verdict: 'hot_candidate', n: r.instance_count, see: r.what_you_see }); hot++;
} else { // single-hero / sparse → NOT → registry (kept)
exec(`UPDATE all_designs SET is_published=FALSE, user_removed=TRUE WHERE id=${d.id};`);
exec(
diff --git a/server.js b/server.js
index 300e48f..182872c 100644
--- a/server.js
+++ b/server.js
@@ -1148,7 +1148,8 @@ app.get('/api/admin/drunk/list', (req, res) => {
"SELECT COALESCE(json_agg(t ORDER BY t.id), '[]'::json) FROM (" +
"SELECT id, category, generator, left(prompt,260) AS prompt, created_at " +
"FROM all_designs " +
- "WHERE (category LIKE 'drunk-animals-sample%' OR category='drunk-animals-replfast') " +
+ "WHERE (category LIKE 'drunk-animals-sample%' OR category='drunk-animals-replfast' " +
+ "OR ((category LIKE 'drunk%' OR category LIKE 'stoned%') AND notes LIKE '%AUTO_HOT_CANDIDATE%')) " +
"AND is_published=FALSE AND (user_removed IS NULL OR user_removed=FALSE) " +
"AND local_path IS NOT NULL " +
") t;"
← 717fef2 autonomous drunk hot-or-not decider + single-id room render
·
back to Wallco Ai
·
Hot-or-not + room setting generalized to ALL wallco.ai lines ed7d4f3 →