Match unbounded list JSON and SDK envelopes to PM CLI 2026.10.2
Agents reading native list received terminal items, ID ordering, a different projection, and a pre-filter total. Add an explicit unbounded JSON mode matching PM CLI 2026.10.2: terminal exclusion, published ordering, brief/default and full/all-status projections, exact filters, matching totals, and omission receipts. The Rust SDK exposes the same envelope through Workspace::list_unbounded; existing native list behavior remains available.
Nine complete recorded golden envelopes compare the real published CLI, compiled native binary, and Rust SDK against the same synthetic tracker with a fixed clock. Cases include lifecycle filters, priority/update/ID ties, sub-millisecond timestamp ties, unknown metadata and empty selections. Refusal, malformed reads, live clocks and closed output pipes also have tests. CI/tool pins advance to 2026.10.2 while publication approval guards remain unchanged.
Validation: pm test pm-rust-p0no --run --match 'just release-check' --progress passed formatting, strict all-target Clippy, complete rustdoc, full tests, exact 100% line/function/region/branch coverage, dependency audit and changelog validation. Published mutation and multi-branch history differential suites also passed. Strict tracker health passed with guidance/provenance warnings. The parity matrix documents missing context/search/next, pagination, runtime registries, and get-envelope differences.
Package records:
New records are reviewable now in the candidate tracker. No items were closed. The older toolchain branch duplicates already merged #52 and is retained; #53 (rebased), #54 and #57 passed all three CI targets and aggregate gates on their exact heads. Their verdicts are recorded in docs/backlog-review-2026-10-02.md.
Summary by Sourcery
Match unbounded list JSON and SDK envelopes with PM CLI 2026.10.2 while keeping the existing native list behavior available.
New Features:
- Add an explicit unbounded JSON list mode matching PM CLI 2026.10.2, including terminal-item handling, filtering, ordering, projections, totals, and omission receipts.
- Expose matching unbounded list envelopes through
Workspace::list_unboundedand full projections throughWorkspace::list_unbounded_full, while preserving the existing native list contract.
Bug Fixes:
- Align native and SDK unbounded list results with the published PM CLI’s lifecycle filtering, metadata projection, timestamp ordering, and filtered totals.
Enhancements:
- Document the supported CLI parity scope and remaining compatibility gaps for PM CLI 2026.10.2.
Build:
- Update CI, release tooling, documentation, and compatibility pins to PM CLI 2026.10.2 while retaining the existing changelog pin.
CI:
- Add golden differential coverage across the published CLI, native binary, and Rust SDK, including filtering, ordering, malformed input, refusal, clock, and output-pipe cases.
Documentation:
- Add the PM CLI 2026.10.2 parity matrix and backlog review documentation.
Tests:
- Add nine recorded golden envelope comparisons and regression tests for full projections, timestamp ordering, invalid requests, malformed reads, and missing external tooling.
Chores:
- Record parity ownership, follow-up pagination work, and backlog review results in project tracker records.
Summary by cubic
Matches unbounded list JSON and SDK envelopes to PM CLI 2026.10.2: default reads exclude terminal items, ordering and projections mirror the published CLI, and totals count only filtered items. The Rust SDK exposes the same envelope via Workspace::list_unbounded; the existing native list contract remains unchanged, and review findings from the parity slice are incorporated, including full-metadata fields for --full/--all reads and transitive timestamp ordering with a lexical tie-break.
Tests — Added a golden differential suite comparing the published CLI, compiled binary, and Rust SDK across nine envelopes, plus refusal, malformed-read, live-clock, and closed-pipe cases. Pinned CI and release tooling to 2026.10.2 and documented the parity scope. Timestamp ordering keys are cached so each read parses once, with no change to envelope semantics; pagination and bounded output are recorded as follow-up work.