Match unbounded list JSON and SDK envelopes to PM CLI 2026.10.2

Merged
UN
20d ago
+2194-49

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_unbounded and full projections through Workspace::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.