Repository navigation
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Description
Refs #9737
Outcome
/ai-slop:audit reads its team and personal layers only from <home>/ai-slop.yaml and <home>/ai-slop.local.yaml. The repo-relative .claude/ai-slop.json and .claude/ai-slop.local.json fallbacks are gone. They were deprecated in ai-slop 0.15.0 (plugins/ai-slop/CHANGELOG.md:120-131), and 0.16.9 has shipped since. The em-dash purge gate, which copies this repository's detector config and reads it through that fallback, moves to the YAML, so the CI gate's verdict does not change. The user-global $HOME/.claude/ai-slop.json layer stays (detect.sh:220, ADR 0075).
Change
plugins/ai-slop/skills/audit/scripts/detect.sh:233: drop the.claude/$_name.jsonfallback, and update the comment at :225-226. KeepUSER_CFG(:220) and the jq path for the JSON user layer.scripts/check-purged-em-dashes.sh:- Today it defaults to
.claude/ai-slop.json(:115), exits 2 when that file is unreadable (:137), and writes its throwaway layer to$TMP/root/.claude/ai-slop.json(:337), which detect.sh will no longer read. - Make it read
docs/conventions/ai-slop.yamland write its throwaway layer as$TMP/root/docs/conventions/ai-slop.yaml. Override the same keys: replacedisabled_ruleswith every slug exceptrule-em-dash, stripem_dash_allowed_pathsandrule_allowed_paths["rule-em-dash"], and keepexcluded_pathsandthresholds. jq cannot read YAML, so state the mechanism. One option keeps the copy-not-synthesize property: copy the tracked YAML unchanged to$TMP/root/docs/conventions/ai-slop.yamland write the overrides as$TMP/root/docs/conventions/ai-slop.local.yaml, after confirming inlib/cascade-read.shthat a later layer's empty list or slug entry replaces an earlier one and that yaml-subset accepts[]. Keep the jq prerequisite (:133-136), or changescripts/check-script-contract.test.sh:109to match. - Update its header comment (:45),
scripts/check-purged-em-dashes.test.sh:62,77,128-130,345,365,375,386andscripts/em-dash-purged-paths.txt:46,54.
- Today it defaults to
- Fixtures that configure a temp repo through
.claude/ai-slop.json(detect.test.sh,cross-check.test.sh) move todocs/conventions/ai-slop.yaml. A fixture may keep writing the old file only to assert that the file is not read. A case that tests the JSON parser itself (for exampledetect.test.sh:583, a truncated JSON) moves to the user-global$HOME/.claude/ai-slop.jsonlayer, which jq still reads. - Docs that describe the fallback:
plugins/ai-slop/schemas/ai-slop.schema.json:5description.plugins/ai-slop/README.md:62-64.- The fallback clause at
plugins/ai-slop/skills/setup/SKILL.md:28-29. Keep setup's offer to carry an old JSON file into the YAML: the 2026-11-02 decision on chore: drop the one-release .claude config reads and this repository's old config files #9737 keeps setup lines that report or move a retired file. Setup's eval cases do not change. docs/contracts/config-cascade/README.md:658,781.- The
docs/conventions/ai-slop.yaml:2-5header: drop the sentence that names the legacy.claude/ai-slop.jsonand the 'made in both files' sentence.
- Leave
.claude/ai-slop.jsonin place. The lane mounts.claude/read-only. After this merges, the host slice deletes it. - Add an ai-slop changelog fragment.
Done when
-
git grep -nP '(?<!~/)(?<!HOME/)(?<!\}/)\.claude/(ai-slop(\.local)?\.json|\$_name\.json)' -- plugins/ai-slop scripts docs/conventions/ai-slop.yaml docs/contracts ':!*CHANGELOG*' ':!*.test.sh'prints nothing (onorigin/mainit prints 11 lines in 6 files). -
git grep -n 'beside them is absent' -- plugins/ai-slop ':!*CHANGELOG*'prints nothing. -
git grep -n 'USER_CFG="${HOME:-/nonexistent}/.claude/ai-slop.json"' -- plugins/ai-slop/skills/audit/scripts/detect.shprints one line (the user layer stays). -
git diff --name-only origin/main...HEAD -- .claude plugins/ai-slop/skills/setup/evals plugins/ai-slop/evalsprints nothing. -
grep -n '^## \[0.16.0\]' plugins/ai-slop/CHANGELOG.mdprints one line (a release after the 0.15.0 YAML reader). -
bash scripts/run-test-file.sh plugins/ai-slop/skills/audit/scripts/detect.test.shexits 0. -
bash scripts/run-test-file.sh plugins/ai-slop/skills/audit/scripts/cross-check.test.shexits 0. -
bash scripts/run-test-file.sh scripts/check-purged-em-dashes.test.shexits 0. -
bash scripts/run-test-file.sh scripts/check-script-contract.test.shexits 0. -
bash scripts/check-purged-em-dashes.shexits 0. -
scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.
Metadata
Metadata
Assignees
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.work-class: structuralRefactors, migrations, contract changes; cross-cutting and hard to reverse.Refactors, migrations, contract changes; cross-cutting and hard to reverse.
Type
Fields
Work status
agent-ready
Activity
github-actions commentedon Nov 5, 2026
Proposed work class: work-class: structural
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: remove the deprecated repo-relative
.claude/ai-slop.jsonand.claude/ai-slop.local.jsonfallbacks from/ai-slop:audit. The user-global JSON layer stays. The em-dash purge gate moves to the YAML layers, and the affected tests, fixtures, docs and changelog fragment are updated. The issue gives exact done-when checks and names no open design choices. It is a child of #9737, which is the parent tracker, not a duplicate. I found no other open issue asking for the same change. Siblings #13472 to #13475 cover other plugins' files.Automated triage, applied by the lanes App.
github-actions commentedon Nov 5, 2026
github-actions commentedon Nov 5, 2026