# Changelog All notable changes to solstone-linux are documented here. The format is based on Keep a Changelog (https://keepachangelog.com/), and this project adheres to Semantic Versioning. ## [Unreleased] ### Fixed - this is a security fix: setup now asks you to confirm your journal's mark, and nothing waiting on this computer goes to the journal until you confirm it's your journal. before, setup finished pairing first and only printed the mark, so anything waiting could go before you had checked it, even to a journal that wasn't yours. if setup can't ask you (run from a script, say), it now needs the mark's two words, shown in your journal's network app, with --mark. if you paired before this update, you won't be asked. - if a moment changes on its way into your journal, the changed files stay on this computer for another attempt. - a moment that's underway when you change time zones no longer lands under a mixed-up time. each new moment takes its day and time from your computer's time zone when it starts. - when the clocks go back an hour, intake keeps running through the repeated hour. before, it could stop. - on some linux setups, your time zone's name was missing from each moment. the solstone app now includes it. ## [2.0.10] - 2026-09-30 ### Added - the solstone app now includes your computer's time zone with each segment that goes into your journal. ### Fixed - an unfinished moment is kept if a new one would use the same folder. ## [2.0.9] - 2026-09-28 ### Fixed - security fix: when you paired this computer while your journal's private network was on, even over your own wifi, the solstone app sent your pairing link's one-time secret through the relay before checking it had reached your journal, so someone who could sit where the relay sits could have read the secret and used it to pair their own device. it now checks first that it's talking to your journal. please install this update before you pair again. if you paired this way, open your journal's network app and remove any device you don't recognize, including under "nothing added yet". ## [2.0.8] - 2026-09-25 ### Changed - the solstone app now removes a segment from this computer as soon as your journal confirms it has it, or that you removed it from your journal, instead of keeping it as long as your cache retention setting said (seven days unless you changed it), so that setting is gone. anything an earlier version kept goes on the first sync after this update, once your journal has confirmed it. the tray's count of today's segments is gone too. ### Fixed - if a second copy of the solstone app started under the same login, what the first copy was in the middle of could fail to reach your journal, and the first copy then stopped. a second copy now refuses to start and notes why in its log. - a segment the app couldn't finish is now set aside on this computer until you remove it. before, it was removed after 30 days. - a segment you had removed from your journal is now removed from this computer too, instead of being offered to your journal again every minute. - one segment too large to send no longer stops older segments from reaching your journal. ## [2.0.7] - 2026-09-24 ### Fixed - the solstone app no longer asks your journal every minute about what your journal already holds, and no longer rereads each file still on this computer to check it. - a correction to the 2.0.6 notes: they said a pairing link could point at any address you can reach your journal at. a pairing link that reaches your journal directly has to use an IPv4 address, private or public. a hostname or an IPv6 address isn't accepted there. ## [2.0.6] - 2026-09-23 ### Changed - a pairing link can now point at any address you can reach your journal at, not only one on your local network. pairing over the internet works the same way as pairing at home: the link still carries your journal's fingerprint, and this computer still checks it before trusting anything. ## [2.0.5] - 2026-09-18 ### Added - `setup` now shows your journal's mark once pairing succeeds, so you can check it matches what your journal shows. ## [2.0.4] - 2026-09-16 ### Added - `solstone-linux pause` and `solstone-linux resume` work from a terminal, so pause is reachable on a desktop with no panel icon at all. `pause` on its own lasts until you resume; `pause --minutes 30` ends on its own. - if something other than your journal answers where it's expected, you'll see it right away — with a way to compare what answered against your journal's own mark. ### Fixed - when this computer's saved pairing stops working, sync now shows "pair again" instead of staying offline. when your journal is only unreachable, sync still shows offline while the app keeps trying. - a picture, recording or video from your journal that stopped arriving partway could show or play as if it were complete, and stay that way for up to five minutes. it now fails to load, and opening it again fetches it again. ## [2.0.3] - 2026-09-15 ### Added - `solstone-linux panel-icon` sets up the GNOME panel icon — the tray icon, where pause and resume live. if the extension is not on your machine yet, GNOME asks you to confirm and turns it on in your current session. - while the panel icon is missing on GNOME, the solstone app offers to set it up, once per run. "don't ask again" stops it for good. - installing the rpm on a GNOME machine now brings the extension with it. log out and back in once, then run `solstone-linux panel-icon` to finish. ### Fixed - `doctor` reported the GNOME panel icon extension as working when it was installed but switched off, which is the state a fresh install leaves it in. it now reports installed, switched on, and showing separately. ## [2.0.2] - 2026-09-14 ### Fixed - hand-edited settings and other config entries now stay in config.json when you use the settings command or reconnect the app. - the tray now appears when the desktop starts after the solstone app, and returns after your desktop shell or system tray restarts. ## [2.0.1] - 2026-09-13 ### Added - "report a problem" in the tray now opens a support page with the app version, linux version, and current status filled in. ### Changed - release install instructions now start at `updates.solstone.app`, with the package and its verification files at the same sol pbc release origin. - the tray now uses the held-dash mark while intake is paused. ## [2.0.0] - 2026-09-10 ### Added - after pairing, your journal can receive this device's current name and app version, and the connection can pick up private network access when available. - `status` now shows the current or last known version of your paired journal and refreshes it after each reconnection. ### Changed - the tray now uses the solstone name, and its mark and status text show whether your journal is receiving, connecting, offline, or needs your attention. ### Fixed - on desktops with more than one microphone, audio could come from an unused input instead of the microphone you selected. it now comes from the active microphone. - when your journal returned an incomplete receipt, material held on this device could be cleared before every file was confirmed. it now stays until file names, sizes, and fingerprints match. - the solstone app now stays active while desktop intake finishes. stopping it no longer hangs during desktop or audio cleanup, and reinstalling no longer starts a second copy. - Open Journal now reaches the requested page, and media starts opening without waiting for the whole file to arrive. ## [1.0.2] - 2026-08-01 ### Fixed - the portable installer now names the sol version it installed instead of showing the Linux distribution version in its success message. ## [1.0.1] - 2026-08-01 ### Changed - pairing on Linux now starts from a pair link created in your journal. after upgrading, pair this machine again; the previous journal address and key are not carried over. - native tar, deb, and rpm packages are now the maintained Linux releases. older PyPI versions remain available for legacy installs but do not receive new releases. ### Fixed - on some Linux setups with USB audio, sound from the computer was missing from your journal. sol now uses the active output for system audio and keeps that sound in your journal. - sol now reaches your journal when your home network is out of reach instead of waiting on a local connection that will never answer. if the first connection at startup does not get through, it keeps trying without needing a restart. - a temporary refusal or an identity your journal no longer recognizes no longer leaves sol running with nothing arriving for the rest of the session. sol backs off and tries again, renewing its identity once when needed. a machine you removed from your journal stays removed. - status now reflects the current run. it no longer carries over an earlier connection or tells an unpaired owner to wait for a connection that cannot start. ## [0.4.5] - 2026-07-13 ### Fixed - local cleanup now recognizes segments your journal has already finished processing. when your journal takes a segment in and finishes with it, it no longer keeps the original file on hand. sol used to read that as the file having gone missing, so it re-sent the segment and never released its local copy. sol now takes it as done — after confirming the file name and fingerprint still match, so nothing leaves your machine unconfirmed. ## [0.4.4] - 2026-07-04 ### Fixed - stopping or restarting sol now shuts down promptly, even with an upload mid-retry. that upload used to wait out its full retry delay first; now it ends the moment you quit sol or the machine powers off. a bad retry setting in your config no longer leaves the uploader stuck, either. ## [0.4.3] - 2026-07-03 ### Changed - the app now calls itself sol everywhere you see it — the launcher, tray, menus, status, and notifications. your journal is the memory it keeps, and solstone is the platform underneath. the command you run stays `solstone-linux`; nothing about what it does changed, only what it's called. - segments your journal rejected or sol couldn't recover are now held for 30 days before they're removed, instead of being dropped silently. `status` and `doctor` show the count, so you can see when any are waiting. ### Fixed - local cleanup now deletes a synced segment only after your journal confirms, file by file, that it holds everything in it. previously a segment could be cleaned up while your journal was missing part of it. if your journal can't yet confirm file by file, cleanup holds off and keeps the local copy. - sol now recovers on its own from situations that used to leave it quietly stalled or stopped: the first screen-share dialog being dismissed, a journal that's slow to respond or offline, and speakers muted at startup (it goes on without audio and picks it back up when a device is available). an accidental second copy now declines to run rather than disturb the one already going. a round of smaller stability improvements rides along. - closing the lid on a docked KDE laptop no longer makes sol go idle. - chat notifications now come back on their own after a network drop, and dismissing a notification no longer counts as opening it. ## [0.4.2] - 2026-06-29 ### Added - this observer now sends your journal a small, diagnostics-only health note alongside its regular check-in, covering its name, version, how long it's been running, and whether syncing is keeping up. it carries none of what it experiences with you: no screen, audio, file paths, or titles. just enough for you to see at a glance that an observer is alive and in good health. ### Changed - this observer now carries the sol mark across your desktop, in the app launcher and menus. the tray status icons are unchanged. ### Fixed - installing solstone-linux now works cleanly on current debian and ubuntu. the earlier steps could fail while rebuilding the desktop graphics libraries from scratch; the updated install reuses the ones already on your system, so it goes through. ## [0.4.1] - 2026-06-17 ### Added - you can now check which version you're running. `solstone-linux --version` prints it, so when you're following along with the release notes or asking for help, you know exactly what you have. ## [0.4.0] - 2026-06-17 ### Added - a new `solstone-linux settings` command lets you adjust how this observer behaves after setup, from one place instead of hand-editing a config file. you can change how often it makes a segment, the framerate, whether it starts paused, the chat bridge, and how long it keeps local cache. setup itself stays prompt-free; your identity and pairing are left untouched. ### Changed - this observer's settings now live under `~/.config/solstone-linux/`, where linux tools expect config to be. if you're upgrading, the move happens on its own the first time you run, with nothing to redo: no re-setup, no re-pairing. your segments stay exactly where they are. ## [0.3.3] - 2026-06-16 ### Fixed - the tray status submenu now refreshes its values every time you open it. the segment countdown, cache size, captures today, uptime, and sync line had been showing stale values on reopen on some desktops; they now reflect the current state each time you open the menu. ## [0.3.2] - 2026-06-16 ### Changed - the tray status now tells the truth about sync. it shows "connected" only when this observer has genuinely reached your journal with nothing left to send, and clearly says when it's offline, needs updating, or needs to re-authorize, instead of looking fine while quietly falling behind. the same honest status carries across the tray, `status`, and `doctor`. ### Fixed - setup no longer asks for a journal url under any path. if you ran into a lingering "journal url" prompt during setup, that's gone — setup connects to your local journal automatically, and `solstone-linux setup --server-url ` still points at a journal you reach directly. ## [0.3.1] - 2026-06-15 ### Changed - chat notifications now use the journal's current callosum connection path, with the observer key still sent in the authorization header. ## [0.3.0] - 2026-06-14 setup is now zero-config: the observer connects to your journal automatically, with no url to type. ### Changed - setup no longer asks for a journal url. if your journal runs on another machine you reach directly, set its address with `solstone-linux setup --server-url `. ## [0.2.0] - 2026-06-13 setup is now hands-off: the first time the observer runs, it connects itself to your journal automatically, with no separate key step. ### Changed - **first run sets itself up.** earlier versions asked you to create and paste a key to connect the observer to your journal. now the observer introduces itself to your journal on first run and remembers the connection on its own. you go straight from install to observing, with no manual key step. ## [0.1.1] - 2026-06-02 A focused maintenance release: two reliability fixes and a round of install-instruction corrections from fresh-machine testing on Fedora, Debian, and openSUSE. ### Fixed - **Idle monitors no longer silently drop observations.** When a monitor produced no frames during a segment (a static screen with nothing changing on it), GStreamer still wrote a header-only WebM file. Those empty files were finalized, uploaded, and then failed to process in your journal — so that monitor's segment was lost without any signal. The observer now drops these empty recordings at the source and emits an `observe.stream_silent` event (logged at WARNING) so the gap is visible instead of silent. - **Install no longer clobbers your system icon theme.** On GNOME, `install-service` was writing a stray `index.theme` into the shared hicolor icon directory, which shadowed the system index and caused unrelated app icons to render as the solstone diamond. The installer now drops only the solstone status icons (the system index already declares their directory) and self-heals any previously broken install on the next `install-service` run. A foreign or unreadable `index.theme` is left untouched. ### Documentation - Corrected the Fedora and Debian system-dependency lines after fresh-box install testing: dropped packages that do not exist in their repos (`gstreamer1-plugin-pipewire` on Fedora, `gir1.2-gdk-4.0` on Debian) and hoisted the cairo / pycairo build toolchain onto the main install line so a fresh install succeeds in one shot. Added `gstreamer1.0-tools` to the Debian line — `gst-launch-1.0` is required for screen recording and is not pulled in transitively. - Added a verified openSUSE dependency block and mirrored the corrected dependency lists between `README.md` and `INSTALL.md`. - Updated the install path to lead with `pipx install solstone-linux`, then `solstone-linux install-service`, then `solstone-linux setup`. ### Internal - The release script now tags the commit and cuts a GitHub release only on a production PyPI run; a TestPyPI run no longer leaves a tag or public release behind. ## [0.1.0] - 2026-05-19 First public release of solstone-linux — the Linux desktop observer for your solstone journal. solstone-linux runs as a systemd user service in your GNOME Wayland session. It experiences screen and audio along with you, holds short segments locally, and uploads them to your journal in the background. ### Install paths - From PyPI: `pipx install --system-site-packages solstone-linux`, then `solstone-linux install-service` to register the systemd unit. - From a clone: `git clone` this repo and run `make install-service` for development or unreleased changes. Both paths rely on host packages for PyGObject, GStreamer with the PipeWire plugin, PipeWire itself, `pactl`, and `xdg-desktop-portal` with ScreenCast support. PyGObject and the GStreamer bindings ride along from system site-packages — that is why `--system-site-packages` matters.