diff options
| -rw-r--r-- | docs/specs/comment-deletion-spec.org (renamed from docs/comment-deletion-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/default-view-spec.org (renamed from docs/default-view-spec.org) | 8 | ||||
| -rw-r--r-- | docs/specs/interactive-grouping-spec.org (renamed from docs/interactive-grouping-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-comment-editing-spec.org (renamed from docs/issue-comment-editing-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-conflict-handling-spec.org (renamed from docs/issue-conflict-handling-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-query-spec.org (renamed from docs/issue-query-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-representation-spec.org (renamed from docs/issue-representation-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-sort-order-spec.org (renamed from docs/issue-sort-order-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/issue-sources-spec.org (renamed from docs/issue-sources-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/labels-as-org-tags-spec.org (renamed from docs/labels-as-org-tags-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/local-and-linear-views-spec.org (renamed from docs/local-and-linear-views-spec.org) | 16 | ||||
| -rw-r--r-- | docs/specs/modified-ticket-indicator-spec-review.org (renamed from docs/modified-ticket-indicator-spec-review.org) | 0 | ||||
| -rw-r--r-- | docs/specs/modified-ticket-indicator-spec.org (renamed from docs/modified-ticket-indicator-spec.org) | 10 | ||||
| -rw-r--r-- | docs/specs/multi-account-spec.org (renamed from docs/multi-account-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/multi-state-filter-spec.org (renamed from docs/multi-state-filter-spec.org) | 8 | ||||
| -rw-r--r-- | docs/specs/refine-source-spec.org (renamed from docs/refine-source-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/saved-query-sync-spec.org (renamed from docs/saved-query-sync-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/ticket-save-model-spec.org (renamed from docs/ticket-save-model-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/ticket-save-model-v2-spec.org (renamed from docs/ticket-save-model-v2-spec.org) | 0 | ||||
| -rw-r--r-- | docs/specs/todo-keywords-from-workflow-states-spec.org (renamed from docs/todo-keywords-from-workflow-states-spec.org) | 0 |
20 files changed, 21 insertions, 21 deletions
diff --git a/docs/comment-deletion-spec.org b/docs/specs/comment-deletion-spec.org index 0af6f13..0af6f13 100644 --- a/docs/comment-deletion-spec.org +++ b/docs/specs/comment-deletion-spec.org diff --git a/docs/default-view-spec.org b/docs/specs/default-view-spec.org index e20e932..82467cc 100644 --- a/docs/default-view-spec.org +++ b/docs/specs/default-view-spec.org @@ -126,16 +126,16 @@ None for existing configs. With no =:default-view= on any account and =pearl-def #+begin_src org ,** TODO [#B] Default view — resolver + open command :feature: -=pearl-default-view= defcustom (legacy) + =:default-view= account-plist key; =pearl--resolve-default-view= returns the active scope's default (per-account in accounts mode, defcustom in legacy); =pearl-open-default-view= dispatches nil → my-open-issues, a local-view name → =pearl-run-local-view=, a stale name → my-open-issues + message (never errors). Spec: [[file:docs/default-view-spec.org]] (phase 1). +=pearl-default-view= defcustom (legacy) + =:default-view= account-plist key; =pearl--resolve-default-view= returns the active scope's default (per-account in accounts mode, defcustom in legacy); =pearl-open-default-view= dispatches nil → my-open-issues, a local-view name → =pearl-run-local-view=, a stale name → my-open-issues + message (never errors). Spec: [[file:docs/specs/default-view-spec.org]] (phase 1). ,** TODO [#B] Default view — set-default-view command :feature: -=pearl-set-default-view= (the reserved =C-; L v D=): from a local-view buffer offers that view; otherwise prompts over local-view names with a clear-to-my-open-issues sentinel. Persists via =customize-save-variable= to the active account's =:default-view= (accounts mode) or =pearl-default-view= (legacy). Spec: [[file:docs/default-view-spec.org]] (phase 2). +=pearl-set-default-view= (the reserved =C-; L v D=): from a local-view buffer offers that view; otherwise prompts over local-view names with a clear-to-my-open-issues sentinel. Persists via =customize-save-variable= to the active account's =:default-view= (accounts mode) or =pearl-default-view= (legacy). Spec: [[file:docs/specs/default-view-spec.org]] (phase 2). ,** TODO [#B] Default view — keymap, transient, docs :feature: -Rebind top-level =C-; L l= to =pearl-open-default-view= (=f o= stays literal my-open-issues); bind =C-; L v D= to =pearl-set-default-view=; add the =.= set-default-view suffix to the transient Views group (=D= stays save-locally). Update keymap + menu tests + README (default view, =l= behavior, per-account scoping). Spec: [[file:docs/default-view-spec.org]] (phase 3). +Rebind top-level =C-; L l= to =pearl-open-default-view= (=f o= stays literal my-open-issues); bind =C-; L v D= to =pearl-set-default-view=; add the =.= set-default-view suffix to the transient Views group (=D= stays save-locally). Update keymap + menu tests + README (default view, =l= behavior, per-account scoping). Spec: [[file:docs/specs/default-view-spec.org]] (phase 3). ,** TODO [#B] Default view — test surface :test: -Unit: =pearl--resolve-default-view= returns =pearl-default-view= in legacy mode and the active account's =:default-view= in accounts mode; the accounts-mode setter rewrite updates only =:default-view= and preserves other plist keys; stale-name fallback. Command flow: nil default dispatches to =pearl-list-issues= (no project), an existing local-view name to =pearl-run-local-view=, a stale name to =pearl-list-issues= with the fallback message; setter from a local-view buffer offers that view, from elsewhere prompts with the clear sentinel, cancel leaves state unchanged; persistence calls =customize-save-variable= for the right scope. Surface: =C-; L l= → =pearl-open-default-view=, =C-; L f o= → =pearl-list-issues=, =C-; L v D= → =pearl-set-default-view=, transient Views =.= → set-default-view with no duplicate suffix. E2e/manual-verify: =C-; L l= opens the configured default; switching accounts switches which default opens. Spec: [[file:docs/default-view-spec.org]] (Acceptance criteria). +Unit: =pearl--resolve-default-view= returns =pearl-default-view= in legacy mode and the active account's =:default-view= in accounts mode; the accounts-mode setter rewrite updates only =:default-view= and preserves other plist keys; stale-name fallback. Command flow: nil default dispatches to =pearl-list-issues= (no project), an existing local-view name to =pearl-run-local-view=, a stale name to =pearl-list-issues= with the fallback message; setter from a local-view buffer offers that view, from elsewhere prompts with the clear sentinel, cancel leaves state unchanged; persistence calls =customize-save-variable= for the right scope. Surface: =C-; L l= → =pearl-open-default-view=, =C-; L f o= → =pearl-list-issues=, =C-; L v D= → =pearl-set-default-view=, transient Views =.= → set-default-view with no duplicate suffix. E2e/manual-verify: =C-; L l= opens the configured default; switching accounts switches which default opens. Spec: [[file:docs/specs/default-view-spec.org]] (Acceptance criteria). #+end_src * Review dispositions diff --git a/docs/interactive-grouping-spec.org b/docs/specs/interactive-grouping-spec.org index 60e5541..60e5541 100644 --- a/docs/interactive-grouping-spec.org +++ b/docs/specs/interactive-grouping-spec.org diff --git a/docs/issue-comment-editing-spec.org b/docs/specs/issue-comment-editing-spec.org index 6a1b0c8..6a1b0c8 100644 --- a/docs/issue-comment-editing-spec.org +++ b/docs/specs/issue-comment-editing-spec.org diff --git a/docs/issue-conflict-handling-spec.org b/docs/specs/issue-conflict-handling-spec.org index 09acaf6..09acaf6 100644 --- a/docs/issue-conflict-handling-spec.org +++ b/docs/specs/issue-conflict-handling-spec.org diff --git a/docs/issue-query-spec.org b/docs/specs/issue-query-spec.org index 75dcc4b..75dcc4b 100644 --- a/docs/issue-query-spec.org +++ b/docs/specs/issue-query-spec.org diff --git a/docs/issue-representation-spec.org b/docs/specs/issue-representation-spec.org index 912cee9..912cee9 100644 --- a/docs/issue-representation-spec.org +++ b/docs/specs/issue-representation-spec.org diff --git a/docs/issue-sort-order-spec.org b/docs/specs/issue-sort-order-spec.org index 478b074..478b074 100644 --- a/docs/issue-sort-order-spec.org +++ b/docs/specs/issue-sort-order-spec.org diff --git a/docs/issue-sources-spec.org b/docs/specs/issue-sources-spec.org index a4374c3..a4374c3 100644 --- a/docs/issue-sources-spec.org +++ b/docs/specs/issue-sources-spec.org diff --git a/docs/labels-as-org-tags-spec.org b/docs/specs/labels-as-org-tags-spec.org index cc15e1c..cc15e1c 100644 --- a/docs/labels-as-org-tags-spec.org +++ b/docs/specs/labels-as-org-tags-spec.org diff --git a/docs/local-and-linear-views-spec.org b/docs/specs/local-and-linear-views-spec.org index 0a836ee..de8943a 100644 --- a/docs/local-and-linear-views-spec.org +++ b/docs/specs/local-and-linear-views-spec.org @@ -341,28 +341,28 @@ All settled with Craig on 2026-06-01, across the first open-question pass and th #+begin_src org ,** TODO [#B] local/Linear views — direct rename, no aliases :feature: -Rename the saved-query defcustom and existing commands directly to the local/Linear view vocabulary. No obsolete aliases; remove the old =q= saved-query bindings; update Craig's config in the same change. Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 1). +Rename the saved-query defcustom and existing commands directly to the local/Linear view vocabulary. No obsolete aliases; remove the old =q= saved-query bindings; update Craig's config in the same change. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 1). ,** TODO [#B] local/Linear views — create and edit :feature: -Add =pearl-create-local-view=, =pearl-edit-local-view=, the metadata-preserving =pearl--save-local-view= writer, local Replace/Rename/Cancel collision handling, account stamping/preservation, and shared builder internals with =pearl-list-issues-filtered= (save offer reworded to "save this local view?"). Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 2). +Add =pearl-create-local-view=, =pearl-edit-local-view=, the metadata-preserving =pearl--save-local-view= writer, local Replace/Rename/Cancel collision handling, account stamping/preservation, and shared builder internals with =pearl-list-issues-filtered= (save offer reworded to "save this local view?"). Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 2). ,** TODO [#B] local/Linear views — keymap and transient :feature: -Expose the view noun under clean product vocabulary (local view / Linear view / filter / publish / save locally) in the keymap and transient. No "query" in user-facing labels. View-operation labels avoid "source"; the unified picker =pearl-pick-source= keeps "source" deliberately (it spans views, filters, and browser-only favorites). Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 3). +Expose the view noun under clean product vocabulary (local view / Linear view / filter / publish / save locally) in the keymap and transient. No "query" in user-facing labels. View-operation labels avoid "source"; the unified picker =pearl-pick-source= keeps "source" deliberately (it spans views, filters, and browser-only favorites). Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 3). ,** TODO [#B] local/Linear views — picker labels + cross-store dedup :feature: -Reword the picker candidates and scope labels to =[local]= / =[local → Linear:SCOPE]= / =[linear]=, and implement the cross-store rule: dedupe same-=CustomView=-id tracked-local-plus-favorite to the local entry; show same-name different-id local and Linear views both. Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 4). +Reword the picker candidates and scope labels to =[local]= / =[local → Linear:SCOPE]= / =[linear]=, and implement the cross-store rule: dedupe same-=CustomView=-id tracked-local-plus-favorite to the local entry; show same-name different-id local and Linear views both. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 4). ,** TODO [#B] local/Linear views — publish local view :feature: -Present the existing publish/sync path as =pearl-publish-local-view=, preserving first-publish create and re-publish update-by-id behavior. Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 5). +Present the existing publish/sync path as =pearl-publish-local-view=, preserving first-publish create and re-publish update-by-id behavior. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 5). ,** TODO [#B] local/Linear views — save Linear view locally :feature: -Implement normalize-then-match reverse compilation for readable =CustomView.filterData=, structured refusal reasons, favorited-Linear-view candidates, and forked local-view persistence through =pearl--save-local-view=, as =pearl-save-linear-view-locally=. Reverse-compile contract per the dimension table: distinct =:state= vs =:state-type=, =:open t= mapped from the exact open-state =nin= (generic =nin= refuses), priority canonicalized to numeric 0..4, singular id/scalar keys accept only =eq= or one-element =in=, plural keys (=:labels=, =:state-type=) explicitly whitelisted, and multi-value =in= on singular keys refuses. Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 6). +Implement normalize-then-match reverse compilation for readable =CustomView.filterData=, structured refusal reasons, favorited-Linear-view candidates, and forked local-view persistence through =pearl--save-local-view=, as =pearl-save-linear-view-locally=. Reverse-compile contract per the dimension table: distinct =:state= vs =:state-type=, =:open t= mapped from the exact open-state =nin= (generic =nin= refuses), priority canonicalized to numeric 0..4, singular id/scalar keys accept only =eq= or one-element =in=, plural keys (=:labels=, =:state-type=) explicitly whitelisted, and multi-value =in= on singular keys refuses. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 6). ,** TODO [#B] local/Linear views — docs :feature: -Update README and package summary with filter / local view / Linear view vocabulary, the publish / save-locally lifecycle, command surface, and representability boundary. No "query" in user-facing text. Spec: [[file:docs/local-and-linear-views-spec.org]] (Implementation phases, phase 7). +Update README and package summary with filter / local view / Linear view vocabulary, the publish / save-locally lifecycle, command surface, and representability boundary. No "query" in user-facing text. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Implementation phases, phase 7). ,** TODO [#B] local/Linear views — naming and behavior test surface :test: -Unit: direct renames without aliases, absence of user-facing "query" vocabulary (=pearl-pick-source= explicitly allowed, not banned), metadata-preserving edit, local collision policy, account ownership guard for run/edit/publish/publish-current/delete (delete makes no Linear call on mismatch), cross-store duplicate display/dedupe, tracked-local run/refresh dispatch (=pearl-run-local-view= runs the local filter, not =pearl--query-view-async=), picker labels, reverse-compile round trips and refusals (per-dimension, including =:state= vs =:state-type= with multi-type =in=, =:open t= exact-predicate success and generic-=nin= refusal, priority canonicalization and out-of-range refusal, singular multi-value =in= refusal for =assignee.id=/=assignee.email=/=project.id=/=cycle.id=/=team.key=/=label id=, and the plural =:labels= / =:state-type= exceptions), normalizer fixtures, structured refusals. Integration: copy-down candidate fixtures, stale ids, missing/nil =filterData=, GraphQL errors, publish update-by-id regression, delete does not call Linear on account mismatch, refresh re-runs local filter for a local-view buffer vs server-side for a native Linear-view buffer. E2e / manual-verify: create -> edit -> run local -> publish -> re-publish update -> save Linear view locally -> refuse unrepresentable view -> delete local/tracked views. Spec: [[file:docs/local-and-linear-views-spec.org]] (Acceptance criteria). +Unit: direct renames without aliases, absence of user-facing "query" vocabulary (=pearl-pick-source= explicitly allowed, not banned), metadata-preserving edit, local collision policy, account ownership guard for run/edit/publish/publish-current/delete (delete makes no Linear call on mismatch), cross-store duplicate display/dedupe, tracked-local run/refresh dispatch (=pearl-run-local-view= runs the local filter, not =pearl--query-view-async=), picker labels, reverse-compile round trips and refusals (per-dimension, including =:state= vs =:state-type= with multi-type =in=, =:open t= exact-predicate success and generic-=nin= refusal, priority canonicalization and out-of-range refusal, singular multi-value =in= refusal for =assignee.id=/=assignee.email=/=project.id=/=cycle.id=/=team.key=/=label id=, and the plural =:labels= / =:state-type= exceptions), normalizer fixtures, structured refusals. Integration: copy-down candidate fixtures, stale ids, missing/nil =filterData=, GraphQL errors, publish update-by-id regression, delete does not call Linear on account mismatch, refresh re-runs local filter for a local-view buffer vs server-side for a native Linear-view buffer. E2e / manual-verify: create -> edit -> run local -> publish -> re-publish update -> save Linear view locally -> refuse unrepresentable view -> delete local/tracked views. Spec: [[file:docs/specs/local-and-linear-views-spec.org]] (Acceptance criteria). #+end_src * Out of scope (vNext) diff --git a/docs/modified-ticket-indicator-spec-review.org b/docs/specs/modified-ticket-indicator-spec-review.org index a89041f..a89041f 100644 --- a/docs/modified-ticket-indicator-spec-review.org +++ b/docs/specs/modified-ticket-indicator-spec-review.org diff --git a/docs/modified-ticket-indicator-spec.org b/docs/specs/modified-ticket-indicator-spec.org index 4725a2c..1ea337c 100644 --- a/docs/modified-ticket-indicator-spec.org +++ b/docs/specs/modified-ticket-indicator-spec.org @@ -152,19 +152,19 @@ Priorities are =[#B]=: Craig bumped the parent task and these phases from =[#C]= #+begin_src org ** TODO [#B] Modified-ticket indicator: mode-line count + dirty classifier :feature: -Viewer-aware pushable-dirty count (=pearl--buffer-dirty-issue-count=), appended to =pearl--mode-line-lighter= as "N unsaved" while preserving =Pearl[account]=, cached buffer-locally with =force-mode-line-update=. Spec: [[file:docs/modified-ticket-indicator-spec.org]] (phase 1). +Viewer-aware pushable-dirty count (=pearl--buffer-dirty-issue-count=), appended to =pearl--mode-line-lighter= as "N unsaved" while preserving =Pearl[account]=, cached buffer-locally with =force-mode-line-update=. Spec: [[file:docs/specs/modified-ticket-indicator-spec.org]] (phase 1). ** TODO [#B] Modified-ticket indicator: field-region highlight overlays :feature: -=pearl-modified-highlight= (inherits =diff-changed=) painted over the changed field's region per the field-to-region map, with heading bubble-up and own-comment coverage, behind a single =pearl--redecorate-buffer= entry point. Spec: [[file:docs/modified-ticket-indicator-spec.org]] (phase 2). +=pearl-modified-highlight= (inherits =diff-changed=) painted over the changed field's region per the field-to-region map, with heading bubble-up and own-comment coverage, behind a single =pearl--redecorate-buffer= entry point. Spec: [[file:docs/specs/modified-ticket-indicator-spec.org]] (phase 2). ** TODO [#B] Modified-ticket indicator: live recompute lifecycle :feature: -Buffer-local after-change idle debounce, post-save recompute (read the scan, not the outcome), full-pass redecorate after render/merge/sort/regroup/open/mode-enable, timer + viewer-callback cleanup on disabled/killed buffers. Spec: [[file:docs/modified-ticket-indicator-spec.org]] (phase 3). +Buffer-local after-change idle debounce, post-save recompute (read the scan, not the outcome), full-pass redecorate after render/merge/sort/regroup/open/mode-enable, timer + viewer-callback cleanup on disabled/killed buffers. Spec: [[file:docs/specs/modified-ticket-indicator-spec.org]] (phase 3). ** TODO [#B] Modified-ticket indicator: read-only + unknown comment treatment :feature: -=pearl-modified-local= (muted highlight) for non-own dirty comments and =pearl-modified-unknown= for pre-viewer ones, via an async viewer classification pass; excluded from the count and bubble-up. Spec: [[file:docs/modified-ticket-indicator-spec.org]] (phase 4). +=pearl-modified-local= (muted highlight) for non-own dirty comments and =pearl-modified-unknown= for pre-viewer ones, via an async viewer classification pass; excluded from the count and bubble-up. Spec: [[file:docs/specs/modified-ticket-indicator-spec.org]] (phase 4). ** TODO [#B] Modified-ticket indicator test surface :test: -Count semantics, mode-line account integration, overlay idempotence, own-comment bubble-up, read-only/unknown behavior, save-clear vs conflict-persist, merge persistence, idle-trigger cleanup, customization toggles. Spec: [[file:docs/modified-ticket-indicator-spec.org]] (Test surface). +Count semantics, mode-line account integration, overlay idempotence, own-comment bubble-up, read-only/unknown behavior, save-clear vs conflict-persist, merge persistence, idle-trigger cleanup, customization toggles. Spec: [[file:docs/specs/modified-ticket-indicator-spec.org]] (Test surface). #+end_src * Open questions (for Craig) diff --git a/docs/multi-account-spec.org b/docs/specs/multi-account-spec.org index f60adb1..f60adb1 100644 --- a/docs/multi-account-spec.org +++ b/docs/specs/multi-account-spec.org diff --git a/docs/multi-state-filter-spec.org b/docs/specs/multi-state-filter-spec.org index 8bf6ac4..26475be 100644 --- a/docs/multi-state-filter-spec.org +++ b/docs/specs/multi-state-filter-spec.org @@ -113,16 +113,16 @@ None. =(:state "X")= entries keep working (a string still compiles to =state.nam #+begin_src org ,** TODO [#B] Multi-state filter — compiler, reverse-compile, validator :feature: -=:state= accepts a list (=state.name.in=); =pearl--rc-match-state= inverts =state.name.in= to a scalar (one) or list (many) and drops the multi-name refusal; =pearl--validate-issue-filter= validates =:state= as a string or a list of non-empty strings; a list-valued =:state= keeps precedence over =:state-type= / =:open=. Spec: [[file:docs/multi-state-filter-spec.org]] (phase 1). +=:state= accepts a list (=state.name.in=); =pearl--rc-match-state= inverts =state.name.in= to a scalar (one) or list (many) and drops the multi-name refusal; =pearl--validate-issue-filter= validates =:state= as a string or a list of non-empty strings; a list-valued =:state= keeps precedence over =:state-type= / =:open=. Spec: [[file:docs/specs/multi-state-filter-spec.org]] (phase 1). ,** TODO [#B] Multi-state filter — builder multi-select :feature: -The State prompt becomes =completing-read-multiple= with the =[ Any. ]= sentinel filtered out and one-to-string, many-to-list mapping. Spec: [[file:docs/multi-state-filter-spec.org]] (phase 2). +The State prompt becomes =completing-read-multiple= with the =[ Any. ]= sentinel filtered out and one-to-string, many-to-list mapping. Spec: [[file:docs/specs/multi-state-filter-spec.org]] (phase 2). ,** TODO [#B] Multi-state filter — docs + boundary reconciliation :docs: -README filter section + =:state= docstring document multi-state selection; the local/Linear views spec's reverse-compile dimension table, singular-vs-plural rule, refusal list, acceptance, and README copy-down paragraph add =state.name.in=[NAMES...] as a plural-capable exception; the named-states vNext item is ticked off. Lands with phase 1. Spec: [[file:docs/multi-state-filter-spec.org]] (phase 3). +README filter section + =:state= docstring document multi-state selection; the local/Linear views spec's reverse-compile dimension table, singular-vs-plural rule, refusal list, acceptance, and README copy-down paragraph add =state.name.in=[NAMES...] as a plural-capable exception; the named-states vNext item is ticked off. Lands with phase 1. Spec: [[file:docs/specs/multi-state-filter-spec.org]] (phase 3). ,** TODO [#B] Multi-state filter — test surface :test: -Unit: =(:state ("A" "B"))= → =state.name.in=, =(:state "A")= → =eq=, list keeps precedence over =:open=, validator accepts list / rejects empty-name; reverse-compile round-trip + direct =state.name.in= JSON fixtures (one→scalar, many→list); builder/assemble-filter one→string, many→list, sentinel→no key; source-header round-trip of =:filter (:state ("A" "B"))=. Integration: a local view with =(:state ("A" "B"))= runs the normal path. E2e/manual: build a two-state filter, run it, copy down a multi-named-state Linear view, confirm refresh preserves the =#+LINEAR-SOURCE= filter. Spec: [[file:docs/multi-state-filter-spec.org]] (Acceptance criteria). +Unit: =(:state ("A" "B"))= → =state.name.in=, =(:state "A")= → =eq=, list keeps precedence over =:open=, validator accepts list / rejects empty-name; reverse-compile round-trip + direct =state.name.in= JSON fixtures (one→scalar, many→list); builder/assemble-filter one→string, many→list, sentinel→no key; source-header round-trip of =:filter (:state ("A" "B"))=. Integration: a local view with =(:state ("A" "B"))= runs the normal path. E2e/manual: build a two-state filter, run it, copy down a multi-named-state Linear view, confirm refresh preserves the =#+LINEAR-SOURCE= filter. Spec: [[file:docs/specs/multi-state-filter-spec.org]] (Acceptance criteria). #+end_src * Review dispositions diff --git a/docs/refine-source-spec.org b/docs/specs/refine-source-spec.org index 998a37d..998a37d 100644 --- a/docs/refine-source-spec.org +++ b/docs/specs/refine-source-spec.org diff --git a/docs/saved-query-sync-spec.org b/docs/specs/saved-query-sync-spec.org index a17239e..a17239e 100644 --- a/docs/saved-query-sync-spec.org +++ b/docs/specs/saved-query-sync-spec.org diff --git a/docs/ticket-save-model-spec.org b/docs/specs/ticket-save-model-spec.org index dd99add..dd99add 100644 --- a/docs/ticket-save-model-spec.org +++ b/docs/specs/ticket-save-model-spec.org diff --git a/docs/ticket-save-model-v2-spec.org b/docs/specs/ticket-save-model-v2-spec.org index c16a0d8..c16a0d8 100644 --- a/docs/ticket-save-model-v2-spec.org +++ b/docs/specs/ticket-save-model-v2-spec.org diff --git a/docs/todo-keywords-from-workflow-states-spec.org b/docs/specs/todo-keywords-from-workflow-states-spec.org index 81f296c..81f296c 100644 --- a/docs/todo-keywords-from-workflow-states-spec.org +++ b/docs/specs/todo-keywords-from-workflow-states-spec.org |
