Conversation
…ts docs Pointing a second adapter at `.agents` let it prune Antigravity's generated agents while both syncs reported success and `status --check` stayed green. A filtered `sync <adapter>` was the dangerous case: it prunes those paths without ever loading the adapter whose output it destroys. An `owned` path is now exclusive across enabled adapters, while two `managed` claims on one path stay legal - that sharing is what `.agents/skills` is built on. Checked against the vendor's own pages, the adapter also rendered two tool names no Antigravity page documents, where the vendor warns an unmapped name may hang the subagent; claimed a 12,000-character rule limit it never checked; and left `.antigravity.md` in place, which the Antigravity CLI reads ahead of GEMINI.md and therefore ahead of every synced rule. Sync now also warns when generated context lands where no tool reads it - an Antigravity output outside `.agents`, or an AGENTS.md away from the workspace root while adapters that skip always-on rules depend on it carrying them.
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
Raw path aliases can bypass ownership protection and produce incorrect unread-output warnings.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
Open (5)
What changed in this PR
This PR hardens adapter ownership and aligns Antigravity rendering with documented behavior.
Changes:
- Adds cross-adapter ownership conflict checks and context-placement warnings.
- Updates Antigravity tools, rule limits, output quarantine, and frontmatter rewriting.
- Updates documentation, changelog, tests, and versioned example artifacts.
| File | Description |
|---|---|
README.md |
Refreshes adapter reference date and guidance. |
packages/sync/references/conventions.md |
Documents .antigravity.md policy. |
packages/sync/references/adapters.md |
Documents ownership and output warnings. |
intelligence.yaml |
Updates schema and package version. |
intelligence.lock |
Updates engine and package pins. |
examples/with-remote-skills/intelligence.yaml |
Updates version pins. |
examples/platform-with-submodules/intelligence.yaml |
Updates version pins. |
examples/platform-with-submodules/intelligence.lock |
Updates lock version. |
examples/go-api/intelligence.yaml |
Updates version pins. |
examples/go-api/intelligence.lock |
Updates lock version. |
examples/go-api-with-pi-and-codex/intelligence.yaml |
Updates version pins. |
examples/go-api-with-pi-and-codex/intelligence.lock |
Updates lock version. |
examples/go-api-with-opencode/intelligence.yaml |
Updates version pins. |
examples/go-api-with-opencode/intelligence.lock |
Updates lock version. |
examples/go-api-with-antigravity/intelligence.yaml |
Updates version pins. |
examples/go-api-with-antigravity/intelligence.lock |
Updates lock version. |
examples/dotnet-api-with-react-frontend/intelligence.yaml |
Updates version pins. |
examples/dotnet-api-with-react-frontend/intelligence.lock |
Updates lock version. |
examples/cli-project/intelligence.yaml |
Updates version pins. |
engine/VERSION |
Bumps release version to 0.17.0. |
engine/sync.sh |
Checks ownership and warns about unread context. |
engine/lib/adapter-contract.sh |
Implements cross-adapter claim validation. |
engine/adapters/cursor.sh |
Anchors paths rewriting to frontmatter. |
engine/adapters/antigravity.sh |
Updates tools, limits, paths, and quarantine contracts. |
cli/tests/e2e-negative.sh |
Adds ownership and warning coverage. |
cli/tests/e2e-lifecycle.sh |
Adds Antigravity rendering and onboarding coverage. |
cli/internal/target-state.sh |
Validates claims during adapter enablement. |
cli/internal/check.sh |
Reports ownership conflicts in status checks. |
cli/commands/init.sh |
Detects .antigravity.md. |
CHANGELOG.md |
Records the 0.17.0 changes. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…re spelled Review caught three lexical comparisons: the ownership claim, the Antigravity unread-output warning and the AGENTS.md root check all matched raw strings, while the writers and `validate_output_path` resolve them. `./.agents` beside `.agents` was therefore a collision nothing reported, and `.agents//` or `./AGENTS.md` raised a warning about output the tool does read. All three now go through `normalize_path_var`. Two regression gaps came with it: the documented numeric `warn_rule_limit` override had no case, and Cursor runs its own copy of the frontmatter rewrite that no test covered. Both are asserted now.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.


Summary
An audit of the
antigravityadapter against Google's live documentation turned upfive defects — two in the adapter, two that any pair of adapters can hit, and one
latent in the shared rule rewrite.
ownedis now exclusive across enabled adapters. Pointing Codex at.agentsmadeboth it and Antigravity own
.agents/agents: the one that synced last pruned theother's files, both runs exited 0, and
status --checkreportedall good. Afiltered
sync <adapter>was the worst case, because it prunes those paths whilenever loading the adapter whose output it destroys. Two
managedclaims on one pathstay legal — that sharing is what
.agents/skillsis built on.Against the vendor's pages the adapter also:
search_webandread_url_contentin a readonly agent'stools:, which noAntigravity page documents, while the vendor warns that an unmapped or misspelled
tool name "may cause the subagent process to hang during execution". Readonly now
carries the documented read tools only:
view_file,grep_search;it. A scoped rule past the limit is now reported, with
targets.antigravity.warn_rule_limitaccepting the documented limit, anotherpositive count, or
false;.antigravity.mdin place. The Antigravity CLI reads that workspace-root fileahead of
GEMINI.md, which already outranksAGENTS.md, so one sitting in aproject silently overrode every synced rule. Onboarding now quarantines it beside
GEMINI.md,initdetects Antigravity from it, and the Git policy ignores it.Two new warnings cover configurations that render context nothing reads: an
antigravity.outputoutside.agents(its paths are fixed, and an earlier.agents/copy stays the one the tool loads), and an
agents.outputaway from the workspace-rootAGENTS.mdwhile adapters that skip always-on rules depend on it carrying them. Bothwarn rather than refuse — rendering elsewhere for inspection stays legitimate.
Finally,
paths:→globs:was applied to the whole rule file in both the Antigravityand Cursor adapters, so a rule that documents rule syntax had its own example rewritten.
The substitution is now anchored to the frontmatter block.
The adapter header now records which vendor pages were checked and, where the adapter
renders something the vendor does not document (the rule frontmatter keys, the
GEMINI.mdprecedence), says so instead of implying a citation that does not exist.Type of change
Public CLI check
init,sync,update,upgrade,package,source,adapter,status,registryintelligence syncVerification
bash cli/tests/verify.shreportsverify okand skipped nothing this change neededintelligence status --checksucceeds in the relevant fixture/project — and now reports the ownership conflict instead ofall goodintelligence syncproduces no unexpected diffBeyond the suites: a byte-for-byte A/B of
agents,antigravity,claude,codex,cursor,opencodeandpioutput betweenmainand this branch is identical, sothe rewrite anchoring and the new awk pass change nothing they should not. New
coverage lives in
e2e-negative(sections 15b/15c: the conflict onsync, on afiltered
sync, onadapter enableand instatus --check; both warnings; amalformed
warn_rule_limit) and ine2e-lifecycle(rendered allowlist,model,a body
paths:line surviving, the limit warning and its off switch,.antigravity.mdquarantine and ignore policy).
Versioned artifacts
CHANGELOG.mdversion; there is no[Unreleased]section or duplicated release dateengine/VERSIONrelease state was checked:v0.16.1is published (2026-09-13), so this PR selects0.17.0schema_versionand exact@ainova-systems/syncpin changed with itNotes for reviewers
The ownership check runs over every enabled adapter regardless of the target filter,
so
sync <adapter>now loads the contracts of adapters it will not render. That costsa few extra subshells and means a broken contract on another enabled adapter stops a
filtered run too — deliberate, since that contract decides what the filtered run is
allowed to prune.
.antigravity.mdand theGEMINI.mdprecedence are not stated on Google's docs host;they come from the Antigravity CLI pages plus third-party reports of IDE 1.20.3. The
adapter comment marks both as such. Quarantine is safe either way: a project without
the file sees nothing happen, and the file is moved into the onboarding backup rather
than deleted.