Skip to content

fix(app-control): run map upkeep passes on the tree the upkeep PR ships #9947

Open

Description

@kyle-sexton

Problem

The map-upkeep flow (/testing:refresh-feature-map on main, ported to /app-control:map refresh in #9934) runs its source wave and live pass on whatever branch is checked out. Only afterwards does it switch to the upkeep branch, which is created from the default branch, or merges the default branch into it. When the pass starts on a feature branch whose app code differs from the default branch, the corrections it derived describe handles or routes the upkeep PR's own app version does not have. Merging the default branch into an existing upkeep branch can likewise make the earlier evidence stale.

Fix

Either resolve and update the upkeep branch before the source wave and the live pass, or have the pass record blocked when HEAD's app tree differs from the default branch's.

Evidence: plugins/testing/skills/refresh-feature-map/SKILL.md:152-156; Codex review thread on #9934 (refresh.md:158). It exists on main, so it is deferred from that PR.

Activity

  1. added
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 25, 2026
  2. github-actions commented on Oct 25, 2026

    @github-actions
    Contributor

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

    Size: Small
    Complexity: Medium
    Uncertainty: Knowable
    Flags: intent
    Blocked by: none

    Understood: the map-upkeep flow runs its source wave and live pass on the checked-out branch, then switches to the upkeep branch. Its corrections can then describe an app tree the upkeep PR does not ship. The issue offers two fixes and picks neither, so one decision is needed.

    1. Which fix should we take: (a) resolve and update the upkeep branch before the source wave and live pass, or (b) record blocked when HEAD's app tree differs from the default branch's? RECOMMENDED: (a). It fixes the cause, so the evidence matches the shipped tree. (b) only stops the run and leaves the feature-branch case unusable.

    Possibly related (not duplicates): #9934 context, and the open map-upkeep issues on read-only enforcement and fork-PR branch adoption.

    Automated triage, applied by the lanes App.

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

    @melodic-automation-lanes
    Contributor

    The triage verdict left this issue at status: needs-decision:

    • flagged: intent
    • held by status: needs-decision
    • no lanes App verdict comment shows whether an earlier verdict was flagged
  4. added
    work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 25, 2026
  5. melodic-automation-lanes commented on Oct 25, 2026

    @melodic-automation-lanes
    Contributor

    Refinement. A read-only run explored this repository, searched its issues and pull requests, and read the allowed docs to draft what follows. On an issue a listed human filed, it counts as the issue's spec once posted, while unedited; it is still model text, so check it.

    Intended outcome: Map upkeep resolves and updates the upkeep branch (create from default, or merge default into it) before the source pass and live pass, so corrections describe the tree the upkeep PR ships.

    Dependencies

    • #​9934 (the /app-control:map refresh port) must be merged before any refresh.md change; it is not in the checkout

    Related work

    Open questions

    1. Which fix: (a) resolve and update the upkeep branch before the source and live passes, or (b) record blocked when HEAD's app tree differs from the default branch's?
      RECOMMENDED: (a) Switch to or create the upkeep branch, merge the default branch, then run Steps 4 and 5 there, so evidence matches the shipped tree. Basis: plugins/testing/skills/refresh-feature-map/SKILL.md:152-156 does the switch only after Steps 4-5; judgment
    2. Under (a), the pass may find nothing to change (clean) and Step 2 skip logic then runs after a branch switch. Should a clean pass leave the upkeep branch merged and checked out, or return to the original branch?
      RECOMMENDED: Return to the original branch after a clean pass and create or merge the upkeep branch only when a correction exists, which leaves (b)'s check as the guard for the pre-pass tree. Basis: SKILL.md:146-148 says a clean pass opens nothing; judgment
    3. Under (a), the dirty-tree checks (untracked map, blocked on outside changes) at SKILL.md:156-165 must run before the passes, and the untracked-map case moves files with the switch. Should they move to before Step 4 unchanged?
      RECOMMENDED: Yes, move them unchanged ahead of Step 4, and keep the blocked outcomes. Basis: plugins/testing/skills/refresh-feature-map/SKILL.md:156-165
    4. Should the fix land in plugins/testing refresh-feature-map only, or also in the /app-control:map refresh port once #​9934 is merged?
      RECOMMENDED: Both, in separate changes. The testing skill now; the app-control refresh.md after #​9934 merges (not in the checkout; no refresh.md found under plugins/app-control). Basis: issue body cites refresh.md:158 on #​9934; Glob of plugins/app-control for refresh.md found none

    Sources read

    • plugins/testing/skills/refresh-feature-map/SKILL.md:91-132: Steps 4 and 5 run the source wave and live pass on the current HEAD
    • plugins/testing/skills/refresh-feature-map/SKILL.md:149-170: the upkeep branch is switched to, or default merged into it, only after the passes, with dirty-tree checks and blocked outcomes
    • plugins/app-control: no refresh.md or upkeep text exists in the checkout

    Automated refinement by the lanes App. Answer with a comment whose first line is **Decision recorded.**.

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

    priority: mediumReal value, no hard deadline; normal backlog flow.status: needs-decisionAwaiting a human or maintainer judgment call.work-class: scopedA briefed fix or small feature; blast radius bounded by the brief, tests exist.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions