# Anasa changelog

> The 4 most recent desktop releases, read from the public release repository.
> Newest first. Retrieved 2026-09-10.

## 0.4.2-alpha.0 - 2026-09-09 (prerelease)

### Changed

- **Update channels are now rings.** Releases are cut by the size of the
  change: patch fixes ship on the alpha channel, new features (minor releases)
  on beta, and major releases on stable - and each channel includes the ones
  above it, so alpha sees every release, beta sees minors and majors, and
  stable sees majors only. The app resolves this itself: a check polls every
  feed its channel includes and offers the newest version, so nobody on alpha
  is stranded on a patch when a minor or major ships. Settings → Updates
  describes each channel by what it actually receives.
- **Wider, calmer release notes.** The update dialog and What's New are wider,
  and both now draw release notes through one renderer, so the notes an update
  offers you look exactly like the bundled changelog: tinted section labels,
  the same bullets, the same inline links. The commit list that closes each
  release entry folds away behind a small disclosure instead of trailing every
  release with a wall of hashes, and each dialog opens with its primary button
  ready for Enter.
- **Text actions no longer wear a box.** Link-styled buttons, disclosure
  toggles and links used to get the same focus ring as a real button when you
  tabbed onto them; they now show the underline their hover already draws
  instead, so keyboard focus still reads without a box around a phrase.
- **The welcome screen sits on the type scale.** Its smallest labels and paths
  come up to the app's smallest ratified size, its section labels use the same
  micro-label recipe as the rest of the app, and its two buttons take the same
  square corners every other button has.

### Commits

All commits since v0.4.1:

- `2d6d2a7b` fix(desktop): keep focus inside the update dialog when its primary action is disabled
- `fb82bfc0` docs(changelog): release-note dialogs, text-action focus, welcome polish
- `0bcb1a7f` style(welcome): bring the welcome screen onto the type scale and control radii
- `ee6907e0` style(focus): underline text actions on keyboard focus instead of boxing them
- `7fc44d67` feat(desktop): wider release-note dialogs drawn by one changelog renderer
- `963ee954` feat(i18n): describe each update channel by what it receives
- `c79b3292` feat(release): cut releases into channels by bump size
- `84d610c0` feat(updater): resolve update channels as nested rings
- `8d6b31b6` build(desktop): add the semver crate for update-channel version comparison

## 0.4.1 - 2026-09-09

### Changed

- **A tighter floating shell.** The gap around the editor and side-panel
  islands is half what it was, the islands and the collapsed icon rail no
  longer cast a drop shadow in any theme (the hairline and inner sheen stay),
  and the icon rail now wears the same material as the islands on a bare
  window ground instead of a second tinted column behind it.
- **Traffic lights that sit still.** On macOS the window controls now sit
  where the system puts them in a standard toolbar window, and the top strips
  of the floating shell are centred on that line whichever sidebar stage is
  showing - expanded, icons or hidden. The first control after the lights
  starts at the same distance from the window edge in every stage, including
  the zen breadcrumb, and the green light no longer touches the edge of the
  icon rail on macOS 26 and later, where the lights are larger.
- **Window corners that match the frame.** On macOS the app now clips its
  content to the corner radius the system actually gives the window, instead
  of a fixed 10px, so the corners no longer show a thin sliver of bare
  backdrop on macOS 26 and later, where windows are rounder.
### Commits

All commits since v0.4.0:

- `0837327` chore(deps): land the in-flight toolchain bumps
- `8cad16f` fix(shell): clip #root to the corner radius the OS actually gives the window
- `5661c49` fix(shell): let AppKit place the macOS traffic lights and centre the shell's top strips on them
- `6cfd95a` style(shell): half the island gap, drop island shadows, rail wears the island material

## 0.4.0 - 2026-09-09

### Added

- **Empty states that show their state.** Every resting surface in the desktop
  app now draws a small scene of what it is, instead of a grey icon: a clean
  sheet with a first drop of ink where the vault has no notes yet, a stone held
  over still water before you search and a stone that has sunk when nothing
  rose, three notes that do not touch where nothing links, a ticked-off sheet
  where the task list is clear, a blank tag on a thread where nothing is
  tagged, a page whose heading slot is empty in the outline, a reading lamp in
  the AI panel (unlit until a provider is set up), and a lock on the lock
  screen that pulses while your identity is being checked. Each scene settles
  into place once when it appears and then rests; the one small ambient
  movement a scene keeps switches off from the Medium energy level down, and
  reduced motion shows every scene still.

- **The last bare loaders are gone.** Task, tag, backlink, revision, deleted-
  notes, broken-link, conflict, updates, skills and dropdown loaders, and the
  editor's diagram and query blocks, now use the same writing/sounding/linking
  loading marks as the rest of the app instead of pulsing text. The boot
  screen's "preparing" state breathes instead of showing a frozen icon, and
  notifications now settle in from the corner instead of appearing cut-in.

- **The tradeoff, drawn.** The landing page's "Powerful or calm. Complete or
  private." section now shows the three kinds of tool it names - a page
  buried under a wobbling stack of plugins, a bare page that tasks, links and
  plans keep bouncing off, and a page drifting up into a padlocked cloud -
  and, beneath them, one desk where the same three pieces settle onto a
  single page as you scroll to it.

- **The account dashboard shows its state, not just its numbers.** Every card
  on anasa.md/dashboard now carries a small animated scene drawn from the
  app's own imagery: your credit balance is the level of ink in a bottle
  (honey when it runs low, a dry ring when it is out), your device seats are
  desk lamps on a shelf that light up as devices activate, Cloud sync is a
  desk whose note sheets drift up into the cloud only while your plan is live,
  your license is a wax seal that presses onto the card (and cracks if the
  purchase was refunded), usage bars rise into place, and empty ledgers show a
  blank page or an empty receipt instead of a bare sentence. Switching between
  Overview and Settings now shows sheets settling on a desk inside the
  dashboard rather than the full-screen splash. Everything respects reduced
  motion.
- **Loading states that look like Anasa.** Every "still loading" moment in
  the desktop app now draws one of four small scenes from the app's own
  imagery instead of a spinner (the refresh and download arrows you trigger
  yourself still turn while they work): the breath mark inhaling (the launch splash, the boot
  screen, generic panels), ink lines writing themselves onto a page (opening a
  note, templates, boards), a stone dropped in still water (search and
  indexing), and three notes finding each other (relationships). They appear
  only after a short delay, so the loads that finish instantly never flash
  anything; they breathe slower at calmer energy levels; and under reduced
  motion (system or the in-app setting) each one rests on a still frame
  instead of freezing mid-animation.

- **Send notes to Anasa from Claude.** Anasa Cloud now publishes a Claude
  connector at `https://anasa.md/api/mcp`. Add it under Claude's Settings →
  Connectors → Add custom connector, sign in with the same account you use on
  the Anasa dashboard, and Claude can drop a note straight into your inbox -
  Anasa files it under `Inbox/` on its next sync. Claude can also list the
  captures still waiting to be imported and read back your plan and sync
  storage. It is read-and-append only: Claude can never edit or delete
  anything already in your vault, and because vault sync is end-to-end
  encrypted, the connector cannot read your notes at all - only what you send
  it. To let Claude search and write across your whole vault, use the local
  MCP server in Settings → Developer instead, which runs on your own machine.

- **A tighter landing page.** The home page now names the tradeoff Anasa
  refuses (powerful or calm, complete or private) and walks through getting
  started in four steps, in all ten languages - while the connected-notes,
  privacy, and experimental alternate pages leave the flow to keep it short.
  The pricing page now shows the 14-day refund terms and the cancel-anytime
  rule next to the buttons.

- **Switch AI providers from the chat composer.** The composer is now one
  bordered field with a controls row, and a new provider chip in it shows
  which AI runs your chat - open it to jump to any provider that's actually
  reachable right now (the same one-click switch the error banner offers),
  or straight into the AI settings.
- **Sources fold into a drawer.** An answer's citations now sit behind a
  compact "N sources" toggle that expands into a tidy list with each source's
  domain - and source links now open in your browser instead of hijacking the
  app window. Thinking traces, tool badges, and citations ease in with a
  gentle stagger, and tool-approval cards rise into the conversation instead
  of popping.

- **The base look is now Zed's One Light / One Dark.** The default light and
  dark themes transplant the Zed editor's own design values wholesale - every
  surface, border, text and icon rung, interaction state, status color, syntax
  table, corner radius, elevation shadow, and scrollbar tone comes verbatim
  from Zed's shipped One themes and GPUI style tables. The accent follows
  Zed's blue. All 40 theme presets are untouched and keep their own palettes.
- **A floating shell layout - now the default.** The editor and side panels
  lift off the window as rounded islands, and the sidebar rests directly on
  the window glass. Turn on Window vibrancy and the desktop frosts through
  the gaps between the islands; Reduce transparency keeps the floating
  geometry but paints everything solid again. Settings → Appearance → Shell
  layout switches back to the classic attached shell.
- **Sidebar flyouts in the icons stage.** The three sidebar stages are now
  fully independent: clicking a view icon on the collapsed rail peeks that
  view as a floating panel over the editor instead of expanding the sidebar.
  Click another icon to switch, pick a note to open it and dismiss, press
  Escape or click anywhere else to close - or hit the pin button to promote
  the flyout to the full sidebar.
- **An icons-only sidebar stage.** The sidebar toggle (⌘⇧E, the View menu, or
  the button in the sidebar header) now cycles through three stages: the full
  sidebar, a slim icons-only rail, and fully hidden. The rail keeps every view
  and action one click away - picking a view expands the sidebar right on it -
  and the stage you leave the app in is restored on the next launch.
- **An application menu on Linux and Windows.** Every command that lives in
  the macOS menu bar - File, Edit, View, Energy, Tools, Window, Help - is now
  reachable on the other platforms too, from a compact menu button in the tab
  bar. Prefer the classic look? A new **Settings → Appearance → App menu**
  option switches it to a VS Code-style File/Edit/View row. Menu items show
  your actual keyboard shortcuts, including any you've customized.
- **Updating happens where you hear about it.** The "Update available" pill in
  the status bar, the update notification, and Help → Check for Updates now all
  open one update dialog that carries the whole thing: what's new in the
  release, a Download button with live progress, and a Restart to Update button
  once it's ready. Each of those used to drop you into Settings, where you had
  to run the check yourself before a download button even appeared. "Skip this
  version" and "Remind me tomorrow" are there too, and the download keeps
  reporting progress in the status bar if you close the dialog. Settings →
  Updates keeps the preferences - channel, how often to check, auto-download.

