Repository navigation
Description
Summary
pm list has two unrelated options whose names both read as "everything":
--all— an alias for--no-truncate, i.e. pagination only ("return every matched row,
overriding any--limit").--status all— the actual "no status filter" switch.
pm list defaults to open statuses. So pm list --all returns only the open items, and
the JSON envelope labels that partial view "completeness": {"status": "complete"}.
An agent that types the intuitive thing gets a wrong answer plus an explicit assurance the
answer is complete. Every other command rejects --all outright, which makes pm list
accepting it read as confirmation that it means what it looks like.
Reproduction (2026.7.28)
Against a real repo — 26 items on disk, 1 open:
$ git clone --depth 1 https://github.com/unbraind/pm-ops.git && cd pm-ops
$ find .agents/pm -name '*.toon' | wc -l
26
$ pm list --all --json | jq -c '{count, total, completeness: .completeness.status}'
{"count":1,"total":1,"completeness":"complete"}
$ pm list --status all --json | jq -c '{count, total}'
{"count":26,"total":26}--all is not rejected, and it is not in the flag list — it appears only as a parenthetical
on --no-truncate:
$ pm list --help | grep -n -- '--all'
46: (alias: --all)Meanwhile the same flag on any sibling command errors cleanly:
$ pm show ops-g3br --all; echo $?
{ "type": "urn:pm-cli:error:unknown_option", "code": "unknown_option", ... }
2
$ pm activity --all; echo $? # 2
$ pm notes ops-g3br --all; echo $? # 2So the failure mode is specific to pm list: exit 0, no diagnostic, silently narrowed result.
Why this matters
This is a context-integrity bug, not just a naming nit. The three signals an agent uses to
decide whether it has the whole picture all agree, and all are wrong:
| signal | says | truth |
|---|---|---|
| exit code | 0 |
— |
completeness.status |
complete |
1 of 26 |
total |
1 |
26 |
total reporting the post-filter count is defensible on its own, but combined with
completeness: "complete" there is no field left that would let a caller notice the gap. An
agent summarizing "what is in this project" will confidently report the 1 open item and never
learn the other 25 exist.
The collision is also self-reinforcing: --status all establishes that "all" is this
command's word for "no filter", which makes bare --all look like the general form of it.
Suggested resolution
Preferred: drop the --all alias. --no-truncate already says what it does, and the
alias only exists to be misread. pm list --all would then error like it does on every other
command, and the error can suggest --status all.
If the alias must stay, either of these would defuse it:
- Rename it to something scoped to pagination (
--no-limit,--unpaginated) and list it as
a first-class flag in--helprather than a parenthetical. - Make
completenessaccount for the active status filter — e.g. a
filtered_out_count, orstatus: "filtered"whenever a default (not user-specified)
filter excluded rows. This is the more generally useful fix: it would also catch the case
where an agent forgets--status allwithout using--allat all.
Independently, it would help if total were documented as post-filter, since alongside
count it reads as the workspace total.
Environment
@unbrained/pm-cli2026.7.28- Node 24, Linux
- Reproduced on a fresh shallow clone of
unbraind/pm-ops
Activity
coderabbitai commentedon Jul 28, 2026
🔗 Related PRs
#51 - Polish CLI ergonomics, delete safety, and templates dedup [closed]
#147 - fix: optimize agent list/search UX and smoke cleanup reliability [closed]
#231 - Metadata governance & coverage observability (missing-field filters, stats breakdowns, validate full-id lists, aggregate labels) [closed]
#234 - pm context --depth full + --parent subtree scope; pm list --no-truncate (GH-156, GH-154, GH-155, GH-223) [closed]
#310 - Fix status-all context filters [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 28, 2026
Tracked in pm-q7qojt. The PM item links the pagination/status collision to the list-family consolidation and runtime-enumeration lineage.
unbraind commentedon Jul 28, 2026
Implemented in #798 and tracked in pm-q7qojt.