Releases
v0.1.0
Compare
Sorry, something went wrong.
No results found
Changelog
Features
cd7294f feat(app): $EDITOR round trip, history restore and palette toggles in the editor
42edb56 feat(app): Tasks view with toggling from outside the editor
ac084ff feat(app): Trash view with restore, delete forever, empty and startup purge
5db7b9f feat(app): bridge the vault watcher and add the save plumbing
f778b42 feat(app): check for a newer release at startup
70370f4 feat(app): coming-soon toasts for the finder, search and save keys
1325055 feat(app): command palette, live theme preview, help and error log overlays
70828b1 feat(app): edit notes in the main pane
9c26005 feat(app): esc dismisses error toasts in the note view; errors show the hint
1294b6f feat(app): full-screen note history with restore
0bdbf94 feat(app): fuzzy finder and full-text search overlays
97fe47d feat(app): handle external changes to the open note
07c7dc3 feat(app): import images and open the image viewer
d6cedfa feat(app): index-backed tags, tag filter and pins
34ec8cb feat(app): keep a recovery snapshot of the open buffer
8290d15 feat(app): live-reload user themes
0696c72 feat(app): log toasts to notty.log
4b04703 feat(app): note and folder CRUD flows and $EDITOR handoff
39ca0e8 feat(app): offer recovered buffers back on start
6462078 feat(app): overlay stack and bottom-right toasts
c6903f5 feat(app): quit closes the watcher and saves the local state
45d76af feat(app): quit sequence saves the buffer and deletes Kitty images
f0ea047 feat(app): recover from panics, saving the unsaved buffer
c3813b8 feat(app): reopen the last note on start
452a4a2 feat(app): resolve the theme through the catalog at startup
290cd7c feat(app): split and preview views
24d4d1c feat(app): theme picker lists user themes and restores from memory
7e863b7 feat(app): toggle tasks of the open note in its buffer
6022d3c feat(attach): image import and unused scan
45d6435 feat(buffer): BeginGroupAt records the cursor that undo restores
01dc8f9 feat(buffer): add InsertLineAfter for linewise put and open-line
b7368fa feat(buffer): grapheme-aware line buffer
85d00dc feat(buffer): grouped undo/redo
10bc5a3 feat(cli): detect image capabilities before starting the program
8bd01c0 feat(cli): notty new
179821a feat(cli): notty sync headless cycle
76101fb feat(cli): notty theme matugen
39c5a11 feat(cli): print the Noctalia 5 template entry too
35960ca feat(cli): startup with config, lock and vault
a485ac9 feat(cli): take the vault instance lock at startup
cef8adb feat(clipboard): text and image clipboard via external tools
e42741f feat(config): icons setting
34ba672 feat(config): layered TOML config with XDG paths
896c24e feat(config): update_check setting
22f8f8f feat(dialog): input and confirm dialogs
eb521f3 feat(dialog): overlay compositing helper
08dda63 feat(editor): MapMsg option and CanLeave for embedding hosts
519ee8d feat(editor): ReplaceAll and SetPath for the app
841a079 feat(editor): SetCursor to jump within the open note
aa3919e feat(editor): autosave, lock and read-only modes
bb65680 feat(editor): image paste and clipboard
f71f1ad feat(editor): key translation, vim integration and effects
c41011b feat(editor): live markdown rendering
419c9bf feat(editor): soft-wrap layout and viewport
f82f546 feat(finder): full-text search mode
516d570 feat(finder): fuzzy finder overlay
7817f9e feat(finder): show one line of context per full-text hit
567b891 feat(gitsync): CloneBranch checks out a given branch
8097547 feat(gitsync): ErrNoIdentity, CheckIdentity and SetGlobalIdentity
3dbca1f feat(gitsync): LastCommitAdding to find the commit that added a path
14f77a0 feat(gitsync): MergeWithMessage sets the merge commit message
5f0dc3c feat(gitsync): RemoteURL and GitPath lookups
607ee2e feat(gitsync): conflict listing, path conflicts and history
f55ee99 feat(gitsync): export HelperEnv and KillGroupOnCancel for git-driving helpers
2cc2995 feat(gitsync): git runner and error classification
a289029 feat(gitsync): typed repo operations
fccd5d9 feat(help): generated keybinding help overlay
b84af95 feat(history): per-note history view with diff
95d1c5a feat(imageviewer): ctrl+q requests app quit, kitty ctrl keys, wait for split escape sequences
a6d1d9c feat(imageviewer): full-screen image viewer via tea.Exec
97243d3 feat(imageviewer): key decoder
75314a8 feat(imgrender): KittyDirect direct placement
d6ffd63 feat(imgrender): capability detection
b7a78ea feat(imgrender): half-block, sixel, iterm encoders and cache
9d99f47 feat(imgrender): kitty unicode placeholder encoder
0e72230 feat(imgrender): reserved kitty id range, ViewerKittyID and NextKittyID
672047a feat(index): in-memory note index
3a8d49e feat(index): precompute case-folded content and add Note.ContainsFold
2c9c38e feat(keys): context-layered key routing
9113473 feat(links): image link parsing and resolution
37bfc1e feat(localstate): per-machine recents and UI state
7894e06 feat(logging): log to notty.log in the state dir, rotated at 5 MB
d51796c feat(mdstyle): incremental markdown tokenizer
d61ed6f feat(merge): diff3 block merge
30dbcdd feat(merge): myers line diff
df8a880 feat(merge): unified diff rendering helper
cc18c1e feat(meta): synced pins with three-way merge
736a186 feat(msgs): shared UI message types
a136151 feat(palette): command palette
f380ab7 feat(palette): theme picker with live preview
45af5e2 feat(preview): inline image chips, vault-root link targets and reference links
bcd7f60 feat(preview): render segments with glamour and images
012ab30 feat(preview): scrolling, task and image navigation
02f5d19 feat(preview): segment markdown around image blocks
e2cdc6b feat(recovery): snapshot the open buffer and keep recovery files
47dff00 feat(resolver): binary, modify/delete and path choices
0f8de7e feat(resolver): embedded editor for the result
6e38f18 feat(resolver): file list and text conflict model
f691a5e feat(resolver): three-column view and block choices
8a5a5c2 feat(search): full-text search with query syntax
a98a8b4 feat(search): fuzzy finder
2d77826 feat(setup): check the git identity before setup and allow setting it
ddd0ade feat(setup): execute setup plans
14e0668 feat(setup): plan setup steps for every vault/remote case
2d872eb feat(sidebar): pinned, tree, tags and entry sections
5c134e2 feat(statusbar): busy label shown before the sync state
83d9875 feat(statusbar): mode pill, path, word count, sync state
b623125 feat(statusbar): update available marker
f59ee4a feat(syncer): commit messages
06a62b7 feat(syncer): offline backoff, auth errors, conflict state
7cc5644 feat(syncer): pins/trash auto-resolution and trash warnings
9f28f66 feat(syncer): setup hand-off and external edit deferral
0026c18 feat(syncer): sync state machine with locked merge section
428a7b5 feat(tags): tag parser
2479373 feat(tasks): task line parsing and toggling
85a77f9 feat(tasksview): global tasks view with due dates
b5342f5 feat(textutil): shared wrap/pad/fit helpers
67243ba feat(theme): catalog of built-in and user themes
4b98f11 feat(theme): embedded matugen template
b6c5479 feat(theme): load user theme files
39d3e7d feat(theme): palettes, lipgloss styles, glamour style
160eb06 feat(toast): report the newest toast shown
66544f8 feat(toast): show "+N more" when sticky errors overflow the stack
32ad0db feat(toast): toast queue and error log
cebb44d feat(trash): trash browser view
c972e2c feat(ui): app shell with layout and focus
d8cba80 feat(ui): nerd, unicode and ascii icon sets
3e79231 feat(ui): open the conflict resolver and protect conflicted files
f2850a5 feat(ui): run the setup wizard on first run and from Set up sync
28b6b5b feat(ui): style setters for live re-theming
aaadb4a feat(ui): wire auto-sync into the app
977bc72 feat(update): compare release versions
c59c829 feat(update): fetch the latest release
0ccacb3 feat(update): remember checks and notify once per version
de2218e feat(update): upgrade hint for the install method
87b0222 feat(vault): export GitignoreEntries
c341cb6 feat(vault): instance lock and gitignore
992912e feat(vault): note tree, naming, atomic saves
13910c3 feat(vault): rewrite relative image links on move
02ef7ed feat(vault): trash with per-item metadata
1b5e1ab feat(vim): ctrl+w and ctrl+u in insert mode
a50fc7d feat(vim): list continuation and task toggle
9567d77 feat(vim): modal state machine with motions and counts
7d41208 feat(vim): operators and registers
5b76d3c feat(vim): plain (non-modal) editing mode
3d040f7 feat(vim): r in visual mode; ignore unknown visual keys
a38a5f4 feat(vim): search and command line
2a390a8 feat(vim): search honors a count (3/foo)
ffa1aae feat(vim): text objects
63e24a4 feat(vim): visual modes and dot-repeat
c753e81 feat(watcher): debounced fs watcher with self-write suppression
ea026b3 feat(watcher): nestable Pause/Resume with an event barrier
1bd81ca feat(wizard): cancel in-flight setup work
71bee1c feat(wizard): run setup with progress and errors
2bc2b55 feat(wizard): step model and navigation
86d1828 feat(wizard): theme step with live preview
8cea846 feat(wizard): user themes in the theme step
Bug fixes
d7b99a6 fix(app): a failed quit only discards on the very next quit
23ed4f2 fix(app): a late save report no longer rolls the baseline back
dfcf3ad fix(app): a stale sync update does not clear conflicts
fc88c3d fix(app): baseline external-change detection; save before renaming, moving or trashing the open note
1967356 fix(app): drop late and out-of-order theme previews
c14258b fix(app): error log lists only warnings and errors
1456afa fix(app): external deletes prune pins, recents and expanded folders
707ab22 fix(app): forget notes gone from a rebuilt index only outside a sync merge
90a6b1c fix(app): history restore toast only after the save succeeds
7e08362 fix(app): honor quotes in the editor command
137cae2 fix(app): keep toasts inside the pane border
7b0c0a8 fix(app): move only into existing folders; enter takes the highlighted suggestion
f00ccde fix(app): never hand a batch-file editor a path cmd.exe would parse
cc8675e fix(app): never let a save overwrite a note changed on disk
457809f fix(app): notice a renamed themes directory on Windows
3534c75 fix(app): one-column gutter around the Tasks and Trash views
b6a8016 fix(app): ordered saves, quit waits for saves, synchronous editor focus
d6e40c3 fix(app): overlay stack so help returns to the dialog or palette below
4bbc37d fix(app): palette new note and folder use the sidebar's selected folder
53f0f1b fix(app): re-index the vault after the watcher lost events
24a2c2f fix(app): refresh the wizard's theme after a live reload
7c4f282 fix(app): refuse an editor setting with an unterminated quote
4da4b88 fix(app): replay changes made while the startup index builds
f886c38 fix(app): run one index build at a time
0b4d135 fix(app): say where a missing startup theme was looked for
835b561 fix(app): serialize file rewrites and keep pin and local-state snapshots in order
1853725 fix(app): switch notes only after the old buffer is saved
b1e5878 fix(app): theme picker and wizard review follow-ups
418f25d fix(app): theme watcher follow-ups
f43d3dc fix(app): warn again before a quit discards edits after a new disk change
da6646e fix(attach): fall back to exclusive create when hard links are unsupported
907c471 fix(attach): keep pasted Windows backslash paths verbatim
32e89c8 fix(attach): never overwrite an existing attachment on name collision
d81eb68 fix(attach): strip file:// URL authority before decoding
8b8b7bb fix(buffer): SetText edits only the lines that differ
fcb1004 fix(buffer): give every grouped edit a fresh state id
06228ac fix(buffer): make Replace with identical text a no-op
e489d80 fix(buffer): round insert end position up past a merged cluster
99a5d43 fix(cli): let the syncer conclude a merge found by notty sync
c2111f1 fix(cli): never overwrite the matugen template
6a1747c fix(cli): take the module version of a go install build
9c749fd fix(cli): warn about an unknown theme
245c8d3 fix(clipboard): escape temp path embedded in osascript/powershell scripts
daa034c fix(clipboard): include pid in temp image filename
aaf24c2 fix(clipboard): load System.Drawing assembly in PowerShell image script
a9354df fix(clipboard): remove stale temp image file before and after reading
6ea9449 fix(clipboard): wrap underlying tool error into the ErrNoImage path
caee86c fix(config): SetKey edits only the target key, preserving comments and order
be37389 fix(config): read the editor from the local config file only
dd765a9 fix(config): validate SetKey keys, atomic writes, tag Config for TOML
0e647a2 fix(dialog): use textutil for wrap/pad, don't truncate long words
7e68da7 fix(docs): upgrade hint for a make install from a tag
91cb9b9 fix(editor): ApplyToggle and InsertText return their Cmd, queue while locked and are their own undo step
59568e7 fix(editor): Lock/Unlock is the only lock API; Load clears the queue
7cb882a fix(editor): MarkSaved checks the note path; add Snapshot
4b171bf fix(editor): deliver effect messages in order and track gutter growth
dee85d8 fix(editor): drop clipboard images read for a note that is no longer open
ba9335c fix(editor): paste in command mode goes to the command line
41eb068 fix(editor): read-only notes show the raw cursor line and a block cursor
da378d9 fix(editor): reload keeps the vim mode and its own undo step (vim Resync)
d96f954 fix(editor): render control characters as visible placeholders
4283798 fix(editor): sanitize pasted and clipboard text
8f6c928 fix(editor): tasks in quotes, rule selection, 5-cell progress bar, VS16 chip glyph
d50545e fix(finder): cancel the in-flight search on enter, not just esc
5d5b37d fix(finder): render preview off the View path
ac2c914 fix(gitsync): RenameBranch never overwrites an existing branch
7509a33 fix(gitsync): broaden auth classification and limit it to network commands
9926e25 fix(gitsync): keep Notty's working files out of commits whatever .gitignore says
cd5e015 fix(gitsync): kill the whole git process group on timeout
e1bc57e fix(gitsync): merge guards, any-stage binary detection and conflict-only merge records
7570635 fix(gitsync): respect user ssh config, literal pathspecs and a clean git env
452c2af fix(gitsync): run commits and merges without hooks or signing
edbc38e fix(help): clamp SetSize to the real terminal size
afcc9f6 fix(help): never truncate a long key label, wrap it instead
a493cca fix(history): cache the right pane and use a gg chord for top
109094b fix(imageviewer): keep sixel/iTerm images off the footer with guessed cell sizes
1d853d4 fix(imageviewer): message when images are disabled, file not found on open
4e63397 fix(imageviewer): open images without cmd.exe (ShellExecute on Windows)
dc415b4 fix(imageviewer): restore the terminal even after a write error
bc75929 fix(imgrender): don't trust read deadlines on blocking files
198ae06 fix(imgrender): finish a tty reply cut by the detection deadline
d80787d fix(imgrender): kitty id 0, 32-bit-safe ids, table clamp, no empty chunk
b74a282 fix(imgrender): never leave a blocking read behind in Detect
b7b652b fix(imgrender): reject oversized images before decoding
846955f fix(imgrender): send the kitty query through tmux passthrough
2af048a fix(index): count notes with nested tags toward their parent tags
5be8a8c fix(index): ignore file reads older than the indexed entry
f11d130 fix(index): remove subtree when an updated path no longer exists
616865f fix(index): skip files deleted between listing and reading in Build
556fd66 fix(links): splice only target bytes in RewriteForMove; CommonMark fence indent rule
ce6188e fix(mdstyle): close emphasis with the first chars of a longer run
dc3f6cc fix(mdstyle): fall back to plain span when chroma output does not match the line
951e08f fix(mdstyle): ignore brackets inside code spans when matching link text
67cc22a fix(merge): bound Myers diff worst case with a step budget
b6a6336 fix(meta): use .notty-tmp suffix for pins temp file so the watcher ignores it
b368e58 fix(palette): clamp SetSize to the real terminal size
55a30c3 fix(palette): derive command keys from the key tables (spec §8)
7b72f60 fix(palette): highlight matched runes by byte offset, not rune index
1bbd776 fix(palette): truncate the name, not the key, when a row overflows
811d258 fix(preview): cut only tight lists, keeping ordered numbering intact
57a3d05 fix(preview): don't append reference definitions after an open fence
425f4cb fix(preview): expand tabs and drop carriage returns in text segments
a81c52f fix(preview): ignore task toggles while the render lags the buffer
5e49cd5 fix(preview): keep missing images out of the viewer and clear highlights in split mode
48a9bb9 fix(preview): keep one render in flight and ignore stale results
58e89c1 fix(preview): keep the blank row between an image block and the next list piece
7cab62f fix(preview): only open image files inside the vault with the system opener
5d6aa90 fix(preview): recover glamour panics and fall back to raw lines
66e598d fix(preview): run model-mutating commands before returning the model; document message routing
d65e8a4 fix(preview): size images to the pane, not their physical cell size
6f6618f fix(preview): sync kitty images from the sent set and hold them after ResetKittyState
e1768ba fix(resolver): cap image previews at their half-block sample resolution
3543b47 fix(resolver): esc and :q keep the edit as the result
413bc95 fix(resolver): three-way trailing newline, cell-width command cursor, conflict index
2425e42 fix(search): keep query terms and phrases as typed
cf931d4 fix(setup): bound, classify and isolate gh repo create
958c704 fix(setup): clone checks out the remote's default branch
4c02e8a fix(setup): make clone, gh and .gitignore steps safe to retry
b63e684 fix(setup): never drop local .notty files when cloning into the vault
773fea1 fix(setup): write .gitignore when setup stops on a merge conflict
bebf357 fix(sidebar): keep pin selection, display-only filter expansion, picker polish
818be5f fix(statusbar): keep conflict and error text, shrink the path first
d52ea59 fix(statusbar): name the nerd update glyph in the test
3c1ec49 fix(statusbar): update marker gives way to the note path
d5ba333 fix(syncer): always report the conflicted set once a merge stops
a353bff fix(syncer): bound the worker to an internal lifetime and answer jobs skipped after Quit
e330bbe fix(syncer): check trash warnings after unlocking, via the commit that added the trash path
33996f3 fix(syncer): count a local rename with edits as edited here in trash warnings
b223baa fix(syncer): defer the merge when $EDITOR opens during the fetch
902b847 fix(syncer): keep the fetch timer paused in Conflict and leave a Conflict ended outside Notty
13e97e7 fix(syncer): retry a push raced by the remote, leave Conflict visibly, fail Quit and RunSetup once stopped
d992ae9 fix(syncer): take the remote history into an unborn branch and name unrelated histories
5fb52fd fix(tags): only count # at line start or after whitespace
ddaffee fix(tasks): CommonMark fence indent rule and consistent FindLine comparison
593f938 fix(tasksview): calendar-date comparisons in local time and tidy selection state
950d45f fix(theme): correct tokyo-night and tokyo-night-day palette tokens
c5422ec fix(theme): register a per-palette chroma style instead of shared "charm"
da7dcc5 fix(theme): register every palette's chroma style at init
14e96f8 fix(theme): reject theme names outside the themes dir and non-regular files
4939968 fix(toast): scroll LogView by rendered line, not by entry
455b667 fix(toast): use textutil for wrap/pad, don't truncate long words
dd591c7 fix(trash): cache the Glamour preview render
5af22b3 fix(trash): singular title for one item
9c995a7 fix(ui): R restores a remotely deleted note from the emptied main pane
ccd227d fix(ui): accurate, wrapping empty-pane hint and vault name title
cc3e0fc fix(ui): drop note loads superseded by a newer open request
1ad79ad fix(ui): never focus a sidebar that is not drawn
c46cc73 fix(ui): render without mutating the model
8a3a37a fix(update): sync the state file and remove stale temp files
26ff572 fix(vault): count a name as taken whenever an entry is there
e5df780 fix(vault): harden move against hard links and case aliases
50e5ac7 fix(vault): harden restore destinations and trash metadata reads
cff4488 fix(vault): normalize .md extension in note names
dfe6132 fix(vault): refuse a symlinked or non-directory trash folder
7e2b22d fix(vault): refuse reserved names and hidden destinations
a59f246 fix(vault): release a reserved note name when closing it fails
a87063b fix(vault): robust lock parsing, dangling locks and Windows liveness
6dac1ff fix(vault): single-line note heading and non-duplicated error prefix
95b701e fix(vault): tolerate unreadable subfolders in tree, document symlinks
af4e12a fix(vault): wait out a lock file Windows is still deleting
c540588 fix(vim): PasteClipboard updates the desired column
c50d596 fix(vim): keep the desired column in display cells
3a76d4c fix(vim): never leak undo groups across buffers; add Editor.Reset
0a85cb4 fix(vim): restore the undo cursor from the buffer's undo step
5c6dc7c fix(vim): tab focuses the sidebar in read-only plain mode
cff17bf fix(vim): type pasted text literally and keep dot-repeat state clean
b941f9c fix(vim): visual $ includes the line break
1ecc8de fix(watcher): a root renamed only by case is not gone
e7f659d fix(watcher): always deliver overflow errors and resync watches
8cc3a66 fix(watcher): do not claim unreadable folders go unnoticed on Windows
06de0a8 fix(watcher): drop changes inside .git in the Windows backend
59bfa78 fix(watcher): expire self-write stamps and compare inode and ctime
1c1a1ba fix(watcher): flush only paths quiet for the debounce window
2769cc9 fix(watcher): give every pause barrier its own sentinel file
e7657c5 fix(watcher): ignore Write events on directories
a909f41 fix(watcher): keep the Windows watch alive and restartable
d59dce7 fix(watcher): log unreadable subdirectories instead of reporting errors
9549360 fix(watcher): never recreate a removed vault root from the pause barrier
e697929 fix(watcher): never watch a symlink found past a listing gap
039dde0 fix(watcher): notice notes after an unopenable entry on macOS
8d1436c fix(watcher): remove a barrier's sentinel only when the next barrier starts
95b6eb2 fix(watcher): report removal or rename of the vault root
9b77122 fix(watcher): restart a stopped watch and report lost events only when not paused
3d81f42 fix(watcher): skip unreadable subdirectories instead of failing
9fe5bda fix(watcher): watch the vault with one recursive handle on Windows
Others
7e80656 Merge Task 10: tags and mdstyle
9c9b8e8 Merge Task 11: vault core
70aed2f Merge Task 14: pins
f3beb03 Merge Task 15: watcher
f15f3d7 Merge Task 18: editor component
e819c42 Merge Task 22: preview component
e0d43bf Merge Task 23: image viewer
7646cee Merge Task 27: finder
45d58ff Merge Task 29: tasks view component
bae69ac Merge Task 2: config
aec9f44 Merge Task 30: gitsync
abc21df Merge Task 31: syncer
2792667 Merge Task 33a: setup planner
6bb276a Merge Task 33b: wizard UI
9391129 Merge Task 35: trash and history views
780a324 Merge Task 39: visual polish pass
7203748 Merge Task 3: localstate
031d9a8 Merge Task 40: CI and release pipeline
df07d88 Merge Task 4: themes
ddd3a17 Merge Task 5: buffer
27ac3a8 Merge Tasks 12-13: trash, lock, link rewrite on move
d2ae348 Merge Tasks 20-21: imgrender
c2e8d35 Merge Tasks 25-26: index and search
65bcf56 Merge Tasks 36-37: palette and help
73326ba Merge Tasks 6-9: vim engine
4547474 Merge attach package
53f5701 Merge branch 'main' into worktree-agent-a03075e40d7fa9112
b5df193 Merge branch 'main' into worktree-agent-a039f3fa6401f5a4f
ab6fc5e Merge branch 'main' into worktree-agent-a3838f2efa7637851
55e8b81 Merge branch 'main' into worktree-agent-a445e73a1b7fac6b7
75bdd2f Merge branch 'main' into worktree-agent-a468c8114ff7e41cb
38bf33f Merge branch 'main' into worktree-agent-aaaffb1f7efce988c
1c63130 Merge branch 'main' into worktree-agent-ab7fcec70d5536896
3d2f01d Merge branch 'main' into worktree-agent-ac6cc927d9a5c8b4b
5c589f3 Merge branch 'main' into worktree-agent-ae410df49c7fede85
1cd2aa6 Merge clipboard package
2085248 Merge dialog, toast and textutil
e92f223 Merge fix/ci-unix: macOS watcher and Linux flake fixes
c803820 Merge fix/ci-windows: Windows test and product fixes
72d4d87 Merge integration pass A
a42a29a Merge integration pass B
1f0b966 Merge lint fixes
75b47bc Merge main into editor branch
3560b5f Merge main into imageviewer
b44dae9 Merge main into integration pass B
58b9bae Merge main into setup
c27db7d Merge main into task 31
68faf4f Merge main into vim branch
4e04c8b Merge merge engine (diff3)
b23bf17 Merge tasks and links packages
441855f Merge the update check
c69aa43 chore(cmd): check write and close errors flagged by errcheck
a9d1277 chore(editor): lint fixes
2a6a6b6 chore(lint): check Close error returns in imgrender tests
9b2015b chore(lint): check Close/Remove error returns in config.writeConfigFile
0c74f0a chore(lint): check deferred Close/Remove errors in attach
3f312a3 chore(lint): check deferred Close/Remove errors in localstate
2650b81 chore(lint): check deferred Close/Remove errors in meta
0f3f67a chore(lint): check pipe Close error returns in imageviewer tests
1eb0878 chore(lint): check the CloseHandle error in the Windows lock probe
a66baef chore(lint): define the watcher's fileID fields only where they are used
673ffff chore(lint): drop ineffectual initial assignment in merge test
a16250d chore(lint): drop unnecessary uint64 conversion in watcher
9051cb9 chore(lint): drop unused model reassignment in trash test
7990262 chore(lint): fix errcheck and errorlint findings in gitsync
a285935 chore(lint): fix errcheck and errorlint findings in vault
ae5b5d9 chore(lint): fix errcheck, errorlint, and staticcheck findings in setup
ab25403 chore(lint): remove dead due() test helper in tasksview
3b8721a chore(lint): simplify negated condition in findMotion
c26993a chore(lint): use tagged switch on i%3 in index test
4be2137 chore(lint): wrap both errors with %w in clipboard
6107e63 chore(release): clear the macOS quarantine flag after a Homebrew install
61c34f5 chore(release): mark -rc tags as pre-releases
58c0a0c chore(ui): drop an unused sync text
414eae8 docs(app): refresh comments after the editor pass
b5beaa4 docs(buffer): document DisplayWidth zero width for tabs and control chars
80caad4 docs(dialog): explain the discarded textinput Focus() cmd
244ae50 docs(merge): document trailing-newline handling and block aliasing
c8b0e38 docs(syncer): Updates and UnlockMutations may arrive in either order
b84f69b docs(vim): O keeps indentation only; ToggleTask is already applied
d7d79d4 perf(editor): memoize line layouts per buffer version
9c3a53d perf(imageviewer): apply a key batch, then draw once
961c77d perf(imgrender): scale with x/image/draw and downscale kitty transmits
d4b03bb perf(mdstyle): bound delimiter and bracket scans to keep lines linear
935214d perf(mdstyle): propagate fence state cheaply and compute spans lazily
f9573ba perf(preview): hold the chroma read lock per segment
a337435 perf(preview): map tasks in linear time and render long lists in parallel pieces
731b6a7 perf(resolver): decode image previews lazily and downscaled
467c2e1 perf(search): qualify notes on folded content, dedupe needles, add benchmark
f14c24f perf(tags): bound code span scan to keep FindTags linear
20a968a perf(vim): apply counted inserts and joins as one edit
4256279 refactor(cli): notty new resolves the vault through prepare
7f91905 refactor(imageviewer): use imgrender.KittyDirect and ViewerKittyID, clamp kitty placements to 297 cells
03fc99c refactor(index): rename OpenTasks to AllTasks
68bf8b4 refactor(localstate): share path predicate, tighten temp file perms
4268dee refactor(mdstyle): document block limitations and drop duplicate runLen
e87772d refactor(msgs): typed SyncState for sync status
cc1c860 refactor(resolver): route editor messages through MapMsg and Owns
6f69881 refactor(setup): export ValidateRepoName and use it in the wizard
320fc5a refactor(setup): use gitsync lookups, normalized origin URLs and a Merge · host message
df7100d refactor(theme): palette identity and a read-locked chroma registry
735af63 refactor(ui): draw rounded panes from theme.Styles
12f2f86 refactor(vault): move EnsureGitignore to gitignore.go
805bd95 refactor(vim): single-source action tables
51eab1b style(editor): draw checkboxes, progress bars and chips from the icon set
750e7e2 style(finder): pad the preview pane and say "1 result"
702e7bc style(help): title and key hint
ab385be style(history): rounded panes like the main screen
2704e01 style(palette): mark the current theme with the icon set's check
18a921b style(preview): draw checkboxes and image chips from the icon set
29509cb style(resolver): draw file marks and kind icons from the icon set
f53d137 style(resolver): rounded panes like the main screen
bf9fcf8 style(sidebar): draw glyphs from the icon set
2713dc2 style(statusbar): draw sync glyphs from the icon set
ad34906 style(tasksview): icon-set checkboxes and the pane's one-column gutter
efa4731 style(theme): keep every theme's text legible
85df0e4 style(toast): draw level glyphs from the icon set
1480dcf style(trash): pad the preview column
6a2d52d style(ui): letter-spaced section headers
070a587 style(ui): read-only banner and unsaved mark from the icon set
10f3294 style(wizard): icon-set marks and one list cursor
f05e31a test(app): block saves with a folder in the note's place
a7ec99d test(app): give waitFor 30s before it fails
44ea11c test(app): golden captures of every screen at three sizes
096dd95 test(app): golden captures with the nerd and ascii icon sets
a87e1bf test(app): recognize timers and watcher listeners in the command loop
04ad44e test(app): retype the search when its debounce tick was dropped
5526ee3 test(app): run the test binary itself as the fake $EDITOR
0f259f5 test(app): wait for the program's screen, not its output stream
2ea4388 test(attach): run the shell-escape paste cases off Windows only
f47a0ae test(cli): pin USERPROFILE too and expect native theme paths
831aa99 test(finder): fix ineffassign lint findings in fulltext_test.go
3335119 test(gitsync): split the literal pathspec test per name
b9ce089 test(imageviewer): also sanitize a C1 control in the file name
299ab96 test(imageviewer): tea.ExecCommand assertion, real SIGWINCH watcher, skip pipe cancel tests on windows
2ca431f test(imgrender): concurrent cache Get/Put under -race
8d33dd3 test(imgrender): keep the oversized-image test portable to 32-bit
ffe84d1 test(keys): full context x key routing matrix
1aa791d test(keys): full global-key matrix with overlays and reachable bindings
0fc78cb test(localstate): cover error paths
1c571f4 test(localstate): table-drive Touch/Rename/Remove subtests
e038d37 test(mdstyle): randomized cache vs full re-tokenize property test
2680ae2 test(meta): cover Parse invalid JSON
54036e1 test(preview): judge the task mapping by its fastest of five runs
ad7d5d0 test(preview): note the core count the render benchmark target assumes
252bef8 test(syncer): quote the fake ssh path with forward slashes
d1fe2a9 test(theme): assert Names() by set equality, not a duplicated list
f740232 test(theme): create the backslash theme name off Windows only
d4440db test(theme): read the README example with either line ending
adf62b0 test(vault): skip the permission-bit tests on Windows
5f1502c test(vault): trash temp files and deletion failure paths
5fcd436 test(watcher): replace goto with a waitClosed helper
55d814b test(wizard): drop an unused model assignment
You can’t perform that action at this time.