Skip to content

tests/test_adopt_plan_value_order.py: the module takes double_quoted and with_line from test_adopt_template_values and puts nothing on sys.path itself, and its docstring says _work_root refuses more, among them the file and the shared directory, no longer two things (#1234) - #1307

Open
brettheap wants to merge 12 commits into
mainfrom
l3-1234-value-order-test-text

Conversation

@brettheap

@brettheap brettheap commented Nov 10, 2026 •

Copy link
Copy Markdown
Contributor

Test only. RV1226's two NITs on #1226 (for #1179), in tests/test_adopt_plan_value_order.py alone: the module no longer puts scripts/ on sys.path a second time, and its docstring no longer counts _work_root's refusals as two. adopt-project.py and every other file are untouched.

Restacked after #1226 landed

#1226 landed at 14:04Z as 3ffe75bb9 (its final head cc6c4153a). Lane 3 restacked this PR onto it with checked merges: first #1226's final head, then its squash (now main), taking ours for tests/test_adopt_plan_value_order.py, the one file that conflicted. main had not moved past the squash, so no third merge was needed. The head is now 522e3584fa6dffe76dca0fb387abaa82ea7e2df3, and this PR's own change is its diff over main (3ffe75bb9): one file, tests/test_adopt_plan_value_order.py, +5/-9.

What a person sees change

Nothing. The 46 test ids the module collects, and their 46 outcomes, are the same before and after. The change is the file's own text.

  • NIT-1. test_adopt_template_values, which the module already imports with_line from, puts scripts/ on sys.path at its own import (line 58 on this head) and imports double_quoted beside load_yaml (line 60). The module's sys.path.insert(0, str(REPO / "scripts")) and its from repo_shape import double_quoted put scripts/ there a second time. It now reads from test_adopt_template_values import double_quoted, with_line, and the sys import, the REPO import and the insert are gone.
  • NIT-2. The docstring said _work_root "refuses two more things before it makes anything, a --work-dir that is a file and one every user can write in". It says "refuses more before it makes anything, among them a --work-dir that is a file and one every user can write in", RV1226's words.

Choices, and why

  • Drop sys and REPO only if nothing else uses them. Re-read at tests/test_adopt_plan_value_order.py: a bad id: or org: beside a --work-dir that is a file or a shared one, or beside a gone source, is the value's refusal in both check and execute, so the head ask is pinned against _work_root's other refusals and the source (#1179) #1226's head 489bc3e87 (the issue's line numbers are at f61be9f5, which moved): sys is in the file at its import (line 72) and the insert (line 83) only, and REPO at the conftest import (line 77) and the insert (line 83) only. Nothing else, so both go. os, shutil and Path stay, each still used.
  • Import from the module that already loads them. The module already depends on test_adopt_template_values for with_line, and its import already runs the insert, so the new import adds no coupling. double_quoted is the name that module takes from repo_shape.
  • NIT-2 is done, not left. The issue offers "or leave it". _work_root (adopt-project.py:18498) refuses more than the two at this head, as the issue lists: a symlink loop, a symlink to what is no directory (_unmade_work_dir), a directory another user owns, and a shared directory above the --work-dir (_refuse_a_shared_chain). So "two" was wrong, and RV1226's wording is the smallest true one. The two rows still cover the two they cover.
  • The two import lines are re-wrapped to stay inside 79 columns, as conftest's import was: from conftest import (ADOPT, WINDOWS_SKIP, git, make_source_repo, planned, then run_script). Nothing else in the file moves.

Measured, before and after

Parent head 489bc3e87 against this head 3aa9d5139, the module alone, a stub gh first on PATH, GH_TOKEN=bogus, an empty GH_CONFIG_DIR, GIT_CONFIG_GLOBAL=/dev/null, git-filter-repo on PATH, LANES_LANE unset:

Measure #1226's head This head
scripts/ entries on sys.path after the module is imported (a probe that imports the file with tests/ on the path) 6 5
the module has sys, REPO yes, yes no, no
the module has double_quoted, with_line yes, yes yes, yes
--collect-only -q: ids collected 46 46
sha256 (first 16) of the 46 collected ids e00f6981fbc67d39 e00f6981fbc67d39
-v: outcomes, sorted 46 PASSED, in 36.22 s 46 PASSED, in 46.60 s
sha256 (first 16) of the sorted id-and-outcome lines 93491e60b6f93a44 93491e60b6f93a44

The 46 are the 40 the module had on #1125's head and #1226's six. The two rows that use the imported names (test_the_org_or_the_id_is_named_before_a_source_that_is_gone[id] and [org], through with_line and double_quoted) pass on both. My count of scripts/ on sys.path (6 to 5) agrees with the earlier probe lane 3 made on f61be9f5 and posted on the issue (6 to 5, and sys and REPO gone).

Rows and mutants

No new row and no mutant. The change is two lines of import text and a docstring; no behaviour moves, so there is no row to add that would fail at #1226's head. The proof is the identical ids and outcomes above, and the module's own row that reaches with_line and double_quoted passing. A wrong import line would fail that row with a NameError at its first call, and the module would not import at all if test_adopt_template_values lacked either name. (Lane 3's earlier probe on f61be9f5 dropped each name from the new import and saw that NameError; it was not repeated here.)

Gates

At the head before the restack, 3aa9d5139: one pytest at a time, never the full suite, in the environment above, basetemps under /tmp:

Run Result
tests/test_adopt_plan_value_order.py with tests/test_adopt_pins.py, tests/test_adopt_root_symlinks.py and tests/test_adopt_template_values.py (the modules it imports from) in one run 482 passed, 3 skipped in 419.13s
the guards: tests/test_repo_hygiene.py, tests/test_cli_reference.py, tests/test_agents_md_codes.py, tests/test_git_output_decoding.py, tests/test_stdout_encoding.py, tests/test_path_guard_hygiene.py, tests/test_no_auto_maintenance.py, tests/test_update_add_codes_documented.py 470 passed, 3 skipped in 77.83s
  • The 3 skips of the first run are the reftable rows of tests/test_adopt_root_symlinks.py (lines 1960, 2015 and 2596), which need git 2.45 or later; the bench has 2.43.
  • The 3 skips of the second are one Windows-only row of tests/test_stdout_encoding.py and two rows of tests/test_no_auto_maintenance.py that skip when the session began with GIT_CONFIG_GLOBAL set, as the gate's environment sets it.
  • No code or code string changes, so no module that greps a code is run. tests/test_shape_doctor.py and tests/test_scaffold_leg_path_collisions.py are not run: adopt-project.py is untouched. tests/test_adopt_check_plan_name.py, the other order file, does not import from this module and is not touched. No other test file imports from this one (git grep of tests/).

Merges (git merge-tree --write-tree, all clean, exit 0)

This head 3aa9d5139 against each, and #1226's head alone against the same, to show nothing here conflicts that did not already:

Against This head's tree #1226's head alone
main (3add78e1c, which holds #1198's squash) 6e0e94d8ca70fdcba4482ce751f003c310ff87ae 2f5bf33b75e6b496851e9fa5789e84eccdad5027
#1305's head 142ca405d b7e6540c549c57b3326a15b1fe305cadea2128f1 4c4148c89e1d1b408f225e1a6b1b72dace4bbcb5
#1210's head 791106c2b d12ad74aba326fbf20f1753ad2e5a8e861b74b0d b40ae31cdd2e614bcbbb141c677468de302858f6
#1249's head 3146c3ca5 ed2950422b943258cadc6ffefeb2e93eec1118a1 124575afb85e3bf25793cf630da4ba54415b5d88

Closes #1234

Lane: openreposhape-3 (openRepoShape-3)

🤖 Generated with Claude Code

Summary by Sourcery

Enhancements:

  • Clean up the value-order test module by reusing shared test imports and correcting its description of work-directory refusals.

Brett Heap and others added 9 commits October 21, 2026 13:59
… right after its three repository names, so a bad one beside an unanswered entry, a moved source, a refused name or another repository is that one refusal in both, and a `pins:` entry that is no pin is said as `_read_as` says it (#1020)

#901 made `check` and `execute` name the same first problem among a plan's options. Outside them, the two still named different problems first (#1020, found by lane 1's writer on #901).

1. **One rule, the refusal before what `check` lists.** `check` refuses a bad `org:` or `id:` outright, exit 2, and lists none of its findings. `execute` refuses at the first of them, but it asked the two only after it had refused four things that `check` lists as findings: a plan for another repository (`plan-not-the-source`), a name the naming policy refuses (`naming-unclassified`), an unanswered entry (`plan-unresolved`) and a source that has moved on (`plan-stale`). And `check` asked the two only where the policy took the plan's names (`_manifest_values`), so an unsafe `org:` beside a refused name was a finding about the name, or about another repository. Both commands now ask the two first of the plan's values, right after the three repository names (`plan.names()`, then `_checked_org_and_id`): `execute` in `cmd_execute`, ahead of `_refuse_a_plan_for_another_repository`, and `check` at its head, after the triad advisory. `_checked_plan_values` no longer asks them, since `cmd_execute` has.
2. **#716's L4-48, decided.** An `org:` that `checked_value` refuses, held to a repository, was `unsafe-value` to `check` and `plan-not-the-source` to `execute`. Such an `org:` names no repository, on GitHub or in the manifest, so it is not compared with the source's. It is `unsafe-value` in both commands now, held to a repository or not. Once it is mended, a plan for another repository is still `plan-not-the-source` in both. This reverses three tests in `tests/test_adopt_check_plan_name.py`, which pinned the old answers on purpose:
   - `test_an_unsafe_org_is_unsafe_in_check_and_compared_by_execute_if_held` expected `plan-not-the-source` from `execute` in its six held rows. As `test_an_unsafe_org_is_unsafe_in_check_and_in_execute_held_or_not`, all twelve expect `unsafe-value` from both, in the same words.
   - `test_check_compares_an_unsafe_org_where_no_manifest_is_built` expected `check` to compare `org: acme labs` beside the refused name `bad_name`: `plan-not-the-source` and `naming-unclassified`, exit 1. As `test_an_unsafe_org_is_asked_before_the_plans_refused_names`, it expects `unsafe-value`, exit 2, from `check` and from `execute`.
   - `test_check_asks_an_unsafe_org_first_where_a_kept_submodule_url_is_relative` expected `plan-not-the-source` from `execute`. It now expects `unsafe-value`, in `check`'s words.
3. **A `pins:` entry that is no pin** was spelled with `repr` (`` `pins:` entry 1 is 7 ``, `True`, `None`). #901 made `pins:` itself read as `_read_as` reads it, and an entry reads the same way now: "the number 7", "the boolean true", "null", "a list of 2 item(s)".

Docstrings and comments now say this: `_checked_org_and_id`, `_checked_plan_values`, `_manifest_values`, `_held_findings`, `_not_the_source`, `_refuse_a_plan_for_another_repository`, `_read_pins` and the #499 block comment. No finding is added or removed: only which problem is named first changes, and the spelling of an entry.

Measured on main at `6da757cb` and on this branch, with a stub `gh`, a bogus token, an empty `GH_CONFIG_DIR`, `GIT_SSH_COMMAND=false` and `--local-remote-dir`. No run made a leg.

| The plan has | `check` on main | `execute` on main | both, here |
|---|---|---|---|
| a bad id beside an unanswered entry | `plan-bad-id` | `plan-unresolved` | `plan-bad-id` |
| a bad id beside a source that has moved on | `plan-bad-id` | `plan-stale` | `plan-bad-id` |
| a bad id beside a name the policy refuses | `plan-bad-id` | `naming-unclassified` | `plan-bad-id` |
| a bad id beside another organisation, held to a repository | `plan-bad-id` | `plan-not-the-source` | `plan-bad-id` |
| no `id:`, and `legs.assembly: north_wind` (a derived id the policy refuses too) | `plan-bad-id` | `naming-unclassified` | `plan-bad-id` |
| an unsafe `org:` held to a repository (L4-48) | `unsafe-value` | `plan-not-the-source` | `unsafe-value` |
| an unsafe `org:` beside an unanswered entry | `unsafe-value` | `plan-unresolved` | `unsafe-value` |
| an unsafe `org:` beside a source that has moved on | `unsafe-value` | `plan-stale` | `unsafe-value` |
| an unsafe `org:` beside a refused name | finding `naming-unclassified`, exit 1 | `naming-unclassified` | `unsafe-value` |
| the same, held to a repository | finding `plan-not-the-source`, exit 1 | `plan-not-the-source` | `unsafe-value` |

Each "here" row is exit 2 from both, word for word. The last two rows agreed on main. They change because `check` now asks the two where the policy refuses the names, as `execute` now does: without that, moving `execute` alone would have made them disagree. Plans with only one of these problems (an unanswered entry, a moved source, a refused name, another repository) are named as on main by both.

**Tests.**
- `tests/test_adopt_plan_value_order.py` gains 16 rows:
  - the 10 above, through both commands, comparing the first line;
  - four `pins:` entries that are no pin: number, boolean, null and list;
  - two guard rows, `id` and `org`: a leg name `checked_value` refuses (`legs.spec: "-spec"`) beside a bad `id:` or `org:` is that name's `unsafe-value` in both, so the three names are still asked first.
- The 14 non-guard rows all fail against `6da757cb`'s `adopt-project.py` and pass here. The two guard rows pass on both, by design.
- Existing rows changed for the new behaviour:
  - `test_adopt_check_plan_name.py`: the three tests above, and its docstring's L4-48 line.
  - `test_adopt_pins.py`: `a-number`.
  - `test_adopt_execute_refusals.py`: the three entry rows of `PIN_ENTRIES`.

Closes #1020

Lane: openreposhape-4 (openRepoShape-4)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… right after the plan's keys and before `_work_root`, so a bad one beside an unwritable `--work-dir` is that one refusal in both (#1020)

RV1125's SHOULD-1 on #1125. A bad `id:` or `org:` beside a `--work-dir`
this user cannot write in was `plan-bad-id` (or `unsafe-value`) to `check`
and `adopt-work-dir-unwritable` to `execute`: `check` lists the directory
as a finding (#524), and `execute` refuses it before it opens the source,
ahead of the two asks, which #1125 had placed after `_work_root`. The
comments in `cmd_execute` and `_checked_org_and_id` said that cannot
happen.

- `cmd_check` asks `plan.names()` and `_checked_org_and_id(plan)` right
  after its mistyped-plan question, before `_work_root`, and `cmd_execute`
  asks them right after `_refuse_a_mistyped_plan`, before `_work_root`.
  Both read only the plan. `execute` now asks them before
  `_require_filter_repo()` too.
- A side effect, said in the body: `check` printed the Triad advisory,
  once it had opened the source, before it refused a bad `org:` or `id:`;
  it prints nothing now, since the refusal comes before the source is
  opened.
- The comments and docstrings that placed the asks "at its head, after the
  triad advisory" or "right after the names" say where they are now.
- tests/test_adopt_plan_value_order.py: `both_on` takes a `--work-dir` for
  both commands; one row per bad `id:` and bad `org:` beside an unwritable
  `--work-dir` (skipped where `chmod` cannot keep this user from writing);
  and, for NIT-2, one row per value that asks `check` alone and holds
  stdout empty, the position being told by the Triad advisory the unedited
  plan prints first.
- tests/test_adopt_check_plan_name.py: the docstring of the kept-submodule
  row says it is a regression row since `check` asks `org:` at its head
  (NIT-1).

Lane: openreposhape-4 (openRepoShape-4)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…`--work-dir` that is a file or a shared one, or beside a gone source, is the value's refusal in both `check` and `execute`, so the head ask is pinned against `_work_root`'s other refusals and the source (#1179)

Six rows, with the plan unedited beside the same file, directory or path as the control. Test only: no change to adopt-project.py. Stacked on the head of #1125 (9549006).

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…eeping this branch's tests/test_adopt_plan_value_order.py

#1125's own files are the same in its final head and its squash, so the one
conflict (tests/test_adopt_plan_value_order.py) is taken as this branch had it.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…` and `with_line` from `test_adopt_template_values` and puts nothing on `sys.path` itself, and its docstring says `_work_root` refuses more, among them the file and the shared directory, no longer two things (#1234)

RV1226's two NITs on #1226 (for #1179), tests only. The 46 collected ids
and their 46 outcomes are the same before and after.

NIT-1: `test_adopt_template_values` already puts `scripts/` on `sys.path`
and imports `double_quoted` beside `load_yaml`, so the module's own insert
and its `from repo_shape import double_quoted` put `scripts/` there a
second time. It imports `double_quoted, with_line` from that module now, and
`sys`, `REPO` and the insert are gone: nothing else in the file used them.

NIT-2: the docstring called a `--work-dir` that is a file and one every user
can write in "two more" refusals of `_work_root`. It also refuses a symlink
loop, a symlink to what is no directory, a directory another user owns and
a shared directory above the `--work-dir`. It says "more ... among them".

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@sourcery-ai

sourcery-ai Bot commented Nov 10, 2026 •

Copy link
Copy Markdown

Reviewer's Guide

Tests

Read the test-module import cleanup together with its existing helper dependency: it reuses double_quoted from test_adopt_template_values and removes the redundant sys.path setup.

  • tests/test_adopt_plan_value_order.py L72 (removed lines), L76-80

Read the docstring correction alongside the tests it describes: _work_root has more than two refusals, including the file and shared-directory cases.

  • tests/test_adopt_plan_value_order.py L55-56

Tips and commands

Interacting with Sourcery

  • Trigger a new review: Comment @sourcery-ai review on the pull request.
  • Continue discussions: Reply directly to Sourcery's review comments.
  • Generate a GitHub issue from a review comment: Ask Sourcery to create an
    issue from a review comment by replying to it. You can also reply to a
    review comment with @sourcery-ai issue to create an issue from it.
  • Generate a pull request title: Write @sourcery-ai anywhere in the pull
    request title to generate a title at any time. You can also comment
    @sourcery-ai title on the pull request to (re-)generate the title at any time.
  • Generate a pull request summary: Write @sourcery-ai summary anywhere in
    the pull request body to generate a PR summary at any time exactly where you
    want it. You can also comment @sourcery-ai summary on the pull request to
    (re-)generate the summary at any time.
  • Generate reviewer's guide: Comment @sourcery-ai guide on the pull
    request to (re-)generate the reviewer's guide at any time.
  • Resolve all Sourcery comments: Comment @sourcery-ai resolve on the
    pull request to resolve all Sourcery comments. Useful if you've already
    addressed all the comments and don't want to see them anymore.
  • Dismiss all Sourcery reviews: Comment @sourcery-ai dismiss on the pull
    request to dismiss all existing Sourcery reviews. Especially useful if you
    want to start fresh with a new review - don't forget to comment
    @sourcery-ai review to trigger a new review!

Customizing Your Experience

Access your dashboard to:

  • Enable or disable review features such as the Sourcery-generated pull request
    summary, the reviewer's guide, and others.
  • Change the review language.
  • Add, remove or edit custom review instructions.
  • Adjust other review settings.

Getting Help

@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-11-10T12:31:36Z) RV1234: CHECKPOINT at 3aa9d51 (the review stopped at Brett Heap's account-swap word at 11:14Z; its last item is completed below)

Items 1, 2, 3, 4a, 6 and 7 are answered. Item 5, the gate, and the module-passes half of item 4 are not. I stopped the pytest by PID on LAST STEP. It had passed 39 tests with no failure, and the log ends .......................................Terminated then EXIT 143. A run to the end needed 7 minutes or more, so it could not finish within the 3 minutes allowed. So there is no verdict, and the setup and clone paths are at the end.

There is nothing against the PR so far. I found no MUST or SHOULD, and one body note (below).

I touched nothing on GitHub or in any register. The clone is clean and detached at 3aa9d51390fc0b8116c74a3b50642bc412beb93f, which gh pr view 1307 still gives as the head, with #1226 at 489bc3e8. No process of mine is left running.

1. The diff touches only the one file, and does exactly NIT-1 and NIT-2: YES.

2. NIT-1: YES.

  • The head has from test_adopt_template_values import double_quoted, with_line at line 80. The template module defines with_line (line 353) and imports double_quoted, load_yaml from repo_shape (line 60).
  • grep -n -w -E 'sys|REPO' of the file at the head exits 1, so neither name appears. At the parent they appear at lines 72, 77 and 83.
  • os, shutil and Path are still used, and every other imported name is used.
  • A probe on tests/ with /usr/bin/python3 -I -B, in the briefed environment, shows scripts/ on sys.path:
at 489bc3e at 3aa9d51
imports yes yes
scripts/ entries on sys.path 6 5
module has sys, REPO True, True False, False
double_quoted and with_line are the template's own objects True, True True, True
  • scripts/ still reaches sys.path once more through tests/conftest.py:59, which the module imports from. That is outside this issue.

3. NIT-2: YES. I read _work_root at 489bc3e (adopt-project.py:18498; I read it from git show).

  • The docstring now says it "refuses more before it makes anything, among them a --work-dir that is a file and one every user can write in". At the parent's head _work_root refuses:
    • a file there or above it, through _made_0755, _unmade_work_dir and _work_dir_refusal;
    • a symlink loop (SYMLINK_LOOP, _the_loop_in);
    • a symlink to what is no directory;
    • a directory this user cannot write where it would be made;
    • a directory another user owns, and one every user can write in without the sticky bit (_shared_with_another_user);
    • a shared directory above the --work-dir (_refuse_a_shared_chain, at line 2583).
  • That is at least six refusals, so "two" was false and "more ... among them" is true.
  • "Before it makes anything" is the old text, kept. It holds for the refusals named, because each concerns something that exists before the run, and _shared_above is asked before anything is made.
  • The body's adopt-project.py:18498 is right.

4. Same tests: collect-only YES; module passes OPEN.

  • pytest --collect-only -q tests/test_adopt_plan_value_order.py gives 46 tests collected at 489bc3e and 46 tests collected at 3aa9d51.
  • cmp of the two id lists gives IDS IDENTICAL, and the sha256 (first 16) of each is e00f6981fbc67d39, as the body says.
  • The module passing at the head is not shown by me. The writer's 46 PASSED is in the PR body.

5. The gate: OPEN, not run to the end. The command, in RV1234-scratch/gate.sh, was this module with tests/test_adopt_pins.py, tests/test_adopt_root_symlinks.py and tests/test_adopt_template_values.py in one run, -rs, basetemp /tmp/claude-1000/l3bt/RV1234-gate.

  • No test file imports from this module (git grep of tests/ finds none).
  • The three modules it imports from import nothing from other test_ modules.
  • The writer's line for comparison is 482 passed, 3 skipped in 419.13s.

6. Merges: all CLEAN. I ran git merge-tree --write-tree of the head with each. The first row's main was checked against gh api first (3add78e1cfffcb8f92d9fbb6ea3c884674b129e2). The other trees match the body's table.

With Exit Tree
main 3add78e1c 0 6e0e94d8ca70fdcba4482ce751f003c310ff87ae
#1305 142ca405 0 b7e6540c549c57b3326a15b1fe305cadea2128f1
#1210 791106c2 0 d12ad74aba326fbf20f1753ad2e5a8e861b74b0d
#1226 489bc3e8 0 a127ec3c14031254affd864789c23a848d997272

For each of the first three, the tree with #1226's head in place of this head differs from the head's tree only in tests/test_adopt_plan_value_order.py, +5/-9. #1226's head merged with main gives 2f5bf33b, with #1305 gives 4c4148c8, and with #1210 gives b40ae31c, as the body says. In all three merged trees the file has no sys or REPO, and the template module still defines with_line and imports double_quoted.

7. The body: YES, with one note.

What is left, in /workspace/projects/openRepoShape-worktrees/_lane3-scratch/RV1234-scratch/CHECKPOINT.md:

C=/workspace/projects/openRepoShape-worktrees/_lane3-scratch/RV1234
X=/workspace/projects/openRepoShape-worktrees/_lane3-scratch/RV1234-scratch
git -C $C rev-parse HEAD     # must be 3aa9d51390fc0b8116c74a3b50642bc412beb93f
nohup $X/gate.sh > $X/gate.log 2>&1 &     # one pytest, in the background; then tail $X/gate.log

If the gate reads about 482 passed and 3 skipped with EXIT 0, the verdict is READY at 3aa9d51, with the optional Sourcery edit above. If a row fails, it is NOT READY, because no logic moved and a failure would be a wrong import line.

Paths:

  • clone: /workspace/projects/openRepoShape-worktrees/_lane3-scratch/RV1234
  • scratch: /workspace/projects/openRepoShape-worktrees/_lane3-scratch/RV1234-scratch
  • basetemps: /tmp/claude-1000/l3bt/RV1234-collect, /tmp/claude-1000/l3bt/RV1234-gate

Item 5, completed by lane 3's main loop after the swap (lane openRepoShape-3). RV1234's own runner RV1234-scratch/gate.sh was run unchanged, at 3aa9d51390fc0b8116c74a3b50642bc412beb93f, with the env wrapper above (stub gh, LANES_LANE unset, GIT_CONFIG_GLOBAL=/dev/null): 482 passed, 3 skipped in 698.82s (0:11:38), EXIT 0. The 3 skips are the reftable rows of tests/test_adopt_root_symlinks.py (git 2.45 or later). That is the writer's 482 passed, 3 skipped.

So, by the review's own rule above, RV1234's verdict is READY at 3aa9d513. Lane 3 sets v1.2.1, marks #1307 ready, and places it on #473 by this READY time. It lands after #1226 (19th), by a restack onto #1226's squash. The optional Sourcery edit is not taken.

@brettheap brettheap added this to the v1.2.1 milestone Nov 10, 2026
@brettheap
brettheap marked this pull request as ready for review November 10, 2026 12:32
@sourcery-ai

sourcery-ai Bot commented Nov 10, 2026

Copy link
Copy Markdown

Sorry @brettheap, you've used your own review budget of 250,000 diff characters for the last 7 days.

You can request another review in 4 days and 5 hours by commenting @sourcery-ai review. Upgrade to get a review now.

brettheap and others added 3 commits November 10, 2026 10:02
Lane: openRepoShape-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…lan_value_order.py

The PR's own no-context lines over the squash equal its lines over #1226's head 489bc3e, and the tree is 960f1ad, the tree of this PR's own range applied to main.

Lane: openRepoShape-3

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@sonarqubecloud

Copy link
Copy Markdown

@brettheap

Copy link
Copy Markdown
Contributor Author

(lane openRepoShape-3, 2026-11-10T14:22:13Z) Restacked after #1226 landed. #1226 landed at 14:04Z as 3ffe75bb9, with final head cc6c4153a. Lane 3's checked script (restack-1307.sh) merged that final head, then the squash, now main, taking ours for tests/test_adopt_plan_value_order.py, the one file that conflicted. main had not moved past the squash then.

It stays READY and 28th in v1.2.1's order. #1289 has landed since (f2a6527e9), so the pilot refreshes it at its turn as usual.

This branch has not been deployed

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

Labels

None yet

Projects

None yet

1 participant