From 27ef3e369399725526fd730c69ec93780db21e3e Mon Sep 17 00:00:00 2001 From: slaguru666 <111923774+slaguru666@users.noreply.github.com> Date: Wed, 23 Sep 2026 02:12:10 +0100 Subject: [PATCH] Correction: "bare" was not the trigger. Remove it from BANNED MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 0b51d4e claimed the martlet's three stalls were caused by the word "bare" and said it was diagnosed rather than guessed. It was guessed. The evidence was one successful regeneration with that word replaced. Run again afterwards with "bare" restored and nothing else changed, the same prompt was accepted in seconds. The variable that actually differed was that the successful run was the only job in flight — and the word was believed because a memory note from 16 September already named it, which is a reason to suspect a conclusion rather than to trust it. Two further hypotheses tested and also dead: moor_cat's full prompt is accepted immediately, so it is not blocked either; and four jobs fired two seconds apart were all answered, so it is not a concurrency limit at that scale. What made those two fail six times between them is not reproducible now, and this commit does not claim to know. The throw-instead-of-warn stays: for a genuinely banned word, a warning printed into a log predicts a job that never arrives and never errors. The armour wording stays too, because it reads better — not as a workaround. ~/bin/mj-blocked is the tool this needed from the start. It sends a prompt and reports within two minutes whether the bot answered at all, because a refusal is ephemeral and never reaches the channel, so silence there is the only thing that separates a banned word from a slow one. Three sessions have now spent 30-minute timeouts on this question. Co-Authored-By: Claude Opus 5 --- tools/mj-queue.mjs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/tools/mj-queue.mjs b/tools/mj-queue.mjs index 86e7f04..23cd228 100644 --- a/tools/mj-queue.mjs +++ b/tools/mj-queue.mjs @@ -80,12 +80,21 @@ export const TOKENS = { * and twenty minutes of wondering whether the account is out of fast hours. Cheaper to * catch here than to sit through. */ -/* Learned in production, one silent stall at a time. "bare" was added on 2026-09-23 after - the martlet failed three times over ninety minutes: the gryphon succeeded in the same - run, so it was not the service, and replacing that single word made the martlet return - immediately. A moderation refusal never appears in the channel, so this is the only - record that the word costs half an hour. */ -const BANNED = ["gore", "bust", "corpse", "mutilat", "blood-soaked", "bare"]; +/* Learned in production, one silent stall at a time. + * + * "bare" was added here on 2026-09-23 and REMOVED the same night. The martlet had failed + * three times over ninety minutes; regenerating it with that one word replaced brought it + * back, and that was published as the diagnosis. It was wrong. Run again afterwards with + * "bare" restored and nothing else changed, the same prompt was accepted in seconds. The + * variable that actually differed was that the successful run was the only job in flight, + * and the word was believed because a memory note from 16 September already named it — + * which is a reason to suspect a conclusion, not to trust it. + * + * Nothing in this list should be added from a single successful retry. Use ~/bin/mj-blocked, + * which sends the prompt and reports in two minutes whether the bot answered at all: a + * refusal is ephemeral and never reaches the channel, so silence there is the only + * evidence that distinguishes a banned word from a slow one. */ +const BANNED = ["gore", "bust", "corpse", "mutilat", "blood-soaked"]; /* ---------------------------------------------------------------- derivation */ @@ -121,10 +130,10 @@ const buildWords = ch => bandOf((Number(ch?.str) || 12) / (Number(ch?.siz) || 12 armour to be left out, because a word choice is an argument and a --no is closer to a guarantee. */ const armourWords = (n, era = "antique") => bandOf(Number(n) || 0, [ - /* NOT "bare". Midjourney's moderation refuses that word — it reads as nudity — and a - refusal is ephemeral, so the job simply never arrives. The martlet stalled for thirty - minutes three times; changing this one word and nothing else made it return. Thirteen - creatures carried it, every one of them a creature with no natural armour. */ + /* This band said "bare, unprotected" and was changed on the belief that "bare" was + blocking the martlet. That belief did not survive testing — the prompt with "bare" is + accepted — so the change is kept only because the wording is better, and NOT as a + workaround for anything. */ [0, "thin-skinned, nothing between it and a blow"], [3, "tough hide"], [6, "thick natural plating, part of the animal"],