Skip to content

fix(roadmap): comment on pull request when implement stops #3997

Open

Description

@dan-petty

Problem Description

When ImplementRun stops on a task group before completion (such as when it hits a token budget limit or a test fails), _push_passed() pushes the commits of completed groups to the branch on GitHub. end_stopped() writes a status comment to the issue (self.number), but it writes no comment to the pull request (self.pull) unless self.amendments is not empty. In addition, a staged pull request keeps its staging title (docs(openspec): plan #...) and body. The GitHub Actions workflow Plan Check then runs on the pushed code commits and fails, while human reviewers see no explanation on the pull request.

Reproduction Steps

  1. Start an implement run for a staged item with 3 task groups.
  2. Complete group 1 and group 2.
  3. Stop group 3 due to token limit or a failed command.
  4. Inspect the pull request on GitHub: _push_passed() pushed commits for group 1 and 2, but the pull request has no comment and its title still starts with docs(openspec): plan #. CI Plan Check runs and fails.

Expected vs Actual Behavior

Expected: When ImplementRun stops after pushing commits to a pull request, it writes a status comment to self.pull that names the stopped step and the failure class.
Actual: ImplementRun writes no comment to self.pull, leaving the pull request without status information.

Environment Diagnostics

  • DevOps CLI Version: 0.80.0
  • Python Version: 3.14.10
  • Execution Environment: Kubernetes runner pod

Activity

  1. added
    type/bugDefect, regression, or incorrect runtime behavior
    scope/roadmapThe roadmap jobs: intake, refine, stage, implement and the Service that runs them
    status/newStatus New: the item is not ready yet
    effort/lowEffort Low: little work
    on Nov 7, 2026
  2. dan-petty commented on Nov 7, 2026

    @dan-petty
    OwnerAuthor

    Intake placed this item to the backlog: intake puts every new item in the backlog. A person plans the milestones.

    • Type: type/bug. The fix prefix of the title gives the type.
    • Scope: scope/roadmap. The (roadmap) scope of the title gives the scope.
    • Priority: P2-Medium. Reviewers and CI get no explanation on the PR, which blocks debugging, but the system still pushes commits and does not crash.
    • Value: Medium. Improves observability for human reviewers and reduces failed CI confusion, but does not change core functionality.
    • Effort: Low. The code already writes a comment to the issue in end_stopped; extending it to write a comment to self.pull is a small addition.
    • Related: fix(roadmap): update pull request metadata when archiving a change #3991, which asks for a different change. Both deal with the pull request state after ImplementRun stops and _push_passed runs, but #3991 updates the PR title, body, and labels while the candidate adds a status comment naming the stopped step.
  3. added
    priority/p2-mediumStandard priority feature work and architectural improvements
    on Nov 7, 2026
  4. dan-petty commented on Nov 7, 2026

    @dan-petty
    OwnerAuthor

    Answer from project standards: the fault is wider than a stop in a group. In implement_run.py, the stop method posts to the pull request only when self.pull is set and self.amendments is not empty. So a stop in the verify phase, the scoped checks, the push or the publish phase also leaves the pull request with no comment.

    Cover these phases in the acceptance criteria. A test for a stop in each phase must find one comment on the pull request. The comment names the step and the failure class. It holds a marker line for the run id, so a rerun updates it and posts no empty comment.

    This item stays the owner of the comment on a stop. The issue "feat(roadmap): implement keeps phase marks and the spend of a killed Job" (part of #3027) adds the marker line. It also adds the update of the comment of a run. It does not post the stop comment.

  5. dan-petty commented on Nov 7, 2026

    @dan-petty
    OwnerAuthor

    Evidence from pull request #4031 (issue #2163):

    When group 2 failed in the runner pod, ImplementRun.end_stopped() commented on issue #2163 and set marks in roadmap state.

    However, it did not update or comment on draft pull request #4031. PR #4031 remained open on GitHub in draft state with the initial placeholder body:
    Closes #2163\n\nThe job is not finished. It replaces this body when it finishes.

    Reviewers saw a draft PR with no diagnosis or explanation of the failure until manual evaluation. Updating the pull request body or commenting on self.pull in end_stopped() is necessary to communicate the failure diagnostic directly on the PR.

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

    effort/lowEffort Low: little workpriority/p2-mediumStandard priority feature work and architectural improvementsscope/roadmapThe roadmap jobs: intake, refine, stage, implement and the Service that runs themsource/agentFiled by an agentstatus/newStatus New: the item is not ready yettype/bugDefect, regression, or incorrect runtime behaviorvalue/mediumValue Medium

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions