release workflow reads release-notes/<version>.md when present; add 0.69.43 notes

This commit is contained in:
Human 2026-05-25 20:38:47 -07:00
parent 3763e7d6a0
commit b8db5253ea
2 changed files with 223 additions and 10 deletions

View file

@ -30,21 +30,28 @@ jobs:
echo "exists=false" >> "$GITHUB_OUTPUT"
fi
- name: Generate release notes from commits
- name: Generate release notes
if: steps.check.outputs.exists == 'false'
id: notes
env:
VERSION: ${{ steps.version.outputs.version }}
run: |
PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$PREV_TAG" ]; then
LOG=$(git log --pretty=format:'- %s')
else
LOG=$(git log "$PREV_TAG"..HEAD --pretty=format:'- %s')
fi
NOTES_FILE="release-notes/${VERSION}.md"
{
echo "notes<<EOF"
echo "## Changes since ${PREV_TAG:-the beginning}"
echo ""
echo "$LOG"
if [ -f "$NOTES_FILE" ]; then
cat "$NOTES_FILE"
else
PREV_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "")
if [ -z "$PREV_TAG" ]; then
LOG=$(git log --pretty=format:'- %s')
else
LOG=$(git log "$PREV_TAG"..HEAD --pretty=format:'- %s')
fi
echo "## Changes since ${PREV_TAG:-the beginning}"
echo ""
echo "$LOG"
fi
echo "EOF"
} >> "$GITHUB_OUTPUT"

206
release-notes/0.69.43.md Normal file
View file

@ -0,0 +1,206 @@
# Stashpad — Release Notes
A chat-style nested-notes view for Obsidian: rapid capture, outliner navigation,
in-place editing. Local-only, no external services.
---
## 0.69.43 — search overhaul, sidebar panels, "When" filter builder *(current)*
### Sidebar panels + Pinned Notes (0.68)
- New sidebar panels view; first panel is **Pinned Notes** (MRU targeting,
drag-reorder, `P` keybind, strike-through on completed rows).
- Search promoted to a panel-independent global actions row above the master
button bar; an icon-only Search button also lives in the Stashpad header
between the folder switcher and tags dropdown.
### Search modal overhaul (0.69)
- Multiple matches in a long note surface as separate clustered result rows
with ±2-line preview context (capped at 5 clusters per note).
- Local-folder badge on every note row; N folder-open entries collapse into a
single "Open folder in a new tab…" sub-picker.
- Breadcrumb path line under the parent blurb (local + cross-folder).
- Query-token highlighting in titles, previews, and parent blurbs.
- `in:` now spans every searchable Stashpad folder, matching the parity of the
time filters.
- **Create-from-search:** when no results match, a "Create new: <query>" row
appears. Picking it opens a destination picker across all Stashpad folders
and spawns a new tab on the picked parent.
- Re-pressing the search keybind while the modal is open focuses + selects-all
in the search input (instead of stacking a second modal).
- Tab is focus-trapped inside the modal (wraps instead of escaping to Obsidian).
### "When" filter builder (0.69)
- Unified `before:` / `on:` / `after:` into a single **When** chip with
Before / On / After / Between mode tabs.
- **Day picker:** Today / Yesterday + MonSun row; weekday names in the END
slot of Between mode resolve to the next future occurrence.
- **Timeframe picker:** preset chips (Last 7d / 30d / This week / This month)
plus a "Last N units" stepper. When used with `on:`, relative durations are
converted to a concrete `YYYY-MM-DD`.
- **Custom time picker:** HH/MM fields, AM/PM toggle, 3×4 numpad, Tab cycling,
24h support.
- Keyboard polish: Enter/Escape stay inside the builder; popover keys don't
leak to the result list; unhandled keys fall through to the rest of
Obsidian's keymap.
### Composer undo fixes (0.69)
- `Mod+Z` / `Mod+Shift+Z` in the composer now reliably triggers the textarea's
native undo / redo. (Previously could accidentally undo the prior Stashpad
action when the textarea was empty.)
- Stashpad's own undo still works from the note list — blur the composer
(`Esc`) first.
- **Known issue:** `Mod+Backspace` (delete-to-line-start) in the composer is
not yet undoable. Three different approaches were attempted (`setRangeText`,
`execCommand`, manual in-RAM stack) and each broke something else;
documented for a future attempt. `Opt+Backspace` (delete-word) is undoable.
### Other quality-of-life
- Smart bracket pairing in the search input: auto-insert closing `]`,
pair-delete on backspace.
- Color filter menu no longer crashes on open (TDZ fix).
- Breadcrumb infinite loop on cyclic ancestor chains fixed (visited-id Set).
- Sub-picker close no longer dismisses the parent search modal.
---
## 0.62.4 — Tiny Mode, ribbon menu button, copy-codeblock keybind
### Ribbon icon (0.62.00.62.3)
- Clicking the ribbon button now opens a searchable folder picker showing
every Stashpad in the vault — leaves, folders, and a "Switch folder…"
entry — instead of jumping to whichever tab happened to be open.
- The "Open Stashpad in new tab" command also shows the picker on
multi-folder vaults.
### Tiny Mode + view modes (0.61)
- **Tiny mode** — pop the current Stashpad out into a small always-visible
window with a minimal shell. Three view-mode buttons (Normal / Compact /
Tiny) live in the header.
- Compact rules apply to Tiny too; composer narrows below a 700px threshold;
rail collapses on wide→narrow transitions.
- Tiny window restores via `setBounds`; plugin stylesheet is injected into
popout windows on open so styles work in detached windows.
- Sticky toggle no longer resizes the window.
### Codeblock copy + Notification history
- New default keybind (`{`) to copy code from a fenced code block under the
cursor.
- Notification history is now reachable from the actions menu; the log
section moved to the top of settings.
### Ouroboros + selection polish (0.63)
- Swap a note with its parent — with cycle guard, descendant-move recovery,
and a "Confirm Note Swap" modal.
- Siblings travel with the swap; undo is cycle-safe.
- Multi-select: mod-click fully deselects; shift-arrow trims the range.
### Advanced search filters (0.64)
- New `in:` / `before:` / `after:` / `on:` filters with a clickable chip row.
- Multi-word filter values; bracketed values
(`in: [copy stashpad features]`); date filters accept an optional
time-of-day suffix.
- `in:` matches "inside the subtree of a note matching this title."
- Folder-open results are downranked when a filter is active.
### Unified folder picker (0.65)
- One picker handles reveal / open / switch-current / create.
- "Open in another new tab" pinned to the bottom.
- Create always opens in a new tab; can convert existing non-Stashpad folders.
### In-Stashpad navigation (0.66 + 0.67)
- Back / forward buttons in the breadcrumb and the tiny header.
- Per-tab history covers folder switches (not just tree-up); persists across
reloads; back falls through to navigate-up at the root.
- Tiny header's folder/title is itself a folder-picker button.
- `Mod+S` is the default keybind for the unified folder picker.
- `cloneSubtree` snapshots children before insert and refuses same/descendant
targets.
### Perf
- Dropped `:has()` selectors, lazy anchor capture, removed a spurious
composer retry path.
---
## 0.60.0 — Ribbon menu shipped first
### Ribbon icon
- Ribbon click now opens a context menu listing every Stashpad — leaves,
folders, and a folder picker — instead of jumping to whichever tab happened
to be open. (Later refined into the searchable picker in 0.62.x.)
### Small-features batch (0.59)
- Catch-all fixes: typo, slug, capitalization, select-all, export fixes,
jump-to-parent across folders, breadcrumb count, color undo.
- Keybind input: wider field with a "Use both" override; true auto-resize;
cancel-restores-prior; dead-key starters (`Option+E` etc.) are now bindable.
- Title-case folder labels in the switch-folder picker.
- Scroll: the `preserve` policy sticks to the bottom when at bottom;
`scrollListToBottom` uses a settle watchdog for at-bottom mutations.
---
## 0.58.2 — NotificationService, ScrollPolicy, picker unification
### Frontmatter recovery layer (0.54)
- Redundant `parentLink` + `children` frontmatter so a note can be navigated
up/down even if Stashpad's index breaks.
- Home notes renamed to `Home-<folder>.md` with bootstrap-time backfill.
- Rebootstrap button also backfills frontmatter; quiet when already in sync.
### NotificationService (0.55) — the headline feature
- Centralized notification infrastructure.
- Verbose notifications for delete / move / merge / clone / reorder.
- Persistent history modal + settings entry + command.
- Per-category mute settings UI; multiplayer (cross-author) filters in the
history modal.
- Bulk actions show bulleted summaries; toast CSS polish; multi-line errors;
clear-history confirm.
- Frontmatter sync: silent success, persistent toast on failure only; live
notice for sustained queue activity.
- Import error toasts get Reveal / Show actions; per-attachment delete toasts
route through the service.
### ScrollPolicy + cursor restore (0.56)
- New `ScrollPolicy` type wired through `render()`; `preserve` is the default —
kills the post-action bouncing.
- Anchor-row preservation (not pixels); follow-cursor on keyboard reorder;
smart post-delete selection; nest picker selects the new parent; undo of
nest highlights the un-nested note.
- Last cursor row persists across reloads via localStorage; restored by id.
### Picker unification (0.57)
- Token-order-agnostic matching in the suggest picker + folder picker.
- Folder picker = Stashpad-only; destination + move pickers = cross-folder +
roots.
- Find modal → pick a Stashpad folder → opens in a new tab; spawned tab
returns focus to origin on close.
### Context-menu polish (0.58)
- Context-menu toggle complete; rebootstrap renames stale slugs and refreshes
the command palette.
- Icons for "Move to" / "Move to Home."
- Notify on no-op moves (already at destination, or into self).
---
## 0.53.20 — Multiplayer authorship, per-parent sort, scroll-to-bottom
- **Multiplayer authorship** (0.51.11): author / contributor stamping, footer
row in the view, log author column. Per-user identity stored in settings;
author stub files live under `_authors/`.
- **Per-parent sort dropdown** (0.52.0): sort each parent's children
independently; drag reverts that parent to manual mode.
- **Robust scroll-to-bottom** (0.53.x): adaptive scroll that survives slow
markdown render on Obsidian reload — per-row ResizeObserver, sticky observer
for the at-bottom branch, watchdog `requestAnimationFrame` polling for up to
30s. `stickToListBottom` short-circuits the geometric check.
---
## Install
Compatible with Obsidian 1.7+. Install via BRAT from this repo, or copy
`main.js`, `manifest.json`, and `styles.css` into a folder under your vault's
`.obsidian/plugins/`.