You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Agent UX: pm update-many --ids silently drops nonexistent IDs (no unmatched_ids/warning, exit 0) — regresses from single-item item_not_found #596
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.
#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!
Activity
coderabbitai commentedon Jul 18, 2026
🔗 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 plancommand to generate an implementation plan and prompts that you can use with your favorite coding assistant.🧪 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:💬 Have feedback or questions? Drop into our discord!
unbraind commentedon Jul 19, 2026
pm tracker item: pm-ukml
chore(pm): full-directive review 2026-07-19 — PR#593/#594/#605 lanes …