v1.16.1.0: rebump after queue-collision (PR #1233 took v1.16.0.0)

CI's "Check VERSION is not stale vs queue" job (job 73105686380) failed
with: "VERSION drift: PR #1234 claims v1.15.1.0 but the queue has moved —
next free slot is v1.16.1.0." PR #1233 (garrytan/browserharness) entered
the queue claiming v1.16.0.0 between when this branch's prior /ship ran
and when CI evaluated, so v1.15.1.0 is stale. Rebumping on top.

Files updated:
- VERSION                                                     1.15.1.0 → 1.16.1.0
- package.json                                                1.15.1.0 → 1.16.1.0
- CHANGELOG.md heading + Before/After columns                 1.15.1.0 → 1.16.1.0
- CHANGELOG removal target (consumers.json + config keys)     1.16.0.0 → 1.17.0.0
- gstack-upgrade/migrations/v1.15.1.0.sh                      → renamed v1.16.1.0.sh + log prefix
- bin/gstack-brain-consumer "DEPRECATED in" + "removal in"    1.15.1.0/1.16.0.0 → 1.16.1.0/1.17.0.0
- bin/gstack-brain-uninstall "since vX.Y.Z.W"                 1.15.1.0 → 1.16.1.0
- test/gstack-upgrade-migration-v1_15_1_0.test.ts             → renamed v1_16_1_0.test.ts

No behavior change. 26/26 wireup + migration tests still pass on the rename.
Full bun test suite: exit 0, 0 failures.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Garry Tan
2026-04-26 15:01:38 -07:00
parent 69a6060046
commit 28257b7bc8
7 changed files with 19 additions and 19 deletions
+5 -5
View File
@@ -1,6 +1,6 @@
# Changelog # Changelog
## [1.15.1.0] - 2026-04-26 ## [1.16.1.0] - 2026-04-26
## **Your gstack memory now actually lives in gbrain.** ## **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`. `/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`. `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. 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}`) | | `gbrain sources list` size | 1 (default `/data/brain`) | 2 (default + `gstack-brain-{user}`) |
| `consumers.json` status | `"pending"`, ingest_url `""` | file deleted from new installs | | `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 ### For contributors
- `bin/gstack-brain-consumer` is deprecated in this release; removal 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.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.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. - 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 ## [1.15.0.0] - 2026-04-26
+1 -1
View File
@@ -1 +1 @@
1.15.1.0 1.16.1.0
+2 -2
View File
@@ -1,10 +1,10 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# gstack-brain-consumer — manage the consumer (reader) registry. # 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 # endpoint that never shipped on the gbrain side. Live federation now uses
# `gbrain sources` directly via bin/gstack-gbrain-source-wireup. This file # `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 # 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 # session memory. v1 primary consumer is GBrain; later versions can register
+1 -1
View File
@@ -129,7 +129,7 @@ if [ -x "$WIREUP_BIN" ]; then
"$WIREUP_BIN" --uninstall 2>/dev/null || true "$WIREUP_BIN" --uninstall 2>/dev/null || true
fi 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 rm -f "$GSTACK_HOME/consumers.json" 2>/dev/null || true
# ---- clear config keys ---- # ---- clear config keys ----
@@ -1,7 +1,7 @@
#!/usr/bin/env bash #!/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 # `status: "pending"` and an empty `ingest_url`, expecting a gbrain HTTP
# /ingest-repo endpoint that never shipped. This migration runs the real # /ingest-repo endpoint that never shipped. This migration runs the real
# wireup (gbrain sources add + worktree + initial sync) for users who # wireup (gbrain sources add + worktree + initial sync) for users who
@@ -17,7 +17,7 @@
set -euo pipefail set -euo pipefail
if [ -z "${HOME:-}" ]; then 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 exit 0
fi fi
@@ -44,13 +44,13 @@ fi
# Skip if helper missing (defensive — should always be present post-upgrade). # Skip if helper missing (defensive — should always be present post-upgrade).
if [ ! -x "$WIREUP_BIN" ]; then 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 exit 0
fi 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. # No --strict: missing/old gbrain is a benign skip during a batch upgrade.
"$WIREUP_BIN" || { "$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
} }
+1 -1
View File
@@ -1,6 +1,6 @@
{ {
"name": "gstack", "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.", "description": "Garry's Stack — Claude Code skills + fast headless browser. One repo, one install, entire AI engineering workflow.",
"license": "MIT", "license": "MIT",
"type": "module", "type": "module",
@@ -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 * 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. * 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'; import { spawnSync } from 'child_process';
const ROOT = path.resolve(import.meta.dir, '..'); 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 tmpHome: string;
let fakeBinDir: string; let fakeBinDir: string;
@@ -85,7 +85,7 @@ afterEach(() => {
} catch {} } catch {}
}); });
describe('migrations/v1.15.1.0.sh', () => { describe('migrations/v1.16.1.0.sh', () => {
test('HOME unset: prints message + exit 0 (defensive)', () => { test('HOME unset: prints message + exit 0 (defensive)', () => {
// Override HOME to empty string. Bash's [ -z "${HOME:-}" ] guard should fire. // Override HOME to empty string. Bash's [ -z "${HOME:-}" ] guard should fire.
const r = run({ env: { HOME: '' } }); const r = run({ env: { HOME: '' } });