### Changed

- **A new landing-page hero.** anasa.md now opens on a single calm screen:
  layers of torn paper in the site's colors stack at the bottom of the page -
  the files Anasa is built around - drifting gently and sliding apart as you
  scroll, with a paper plane crossing the sky. The energy dial that used to
  share the hero moved just below, next to the app window it controls, and
  everything still honors your reduced-motion preference.

### Fixed

- **anasa.md reads the same in every language again.** The September copy
  rewrite of the home page - hero, energy, writing, AI, toolkit, pricing and
  download sections - had only landed in English; the other nine languages
  were still showing the older text. All nine now carry the current copy,
  written for each market rather than translated word for word, and the
  landing and the app once more use the same words for the same things
  (the vault, the energy levels, the dial). A pass over the app's own
  catalogs tightened wording that still read like a translation.
- **COSMIC stops forcing a titlebar onto the window.** On COSMIC, an
  unremovable system titlebar appeared over Anasa's chromeless window no
  matter what the Window chrome setting said - a GTK quirk made the
  undecorated window actively request one from the compositor. The window
  (and the quick-capture panel) now negotiates client-side decorations
  properly, so chromeless means chromeless; choosing **Native** window chrome
  now gets you COSMIC's real server-side titlebar instead.
- **Compositor blur on COSMIC is diagnosable and documented.** COSMIC only
  renders window blur while its own Frosted Glass appearance setting is on -
  with it off, the request is silently ignored. Anasa now says so in the
  Compositor blur setting's description and logs a clear hint when it detects
  that state, and the blur region handling is documented against how
  cosmic-comp actually clips (window geometry plus the theme's rounded
  corners).
- **Links into Settings land on the panel they promised.** Clicking through
  from an update prompt, an AI call-to-action, or a low-credit notice opened
  Settings on Appearance instead of the panel it pointed at. Every one of those
  links now arrives where it said it would.
- **No more phantom "File modified" notifications.** Opening a note no longer
  triggers a "File modified" toast when nothing changed: metadata-only
  filesystem events (Finder's last-used stamp, the app's own Spotlight-keyword
  mirroring) are no longer reported as content changes by the vault watcher.
- **Opening a note from Finder works outside the vault.** Double-clicking a
  Markdown file in Finder (or opening it via a `file:` link) no longer fails
  with permission errors: after you confirm the open, Anasa grants itself
  access to that single file. The "Could not check for conflicting
  copies" toast that rode along on those opens is gone too.
- **Sidebars are readable under Liquid Glass.** The translucent chrome was
  tuned for macOS's frosted vibrancy materials; over the much clearer
  Liquid Glass (macOS 26+) the same tuning read as nearly see-through.
  The app now knows which backdrop actually got installed and roughly halves
  the chrome transparency under glass - the translucency slider keeps its
  full range, and the frosted materials are untouched.
### Commits

All commits since v0.3.0:

- `393beae` fix(bindings): give both show_plain_notification variants the same doc comment
- `9b01684` ci(test): add the MSVC target to the pinned toolchain on the Windows cross leg
- `8ed4aa2` ci(test): install the MSVC target on the cross-compiled Windows leg
- `cc8e0fb` docs(changelog): add the Windows CI probe fix to the 0.4.0 commit list
- `3b3c457` ci(test): skip the capability probe on the cross-compiled Windows leg
- `1d1096f` feat(deps): add oxc-transform-react and update related configurations
- `f5affb8` chore(deps): land the in-flight dependency and toolchain bumps
- `c2c2827` fix(i18n): bring all nine locales up to the current English and read like natives wrote them
- `0e935a6` chore(tooling): call vite, vitest and oxfmt directly now that vite-plus is gone
- `3b984ec` feat(landing): migrate checkout to the versioned Polar SDK 1.0 client
- `05b1dd5` fix(desktop): import the loader and empty state from @anasa/ui in the barrel-free panels
- `656da49` docs(changelog): state scenes, loader sweep, toast entrance
- `669bc63` feat(desktop): notifications settle in from the corner
- `27b794b` feat(ui): finish the loader sweep on the bare-text and pulsing states
- `887d64d` feat(desktop): draw a state scene on every resting surface
- `2904f8c` feat(ui): state scenes for empty, idle and locked surfaces
- `d5c7353` feat(ui): finish the spinner sweep on the remaining loading states
- `85c96c7` chore(landing): drop the SparkleIcon alias the credits card no longer uses
- `f4d162d` feat(landing): draw the tradeoff under the problem section
- `31482e8` feat(landing): animated state scenes and a route loader for the dashboard
- `f2af7f5` Update dependencies and configuration files
- `5741d0d` feat(ui): replace spinners with metaphor loading states
- `aae77a2` fix: surface the Claude connector in Settings, and clear its follow-ups
- `dc69585` feat(landing): add a Claude custom connector over remote MCP
- `fbf65fd` feat: add share card studio for marketing images
- `c74b4fc` build: pin pnpm 12.2.1 and let Vercel's corepack through turbo
- `c62a9fd` refactor(landing): drop the connected-notes, privacy, fit, and FAQ sections and the /alt pages
- `9ab9433` feat(landing): apply the 2026-09-01 marketing copy package across all ten locales
- `ba0f45a` docs(changelog): provider picker composer + sources drawer entries
- `f955f5c` feat(ai): composer field with inline provider picker
- `d1cb8ac` style(ai): inline approval card rises in with pill actions and card shadow
- `84498af` feat(ai): collapsible sources drawer for message citations
- `b432235` feat(i18n): ai_chat_provider_picker + ai_chat_sources_one/other keys across all locales
- `dc7f254` style(ai): staggered app-rise entrances for trace rows, tool badges, and vault citations
- `2ee4816` fix(ai): apply the untrusted-note-content guard to every system prompt path
- `0a451b0` fix(ai): disambiguate search tool payloads, surface truncation, treat note content as data
- `c518e4d` fix(shell): make the sidebar's curved inner corners actually visible
- `51936cb` style(shell): sidebar inner corners curve like the island's
- `d40ef6b` style(chrome): style audit - de-overlap tab effects, one bottom baseline, hover eased again
- `4404db3` style(tabs): darkened active sheet shared by the selected tab and breadcrumb
- `3beb696` style(tabs): 32px tabs in the 40px strip; hover eased to a quarter-step
- `0412fe5` feat(chrome): scroll fades everywhere, flat tab ramp, tighter strips, slimmer status readouts
- `3131b06` feat(chrome): meltemi tab depth ramp, one merged bottom bar, meltemi scroll fades
- `d2ba4c5` feat(chrome): status bar joins the window frame; square Zed tabs; active-line highlight
- `02c5dc9` fix(shell): status bar keeps Zed's tonal separation inside floating islands
- `6d0845f` style(chrome): Zed fidelity pass - status-bar item model, elevation recipes, dock accents, indent guides
- `bd9c2fe` style(chrome): flip the remaining pill controls to Zed radii
- `8771371` style(chrome): make components actually follow Zed conventions
- `5648bca` feat(theme): adopt Zed One Light / One Dark as the base design tokens
- `973242a` chore(fmt): comment rewrap picked up by repo-wide oxfmt pass
- `004a14e` feat(sidebar): independent stages with icons-stage flyout peeks; floating shell becomes the default
- `5216f1b` fix(shell): widen mac icons rail past the traffic lights; align + unify the floating islands
- `6328d3b` feat(shell): floating shell layout with desk + island model
- `f989ba4` chore: restore packageManager field dropped in c750d553
- `d9633ea` feat(sidebar): three-stage toggle with an icons-only rail
- `c750d55` feat(motion): add motion contract with spring and easing definitions
- `b4b22e4` refactor(landing): remove unused cloud images and particle components
- `f8ecbf6` fix(linux): keep GNOME's CSD headerbar in auto mode; COSMIC-only chromeless
- `c9f6e77` fix(menu): resolve accelerator hints for actions without a native menu item
- `9ba78be` fix(linux): stop COSMIC forcing a titlebar; make blur behavior diagnosable
- `829eb88` chore(deps): update workspace dependencies to latest
- `4d03a09` test(menu): pin the in-app menu definition to live listeners and shortcut keys
- `44acd96` feat(menu): in-app application menu for Linux/Windows
- `7ab29bb` fix(appearance): compensate chrome alphas when Liquid Glass is the backdrop
- `fc80216` fix(desktop): grant single-file fs scope for Finder / file-link note opens
- `3575386` fix(watcher): metadata-only fs events no longer surface as file modifications
- `9897068` fix(build): vendored OpenSSL for the darwin-x86_64 cross leg
- `f7b1cfe` chore(release): pin release-kit 2.9.1

## 0.3.0 - 2026-08-24

### Added

- **Test connection for cloud AI credentials.** The AI runtime settings gained
  a "Test connection" button that validates the selected provider's key (and
  endpoint) with a free model-list probe - a bad key now fails right there
  with the reason, instead of on your first billed AI call.
- **AI chat has a keyboard shortcut and a menu item.** ⌘⇧I toggles the chat
  panel, the command palette entry shows the combo, the shortcuts cheatsheet
  lists it, and macOS gained View ▸ AI Chat with the matching accelerator.

- **Code blocks in AI chat grew real chrome.** Chat code blocks now have a
  header bar with the language label and a copy button, matching the editor's
  code cards - and the copy/table/diagram controls in AI replies now follow
  your UI language and app theme instead of rendering as unstyled English
  buttons.
- **The AI shows its work as a living trace.** Reasoning and agent activity
  now render as an animated thinking trace: the label shimmers while the
  model works, the panel auto-expands, and when the answer starts it folds
  into "Thought for Ns". Tool calls are compact rows - tool name, what it
  ran on, status - that expand to the full input/output when you need it.
- **Waiting on a reply now counts time.** Before the first token arrives the
  chat shows a small animated indicator with a live elapsed timer instead of
  anonymous placeholder bars, so long tool runs read as work, not a hang.
- **Pending AI changes show their diff.** Each entry in the review strip has
  a "Show diff" toggle with +/− counts, expanding a compact before/after
  preview - Keep or Revert without opening the note.
- **anasa.md answers AI agents in markdown (site).** Every page a buyer's
  assistant asks about now has a plain-markdown twin at the same address plus
  `.md` - `/pricing.md`, `/limits.md`, `/about.md`, `/download.md`,
  `/changelog.md`, `/agents.md` and the three legal documents - indexed from
  `/llms.txt` at the root. The prices and quotas in them are generated from
  the same catalog the checkout charges from, so an assistant can no longer
  quote a stale price. The six that also exist as web pages answer an
  `Accept: text/markdown` request with the markdown instead of the page, and
  robots.txt now names the AI crawlers explicitly.

### Changed

- **Slimmer chrome.** The three top strips - sidebar title bar, tab strip,
  and right-panel header - went from 52px to 44px, and the macOS traffic
  lights re-centered to match. Tabs, titles and actions are unchanged; the
  shell just spends less of your screen on itself.

### Fixed

- **A failed AI call can no longer eat your credits - or charge twice.** Every
  managed AI request now carries an operation id: retrying a turn after a
  network hiccup resumes the same charge instead of paying again, and a call
  that dies before producing output is refunded automatically even when the
  immediate refund itself fails.
- **"Deleted" now always means deleted.** Consuming a capture, resetting vault
  sync, and deleting your account now record every stored object in a durable
  deletion queue before reporting success - a storage outage can no longer
  leave encrypted data behind after the app said it was gone.
- **A refunded Anasa Cloud plan stays refunded.** An AI refund that lands
  after a plan refund no longer restores the forfeited monthly allowance.
- **Buying twice at the same moment mints one license, not two.** Two
  simultaneous orders under one email now settle as one license plus a credit
  top-up.
- **AI plans survive a reload.** Approvable execution plans (Plan Mode) now
  persist with their per-step approvals; the plan tab no longer comes back
  "unavailable" after a restart.
- **Bring-your-own-key providers can actually be reached.** The app's egress
  allowlists (CSP and the HTTP capability) now include the BYOK catalog's
  provider endpoints (OpenAI, Anthropic, Google, OpenRouter, xAI, Mistral,
  Azure OpenAI, Vercel AI Gateway) - direct BYOK calls and model discovery
  were silently blocked in packaged builds.
- **Closing the chat no longer needs its own bookkeeping.** The chat panel now
  runs on the AI store's per-conversation abort registry and mirrors its
  status there, so any surface can observe "AI busy" and aborts are managed
  in one place.
- **The Apple reasoning control stopped pretending.** The Private Cloud
  Compute reasoning toggle only renders when PCC is actually available; this
  build ships without the PCC entitlement, and the permanently-disabled
  control read as broken.

- **AI controls no longer fail silently - anywhere.** A full audit of every AI
  button and flow across the app: each now shows activity while it runs and
  reports success or failure. Inline AI completions surface provider errors
  (previously swallowed into a debug log) and show a status pill while waiting
  for the first suggestion; the editor's AI context-menu actions are disabled
  in read-only panes, where their results used to be applied invisibly and
  lost; "Process meeting notes" Cancel actually aborts the request now; and an
  AI result that can't be inserted into a note (reading mode, no editor pane)
  says so instead of vanishing after a billed call.
- **AI chat correctness sweep.** A fast double-Enter can no longer wipe a turn;
  an empty model reply explains itself instead of rendering a blank bubble;
  a failed history clear is reported instead of pretending success; error
  banners no longer leak across conversations (with a Retry bound to the wrong
  message); closing the panel mid-answer aborts the request instead of letting
  it keep running headless; composer drafts now persist per conversation;
  citation links open in your browser instead of navigating the app away;
  "Referenced N notes" chips are clickable and open the note; and the copy
  buttons show a failure icon when the clipboard write fails.
- **Tool approvals can no longer strand the agent.** An approval raised while
  the chat panel is hidden now opens the review modal (previously there was no
  UI at all until a five-minute timeout denied it); timed-out or aborted
  approvals clear their rows instead of leaving dead Approve/Deny buttons; the
  Assisted/Autonomous switch is actually enforced (Assisted always confirms
  dangerous actions, even "always allowed" ones); "Always allow" confirms it
  saved - and tells you when it didn't; and Revert in the pending-changes strip
  reports changes it cannot undo instead of marking them reverted.
- **Settings tell the truth.** "Re-index" on a provider without embeddings
  explains what's needed instead of celebrating "Re-indexed 0 of 0"; the
  Ollama daemon and Apple Intelligence status checks can no longer stick on
  "Checking…" forever; subscription login detection reports failure; MCP
  server add/toggle/remove surface write failures; and the notification
  history's Clear button now also clears background error entries.
- **Dead AI controls removed or honestly gated.** The Start Page "Suggest
  tags" and "Related notes" quick actions - which could never work on that
  screen - are gone; the breadcrumb Chat button, its selection actions, and
  the palette's chat toggle hide under zen/Rest, where the chat panel cannot
  render; and subscription providers are no longer mislabeled as "no provider
  configured" at boot.
- **Pricing and AI API hardening (site).** The pricing page shows localized
  guidance when a Cloud plan needs a license first (instead of a raw English
  server string); AI API errors no longer echo internal provider details; and
  the managed chat stream has a real server-side time budget instead of
  holding the connection for the full five-minute cap.
- **MindDump: a failed voice transcription now says so.** The recording is
  kept either way, but the "transcribing…" spinner no longer just vanishes
  when no text could be produced.

- **Switching tabs no longer arms a phantom auto-save.** The editor treated a
  synthetic "editable changed" event fired on every tab switch as a real edit,
  scheduling an auto-save for a note you never touched - and for notes whose
  markdown doesn't round-trip byte-identically, rewriting the unedited file on
  disk. Those ghost writes then echoed back through the file watcher as
  "external" changes, causing file-tree refreshes, task re-extraction, and
  "File modified" notifications for files only the app itself had touched. The
  synthetic event is no longer emitted, and content loaded into the editor now
  compares against the editor's own serialization, so late echoes of a load
  can never masquerade as edits.
- **The app's internal `_data` folder no longer triggers "file changed"
  notifications.** Writes to per-vault state files (workspace settings,
  indexes) are the app's own bookkeeping; the vault watcher now skips that
  subtree instead of reporting the app's writes back to you as external
  changes.
- **Note version history actually records revisions again.** The SQL safety
  guard didn't recognize the revision service's replay-safe insert form and
  silently blocked every revision capture and the legacy-history import; the
  guard now allows exactly that shape, and your edit history builds up as
  intended.
- **Schema migrations tolerate two app windows racing each other.** When two
  contexts both saw the same pending migration, the slower one crashed on a
  bookkeeping conflict; migrations now take the write lock first and skip
  cleanly if another context already applied that version.
- **Fresh installs and upgrades no longer boot with a dead database.** The
  safety snapshot taken before schema migrations tried to write into
  `~/Documents/Anasa Backups` - a folder the app's own security sandbox
  (correctly) refuses to touch, and one that doesn't even resolve reliably on
  Windows or Linux. The snapshot now runs natively and lands in Anasa's
  app-managed data folder on every platform, so migrations always have their
  safety net and never abort. The default backup location moved with it: it now
  works out of the box everywhere, existing installs are migrated
  automatically, a folder you chose yourself is left alone, and the
  conventional `Documents/Anasa Backups` folder is now genuinely reachable on
  macOS, Windows (including redirected Documents), and Linux if you point
  backups there.

### Added

- **Zen mode.** One toggle - **⌘⌥Z**, View ▸ Toggle Zen Mode, or the command
  palette - and the shell steps back: sidebar, right panel and tab strip
  disappear and your note becomes a centered column at the classic book
  measure (66 characters, following typographic research; a configured
  narrow width is respected), with the editor toolbar centered above it. The
  window itself narrows to a reading width - scaled to your editor font size
  and clamped to your screen's free area - and re-centers, then gets its
  exact size and position back when you leave (fullscreen and maximized
  windows are left alone). It is a pure layout
  state: nothing is closed, so leaving zen puts every panel back exactly
  where it was. Rest energy (0%) now grants the same stillness - dropping the
  battery to Rest gives you the zen layout too, without touching your energy
  state or your saved layout.

- **An Energy menu.** A new menu-bar item with the two ends of the scale -
  Full Energy and Zero Energy - so there is always a one-click path into and
  out of Rest, even while Rest itself hides the tab strip that carries the
  battery.

- **Softer transitions.** Switching notes now fades the editor in instead of
  hard-cutting. Entering or leaving zen and moving between energy levels
  animates everything that used to snap: the tab strip folds, the status bar
  collapses, the sidebar and editor toolbar fade, and the editor column
  re-centers smoothly - including the return to Full energy, which previously
  snapped while every other level faded. All of it respects both the in-app
  reduced-motion setting and the OS preference.

- **MDX files, actually alive.** `.mdx` documents that stay inside Anasa's safe
  component subset now open straight into full visual editing - the same rich
  editor as any note, plus a component toolbar. The component set grew from
  three to eleven: cards and collapsible sections with inline-editable titles,
  side-by-side **columns**, **tabs**, numbered **steps**, a **link card**
  (`::embed`), and inline **keyboard keys** (`:kbd[⌘K]`) and **badges**
  (`:badge[Beta]{tone="success"}`). `::youtube` is now a real video: a
  thumbnail that loads the privacy-respecting youtube-nocookie player only when
  you press play - nothing is contacted before that click. Reading mode renders
  all of it too: native collapsibles, switchable tabs, playable videos.
  Files that use real MDX (JSX, `import`/`export`) are detected up front and
  kept byte-perfect in reading + source mode, with a strip explaining why -
  visual editing can never corrupt them, and no JSX is ever executed.

- **A window to open the app through.** Every launch now begins at the Stillness
  gate: a full-window view of a sky that is actually the sky outside your
  clock - the sun and moon ride a real arc, the light on the water follows them,
  stars come up at dusk, and the colour keeps moving minute by minute rather
  than switching between a handful of moods. Under it sits a greeting that knows
  the hour and one line about what Anasa is carrying: where you were last, how
  many days in a row you have written. Press **Esc**, hit **Enter**, or click
  the way in, and it is gone. Nothing about it needs the network, your location,
  or permission to ask.
- **Your energy level, whispered instead of demanded.** The gate never asks how
  much you have got today. The level sits on the baseline as five dots and the
  word you chose last; hover for the hint, click a dot to change it. Declaring a
  lower level visibly changes what you see - the view loses light and focus, the
  gulls stop, and the row of numbers thins out until, at Rest, only what matters
  is left. The world stays true; your level only sets how much of it reaches you.
- **A line written for you, if you want one.** Settings → Appearance →
  **Let AI write the welcome line** hands that one sentence to your configured
  AI provider - dry, a little knowing, never a wellness coach. Off by default:
  it is one short generation per day and it costs credits on the paid tiers.
  Only the time of day, your declared mode, your streak and your display name
  are sent - never a path, a filename, or anything you have written - and it
  never runs at Rest. If the provider is unreachable, Anasa's own line stays.
- **Anasa speaks ten languages.** The app chrome - sidebar, tabs, breadcrumbs,
  status bar, dialogs, side panels and the boot screen - is now translated into
  English, Greek, German, French, Spanish, Italian, Portuguese, Dutch, Japanese
  and Chinese. Pick one under Settings → Appearance → Interface → **Language**,
  or leave it on _System_ and Anasa follows your OS. Dates, times and numbers
  keep following your OS region independently, the way macOS does it. Surfaces
  that aren't translated yet fall back to English rather than breaking.
  anasa.md is localized to the same ten languages.
- **Anasa now looks like the OS it runs on.** A new native theme reads your
  system appearance and accent colour live and rebuilds Anasa's palette around
  them, switching with the system between light and dark.
- **Saved searches became runnable views.** Saving a search as a View now
  remembers the query that produced it, so re-opening the View re-runs that
  search instead of showing a frozen list. Views can be run, re-saved and
  deleted from the search modal's Saved tab.
- **Editor reading surfaces.** The editor background setting (Paper / Sepia /
  Dark Gray / Pure Black) does something at last: each option is a complete
  reading surface with its own ink, readable under any theme - Paper stays warm
  ink-on-paper even in a dark theme.
- **Progress for workspace encryption.** Turning encryption on or off now shows
  "Re-writing notes - N of M" instead of an indeterminate wait.
- **The AI can see all of a long note.** Notes used to be indexed as a single
  chunk of their first 8,000 characters, so anything you wrote past that point
  was invisible to Smart Connections, semantic search and chat - silently. Notes
  are now split along their own structure (headings, then paragraphs) and each
  piece is indexed separately, so a long note is retrievable end to end and
  results can point at the exact passage that matched. Your index rebuilds
  itself the first time each note is re-indexed; nothing to do.
- **Export and Save As on Windows and Linux.** "Save note as…", "Export as PDF",
  "Export as HTML" and "New Window" existed only on the macOS menu bar; they are
  now in the command palette on every platform.
- **Delete your account yourself.** anasa.md → Dashboard → Settings now has a
  "Delete account" action that removes your licence, device activations and any
  synced data, instead of requiring an email to support. Cloud storage is purged
  before the records naming it, so a storage failure reports a partial deletion
  rather than quietly leaving data behind.

### Fixed

- **Notifications held back by your energy level come back.** At Focus and Blank
  modes Anasa quietens non-urgent toasts. Those toasts used to be filtered out at
  the last moment and then expire on their own timer - you never saw them, and
  they never returned when your energy came back up. They are now held properly
  and delivered the moment you raise your level, and the "N held" notice counts
  them so you can tell something is waiting. Errors still interrupt at every
  level, including Blank: a failed export has to tell you it failed.
- **Higher contrast is respected in low-energy modes.** If you ask your OS for
  increased contrast, Anasa's receding chrome no longer overrides you at Focus
  and Blank - the two modes where it fades furthest and the setting matters most.
  Windows High Contrast now removes the fade entirely.
- **Energy changes are announced to screen readers.** Switching working mode
  rearranges the interface - chrome fades, panels collapse - with no spoken
  signal that anything happened. VoiceOver, Narrator and Orca now announce the
  new mode and what it is for.
- **A broken update source no longer masquerades as "no updates yet."** When an
  update check fails because the release host itself doesn't answer (deleted,
  renamed, blocked or offline), Anasa now says so - with a Retry - instead of
  showing the calm "no releases on this channel yet" notice that a genuinely
  quiet channel gets. The two states used to be indistinguishable, so a broken
  update pipeline could hide forever behind a reassuring message.
- **"Restart to Update" now reports install failures.** The staged update is
  installed before the restart, and only a successful install restarts the app.
  Previously the install ran during shutdown, where a failure could only be
  logged - the app would relaunch on the old version while looking like it had
  updated. On failure the update stays staged, so pressing the button again
  retries.
- **External changes are now detected in every vault, not just the default one.**
  The file watcher that picks up edits, new files and deletions made outside
  Anasa (another editor, sync, a script) was always pointed at the default notes
  location, so in any other vault external changes went unnoticed until a
  restart. The watcher now follows the vault you actually have open and
  re-points itself when you switch vaults.
- **The window appears immediately on launch.** The launch splash used to wait
  for the whole app to load before the window became visible - on a cold dev
  start that meant up to ~20 seconds of nothing at all. The window now shows its
  themed splash as soon as it has painted, and the app swaps in underneath when
  ready.
