diff --git a/.claude/flow.json b/.claude/flow.json index 52366f05f..e562d566b 100644 --- a/.claude/flow.json +++ b/.claude/flow.json @@ -1,27 +1,26 @@ { "version": "1.0.0", "task": { - "id": "output-style-validator", - "source": "manual", - "title": "PR2: output-style validator (post-#745 follow-on)" + "id": "749", + "title": "Tool release: Cursor 3.1.17 (was 3.0.0)", + "description": "PR for issue #749: Cursor 3.0.0 → 3.1.17 triage", + "tier": "A", + "category": "tool-release-triage", + "issue_url": "https://github.com/agent-sh/agnix/issues/749" }, "workflow": { - "id": "output-style-validator", - "status": "active", - "currentPhase": "setup", - "createdAt": "2026-04-22T00:00:00Z", - "updatedAt": "2026-04-22T00:00:00Z" + "status": "in-progress", + "currentPhase": "worktree-setup", + "startedAt": "2026-04-22T00:00:00Z" }, "git": { - "branch": "feat/output-style-validator", + "branch": "chore/triage-cursor-3-1-17", "baseBranch": "main", - "baseSha": "3c4a3a9", - "mainRepoPath": "C:/Users/avife/agent-sh/agnix", - "isWorktree": true + "baseSha": "1326467", + "mainRepoPath": "C:/Users/avife/agent-sh/agnix" }, - "context": { - "description": "Add output-style validator for Claude Code output-style files (.claude/output-styles/*.md) - new FileType in agnix-core. Follow-on from triage of issue #745 which merged as PR #756. The keep-coding-instructions field was surfaced during #745 triage.", - "relatedIssue": "#745", - "relatedMergedPR": "#756" + "resume": { + "canResume": true, + "resumeFromStep": "exploration" } } diff --git a/.github/spec-baselines.json b/.github/spec-baselines.json index 2781e6ef1..797a9cda2 100644 --- a/.github/spec-baselines.json +++ b/.github/spec-baselines.json @@ -7,81 +7,189 @@ "agent-skills-spec": { "url": "https://agentskills.io/specification", "hash": "07eb3bfba81db490030345a8c7bfed3683207205dae290300318279c30106de2", - "rules": ["AS-001", "AS-002", "AS-003", "AS-004", "AS-005", "AS-006", "AS-008", "AS-011", "AS-013", "AS-014", "AS-015", "AS-016"] + "rules": [ + "AS-001", + "AS-002", + "AS-003", + "AS-004", + "AS-005", + "AS-006", + "AS-008", + "AS-011", + "AS-013", + "AS-014", + "AS-015", + "AS-016" + ] }, "mcp-spec": { "url": "https://modelcontextprotocol.io/specification/2025-11-25", "hash": "45eed48714317ebca887c021e5a2a46f56b0dabbae14c399dcccd73100358934", "github_repo": "modelcontextprotocol/specification", - "rules": ["MCP-001", "MCP-002", "MCP-003", "MCP-004", "MCP-005", "MCP-006", "MCP-007", "MCP-008"] + "rules": [ + "MCP-001", + "MCP-002", + "MCP-003", + "MCP-004", + "MCP-005", + "MCP-006", + "MCP-007", + "MCP-008" + ] }, "claude-code-memory": { "url": "https://code.claude.com/docs/en/memory", "hash": "afcbf2219b2f9f72f3d8932ef5049278833627a09b2fd2955406e82b9ae312e2", - "rules": ["CC-MEM-001", "CC-MEM-002", "CC-MEM-003", "CC-MEM-004"] + "rules": [ + "CC-MEM-001", + "CC-MEM-002", + "CC-MEM-003", + "CC-MEM-004" + ] }, "claude-code-hooks": { "url": "https://code.claude.com/docs/en/hooks", "hash": "404c38e161c8b9cf8daabd455776ae078a0dc29314cbaa682e0a17c2ce24ac1a", - "rules": ["CC-HK-001", "CC-HK-002", "CC-HK-003", "CC-HK-004", "CC-HK-005", "CC-HK-006", "CC-HK-007", "CC-HK-008", "CC-HK-010", "CC-HK-011", "CC-HK-012"] + "rules": [ + "CC-HK-001", + "CC-HK-002", + "CC-HK-003", + "CC-HK-004", + "CC-HK-005", + "CC-HK-006", + "CC-HK-007", + "CC-HK-008", + "CC-HK-010", + "CC-HK-011", + "CC-HK-012" + ] }, "claude-code-skills": { "url": "https://code.claude.com/docs/en/skills", "hash": "aa304d51b31be37a59f35e81c315e9b298894508857295c71a6b56e7a25c8cd9", - "rules": ["CC-SK-001", "CC-SK-002", "CC-SK-003", "CC-SK-004", "CC-SK-006"] + "rules": [ + "CC-SK-001", + "CC-SK-002", + "CC-SK-003", + "CC-SK-004", + "CC-SK-006" + ] }, "claude-code-plugins": { "url": "https://code.claude.com/docs/en/plugins-reference", "hash": "af4d216303304bf0ffd1de74a9a1f71ffb0e44d5323306a80a30cf89bbbcb769", - "rules": ["CC-PL-002", "CC-PL-003", "CC-PL-004", "CC-PL-005", "CC-PL-006"] + "rules": [ + "CC-PL-002", + "CC-PL-003", + "CC-PL-004", + "CC-PL-005", + "CC-PL-006" + ] }, "claude-code-subagents": { "url": "https://code.claude.com/docs/en/sub-agents", "hash": "b17ed99452ce65f18804fff1ed945414d9e42ae862d295ad49be6b13dd93210c", - "rules": ["CC-SA-001", "CC-SA-002", "CC-SA-003", "CC-SA-004", "CC-SA-005", "CC-SA-006", "CC-SA-007"] + "rules": [ + "CC-SA-001", + "CC-SA-002", + "CC-SA-003", + "CC-SA-004", + "CC-SA-005", + "CC-SA-006", + "CC-SA-007" + ] }, "codex-cli-agents-md": { "url": "https://developers.openai.com/codex/guides/agents-md/", "hash": "7ff43344ded3bb80b7c8f3dc37f40dec948a331719c1c7a0125384338f87c15c", - "rules": ["AGM-001", "AGM-002", "AGM-003", "AGM-004", "AGM-005", "AGM-006", "XP-001", "XP-002", "XP-003", "XP-004", "XP-005", "XP-006"] + "rules": [ + "AGM-001", + "AGM-002", + "AGM-003", + "AGM-004", + "AGM-005", + "AGM-006", + "XP-001", + "XP-002", + "XP-003", + "XP-004", + "XP-005", + "XP-006" + ] }, "opencode-rules": { "url": "https://opencode.ai/docs/rules/", "hash": "622315eb04b6dacc551537a4298b02cef15078e2b041cc79945cefce7e607c4a", - "rules": ["XP-001", "XP-002", "XP-003", "XP-004", "XP-005", "XP-006"] + "rules": [ + "XP-001", + "XP-002", + "XP-003", + "XP-004", + "XP-005", + "XP-006" + ] } }, "a-tier": { "cursor-rules": { - "url": "https://cursor.com/docs/context/rules", + "url": "https://cursor.com/docs/rules", "hash": "24529507938b37d3e3815e86b8c1c87cbaf78230c899854f0d74b2d5356c676a", - "rules": ["CUR-001", "CUR-002", "CUR-003", "CUR-004", "CUR-005", "CUR-006", "CUR-007", "CUR-008", "CUR-009"] + "rules": [ + "CUR-001", + "CUR-002", + "CUR-003", + "CUR-004", + "CUR-005", + "CUR-006", + "CUR-007", + "CUR-008", + "CUR-009" + ] }, "cursor-hooks": { - "url": "https://cursor.com/docs/agent/hooks", + "url": "https://cursor.com/docs/hooks", "hash": "4f55df64b01fe7d2c55a9d544eafdda070e35d7f84045c021f4a5ea9fcdd05d8", - "rules": ["CUR-010", "CUR-011", "CUR-012", "CUR-013"] + "rules": [ + "CUR-010", + "CUR-011", + "CUR-012", + "CUR-013" + ] }, "cursor-subagents": { - "url": "https://cursor.com/docs/context/subagents", + "url": "https://cursor.com/docs/subagents", "hash": "f849221f0342190122e8411587e47f129c915902077da6995753f26c8a03cc9a", - "rules": ["CUR-014", "CUR-015"] + "rules": [ + "CUR-014", + "CUR-015" + ] }, "cursor-environment": { "url": "https://cursor.com/docs/cloud-agent/setup", "hash": "326a48176a4541dc5e1d94d7f1ef94c50a007dc4798b85e97e8ada5ec75e8a9e", - "rules": ["CUR-016"] + "rules": [ + "CUR-016" + ] }, "github-copilot": { "url": "https://docs.github.com/en/copilot/customizing-copilot", "hash": "668c75acb7948484e1334aeb040332961836fbe187561fa830219afcde8ae289", - "rules": ["GH-001", "GH-002", "GH-003", "GH-004"] + "rules": [ + "GH-001", + "GH-002", + "GH-003", + "GH-004" + ] }, "cline-rules": { "url": "https://docs.cline.bot/features/cline-rules/overview", "hash": "3a42acacd88e62655c440c04214bed9e622793007489f1d9ef68a2ea85360063", - "rules": ["CLINE-001", "CLINE-002", "CLINE-003"] + "rules": [ + "CLINE-001", + "CLINE-002", + "CLINE-003" + ] } } } -} +} \ No newline at end of file diff --git a/.gitignore b/.gitignore index f819ef98e..b6167c2ec 100644 --- a/.gitignore +++ b/.gitignore @@ -33,6 +33,10 @@ dist/ IMPLEMENTATION-NEXT-STEPS.md STATUS.md +# Triage exploration reports (working memory for /next-task triage workflow) +.triage-report-*.md +.exploration-report-*.md + .claude/plan.md .claude/scheduled_tasks.lock .claude/settings.local.json diff --git a/CHANGELOG.md b/CHANGELOG.md index 0e2090796..f5622f0be 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,6 +19,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - **Docs drift** - updated validation rule count from 385 to 399 across 20+ user-facing locations: `CLAUDE.md`, `AGENTS.md`, `README.md`, `SPEC.md`, `npm/README.md`, `crates/agnix-lsp/README.md`, `docs/EDITOR-SETUP.md`, Neovim and VS Code editor READMEs, `editors/vscode/package.json`, `editors/zed/README.md`, `knowledge-base/INDEX.md` (5 places), `knowledge-base/README.md`, `plugin/.claude-plugin/plugin.json`, `plugin/commands/agnix.md`, `plugin/skills/agnix/SKILL.md`, `skills/agnix/SKILL.md`, `crates/agnix-mcp/src/main.rs` server instructions (3 places), and website docs (intro, getting-started, contributing). `rules.json` is the source of truth; these human-written references had drifted. - **CONTRIBUTING tone** - `CONTRIBUTING.md` and `website/docs/contributing.md` use first-person singular ("I welcome", "I want to know") since agnix is single-maintainer. Previously used "we" which implied a team. - **Docusaurus** - bumped `@docusaurus/core` and `@docusaurus/preset-classic` from 3.9.2 to 3.10.0. +- **Cursor 3.0.0 -> 3.1.17 doc refresh + URL migration** (#749) - re-verified all 19 CUR-* rules against the upstream changelog at `cursor.com/changelog` (3.0 "New Cursor Interface" 2026-04-02, two patch posts 2026-04-08 / 2026-04-15, 3.1 "Tiled Layout and Upgraded Voice Input" 2026-04-13). The 3.0/3.1 features are all UX-side (Agents Window, /worktree, /best-of-n, Design Mode, tiled layout, voice input, Canvases) or cloud-side (Bugbot learned rules, Bugbot MCP) - none touch any on-disk file agnix validates. MDC frontmatter (`description`, `globs`, `alwaysApply`), Cursor agent fields (`name`, `description`, `model`, `readonly`, `is_background`), and the 20 hook events all match agnix's allow-lists exactly (verified against the new docs). No code changes required. Cursor's docs URL structure migrated upstream: `/docs/context/rules` -> `/docs/rules` (CUR-001..009), `/docs/agent/hooks` -> `/docs/hooks` (CUR-010..013, CUR-017..019), `/docs/context/subagents` -> `/docs/subagents` (CUR-014/015). Updated 18 source URL references across 18 rule entries (CUR-016 cloud-agent URL is unchanged). Bumped `verified_on` for all 19 CUR-* rules to 2026-04-22; 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. - **Cline v3.77.0 -> v3.80.0 doc refresh** (#746) - re-verified all 10 Cline rules (CLN-001..006, CLN-009 + CL-SK-001..003; CLN-007/008 are reserved IDs not currently defined) against the upstream `https://docs.cline.bot/features/cline-rules/overview` and `https://docs.cline.bot/features/hooks` docs. The 3-version bump introduced `globalSkills` enterprise remote config with `alwaysEnabled` enforcement (v3.79.0/v3.80.0), removed foreground terminal mode (v3.80.0), added quota-exceeded UI, and fixed long-conversation OOM crashes - none of these touch any on-disk file agnix validates. `globalSkills`/`alwaysEnabled` live exclusively in Cline's `RemoteConfigSchema` (delivered over the network via the enterprise remote-config API), not in `.cline/skills/*/SKILL.md` or `.clinerules/skills/*/SKILL.md` frontmatter. Foreground terminal removal is VS Code extension internals; agnix has no validator for Cline settings files. Verified the v3.77.0 changelog mention "Polish Notification hook functionality" against the official hooks docs - `Notification` is NOT a valid Cline hook event (the 8 valid events match agnix's `VALID_HOOK_EVENTS` exactly: TaskStart, TaskResume, TaskCancel, TaskComplete, PreToolUse, PostToolUse, UserPromptSubmit, PreCompact). No code changes required. Bumped `verified_on` for all 10 Cline rules to 2026-04-22; bumped `RESEARCH-TRACKING.md` "Last Reviewed" for Cline from 2026-02-05 to 2026-04-22; expanded the Config Format column to list all 5 file types Cline validates (was only listing 2) and filled in the Rules column (was `--`). - **Kiro CLI 1.28.3 -> 2.0.1 doc refresh** (#751) - re-verified all 51 Kiro rules (KIRO-* steering, KR-AG-* agents, KR-HK-* hooks, KR-MCP-* MCP, KR-PW-* powers, KR-SK-* skills) against the upstream `https://kiro.dev/changelog/cli/` HTML changelog and the relevant pages under `https://kiro.dev/docs/`. The 1.28 -> 2.0 jump was platform expansion (Windows native, headless mode `KIRO_API_KEY`, TUI graduation, granular tool trust, session settings tool, simplified agent creation) - none of those add fields to any of the 5 Kiro file types agnix validates. Two ambiguous changelog mentions (`availableAgents`/`trustedAgents` from v1.25, `knowledgeIndex` resource type from v1.23/v1.24) were verified against `kiro.dev/docs/cli/custom-agents/configuration-reference` and confirmed NOT to appear in `.kiro/agents/*.json` field lists - they're either global settings or were never shipped as documented config. No code changes required. Bumped `verified_on` for all 51 Kiro rules to 2026-04-22; bumped `RESEARCH-TRACKING.md` "Last Reviewed" for Kiro CLI from 2026-02-05 to 2026-04-22 (also added `.kiro/powers/*/POWER.md` to the Config Format column - it was missing). Discovered: agnix has FIVE Kiro validators, not four - `kiro_power.rs` (KR-PW-001..008) for `.kiro/powers/*/POWER.md` was undocumented in earlier triage briefings. diff --git a/crates/agnix-rules/rules.json b/crates/agnix-rules/rules.json index 3f9db7c2d..aafc074fc 100644 --- a/crates/agnix-rules/rules.json +++ b/crates/agnix-rules/rules.json @@ -39,7 +39,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]" ], "verified_on": "2026-02-09", @@ -66,7 +66,7 @@ "evidence": { "source_type": "community", "source_urls": [ - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]" ], "verified_on": "2026-02-09", @@ -120,7 +120,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -146,7 +146,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -6150,9 +6150,9 @@ "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" }, @@ -6177,9 +6177,9 @@ "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" }, @@ -6205,9 +6205,9 @@ "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" }, @@ -6232,9 +6232,9 @@ "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" }, @@ -6259,9 +6259,9 @@ "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" }, @@ -6287,9 +6287,9 @@ "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" }, @@ -6314,9 +6314,9 @@ "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" }, @@ -6342,9 +6342,9 @@ "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" }, @@ -6370,9 +6370,9 @@ "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" }, @@ -6397,9 +6397,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6424,9 +6424,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6452,9 +6452,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6479,9 +6479,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6507,9 +6507,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/context/subagents" + "https://cursor.com/docs/subagents" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6534,9 +6534,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/context/subagents" + "https://cursor.com/docs/subagents" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6563,7 +6563,7 @@ "source_urls": [ "https://cursor.com/docs/cloud-agent/setup" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6588,9 +6588,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -6618,9 +6618,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -6648,9 +6648,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -9929,7 +9929,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -9956,7 +9956,7 @@ "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", "https://opencode.ai/docs/rules", - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]", "https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/" ], @@ -9984,7 +9984,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10010,7 +10010,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10036,7 +10036,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10062,7 +10062,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, diff --git a/knowledge-base/MONTHLY-REVIEW.md b/knowledge-base/MONTHLY-REVIEW.md index da6b9f583..da7e7f2bb 100644 --- a/knowledge-base/MONTHLY-REVIEW.md +++ b/knowledge-base/MONTHLY-REVIEW.md @@ -49,9 +49,9 @@ These tools have automated monthly monitoring. Review confirms accuracy and chec **Sources to check**: - https://docs.github.com/en/copilot/customizing-copilot - https://docs.cline.bot/features/cline-rules/overview -- https://cursor.com/docs/context/rules -- https://cursor.com/docs/agent/hooks -- https://cursor.com/docs/context/subagents +- https://cursor.com/docs/rules +- https://cursor.com/docs/hooks +- https://cursor.com/docs/subagents - https://cursor.com/docs/cloud-agent/setup ### B/C Tier: Roo Code, Kiro CLI, amp, pi, gemini cli, continue, Antigravity diff --git a/knowledge-base/RESEARCH-TRACKING.md b/knowledge-base/RESEARCH-TRACKING.md index eaf025c48..d883a85f2 100644 --- a/knowledge-base/RESEARCH-TRACKING.md +++ b/knowledge-base/RESEARCH-TRACKING.md @@ -27,7 +27,7 @@ Tools are organized by support tier (see [../CONTRIBUTING.md#tool-tier-system](. |------|---------------|-------------------|------------|-----------|---------------|-------------| | GitHub Copilot | `.github/copilot-instructions.md`, `.github/instructions/*.instructions.md` | https://docs.github.com/en/copilot/customizing-copilot | Automated (spec-drift.yml + tool-release-watch.yml via microsoft/vscode-copilot-chat) | Monthly | 2026-04-22 | COP | | Cline | `.clinerules` (file or dir), `.clinerules/workflows/*.md`, `.clinerules/hooks/*`, `.clinerules/skills/*/SKILL.md`, `.cline/skills/*/SKILL.md` | https://docs.cline.bot/features/cline-rules/overview | Automated (spec-drift.yml + tool-release-watch.yml) | Monthly | 2026-04-22 | CLN, CL-SK | -| Cursor | `.cursor/rules/*.mdc`, `.cursorrules` | https://cursor.com/docs/context/rules | Automated (spec-drift.yml + tool-release-watch.yml via api2.cursor.sh stable update endpoint) | Monthly | 2026-02-26 | CUR | +| Cursor | `.cursor/rules/*.mdc`, `.cursorrules`, `.cursor/hooks.json`, `.cursor/agents/*.md`, `.cursor/environment.json` | https://cursor.com/docs/rules | Automated (spec-drift.yml + tool-release-watch.yml via api2.cursor.sh stable update endpoint) | Monthly | 2026-04-22 | CUR | ### B Tier (test on significant changes if time permits) @@ -77,9 +77,9 @@ Authoritative sources monitored for changes that may affect validation rules. | Claude Code - Sub-agents | https://code.claude.com/docs/en/sub-agents | spec-drift.yml (weekly) | CC-AG-001 through CC-AG-007 | | Codex CLI - AGENTS.md | https://developers.openai.com/codex/guides/agents-md/ | spec-drift.yml (weekly) | AGM-001 through AGM-006, XP-001 through XP-006 | | OpenCode - Rules | https://opencode.ai/docs/rules/ | spec-drift.yml (weekly) | XP-001 through XP-006 | -| Cursor - Rules | https://cursor.com/docs/context/rules | spec-drift.yml (monthly) | CUR-001 through CUR-009 | -| Cursor - Hooks | https://cursor.com/docs/agent/hooks | spec-drift.yml (monthly) | CUR-010 through CUR-013 | -| Cursor - Subagents | https://cursor.com/docs/context/subagents | spec-drift.yml (monthly) | CUR-014, CUR-015 | +| 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 | | Cursor - Environment | https://cursor.com/docs/cloud-agent/setup | spec-drift.yml (monthly) | CUR-016 | | GitHub Copilot | https://docs.github.com/en/copilot/customizing-copilot | spec-drift.yml (monthly) | COP-001 through COP-006 | | Cline - Rules | https://docs.cline.bot/features/cline-rules/overview | spec-drift.yml (monthly) | -- | diff --git a/knowledge-base/VALIDATION-RULES.md b/knowledge-base/VALIDATION-RULES.md index 1d200e419..dfd634c9b 100644 --- a/knowledge-base/VALIDATION-RULES.md +++ b/knowledge-base/VALIDATION-RULES.md @@ -1546,105 +1546,105 @@ Output-style files (`.claude/output-styles/*.md` or `~/.claude/output-styles/*.m **Requirement**: Cursor .mdc rule files MUST have non-empty content **Detection**: `content.trim().is_empty()` after stripping frontmatter **Fix**: Add meaningful rules content -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-002 [MEDIUM] Missing Frontmatter in .mdc File **Requirement**: Cursor .mdc files SHOULD have YAML frontmatter with metadata **Detection**: File doesn't start with `---` markers **Fix**: Auto-fix (unsafe) - insert template frontmatter with description and globs fields -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-003 [HIGH] Invalid YAML Frontmatter **Requirement**: .mdc file frontmatter MUST be valid YAML **Detection**: YAML parse error on frontmatter content **Fix**: Fix YAML syntax errors in frontmatter -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-004 [HIGH] Invalid Glob Pattern in globs Field **Requirement**: `globs` field MUST contain valid glob patterns **Detection**: Attempt to parse as glob pattern **Fix**: Correct the glob syntax -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-005 [MEDIUM] Unknown Frontmatter Keys **Requirement**: .mdc frontmatter SHOULD only contain known keys (description, globs, alwaysApply) **Detection**: Check for keys other than known keys in frontmatter **Fix**: Remove unknown keys -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-006 [MEDIUM] Legacy .cursorrules File Detected **Requirement**: Projects SHOULD migrate from .cursorrules to .cursor/rules/*.mdc format **Detection**: File named `.cursorrules` **Fix**: Create `.cursor/rules/` directory and migrate rules to .mdc files -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-007 [MEDIUM] alwaysApply with Redundant globs **Requirement**: When `alwaysApply: true`, the `globs` field SHOULD NOT be set (it is redundant) **Detection**: Frontmatter has both `alwaysApply: true` and a `globs` field **Fix**: [AUTO-FIX] Remove the `globs` field (safe) -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-008 [HIGH] Invalid alwaysApply Type **Requirement**: `alwaysApply` MUST be a boolean (`true`/`false`), not a quoted string **Detection**: `alwaysApply` value is a string (e.g., `"true"` or `"false"`) instead of a boolean **Fix**: Auto-fix (safe) - convert quoted string to unquoted boolean -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-009 [MEDIUM] Missing Description for Agent-Requested Rule **Requirement**: Rules with no `alwaysApply` and no `globs` (agent-requested rules) SHOULD have a `description` **Detection**: Frontmatter has no `alwaysApply`, no `globs`, and no `description` (or empty description) **Fix**: Add a `description` field explaining when the rule should apply -**Source**: cursor.com/docs/context/rules +**Source**: cursor.com/docs/rules ### CUR-010 [HIGH] Invalid .cursor/hooks.json Schema **Requirement**: `.cursor/hooks.json` MUST define an integer `version` and object `hooks` map **Detection**: Parse JSON and validate top-level shape and required fields **Fix**: Add required fields and correct schema types for `version` and `hooks` -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-011 [MEDIUM] Unknown Cursor Hook Event Name **Requirement**: Hook event names in `.cursor/hooks.json` SHOULD use documented Cursor events **Detection**: Validate each `hooks.` key against allowlisted event names **Fix**: [AUTO-FIX] Rename event keys to supported Cursor hook events -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-012 [HIGH] Hook Entry Missing Required Command Field **Requirement**: Each hook entry MUST include a `command` field **Detection**: Parse `hooks.[]` objects and check for missing `command` **Fix**: Add a non-empty command to each hook object -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-013 [HIGH] Invalid Cursor Hook Type Value **Requirement**: Hook `type` MUST be `command` or `prompt` when present **Detection**: Parse hook entries and validate `type` values **Fix**: [AUTO-FIX] Change invalid `type` values to supported values -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-014 [HIGH] Invalid Cursor Subagent Frontmatter **Requirement**: `.cursor/agents/**/*.md` files MUST have valid YAML frontmatter with required fields and valid optional field types **Detection**: Parse frontmatter and validate required keys (`name`, `description`), plus optional typed fields (`model`, `readonly`, `is_background`) when present **Fix**: Correct frontmatter keys, naming format, and value types -**Source**: cursor.com/docs/context/subagents +**Source**: cursor.com/docs/subagents ### CUR-015 [MEDIUM] Empty Cursor Subagent Body **Requirement**: `.cursor/agents/**/*.md` Cursor subagent markdown files SHOULD include body instructions after frontmatter **Detection**: Parse file and check that body content is non-empty after frontmatter **Fix**: Add clear subagent instructions below frontmatter -**Source**: cursor.com/docs/context/subagents +**Source**: cursor.com/docs/subagents ### CUR-016 [HIGH] Invalid .cursor/environment.json Schema @@ -1658,21 +1658,21 @@ Output-style files (`.claude/output-styles/*.md` or `~/.claude/output-styles/*.m **Requirement**: Hook entry fields SHOULD have correct types (timeout: number, loop_limit: number|null, failClosed: boolean) **Detection**: Check field types in hook entries **Fix**: Manual -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-018 [MEDIUM] Prompt Hook Missing Prompt Field **Requirement**: Prompt-type hooks SHOULD have a prompt field **Detection**: Check for type:"prompt" without prompt key **Fix**: Manual -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks ### CUR-019 [LOW] Invalid Prompt Hook Model Type **Requirement**: model field on prompt hooks MAY be validated as string **Detection**: Check model field type **Fix**: Manual -**Source**: cursor.com/docs/agent/hooks +**Source**: cursor.com/docs/hooks --- diff --git a/knowledge-base/agent-config-optional-fields.md b/knowledge-base/agent-config-optional-fields.md index 4fdd4f5fc..866ee6136 100644 --- a/knowledge-base/agent-config-optional-fields.md +++ b/knowledge-base/agent-config-optional-fields.md @@ -544,7 +544,7 @@ Supported syntax in `.mcp.json`: | [Claude Code Memory](https://code.claude.com/docs/en/memory) | Official Docs | CLAUDE.md and .claude/rules/ reference | | [Agent Skills Specification](https://agentskills.io/specification) | Spec | Cross-tool skill standard | | [GitHub Copilot Custom Instructions](https://docs.github.com/en/copilot/customizing-copilot/adding-repository-custom-instructions-for-github-copilot) | Vendor Docs | Copilot instruction file schema | -| [Cursor Rules](https://cursor.com/docs/context/rules) | Vendor Docs | .mdc file format reference | +| [Cursor Rules](https://cursor.com/docs/rules) | Vendor Docs | .mdc file format reference | | [Cline Rules](https://docs.cline.bot/features/cline-rules) | Vendor Docs | .clinerules format reference | | [OpenCode Configuration](https://opencode.ai/docs/config) | Vendor Docs | opencode.json schema reference | | [Codex CLI Documentation](https://developers.openai.com/codex/guides/agents-md) | Vendor Docs | AGENTS.md discovery and config.yaml | diff --git a/knowledge-base/rules.json b/knowledge-base/rules.json index 3f9db7c2d..aafc074fc 100644 --- a/knowledge-base/rules.json +++ b/knowledge-base/rules.json @@ -39,7 +39,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]" ], "verified_on": "2026-02-09", @@ -66,7 +66,7 @@ "evidence": { "source_type": "community", "source_urls": [ - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]" ], "verified_on": "2026-02-09", @@ -120,7 +120,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -146,7 +146,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -6150,9 +6150,9 @@ "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" }, @@ -6177,9 +6177,9 @@ "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" }, @@ -6205,9 +6205,9 @@ "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" }, @@ -6232,9 +6232,9 @@ "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" }, @@ -6259,9 +6259,9 @@ "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" }, @@ -6287,9 +6287,9 @@ "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" }, @@ -6314,9 +6314,9 @@ "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" }, @@ -6342,9 +6342,9 @@ "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" }, @@ -6370,9 +6370,9 @@ "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" }, @@ -6397,9 +6397,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6424,9 +6424,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6452,9 +6452,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6479,9 +6479,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6507,9 +6507,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/context/subagents" + "https://cursor.com/docs/subagents" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6534,9 +6534,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/context/subagents" + "https://cursor.com/docs/subagents" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6563,7 +6563,7 @@ "source_urls": [ "https://cursor.com/docs/cloud-agent/setup" ], - "verified_on": "2026-02-26", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor" }, @@ -6588,9 +6588,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -6618,9 +6618,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -6648,9 +6648,9 @@ "evidence": { "source_type": "vendor_docs", "source_urls": [ - "https://cursor.com/docs/agent/hooks" + "https://cursor.com/docs/hooks" ], - "verified_on": "2026-03-28", + "verified_on": "2026-04-22", "applies_to": { "tool": "cursor", "file_types": [ @@ -9929,7 +9929,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -9956,7 +9956,7 @@ "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", "https://opencode.ai/docs/rules", - "https://cursor.com/docs/context/rules", + "https://cursor.com/docs/rules", "https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this]", "https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/" ], @@ -9984,7 +9984,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10010,7 +10010,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10036,7 +10036,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, @@ -10062,7 +10062,7 @@ "source_type": "community", "source_urls": [ "https://developers.openai.com/codex/guides/agents-md", - "https://cursor.com/docs/context/rules" + "https://cursor.com/docs/rules" ], "verified_on": "2026-02-04", "applies_to": {}, diff --git a/website/docs/rules/generated/agm-001.md b/website/docs/rules/generated/agm-001.md index 8062df026..009508b0b 100644 --- a/website/docs/rules/generated/agm-001.md +++ b/website/docs/rules/generated/agm-001.md @@ -24,7 +24,7 @@ keywords: ["AGM-001", "valid markdown structure", "agents.md", "validation", "ag ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules - https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] ## Test Coverage Metadata diff --git a/website/docs/rules/generated/agm-002.md b/website/docs/rules/generated/agm-002.md index 376784bba..a7dfc3de2 100644 --- a/website/docs/rules/generated/agm-002.md +++ b/website/docs/rules/generated/agm-002.md @@ -23,7 +23,7 @@ keywords: ["AGM-002", "missing section headers", "agents.md", "validation", "agn ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules - https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] ## Test Coverage Metadata diff --git a/website/docs/rules/generated/agm-004.md b/website/docs/rules/generated/agm-004.md index f18a42c2e..95d56a1dd 100644 --- a/website/docs/rules/generated/agm-004.md +++ b/website/docs/rules/generated/agm-004.md @@ -24,7 +24,7 @@ keywords: ["AGM-004", "missing project context", "agents.md", "validation", "agn ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/agm-005.md b/website/docs/rules/generated/agm-005.md index e4953caf0..24a460a87 100644 --- a/website/docs/rules/generated/agm-005.md +++ b/website/docs/rules/generated/agm-005.md @@ -24,7 +24,7 @@ keywords: ["AGM-005", "platform-specific features without guard", "agents.md", " ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-001.md b/website/docs/rules/generated/cur-001.md index 6b6dbc220..83ea00f71 100644 --- a/website/docs/rules/generated/cur-001.md +++ b/website/docs/rules/generated/cur-001.md @@ -13,7 +13,7 @@ keywords: ["CUR-001", "empty cursor rule file", "cursor", "validation", "agnix", - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-001", "empty cursor rule file", "cursor", "validation", "agnix", ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-002.md b/website/docs/rules/generated/cur-002.md index c26c0487a..2f8049597 100644 --- a/website/docs/rules/generated/cur-002.md +++ b/website/docs/rules/generated/cur-002.md @@ -13,7 +13,7 @@ keywords: ["CUR-002", "missing frontmatter in .mdc file", "cursor", "validation" - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `Yes (unsafe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-002", "missing frontmatter in .mdc file", "cursor", "validation" ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-003.md b/website/docs/rules/generated/cur-003.md index ac46af4b2..67de37904 100644 --- a/website/docs/rules/generated/cur-003.md +++ b/website/docs/rules/generated/cur-003.md @@ -13,7 +13,7 @@ keywords: ["CUR-003", "invalid yaml frontmatter", "cursor", "validation", "agnix - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-003", "invalid yaml frontmatter", "cursor", "validation", "agnix ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-004.md b/website/docs/rules/generated/cur-004.md index 42bbb8244..cc400171e 100644 --- a/website/docs/rules/generated/cur-004.md +++ b/website/docs/rules/generated/cur-004.md @@ -13,7 +13,7 @@ keywords: ["CUR-004", "invalid glob pattern in globs field", "cursor", "validati - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-004", "invalid glob pattern in globs field", "cursor", "validati ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-005.md b/website/docs/rules/generated/cur-005.md index f547b2e07..01438a992 100644 --- a/website/docs/rules/generated/cur-005.md +++ b/website/docs/rules/generated/cur-005.md @@ -13,7 +13,7 @@ keywords: ["CUR-005", "unknown frontmatter keys", "cursor", "validation", "agnix - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `Yes (safe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-005", "unknown frontmatter keys", "cursor", "validation", "agnix ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-006.md b/website/docs/rules/generated/cur-006.md index b2e3065fc..2109d104e 100644 --- a/website/docs/rules/generated/cur-006.md +++ b/website/docs/rules/generated/cur-006.md @@ -13,7 +13,7 @@ keywords: ["CUR-006", "legacy .cursorrules file detected", "cursor", "validation - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-006", "legacy .cursorrules file detected", "cursor", "validation ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-007.md b/website/docs/rules/generated/cur-007.md index 583e7e218..8bcfc5585 100644 --- a/website/docs/rules/generated/cur-007.md +++ b/website/docs/rules/generated/cur-007.md @@ -13,7 +13,7 @@ keywords: ["CUR-007", "alwaysapply with redundant globs", "cursor", "validation" - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `Yes (safe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-007", "alwaysapply with redundant globs", "cursor", "validation" ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-008.md b/website/docs/rules/generated/cur-008.md index ddac9985b..989b98ead 100644 --- a/website/docs/rules/generated/cur-008.md +++ b/website/docs/rules/generated/cur-008.md @@ -13,7 +13,7 @@ keywords: ["CUR-008", "invalid alwaysapply type", "cursor", "validation", "agnix - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `Yes (safe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-008", "invalid alwaysapply type", "cursor", "validation", "agnix ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-009.md b/website/docs/rules/generated/cur-009.md index 98f8d9f85..5b4483b14 100644 --- a/website/docs/rules/generated/cur-009.md +++ b/website/docs/rules/generated/cur-009.md @@ -13,7 +13,7 @@ keywords: ["CUR-009", "missing description for agent-requested rule", "cursor", - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-009", "missing description for agent-requested rule", "cursor", ## Evidence Sources -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-010.md b/website/docs/rules/generated/cur-010.md index 67da10d74..e2989dfc7 100644 --- a/website/docs/rules/generated/cur-010.md +++ b/website/docs/rules/generated/cur-010.md @@ -13,7 +13,7 @@ keywords: ["CUR-010", "invalid cursor hooks schema", "cursor", "validation", "ag - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-010", "invalid cursor hooks schema", "cursor", "validation", "ag ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-011.md b/website/docs/rules/generated/cur-011.md index 873ad526a..27a6d89b3 100644 --- a/website/docs/rules/generated/cur-011.md +++ b/website/docs/rules/generated/cur-011.md @@ -13,7 +13,7 @@ keywords: ["CUR-011", "unknown cursor hook event name", "cursor", "validation", - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `Yes (safe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-011", "unknown cursor hook event name", "cursor", "validation", ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-012.md b/website/docs/rules/generated/cur-012.md index dbd34838a..b5d47156f 100644 --- a/website/docs/rules/generated/cur-012.md +++ b/website/docs/rules/generated/cur-012.md @@ -13,7 +13,7 @@ keywords: ["CUR-012", "hook entry missing required command field", "cursor", "va - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-012", "hook entry missing required command field", "cursor", "va ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-013.md b/website/docs/rules/generated/cur-013.md index cf04b3ec9..6749b5a1b 100644 --- a/website/docs/rules/generated/cur-013.md +++ b/website/docs/rules/generated/cur-013.md @@ -13,7 +13,7 @@ keywords: ["CUR-013", "invalid cursor hook type value", "cursor", "validation", - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `Yes (safe)` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-013", "invalid cursor hook type value", "cursor", "validation", ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-014.md b/website/docs/rules/generated/cur-014.md index ab33b80fa..541871165 100644 --- a/website/docs/rules/generated/cur-014.md +++ b/website/docs/rules/generated/cur-014.md @@ -13,7 +13,7 @@ keywords: ["CUR-014", "invalid cursor subagent frontmatter", "cursor", "validati - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-014", "invalid cursor subagent frontmatter", "cursor", "validati ## Evidence Sources -- https://cursor.com/docs/context/subagents +- https://cursor.com/docs/subagents ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-015.md b/website/docs/rules/generated/cur-015.md index cff20cfcc..3f73565f4 100644 --- a/website/docs/rules/generated/cur-015.md +++ b/website/docs/rules/generated/cur-015.md @@ -13,7 +13,7 @@ keywords: ["CUR-015", "empty cursor subagent body", "cursor", "validation", "agn - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-015", "empty cursor subagent body", "cursor", "validation", "agn ## Evidence Sources -- https://cursor.com/docs/context/subagents +- https://cursor.com/docs/subagents ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-016.md b/website/docs/rules/generated/cur-016.md index 99eedc68f..95f78e84a 100644 --- a/website/docs/rules/generated/cur-016.md +++ b/website/docs/rules/generated/cur-016.md @@ -13,7 +13,7 @@ keywords: ["CUR-016", "invalid cursor environment schema", "cursor", "validation - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-02-26` +- **Verified On**: `2026-04-22` ## Applicability diff --git a/website/docs/rules/generated/cur-017.md b/website/docs/rules/generated/cur-017.md index 4b9eebf12..61e1b769c 100644 --- a/website/docs/rules/generated/cur-017.md +++ b/website/docs/rules/generated/cur-017.md @@ -13,7 +13,7 @@ keywords: ["CUR-017", "invalid hook entry field types", "cursor", "validation", - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-03-28` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-017", "invalid hook entry field types", "cursor", "validation", ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-018.md b/website/docs/rules/generated/cur-018.md index d214bd8ed..07384a279 100644 --- a/website/docs/rules/generated/cur-018.md +++ b/website/docs/rules/generated/cur-018.md @@ -13,7 +13,7 @@ keywords: ["CUR-018", "prompt hook missing prompt field", "cursor", "validation" - **Category**: `Cursor` - **Normative Level**: `MUST` - **Auto-Fix**: `No` -- **Verified On**: `2026-03-28` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-018", "prompt hook missing prompt field", "cursor", "validation" ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/cur-019.md b/website/docs/rules/generated/cur-019.md index 6b1f6638a..3b9a3264f 100644 --- a/website/docs/rules/generated/cur-019.md +++ b/website/docs/rules/generated/cur-019.md @@ -13,7 +13,7 @@ keywords: ["CUR-019", "invalid prompt hook model type", "cursor", "validation", - **Category**: `Cursor` - **Normative Level**: `SHOULD` - **Auto-Fix**: `No` -- **Verified On**: `2026-03-28` +- **Verified On**: `2026-04-22` ## Applicability @@ -23,7 +23,7 @@ keywords: ["CUR-019", "invalid prompt hook model type", "cursor", "validation", ## Evidence Sources -- https://cursor.com/docs/agent/hooks +- https://cursor.com/docs/hooks ## Test Coverage Metadata diff --git a/website/docs/rules/generated/xp-001.md b/website/docs/rules/generated/xp-001.md index 49f570129..940b299cf 100644 --- a/website/docs/rules/generated/xp-001.md +++ b/website/docs/rules/generated/xp-001.md @@ -24,7 +24,7 @@ keywords: ["XP-001", "platform-specific feature in generic config", "cross-platf ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/xp-002.md b/website/docs/rules/generated/xp-002.md index 68bd79244..57fceaa86 100644 --- a/website/docs/rules/generated/xp-002.md +++ b/website/docs/rules/generated/xp-002.md @@ -25,7 +25,7 @@ keywords: ["XP-002", "agents.md platform compatibility", "cross-platform", "vali - https://developers.openai.com/codex/guides/agents-md - https://opencode.ai/docs/rules -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules - https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] - https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/ diff --git a/website/docs/rules/generated/xp-003.md b/website/docs/rules/generated/xp-003.md index 43c68aa52..4adc94b9f 100644 --- a/website/docs/rules/generated/xp-003.md +++ b/website/docs/rules/generated/xp-003.md @@ -24,7 +24,7 @@ keywords: ["XP-003", "hard-coded platform paths", "cross-platform", "validation" ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/xp-004.md b/website/docs/rules/generated/xp-004.md index 80a34ba54..21bda3d4c 100644 --- a/website/docs/rules/generated/xp-004.md +++ b/website/docs/rules/generated/xp-004.md @@ -24,7 +24,7 @@ keywords: ["XP-004", "conflicting build/test commands", "cross-platform", "valid ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/xp-005.md b/website/docs/rules/generated/xp-005.md index 456708555..67ecaed09 100644 --- a/website/docs/rules/generated/xp-005.md +++ b/website/docs/rules/generated/xp-005.md @@ -24,7 +24,7 @@ keywords: ["XP-005", "conflicting tool constraints", "cross-platform", "validati ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata diff --git a/website/docs/rules/generated/xp-006.md b/website/docs/rules/generated/xp-006.md index 123b0d72a..f24431eb7 100644 --- a/website/docs/rules/generated/xp-006.md +++ b/website/docs/rules/generated/xp-006.md @@ -24,7 +24,7 @@ keywords: ["XP-006", "multiple layers without documented precedence", "cross-pla ## Evidence Sources - https://developers.openai.com/codex/guides/agents-md -- https://cursor.com/docs/context/rules +- https://cursor.com/docs/rules ## Test Coverage Metadata