Skip to content

Agent UX: pm append <id> "" is a silent no-op that still bumps updated_at (false freshness) — #588 empty-input fix didn't cover append #597

Closed

Description

@unbraind

Summary

pm append <id> "" (empty / whitespace-only positional text) silently succeeds: exit 0, changed_fields: [], body unchanged — but updated_at is bumped to now, creating a false freshness signal. pm comments <id> "" correctly rejects empty text. This is the same empty-input silent-no-op class fixed for pm comment in #588/2026.7.19, but pm append was not covered — and this variant is worse because it mutates updated_at. Verified under CLI 2026.7.18.

Repro

pm update pm-REAL1 --body "test body"
# note updated_at
pm append pm-REAL1 ""            # exit 0, changed_fields: [], body still "test body"
# updated_at is now bumped to current time

pm comments pm-REAL1 ""          # Error: Command failed  <-- validated, as it should be

Observed: before updated_at: ...T14:17:59.455Z → after updated_at: ...T14:18:01.934Z, body unchanged, changed_fields: [].

Observed vs expected

  • Observed: empty append is a no-op that still bumps updated_at; the updated_at bump directly contradicts changed_fields: [].
  • Expected: reject empty/whitespace-only append text with a structured usage error (matching pm comments). At minimum, never bump updated_at when changed_fields is empty.

Why it matters for agents

An agent running pm append $id "$text" where $text resolves to empty (a very common templating outcome) sees exit 0 + a full item payload and concludes the append landed. Worse, the bumped updated_at makes the item look freshly modified, which pollutes pm activity, recency sorts, and pm next ranking (which weights updated_at) — so a no-op silently reorders the agent's work queue. Agents must learn per-command empty-input rules instead of relying on a uniform contract.

Duplicate check

Related to #588 (closed; pm comment --message with no text = silent no-op, fixed in 2026.7.19) but distinct: (a) different command (pm append), (b) the #588 fix did not extend to append, (c) this variant bumps updated_at (false freshness) which #588 did not. Confirms the empty-input validation contract in docs/AGENT_UX_CONTRACTS.md ("Input and tracker recovery") should be applied uniformly across text-accepting mutations.

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]
    #198 - Expand SDK context and mutation primitives [closed]
    #255 - CLI surface correctness & agent ergonomics: get body parity, type-error path, comment edit/delete, validate dup-codes (GH-252/253/243/235) [closed]
    #291 - feat(update): allow audit evidence appends [merged]
    #475 - Improve package install and annotation agent UX [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-d9g9

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