Skip to content

Agent UX: pm update-many --ids silently drops nonexistent IDs (no unmatched_ids/warning, exit 0) — regresses from single-item item_not_found #596

Closed

Description

@unbraind

Summary

pm update-many --ids <a,bad,b> silently drops IDs that don't exist: exit 0, no unmatched_ids, no warnings, and the counts reflect only matched items — so an agent has no structural signal that part of its request was ignored. The single-item path (pm update <bad>) correctly reports item_not_found, so the bulk path regresses from it. Verified under CLI 2026.7.18.

Repro

pm update-many --ids pm-REAL1,pm-zzzz,pm-REAL2 --priority 4 --json
# matched_count: 2, updated_count: 2, skipped_count: 0, failed_count: 0
# no 'unmatched_ids' key, no 'warnings', ids/rows list only the 2 matched, exit 0

pm update pm-zzzz --priority 4 --json
# code: item_not_found   <-- single-item path DOES signal it

Observed vs expected

  • Observed: pm-zzzz vanishes. matched_count = 2 (not 3), skipped_count/failed_count = 0, no unmatched_ids, no warning, exit 0. The only way to detect the drop is to diff the requested --ids against the returned ids — a manual cross-reference the envelope never prompts.
  • Expected: an unmatched_ids: ["pm-zzzz"] field (or a top-level warnings[]), and/or an unmatched_count, so the drop is machine-detectable without client-side list diffing.

Why it matters for agents

Bulk update-by-ID-list is a common recovery/migration pattern. An agent seeing updated_count: 2, failed_count: 0 reasonably concludes all requested items were processed. A dropped ID may be a typo, a stale ID from a prior session, or a race-deleted item — exactly the cases the agent needs surfaced. Without a structural field, every bulk caller must defensively diff two lists on every call, which is the token-expensive parsing the CLI should absorb. This is the same silent-mutation class the AGENT_UX_CONTRACTS "relationship mutations" section addresses (e.g. ordering_cycle_created), applied to bulk --ids.

Duplicate check

Distinct from previously filed issues. #590 (closed) was cycle-creating --blocked-by succeeding silently; this is --ids silent drop in update-many. Not covered by docs/AGENT_UX_CONTRACTS.md.

Activity

  1. coderabbitai commented on Jul 18, 2026

    @coderabbitai
    🔗 Related PRs

    #45 - feat(agent-ux): deps-graph integrity, close lifecycle clarity, calendar/search/test ergonomics [closed]
    #146 - fix: agent never-block reliability, MCP/version coherence, and CI/docs hardening [closed]
    #434 - Fix self-parent guards and pnpm 11 bootstrap gates [merged]
    #545 - SDK contract integrity: workspace paths, dependency truth, validation, and MCP parity [merged]
    #549 - feat(sdk): ship history time travel, rich reads, and runtime integrity [merged]


    📝 Issue Planner

    Check the box below or use the @coderabbitai plan command to generate an implementation plan and prompts that you can use with your favorite coding assistant.

    • Create Plan

    🧪 Issue enrichment is currently in open beta.

    You can configure auto-planning by selecting labels in the issue_enrichment configuration.

    To disable automatic issue enrichment, add the following to your .coderabbit.yaml:

    issue_enrichment:
      auto_enrich:
        enabled: false

    💬 Have feedback or questions? Drop into our discord!

  2. unbraind commented on Jul 19, 2026

    @unbraind
    OwnerAuthor

    pm tracker item: pm-ukml

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

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions