aboutsummaryrefslogtreecommitdiff
path: root/docs/saved-query-sync-spec.org
diff options
context:
space:
mode:
authorCraig Jennings <c@cjennings.net>2026-05-28 03:07:55 -0500
committerCraig Jennings <c@cjennings.net>2026-05-28 03:07:55 -0500
commit0aa115314f6cb0aefd6ad34cfb738e391a411d54 (patch)
tree2978ea26a480ef63f6cf5050b30d6b0d0d14f8f3 /docs/saved-query-sync-spec.org
parent2ea4a03c2b53d1fd91db783995f076ea8d99b264 (diff)
downloadpearl-0aa115314f6cb0aefd6ad34cfb738e391a411d54.tar.gz
pearl-0aa115314f6cb0aefd6ad34cfb738e391a411d54.zip
docs(view-sync): phase 1 verified, pearl filter output works as filterData
Ran a live round-trip against api.linear.app to close phase 1 of `docs/saved-query-sync-spec.org`. Pearl's existing `pearl--build-issue-filter` produces a structure that `customViewCreate` accepts as `filterData` verbatim, the view created with the expected shape, `customView(id:)` read back the identical structure, and `customViewDelete` cleaned up. No new mapping helper required for phase 2; the compiler is the mapping. Recorded the probe results in the spec's Review dispositions section. Phase 1's todo entry can move to DONE; phase 2 (the user-facing `pearl-sync-saved-query-to-linear` command) can consume the existing compiler output directly.
Diffstat (limited to 'docs/saved-query-sync-spec.org')
-rw-r--r--docs/saved-query-sync-spec.org15
1 files changed, 15 insertions, 0 deletions
diff --git a/docs/saved-query-sync-spec.org b/docs/saved-query-sync-spec.org
index 2228799..887447c 100644
--- a/docs/saved-query-sync-spec.org
+++ b/docs/saved-query-sync-spec.org
@@ -281,6 +281,21 @@ Rationale: the failure mode is rare (=customize-save-variable= failing means dis
Effect on the spec: § Open questions empties (status moves to Ready). § Implementation tasks: phase 2's entry adds a one-line note about the orphan-id messaging requirement.
+** 2026-05-28 — Phase 1 round-trip probe: pearl filter output works as customView filterData
+
+Ran a live round-trip against api.linear.app to close phase 1:
+
+1. =pearl--build-issue-filter '(:open t :assignee :me)= →
+ =(("assignee" ("isMe" ("eq" . t))) ("state" ("type" ("nin" . ["completed" "canceled" "duplicate"]))))=
+2. =customViewCreate= called with that structure as =filterData=, =shared: false=, no team. Result: =success=t=, view created with id =4354f3e7-1f94-4ea7-8ba8-6f24d3ee2944=.
+3. =customView(id:)= read back the identical =filterData= structure. Linear preserved the shape exactly.
+4. =shared=false= and =team=nil= persisted as personal, as expected.
+5. =customViewDelete= cleaned up the throwaway view (=success=t=).
+
+Phase 1 is therefore complete. Pearl's existing compiler is the mapping; no new helper or schema-translation layer is needed. Phase 2 (the user-facing command) can consume =pearl--build-issue-filter='s output as =filterData= verbatim.
+
+Probe script archived at =/tmp/view-sync-probe.el= (not committed; one-off verification). The probe pattern (build via compiler → create → read back → delete) is what phase 7's slow-tagged integration test will codify if Craig wants a permanent regression guard.
+
** 2026-05-28 — Q5 (pearl-publish-current-source v1 vs vNext): ship in v1 + bind
Craig (2026-05-28, revised same-day): option 3 -- ship the convenience wrapper in v1 *and* bind it. The trigger ("I'm reading this saved query rendered in pearl right now and want to publish it") deserves a one-chord answer rather than an =M-x= round-trip; if we're shipping the wrapper anyway, binding it lands the muscle-memory shape at the same time.