Skip to content

refactor(source-control): read the remaining babysit keys from docs/conventions/source-control.yaml #12285

Description

@kyle-sexton

Parent

Refs #5906

Blocks

Outcome

Sixteen source-control team keys whose only team home is .claude/source-control.md get one in
docs/conventions/source-control.yaml, with the legacy file read for a key the YAML lacks, for one release:

  • nine loop-lane keys (babysit_loop_discovery_scope, babysit_loop_fixing, babysit_loop_thread_resolution,
    babysit_loop_draft_elevation, babysit_loop_barrier_overrides, babysit_loop_escalation,
    babysit_loop_cycle_budget, babysit_loop_no_progress_threshold, babysit_loop_trusted_internal_bot_logins),
    today "H2-only in the legacy file for now" (plugins/source-control/reference/config-resolution.md:46-51);
  • the seven babysit-prs repository-policy keys (babysit_merge_method, babysit_merge_block_labels,
    babysit_extra_dependency_manager_logins, babysit_approval_downgrade_logins, babysit_skip_downgrade_logins,
    babysit_review_gate_context, babysit_ci_gateway_context), read today only from the target's default-branch
    legacy file (config-resolution.md:545-554, skills/babysit-prs/scripts/babysit_repo_config.py:4,36).

Two readers of babysit_loop_merge that cannot run without the legacy file move to the YAML too.

Decisions

  • ADR 0064 Decision 1 and ADR 0075 fix 3: script-read team settings are YAML in docs/conventions/<concern>.yaml,
    validated by plugins/source-control/schemas/source-control.schema.json.
  • ADR 0064 Decision 9: babysit keeps its own fetch of the target's default branch through the contents API, with no ref.
  • ADR 0039 and config-resolution.md:566-611: the merge modes are unchanged. Hold lists are the add-only union with
    the userConfig fallback, babysit_skip_downgrade_logins is remove-only, and the review pair and trigger phrase stay
    userConfig-only.
  • 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 lacks the key.
  • chore: drop the one-release .claude config reads and this repository's old config files #9737 record: once .claude/source-control.md is absent at the base SHA, babysit_loop_merge from the YAML sets
    the merge rung by itself (babysit_merge_policy.py:946-948 left this to the cleanup work). With both files, the
    lower value still binds.

Key interfaces

  • plugins/source-control/schemas/source-control.schema.json, lib/convention-key.sh,
    skills/babysit-prs/scripts/babysit_repo_config.py and its fake, babysit_merge_policy.py.
  • plugins/harness-config/skills/audit/scripts/audit-engine.sh:1369-1406, the unattended-lane signal.
  • plugins/source-control/reference/config-resolution.md, docs/conventions/pr-pipeline/README.md:1079-1083.
  • The model-read files for the nine loop keys, which have no script reader:
    plugins/source-control/skills/babysit-loop/SKILL.md, plugins/source-control/skills/babysit-loop/reference/cycle-shape.md
    and plugins/source-control/skills/babysit-loop/reference/no-progress-detector.md.

Done when

  • plugins/source-control/schemas/source-control.schema.json defines the sixteen keys above, and scripts/check-convention-yaml.sh --check exits 0.
  • scripts/run-test-file.sh plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_repo_config.py exits 0 with cases for: a remote YAML value wins over the legacy H2; a repository with only the legacy file still resolves; a YAML hold list unions with the userConfig hold list; a YAML babysit_skip_downgrade_logins only narrows the fallback set; a YAML the reader rejects is a repository config error with no fallback to the legacy file; a YAML carrying only one of the nine loop-lane keys counts as tracked adoption (merge default c2-mechanical).
  • scripts/run-test-file.sh plugins/source-control/skills/babysit-prs/scripts/tests/test_babysit_merge_policy.py exits 0 with cases for: no legacy file and a YAML babysit_loop_merge sets the rung from the YAML; both files bind the lower value; neither file leaves the rung off.
  • scripts/run-test-file.sh plugins/harness-config/skills/audit/scripts/audit-engine.test.sh exits 0 with a case where only docs/conventions/source-control.yaml sets babysit_loop_merge and the unattended lane is reported, and a case where the YAML carries only a non-merge loop-lane key and the unattended lane is reported at the c2-mechanical baseline.
  • git grep -nE "H2-only in the legacy file|YAML alone never raises" -- plugins docs/conventions ":!*CHANGELOG.md" prints nothing.
  • The PR body lists each of the sixteen keys with its new home and schema.
  • scripts/check-changelog-fragments.sh --check-required origin/main exits 0.

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: readyTriaged, unblocked, and fully specified; eligible to pick up.
    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: Medium
    Complexity: Medium
    Uncertainty: Known
    Flags: none
    Blocked by: none

    Understood: add sixteen babysit-related keys (nine loop-lane, seven babysit-prs policy) to docs/conventions/source-control.yaml and its schema. Readers fall back to the legacy .claude/source-control.md for one release. The two babysit_loop_merge readers move to the YAML too. The outcome, decisions and done-when checks are exact, so I found nothing missing. I found no duplicate among the open issues. Dropping the legacy reads (#9737) is out of scope.

    Automated triage, applied by the lanes App.

  4. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    admission-deferredAdmitted but waiting for WIP room; the hourly work-unblock sweep labels it agent-ready.
    on Nov 2, 2026
  5. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  6. melodic-automation-lanes commented on Nov 2, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 41395890218, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-11-02T06:45:45Z. work-unblock has now removed and added agent-ready back to start a fresh run. A kill-switch refusal is no fault in this issue or the lanes, so it never counts against later re-fires; after limits.limit-stops-per-issue of them since a person last added agent-ready or a run last reported, work-unblock waits longer before each one, up to 24 hours.

  7. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 2, 2026
  8. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  9. github-actions commented on Nov 2, 2026

    @github-actions
    Contributor
    No description provided.
  10. removed
    status: readyTriaged, unblocked, and fully specified; eligible to pick up.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Nov 2, 2026
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

    priority: mediumReal value, no hard deadline; normal backlog flow.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    Work status

    agent-ready

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions