mirror of
https://github.com/garrytan/gstack.git
synced 2026-08-09 07:46:08 +02:00
fix: gbrain-sync orchestrator resolves brain-sync sibling via import.meta.dir
Codex M9: runBrainSyncPush hardcoded ~/.claude/skills/gstack/bin/gstack-brain-sync, so any host that wasn't Claude Code (Codex CLI, dev workspace) hit the existsSync guard and silently skipped curated-artifact push. Replace with the sibling-resolution pattern already in runMemoryIngest at line 193. Regression test asserts the orchestrator no longer takes the lying-skip path when HOME has no ~/.claude/skills/gstack tree.
This commit is contained in:
@@ -219,7 +219,7 @@ function runBrainSyncPush(args: CliArgs): StageResult {
|
|||||||
return { name: "brain-sync", ran: false, ok: true, duration_ms: 0, summary: "would: gstack-brain-sync --discover-new --once" };
|
return { name: "brain-sync", ran: false, ok: true, duration_ms: 0, summary: "would: gstack-brain-sync --discover-new --once" };
|
||||||
}
|
}
|
||||||
|
|
||||||
const brainSyncPath = join(HOME, ".claude", "skills", "gstack", "bin", "gstack-brain-sync");
|
const brainSyncPath = join(import.meta.dir, "gstack-brain-sync");
|
||||||
if (!existsSync(brainSyncPath)) {
|
if (!existsSync(brainSyncPath)) {
|
||||||
return { name: "brain-sync", ran: false, ok: true, duration_ms: 0, summary: "skipped (gstack-brain-sync not installed)" };
|
return { name: "brain-sync", ran: false, ok: true, duration_ms: 0, summary: "skipped (gstack-brain-sync not installed)" };
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -137,4 +137,26 @@ describe("gstack-gbrain-sync CLI", () => {
|
|||||||
expect(state.last_stages.length).toBe(0);
|
expect(state.last_stages.length).toBe(0);
|
||||||
rmSync(home, { recursive: true, force: true });
|
rmSync(home, { recursive: true, force: true });
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it("brain-sync stage resolves the sibling binary, not a HOME-rooted path", () => {
|
||||||
|
// Regression for Codex M9: pre-fix the orchestrator looked up
|
||||||
|
// ~/.claude/skills/gstack/bin/gstack-brain-sync, which silently no-op'd
|
||||||
|
// on Codex installs and dev workspaces with the misleading summary
|
||||||
|
// "skipped (gstack-brain-sync not installed)". Post-fix it resolves
|
||||||
|
// a sibling via import.meta.dir and actually invokes the script.
|
||||||
|
const home = makeTestHome();
|
||||||
|
const gstackHome = join(home, ".gstack");
|
||||||
|
mkdirSync(gstackHome, { recursive: true });
|
||||||
|
|
||||||
|
const r = runScript(
|
||||||
|
["--incremental", "--no-code", "--no-memory", "--quiet"],
|
||||||
|
{ HOME: home, GSTACK_HOME: gstackHome },
|
||||||
|
);
|
||||||
|
|
||||||
|
// Don't assert exit code (sibling spawn may legitimately error in a
|
||||||
|
// sandboxed test). Assert only that we did NOT take the lying-skip path.
|
||||||
|
const combined = r.stdout + r.stderr;
|
||||||
|
expect(combined).not.toContain("skipped (gstack-brain-sync not installed)");
|
||||||
|
rmSync(home, { recursive: true, force: true });
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user