Repository navigation
Description
Parent
Refs #5906
Depends on
- refactor(source-control): read the remaining babysit keys from docs/conventions/source-control.yaml #12285, released: the source-control release that reads the sixteen babysit keys from the YAML.
Blocks
Outcome
Every melodic-software and kyle-sexton repository that keeps settings in .claude/source-control.md has each key in
docs/conventions/source-control.yaml with the same value, and the legacy file deleted, before #9737 removes the
legacy reads. Without this, each repository loses its commit-convention enforcement and its babysit hold lists and
merge rung when #9737 lands.
Known repositories
A GitHub code search on 2026-11-01 (default branches only, so the list may be incomplete) finds the legacy file in:
architecture, azure-iac, ci-runner, ci-workflows, codex-plugins, dotfiles, github-iac, knowledge-corpus, medley,
pr-pipeline-sandbox, provisioning, songwriting, standards and .github (all melodic-software). Nine carry babysit_
keys: github-iac, pr-pipeline-sandbox, ci-runner, knowledge-corpus, .github, ci-workflows, standards, medley,
provisioning. The 2026-10-31 host run also found kyle-sexton/autonomy-demo-scratch
(#5906 (comment)).
Decisions
- ADR 0064 Decision 1: the team layer is
docs/conventions/source-control.yaml, validated by the plugin's
schemas/source-control.schema.json. - Values move unchanged. A repository's merge rung, hold lists and gate contexts are the same before and after.
- Each repository's change goes through that repository's own PR rules; azure-iac is a trust root, and the standards
sync manifest does not cover every repository listed.
Done when
- The repo map (
gh api orgs/melodic-software/properties/values) and a contents read of each repository's default branch, plus kyle-sexton/autonomy-demo-scratch, list every repository with.claude/source-control.md, and the PR or issue body records that list. - For each listed repository, a merged PR adds
docs/conventions/source-control.yamlwith every key and value its.claude/source-control.mdset, and deletes the legacy file. - For each listed repository,
gh api repos/<owner>/<repo>/contents/.claude/source-control.mdreturns 404 andgh api repos/<owner>/<repo>/contents/docs/conventions/source-control.yamlreturns the file.
Out of scope
- This repository's own legacy file (chore: drop the one-release .claude config reads and this repository's old config files #9737).
Posted by the issue-triage session. This was generated by AI.
Metadata
Metadata
Assignees
Labels
Type
Fields
Work status
Activity
github-actions commentedon Nov 2, 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: migrate each melodic-software and kyle-sexton repository's
.claude/source-control.mdkeys intodocs/conventions/source-control.yamlwith unchanged values, delete the legacy file, and record the repository list, before #9737 removes the legacy reads. The approach and done-when are exact. The work spans about 15 repositories, each with its own PR rules, so it needs splitting per repository. Cross-repository and host-run steps are outside this lane's access. The dependency #12285 is stated as released, so I listed no open blocker.Automated triage, applied by the lanes App.
melodic-automation-lanes commentedon Nov 2, 2026
Not admitted to the issue lane: it carries host-run; Size large: the split into sub-issues at intake is pending (owner Q93). 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.kyle-sexton commentedon Nov 2, 2026
Inventory (Done-when 1)
Sources, read 2026-11-02: the repo map (
gh api orgs/melodic-software/properties/values, 24 repositories),gh repo listfor melodic-software (24) and kyle-sexton (2), a contents read of.claude/source-control.mdanddocs/conventions/source-control.yamlon every repository's default branch, and a GitHub code search for the file name (it agrees with the contents reads).15 repositories carry
.claude/source-control.mdon their default branch, besides claude-code-plugins (out of scope, #9737). None of them hasdocs/conventions/source-control.yamlyet, so none needs a merge into an existing file.Checked and without the file: claude-code-account-rotation, claude-code-proxy, cursor-plugins, agent-plugins, agent-automations, kyle-sexton/prereq-cancelled-verify, and the four archived repositories (claude-lane-sandbox, medley-archive, itinerary-planner, melodic-main-archive). pr-pipeline-sandbox also carries plugin copies at
plugins/source-control/skills/*/.claude/source-control.md. Those are vendored plugin fixtures, not the repository's team layer, so they are out of scope.Each repository gets one PR on branch
chore/12286-source-control-yaml, which carriesRefs: melodic-software/claude-code-plugins#12286.Posted by the Lane 5 host-run session. This was generated by AI.
chore: move source-control settings to docs/conventions/source-contro…
chore: move source-control settings to docs/conventions/source-contro…
chore: move source-control settings to docs/conventions/source-contro…
chore: move source-control settings to docs/conventions/source-contro…
chore: move source-control settings to docs/conventions/source-contro…
kyle-sexton commentedon Nov 2, 2026
Verification (Done-when 2 and 3)
14 of 15 repositories are done. pr-pipeline-sandbox has the YAML, but its legacy file stays (reason below).
.claude/source-control.mddocs/conventions/source-control.yamlThe status codes come from
gh api repos/<o>/<r>/contents/<path>on each default branch.Value parity. A script parsed every
## <key>H2 of the legacy file and every key of the YAML, then compared them key by key. Every PR has its table under Verification. All 15 show every key MATCH and no key on one side only. For the two PRs merged before the check existed (architecture#16, autonomy-demo-scratch#72), it ran against the merged default branch, with the legacy file read at the parent of the deleting commit. Both are MATCH.Merge rung and loop keys. I ran
babysit_repo_config.py loop-keysfrom claude-code-plugins origin/main against the 9 babysit repositories before and after. All four values are identical in each, andadopted: trueholds throughout. The supplying layer changed from.claude/source-control.md (legacy)todocs/conventions/source-control.yamleverywhere except pr-pipeline-sandbox, where it stays legacy because that file is still present.pr-pipeline-sandbox: deletion blocked. Its pr-merge lane runs the vendored
plugins/source-control/skills/babysit-prs/scripts/babysit_merge_policy.py. That copy'sread_config_at(around line 480) readsbabysit_loop_mergeonly from.claude/source-control.md. Withmerge.rung: C2live (docs/conventions/pr-pipeline.yaml:699), deleting the file would turn the lane's rung off. #272 adds the YAML with both keys unchanged and keeps the legacy file. The legacy file can be deleted once a sandbox sync brings in the upstream_resolve_loop_merge.Readers updated.
.github:.github/scripts/pr-section-drift.mjsnow reads the YAML (tests 27/27 pass, and the live run matches the pinned composite). CLAUDE.md, README.md and a workflow comment are updated too..github/CODEOWNERSnow owns/docs/conventions/source-control.yamlbeside/.claude/, so the merge-rung file keeps its code-owner review.Posted by the Lane 5 host-run session. This was generated by AI.
kyle-sexton commentedon Nov 2, 2026
Status: 14 of 15 repositories done. pr-pipeline-sandbox remains. The inventory is in this comment and the verification table in this one.
.claude/source-control.mdreturns 404 and the YAML returns 200 in 14 repositories, and ci-workflows' five babysit keys match the old file read at the parent of ci-workflows#965's merge.plugins/source-control/skills/babysit-prs/scripts/babysit_merge_policy.py(around line 482) still readsbabysit_loop_mergeonly from.claude/source-control.md, andmerge.rung: C2is live there. Deleting the file now would switch the sandbox's merge rung off. Next step: sync the sandbox's vendored source-control plugin to a release that reads the YAML, then delete the old file.This was generated by AI.
kyle-sexton commentedon Nov 2, 2026
All 15 repositories are done. The last one, pr-pipeline-sandbox#273, merged as da98ba853d. It synced the sandbox's vendored babysit gate to claude-code-plugins 57477a9 so the gate reads
babysit_loop_mergefrom the YAML, then deleted.claude/source-control.md.The sync also wired in what the synced gate reads:
actions: read,checks: readandissues: readon the merge job, plusBABYSIT_VERIFY_GH_TOKENand the API budget pool variables on the gate step. These match upstreampr-merge.ymllines 877-881 and 1578-1581. A Codex P1 finding caught the gap.Proof that the merge rung is unchanged: the gate's own
read_config_atreturnsrung: C2, loop_merge: c2-mechanicalboth before the change (legacy file) and after it (YAML).Done-when 3, re-checked by Lane 5:
.claude/source-control.mdreturns 404 anddocs/conventions/source-control.yamlreturns 200 in all 15 repositories. The values matched key by key in every repository (tables in each PR body). The #9737 risk aboutcommit-convention.ymlis recorded on #9737.This was generated by AI.