179 lines
12 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Changelog
All notable changes to GTD Calendar are documented here. Versions follow the plugin's `manifest.json` / `package.json` version, which also matches the published npm releases.
## 2.0.0 — Unreleased
### Opt-in editable Kanban
- Added `editable: yes | no` to `gtd-kanban`, defaulting to `no` so every
existing board remains read-only.
- Editable desktop boards support pointer drag handles and keyboard **Move to…**
controls for Backlog, In Progress, and Done.
- Refined the move control into a compact disclosure arrow beneath the drag
handle; its accessible destination menu stays closed until requested instead
of occupying a permanent row on every card.
- Ordinary-note moves persist configured completion/progress tags; native to-do
moves persist native completion plus the configured progress tag. Unrelated
fields, tags, content, dates, note type, and notebook ownership are preserved.
- The webview submits constrained semantic intent. The main plugin process
reparses configuration, refetches host/scope/item/tag state, derives minimal
writes, rejects stale or malformed requests, and refreshes only the initiating
view from canonical state.
- Added pending/error feedback, pointer cancellation and movement thresholds,
duplicate-request guards, request sequencing, live announcements, and focus
restoration. Sorting and pagination remain authoritative after a move.
- Pointer and keyboard workflows still require final manual Joplin acceptance;
v2.0.0 has not been released or published.
- Automated validation: 295 tests across 19 suites, TypeScript, webview syntax,
whitespace, prohibited-reference checks, and production JPL inspection passed.
### Eisenhower label migration
- Eisenhower matrices retain urgent/important axes but now use Do Next,
Scheduled, On Deck, and Backlog consistently with Skeleton mode. No saved data
migration is required because quadrant labels are display-only.
### Opt-in editable Eisenhower matrices
- Added `editable: yes | no` to `gtd-matrix`, defaulting to read-only and
applying only to Eisenhower mode with distinct urgent/important tag names.
- Editable matrices reuse the compact pointer handle and disclosure-controlled
keyboard menu for Do Next, Scheduled, On Deck, and Backlog. Skeleton remains
supported and read-only; requesting editing warns without adding inert UI.
- Moves derive minimal urgent/important tag changes from fixed semantic
destinations and fresh host, scope/group, eligibility, completion, mode, and
configuration state. Completion, dates, content, note type, notebook, and
unrelated tags remain unchanged.
- Added same-board target scoping, cancellation, pending/error feedback, live
announcements, focus recovery, canonical refresh, and stale-response guards.
- Automated validation now covers 374 tests across 22 suites. Production build
inspection and manual Joplin acceptance remain pending.
## 1.0.0 — 2026-07-28
### Card underline cleanup
- Removed the inherited clickable underline from kanban and matrix cards for
both notes and to-dos.
- Completed cards retain their line-through styling; other clickable views and
card interactions are unchanged.
### Independent project-note filters
- Added `notes: all | none` to `gtd-kanban` and `gtd-matrix`, defaulting to
`all` for backward compatibility.
- `notes: all` continues to require explicit ordinary-note opt-in through a
`gtd` block; `notes: none` enables task-only boards and matrices.
- Project-note filtering is independent from `todos`, happens before warnings
and tag access, and preserves grouped-view totals and empty-group omission.
### Notebook-grouped kanban and matrix views
- Added explicit `group: notebook` support when paired with literal
`scope: children`, rendering separate exact-owner views for the root and each
non-empty descendant notebook.
- Cards appear once under their full notebook path; empty parents are omitted
without hiding non-empty descendants.
- Each generated column or quadrant retains independent pagination, while
warnings remain with their owning notebook and statistics remain block-wide.
### Done-tag completion for ordinary notes
- Added configurable `done-tag` support to kanban and matrix blocks for
ordinary notes that already opt in with a `gtd` block.
- Kanban completion takes priority over `in-progress-tag`; `done-window`
remains specific to native completed to-dos.
- Both matrix modes exclude completed notes before quadrant bucketing.
- Native to-dos still use Joplin completion, calendars are unchanged, and the
plugin remains read-only.
### Opted-in note cards for kanban and matrix
- Ordinary notes containing a `gtd` block now appear in kanban and matrix
views. Empty blocks opt in; plain notes without the block remain excluded.
- Kanban places note cards in Backlog or In Progress from the configured tag;
the later `done-tag` addition places completed project notes in Done.
Ordinary notes never display recurrence state.
- Skeleton and Eisenhower matrices apply their existing date/tag axes to note
cards. Completed to-dos remain excluded.
- Note cards reuse `gtd` title, date, colour, icon, and text overrides. They
use 📄 when no custom icon is provided and click through to the source note.
- Malformed `gtd` blocks remain visible with fallback values and the existing
warning. The `todos:` option continues to govern only to-dos.
- Kanban and matrix inspect bodies whenever an admitted type can use a `gtd`
block; tag requests remain limited to eligible items.
- Validation: 185 automated tests passed, the production JPL was built, and
manual Joplin acceptance passed on 2026-07-27.
### Incremental kanban and matrix card limits
- Added `page-size` to `gtd-kanban` and `gtd-matrix` (positive integer, default 10); invalid values warn and fall back to 10.
- Each kanban column and matrix quadrant initially shows one batch. **List more** reveals the next batch independently without changing saved configuration; reload resets expansion.
- Hovering over or focusing **List more** shows the exact number of hidden entries. The control uses a linked accessible tooltip, retains keyboard focus between intermediate clicks, and disappears after the final batch.
- Collectors still return complete sorted results and statistics; batching is transient webview state, so headings and totals remain complete.
- Validation: 164 automated tests passed, the production JPL was built and inspected, and manual Joplin acceptance passed on 2026-07-27.
## 0.7.0 — Gantt chart
- New `gtd-gantt` block: a project-grouped timeline of bars and milestones.
- **Dual-role fence** — a `gtd-gantt` block **with** a `project:` key is an *item declaration* (renders as an inline `gantt: <project>` badge); **without** one it's the *chart*. Same rule applied by the renderer and the collector.
- **Notes → bars** (`begin-date` + `end-date`; both required and valid, `end``begin`, else excluded with a warning). **To-dos → milestones** (◆ on the native due date; `begin`/`end` on a to-do are ignored with a warning; no due date → excluded). No Unscheduled section.
- Items grouped into swimlanes by `project:` (case-insensitive, alphabetical); completed milestones dimmed/struck, recurring get ↻; styling keys (`bg-colour`/`fg-colour`/`title`/`text`) mirror the `gtd` block.
- Chart options: `title`, `scope` (incl. `all`), `notebook`, `filter-project`, `sort`/`sort-type` (`begin-date`/`title`/`modified-date`), `card-detail`. No `notes`/`todos` option (items opt in via `project:`).
- Rendering: CSS-grid timeline with a month tick header, a "today" line, horizontal scroll for wide ranges, and click-to-open. Read-only.
## 0.6.0 — Notebook targeting & profile-wide scope
- Added `notebook:` to every view block (`gtd-calendar`, `gtd-kanban`, `gtd-matrix`, `gtd-gantt`): root the folder scan at a specific notebook — by unique name, `Parent/Child` title path, or 32-char folder id — even one outside the host note's tree. `scope` then applies relative to it. Unknown/ambiguous notebooks warn and fall back to the host note's folder.
- Added `scope: all`: scan **every** notebook in the profile. Guardrails — the stats footnote reports the scan size and is marked `scope: all`, and a soft ⚠ warning appears past ~2000 scanned notes. `notebook:` is ignored under `scope: all` (with a warning).
- Performance: view collectors now request note bodies only when the inclusion mode actually needs the `gtd` block, trimming data fetched for profile-wide scans.
## 0.5.0 — The Skeleton Matrix
- Added `mode: skeleton | eisenhower` to `gtd-matrix` (default: `skeleton`).
- **Skeleton mode** replaces Eisenhower's opinion-based axes with derived ones: rows = active (`in-progress-tag`, shared with the kanban), columns = due soon (`urgent-window` days, default 3, overdue included; `urgent-tag` as a manual override for dateless items). Quadrants: **Do Next**, **Scheduled**, **On Deck**, **Backlog** — nothing is ever "Eliminate".
- Classic Eisenhower preserved via `mode: eisenhower`.
- `MatrixBoard` is now positional internally (top-left…bottom-right); labels are supplied per mode, and rendering is fully shared between the two modes.
## 0.4.0 — Eisenhower Matrix
- New `gtd-matrix` block: a 2×2 prioritisation grid with labelled axes.
- Quadrants from two tags (`urgent-tag`, `important-tag`): Do First / Schedule / Delegate / Eliminate.
- Completed to-dos excluded entirely (a prioritisation view, not a tracking view).
- Cards reuse the kanban's rendering (compact, recurrence mark, drilldown, `card-detail`).
## 0.3.2 — Unscheduled visibility toggles
- Added `unscheduled-todos` and `unscheduled-notes` options to `gtd-calendar` (default: `yes` for both; also accepts `true`/`false`, `show`/`hide`).
- Lets a dashboard with multiple stacked calendar blocks show each Unscheduled sub-section under only one of them, instead of duplicating the list.
## 0.3.1 — Split Unscheduled section
- The Unscheduled area now shows two labelled sub-sections — **Unscheduled to-dos** (first) and **Unscheduled notes** — instead of one mixed list.
- A sub-section is omitted entirely when it has no items.
## 0.3.0 — Kanban board
- New `gtd-kanban` block: three columns (Backlog / In Progress / Done) built from to-dos only.
- Bucketing: `todo_completed` wins → Done; else the `in-progress-tag` → In Progress; else → Backlog.
- Done column limited to a configurable `done-window` (default 7 days; `all` for full history).
- Per-column sort (`due-date` / `title` / `modified-date`); dateless cards sort last under `due-date`.
- Compact cards with a configurable detail panel (`card-detail: hover | always | none`).
- Read-only.
## 0.2.0 — Recurring to-do awareness
- Recurring to-dos (as managed by the *Repeating To-Dos* plugin, v2) are marked with a ↻ symbol across every view.
- Detected via the `recurring` tag the Repeating To-Dos plugin maintains as its own query index — no coupling to its note-body format, no code duplication of its recurrence logic.
## 0.1.0 — Initial release
- Forked from [WeMakeMachines/joplin-plugin-event-calendar](https://github.com/WeMakeMachines/joplin-plugin-event-calendar).
- `gtd-calendar` block populated by real notes and to-dos (instead of hand-written YAML) in the calendar note's folder and, optionally, its descendants (`scope`).
- Views: `day`, `week`, `month` (compact tile strip, upstream-style) and `month-grid` (full current-month 7-column grid with weekday headers).
- Notes and to-dos opt in via a `gtd` fenced block (empty block valid); to-dos schedule automatically from their Joplin due date.
- Unscheduled items (no resolvable date) collect below the grid.
- Drilldown: every tile opens its source note.
- Fixed an upstream bug where the week view silently grouped by month.