Skip to content

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

Closed

Description

@kyle-sexton

Parent

Refs #5906

Depends on

Outcome

The babysit_loop_* keys (stop_mode, tier, merge, grace_window_minutes) resolve from
docs/conventions/source-control.yaml for the local babysit loop and for babysit's remote read of a target
repository, with .claude/source-control.md read only when the YAML lacks the key, for one release.

Decisions

  • ADR 0064 Decision 1: a plugin's team settings live in one docs/conventions/<concern>.yaml, validated by a
    JSON Schema at plugins/<plugin>/schemas/<concern>.schema.json (Decision 6), checked in CI by
    scripts/check-convention-yaml.sh (Decision 7). Script readers use the shared reader lib/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.
  • ADR 0064 Decision 9: a remote reader keeps its own fetch from the default branch through the contents API.

Key interfaces

  • plugins/source-control/skills/babysit-prs/scripts/babysit_repo_config.py and its fake, the babysit-loop
    operator-options.mjs, the babysit eval scaffolds, scripts/promotion-evidence-e2e.test.mjs.

Done when

  • docs/conventions/source-control.yaml holds the four babysit_loop_* values 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, a remote repo with only the old file still resolves, neither file yields the defaults.
  • scripts/run-test-file.sh scripts/promotion-evidence-e2e.test.mjs exits 0.
  • The PR body lists each migrated key with its new home and schema.
  • scripts/check-changelog-fragments.sh --check-required origin/main exits 0.

Out of scope

  • Deleting .claude/source-control.md.

Activity

  1. added theissue type on Oct 24, 2026
  2. melodic-automation-lanes commented on Oct 24, 2026

    @melodic-automation-lanes
    Contributor

    Not admitted to the issue lane yet: blocker #9725 is not closed as completed by a listed human or a merge.

  3. melodic-automation-lanes commented on Oct 27, 2026

    @melodic-automation-lanes
    Contributor

    The lanes App's pull request #10118 merged with Refs:, so this issue stays open and nothing starts the lane on it again. work-unblock removed status: ready and agent-ready, so the hourly triage sweep sends it back to intake triage, which decides what work is left and admits it again.

  4. 1 remaining item

  5. github-actions commented on Oct 27, 2026

    @github-actions
    Contributor

    The triage sweep dispatched intake triage for this issue (attempt 1 of 2).

  6. github-actions commented on Oct 27, 2026

    @github-actions
    Contributor

    Proposed work class: work-class: scoped
    Basis: automated intake triage; the lanes App applied this class.

    Size: Small
    Complexity: Low
    Uncertainty: Knowable
    Flags: none
    Blocked by: none

    Understood: migrate the four babysit_loop_* keys so they resolve from docs/conventions/source-control.yaml, for both the local loop and babysit's remote read. .claude/source-control.md stays as a one-release fallback and is not deleted.

    The dependency #9725 no longer appears among the open issues, so it looks cleared. A previous PR (#10118) merged with Refs:, and the YAML file and the reader already mention the keys. The remaining work is to check each Done-when item against main and finish whatever is missing, such as remote-read test cases, the e2e test, and the changelog fragment. No duplicates found.

    Automated triage, applied by the lanes App.

  7. 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.
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    and removed on Oct 27, 2026
  8. melodic-automation-lanes commented on Oct 27, 2026

    @melodic-automation-lanes
    Contributor

    This records a re-fire of an earlier refusal, not a new refusal. The lanes kill switch stopped run 40544778079, the work-resolve-issue run that agent-ready started, before it did any work; that run ended at 2026-10-27T17:44:23Z. 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.

  9. added
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    agent-readyFully specified and briefed; eligible for autonomous pickup from the frontier.
    on Oct 27, 2026
  10. melodic-automation-lanes commented on Oct 27, 2026

    @melodic-automation-lanes
    Contributor

    The work-resolve-issue lane stopped partway through this issue and needs a person.

    Why, in the run's own words:

    already-done: the checkout at 4369f72 already contains everything issue #9726 asks for. source-control 3.12.0's CHANGELOG cites #9726 for it. docs/conventions/source-control.yaml holds the four babysit_loop_* values (standing, worker, c2-mechanical, 30), and schemas/source-control.schema.json declares them. babysit_repo_config.py resolve_loop_keys and the loop-keys CLI read the YAML first, then the legacy .claude/source-control.md for one release, then the defaults, and report the layer that supplied each value. repo_config_fake.py answers for both files. lib/convention-key.sh handles the local read, and the babysit-loop eval scaffolds seed the YAML. test_babysit_repo_config.py has the three cases the issue names. Nothing was left to change, so this run made no edits. The issue looks like it stayed open by mistake (perhaps the PR that landed it used Refs instead of a closing keyword). A person should confirm and close #9726.

    What the run says it did not do:

    • Did not run scripts/run-test-file.sh on test_babysit_repo_config.py or scripts/promotion-evidence-e2e.test.mjs: this lane runs only its named wrappers, so test runs are left to CI
    • Did not run scripts/check-convention-yaml.sh --check: check-affected lists it as CI only (convention-yaml-schema)
    • Did not run a local code review, verify or lint step: there is no diff to review
    • Closing #9726 as already done is left to a person: this run cannot close issues

    Run: https://github.com/melodic-software/claude-code-plugins/actions/runs/40590193454

    To retry, remove needs-human and add agent-ready again.

  11. kyle-sexton commented on Oct 28, 2026

    @kyle-sexton
    MemberAuthor

    Closing: merged work delivers this. origin/main's plugins/source-control/CHANGELOG.md records that babysit_loop_stop_mode, babysit_loop_tier, babysit_loop_merge and babysit_loop_grace_window_minutes take their team value from docs/conventions/source-control.yaml, read by babysit_repo_config.py loop-keys from the target repository's default branch.

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

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.priority: mediumReal value, no hard deadline; normal backlog flow.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.

    Type

    Fields

    No fields configured for Task.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions