fix(auq): the interactive fence ends at classification — all behavioral tails removed

The pinned-container periodic lane proved the collapse dead (reviewCount 0 →
7/8/5 across the AUQ suite) but flagged the fence's remaining behavioral
clause: 'never adds, removes, or batches the skill's decision points' broke
the paired-finding control (5 > 4 — it suppressed the batching that fixture
expects), and the band overshot its ceiling (8 > 7). Every behavioral tail
tried so far skewed counts somewhere ('when unsure, ask' → 8; 'HOW MANY
questions' → 1; 'never batches' → paired control red). The fence now ends at
'When unsure, default to interactive.' — classification only, zero behavior
words. Pins forbid every tried-and-failed phrasing.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-08-31 23:03:42 +00:00
co-authored by Claude Fable 5
parent 9f6ad83530
commit 3e4092f8b1
45 changed files with 54 additions and 51 deletions
+10 -7
View File
@@ -275,15 +275,18 @@ describe('generateAskUserFormat — runtime-failure prose fallback', () => {
test('Spawned: absence-safe interactive fence present (CI env / scripted prompts are not markers)', () => {
expect(out).toMatch(/With neither trigger present, the session is interactive/);
expect(out).toMatch(/CI env vars, scripted-looking or pasted prompts[\s\S]{0,120}NOT spawned markers/);
// The fence classifies the session; it must NOT carry any ask-count
// language in either direction (burn-in run 1 overshot the 4-7 review
// band at 8 with a "when unsure, ask" tail; run 2 undershot at 1 with a
// "HOW MANY questions" mention — the fence defers to the skill's own
// decision-point instructions and stays quota-silent).
expect(out).toMatch(/only classifies the session/);
expect(out).toMatch(/follow the skill's own decision-point instructions/);
// The fence classifies the session and says NOTHING about behavior:
// every behavioral tail we tried skewed question counts somewhere —
// "when unsure, ask" overshot the 4-7 review band (8); "HOW MANY
// questions" undershot (1); "never adds, removes, or batches the
// skill's decision points" broke the paired-finding control in the
// pinned CI lane (5 > 4 — it suppressed the batching the fixture
// expects). The fence ends at "default to interactive."
expect(out).toMatch(/When unsure, default to interactive\./);
expect(out).not.toMatch(/When unsure, ask/);
expect(out).not.toMatch(/HOW MANY/);
expect(out).not.toMatch(/adds, removes, or batches/);
expect(out).not.toMatch(/exactly as written/);
});
// Conductor-default-prose contract (the proactive path, distinct from the