Correction: "bare" was not the trigger. Remove it from BANNED

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 <noreply@anthropic.com>
This commit is contained in:
slaguru666
2026-09-23 02:12:10 +01:00
co-authored by Claude Opus 5
parent 0b51d4e778
commit 27ef3e3693
+19 -10
View File
@@ -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"],