Repository navigation
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Description
Parent
Refs #5906
Outcome
Neither plugin reads a team setting from a .claude/ file:
- code-metrics reads its team layer only from
docs/conventions/code-metrics.yaml. Its read of the older
.claude/code-metrics.yaml(plugins/code-metrics/scripts/resolve-config.py:11-12,250-251) has shipped for more than
one release (0.6.0, 2026-10-13,plugins/code-metrics/CHANGELOG.md:89,102), so it is dropped, and this repository's copy,
identical todocs/conventions/code-metrics.yaml, is deleted. - mutation-testing reads its team layer from
docs/conventions/mutation-testing.yaml, validated by a new
plugins/mutation-testing/schemas/mutation-testing.schema.json, with.claude/mutation-testing.mdread only while
the YAML is absent, for one release. Today.claude/mutation-testing.mdis its only team layer
(plugins/mutation-testing/skills/setup/SKILL.md:26-28), a fenced YAML block in Markdown.
Decisions
- Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906 body, Scope 3: each file moves to its home "with a compatibility read of the old file for one release". The
2026-10-04 comment sets
that home todocs/conventions/<concern>.yaml, validated by a JSON Schema. - ADR 0064 Decision 6: the schema sits at
plugins/<plugin>/schemas/<concern>.schema.json, which
scripts/check-convention-yaml.shfinds by that path (scripts/check-convention-yaml.sh:15-20). - mutation-testing keeps its key names (
tool,command,diff-target,mutate,operators,timeout-ms,
max-mutantsand the rest of the setup template), so a carried value does not change.setup applywrites the YAML
and, on its first write, carries every key of an existing.claude/mutation-testing.md, as code-metrics' setup does
(plugins/code-metrics/skills/setup/SKILL.md:84-87). - This repository's
.claude/mutation-testing.mdstays until chore(ci): read the post-merge mutation lane's config from docs/conventions/mutation-testing.yaml #12289, because the post-merge mutation lane's test
reads it (.github/scripts/post-merge-test-mutation/report.test.mjs:304,313), and moving it needs a workflow edit
the issue lane cannot push (chore(ci): read the post-merge mutation lane's config from docs/conventions/mutation-testing.yaml #12289). - A GitHub code search finds neither old file in another melodic-software repository, only this one and its eval fixtures.
Key interfaces
- code-metrics:
scripts/resolve-config.pyandscripts/test_resolve_config.py:463-520,scripts/dispatch.sh:30-31
andscripts/dispatch.test.sh(its.claude/code-metrics.yamlconfig cases, for example lines 578 and 687),
skills/setup/scripts/setup-check.sh:108-111andsetup-check.test.sh:82-85,skills/setup/SKILL.md:14-17,44,
README.md:77-79,reference/config.md:20-21. - mutation-testing:
skills/setup/SKILL.md(the config merge model, lines 26-28 and 236),
skills/setup/templates/config-template.md,skills/audit/SKILL.md:191andskills/audit/context/config-fallback.md,
which resolve the config through that merge model,README.md:57, and the eval fixture
skills/audit/evals/fixtures/exercised-scope/.claude/mutation-testing.mdwithskills/audit/evals/evals.json. - testing: the cleanup eval fixtures
plugins/testing/skills/cleanup/evals/fixtures/cleanup/.claude/mutation-testing.md,
fixtures/mutation-testing-bash.md,fixtures/mutation-testing-dotnet.mdand the prompts in
plugins/testing/skills/cleanup/evals/evals.jsonthat copy them to.claude/mutation-testing.md. - Docs:
docs/contracts/config-cascade/README.md:650,787,docs/contracts/shell-test-helpers/README.md:122,
plugins/review/skills/quality-gate/evals/evals.json:238.
Done when
-
scripts/run-test-file.sh plugins/code-metrics/scripts/test_resolve_config.pyexits 0 with a case where only.claude/code-metrics.yamlexists and the team layer resolves as absent. -
scripts/run-test-file.sh plugins/code-metrics/scripts/dispatch.test.shexits 0. -
scripts/run-test-file.sh plugins/code-metrics/skills/setup/scripts/setup-check.test.shexits 0. -
scripts/run-test-file.sh plugins/code-metrics/skills/setup/scripts/test_setup_apply.pyexits 0. -
git ls-tree --name-only HEAD .claude/does not listcode-metrics.yaml. -
plugins/mutation-testing/schemas/mutation-testing.schema.jsondefines every key of the setup template, andscripts/check-convention-yaml.sh --checkexits 0. -
git grep -n "docs/conventions/mutation-testing.yaml" -- plugins/mutation-testing/skills/setup/SKILL.mdprints the config merge model's team-layer line. -
git grep -nE "\.claude/code-metrics\.yaml" -- plugins docs/contracts ":!*CHANGELOG.md"prints only user-global-layer lines (a~/,$HOME_DIRor fake-home$homepath), setup lines that report or move the retired file, andplugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_risk.py:2554. -
git grep -nE "\.claude/mutation-testing\.md" -- plugins docs/contracts ":!*CHANGELOG.md"prints only lines that name it as the older team file read whiledocs/conventions/mutation-testing.yamlis absent, setup lines that move it, and lines that name~/.claude/mutation-testing.mdas never read. - The PR body lists each migrated setting with its new
docs/conventions/<concern>.yamlhome and schema. -
scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.
Out of scope
- The post-merge mutation lane's reader, its test, prompt and workflow comment, this repository's
docs/conventions/mutation-testing.yaml, and deleting.claude/mutation-testing.md(chore(ci): read the post-merge mutation lane's config from docs/conventions/mutation-testing.yaml #12289). - The arid-node record
.claude/mutation-testing-arid.md, a finding-suppression record, not a setting
(docs/contracts/config-cascade/README.md:787). - The
.claude/<concern>.local.*personal overlays (ADR 0075 fix 8), which the post-merge lane writes
(.github/workflows/post-merge-test-mutation.yml:188). - The user-global
~/.claude/code-metrics.yamllayer (ADR 0075 fix 9).
Posted by the issue-triage session. This was generated by AI.
Metadata
Metadata
Assignees
Labels
priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.A maintainer confirmed the item is real and in scope; ready to be worked.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.A briefed fix or small feature; blast radius bounded by the brief, tests exist.
Type
Fields
Work status
confirmed
Activity
github-actions commentedon Nov 2, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Medium
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: move code-metrics and mutation-testing team settings to
docs/conventions/<concern>.yaml. That means dropping code-metrics' read of the old.claude/code-metrics.yaml, and adding a mutation-testing schema with a one-release fallback read of.claude/mutation-testing.md. The outcome and done-when checks are exact, and the issue leaves no design choice open.A previous pull request (#12306) merged with
Refs:, so some of this may already be done. A maintainer should check what is left against the done-when list. No decision comment has been recorded. I found no likely duplicates.Automated triage, applied by the lanes App.
github-actions commentedon Nov 2, 2026
github-actions commentedon Nov 2, 2026
melodic-automation-lanes commentedon Nov 2, 2026
The lanes App's pull request #12306 merged with
Refs:, so this issue stays open and nothing starts the lane on it again. work-unblock removedstatus: readyandagent-ready, so the hourly triage sweep sends it back to intake triage. Admission then parks it atstatus: confirmedfor a check of what that pull request left, until a**Decision recorded.**comment says what is left or someone closes it.github-actions commentedon Nov 2, 2026
The triage sweep dispatched intake triage for this issue (attempt 1 of 2).
melodic-automation-lanes commentedon Nov 2, 2026
Not admitted to the issue lane: merged pull request #12306 names it with
Refs:after its newest decision or refinement comment, so its work may already be done: close the issue if it is, or post a comment whose first line is**Decision recorded.**saying what is left, which sends it back through intake. Admission takes the issue once each of those is met, when intake triages it again (.github/actions/resolve-config/admission-rules.json).melodic-automation-lanes commentedon Nov 2, 2026
The latest triage verdict holds nothing: admission moved the issue to
status: confirmed; its comment says why.