- **Vault sync: excluding a folder no longer deletes it everywhere.** Adding a
  folder to the sync exclusion list made this device report every file in it as
  locally deleted, which pushed real deletions and moved those files to the
  trash on every other device. Excluded paths are now simply untracked. **If you
  have ever used the exclusion list, check the other devices' trash before
  emptying it.**
- **Vault sync: a stalled feed can no longer freeze silently.** One remote change
  this device could not write (a filename illegal on this OS, a locked file, a
  corrupt blob) used to block every later change for the whole vault while sync
  still reported green. Anasa now skips past the offender, keeps converging, and
  reports what it skipped in the sync status.
- **Vault sync: recovering from "Reset vault sync" on another device.** A device
  that only observed someone else's reset used to sit on a stale history forever,
  reporting a clean sync while no longer converging - and could overwrite the new
  passphrase with its own old one. It now detects the reset, refuses to re-arm the
  server, and rebuilds its index once you enter the new passphrase. Reset remains
  a fleet-wide operation: every device has to be given the new passphrase.
- **Unsaved edits in source mode, `.mdx` files and the frontmatter panel.** Edits
  made in those three places never marked the tab dirty, so closing the editor
  before the autosave timer fired discarded them outright - with no
  unsaved-changes prompt and the old content still on disk. Teardown now commits
  the pending save instead of cancelling it.
- **Accent colours are readable again.** Several system accent colours produced
  unreadable text on accent-coloured buttons and badges. Contrast is now solved
  for directly, across all bundled themes.

### Changed

- **Your working mode now guards destructive actions and the AI's discretion.**
  Two behaviours follow your energy level down. Confirmation prompts you switched
  off in Settings → Safety come back at Quiet mode and below - mistakes are just
  as likely when you are tired, they take longer to notice. And a tool you told
  the AI it could always run without asking stops being automatic at Focus and
  Blank if it can destroy something: the agent still runs it, it just asks first.
  Nothing is taken away at any level; you are only put back in the loop where it
  costs most to be out of it. Both hold at Full and Balanced, where they agree
  with whatever you configured.
- **Anasa AI now runs on the Vercel AI Gateway.** The managed AI service (chat,
  summaries, tag suggestions, smart connections) routes every request through
  the Vercel AI Gateway, with DeepSeek V4 Flash (`deepseek/deepseek-v4-flash-0731`)
  as the main model - replacing the previous Azure OpenAI primary. Embeddings
  stay on `text-embedding-3-small`, so your existing Smart Connections vectors
  remain valid. BYOK setups are untouched (Azure OpenAI remains available as a
  bring-your-own-key provider), and installs still pointing at the retired
  undated `deepseek/deepseek-v4-flash` alias are migrated to the pinned
  snapshot automatically.
- **Dragging cards on the task board now shows you the result while you drag.**
  The lanes rearrange under the card as you move it, so the slot you are about
  to drop into is the slot you can see, instead of a preview that only resolves
  once you let go. A lane that has hit its work-in-progress limit refuses the
  card outright rather than accepting it and bouncing it back. The file tree's
  drop marker follows the pointer more precisely for the same reason.
- Interface polish pass from the pre-release audit: consistent dialog and popover
  layering, a unified small-label type step, and corrected keyboard shortcuts
  (weekly review moved to ⌘⌥W to stop colliding).

- **Dependency hygiene (internal).** `@solar-icons/react` was bumped to v2 in an
  earlier working-tree change but its ~692 icon imports still used v1 names, so
  the app only compiled against a stale `node_modules`; every import now uses v2's
  provider-aware set, which renders identically. React is pinned to one exact
  canary rather than the floating `canary` tag - a non-frozen install could
  otherwise resolve a newer canary mid-tree and leave two copies of React, the
  exact failure the pin exists to prevent. `@types/react` was deduplicated for the
  same reason, and 23 declared-but-unused dependencies were removed.
- anasa.md redesign, with the launch discount now computed on the server so the
  price you see is the price you are charged - the site previously advertised
  the discount from one switch while checkout applied it from another, so the
  two could disagree. Search-engine listings are priced from the same helper, and
  Cloud plans are now published as yearly subscriptions rather than one-time
  charges.
- anasa.md now serves a nonce-based Content-Security-Policy on every page, so the
  pages that show your licence key and session can no longer execute injected
  inline script.
- **anasa.md's ten languages are now findable.** Each language has its own
  address (`anasa.md/de/pricing`) with reciprocal `hreflang`, so search engines
  index all ten instead of only English - previously the language lived in a
  cookie, which has no URL. English keeps the addresses it already had, so every
  existing link, bookmark and in-app deep link resolves exactly as before. Clerk's
  sign-in, sign-up and profile screens are translated to match.
- **The macOS menu bar follows your language.** The native menus, tray and system
  dialogs are rebuilt in the selected language instead of staying English;
  keyboard shortcuts are unaffected.
- **Terms of Service: governing law is now stated.** Greek law, with the courts of
  Athens, and an explicit carve-out preserving EU consumers' mandatory local
  protections and their right to sue at home. The previous text carried a
  placeholder.
- Under the hood: the MCP server was updated for the rmcp 3.0 protocol changes and
  crash reporting for the sentry 0.49 API. Behaviour is unchanged - both were
  build-breaking dependency updates rather than features.

Full history: https://github.com/entro314-labs/anasa-releases/releases
