12 KiB
SLICE 15 — Eisenhower drag and drop with Skeleton quadrant names
Filename note: this file is named
SLIDE15.mdas requested. Its feature sequence and heading identify it as SLICE 15.State-saving rule: update this file after every completed task and whenever work pauses. Keep implementation, automated validation, production packaging, and manual Joplin acceptance as separate status boundaries.
Status
PLANNED; BLOCKED ON SLICE 14. Begin only after the shared mutation service, interaction model, automated validation, and manual kanban acceptance in SLICE 14 are complete.
Goal
Make Eisenhower matrices editable by moving cards between quadrants. Each move persists the urgent/important tag combination represented by the destination.
At the same time, replace the classic action labels with the more constructive Skeleton labels while retaining Eisenhower's urgent/important axes:
| Urgent | Not urgent | |
|---|---|---|
| Important | Do Next | Scheduled |
| Not important | On Deck | Backlog |
This means the current Eliminate quadrant becomes Backlog. The underlying quadrant remains “not urgent and not important”; only its displayed name changes.
Confirmed product contract
- The label change applies to every Eisenhower matrix, editable or read-only.
- Eisenhower's axes remain
urgent-tagandimportant-tag; no date-derived urgency or in-progress semantics are introduced. - All four Eisenhower quadrant names adopt Skeleton's names:
Do Next,Scheduled,On Deck, andBacklog. - Skeleton mode remains available and unchanged in v2.0.0, but does not receive drag and drop in this slice.
editable: yesenables Eisenhower mutation and defaults tono.- Setting
editable: yeswithmode: skeletonwarns that editing is unavailable and renders a read-only Skeleton matrix. It must not expose inert handles. - Both ordinary opted-in notes and incomplete native to-dos can be moved.
- Completed to-dos and notes carrying
done-tagremain excluded; dragging does not change completion state. - A move changes only the configured urgent/important tag memberships. It does not edit dates, in-progress state, completion, notebook, or unrelated tags.
- Pointer drag and keyboard Move to… use the shared SLICE 14 behavior.
- Sorting remains controlled by
sortandsort-type; drag does not establish manual ordering within a quadrant. - Moves remain within the current notebook group.
Eisenhower transition rules
| Destination | Urgent tag | Important tag | Persisted change |
|---|---|---|---|
| Do Next (top-left) | yes | yes | Add both configured tags. |
| Scheduled (top-right) | no | yes | Remove urgent; add important. |
| On Deck (bottom-left) | yes | no | Add urgent; remove important. |
| Backlog (bottom-right) | no | no | Remove both configured tags. |
The rules are identical for ordinary notes and native to-dos. Joplin note type,
native completion, done-tag, in-progress-tag, gtd block, dates, and all
unrelated tags remain unchanged.
If urgent-tag and important-tag normalize to the same title, the two axes
cannot represent four persistent states. Existing parser behavior must be
audited. For an editable Eisenhower matrix, treat this configuration as
non-editable with a clear warning rather than applying ambiguous mutations.
Read-only collection may retain its existing precedence for compatibility.
Label migration
Update the canonical matrixLabels("eisenhower") result:
| Position | v1 label | v2 label |
|---|---|---|
| top-left | Do First | Do Next |
| top-right | Schedule | Scheduled |
| bottom-left | Delegate | On Deck |
| bottom-right | Eliminate | Backlog |
Remove duplicated fallback label literals in the webview or update them from the same shared contract so an absent/legacy payload cannot silently restore the old wording. Update code comments, tests, README.md, SPEC.md, and accessible labels. No saved data migration is needed because quadrant labels are not persisted.
Architecture
SLICE 15 extends, rather than duplicates, the SLICE 14 pathway:
matrix pointer drop or keyboard Move to…
|
v
{ view: "matrix", hostNoteId, cardId, destination, rawConfig, viewInstanceId }
|
v
shared message validation
- config reparses as mode:eisenhower + editable:yes
- card remains admitted, incomplete, in scope, and in the same group
|
v
shared tag mutation primitives apply urgent/important target state
|
v
canonical matrix recollection, sorting, totals, pagination, and rerender
Use a matrix-specific semantic destination union (topLeft | topRight | bottomLeft | bottomRight, or equivalent named states). Do not let the webview
submit arbitrary tag titles or add/remove lists. The main process derives tag
operations from freshly parsed configuration and the fixed destination table.
Fresh-state validation
Before writing, confirm all SLICE 14 host, scope, type, grouping, and gtd
eligibility checks, plus:
- mode is still
eisenhower; editableis still enabled;- urgent and important tag names remain distinct after normalization;
- the item is still incomplete under native or note
done-tagsemantics; - the destination is one of the four fixed quadrants.
If the item became complete or the block changed mode/configuration during a drag, make no write, report stale state, and refresh the matrix.
Interaction and rendering rules
- Reuse SLICE 14 pointer thresholds, capture, cancellation, pending/error states, request sequencing, focus recovery, live announcements, and canonical refresh.
- Highlight only quadrants in the same matrix instance and notebook group.
- Use the new quadrant labels everywhere, including Move to… options and announcements.
- Do not infer a source quadrant in the main process from stale DOM data; fetch current tags and calculate a minimal target-state change.
- Same-quadrant moves are no-ops.
- A canonical refresh may sort the card to a different position or beyond the
currently visible
page-size; counts and List more remain authoritative. - Read-only Eisenhower matrices receive the label change without drag handles, move menus, mutation requests, or new focus stops.
- Skeleton matrices receive the label-independent shared rendering regressions only and remain read-only.
Implementation plan
Phase 1 — Label change and compatibility tests
- Change Eisenhower labels to Do Next, Scheduled, On Deck, and Backlog.
- Update comments and remove/update fallback literals that contain Do First, Schedule, Delegate, or Eliminate.
- Update unit and rendering tests for single and grouped layouts.
- Confirm Skeleton labels and both modes' row/column axes remain unchanged.
- Confirm the label-only change applies when
editableis omitted.
Phase 2 — Matrix configuration and protocol
- Add
editable: booleantoMatrixConfig, defaulting tofalse. - Parse
editable: yes | nousing the SLICE 14 validation contract. - Warn and disable editing for
mode: skeleton. - Warn and disable editable Eisenhower when normalized axis tags are equal.
- Define constrained matrix move intents and fixed destinations using the shared host/view identity and typed result model.
- Add parser/protocol tests for defaults, invalid values, mode interaction, equal-axis tags, and backward compatibility.
Phase 3 — Eisenhower mutation planning
- Implement the four urgent/important target states through shared tag primitives from SLICE 14.
- Calculate minimal, idempotent tag membership changes from fresh data.
- Preserve completion, progress, dates, body, note type, notebook, and unrelated tags.
- Cover notes and to-dos, custom tag names, casing, duplicate tags, all 12 cross-quadrant moves, same-quadrant no-ops, and partial failures.
- Prove a completed or newly filtered item cannot be mutated.
Phase 4 — Message validation and refresh
- Add the matrix move message to the main-process handler.
- Reparse and validate editable Eisenhower configuration and fresh eligibility.
- Reject arbitrary destinations, tag operations, fields, modes, host notes, out-of-scope items, cross-group moves, and stale completions.
- Return typed results and refresh only the initiating matrix instance.
- Guard against older responses overwriting newer renders.
Phase 5 — Pointer and keyboard interaction
- Reuse the SLICE 14 drag affordance and pointer lifecycle for quadrants.
- Constrain active targets to the same matrix instance and notebook group.
- Add new-label drag feedback, pending/error states, and cancellation.
- Add keyboard Move to… options for the other three quadrants.
- Preserve click-to-open, hover details, pagination, scrolling, focus, and screen-reader announcements.
- Verify read-only Eisenhower and all Skeleton matrices expose no mutation UI.
Phase 6 — Documentation and complete validation
- Update README.md examples, option tables, quadrant table, read-only text, controls, and limitations.
- Update SPEC.md configuration, label contract, transition table, protocol, mutation safety, accessibility, and refresh behavior.
- Update the unreleased v2.0.0 CHANGELOG entry.
- Decide whether Skeleton remains documented as a supported alternative or is marked as legacy/non-editable; do not remove it in this slice.
- Run focused parser, labels, collector, mutation, handler, render, grouping, pagination, and accessibility tests.
- Run the complete Jest suite, TypeScript, webview syntax, CSS/build, whitespace, and prohibited-reference checks.
- Build and inspect the production JPL without publishing v2.0.0 yet.
Phase 7 — Manual Joplin acceptance
- Every Eisenhower matrix shows Do Next, Scheduled, On Deck, and Backlog.
- No visible or accessible Eisenhower UI says Do First, Schedule, Delegate, Eliminate, or “Drop this.”
- Read-only Eisenhower matrices retain click, hover, sorting, and pagination behavior without mutation affordances.
- An editable Eisenhower matrix moves an ordinary note through all four quadrants and persists the exact urgent/important tag state after reload.
- An editable Eisenhower matrix moves a native to-do through all four quadrants without changing native completion or progress state.
- Custom distinct axis tags work; equal axis tags warn and disable editing.
- Same-quadrant, cancelled, outside, Escape, and interrupted drags do not write.
- A normal click opens the note; a drag does not accidentally open it.
- Keyboard-only Move to… reaches every quadrant and restores focus.
- Stale completion, filtering, scope, group, and API-failure cases converge to canonical state without unrelated data changes.
- Single, grouped, multiple-block, scrolling, and paginated matrices work.
- Skeleton matrices remain correct and read-only.
- Record explicit user sign-off separately from automated checks.
Out of scope
- Skeleton drag and drop.
- Removing Skeleton mode or migrating Skeleton blocks to Eisenhower.
- Date-derived urgency changes.
- Changing completion or in-progress state from an Eisenhower move.
- Manual ordering within a quadrant.
- Dragging between notebook groups or changing notebook ownership.
- Editing arbitrary tags or card fields.
- Calendar, Gantt, or mobile drag and drop.
- Publishing v2.0.0 before consolidated release acceptance.
Acceptance criteria
- Eisenhower retains urgent/important semantics but consistently uses Skeleton's four constructive quadrant names.
- Mutation occurs only for an explicitly editable, valid Eisenhower block.
- Every destination persists exactly the configured urgent/important state and preserves completion, progress, content, notebook, and unrelated tags.
- Pointer and keyboard interaction share SLICE 14's validated safety and accessibility foundation.
- Skeleton mode remains available, correct, and read-only.
- Automated validation, production packaging, and explicit manual Joplin acceptance are completed and recorded separately.