260 lines
12 KiB
Markdown
260 lines
12 KiB
Markdown
# SLICE 15 — Eisenhower drag and drop with Skeleton quadrant names
|
|
|
|
> **Filename note:** this file is named `SLIDE15.md` as 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-tag` and `important-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`, and `Backlog`.
|
|
- Skeleton mode remains available and unchanged in v2.0.0, but does not receive
|
|
drag and drop in this slice.
|
|
- `editable: yes` enables Eisenhower mutation and defaults to `no`.
|
|
- Setting `editable: yes` with `mode: skeleton` warns 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-tag` remain 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 `sort` and `sort-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:
|
|
|
|
```text
|
|
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`;
|
|
- `editable` is still enabled;
|
|
- urgent and important tag names remain distinct after normalization;
|
|
- the item is still incomplete under native or note `done-tag` semantics;
|
|
- 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 `editable` is omitted.
|
|
|
|
### Phase 2 — Matrix configuration and protocol
|
|
|
|
- [ ] Add `editable: boolean` to `MatrixConfig`, defaulting to `false`.
|
|
- [ ] Parse `editable: yes | no` using 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.
|