Skip to content

fix(pr-pipeline): hold lane PRs on marketplace sources and cost paths under native auto-merge #9449

Closed

Description

@kyle-sexton

Refs: #9276

Problem

Under merge.lane-prs: native (#9448), a lanes App pull request is held only by ci-status and enable-auto-merge.mjs. Both read HOLD_PATH_FLOOR in .github/scripts/pr-merge/merge-holds.mjs, which lacks two path sets that the pr-merge gate scores and holds. The gate's own hold was already a slow backstop, because it escalates only after a refusal has stood for merge.risk-escalation-minutes. Under native that backstop is gone. Found by the security review of #9448; these gaps predate it.

  • .claude-plugin/marketplace.json. The gate scores a marketplace entry that is added, removed, or has its source changed as HIGH (babysit_risk.py is_manifest_path and _marketplace_changes). HOLD_PATH_FLOOR covers only **/.claude-plugin/plugin.json, CODEOWNERS, .gitmodules and the forced paths. A lane PR could therefore repoint a plugin's source to an external repository with no hold. The pr-pipeline README's phrase "every plugin manifest" overstates the floor.
  • Cost paths. The gate's cost-review-required reasons (babysit_risk.py COST_PATHS: plugins/multi-agent/reference/defaults.yaml, Pulumi, Terraform and Bicep files) are not hold paths. A lane PR can raise model or effort spend with no owner decision.

Done when

  • ci-status and enable-auto-merge hold a lanes App PR that changes a marketplace entry's source, or adds or removes an entry, until a trusted person approves the head.
  • They hold a lanes App PR that changes a cost path the same way.
  • A test fails before the fix for each.

Activity

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

    @github-actions
    Contributor

    Proposed work class: none

    Thanks for the report. Automated triage handed this issue to a maintainer.

    Unconfirmed model suggestion: work-class: scoped
    Basis: automated intake triage; a maintainer confirms or changes it.

    Automated triage. A maintainer reviews it.

  3. added
    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.
    and removed
    needs-triageNot yet classified. Floor until a type and one priority tier are set.
    on Oct 23, 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

    needs-humanHuman-in-the-loop required; autonomous sessions must not resolve items carrying this.status: needs-decisionAwaiting a human or maintainer judgment call.

    Type

    Fields

    No fields configured for Bug.

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions