Skip to content

v0.1.0

Choose a tag to compare

@github-actions github-actions released this 30 Sep 09:33
· 25 commits to main since this release

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