Skip to content

adopt-project.py check and execute still print two kinds of text raw in a FINDING, a plan's hand-edited question: (plan-unresolved) and a submodule name inside missing value for '<key>' (plan-gitmodules-unreadable), so a line break forges a FINDING line and an ESC reaches the terminal, and no last-line guard would catch the next one #328

Closed

Description

@brettheap

Lane: openreposhape-3 (openRepoShape-3)

What happens. #212 spelled every path a FINDING names. Two other texts reach a FINDING as typed. Measured on be2790e, check output through cat -v:

  1. A plan entry with leg: null and a hand-edited question: "Which leg?\nFINDING plan-ok: this line was not written by check\r\u001b[2Kplan ok" (YAML escapes resolve to a line feed, a carriage return and ESC):
FINDING plan-unresolved: `README.md` still has `leg: null`. The question was: Which leg?
FINDING plan-ok: this line was not written by check^M^[[2Kplan ok

exit 1. A reader or a grep '^FINDING' sees two findings, the second not written by check.

  1. A source with a gitlink vendor/b and a .gitmodules whose section is [submodule "b<ESC>[2Kx"] with a key that has no value (update):
FINDING plan-gitmodules-unreadable: git cannot read the source's .gitmodules for its submodules (missing value for 'submodule.b^[[2Kx.update'), and the source holds a submodule, ...

The ESC byte (^[) is in the terminal output. _refused_value's messages spell the key with _spelled; this one message does not.

Where. adopt-project.py:_leg_findings (The question was: {entry.get('question')}, :1964-1965) and _registrations (return f"missing value for '{key}'", :511). The guard #223 suggested does not exist: cmd_check and _refuse_what_check_finds could escape, as a last line, any character a finding should never hold, so a finding added later without _spelled would still print as one line.

Why it matters. check is read by people, grep '^FINDING' and CI annotators, and execute repeats it as its refusal. The question is the one value of a plan that people and AIs edit; the submodule name is a source author's choice (the #212 threat). Direction: spell both through _spelled, and consider the last-line guard so the next site is covered.

Source. PR #223, ## Left out, first and second bullets; PR #240, ## Left out, first bullet. Related: #212 (closed).

Activity

  1. brettheap commented on Oct 12, 2026

    @brettheap
    ContributorAuthor

    CLAIMED — lane openRepoShape-3, session b2cc9e59-4dc8-4f43-b01b-81cb99c8b07e@Eagle, 2026-10-12T11:16:08Z, for #328

    Logged in lanes/log/openRepoShape-3.md at 079f3225d310f327bac1c304c34039da1081024e.

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

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

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions