Skip to content

docs(cursor): refresh dates + migrate doc URLs for Cursor 3.0.0 -> 3.1.17 - #763

Merged
avifenesh merged 3 commits into
mainfrom
chore/triage-cursor-3-1-17
Apr 23, 2026
Merged

docs(cursor): refresh dates + migrate doc URLs for Cursor 3.0.0 -> 3.1.17#763
avifenesh merged 3 commits into
mainfrom
chore/triage-cursor-3-1-17

Conversation

@avifenesh

Copy link
Copy Markdown
Collaborator

Summary

Triage of Cursor 3.0.0 -> 3.1.17 (issue #749). Re-verified all 19 CUR-* rules against the upstream changelog at cursor.com/changelog. No code changes required, but a documentation URL migration was discovered.

Why no code changes

The 3.0/3.1 features are all UX-side or cloud-side — none touch any on-disk file agnix validates:

Date Release Notable changes Impact
2026-04-02 3.0 "New Cursor Interface" Agents Window, /worktree, /best-of-n, Design Mode, Agent Tabs, Await tool, multi-root hooks bug fix UX/runtime only
2026-04-08 patch Bugbot learned rules, Bugbot MCP support Cloud-only (dashboard)
2026-04-13 3.1 "Tiled Layout and Upgraded Voice Input" Tiled layout, voice input, diff-to-file nav, file search filters, perf UX only
2026-04-15 patch Canvases (interactive responses) UX only

Schema verification (all match agnix exactly)

File type Verified against new docs URL Outcome
.cursor/rules/*.mdc cursor.com/docs/rules description, globs, alwaysApply — matches KNOWN_KEYS in schemas/cursor.rs
.cursor/agents/*.md cursor.com/docs/subagents name, description, model, readonly, is_background — matches agnix exactly
.cursor/hooks.json cursor.com/docs/hooks 20 hook events — matches CURSOR_HOOK_EVENTS exactly (no events added or removed)
.cursor/environment.json cursor.com/docs/cloud-agent/setup (unchanged) Schema unchanged

Doc URL migration upstream

Cursor renamed several docs paths in this window. This is the user-visible part of the PR — without it, the URLs in rules.json/VALIDATION-RULES.md 404:

Old (now 404) New
cursor.com/docs/context/rules cursor.com/docs/rules (CUR-001..009)
cursor.com/docs/agent/hooks cursor.com/docs/hooks (CUR-010..013, CUR-017..019)
cursor.com/docs/context/subagents cursor.com/docs/subagents (CUR-014, CUR-015)

Updated 18 source URL references across 18 rule entries. CUR-016 (cloud-agent setup) is unchanged.

Doc updates

  • knowledge-base/rules.json and crates/agnix-rules/rules.json: bumped verified_on to 2026-04-22 for all 19 CUR-* rules + URL migrations above
  • knowledge-base/RESEARCH-TRACKING.md:
    • Bumped Cursor "Last Reviewed" 2026-02-26 -> 2026-04-22
    • Expanded Config Format column — was only listing .cursor/rules/*.mdc and .cursorrules; now lists all 5 file types (.cursor/hooks.json, .cursor/agents/*.md, .cursor/environment.json added)
    • Updated the per-doc-source breakdown rows to use the new URLs
  • Regenerated website/docs/rules/generated/*.md

ToolVersions

ToolVersions::cursor is Option<String>. Nothing to bump.

Test plan

  • cargo test -p agnix-rules --tests: 47 + 4 parity tests pass
  • cargo clippy --workspace --all-targets --all-features -- -D warnings clean
  • No source code changed
  • CI: Verify Changelog
  • CI: Security Audit
  • CI: Tests
  • CI: claude-review

Closes #749.

…1.17

Closes #749.

Triage of Cursor 3.0.0 -> 3.1.17. Re-verified all 19 CUR-* rules
against the upstream changelog (cursor.com/changelog) and docs.

The 3.0/3.1 features are all UX-side or cloud-side - none touch any
on-disk file agnix validates:
  - 3.0 (2026-04-02): Agents Window, /worktree, /best-of-n, Design
    Mode, Agent Tabs, Await tool, multi-root hooks bug fix
  - 04-08 patch: Bugbot learned rules + MCP support (cloud-only)
  - 3.1 (2026-04-13): Tiled layout, voice input, diff-to-file nav,
    file search filters, perf
  - 04-15 patch: Canvases (interactive responses)

Schema verification:
  - MDC frontmatter: description, globs, alwaysApply (matches agnix
    KNOWN_KEYS exactly)
  - Cursor agents: name, description, model, readonly, is_background
    (matches agnix exactly)
  - Hook events: 20 events documented, matches agnix CURSOR_HOOK_EVENTS
    exactly (no events added or removed)

No code changes required.

Cursor's docs URL structure migrated upstream (this is the fix users
will see):
  - /docs/context/rules    -> /docs/rules    (CUR-001..009)
  - /docs/agent/hooks      -> /docs/hooks    (CUR-010..013, 017..019)
  - /docs/context/subagents -> /docs/subagents (CUR-014, CUR-015)
  - /docs/cloud-agent/setup is unchanged       (CUR-016)

Updated 18 source URL references across 18 rule entries.

Documentation:
  - Bumped verified_on to 2026-04-22 for all 19 CUR-* rules in
    knowledge-base/rules.json and synced crates/agnix-rules/rules.json
  - Bumped RESEARCH-TRACKING.md 'Last Reviewed' for Cursor from
    2026-02-26 to 2026-04-22
  - Expanded the Config Format column to list all 5 file types
    Cursor validates (was only listing .cursor/rules/*.mdc and
    .cursorrules; added .cursor/hooks.json, .cursor/agents/*.md,
    .cursor/environment.json)
  - Updated the per-doc-source breakdown rows to use the new URLs
  - Regenerated website/docs/rules/generated/*.md

Verified locally:
  - cargo clippy --workspace --all-targets --all-features -- -D warnings clean
  - cargo test -p agnix-rules --tests: 47 + 4 parity tests pass
  - No source code changed; no new tests needed
Copilot AI review requested due to automatic review settings April 23, 2026 08:52

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request performs a comprehensive refresh of Cursor-related validation rules, updating documentation URLs and verification dates across the changelog, research tracking, and generated website files. A review comment correctly identifies that crates/agnix-rules/rules.json and knowledge-base/rules.json contain duplicate data and recommends refactoring the codebase to maintain a single source of truth.

Comment on lines 6150 to 6158
"evidence": {
"source_type": "vendor_docs",
"source_urls": [
"https://cursor.com/docs/context/rules"
"https://cursor.com/docs/rules"
],
"verified_on": "2026-02-26",
"verified_on": "2026-04-22",
"applies_to": {
"tool": "cursor"
},

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The file crates/agnix-rules/rules.json appears to be a duplicate of knowledge-base/rules.json. Both files are being updated with identical changes in this pull request. According to the general rules, the code should be refactored to have a single source of truth to avoid duplication in the first place.

References
  1. Instead of merging and deduplicating data from multiple sources, refactor the code to have a single source of truth to avoid duplication in the first place.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Updates Cursor-related documentation metadata to reflect Cursor 3.0.0 → 3.1.17 triage, primarily by refreshing verification dates and migrating upstream Cursor docs URLs so evidence links don’t 404.

Changes:

  • Migrated Cursor evidence URLs to new docs paths (/docs/rules, /docs/hooks, /docs/subagents) for CUR-* rules and refreshed verified_on to 2026-04-22.
  • Updated research tracking inventory/source tables for Cursor, including expanded config-format coverage.
  • Regenerated website rule pages for CUR-001..CUR-019 and added a changelog entry for the triage.

Reviewed changes

Copilot reviewed 4 out of 23 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
website/docs/rules/generated/cur-001.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-002.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-003.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-004.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-005.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-006.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-007.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-008.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-009.md Refresh Verified On + migrate Cursor Rules doc URL
website/docs/rules/generated/cur-010.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-011.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-012.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-013.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-014.md Refresh Verified On + migrate Cursor Subagents doc URL
website/docs/rules/generated/cur-015.md Refresh Verified On + migrate Cursor Subagents doc URL
website/docs/rules/generated/cur-016.md Refresh Verified On date (environment URL unchanged)
website/docs/rules/generated/cur-017.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-018.md Refresh Verified On + migrate Cursor Hooks doc URL
website/docs/rules/generated/cur-019.md Refresh Verified On + migrate Cursor Hooks doc URL
knowledge-base/rules.json Update CUR-* evidence URLs + verified dates in rules source-of-truth
crates/agnix-rules/rules.json Mirror knowledge-base CUR-* evidence updates for packaged rules data
knowledge-base/RESEARCH-TRACKING.md Update Cursor “Last Reviewed”, doc URLs, and config-format inventory
CHANGELOG.md Document Cursor 3.0.0 → 3.1.17 triage + URL migration

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread knowledge-base/rules.json
Comment on lines 6151 to +6155
"source_type": "vendor_docs",
"source_urls": [
"https://cursor.com/docs/context/rules"
"https://cursor.com/docs/rules"
],
"verified_on": "2026-02-26",
"verified_on": "2026-04-22",

Copilot AI Apr 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The Cursor docs URL migration is only applied to CUR-* entries here, but this same old URL (https://cursor.com/docs/context/rules) is still referenced elsewhere in this file (e.g., AGM-* and XP-* evidence sources). If the old path now 404s, those rule pages will still contain broken links; consider migrating all remaining occurrences to the new Cursor docs path and regenerating any affected generated docs.

Copilot uses AI. Check for mistakes.
Comment on lines 6151 to +6155
"source_type": "vendor_docs",
"source_urls": [
"https://cursor.com/docs/context/rules"
"https://cursor.com/docs/rules"
],
"verified_on": "2026-02-26",
"verified_on": "2026-04-22",

Copilot AI Apr 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This file updates CUR-* evidence URLs to the new Cursor docs paths, but the old Cursor rules URL (https://cursor.com/docs/context/rules) still appears in other rule entries in this same JSON (e.g., AGM-* / XP-* evidence). If the old URL now 404s, those rules will still publish broken evidence links; consider migrating the remaining occurrences as well so the crate’s embedded rules data stays consistent.

Copilot uses AI. Check for mistakes.
Comment on lines +80 to +82
| Cursor - Rules | https://cursor.com/docs/rules | spec-drift.yml (monthly) | CUR-001 through CUR-009 |
| Cursor - Hooks | https://cursor.com/docs/hooks | spec-drift.yml (monthly) | CUR-010 through CUR-013, CUR-017 through CUR-019 |
| Cursor - Subagents | https://cursor.com/docs/subagents | spec-drift.yml (monthly) | CUR-014, CUR-015 |

Copilot AI Apr 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

RESEARCH-TRACKING is updated to the new Cursor docs URLs, but the spec-drift baseline file still points at the old Cursor doc paths (see .github/spec-baselines.json entries for cursor-rules/cursor-hooks/cursor-subagents). If those old URLs now 404, the spec-drift workflow will likely fail or report perpetual drift; update the baseline source URLs (and hashes) to match the new paths.

Copilot uses AI. Check for mistakes.
@avifenesh

Copy link
Copy Markdown
Collaborator Author

Per-comment reply table for round 1

# Reviewer File Status Resolution
1 Gemini MEDIUM rules.json (duplication) Won't fix (intentional pattern) Same answer as PR #757: the two rules.json files are kept identical by design. `crates/agnix-rules` embeds rules.json at build time so the agnix binary has zero runtime file dependency; `knowledge-base/rules.json` is the source of truth that humans edit. The `test_rules_json_parity` test enforces byte-equality on every PR. A build script would be cleaner long-term but is its own follow-up out of scope for a triage PR.
2 Copilot rules.json (AGM-/XP- still cite old URL) Fixed Right — 10 AGM-/XP- rule entries also cited the old `cursor.com/docs/context/rules` URL. My initial migration only matched CUR-* prefix. Fixed: the second migration pass walks ALL rules and updates the URL wherever it appears (10 additional refs migrated).
3 Copilot crates/agnix-rules/rules.json (same as #2) Fixed Same fix; `cp`'d to keep parity.
4 Copilot RESEARCH-TRACKING.md (.github/spec-baselines.json still has old URLs) Fixed Right — `.github/spec-baselines.json` had 3 stale URLs (`cursor-rules`, `cursor-hooks`, `cursor-subagents` baseline entries). Fixed all 3. Without this, the `spec-drift.yml` workflow's next run would 404. Also caught and fixed two additional stale references the reviewers didn't flag: `knowledge-base/MONTHLY-REVIEW.md` (3 URLs) and `knowledge-base/agent-config-optional-fields.md` (1 URL). VALIDATION-RULES.md needed bulk update too (10 `Source:` lines), done via sed. Versioned docs at `website/versioned_docs/version-0.12.0/` are frozen historical snapshots — deliberately not modified.

Note: `cursor.com/docs/context/skills` (different URL, used by some XP-SK rules) is still valid (verified) — only the rules/hooks/subagents URLs migrated.

Pushing now.

Reviewer feedback (PR #763 round 1):

- Copilot caught that the cursor URL migration was incomplete:
  10 AGM-*/XP-* rule entries in rules.json (both copies) also cite
  the old cursor.com/docs/context/rules URL, but my initial Python
  pass only matched CUR-* prefix. Migrated all 10 additional refs.

- Copilot also caught .github/spec-baselines.json with 3 stale
  baseline URLs (cursor-rules/cursor-hooks/cursor-subagents). Without
  this fix, the next spec-drift.yml workflow run would 404.
  Migrated all 3.

Additionally fixed (caught by my own grep, not flagged by reviewers
but would have caused a parity test failure):
  - knowledge-base/VALIDATION-RULES.md: 10 'Source:' lines (bulk sed)
  - knowledge-base/MONTHLY-REVIEW.md: 3 URL refs
  - knowledge-base/agent-config-optional-fields.md: 1 markdown link

Versioned docs at website/versioned_docs/version-0.12.0/ are frozen
historical snapshots and were deliberately not modified.

Verified cursor.com/docs/context/skills (a different URL used by
some XP-SK rules) is STILL valid - only the rules/hooks/subagents
URLs migrated upstream. Not touching that one.

Reply-with-reason on Gemini's rules.json duplication concern: this
is the project-wide pattern enforced by test_rules_json_parity (same
answer as PR #757). Refactor to a build-script-driven approach is
out of scope for a triage PR.

Verified locally:
  - cargo clippy --workspace --all-targets --all-features -- -D warnings clean
  - cargo test -p agnix-rules --tests: parity tests pass
…re ones

CI's agnix self-lint failed with 'Unclosed XML tag <String> [XML-001]'
because my round-1 fix commit (43b71fa) used 'git add -A' and
inadvertently added the gitignored-by-convention working-memory file
'.triage-report-749.md' (the exploration report). The report contains
prose snippets like 'Option<String>' from Rust type discussions, which
agnix's XML-001 rule flagged as unclosed XML tags.

Fix:
  - git rm --cached .triage-report-749.md (file kept locally, removed
    from index)
  - Added '.triage-report-*.md' and '.exploration-report-*.md' to
    .gitignore so future triage PRs (#753, #744, #750, #754) won't
    accidentally re-include them.

Verified locally: cargo run --release -p agnix-cli --bin agnix -- .
returns 0 errors, 1 info (the pre-existing XP-SK-001 on
plugin/skills/agnix/SKILL.md, unrelated to this PR).

Lesson for future triage PRs: use 'git add <file>' explicitly instead
of 'git add -A' so untracked working-memory files don't sneak in.
Copilot AI review requested due to automatic review settings April 23, 2026 09:14
@avifenesh

Copy link
Copy Markdown
Collaborator Author

Round-2 update

Push 2 (`43b71fa`) made CI's agnix self-lint job fail with XML-001 (Unclosed XML tag ''). Root cause: my round-1 fix used `git add -A` which inadvertently included the gitignored-by-convention working-memory file `.triage-report-749.md` (the exploration agent's report). The report has prose snippets like `Option` from Rust type discussions, which agnix's XML-001 rule flags as unclosed XML tags.

Push 3 (`6b88069`) fixes it:

Verified locally: `cargo run --release -p agnix-cli --bin agnix -- .` returns 0 errors (1 pre-existing info on `plugin/skills/agnix/SKILL.md` unrelated to this PR).

Lesson recorded for future triage PRs: stage files explicitly with `git add ` instead of `git add -A` so untracked working-memory files don't sneak in.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 9 out of 39 changed files in this pull request and generated 1 comment.


💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

"CUR-010",
"CUR-011",
"CUR-012",
"CUR-013"

Copilot AI Apr 23, 2026

Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

cursor-hooks baseline only lists CUR-010..013, but CUR-017..019 also cite the Cursor hooks docs (https://cursor.com/docs/hooks) and should be included here so spec-drift changes get attributed to all affected rules.

Suggested change
"CUR-013"
"CUR-013",
"CUR-017",
"CUR-018",
"CUR-019"

Copilot uses AI. Check for mistakes.
@avifenesh
avifenesh merged commit 7a95538 into main Apr 23, 2026
14 checks passed
@avifenesh
avifenesh deleted the chore/triage-cursor-3-1-17 branch April 23, 2026 09:19
avifenesh added a commit that referenced this pull request Apr 23, 2026
…view)

Reviewer feedback (PR #767 round 1):

- Copilot CRITICAL: typed Hook enum still rejected mcp_tool, so even
  with the raw-JSON allow-list fix, CC-HK-012 (schema mismatch) would
  fire on every mcp_tool hook. Added Hook::McpTool variant with tool,
  if, timeout fields (per release notes). Updated all match arms
  (command(), prompt(), type_name(), the per-variant typed-validation
  block in rules/hooks/mod.rs); added is_mcp_tool() for symmetry.

- Copilot: test was vacuous (only checked CC-HK-016 absence; would have
  passed with CC-HK-012 still firing). Strengthened to assert
  diagnostics.is_empty() (zero diagnostics of any rule). Now genuinely
  fails without the typed-enum addition.

- Copilot: comment said 'follows the docs' but docs page hasn't been
  updated yet; reworded to 'follows the release notes' with a caveat
  about the doc gap as of 2026-04-23.

- Gemini MEDIUM: KNOWN_KEYS dedup -> won't fix (project-wide pattern,
  same answer as PR #757/#763).

Plus fmt drift caught by CI (cargo fmt forgotten after round-1 edit;
same lesson as PR #758/#762).
avifenesh added a commit that referenced this pull request Apr 23, 2026
* fix(claude-code): catch up to v2.1.118 (mcp_tool hook type)

Closes #764.

Triage of Claude Code v2.1.117 -> v2.1.118. The release added
`type: "mcp_tool"` so hooks can invoke MCP tools directly. Without
this fix, agnix would false-positive CC-HK-016 (unknown hook type)
on every v2.1.118+ user following the release notes.

Added `"mcp_tool"` to BOTH allow-lists in
crates/agnix-core/src/rules/hooks/helpers.rs:
  - `valid_types` (lines 607, 973): used by CC-HK-016 strict check
  - `known_non_command` (lines 532, 974): used to flag async on
    non-command hook types

Plus a regression test (`test_cc_hk_016_mcp_tool_type_valid`)
asserting `mcp_tool` doesn't trigger CC-HK-016.

Doc gap caveat: as of 2026-04-23 the docs at
code.claude.com/docs/en/hooks only list 4 types (command, prompt,
agent, http). The v2.1.118 release notes explicitly mention mcp_tool
and are authoritative until the docs catch up.

Other v2.1.118 changes need no agnix change:
  - Vim visual mode, /cost+/stats -> /usage, custom themes (UI/CLI)
  - Plugin themes/ directory: agnix's plugin.rs has no strict
    fields check, no false positive
  - DISABLE_UPDATES env var: not a config file
  - wslInheritsWindowsSettings policy key: settings.json field;
    agnix doesn't validate settings.json fields directly
  - autoMode.* '\$defaults' token: settings.json field
  - claude plugin tag (CLI), OAuth/credential bug fixes (runtime)

Documentation:
  - Bumped verified_on to 2026-04-23 for all 25 CC-HK-* rules in
    knowledge-base/rules.json + synced crates/agnix-rules/rules.json
  - Regenerated website/docs/rules/generated/*.md

Verified locally:
  - cargo clippy --workspace --all-targets --all-features -- -D warnings clean
  - cargo test -p agnix-core --lib: passes (+1 new regression test)

* fix: expand mcp_tool to typed Hook enum + strengthen test (round 1 review)

Reviewer feedback (PR #767 round 1):

- Copilot CRITICAL: typed Hook enum still rejected mcp_tool, so even
  with the raw-JSON allow-list fix, CC-HK-012 (schema mismatch) would
  fire on every mcp_tool hook. Added Hook::McpTool variant with tool,
  if, timeout fields (per release notes). Updated all match arms
  (command(), prompt(), type_name(), the per-variant typed-validation
  block in rules/hooks/mod.rs); added is_mcp_tool() for symmetry.

- Copilot: test was vacuous (only checked CC-HK-016 absence; would have
  passed with CC-HK-012 still firing). Strengthened to assert
  diagnostics.is_empty() (zero diagnostics of any rule). Now genuinely
  fails without the typed-enum addition.

- Copilot: comment said 'follows the docs' but docs page hasn't been
  updated yet; reworded to 'follows the release notes' with a caveat
  about the doc gap as of 2026-04-23.

- Gemini MEDIUM: KNOWN_KEYS dedup -> won't fix (project-wide pattern,
  same answer as PR #757/#763).

Plus fmt drift caught by CI (cargo fmt forgotten after round-1 edit;
same lesson as PR #758/#762).
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tool release: Cursor 3.1.17 (was 3.0.0)

2 participants