fix(#3747): correct antigravity matrix evidence and pin the CLI-only skills install path (#4274)

* test(#3747): fail-first regression — matrix must not cite configHome skills path for antigravity

* fix(#3747): correct disproven antigravity stateIO evidence; pin CLI-only probe branch install path

* fix(#3747): scope doc evidence claim to skills discovery per adversarial review

* chore(#3747): add changeset

* chore(#3747): backfill PR number in changeset

---------

Co-authored-by: sim <sim@local>
This commit is contained in:
Tom Boucher
2026-09-04 11:48:38 -04:00
committed by GitHub
parent 75bad7aedd
commit 585a8b7f1b
4 changed files with 80 additions and 2 deletions

View File

@@ -0,0 +1,5 @@
---
type: Fixed
pr: 4274
---
**Antigravity CLI global skills: corrected the host-integration matrix evidence and pinned the CLI-only install path** — a live `agy` 1.1.17 probe showed the CLI discovers global skills in `~/.gemini/config/skills/` and silently drops everything under its configHome; the runtime layout was already fixed by #3738, and the matrix no longer cites the disproven blog claim while a new test pins the CLI-only probe branch so the silent-drop class cannot regress. (#3747)

View File

@@ -312,7 +312,7 @@ Documentation gaps:
| commandSurface | slash-file | https://github.com/alphaperseii3000/google-antigravity-docs/blob/master/google-antigravity-docs.md | "Workflows are saved as markdown files, providing a repeatable method for executing key processes. They can be invoked in the Agent using a s" |
| modelMode | passive | https://dev.to/arindam_1729/antigravity-cli-a-hands-on-guide-to-googles-terminal-coding-agent-5bc7 | "Selection occurs via `-m` flag or `/model` command inside the TUI. No programmatic model request API is documented for extensions/skills" |
| hookBus | host | https://www.aibuilderclub.com/blog/antigravity-cli-guide | "The CLI fires hooks, not the engine. These are JSON lifecycle interceptors (before tool call, after file edit, on session start)." |
| stateIO | filesystem | https://www.explainx.ai/blog/antigravity-cli-features-sandbox-plugins-subagents-2026 | "Plugin staging at ~/.gemini/antigravity-cli/plugins/<name>/; skills at ~/.gemini/antigravity-cli/skills/" |
| stateIO | filesystem | live `agy` 1.1.17 install probe — https://github.com/open-gsd/gsd-core/issues/3747 | "Global skills discovery scans ~/.gemini/config/skills/: a probe skill placed there is visible to `agy`, while an identical probe skill under the configHome is not. An earlier third-party blog claim about configHome skills placement was disproved by that probe; GSD installs global skills/agents under ~/.gemini/config (#3738)" |
| transport | mcp | https://dev.to/arindam_1729/antigravity-cli-a-hands-on-guide-to-googles-terminal-coding-agent-5bc7 | "Both local (stdio) and remote (HTTP) Model Context Protocol servers are supported" |
| runtime | go | https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/ | "Built in Go, Antigravity CLI is snappier and more responsive." |
| effortSurface | undocumented | no authoritative doc — per-host reasoning-effort survey, #2481 (`09b535ac0`) | This host's documentation states no reasoning-effort setting, so the axis carries the fail-closed sentinel rather than inheriting a profile baseline. No host-specific URL is cited because the finding is an ABSENCE: #2481 surveyed all hosts for a reasoning-effort mechanism and found one only for claude/opencode/codex. |
@@ -329,7 +329,6 @@ Sources consulted:
- https://github.com/alphaperseii3000/google-antigravity-docs/blob/master/google-antigravity-docs.md
- https://developers.googleblog.com/an-important-update-transitioning-gemini-cli-to-antigravity-cli/
- https://dev.to/arindam_1729/antigravity-cli-a-hands-on-guide-to-googles-terminal-coding-agent-5bc7
- https://www.explainx.ai/blog/antigravity-cli-features-sandbox-plugins-subagents-2026
- https://www.aibuilderclub.com/blog/antigravity-cli-guide
- https://antigravity.google/docs/agents
- https://antigravity.google/docs/hooks

View File

@@ -689,3 +689,27 @@ describe('#2603: axis values inherited from the Python kimi descriptor are corre
assert.equal(axes.dispatch.isolation, 'orchestrator-worktree');
});
});
describe('#3747: matrix must not cite the disproven configHome skills path for antigravity', () => {
// The stateIO row sourced its evidence from an explainx.ai blog claiming the
// CLI reads global skills from ~/.gemini/antigravity-cli/skills/. A live
// `agy` 1.1.17 probe (#3747) disproved that: the CLI scans
// ~/.gemini/config/skills (where #3738 installs them) and silently drops
// everything under the configHome. The doc must not re-assert the dead path.
test('antigravity section cites no configHome skills path; evidence names ~/.gemini/config/skills', () => {
const section = matrixSection('antigravity');
assert.ok(section, 'antigravity section must exist in the host-integration matrix');
const offending = section.split('\n').filter((l) => /antigravity(-cli|-ide)?\/skills/i.test(l));
assert.deepStrictEqual(
offending,
[],
`matrix rows must not cite a configHome skills dir (~/.gemini/antigravity*/skills) as the CLI's skills location — disproven by the #3747 live agy probe:\n${offending.join('\n')}`,
);
const stateIORow = section.split('\n').find((l) => l.startsWith('| stateIO |'));
assert.ok(stateIORow, 'stateIO row must exist');
assert.ok(
stateIORow.includes('~/.gemini/config/skills'),
`stateIO evidence must name the live-probe-verified ~/.gemini/config/skills discovery dir, got: ${stateIORow}`,
);
});
});

View File

@@ -7714,4 +7714,54 @@ describe('#3738: antigravity global artifacts install under ~/.gemini/config', (
}
});
// ── #3747: pin the CLI-ONLY probe branch ────────────────────────────────────
// The #3738 tests above hand installRuntimeArtifacts an arbitrary configDir.
// The reporter's machine resolved the configHome to ~/.gemini/antigravity-cli
// (the only sibling present, carrying the gsd-core/VERSION marker). This test
// reproduces exactly that resolution and asserts global skills/agents still
// land under ~/.gemini/config — the dir `agy` scans — and NOTHING lands under
// the resolved configHome. This is the "path-asserting test pinned to the CLI
// branch" the issue asked for: a regression that re-couples the global skills
// root to the resolved config home goes red here.
test('#3747: CLI-only install (configHome resolves to ~/.gemini/antigravity-cli) still lands global skills/agents under ~/.gemini/config', (t) => {
const { resolveAntigravityGlobalDir } = require('../gsd-core/bin/lib/runtime-homes.cjs');
const home = createTempDir('gsd-3747-antigravity-cli-');
t.after(() => cleanup(home));
sandboxHome(t, home);
// CLI-only environment: ~/.gemini/antigravity-cli is the sole sibling and
// carries the GSD marker — resolution must pick it (not the IDE default).
const cliConfigHome = path.join(home, '.gemini', 'antigravity-cli');
fs.mkdirSync(path.join(cliConfigHome, 'gsd-core'), { recursive: true });
fs.writeFileSync(path.join(cliConfigHome, 'gsd-core', 'VERSION'), '1.12.0\n');
for (const sibling of ['antigravity', 'antigravity-ide']) {
assert.ok(
!fs.existsSync(path.join(home, '.gemini', sibling)),
`test premise: ~/.gemini/${sibling} must not exist (CLI-only install)`,
);
}
const resolved = resolveAntigravityGlobalDir({ home, env: {}, existsSync: fs.existsSync });
assert.strictEqual(resolved, cliConfigHome, 'configHome must resolve to the CLI dir (CLI-only probe branch)');
installRuntimeArtifacts('antigravity', resolved, 'global', RESOLVED_CORE);
const discoveryHome = path.join(home, '.gemini', 'config');
assert.ok(
fs.existsSync(path.join(discoveryHome, 'skills', 'gsd-help', 'SKILL.md')),
'a gsd-* skill must exist under ~/.gemini/config/skills (the dir agy scans, #3747)'
);
assert.ok(
fs.readdirSync(path.join(discoveryHome, 'agents')).some((n) => n.startsWith('gsd-')),
'at least one gsd-* agent must exist under ~/.gemini/config/agents'
);
assert.ok(
!fs.existsSync(path.join(resolved, 'skills')),
'no skills dir may be created under the CLI configHome — agy never reads it (#3747 silent drop)'
);
assert.ok(
!fs.existsSync(path.join(resolved, 'agents')),
'no agents dir may be created under the CLI configHome — agy never reads it (#3747 silent drop)'
);
});
});