Skip to content

Session Handoff [auto-2106]: Refuse a Dangling Remote-Tracking Target in local_review per #2106 #2120

Description

@ptr727

Next steps, in priority order

  1. Fix Refuse a Dangling Remote-Tracking Target in local_review Instead of Falling Through #2106 in scripts/local_review.py. remote_tracking_ref decides whether a remote-tracking target exists with git show-ref --verify --quiet, which fails for a ref that exists but whose object is missing, or for a symbolic ref whose target is gone, so target_ref falls through to the as-written step and a local branch sharing the short name defines the review scope. Establish that the exact ref name exists without requiring its object to resolve, then refuse where it does not peel to a commit. The check holds on the files and reftable backends alike. Done looks like: both constructed shapes in the issue (a dangling symbolic ref, and a loose ref naming an absent object, each beside a local branch of the same short name) refuse with a clear message rather than resolving, a test pins each shape, and the existing local_review.py: target_ref returns a bare name a same-named local branch can shadow #1235 non-commit refusal and ordinary remote-tracking resolution still pass.
  2. Drive the pull request into develop with Closes on promotion: #2106 in its body, scope develop.

External blockers

None known.

Internal dependencies

None. #2109 (qualified --target spellings) touches the same function but waits on a maintainer decision about whether qualified refs are in contract, so it is out of scope here. Keep this fix narrow so it does not pre-empt that decision.

State

No branch or worktree yet. Base the work on develop, per repo-worktree. The fix for #1235 (PR #2108) is merged and promoted, and #2106 was filed as its follow-up. Re-derive open pull requests touching scripts/local_review.py before starting.

The parked decision queue

None for this lane.

What the last round did

Nothing yet. The unattended picker created this lane from the open backlog.

What not to repeat

Nothing recorded yet.

New learnings

None yet.

Activity

  1. added
    handoffA link in the session handoff chain, one open issue per track
    on Sep 30, 2026
  2. ptr727 commented on Sep 30, 2026

    @ptr727
    OwnerAuthor

    Parked: waiting on decision #2122

    Done

    • The fix for Refuse a Dangling Remote-Tracking Target in local_review Instead of Falling Through #2106 is written, tested, and pushed as branch feature/auto-2106 (head 1b272939) in pull request #2121 into develop. Its body carries Closes on promotion: #2106.
    • ref_name_exists in scripts/local_review.py checks, in this order: check-ref-format, an exact for-each-ref match, the loose ref file read with stat, and symbolic-ref -q. remote_tracking_ref refuses with CannotRun where the exact name exists but does not resolve, and it keeps returning None for a ref that is truly absent. Tests in DanglingRemoteTrackingCase run on both backends, with a reftable subclass. Each check was mutation-tested.
    • local-strict-review ran over the full diff for each push. The rounds found a broken loose ref file, an uncaught OSError, and a symbolic-ref step with no test, and each was fixed. The final pass at 1b272939 found nothing and is recorded against develop.
    • CodeRabbit (prompted, since the repository is under ten stars) found that Path.is_file returns False for a name too long on Python 3.14. That is fixed in 1b272939, and the thread is replied to and resolved. Its re-review of the new head was refused as rate limited.
    • Copilot has reviewed twice, with Findings: None both times. Checks are 10/10, merge state is CLEAN, there are 0 unresolved threads, and suppressed is on_head=0.

    Why it stopped

    pr_review.py wait ends in COVERAGE_IS_UNSTATED. The Copilot round on the head carries no file table. The round on 164aa0d0 does, and it names exactly the same two changed files, but under Merge Gate item 2 a table does not carry forward. So the merge is the maintainer's call, asked in #2122.

    What remains

    • If Merge #2121 When Copilot's Head Round States No Coverage? #2122 authorizes the merge, capture headRefOid, run gh pr merge 2121 --squash --repo ptr727/ProjectTemplate (without --delete-branch), then clean up per drive-pr step 4. That means removing the worktree at ../worktrees/ProjectTemplate-auto-2106, deleting the local branch, verifying the remote tip with git ls-remote, and deleting the remote branch. Then close out this lane.
    • If Merge #2121 When Copilot's Head Round States No Coverage? #2122 asks for a new Copilot round instead, re-request it on the head, run pr_review.py wait, and merge once a round covers the head.
    • Re-run pr_review.py status 2121 first either way, since the head or the reviews may have moved.

    Worktree

    The worktree was left standing at ../worktrees/ProjectTemplate-auto-2106 on feature/auto-2106. It is clean, and everything in it is pushed.

    Filed along the way

    Only the decision issue #2122. No lesson issue was filed.

  3. added
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Sep 30, 2026
  4. ptr727 commented on Sep 30, 2026

    @ptr727
    OwnerAuthor

    Unblocked on 2026-09-30: decision #2122 is answered, option 1: #2121 may merge into develop on the carried-forward Copilot file table, the unchanged file set, and the recorded local pass. The blocked label is removed so the lane can resume.

  5. removed
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Sep 30, 2026
  6. ptr727 commented on Oct 1, 2026

    @ptr727
    OwnerAuthor

    Parked on decision #2197.

  7. added
    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoff
    on Oct 1, 2026
  8. ptr727 commented on Oct 1, 2026

    @ptr727
    OwnerAuthor

    Lane closed out in an attended session. Decision #2197 answered (merge as is), PR #2121 squash-merged into develop as 427b2d3, branch and worktree removed. No successor.

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

    blockedBlocked on another issue: one in another repository, or a decision issue here for a parked handoffhandoffA link in the session handoff chain, one open issue per track

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions