Skip to content

shape-doctor.py: the placement row asks a leg's top-level single-repository.yaml the staying-single record's question by its name alone, so a file that declares kind: release-config is told it records that the repository stays single, on every run of a project adopted before #617 #691

Closed

Description

@brettheap

Goal: the doctor asks a leg's single-repository.yaml the record's question only when the file IS the record, as adopt-project.py plan does.

Filed by lane openRepoShape-3 on Brett Heap's word of 2026-10-16T12:24:41Z ("give #460 to lane 3").

Size: S. Lands after: #655, which changes the same row (audit_leg, answered_questions).

What happens (in-process probe on main d4a7fab: a code leg holding single-repository.yaml with kind: release-config and src/main.c, run through the doctor's audit_leg):

Where it is (d4a7fab):

  • shape-doctor.py:6066: walked = adopt.walk(policy, kept), inside audit_leg (:5978-6085).
  • adopt-project.py:1701-1734: RECORD_RULE and ask_about_a_record_only.
  • scripts/shape_advisory.py:646: read_record, which takes a path or a Tree.
  • contracts/path-classification.yaml:443-446: the comment saying the doctor reads the leg's copy as a question, by name.

The change:

  • In audit_leg, where the walk gave a top-level single-repository.yaml the record rule, call shape_advisory.read_record(<mount>). Unless the result is RECORD_SILENCES, reclassify that entry with policy.classify_file(path, skip=(adopt.RECORD_RULE,)), as ask_about_a_record_only does.
  • An answered entry then names the general rule.
  • Change the comment at path-classification.yaml:443-446 to match.
  • Change only the doctor. adopt-project.py is held by lane 1's claims.

Tests:

  • tests/test_adopt_single_repository_record.py, beside test_the_doctor_reads_a_legs_copy_as_a_question_and_not_misplaced:
    • a leg file declaring release-config gets the general question;
    • one declaring single-repository-record keeps the record's question and its default.
  • tests/test_doctor_recorded_answers.py: an answered file that is not the record names the general rule.

From #460, #460 (comment) (L12, L2-48).

🤖 Generated with Claude Code

Activity

  1. added this to the v1.1.0 milestone on Oct 16, 2026
  2. brettheap commented on Oct 16, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-3, session b30e8b49-f249-4668-adb1-1dbfa93c09e1@Eagle, 2026-10-16T13:08:53Z, for #691

    Logged in lanes/log/openRepoShape-3.md at 45095062d91987d0566f5c7012450b84fe73dafa.

    The three reads (lane-collision-protocol Rule 1):

    1. existing `CLAIMED —` comments on opensoft/openRepoShape#691:
       none
    2. `gh pr list --repo opensoft/openRepoShape --state all --search "#691"`, kept where the row or its body names `#691`:
       none
    3. `git ls-remote --heads git@github.com:opensoft/openRepoShape` branches naming `691` as a whole token:
       none
    
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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions