Repository navigation
git-strata v0.2.0
git-strata 0.2.0 — r2
Upgrade first: read this before installing
Store migration v5 → v6 (irreversible). The first 0.2.0 daemon start migrates
<root>/store/store.db to schema v6 and prints the verified pre-migration backup path
(store/backups/store-v5-<ns>.db). The 0.1.2 CLI is unusable on a v6 store: upgrade the
CLI, daemon and hook callers together. Downgrade procedure: see "R2 core" below.
Upgrade order:
- Check nothing is publishing (
git-strata status,daemon statusholders[]). - Back up
store/store.db*, config.toml, pins.json and the LaunchAgent plist. - Make any config.toml edits now (none are required for 0.2.0), then upgrade together:
brew upgrade dickwu/tap/git-strata && brew upgrade --cask dickwu/tap/git-strata-desktop. - Restart the LaunchAgent daemon (
launchctl kickstart -k gui/$(id -u)/com.gwd.git-stratad),
then checkdaemon statusandgit-strata ls. npx skills update git-strata -g.
Never brew services start git-strata alongside your LaunchAgent (two daemons, one socket).
Config hot reload
git-strata config reload applies config.toml edits without a daemon restart (hot-added
repos, loosening via config relax); restart-only fields still need a restart. Exit codes,
rejection reasons and the invariant table: config.md.
The desktop app shows reload / relax state.
R2 core
- Publish accepts repeated
-mand per-repo--message-for. Without flags, manual
checkpoint messages supply subjects; tool-call IDs do not. No-change manual
checkpoints still record no new message. Commits carry recovery trailers.
Preview and execution exclude messages consumed by crash-recovered commits,
even when startup left the publish outcome empty. new --baseparks selected workspaces at local commits at/ahead of main.
Publish refuses withInvalidInput base_not_on_mainwhen the workspace base
is on neither the publish target nor main. Existing rewound-chain sessions
that used to publish while silently dropping base-only commits are now
refused until the human lands or recovers those commits.
Dependency approval cannot silently drop their commits. Publish lines are
excluded from this release.- Automatic moves ignore dependency/cache writes only where content is not
carried. Nested seed caches and tracked files remain protected. Eligible
stuck rows name holders and hand control back once through the Stop hook. - Pin timestamps are in a separate audit sidecar; warnings gain timestamps
without changing their existing wire representation. - Successful non-discard rm reports its landed verdict in upstream metadata.
Store schema v6 is forward-only. The 0.1.2 CLI is unusable on a v6 store.
Upgrade the CLI and daemon together. Commands that open the store directly
include add, restore, diff, deps propose, rm, resolve, assign,
publish, devports (session ports / session exec), checkpoint (including
the PostToolUse checkpoint hook), grep, and files. An old checkpoint hook
fails on every tool call after the migration. A few RPC-only commands still
answer, which does not make a mixed installation supported.
A 0.1.2 Stop hook can consume the daemon's stuck-episode latch while ignoring
the new hand-back field, so that episode's hand-back is lost; the
AutoRebaseStuck warning remains. Upgrade hook callers together with the CLI.
The latch is in memory, so a daemon restart can repeat a hand-back for a
still-stuck episode.
Startup prints the verified pre-migration backup path. To downgrade from v6
to the v5 store used by 0.1.2, the human must:
- Stop the daemon and ensure it has stopped.
- Move
store/store.dband its-wal,-shm, and-tshmsidecars aside and
keep them together for recovery. - Copy the verified
store/backups/store-v5-<ns>.dbbackup into
store/store.db. If upgrading directly from an earlier schema, restore
the actualstore-v<from>-<ns>.dbbackup compatible with the old binaries. - Install the matching old CLI and daemon together. Remove
rebase.quiet_skip
fromconfig.toml; 0.1.2 cannot parse it. Downgrades further back must also
follow the older config/pin cleanup in store recovery. - Start the matching old daemon only after restoring the store and config.
Restoring the backup loses store metadata recorded since migration, including
later session and checkpoint records. Session directories may remain on disk;
preserve and reconcile them before further work. Git commits and refs remain.
The backup is a rollback, not a way to merge newer metadata into an older store.
Refresh the installed skill with npx skills update git-strata -g so baseline
and human hand-off guidance match the upgraded binary.
Menu-bar state and freshness
The menu-bar icon now combines a neutral workspace fork with a distinct colored shape:
red slash (Down), red triangle (Alert), dim ellipsis (Checking), amber dot (Waiting),
violet diamond (Conflict), teal ring (Syncing), or the neutral glyph (Normal). There is
no animation or count beside the icon. Colors adapt to the drawing appearance independently
of the app theme; inactive-display dimming is intentionally not retained.
- The native poller continues while the window is hidden or visible. Stale/missing inputs
show Checking; slow session/dependency reads do not imply the daemon is down. - NotResponding requires two counted health timeouts and 20 seconds since its last Ok.
File-handle shed replies now reach the client as Busy/too_many_open_files, not rpc_id. - Home and the tray show long non-conflict deferrals and pending config relax requests.
Conflicts are counted separately as agent work. Daemon shows warning variant names. - To clear a persistent red warning, address its cause, then restart the daemon. Waiting
items remain available, with age captions when retained data is stale. No acknowledge/snooze. - On older daemons without
fds, hidden polling uses only one health read every 30 seconds.
A hung daemon can take about 45 seconds to show Down ("isn't responding"),
compared with about 25 seconds on the normal cadence; polling phase can change the delay.
Deps age out after 90 seconds and the icon becomes Checking until reopening or upgrading.
The pre-fd-fix build still leaks roughly two descriptors per minute under this gentle plan;
upgrade the daemon to remove that limitation. - Missing session-level upstream detail can keep Checking indefinitely; Home lists those
sessions without guessing the cause. Existing daemon RPC params/features remain compatible.
Automated tests and offline color/grayscale previews cover the implementation. Live replicas,
VoiceOver, menu highlight and the 30-minute hidden-window test remain manual acceptance gaps;
this note does not claim those checks or a published release.
Apple silicon (arm64), macOS 13+. Signing: adhoc (see docs/release.md).
brew install dickwu/tap/git-strata # CLI + daemon
brew install --cask dickwu/tap/git-strata-desktop # desktop appIf macOS blocks the app: System Settings > Privacy & Security > Open Anyway, or
sudo xattr -dr com.apple.quarantine "/Applications/GIT STRATA.app".
Full Changelog: v0.1.2...v0.2.0