Repository navigation
Closed
Task
3 / 33 of 3 issues completed
Copy link
Labels
needs-triageNot yet classified. Floor until a type and one priority tier are set.Not yet classified. Floor until a type and one priority tier are set.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.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
Depends on
- none: on the frontier now
Outcome
The attribution settings this repository keeps in .claude/attribution.json resolve from docs/conventions/attribution.yaml,
validated by a schema the plugin ships. The old location is read only when the YAML is absent, for one release.
The setup skill, if the plugin has one, writes the YAML.
Decisions
- ADR 0064 Decision 1: a plugin's team settings live in one
docs/conventions/<concern>.yaml, validated by a
JSON Schema atplugins/<plugin>/schemas/<concern>.schema.json(Decision 6), checked in CI by
scripts/check-convention-yaml.sh(Decision 7). Script readers use the shared readerlib/parse-concern-value.sh. - ADR 0075: layers are plugin default <
userConfig< team<home>/<concern>.yaml< personal
<home>/<concern>.local.<ext>; every resolver reports the layer that supplied each value. - Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906 (comment 2026-10-04): each reader keeps reading the old file for one release when the new file is
absent, and this repository keeps its old file until the cleanup slice.
Key interfaces
- The attribution audit's config reader and reference.
Done when
-
docs/conventions/attribution.yamlcarries every value of.claude/attribution.jsonandscripts/check-convention-yaml.sh --checkexits 0 againstplugins/attribution/schemas/attribution.schema.json. -
scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/check-stamps.test.shexits 0. -
scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/list-corpus.test.shexits 0. -
scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/sweep-ledger.test.shexits 0. - The reader's tests include: the YAML wins when both exist, the old location is read when the YAML is absent, and the resolver names the layer that supplied each value.
- No skill body tells an agent to read or write the old location:
git grep -nfor it underplugins/attributionprints only compatibility-read code, its tests and changelog lines. - The PR body lists each migrated setting with its new home and schema.
-
scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.
Out of scope
- Deleting this repository's old file or block (the cleanup slice under Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906).
Metadata
Metadata
Assignees
Labels
needs-triageNot yet classified. Floor until a type and one priority tier are set.Not yet classified. Floor until a type and one priority tier are set.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.status: readyTriaged, unblocked, and fully specified; eligible to pick up.Triaged, unblocked, and fully specified; eligible to pick up.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
No fields configured for Task.
Activity
melodic-automation-lanes commentedon Oct 24, 2026
The work-resolve-issue run that
agent-readystarted failed or was cancelled before it reported, or it stopped or the token broker refused it because its workflow files differ from main's. work-unblock removed and addedagent-readyback to start a fresh run on main's workflow files. It does this once per version of those files, so if this run fails the same way, a person looks at it.melodic-automation-lanes commentedon Oct 24, 2026
The work-resolve-issue lane stopped on its usage limit, not on this issue. It keeps
agent-ready, and work-unblock starts it again after 2026-10-25T16:00:00Z.Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40140298272
11 remaining items
kyle-sexton commentedon Oct 28, 2026
Re-triage. The owner restated on 2026-10-27 when an item stops for them:
Structural edit first: the poster files the three slices below as sub-issues of #9729, with their blocked-by edges, before any comment or label change. #9729 becomes their tracker. It closes when all three close and never takes
agent-readyitself.Intent (the body's Outcome, unchanged): the attribution settings this repository keeps in
.claude/attribution.jsonresolve fromdocs/conventions/attribution.yaml, validated by a schema the plugin ships. The old location is read only when the YAML is absent, for one release. The setup skill writes the YAML. Deleting this repository's old file stays out of scope (the cleanup slice under #5906).Decided: the work is too large for one run, not unclear. The lane hit turn cap 75 twice (https://github.com/melodic-software/claude-code-plugins/actions/runs/40186537977 and https://github.com/melodic-software/claude-code-plugins/actions/runs/40190696088, both in the 2026-10-25 lane comments). Its two partial branches,
work-resolve-issue/issue-9729-40186537977-1andwork-resolve-issue/issue-9729-40190696088-1, each touch 22 to 24 files with about 1,400 inserted lines (git diff --statagainst their merge base with origin/main). Both mix the reader, the schema, the setup skill, its evals and the README in one change. No question for the owner is open, soneeds-humancomes off.Decided: 4 runtime readers, 1 shared resolver, 1 writer, and 6 prose files. Basis:
cfg_layers_initinplugins/attribution/skills/audit/scripts/lib.sh:38-45lists.claude/attribution.jsonlayers for every script.check-stamps.sh:137and:151(2 keys,:175,:186);list-corpus.sh:126and:146(1 key,:156);score-golden.sh:102and:108(3 keys,:118-120);sweep-ledger.sh:124and the inline loop at:137-138(1 key). All underplugins/attribution/skills/audit/scripts/.applywrites.claude/attribution.json(plugins/attribution/skills/setup/SKILL.md:37).plugins/attribution/README.md:88,plugins/attribution/retirements.yaml:14,plugins/attribution/skills/audit/SKILL.md:237,plugins/attribution/skills/audit/reference/source-fetch.md:145,plugins/attribution/skills/setup/SKILL.md:2,15,37,73,74,plugins/attribution/skills/setup/evals/evals.json:85-90.docs/conventions/attribution.yamland noplugins/attribution/schemas/(git ls-tree -r origin/main).Decided: one value reader in
lib.shthat reads both formats and names the layer behind each value, replacing the four per-script jq readers above. A later change of format or home then touches one file. The fallback is per file, not per key: for each layer, the YAML is read when it exists and the old JSON only when it does not, so one file owns each layer's values. Basis: the body's Outcome ("The old location is read only when the YAML is absent") and the precedent inplugins/ai-slop/skills/audit/scripts/detect.sh:224-233, which reads<home>/ai-slop.yamland falls back to.claude/ai-slop.jsononly when the YAML is absent. The plugin's copies of the shared YAML readers come throughscripts/shared-copies.txt(scripts/shared-copies.txt:1-4), as ai-slop's do.Decided:
scripts/check-convention-yaml.shtreats a convention YAML with no schema as a finding (scripts/check-convention-yaml.sh:20-21) and finds the schema atplugins/<concern>/schemas/<concern>.schema.json(scripts/check-convention-yaml.sh:16). CI already runs it (.github/workflows/pr-require-checks.yml:675), so no slice edits a workflow and none needsBuild: host session. The YAML lands only after slice 1, because before the reader exists it would be an unread second copy of every value.Decided: three slices. Basis: the body's own "Done when" lines, with no added scope. No slice is a deletion; that is the Migrate per-skill .claude config files to userConfig, one conventions doc, or the cascade (ADR 0018) #5906 cleanup slice.
Slice 1: the attribution audit reads its settings through one reader, YAML first. Blocked by: none.
Scope:
lib.shresolves each layer's YAML (<home>/attribution.yaml,<home>/attribution.local.yaml, per ADR 0075) and falls back to the old JSON file when the YAML is absent; one shared reader serves all four scripts,score-golden.shincluded. No YAML is committed in this slice, so this repository still reads.claude/attribution.jsonand behavior is unchanged.scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/check-stamps.test.shexits 0.scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/list-corpus.test.shexits 0.scripts/run-test-file.sh plugins/attribution/skills/audit/scripts/sweep-ledger.test.shexits 0.scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.Slice 2: this repository's attribution settings move to
docs/conventions/attribution.yaml. Blocked by: slice 1.Scope: the plugin's schema and this repository's YAML, together.
.claude/attribution.jsonstays in place.docs/conventions/attribution.yamlcarries every value of.claude/attribution.jsonandscripts/check-convention-yaml.sh --checkexits 0 againstplugins/attribution/schemas/attribution.schema.json.scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.Slice 3: the setup skill writes the YAML and no prose points at the old file. Blocked by: slice 1. It can run beside slice 2.
Scope: the writer and every prose file listed in item 2 under
plugins/attribution.docs/conventions/config-cascade/README.md:770sits outside the grep below and is not part of this issue.git grep -nfor it underplugins/attributionprints only compatibility-read code, its tests and changelog lines.scripts/check-changelog-fragments.sh --check-required origin/mainexits 0.All
- [ ]lines above are the body's "Done when" lines, each placed in the slice that changes what it checks, wording unchanged; the changelog line repeats in each slice because each one is its own PR.Target labels: on #9729 remove
needs-humanand add noagent-ready; each sub-issue goes to intake, where its- [ ]lines admit it.github-actions commentedon Oct 28, 2026
Proposed work class: work-class: scoped
Basis: automated intake triage; the lanes App applied this class.
Size: Large
Complexity: Medium
Uncertainty: Known
Flags: none
Blocked by: none
Understood: move the attribution settings from
.claude/attribution.jsontodocs/conventions/attribution.yaml. A plugin-shipped schema validates it. The old file is read only when the YAML is absent, for one release. The setup skill writes the YAML.The work is too large for one change (about 4 readers, 1 resolver, 1 writer, 6 prose files). The earlier re-triage already splits it into three slices, so this issue acts as their tracker. Nothing is missing and no decision is open. Deleting the old file stays out of scope. No duplicates found.
Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Oct 28, 2026
Not admitted to the issue lane yet: sub-issue #10543 is open.
github-actions commentedon Oct 28, 2026
Intake triage did not triage this issue after 2 dispatches, so the sweep no longer dispatches it and labeled it needs-triage for a maintainer. Triage it by hand, and read the runs for why intake did not:
kyle-sexton commentedon Oct 28, 2026
Closing as complete. Its three slices are closed as completed: #10538, #10540 and #10543, via #10542, #10555 and #10586.
docs/conventions/attribution.yaml:11-13on main carries both settings (excluded_paths,trigger_less_stamp_check), andplugins/attribution/schemas/attribution.schema.jsonvalidates them. The re-triage record said this issue closes when all three slices close. Deleting the old JSON file stays with #5906's cleanup slice.