Skip to content

principles: add "Avoiding prompt fatigue" as §1, ahead of the security principle (PMC vote required) - #1291

Draft
potiuk wants to merge 2 commits into
mainfrom
principles/avoid-prompt-fatigue
Draft

potiuk wants to merge 2 commits into
mainfrom
principles/avoid-prompt-fatigue

Conversation

@potiuk

@potiuk potiuk commented Sep 19, 2026

Copy link
Copy Markdown
Member

Summary

  • Principle amendment proposal — needs a PMC vote before merge. Adds ## 1. Avoiding prompt fatigue to PRINCIPLES.md, ahead of "Privacy, security, and supply-chain integrity ship before features". Per Amending these principles, adding a principle and changing the ordering require a [VOTE] on private@ mirrored to dev@, ≥3 binding +1, no binding -1, a 72-hour window, and the result recorded on dev@ and linked from the merge commit.
  • Why now: fix(agent-isolation): list gh write subcommands in ask instead of a catch-all that prompted on every read #1290 found that the reference config's catch-all Bash(gh *) ask rule had been prompting on every gh read since it was written, because Claude Code evaluates ask before allow regardless of specificity. Nobody noticed for months because the prompts were being clicked through — which is RFC-AI-0002 § Layer 3a's prompt-fatigue argument playing out on the framework's own maintainers. The principle names the rule the fix relied on: read-only actions do not prompt, writes prompt once in a judgeable shape, bulk work is a bounded operation, and a prompt on a read is a defect of the same severity as a missing prompt on a write.
  • Placement before the security principle is deliberate and is the part most worth debating on the vote thread: earlier principles outrank later ones, and the claim here is that a confirmation the human has learned to click through is no control at all, so keeping prompts meaningful is a precondition of the security principle, not a competitor to it.

Type of change

  • Cross-cutting (RFC, AGENTS.md, sandbox, privacy-LLM)
  • Documentation (docs/, README.md, CONTRIBUTING.md)
  • Skill change (.claude/skills/<name>/) — eval fixtures updated below
  • Tool / bridge contract (tools/<system>/*.md)
  • Python package (tools/*/ with pyproject.toml)
  • Groovy reference impl
  • Project template (projects/_template/)
  • CI / dev loop (prek, workflows, validators)
  • Other:

Test plan

RFC-AI-0004 compliance

  • HITL — the principle strengthens the confirmation gate by keeping it readable; it does not remove any prompt on a write
  • Sandbox — n/a
  • Vendor neutrality — no project-specific values
  • Conversational + correctable — n/a
  • Write-access discipline — n/a
  • Privacy LLM — n/a

Linked issues

Refs #1290 (the fix that motivated this), #1289.

Notes for reviewers (optional)

  • Vote threads: a [VOTE] on private@magpie.apache.org mirrored on dev@magpie.apache.org will follow this PR; the merge commit must link the recorded result.
  • If the PMC prefers the principle after the security principle, only PRINCIPLES.md and the renumbering change; the text stands either way. The ordering argument is in the Summary.
  • docs/rfcs/RFC-AI-0002.md § Layer 3a gains one sentence linking the principle; no other RFC text changes beyond anchor numbers.

🤖 Generated with Claude Code

…atch-all that prompted on every read

The reference `.claude/settings.json` kept `Bash(gh *)` in `permissions.ask`
on the assumption that the more specific read-only `allow` rules
(`gh pr view`, `gh issue list`, …) would exempt reads. They never did:
Claude Code evaluates deny, then ask, then allow, and "a matching ask rule
prompts even when a more specific allow rule also matches the same call".
So every gh call prompted, reads included, in every permission mode — and
because ask rules merge from every settings source, a user-scope file
could not undo it.

- .claude/settings.json + tools/sandbox-lint/expected.json: the catch-all
  becomes 94 explicit gh write subcommands (`gh api` included — GET and
  POST look the same to a prefix rule). Read-only subcommands now reach
  the allow list; a subcommand in neither list falls through to the
  mode's default.
- sandbox-lint: new invariant rejects `Bash(gh *)` in ask, with a test;
  the old test that pinned the catch-all is replaced.
- isolated-setup-verify: check 11b fails on a catch-all in any scope.
- isolated-setup-doctor: the gh probe warns when a catch-all is present.
- docs: the annotated reference config, the verification prompt, the
  catalog's gh entry and RFC-AI-0002 § Layer 3a now state the real
  precedence rule; the RFC's example `gh api * -X *` patterns (middle
  wildcards, which prefix rules do not support) become `gh api *`.
- specs: agent-isolation-sandbox and sandbox-diagnostics updated; the
  validation script asserts no catch-all plus explicit writes.

Generated-by: Claude Opus 5
…y principle

A confirmation prompt is a control only while the human still reads it.
The catch-all `Bash(gh *)` ask rule that #1290 removes prompted on every
read, and the hundredth prompt was being approved as reflexively as the
first — the exact failure RFC-AI-0002 § Layer 3a describes. This makes
avoiding that failure a principle in its own right, placed before
"Privacy, security, and supply-chain integrity ship before features"
because it is what keeps that principle's confirmations meaningful.

Adding a principle and changing the ordering both require a PMC vote
per "Amending these principles"; this PR is the proposal, and it merges
only after the vote result is recorded on dev@.

The insertion renumbers §1–§18 to §2–§19. Every anchor of the form
`PRINCIPLES.md#N-…`, every bare `PRINCIPLES.md#N`, every `§N` on a line
that links the file, and the three unlinked "Principle N" mentions in the
optimize-skill docs are updated to match (21 files). RFC-AI-0002 § Layer 3a
now links the new principle.

Generated-by: Claude Opus 5
@potiuk
potiuk marked this pull request as draft September 19, 2026 11:56
Base automatically changed from fix/gh-ask-rule-precedence to main September 19, 2026 12:18
@potiuk

potiuk commented Sep 19, 2026

Copy link
Copy Markdown
Member Author

Converted to draft while the Vote is runnning https://lists.apache.org/thread/bl8lhj9c0jls8h5s3172vw6gg1pvwkwb

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant