diff options
| author | Craig Jennings <c@cjennings.net> | 2026-06-01 18:21:47 -0500 |
|---|---|---|
| committer | Craig Jennings <c@cjennings.net> | 2026-06-01 18:21:47 -0500 |
| commit | 9b9a264edb0c208892fcfe5101912d00858de766 (patch) | |
| tree | c37d2aaac2d7e7e555cc1d19c23f6c8135233c55 /docs | |
| parent | 96ac9855cfda77f81d7f12e55d737e8bdd54eccc (diff) | |
| download | pearl-9b9a264edb0c208892fcfe5101912d00858de766.tar.gz pearl-9b9a264edb0c208892fcfe5101912d00858de766.zip | |
feat(views): save a Linear view locally via the reverse-compile (copy down)
I implemented copy-down, the one direction that needed real engine work. A live probe showed CustomView.filterData is readable but stored as Linear's and/or view-filter tree, not the flat IssueFilter Pearl emits, so pearl--reverse-compile-issue-filter is a normalize-then-match: it flattens the top-level and, unwraps single-branch and/or, reads a one-element in as a scalar, then matches each conjunct to one authoring key. Every helper returns (ok . plist) or (refuse . reason).
The contract follows the spec's dimension table: distinct :state and :state-type, canonical numeric :priority, :open t mapped from the exact open-state nin while generic nin refuses, and a multi-value in on any singular key refuses rather than silently narrow the view. Anything outside Pearl's AND-only model refuses with a structured reason that names the construct.
pearl-save-linear-view-locally lists favorited Linear views, fetches the chosen view's filterData through a small async helper, reverse-compiles it, and saves a forked local view through pearl--save-local-view: no tracking link, :copied-from-view-id provenance only, active account stamped. On a refusal it points the user at pearl-run-linear-view; on success it states the fork's independence. Bound at f d (down) and the transient Views column.
Phase 6 of the views spec. 30 tests cover per-dimension round-trips (build->encode->read bridge), normalize-from-real-JSON trees, the full refusal set, and the command-side. Suite, compile, and lint are green.
Diffstat (limited to 'docs')
0 files changed, 0 insertions, 0 deletions
