Skip to content

✨ feat: generic --filter passthrough on sessions list, on tapes-client 0.5 - #80

Merged
yeazelm merged 3 commits into
mainfrom
feat/0023-labels
Aug 28, 2026
Merged

✨ feat: generic --filter passthrough on sessions list, on tapes-client 0.5#80
yeazelm merged 3 commits into
mainfrom
feat/0023-labels

Conversation

@yeazelm

@yeazelm yeazelm commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

🧍

🤖

Related to PCC-1280.

--filter key=value on sessions list. Repeatable flag mapping to ?key=value through the sealed sessions method's claimed-filter seam (CoreClient::call_with_claimed). Param names are data, not contract — a cassette claims them at admission — so claimed params from any cassette work without recompiling, and the declared-parameter refusal stays intact. An integration test pins that the discovery-generated cassette surface drives a labels-like cassette with zero compiled-in knowledge; no label noun is added.

The tapes-client loan, repaid. The workspace's temporary path override onto the sibling checkout returns to the registry form: tapes-client = { version = "0.5", ... }, resolved to 0.5.0 from crates.io. check-tapes-pins.sh passes with no override notice.

Fallout from 0.5.0's breaking removals. The typed search/export/skills surfaces left the client with the contract re-pin to tapes v0.39.0. tapesctl search and tapesctl export keep their routes, requests, and output unchanged, but now issue their calls directly against the cassette routes the retired methods had been rerouting to, through the transport's described-call seam; the response models and --detail grains move into the two commands. The coverage tables shrink to the operations the contract still declares.

Also folds a third current-stable clippy site (the upgrade probe tests' reap-poll) into the existing gate-green chore.

Stable 1.98's clippy fails the workspace on three pre-existing sites:
an excessive-nesting block in the plugin dry run (flattened into the
loop's own filter), the reap-poll in the upgrade probe tests (the
if-break flattened into a while over the surviving pids), and the
seven-argument launch-plan builder (allowed, with the reason recorded —
its inputs are genuinely independent and a one-caller args struct would
be ceremony). No behavior changes.
Repeatable --filter key=value maps to ?key=value through the sealed
sessions method — param names are data, so claimed params from any
cassette work without recompiling. No label noun is added: the
discovery-generated cassette surface already drives any labels-like
cassette with zero compiled-in knowledge, and an integration test now
pins that property.
The path override onto the sibling checkout was the documented
co-development loan: the claimed-filter seam the --filter flag rides on
was committed upstream but not yet published. tapes-client 0.5.0 now
carries it on crates.io, so the workspace entry returns to the registry
form and the lockfile records the published crate.

0.5.0 also retires the typed search, export, and skills surfaces with
the read contract's move to tapes v0.39.0: those operations left the
sealed document — each is a cassette a deployment serves — and the
typed spellings went with them. What that means here:

* `tapesctl search` and `tapesctl export` keep their routes, requests,
  and output unchanged, but issue their calls directly against the
  cassette routes the retired methods had been rerouting to, through
  the transport's described-call seam. The response models and the
  accepted --detail grains move into the two commands, which own those
  shapes now that the sealed contract does not declare them.
* The coverage tables shrink to the operations the contract still
  declares: searchSpans and exportSession leave the exposed table, and
  the unexposed allow-list drops exportSessions and the eleven skills
  routes whose deletion it had been predicting.
@linear-code

linear-code Bot commented Aug 28, 2026

Copy link
Copy Markdown

PCC-1280

@greptile-apps

greptile-apps Bot commented Aug 28, 2026

Copy link
Copy Markdown

Greptile Summary

The PR upgrades tapes-client to 0.5 and adds repeatable generic session filters using the client’s claimed-parameter channel.

  • Reimplements search and export over direct cassette transport calls after removal of their typed client methods.
  • Adds local search response and export-detail models while preserving command output behavior.
  • Adds binary-level coverage for generic filter forwarding and runtime cassette discovery.
  • Updates command documentation, contract coverage tables, and stable-Clippy cleanup.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete changed-code failure established.

The new filter path, direct search decoding, and streaming export reconstruction are covered by focused request, response, and error-path tests, and no accepted blocking or non-blocking defect remains.

Important Files Changed

Filename Overview
crates/tapesctl/src/api/mod.rs Adds filter grammar parsing and forwards ordered claimed parameters through the sealed sessions-list operation.
crates/tapesctl/src/cli.rs Adds the repeatable --filter KEY=VALUE sessions-list argument and documents its deployment-defined semantics.
crates/tapesctl/src/ports/search.rs Replaces the removed typed search method with a direct cassette call and command-owned response models.
crates/tapesctl/src/ports/export.rs Replaces the removed typed export method with a direct streaming cassette call and local detail validation.
crates/tapesctl/tests/filter_passthrough_integration.rs Exercises the real binary to verify repeated filter forwarding, untouched JSON output, and discovery-only cassette commands.
Cargo.toml Upgrades the registry-backed tapes-client dependency from the 0.4 to 0.5 series.
Cargo.lock Resolves tapes-client to registry release 0.5.0.

Flowchart

%%{init: {'theme': 'neutral'}}%%
flowchart LR
    A[CLI arguments] --> B{Command}
    B -->|sessions list| C[Parse repeatable filters]
    C --> D[Core call with claimed parameters]
    B -->|search| E[Build cassette Call]
    E --> F[Decode local search model]
    B -->|export| G[Build streaming cassette Call]
    G --> H[Stdout or output file]
    D --> I[Read API]
    F --> I
    H --> I
Loading

Reviews (1): Last reviewed commit: "🧹 chore: repay the tapes-client loan — ..." | Re-trigger Greptile

@yeazelm
yeazelm merged commit a0aba5f into main Aug 28, 2026
19 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant