diff --git a/CHANGELOG.md b/CHANGELOG.md index 934e7315..82e85b03 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,6 @@ # Changelog -## [1.15.1.0] - 2026-04-26 +## [1.16.1.0] - 2026-04-26 ## **Your gstack memory now actually lives in gbrain.** @@ -27,7 +27,7 @@ The helper locks the database URL at startup (precedence: `--database-url` flag `/setup-gbrain` Step 7 now invokes the helper with `--strict` after `gstack-brain-init`. `/gstack-upgrade` invokes the helper without `--strict` via `gstack-upgrade/migrations/v1.12.3.0.sh` so missing/old gbrain is a benign skip during batch upgrade. `bin/gstack-brain-restore` invokes the helper after the initial clone so a 2nd Mac gets the wireup automatically. `bin/gstack-brain-uninstall` invokes `--uninstall` plus removes legacy `consumers.json`. -`bin/gstack-brain-init` drops 60 lines of dead consumer-registration code (the HTTP POST block, the `consumers.json` writer, the chore commit). `bin/gstack-brain-restore` drops the 18-line `consumers.json` token-rehydration block (the only consumer that used it never had real tokens). `bin/gstack-brain-consumer` is marked deprecated in its header docstring; removal in v1.16.0.0 after one cycle of grace. +`bin/gstack-brain-init` drops 60 lines of dead consumer-registration code (the HTTP POST block, the `consumers.json` writer, the chore commit). `bin/gstack-brain-restore` drops the 18-line `consumers.json` token-rehydration block (the only consumer that used it never had real tokens). `bin/gstack-brain-consumer` is marked deprecated in its header docstring; removal in v1.17.0.0 after one cycle of grace. `test/gstack-gbrain-source-wireup.test.ts` is new: 13 unit tests with a fake `gbrain` binary on `$PATH` covering fresh-state registration, idempotent re-runs, drift recovery (gbrain has no `sources update`, only `remove + add`), `--strict` failure modes, source-id fallback chain (`.git` → remote-file → flag), `--probe` non-mutation, sync errors, and `--uninstall`. @@ -35,7 +35,7 @@ The helper locks the database URL at startup (precedence: `--database-url` flag These are reproducible on any machine after upgrade. Run the verify commands above to see your own delta. -| Metric | Before (v1.15.0.0) | After (v1.15.1.0) | +| Metric | Before (v1.16.0.0) | After (v1.16.1.0) | |---|---|---| | `gbrain sources list` size | 1 (default `/data/brain`) | 2 (default + `gstack-brain-{user}`) | | `consumers.json` status | `"pending"`, ingest_url `""` | file deleted from new installs | @@ -51,8 +51,8 @@ Your gstack memory is searchable now. Run a CEO plan review or office-hours sess ### For contributors -- `bin/gstack-brain-consumer` is deprecated in this release; removal in v1.16.0.0. -- The `gbrain_url` and `gbrain_token` config keys are now no-ops. They remain readable for one cycle for back-compat, removed in v1.16.0.0. +- `bin/gstack-brain-consumer` is deprecated in this release; removal in v1.17.0.0. +- The `gbrain_url` and `gbrain_token` config keys are now no-ops. They remain readable for one cycle for back-compat, removed in v1.17.0.0. - Three pre-existing test failures on this branch (`gstack-config gbrain keys > GSTACK_HOME overrides real config dir`, `no compiled binaries in git > git tracks no files larger than 2MB`, `Opus 4.7 overlay — pacing directive`) were verified to fail on the base branch too. Out of scope for this PR; flagged for a follow-up. ## [1.15.0.0] - 2026-04-26 diff --git a/VERSION b/VERSION index aca65add..6f8d0338 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.15.1.0 +1.16.1.0 diff --git a/bin/gstack-brain-consumer b/bin/gstack-brain-consumer index d02f3af0..4f9ca673 100755 --- a/bin/gstack-brain-consumer +++ b/bin/gstack-brain-consumer @@ -1,10 +1,10 @@ #!/usr/bin/env bash # gstack-brain-consumer — manage the consumer (reader) registry. # -# DEPRECATED in v1.15.1.0. This binary targets a gbrain HTTP /ingest-repo +# DEPRECATED in v1.16.1.0. This binary targets a gbrain HTTP /ingest-repo # endpoint that never shipped on the gbrain side. Live federation now uses # `gbrain sources` directly via bin/gstack-gbrain-source-wireup. This file -# stays for one cycle to avoid breaking external scripts; removal in v1.16.0.0. +# stays for one cycle to avoid breaking external scripts; removal in v1.17.0.0. # # Consumer = a reader that ingests the gstack-brain git repo as a source of # session memory. v1 primary consumer is GBrain; later versions can register diff --git a/bin/gstack-brain-uninstall b/bin/gstack-brain-uninstall index 135511e3..c316914c 100755 --- a/bin/gstack-brain-uninstall +++ b/bin/gstack-brain-uninstall @@ -129,7 +129,7 @@ if [ -x "$WIREUP_BIN" ]; then "$WIREUP_BIN" --uninstall 2>/dev/null || true fi -# ---- legacy consumers.json (no longer written by gstack-brain-init since v1.15.1.0) ---- +# ---- legacy consumers.json (no longer written by gstack-brain-init since v1.16.1.0) ---- rm -f "$GSTACK_HOME/consumers.json" 2>/dev/null || true # ---- clear config keys ---- diff --git a/gstack-upgrade/migrations/v1.15.1.0.sh b/gstack-upgrade/migrations/v1.16.1.0.sh similarity index 82% rename from gstack-upgrade/migrations/v1.15.1.0.sh rename to gstack-upgrade/migrations/v1.16.1.0.sh index 6ac6ec88..c780b6f9 100755 --- a/gstack-upgrade/migrations/v1.15.1.0.sh +++ b/gstack-upgrade/migrations/v1.16.1.0.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash -# Migration: v1.15.1.0 — Wire existing brain-sync repos as gbrain federated sources +# Migration: v1.16.1.0 — Wire existing brain-sync repos as gbrain federated sources # -# Pre-1.15.1.0 /setup-gbrain wrote ~/.gstack/consumers.json with a placeholder +# Pre-1.16.1.0 /setup-gbrain wrote ~/.gstack/consumers.json with a placeholder # `status: "pending"` and an empty `ingest_url`, expecting a gbrain HTTP # /ingest-repo endpoint that never shipped. This migration runs the real # wireup (gbrain sources add + worktree + initial sync) for users who @@ -17,7 +17,7 @@ set -euo pipefail if [ -z "${HOME:-}" ]; then - echo " [v1.15.1.0] HOME is unset or empty — skipping migration." >&2 + echo " [v1.16.1.0] HOME is unset or empty — skipping migration." >&2 exit 0 fi @@ -44,13 +44,13 @@ fi # Skip if helper missing (defensive — should always be present post-upgrade). if [ ! -x "$WIREUP_BIN" ]; then - echo " [v1.15.1.0] $WIREUP_BIN missing or non-executable — skipping wireup." >&2 + echo " [v1.16.1.0] $WIREUP_BIN missing or non-executable — skipping wireup." >&2 exit 0 fi -echo " [v1.15.1.0] Wiring brain-sync repo into gbrain (federated source + initial sync)..." +echo " [v1.16.1.0] Wiring brain-sync repo into gbrain (federated source + initial sync)..." # No --strict: missing/old gbrain is a benign skip during a batch upgrade. "$WIREUP_BIN" || { - echo " [v1.15.1.0] Wireup exited non-zero — re-run manually with: $WIREUP_BIN" >&2 + echo " [v1.16.1.0] Wireup exited non-zero — re-run manually with: $WIREUP_BIN" >&2 } diff --git a/package.json b/package.json index 221de999..30a74feb 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "gstack", - "version": "1.15.1.0", + "version": "1.16.1.0", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.", "license": "MIT", "type": "module", diff --git a/test/gstack-upgrade-migration-v1_15_1_0.test.ts b/test/gstack-upgrade-migration-v1_16_1_0.test.ts similarity index 97% rename from test/gstack-upgrade-migration-v1_15_1_0.test.ts rename to test/gstack-upgrade-migration-v1_16_1_0.test.ts index a09ce7b5..edf9e118 100644 --- a/test/gstack-upgrade-migration-v1_15_1_0.test.ts +++ b/test/gstack-upgrade-migration-v1_16_1_0.test.ts @@ -1,5 +1,5 @@ /** - * gstack-upgrade/migrations/v1.15.1.0.sh — migration script unit tests. + * gstack-upgrade/migrations/v1.16.1.0.sh — migration script unit tests. * * The migration runs on /gstack-upgrade for users with brain-sync configured but * never wired up to gbrain. It has 4 skip conditions and one happy path. @@ -16,7 +16,7 @@ import * as path from 'path'; import { spawnSync } from 'child_process'; const ROOT = path.resolve(import.meta.dir, '..'); -const MIGRATION = path.join(ROOT, 'gstack-upgrade', 'migrations', 'v1.15.1.0.sh'); +const MIGRATION = path.join(ROOT, 'gstack-upgrade', 'migrations', 'v1.16.1.0.sh'); let tmpHome: string; let fakeBinDir: string; @@ -85,7 +85,7 @@ afterEach(() => { } catch {} }); -describe('migrations/v1.15.1.0.sh', () => { +describe('migrations/v1.16.1.0.sh', () => { test('HOME unset: prints message + exit 0 (defensive)', () => { // Override HOME to empty string. Bash's [ -z "${HOME:-}" ] guard should fire. const r = run({ env: { HOME: '' } });