* 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:
5
.changeset/sunny-geese-forage.md
Normal file
5
.changeset/sunny-geese-forage.md
Normal 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)
|
||||
@@ -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
|
||||
|
||||
@@ -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}`,
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
@@ -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)'
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user