From 16fde5ee6815325e9484e5b9114cc54bc857fb30 Mon Sep 17 00:00:00 2001 From: bdeshi Date: Sun, 2 Aug 2026 23:16:11 +0600 Subject: [PATCH] lift the skill's question cap, which CLAUDE.md lifted and it did not MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit SKILL.md said "maximum three" clarifying questions while CLAUDE.md §4 said "there is no cap" — lifted in 25d7045 and never propagated. The constitution is always loaded and wins, so the skill was simply wrong, and an agent reading only the skill would have split a six-fork request across turns to stay under a cap that no longer exists. The redundancy between the two files is deliberate: the constitution is always in context and the skill is not, so both state the loop. HARNESS.md now records that this deliberate copy has drifted twice — this, and the skill's conflict table still deferring to `[spec]` markers after they were deleted. No gate can catch it, because both files are prose and each is internally consistent, so the only mechanism is grepping the other whenever a rule changes in either. 3 files. No rule changed — one restated correctly. Co-Authored-By: Claude Opus 5 --- .claude/skills/feature-loop/SKILL.md | 5 ++++- HARNESS.md | 8 ++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/.claude/skills/feature-loop/SKILL.md b/.claude/skills/feature-loop/SKILL.md index fa674cb..44686e5 100644 --- a/.claude/skills/feature-loop/SKILL.md +++ b/.claude/skills/feature-loop/SKILL.md @@ -59,7 +59,10 @@ thing, and everything in the Hard row without exception. One conflict is worth o silently reversed decision costs the trust in every other decision. Then decide what you genuinely do not know. Ask **only** questions whose answer changes the code or -the bytes on disk. Maximum three, one message, up front, each with a **bold** default. +the bytes on disk — but ask every one of those. Batched, one message, up front, each with a **bold** +default so silence answers. **There is no cap** (`CLAUDE.md` §4): a request carrying six real forks gets +six questions, and splitting them across turns to look brisk wastes more of the human's time than asking +once. This file said "maximum three" until the cap was lifted in `CLAUDE.md` and not here. Never ask about: anything `conventions.md`, `content-model.md`, or an ADR already decides; naming, formatting, file placement, test style; permission to follow the constitution; "would you like me diff --git a/HARNESS.md b/HARNESS.md index 4151949..01e9b6d 100644 --- a/HARNESS.md +++ b/HARNESS.md @@ -238,6 +238,14 @@ be stale. The harness is code and drifts like code. Same rule as the engine: **a change ships with the docs that describe it, in the same change.** +**The `CLAUDE.md`/`SKILL.md` redundancy is deliberate and has now drifted twice.** The constitution is +always loaded and the skill is not, so both state the loop on purpose (`harness/README.md`, compression +contract) — but a rule changed in one and left in the other is a contradiction the agent obeys at random. +It happened when the clarifying-question cap was lifted in `CLAUDE.md` and left at "maximum three" in the +skill, and again when `[spec]` markers were deleted while the skill's conflict table still deferred to +them. No gate can catch it: both files are prose, and both are internally consistent. Changing a rule in +either means grepping the other, in that change. + - `verify.sh` fails when `CLAUDE.md`, `scripts/` or `.claude/` changes without `HARNESS.md` changing — except `.claude/settings.json`, which is Claude Code's permission list rather than anything about khosra. That exemption is one path: `scripts/budgets.env` and every other file under `scripts/`