Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The README, `generate` and `setup` text and the setup evals now call the config cascade's
gitignored `*.local.*` layer the personal override, the marketplace's name for it (#13192).
Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- `setup`, its evals and the `detect.sh` comments and test labels now call the config cascade's
gitignored `ai-slop.local.yaml` layer the personal override, the marketplace's name for it
(#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The five `map-*` skills now say "There is no personal override", the marketplace's name for the
config cascade's gitignored `*.local.*` layer (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
bump: patch
---

### Changed

- The README, the binding-seam reference, `setup` and its evals now call the binding ladder's
untracked `binding.local.json` layer the personal override, the marketplace's name for it
(#13192). The skill's behavior is unchanged. The setup check eval case is renamed
`su-check-reports-personal-override`, and its layer grader now accepts "personal override" in
place of the old word, beside "local" and `binding.local.json`.
Original file line number Diff line number Diff line change
Expand Up @@ -2,4 +2,4 @@
bump: none
---

No release needed (test): add a setup eval case where `/autonomy:setup check` must report `budget_posture` as coming from the local overlay layer, probe `node` on PATH, and write nothing
No release needed (test): add a setup eval case where `/autonomy:setup check` must report `budget_posture` as coming from the personal override, probe `node` on PATH, and write nothing
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
---
bump: patch
---

### Changed

- The README, the config reference, the schema, the `tidy`, `remove-comments` and `setup` skills,
the settings script's comments and test labels and an eval sample now say personal override, the
marketplace's name for the config cascade's gitignored `*.local.*` layer, both for the comment
keys' `code-tidying.local.yaml` and where they state that lanes and upkeep keys have none
(#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The `codify` skill, the findings-buffer contract, both schemas and the settings scripts'
comments and test labels now call the config cascade's gitignored `*.local.yaml` layer the
personal override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The config reference and the `explore` and `setup` skills now call the config cascade's
gitignored `*.local.*` layer the personal override, the marketplace's name for it (#13192).
Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The config reference and the `setup` skill now call the config cascade's gitignored `*.local.*`
layer the personal override, the marketplace's name for it, and an `audit-noise` test fixture
uses the same words (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The README, the schema, the glossary contract and the glossary-settings script's comments and
test name now call the config cascade's gitignored `domain-driven-design.local.yaml` layer the
personal override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference and the `setup` skill now call the config cascade's gitignored `*.local.*`
layer the personal override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The README, the routing and conventions references, the billing and security-posture recipes,
`setup` and its evals now call the config cascade's gitignored `*.local.*` layer the personal
override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- `setup`, the `audit` procedures and the `audit-pass` suppression reference now call the config
cascade's gitignored `*.local.*` layer the personal override, the marketplace's name for it
(#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference now calls the config cascade's gitignored `*.local.*` layer the personal
override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The consumer-config reference, the `realign` skill and the `delta` and `realign` evals now call
the config cascade's gitignored `instruction-placement.local.md` layer the personal override,
the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference now calls the config cascade's gitignored `*.local.*` layer the personal
override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The README, `setup`, its config template and the `audit` and `setup` evals now call the config
cascade's untracked `.claude/mutation-testing.local.md` layer the personal override, the
marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The consumer-config reference and the findings-artifact context now call the config cascade's
gitignored `overengineering.local.md` layer the personal override, the marketplace's name for it
(#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference now calls the config cascade's gitignored `*.local.*` layer the personal
override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
bump: patch
---

### Changed

- The config reference, the `audit` and `setup` skills and evals and the `plugin-quality-r002`
retirement note now call the retired `.claude/plugin-quality.local.md` file a personal override,
the marketplace's name for the config cascade's gitignored layer (#13192). The setup eval is
renamed `retirement-r002-personal-override-warns-never-silent`. Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference and the `setup` skill now call the config cascade's gitignored `*.local.*`
layer the personal override, the marketplace's name for it (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The schema description now calls `<home>/skill-quality.local.yaml` the personal override, the
marketplace's name for the config cascade's gitignored layer (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
bump: patch
---

### Changed

- The resolution-ladder reference, the `check` and `setup` skills and the setup evals now call
`.claude/ecosystems/<ecosystem>.local.yaml` the personal override, the marketplace's name for
the config cascade's gitignored layer (#13192). Behavior is unchanged.
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
bump: patch
---

### Changed

- The config reference and the `setup` skill now call the config cascade's gitignored `*.local.*`
layer the personal override, the marketplace's name for it (#13192). Behavior is unchanged.
4 changes: 2 additions & 2 deletions plugins/ai-briefing/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -71,8 +71,8 @@ Files at `.claude/ai-briefing/` form the default profile. Each
- optional `audience.md` for impact ranking;
- optional declarative `brand.json` and local assets for presentation branding.

These are team-tracked profile files, not a gitignored `*.local.*` cascade
overlay. Selecting a named profile is profile selection, not cascade-layer
These are team-tracked profile files, not a gitignored `*.local.*` personal
override. Selecting a named profile is profile selection, not cascade-layer
resolution. Select a profile through the `active_profile` plugin option or a
per-run `--profile <name>` argument. The per-run argument wins. Claude Code renders the configured
option into the skill; the skill then explicitly sets `AI_BRIEFING_PROFILE` on each launched
Expand Down
2 changes: 1 addition & 1 deletion plugins/ai-briefing/skills/generate/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -124,7 +124,7 @@ export the consumer adds to their shell profile. A global export pins one profil
session and every other tool on that machine, including runs that asked for a different one.

A profile may contain these team-tracked files. They are not a `*.local.*`
cascade overlay:
personal override:

| Artifact | Purpose |
|---|---|
Expand Down
2 changes: 1 addition & 1 deletion plugins/ai-briefing/skills/setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,7 @@ nothing and reports "already configured".
2. **Offer optional profile files.** Offer `audience.md` and declarative `brand.json`, creating only
the files the consumer requests. Keep local logo assets beside `brand.json`. These files are
team-tracked in the selected profile directory. This surface has no gitignored `*.local.*`
overlay.
personal override.
3. **`apply install-build-deps` installs the optional build toolchain.** Parse the subaction
before invoking a shell and never interpolate raw arguments into a command. Without it,
skip this step and change no existing runtime. With it, build and validate a temporary
Expand Down
4 changes: 2 additions & 2 deletions plugins/ai-briefing/skills/setup/evals/evals.json
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
"id": 2,
"name": "optional-branding-and-lens-skipped-cleanly",
"prompt": "/ai-briefing:setup",
"expected_output": "Offers declarative brand.json and audience.md as optional profile files, creates only accepted files, and leaves the neutral defaults intact when declined. Does not recommend a .claude/ai-briefing/**/*.local.* gitignore line or any *.local.* overlay.",
"expected_output": "Offers declarative brand.json and audience.md as optional profile files, creates only accepted files, and leaves the neutral defaults intact when declined. Does not recommend a .claude/ai-briefing/**/*.local.* gitignore line or any *.local.* personal override.",
"files": [],
"expectations": [
"Offers brand.json and audience.md rather than forcing them",
"Writes accepted optional files only to the tracked profile directory",
"Skips declined optional files without writing machine-local configuration",
"Does not recommend a .claude/ai-briefing/**/*.local.* gitignore line or any *.local.* overlay"
"Does not recommend a .claude/ai-briefing/**/*.local.* gitignore line or any *.local.* personal override"
]
},
{
Expand Down
7 changes: 4 additions & 3 deletions plugins/ai-slop/skills/audit/scripts/detect.sh
Original file line number Diff line number Diff line change
Expand Up @@ -205,15 +205,16 @@ while [[ $# -gt 0 ]]; do
esac
done

# --- Config cascade (user-global -> team -> overlay; YAML, legacy JSON) ----------
# --- Config cascade (user-global -> team -> personal override; YAML, legacy JSON) -

REPO_ROOT="${CLAUDE_PROJECT_DIR:-}"
if [[ -z "$REPO_ROOT" ]]; then
REPO_ROOT="$(git -c core.fsmonitor= -c core.hooksPath=/dev/null rev-parse --show-toplevel 2>/dev/null || pwd)"
fi

# Config-cascade step 2: a home or non-repo root has no team or overlay layer, and
# a team or overlay file that is the user-global file is not read a second time.
# Config-cascade step 2: a home or non-repo root has no team layer or personal
# override, and a team file or personal override that is the user-global file is
# not read a second time.
# shellcheck source=../../../lib/config-root.sh
source "$SCRIPT_DIR/../../../lib/config-root.sh"
USER_CFG="${HOME:-/nonexistent}/.claude/ai-slop.json"
Expand Down
19 changes: 10 additions & 9 deletions plugins/ai-slop/skills/audit/scripts/detect.test.sh
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,9 @@ export HOME="$TEST_TMPDIR/home"
export CLAUDE_PROJECT_DIR="$TEST_TMPDIR/noconfig"
mkdir -p "$HOME" "$CLAUDE_PROJECT_DIR"

# A fixture root that carries a team or overlay config layer must be a git working
# tree: config-cascade step 2 gives a non-repo root no team or overlay layer.
# A fixture root that carries a team config layer or personal override must be a git
# working tree: config-cascade step 2 gives a non-repo root no team layer or personal
# override.
make_repo() {
git init -q "$1" >/dev/null 2>&1
}
Expand Down Expand Up @@ -555,7 +556,7 @@ assert_not_contains "phrase hygiene: empty-string element does not flood clean p

# Wholesale replacement includes the empty override: a later layer's explicit
# `"phrase_add": []` clears the inherited list (key presence decides, not value
# emptiness). The local overlay is the later layer.
# emptiness). The personal override is the later layer.
CLRREPO="$TEST_TMPDIR/phrase-clear"
mkdir -p "$CLRREPO/.claude"
make_repo "$CLRREPO"
Expand Down Expand Up @@ -734,8 +735,8 @@ assert_contains "show-config: names the supplying layer" "$out" "$cfgdir/ai-slop
assert_contains "show-config: effective threshold shown" "$out" "threshold_ai_vocabulary=999"
assert_contains "show-config: disabled rules shown" "$out" "disabled_rules=rule-significance-inflation"

# Config-cascade step 2: a home or non-repo root has no team or overlay layer, and
# the user-global file is read once, never again as team.
# Config-cascade step 2: a home or non-repo root has no team layer or personal
# override, and the user-global file is read once, never again as team.
HOMEROOT="$TEST_TMPDIR/home-root"
mkdir -p "$HOMEROOT/.claude"
printf '%s\n' '{ "thresholds": { "ai_vocabulary": 777 } }' >"$HOMEROOT/.claude/ai-slop.json"
Expand Down Expand Up @@ -906,12 +907,12 @@ assert_contains "yaml: a flow-sequence list is read" "$out" "excluded_paths=vend
assert_contains "yaml: a per-rule glob list names its layer" "$out" "rule_allowed_paths[rule-ai-vocabulary]=docs/marketing/** [layer: $YREPO/docs/conventions/ai-slop.yaml]"
assert_not_contains "yaml: an empty per-rule list leaves the rule unexempted" "$out" "rule_allowed_paths[rule-em-dash]"

# The personal YAML overlay refines the team YAML per key and is named for what it set.
# The personal YAML override refines the team YAML per key and is named for what it set.
printf '%s\n' 'thresholds:' ' copulative_avoidance: 7' 'disabled_rules: []' >"$YREPO/docs/conventions/ai-slop.local.yaml"
out="$(CLAUDE_PROJECT_DIR="$YREPO" bash "$DETECT" --show-config 2>&1)"
assert_contains "yaml: the overlay supplies its own scalar" "$out" "threshold_copulative_avoidance=7 (rule rule-copulative-avoidance) [layer: $YREPO/docs/conventions/ai-slop.local.yaml]"
assert_contains "yaml: the team YAML still supplies the key the overlay left" "$out" "threshold_ai_vocabulary=2.5 (rule rule-ai-vocabulary) [layer: $YREPO/docs/conventions/ai-slop.yaml]"
assert_contains "yaml: an explicit empty list in the overlay clears the team list" "$out" "disabled_rules= [layer: $YREPO/docs/conventions/ai-slop.local.yaml]"
assert_contains "yaml: the personal override supplies its own scalar" "$out" "threshold_copulative_avoidance=7 (rule rule-copulative-avoidance) [layer: $YREPO/docs/conventions/ai-slop.local.yaml]"
assert_contains "yaml: the team YAML still supplies the key the personal override left" "$out" "threshold_ai_vocabulary=2.5 (rule rule-ai-vocabulary) [layer: $YREPO/docs/conventions/ai-slop.yaml]"
assert_contains "yaml: an explicit empty list in the personal override clears the team list" "$out" "disabled_rules= [layer: $YREPO/docs/conventions/ai-slop.local.yaml]"

# phrase_remove alone names its own layer on the model_phrases line, not only phrase_add's.
printf '%s\n' 'phrase_remove:' ' - "(the|my) honest take"' >"$YREPO/docs/conventions/ai-slop.local.yaml"
Expand Down
4 changes: 2 additions & 2 deletions plugins/ai-slop/skills/setup/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ detector's `--show-config` via Bash or read the three layers directly.

The ai-slop detector ships neutral defaults. A consumer repo declares its own exemptions and
tuning in `<home>/ai-slop.yaml`, resolved per the config-cascade convention: team
(`<home>/ai-slop.yaml`, tracked) and personal overlay (`<home>/ai-slop.local.yaml`, gitignored),
(`<home>/ai-slop.yaml`, tracked) and personal override (`<home>/ai-slop.local.yaml`, gitignored),
where `<home>` is the convention home the repository binds in its instruction file
(`docs/conventions` by default). The file is validated by the plugin's
`schemas/ai-slop.schema.json`. Later layers refine earlier ones per key.
Expand Down Expand Up @@ -70,7 +70,7 @@ Everything `check` does, then the confirmed write:
1. Interview the user for what they want changed. For em-dash exemptions, ask for the documents
that genuinely require em dashes; the default posture is that most work does not.
2. Write ONLY the team layer (`<home>/ai-slop.yaml`), showing the diff and getting explicit
confirmation before writing. Never write the personal overlay on the user's behalf; name it
confirmation before writing. Never write the personal override on the user's behalf; name it
as an option the user edits themselves.
3. Re-run `--show-config` via Bash (the pre-computed output predates the write) and report the
new effective state. Then run the tracked-file pair on
Expand Down
4 changes: 2 additions & 2 deletions plugins/ai-slop/skills/setup/evals/evals.json
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
"id": 1,
"name": "check-is-read-only",
"prompt": "/ai-slop:setup check",
"expected_output": "The current effective configuration is reported — each key with the layer supplying it (user-global, team, local overlay), absent layers named, drift flagged (unknown keys, dead globs, unsupported em-dash threshold) — and no file is written.",
"expected_output": "The current effective configuration is reported — each key with the layer supplying it (user-global, team, personal override), absent layers named, drift flagged (unknown keys, dead globs, unsupported em-dash threshold) — and no file is written.",
"files": [],
"narration": true,
"expectations": [
Expand All @@ -23,7 +23,7 @@
"narration": true,
"expectations": [
"Shows the proposed team-layer diff and waits for explicit confirmation before writing",
"Writes ONLY docs/conventions/ai-slop.yaml, never the user-global or personal overlay layers",
"Writes ONLY docs/conventions/ai-slop.yaml, never the user-global layer or personal override",
"Adds the exemption under em_dash_allowed_paths rather than excluded_paths (the file should still be scanned by other rules)"
]
},
Expand Down
2 changes: 1 addition & 1 deletion plugins/architecture/skills/map-components/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,7 +50,7 @@ not a task list:
3. The printed home is repo-relative: join it to the root, then pass
`<root>/<home>/authoring-formats/README.md` to the resolver.
4. Layer order is one layer deep: an explicit `--dialect` argument, then the team convention doc.
There is no personal overlay.
There is no personal override.
5. `diagram_dialect.system` has NO default. Allowed values are `likec4` and `c4-plantuml`. When it
is unset, write `components.md` with the prose and tables and draw no diagram block.
6. Degrade soft, and say so. No pointer, no doc, no key, or an unrecognized value (mermaid
Expand Down
Loading
Loading