Skip to content

chore: move other repositories' .claude/source-control.md keys to docs/conventions/source-control.yaml #12286

Closed

Description

@kyle-sexton

Parent

Refs #5906

Depends on

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.yaml with every key and value its .claude/source-control.md set, and deletes the legacy file.
  • For each listed repository, gh api repos/<owner>/<repo>/contents/.claude/source-control.md returns 404 and gh api repos/<owner>/<repo>/contents/docs/conventions/source-control.yaml returns the file.

Out of scope

Posted by the issue-triage session. This was generated by AI.

Activity

  1. added
    priority: mediumReal value, no hard deadline; normal backlog flow.
    status: confirmedA maintainer confirmed the item is real and in scope; ready to be worked.
    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.
    on Nov 2, 2026
  2. added theissue type on Nov 2, 2026
  3. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor

    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.md keys into docs/conventions/source-control.yaml with 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.

  4. added
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    on Nov 2, 2026
  5. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    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).

  6. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    The latest triage verdict holds nothing: admission moved the issue to status: confirmed; its comment says why.

  7. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    Inventory (Done-when 1)

    Sources, read 2026-11-02: the repo map (gh api orgs/melodic-software/properties/values, 24 repositories), gh repo list for melodic-software (24) and kyle-sexton (2), a contents read of .claude/source-control.md and docs/conventions/source-control.yaml on 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.md on their default branch, besides claude-code-plugins (out of scope, #9737). None of them has docs/conventions/source-control.yaml yet, so none needs a merge into an existing file.

    Repository Keys the legacy file sets
    melodic-software/.github subject_pattern, pr_title_pattern, pr_body_required_sections, babysit_loop_merge
    melodic-software/architecture subject_pattern
    melodic-software/azure-iac subject_pattern
    melodic-software/ci-runner babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    melodic-software/ci-workflows babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    melodic-software/codex-plugins pr_body_required_sections
    melodic-software/dotfiles pr_body_required_sections
    melodic-software/github-iac babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    melodic-software/knowledge-corpus babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections, subject_pattern
    melodic-software/medley babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    melodic-software/pr-pipeline-sandbox babysit_loop_merge, subject_pattern
    melodic-software/provisioning babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    melodic-software/songwriting subject_pattern
    melodic-software/standards babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge, babysit_loop_grace_window_minutes, pr_body_required_sections
    kyle-sexton/autonomy-demo-scratch subject_pattern

    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 carries Refs: melodic-software/claude-code-plugins#12286.

    Posted by the Lane 5 host-run session. This was generated by AI.

  8. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    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).

    Repository PR .claude/source-control.md docs/conventions/source-control.yaml
    melodic-software/.github #228 merged 404 200
    melodic-software/architecture #16 merged 404 200
    melodic-software/azure-iac #106 merged 404 200
    melodic-software/ci-runner #521 merged 404 200
    melodic-software/ci-workflows #965 merged 404 200
    melodic-software/codex-plugins #164 merged 404 200
    melodic-software/dotfiles #1413 merged 404 200
    melodic-software/github-iac #814 merged 404 200
    melodic-software/knowledge-corpus #56 merged 404 200
    melodic-software/medley #2267 merged 404 200
    melodic-software/pr-pipeline-sandbox #272 merged, YAML only 200 200
    melodic-software/provisioning #892 merged 404 200
    melodic-software/songwriting #53 merged 404 200
    melodic-software/standards #939 merged 404 200
    kyle-sexton/autonomy-demo-scratch #72 merged 404 200

    The 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-keys from claude-code-plugins origin/main against the 9 babysit repositories before and after. All four values are identical in each, and adopted: true holds throughout. The supplying layer changed from .claude/source-control.md (legacy) to docs/conventions/source-control.yaml everywhere 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's read_config_at (around line 480) reads babysit_loop_merge only from .claude/source-control.md. With merge.rung: C2 live (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.mjs now 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.
    • azure-iac and standards: the README mentions are updated.
    • standards: .github/CODEOWNERS now owns /docs/conventions/source-control.yaml beside /.claude/, so the merge-rung file keeps its code-owner review.

    Posted by the Lane 5 host-run session. This was generated by AI.

  9. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    Status: 14 of 15 repositories done. pr-pipeline-sandbox remains. The inventory is in this comment and the verification table in this one.

    • Values: every key matches before and after in all 15, checked by parsing each repository's old H2 keys against its new YAML. Each PR body carries its table. Lane 5 re-checked independently: .claude/source-control.md returns 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.
    • What keeps this issue open: pr-pipeline-sandbox#272 added the YAML but kept the old file. The sandbox's vendored plugins/source-control/skills/babysit-prs/scripts/babysit_merge_policy.py (around line 482) still reads babysit_loop_merge only from .claude/source-control.md, and merge.rung: C2 is 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.

  10. kyle-sexton commented on Nov 2, 2026

    @kyle-sexton
    MemberAuthor

    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_merge from the YAML, then deleted .claude/source-control.md.

    The sync also wired in what the synced gate reads: actions: read, checks: read and issues: read on the merge job, plus BABYSIT_VERIFY_GH_TOKEN and the API budget pool variables on the gate step. These match upstream pr-merge.yml lines 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_at returns rung: C2, loop_merge: c2-mechanical both before the change (legacy file) and after it (YAML).

    Done-when 3, re-checked by Lane 5: .claude/source-control.md returns 404 and docs/conventions/source-control.yaml returns 200 in all 15 repositories. The values matched key by key in every repository (tables in each PR body). The #9737 risk about commit-convention.yml is recorded on #9737.

    This was generated by AI.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    host-runNeeds an unattended run on a host; the host runner takes it, not a person or the issue lane.priority: mediumReal value, no hard deadline; normal backlog flow.status: confirmedA 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.

    Type

    Fields

    Work status

    confirmed

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions