Skip to content

Commit 0668f92

Browse files
garrytanclaude
andcommitted
feat(gbrain): /setup-gbrain Step 1.5/4.5 + /sync-gbrain Step 1.5 templates
Per plan D4, D10, D11, D12. Wires the skill prose to the new split-engine flow + classifier introduced in earlier commits. setup-gbrain/SKILL.md.tmpl: - Step 1: detect output description now includes the v1.34.0.0 gbrain_local_status field (5 values). - Step 1.5 (NEW): broken-db / broken-config remediation. AskUserQuestion with 4 options — Retry / Switch to PGLite / Switch brain mode / Quit (plan D4). Retry is recommended first since broken-db often = transient Postgres outage. PGLite is explicitly one-way + destructive (moves existing config to ~/.gbrain/config.json.gstack-bak-<ts>); rollback on init failure restores the .bak (plan D7). - Step 4d → Step 4.5 (NEW): in Path 4, after the verify step, offer local PGLite for code search. AskUserQuestion Yes/No (plan D10/D11). Yes path runs gstack-gbrain-install + `gbrain init --pglite --json` with the same rollback-safe sequence. No path skips Steps 3/4/5/7.5. - Step 10 verdict (Path 4): adds "Code search" row reflecting Step 4.5 choice. Updates "Transcripts" row to describe the new D11 routing (artifacts repo → remote brain). sync-gbrain/SKILL.md.tmpl: - Step 1 split-engine prose: corrects the prior misleading claim that "memory routes through whatever setup-gbrain configured, including remote-MCP" (codex finding #3). Memory stage shells out to local `gbrain import` in local-stdio mode; in remote-http mode it persists to ~/.gstack/transcripts/ for the artifacts pipeline. - Step 1.5 (NEW): local-engine pre-flight. STOP on no-cli, broken-config, broken-db. Soft skip (continue with code+memory SKIP) on missing-config + remote-http per plan D12. Surfaces actionable user remediation message instead of the orchestrator crashing two stages with ERR. Regenerated SKILL.md for all hosts (claude, kiro, opencode, slate, cursor, openclaw, hermes, gbrain). All 712 skill-validation + gen-skill-docs tests pass. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent dc51fa9 commit 0668f92

4 files changed

Lines changed: 382 additions & 60 deletions

File tree

setup-gbrain/SKILL.md

Lines changed: 139 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -785,8 +785,10 @@ implemented as a dispatcher binary.
785785
```
786786

787787
Capture the JSON output. It contains: `gbrain_on_path`, `gbrain_version`,
788-
`gbrain_config_exists`, `gbrain_engine`, `gbrain_doctor_ok`,
789-
`gstack_brain_sync_mode`, `gstack_brain_git`.
788+
`gbrain_config_exists`, `gbrain_engine`, `gbrain_doctor_ok`, `gbrain_mcp_mode`,
789+
`gstack_brain_sync_mode`, `gstack_brain_git`, `gstack_artifacts_remote`, and
790+
the v1.34.0.0+ `gbrain_local_status` field (one of: `ok`, `no-cli`,
791+
`missing-config`, `broken-config`, `broken-db`).
790792

791793
Skip downstream steps that are already done. Report the detected state in
792794
one line so the user knows what you found:
@@ -799,6 +801,75 @@ invocation flags here and skip to the matching step.
799801

800802
---
801803

804+
## Step 1.5: Broken-local-engine remediation (plan D4)
805+
806+
Read `gbrain_local_status` from the Step 1 detect output. **If it's `broken-db`
807+
or `broken-config` AND no shortcut flag was passed**, the user has a
808+
non-working local engine (Garry's repro: `~/.gbrain/config.json` points at a
809+
dead Postgres URL). Fire a targeted AskUserQuestion BEFORE Step 2:
810+
811+
> D# — Your local gbrain engine isn't responding. How do you want to fix it?
812+
> Project/branch/task: <one-sentence grounding using detected slug + branch>
813+
> ELI10: gbrain has a config at `~/.gbrain/config.json` but the engine it points
814+
> at isn't reachable. That could be a transient outage (Postgres container
815+
> stopped, Tailscale down) OR a stale config you want to abandon. Different
816+
> remediation for each case.
817+
> Stakes if we pick wrong: "Switch to PGLite" overwrites your existing config
818+
> (one-way door if the user actually wanted the broken engine). "Retry" preserves
819+
> existing state for transient cases.
820+
> Recommendation: A (Retry) — always try the cheap option first; if engine is
821+
> just temporarily down it'll come back without any destructive change.
822+
> Note: options differ in kind, not coverage — no completeness score.
823+
> A) Retry — re-probe the engine (recommended; ~80ms)
824+
> ✅ Cheapest test: re-runs `gbrain sources list` to see if engine is back
825+
> ✅ Zero side effects; existing config preserved
826+
> ❌ If engine is permanently dead, retries forever; user must choose another option
827+
> B) Switch to local PGLite (one-way — moves existing config to .bak)
828+
> ✅ Fastest path to a working local engine if user has abandoned the old one
829+
> ~30s; no accounts; private to this machine
830+
> ❌ Destructive — existing config moved to ~/.gbrain/config.json.gstack-bak-{ts}
831+
> C) Switch brain mode (continue to Step 2 path picker)
832+
> ✅ Lets user pick Path 1/2/3/4 to re-init from scratch
833+
> ✅ Preserves existing config until they explicitly init the new one
834+
> ❌ Longer flow if user just wants to repair to PGLite
835+
> D) Quit (do nothing)
836+
> ✅ No cons — this is a hard-stop choice
837+
> ❌ N/A
838+
> Net: A is the right starting move; B/C are explicit destructive paths; D bails.
839+
840+
**If A (Retry)**: re-run `~/.claude/skills/gstack/bin/gstack-gbrain-detect`
841+
with `GSTACK_DETECT_NO_CACHE=1` (busts the 60s cache). If the new
842+
`gbrain_local_status` is `ok`, continue to Step 2. If still `broken-db` or
843+
`broken-config`, fire the same AskUserQuestion again (the user picks again).
844+
845+
**If B (Switch to PGLite)** — execute the rollback-safe init sequence (plan D7):
846+
847+
```bash
848+
BACKUP="$HOME/.gbrain/config.json.gstack-bak-$(date +%s)"
849+
mv "$HOME/.gbrain/config.json" "$BACKUP"
850+
if ! gbrain init --pglite --json; then
851+
# Restore on failure
852+
mv "$BACKUP" "$HOME/.gbrain/config.json"
853+
echo "gbrain init failed. Your previous config was restored at $HOME/.gbrain/config.json." >&2
854+
echo "PGLite directory at ~/.gbrain/pglite/ may be in a partial state — \`rm -rf ~/.gbrain/pglite\` if needed before retrying." >&2
855+
exit 1
856+
fi
857+
echo "Switched to local PGLite. Previous config saved at $BACKUP — review before deleting."
858+
```
859+
860+
Then jump to Step 5a (MCP registration; the new PGLite engine is registered as
861+
local-stdio).
862+
863+
**If C (Switch brain mode)**: continue to Step 2's normal path picker.
864+
865+
**If D (Quit)**: STOP the skill cleanly.
866+
867+
For `gbrain_local_status` values of `no-cli` or `missing-config`, do NOT fire
868+
Step 1.5 — fall through to Step 2 (where `no-cli` triggers Step 3 install and
869+
`missing-config` triggers Step 4 init).
870+
871+
---
872+
802873
## Step 2: Pick a path (AskUserQuestion)
803874

804875
Only fire this if Step 1 shows no existing working config AND no shortcut
@@ -1034,11 +1105,60 @@ Capture two values from the verify output for downstream steps:
10341105
- `URL_FORM_SUPPORTED` (`true|false`) — passed to `gstack-artifacts-init` in
10351106
Step 7 to control which form of the brain-admin hookup command is printed.
10361107

1037-
**4d. Skip Steps 3, 4 (other paths), 5 (local doctor), 7.5 (transcript ingest).**
1038-
All four require a working local `gbrain` CLI that Path 4 does not install.
1039-
The skill jumps straight to Step 5a (HTTP+bearer registration) → Step 6
1040-
(per-remote policy) → Step 7 (artifacts repo) → Step 8 (CLAUDE.md) → Step 9
1041-
(remote smoke test) → Step 10 (verdict).
1108+
**4d. (Path 4) Offer local PGLite for code search.** Per plan D10/D11, ask:
1109+
1110+
> D# — Want symbol-aware code search on this machine?
1111+
> Project/branch/task: <one-sentence grounding using detected slug + branch>
1112+
> ELI10: The remote brain at `<MCP_URL>` is great for cross-machine knowledge,
1113+
> but symbol queries like `gbrain code-def` / `code-refs` / `code-callers` need
1114+
> a local index of THIS machine's code. We can spin up a tiny isolated PGLite
1115+
> database (~30 seconds, no accounts, ~120 MB disk) just for code, separate
1116+
> from your remote brain. Transcripts and artifacts continue routing through
1117+
> the artifacts repo to the remote brain — local PGLite stays code-only.
1118+
> Stakes: without it, semantic code search in this repo's worktrees falls
1119+
> back to Grep.
1120+
> Recommendation: A — 30 seconds, no ongoing cost, unlocks the symbol tools.
1121+
> Completeness: A=10/10 (full split-engine), B=7/10 (remote-only).
1122+
> A) Yes, set up local PGLite for code (recommended)
1123+
> ✅ Unlocks `gbrain code-def`, `code-refs`, `code-callers` per worktree
1124+
> ✅ Independent engine — won't disturb remote brain or share transcripts
1125+
> B) No, remote MCP only
1126+
> ✅ Zero local state — only `~/.claude.json` MCP registration
1127+
> ❌ Symbol code queries fall back to Grep in this repo's worktrees
1128+
> Net: A = full split-engine; B = remote-only.
1129+
1130+
**If A (Yes)**: install + init local PGLite with rollback-safe semantics (D7):
1131+
1132+
```bash
1133+
~/.claude/skills/gstack/bin/gstack-gbrain-install || exit $?
1134+
# At this point the local gbrain CLI is on PATH. Init PGLite, but back up any
1135+
# existing ~/.gbrain/config.json first (rollback if init fails).
1136+
if [ -f "$HOME/.gbrain/config.json" ]; then
1137+
BACKUP="$HOME/.gbrain/config.json.gstack-bak-$(date +%s)"
1138+
mv "$HOME/.gbrain/config.json" "$BACKUP"
1139+
fi
1140+
if ! gbrain init --pglite --json; then
1141+
if [ -n "${BACKUP:-}" ] && [ -f "$BACKUP" ]; then mv "$BACKUP" "$HOME/.gbrain/config.json"; fi
1142+
echo "gbrain init failed. Existing config (if any) was restored. PGLite at ~/.gbrain/pglite/ may be in a partial state — \`rm -rf ~/.gbrain/pglite\` to reset." >&2
1143+
echo "Continuing setup without local code search; you can re-run /setup-gbrain to retry." >&2
1144+
fi
1145+
```
1146+
1147+
Then continue to Step 5a. The remote-http MCP registration in 5a runs as
1148+
today; the local PGLite is independent of MCP registration (Claude Code talks
1149+
to the remote brain via MCP for queries; `gbrain` CLI talks to local PGLite
1150+
for code-def/refs/callers).
1151+
1152+
**If B (No)**: skip the install + init. The local engine stays absent.
1153+
`gbrain_local_status` will be `missing-config` (or `no-cli` if gbrain isn't
1154+
installed). `/sync-gbrain` will SKIP the code stage cleanly per plan D12.
1155+
1156+
**4e. Skip Steps 3, 4 (other paths) and 5 (local doctor) when B was picked.**
1157+
When A was picked, Step 3 already ran (via gstack-gbrain-install) and Step 4
1158+
already ran (via `gbrain init --pglite`); jump straight to Step 5a. When B
1159+
was picked, Steps 3/4/5 are no-ops; also skip Step 7.5 (transcript ingest)
1160+
since memory-stage routes through the artifacts pipeline in remote-http mode
1161+
per plan D11.
10421162

10431163
The bearer token (`GBRAIN_MCP_TOKEN`) stays in process env until Step 5a's
10441164
`claude mcp add --header` consumes it; then `unset GBRAIN_MCP_TOKEN`
@@ -1475,14 +1595,25 @@ gbrain status: GREEN (mode: remote-http)
14751595
Repo policy ..... OK {read-write|read-only|deny}
14761596
Artifacts repo .. OK {gstack_artifacts_remote URL}
14771597
Artifacts sync .. OK {artifacts_sync_mode}
1478-
Transcripts ..... N/A remote mode (ingest happens on brain host)
1598+
Transcripts ..... OK route to artifacts repo → remote brain (plan D11)
1599+
Code search ..... {OK local-pglite (~/.gbrain/pglite) | N/A declined at Step 4d}
14791600
CLAUDE.md ....... OK
14801601
Smoke test ...... INFO printed for post-restart manual verification
14811602
14821603
Restart Claude Code to pick up the `mcp__gbrain__*` tools.
14831604
Re-run `/setup-gbrain` any time the bearer rotates or the URL moves.
14841605
```
14851606

1607+
The **Code search** row reflects the choice at Step 4d:
1608+
- If user picked A (Yes): `OK local-pglite` and `gbrain_local_status == "ok"` going forward.
1609+
- If user picked B (No): `N/A declined at Step 4d``gstack-config set local_code_index_offered true` to silence future migration notices.
1610+
1611+
The **Transcripts** row changed in v1.34.0.0: in remote-http mode,
1612+
gstack-memory-ingest now persists staged transcripts to
1613+
`~/.gstack/transcripts/run-<pid>-<ts>/` and gstack-brain-sync pushes them
1614+
to the artifacts repo. Brain admin's pull job indexes into the remote brain.
1615+
Local PGLite (when present) stays code-only — no transcript pollution.
1616+
14861617
### Paths 1, 2a, 2b, 3 (Local stdio)
14871618

14881619
```

setup-gbrain/SKILL.md.tmpl

Lines changed: 139 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,8 +63,10 @@ implemented as a dispatcher binary.
6363
```
6464

6565
Capture the JSON output. It contains: `gbrain_on_path`, `gbrain_version`,
66-
`gbrain_config_exists`, `gbrain_engine`, `gbrain_doctor_ok`,
67-
`gstack_brain_sync_mode`, `gstack_brain_git`.
66+
`gbrain_config_exists`, `gbrain_engine`, `gbrain_doctor_ok`, `gbrain_mcp_mode`,
67+
`gstack_brain_sync_mode`, `gstack_brain_git`, `gstack_artifacts_remote`, and
68+
the v1.34.0.0+ `gbrain_local_status` field (one of: `ok`, `no-cli`,
69+
`missing-config`, `broken-config`, `broken-db`).
6870

6971
Skip downstream steps that are already done. Report the detected state in
7072
one line so the user knows what you found:
@@ -77,6 +79,75 @@ invocation flags here and skip to the matching step.
7779

7880
---
7981

82+
## Step 1.5: Broken-local-engine remediation (plan D4)
83+
84+
Read `gbrain_local_status` from the Step 1 detect output. **If it's `broken-db`
85+
or `broken-config` AND no shortcut flag was passed**, the user has a
86+
non-working local engine (Garry's repro: `~/.gbrain/config.json` points at a
87+
dead Postgres URL). Fire a targeted AskUserQuestion BEFORE Step 2:
88+
89+
> D# — Your local gbrain engine isn't responding. How do you want to fix it?
90+
> Project/branch/task: <one-sentence grounding using detected slug + branch>
91+
> ELI10: gbrain has a config at `~/.gbrain/config.json` but the engine it points
92+
> at isn't reachable. That could be a transient outage (Postgres container
93+
> stopped, Tailscale down) OR a stale config you want to abandon. Different
94+
> remediation for each case.
95+
> Stakes if we pick wrong: "Switch to PGLite" overwrites your existing config
96+
> (one-way door if the user actually wanted the broken engine). "Retry" preserves
97+
> existing state for transient cases.
98+
> Recommendation: A (Retry) — always try the cheap option first; if engine is
99+
> just temporarily down it'll come back without any destructive change.
100+
> Note: options differ in kind, not coverage — no completeness score.
101+
> A) Retry — re-probe the engine (recommended; ~80ms)
102+
> ✅ Cheapest test: re-runs `gbrain sources list` to see if engine is back
103+
> ✅ Zero side effects; existing config preserved
104+
> ❌ If engine is permanently dead, retries forever; user must choose another option
105+
> B) Switch to local PGLite (one-way — moves existing config to .bak)
106+
> ✅ Fastest path to a working local engine if user has abandoned the old one
107+
> ✅ ~30s; no accounts; private to this machine
108+
> ❌ Destructive — existing config moved to ~/.gbrain/config.json.gstack-bak-{ts}
109+
> C) Switch brain mode (continue to Step 2 path picker)
110+
> ✅ Lets user pick Path 1/2/3/4 to re-init from scratch
111+
> ✅ Preserves existing config until they explicitly init the new one
112+
> ❌ Longer flow if user just wants to repair to PGLite
113+
> D) Quit (do nothing)
114+
> ✅ No cons — this is a hard-stop choice
115+
> ❌ N/A
116+
> Net: A is the right starting move; B/C are explicit destructive paths; D bails.
117+
118+
**If A (Retry)**: re-run `~/.claude/skills/gstack/bin/gstack-gbrain-detect`
119+
with `GSTACK_DETECT_NO_CACHE=1` (busts the 60s cache). If the new
120+
`gbrain_local_status` is `ok`, continue to Step 2. If still `broken-db` or
121+
`broken-config`, fire the same AskUserQuestion again (the user picks again).
122+
123+
**If B (Switch to PGLite)** — execute the rollback-safe init sequence (plan D7):
124+
125+
```bash
126+
BACKUP="$HOME/.gbrain/config.json.gstack-bak-$(date +%s)"
127+
mv "$HOME/.gbrain/config.json" "$BACKUP"
128+
if ! gbrain init --pglite --json; then
129+
# Restore on failure
130+
mv "$BACKUP" "$HOME/.gbrain/config.json"
131+
echo "gbrain init failed. Your previous config was restored at $HOME/.gbrain/config.json." >&2
132+
echo "PGLite directory at ~/.gbrain/pglite/ may be in a partial state — \`rm -rf ~/.gbrain/pglite\` if needed before retrying." >&2
133+
exit 1
134+
fi
135+
echo "Switched to local PGLite. Previous config saved at $BACKUP — review before deleting."
136+
```
137+
138+
Then jump to Step 5a (MCP registration; the new PGLite engine is registered as
139+
local-stdio).
140+
141+
**If C (Switch brain mode)**: continue to Step 2's normal path picker.
142+
143+
**If D (Quit)**: STOP the skill cleanly.
144+
145+
For `gbrain_local_status` values of `no-cli` or `missing-config`, do NOT fire
146+
Step 1.5 — fall through to Step 2 (where `no-cli` triggers Step 3 install and
147+
`missing-config` triggers Step 4 init).
148+
149+
---
150+
80151
## Step 2: Pick a path (AskUserQuestion)
81152

82153
Only fire this if Step 1 shows no existing working config AND no shortcut
@@ -312,11 +383,60 @@ Capture two values from the verify output for downstream steps:
312383
- `URL_FORM_SUPPORTED` (`true|false`) — passed to `gstack-artifacts-init` in
313384
Step 7 to control which form of the brain-admin hookup command is printed.
314385

315-
**4d. Skip Steps 3, 4 (other paths), 5 (local doctor), 7.5 (transcript ingest).**
316-
All four require a working local `gbrain` CLI that Path 4 does not install.
317-
The skill jumps straight to Step 5a (HTTP+bearer registration) → Step 6
318-
(per-remote policy) → Step 7 (artifacts repo) → Step 8 (CLAUDE.md) → Step 9
319-
(remote smoke test) → Step 10 (verdict).
386+
**4d. (Path 4) Offer local PGLite for code search.** Per plan D10/D11, ask:
387+
388+
> D# — Want symbol-aware code search on this machine?
389+
> Project/branch/task: <one-sentence grounding using detected slug + branch>
390+
> ELI10: The remote brain at `<MCP_URL>` is great for cross-machine knowledge,
391+
> but symbol queries like `gbrain code-def` / `code-refs` / `code-callers` need
392+
> a local index of THIS machine's code. We can spin up a tiny isolated PGLite
393+
> database (~30 seconds, no accounts, ~120 MB disk) just for code, separate
394+
> from your remote brain. Transcripts and artifacts continue routing through
395+
> the artifacts repo to the remote brain — local PGLite stays code-only.
396+
> Stakes: without it, semantic code search in this repo's worktrees falls
397+
> back to Grep.
398+
> Recommendation: A — 30 seconds, no ongoing cost, unlocks the symbol tools.
399+
> Completeness: A=10/10 (full split-engine), B=7/10 (remote-only).
400+
> A) Yes, set up local PGLite for code (recommended)
401+
> ✅ Unlocks `gbrain code-def`, `code-refs`, `code-callers` per worktree
402+
> ✅ Independent engine — won't disturb remote brain or share transcripts
403+
> B) No, remote MCP only
404+
> ✅ Zero local state — only `~/.claude.json` MCP registration
405+
> ❌ Symbol code queries fall back to Grep in this repo's worktrees
406+
> Net: A = full split-engine; B = remote-only.
407+
408+
**If A (Yes)**: install + init local PGLite with rollback-safe semantics (D7):
409+
410+
```bash
411+
~/.claude/skills/gstack/bin/gstack-gbrain-install || exit $?
412+
# At this point the local gbrain CLI is on PATH. Init PGLite, but back up any
413+
# existing ~/.gbrain/config.json first (rollback if init fails).
414+
if [ -f "$HOME/.gbrain/config.json" ]; then
415+
BACKUP="$HOME/.gbrain/config.json.gstack-bak-$(date +%s)"
416+
mv "$HOME/.gbrain/config.json" "$BACKUP"
417+
fi
418+
if ! gbrain init --pglite --json; then
419+
if [ -n "${BACKUP:-}" ] && [ -f "$BACKUP" ]; then mv "$BACKUP" "$HOME/.gbrain/config.json"; fi
420+
echo "gbrain init failed. Existing config (if any) was restored. PGLite at ~/.gbrain/pglite/ may be in a partial state — \`rm -rf ~/.gbrain/pglite\` to reset." >&2
421+
echo "Continuing setup without local code search; you can re-run /setup-gbrain to retry." >&2
422+
fi
423+
```
424+
425+
Then continue to Step 5a. The remote-http MCP registration in 5a runs as
426+
today; the local PGLite is independent of MCP registration (Claude Code talks
427+
to the remote brain via MCP for queries; `gbrain` CLI talks to local PGLite
428+
for code-def/refs/callers).
429+
430+
**If B (No)**: skip the install + init. The local engine stays absent.
431+
`gbrain_local_status` will be `missing-config` (or `no-cli` if gbrain isn't
432+
installed). `/sync-gbrain` will SKIP the code stage cleanly per plan D12.
433+
434+
**4e. Skip Steps 3, 4 (other paths) and 5 (local doctor) when B was picked.**
435+
When A was picked, Step 3 already ran (via gstack-gbrain-install) and Step 4
436+
already ran (via `gbrain init --pglite`); jump straight to Step 5a. When B
437+
was picked, Steps 3/4/5 are no-ops; also skip Step 7.5 (transcript ingest)
438+
since memory-stage routes through the artifacts pipeline in remote-http mode
439+
per plan D11.
320440

321441
The bearer token (`GBRAIN_MCP_TOKEN`) stays in process env until Step 5a's
322442
`claude mcp add --header` consumes it; then `unset GBRAIN_MCP_TOKEN`
@@ -753,14 +873,25 @@ gbrain status: GREEN (mode: remote-http)
753873
Repo policy ..... OK {read-write|read-only|deny}
754874
Artifacts repo .. OK {gstack_artifacts_remote URL}
755875
Artifacts sync .. OK {artifacts_sync_mode}
756-
Transcripts ..... N/A remote mode (ingest happens on brain host)
876+
Transcripts ..... OK route to artifacts repo → remote brain (plan D11)
877+
Code search ..... {OK local-pglite (~/.gbrain/pglite) | N/A declined at Step 4d}
757878
CLAUDE.md ....... OK
758879
Smoke test ...... INFO printed for post-restart manual verification
759880
760881
Restart Claude Code to pick up the `mcp__gbrain__*` tools.
761882
Re-run `/setup-gbrain` any time the bearer rotates or the URL moves.
762883
```
763884

885+
The **Code search** row reflects the choice at Step 4d:
886+
- If user picked A (Yes): `OK local-pglite` and `gbrain_local_status == "ok"` going forward.
887+
- If user picked B (No): `N/A declined at Step 4d``gstack-config set local_code_index_offered true` to silence future migration notices.
888+
889+
The **Transcripts** row changed in v1.34.0.0: in remote-http mode,
890+
gstack-memory-ingest now persists staged transcripts to
891+
`~/.gstack/transcripts/run-<pid>-<ts>/` and gstack-brain-sync pushes them
892+
to the artifacts repo. Brain admin's pull job indexes into the remote brain.
893+
Local PGLite (when present) stays code-only — no transcript pollution.
894+
764895
### Paths 1, 2a, 2b, 3 (Local stdio)
765896

766897
```

0 commit comments

Comments
 (0)