chore(prompt): trim performance-neutral stage operating-guidance block

Vikunja #169 audition result. The 5x5 controlled A/B
(docs/qa/QA-stage-prompt-audition-results-2026-07-16.md) found the curated
guidance block performance-neutral: 5/5 build success both variants, cost
differences within heavy-tailed noise. Trimmed to the single sentence the
gates don't already enforce (scaffolding-scope boundary); dropped the
read-before-write / verify-before-complete / use-exact-feedback nudges that
restate gate-enforced behavior. ON run 3 proved prose doesn't stop failure
loops — deterministic defenses do (filed Vikunja #191/#192, unblocked #78).
This commit is contained in:
2026-07-16 18:38:16 +04:00
parent 53d8108189
commit a2b97221d5
3 changed files with 159 additions and 12 deletions
@@ -76,11 +76,15 @@ internal val GATE_REQUIRED_CAPABILITY: Map<String, String> = mapOf(
WORKSPACE_PRECONDITION_GATE to "file_write",
)
// ponytail: trimmed to the single non-redundant sentence after the 2026-07-16 audition
// (docs/qa/QA-stage-prompt-audition-results-2026-07-16.md) found the full block performance-neutral —
// the read-before-write / verify-before-complete / use-exact-feedback nudges just restate behavior the
// gates already enforce, and run 3 proved prose doesn't stop failure loops (deterministic defenses do).
// Only the scaffolding-scope boundary encodes a decision no gate makes. Delete outright if a future
// multi-fixture audit still shows no clarity value.
internal const val CURATED_STAGE_OPERATING_GUIDANCE = """## Operating guidance
Verify the current workspace before declaring completion. Read before modifying existing files.
When the authoritative intent plainly requires project setup, creating its manifest, configuration,
or entry file is in scope; do not spend turns re-deciding that settled boundary. Re-observe facts
instead of assuming them, and use the exact gate/tool feedback to make the smallest effective fix."""
or entry file is in scope; do not spend turns re-deciding that settled boundary."""
// Deterministic failure category from the gate id (no LLM — keeps routing off the untrusted path).
internal fun ticketCategory(gate: String): String = when (gate) {