* fix(#1441): antigravity resolver prefers GSD-owned dir over first-existing resolveConfigHomeFromDescriptor's dot-home-nested probe returned the first bare-existing candidate, so a CLI user (~/.gemini/antigravity-cli) who also had the IDE's ~/.gemini/antigravity dir was silently shadowed to the legacy dir (probed first). Regression from #217 — pre-#217 returned ~/.gemini/antigravity unconditionally. Add an optional probeMarker (gsd-core/VERSION) to the dot-home-nested descriptor: a two-pass probe prefers the candidate GSD installed into, then bare existence, then probe[0]. Behavior is byte-identical when probeMarker is absent (windsurf etc. unaffected). Adds detectAntigravityDirAmbiguity() for installer/operator guidance on already-misinstalled users (auto-relocation ruled out per ADR-0008's single-configDir migration bound). Regression tests fail before / pass after: coexistence + marker-priority cases, end-to-end through the registry descriptor. Claude-Session: https://claude.ai/code/session_01JU2WB23JLE3QTysPXuFJjB * chore(#1441): add changeset for antigravity resolver fix Claude-Session: https://claude.ai/code/session_01JU2WB23JLE3QTysPXuFJjB
This commit is contained in:
@@ -159,6 +159,46 @@ describe('getGlobalConfigDir/getConfigDirFromHome — antigravity 2.x layout det
|
||||
cleanup(home);
|
||||
}
|
||||
});
|
||||
|
||||
// #213/#217 coexistence regression (end-to-end through the registry descriptor).
|
||||
// A CLI user who ALSO has the Antigravity-IDE's ~/.gemini/antigravity dir was
|
||||
// previously shadowed to the legacy dir because it is probed first. The
|
||||
// The probeExists marker (gsd-core/VERSION) makes the dir GSD installed into win.
|
||||
test('coexistence: legacy antigravity + GSD-marked antigravity-cli both present → resolves to antigravity-cli', (t) => {
|
||||
const home = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-antigravity-coexist-'));
|
||||
t.after(() => cleanup(home));
|
||||
// Both dirs exist on disk...
|
||||
fs.mkdirSync(path.join(home, '.gemini', 'antigravity'), { recursive: true });
|
||||
fs.mkdirSync(path.join(home, '.gemini', 'antigravity-cli', 'gsd-core'), { recursive: true });
|
||||
// ...but only the cli dir carries the GSD marker.
|
||||
fs.writeFileSync(path.join(home, '.gemini', 'antigravity-cli', 'gsd-core', 'VERSION'), '1.6.0\n');
|
||||
process.env.HOME = home;
|
||||
process.env.USERPROFILE = home;
|
||||
assert.strictEqual(
|
||||
getGlobalConfigDir('antigravity'),
|
||||
path.join(home, '.gemini', 'antigravity-cli'),
|
||||
'GSD-marked antigravity-cli must win over the bare-existing legacy antigravity dir',
|
||||
);
|
||||
assert.strictEqual(
|
||||
getConfigDirFromHome('antigravity', true),
|
||||
"'.gemini', 'antigravity-cli'",
|
||||
);
|
||||
});
|
||||
|
||||
test('coexistence: legacy antigravity carries the GSD marker (real 1.x install) → resolves to legacy even when cli dir exists bare', (t) => {
|
||||
const home = fs.mkdtempSync(path.join(os.tmpdir(), 'gsd-antigravity-legacy-marked-'));
|
||||
t.after(() => cleanup(home));
|
||||
fs.mkdirSync(path.join(home, '.gemini', 'antigravity', 'gsd-core'), { recursive: true });
|
||||
fs.writeFileSync(path.join(home, '.gemini', 'antigravity', 'gsd-core', 'VERSION'), '1.5.0\n');
|
||||
fs.mkdirSync(path.join(home, '.gemini', 'antigravity-cli'), { recursive: true });
|
||||
process.env.HOME = home;
|
||||
process.env.USERPROFILE = home;
|
||||
assert.strictEqual(
|
||||
getGlobalConfigDir('antigravity'),
|
||||
path.join(home, '.gemini', 'antigravity'),
|
||||
'a genuine GSD install in the legacy dir must not be abandoned for a bare sibling',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('getGlobalConfigDir — explicit configDir overrides env for all runtimes', () => {
|
||||
|
||||
Reference in New Issue
Block a user