Skip to content

git-strata v0.1.2

Choose a tag to compare

@github-actions github-actions released this 03 Nov 01:29
· 77 commits to main since this release

git-strata 0.1.2 — main-sync

Upgrade first: read this before installing

Store migration v3 → v5 (irreversible). The first 0.1.2 daemon start migrates
<root>/store/store.db from schema v3 to v5. Before migrating it writes a verified
copy to <root>/store/backups/store-v3-<ns>.db and logs
git-strata: store schema migrated 3 -> 5; a copy of the v3 store is at … to stderr
(daemon.err.log under the LaunchAgent). 0.1.1 refuses a v5 store (Corrupt,
user_version), and refuses config.toml [repo.<name>.sync] tables and pins.json entries
containing sync_deps. There is no downgrade path other than restoring the backup, which
loses everything recorded after it. If a process still holds the old store's WAL the
migration refuses with Busy (migration_backup) and changes nothing; stop that reader and
start again.

Stores already at v5 from an unreleased main build (between the main-sync merge and this
release) are refused at open (Corrupt, "schema differs"): the v5 guard text changed before
release. Restore that store's store-v3-<ns>.db backup and let 0.1.2 migrate it again.
Stores from 0.1.0/0.1.1 (v3) are not affected.

Upgrade order:

  1. git-strata daemon stop (wait for it; nothing publishing: daemon status holders []).
  2. Back up store/store.db*, config.toml, pins.json and the LaunchAgent plist.
  3. Upgrade the CLI and daemon together, and the desktop app:
    brew upgrade dickwu/tap/git-strata && brew upgrade --cask dickwu/tap/git-strata-desktop.
  4. Add [repo.<name>.sync] tables to config.toml (below) — before the first start.
  5. git-strata daemon start, then check daemon status and git-strata ls.

Never brew services start git-strata alongside your LaunchAgent (two daemons, one socket).

New: main-sync

Sessions can now keep up with origin/<default_branch>:

  • Following main. The daemon fetches periodically (staging ref, compare-and-swap) and moves
    idle sessions onto the new main tree with the same safety rules as auto-rebase after publish
    (no open files, quiet period, conflict-free projection; otherwise deferred, never forced).
  • git-strata sync. --check reports local upstream state; --repo R fetches and moves now;
    conflicts produce a saved report resolved with --resolved/--keep PATH --target T --generation G;
    legacy workspace conflicts can be acknowledged without a binding; --check --hook is a
    cache-only Stop hook for agents.
  • Dependency rollouts. When main changes install inputs, the new dependency set is applied
    automatically (deps = "apply") or waits for git-strata deps approve (deps = "confirm").
    deps list shows each proposal's effective mode and a package-change summary
    (credentials in URLs are redacted).
  • Status / GUI / tray. status carries an upstream object per repo (behind/ahead,
    following, state, fix); the desktop app and tray show it, and only confirm-mode proposals
    appear as waiting for a human.

New config: [repo.<name>.sync]

[repo.web.sync]
follow_main = true   # default: publish.branch == default_branch; split-branch repos cannot enable it
deps = "apply"       # default "apply"; "confirm" keeps human approval of dependency rollouts
fetch_secs = 900     # default 900; 0 disables periodic fetch; otherwise 60..=86400

follow_main = false on a non-split repo requires deps = "confirm" (V16). deps is pinned
in pins.json as sync_deps: an existing pin adopts the configured value at the first 0.1.2
start; afterwards apply → confirm takes effect at the next start, while confirm → apply
needs git-strata config relax REPO (TTY + Touch ID). Without a table every non-split repo
follows main with deps = "apply", so existing Pending proposals can auto-apply on the first
start
. For exactly the 0.1.1 behaviour, add follow_main = false and deps = "confirm" for
each repo before starting.

Rollback

Stop the daemon; move store/store.db and its -wal/-shm/-tshm aside (keep them); copy
store/backups/store-v3-<ns>.db (or your own copy) to store/store.db; reinstall the 0.1.1 CLI
and daemon together; remove the [repo.*.sync] tables and each pin's sync_deps; start.
See docs/config.md and docs/modules/store.md.


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 app

If 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.1...v0.1.2