You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Config location: docs convention file with a CLAUDE.md pointer as the default, .claude/ as an option #5606
The config-cascade convention (docs/conventions/config-cascade/README.md) puts every plugin's consumer config under .claude/<name> (user, team, local overlay). Plugins reference more than 30 distinct .claude/* files today (for example .claude/source-control.md, .claude/testing.yaml, .claude/topic-docs.yaml), each in its own format.
The owner's preference (2026-09-30): rules like these apply to other agents and tools too, and .claude/ is not a shared or reusable location (tools that write there hit edit restrictions, and other agents do not read it). The default a plugin ships should be:
a prose convention doc under docs/conventions/<concern>.md (for example docs/conventions/testing.md) holding the rules;
a CLAUDE.md or AGENTS.md pointer that loads it on demand ("if testing, read docs/conventions/testing.md"), per progressive disclosure;
a structured file only where performance or readability needs one.
Both routes stay supported, and the location stays configurable per repository.
Constraint
Scripts and hooks cannot follow a CLAUDE.md pointer. The testing scanner and its test-scan hook run on every test-file write under a p95 budget of 150 ms on WSL, so they need a machine-readable block at a known path. A proposed form: the convention doc carries one fenced config block (same keys as today's file) that the script reads directly, with .claude/<name> accepted as a fallback. The read time must be measured inside the hook before adoption.
Scope
Extend the config-cascade contract with a location axis: a docs convention file with a pointer as the default, .claude/<name> as an option, and the resolution order between them.
Adopt it in the testing plugin first (.claude/testing.yaml → docs/conventions/testing.md with a fenced block), including a timing probe inside the hook and a migration note.
List the other plugins' .claude/* surfaces for later adoption; do not migrate them in the same change.
Acceptance
The config-cascade contract names both locations and their precedence.
The testing plugin reads its config from the docs convention file by default, still reads .claude/testing.yaml, and the test-scan hook stays within its latency budget with the new read (measured).
Owner decision (2026-10-01): approved the recommendation ("go with recommended", the owner's reply to the batch decision page that listed this question and its recommendation).
Question: should structured plugin config move out of .claude/ files into a fenced block in docs/conventions/.md, reversing ADR 0018 for structured surfaces, testing first?
Chosen: A. The docs file wins. A new ADR supersedes ADR 0018 for structured surfaces. The default becomes docs/conventions/.md with one fenced config block, and .claude/ is read only when that block is absent. A warning is printed when both exist. Testing goes first: the scanner reads the docs block and falls back to .claude/testing.yaml, and the read is timed inside the hook. The other .claude/* surfaces are only listed for later.
Next: an agent writes the superseding ADR, updates docs/conventions/config-cascade/README.md (location axis, precedence, Expression doctrine, conformance table), adds the fenced-block reader to the testing scanner, times the test-scan hook against its 150 ms p95 budget on WSL, writes a migration note, lists the other .claude/* surfaces, and opens a draft PR that closes this issue.
Activity
kyle-sexton commentedon Oct 1, 2026
Owner decision (2026-10-01): approved the recommendation ("go with recommended", the owner's reply to the batch decision page that listed this question and its recommendation).
Question: should structured plugin config move out of .claude/ files into a fenced block in docs/conventions/.md, reversing ADR 0018 for structured surfaces, testing first?
Chosen: A. The docs file wins. A new ADR supersedes ADR 0018 for structured surfaces. The default becomes docs/conventions/.md with one fenced config block, and .claude/ is read only when that block is absent. A warning is printed when both exist. Testing goes first: the scanner reads the docs block and falls back to .claude/testing.yaml, and the read is timed inside the hook. The other .claude/* surfaces are only listed for later.
Next: an agent writes the superseding ADR, updates docs/conventions/config-cascade/README.md (location axis, precedence, Expression doctrine, conformance table), adds the fenced-block reader to the testing scanner, times the test-scan hook against its 150 ms p95 budget on WSL, writes a migration note, lists the other .claude/* surfaces, and opens a draft PR that closes this issue.
feat(testing): read the team config from a docs convention file block
fix(testing): keep the both-locations warning out of the hook's confi…
docs(testing): record the docs-block read latency and the migration s…
docs(config-cascade): version the location axis and declare the testi…