diff --git a/website/docusaurus.config.js b/website/docusaurus.config.js index 472af247..23a32d33 100644 --- a/website/docusaurus.config.js +++ b/website/docusaurus.config.js @@ -80,7 +80,7 @@ const config = { sidebarPath: require.resolve('./sidebars.js'), editUrl: 'https://github.com/agent-sh/agnix/tree/main/website/', showLastUpdateTime: true, - lastVersion: '0.46.0', + lastVersion: '0.47.0', ...(includedDocVersions ? { onlyIncludeVersions: includedDocVersions } : {}), versions: { current: { diff --git a/website/versioned_docs/version-0.47.0/api-reference.md b/website/versioned_docs/version-0.47.0/api-reference.md new file mode 100644 index 00000000..f85a4119 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/api-reference.md @@ -0,0 +1,88 @@ +--- +title: API Reference +description: "agnix CLI flags, output formats, MCP server tools, and LSP capabilities." +--- + +# API Reference + +## CLI + +```bash +agnix [OPTIONS] [PATH] +``` + +### Options + +| Flag | Description | +|------|-------------| +| `[PATH]` | Directory or file to validate (default: `.`) | +| `--target ` | Single tool focus (`generic`, `claude-code`, `cursor`, `codex`, `kiro`) | +| `--fix` | Apply HIGH and MEDIUM confidence fixes | +| `--dry-run` | Preview fixes without modifying files | +| `--fix-safe` | Apply only HIGH confidence fixes | +| `--fix-unsafe` | Apply all fixes, including LOW confidence fixes | +| `--show-fixes` | Show proposed fix diffs in text output | +| `--format ` | Output format: `text` (default), `json`, `sarif` | +| `--strict` | Treat warnings as errors (exit code 1) | +| `--config ` | Config file path (default: `.agnix.toml`) | +| `--watch`, `-w` | Watch mode - re-validate on file changes | +| `--locale ` | Set output locale, e.g. `en`, `es`, `zh-CN` | +| `--list-locales` | List supported locales and exit | +| `--max-files ` | Maximum number of files to validate | +| `--verbose`, `-v` | Verbose output | +| `--version` | Print version | +| `--help` | Print help | + +### Subcommands + +| Command | Description | +|---------|-------------| +| `agnix validate [PATH]` | Validate agent configs explicitly | +| `agnix init` | Initialize a config file | +| `agnix eval ` | Evaluate rule efficacy against labeled test cases | +| `agnix schema [--output FILE] [--fix]` | Output or regenerate JSON Schema for `.agnix.toml` | +| `agnix tools check` | Check configured tool versions | +| `agnix tools detect` | Detect installed tool versions | +| `agnix telemetry ` | Manage telemetry settings | + +### Output formats + +- **text** - Human-readable terminal output with colors +- **json** - Machine-readable JSON object with diagnostics and summary metadata (e.g. version, files_checked, diagnostics, summary, category, rule_severity, applies_to_tool) +- **sarif** - SARIF format for GitHub Code Scanning integration + +## MCP server + +```bash +cargo install agnix-mcp +agnix-mcp +``` + +The MCP server exposes these tools: + +| Tool | Description | +|------|-------------| +| `validate_file` | Validate a single configuration file | +| `validate_project` | Validate all config files in a project | +| `get_rules` | List all available validation rules | +| `get_rule_docs` | Get documentation for a specific rule | + +## LSP server + +```bash +cargo install agnix-lsp +agnix-lsp +``` + +Supported LSP capabilities: + +- `textDocument/publishDiagnostics` - real-time validation +- `textDocument/codeAction` - auto-fix suggestions +- `textDocument/hover` - rule documentation on hover +- `workspace/didChangeConfiguration` - runtime config updates +- `workspace/executeCommand` - project-level validation (`agnix.validateProjectRules` command) + +## References + +- [SPEC.md](https://github.com/agent-sh/agnix/blob/v0.47.0/SPEC.md) - full technical specification +- [MCP Protocol](https://modelcontextprotocol.io) - MCP specification diff --git a/website/versioned_docs/version-0.47.0/configuration.md b/website/versioned_docs/version-0.47.0/configuration.md new file mode 100644 index 00000000..b7fc044b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/configuration.md @@ -0,0 +1,63 @@ +--- +title: Configuration +description: "Configure agnix with .agnix.toml - target tools, disable rules, set output format, and more." +--- + +# Configuration + +agnix works with zero configuration. To customize, add `.agnix.toml` to your project root. + +## Example + +```toml +target = "ClaudeCode" +tools = ["claude-code"] +max_files_to_validate = 10000 +locale = "en" + +[rules] +disabled_rules = [] +``` + +## Options + +| Option | Type | Default | Description | +|--------|------|---------|-------------| +| `target` | string | `Generic` | Legacy single tool focus: `Generic`, `ClaudeCode`, `Cursor`, `Codex`, `Kiro` | +| `tools` | string[] | `[]` | Multi-tool targeting. Overrides `target`. Use values like `claude-code`, `cursor`, `codex`, `kiro`, `github-copilot`, `cline`, `opencode`, `gemini-cli`, `amp`, `roo-code`, `windsurf`, `generic`. | +| `severity` | string | `Warning` | Minimum severity level: `Warning`, `Error`, or `Info` | +| `max_files_to_validate` | int | `10000` | Maximum files to scan | +| `locale` | string | `"en"` | Output locale | +| `[rules].disabled_rules` | string[] | `[]` | Rule IDs to skip (e.g. `["CC-MEM-005"]`) | +| `[rules].disabled_validators` | string[] | `[]` | Validator names to skip | +| `[files]` | table | default excludes | Include or exclude non-standard files | +| `[[overrides]]` | table array | `[]` | Per-file disabled rule overrides | + +## CLI flags + +CLI flags override `.agnix.toml` values: + +```bash +# Target a specific tool +agnix --target cursor . + +# Apply fixes +agnix --fix . + +# JSON output for CI +agnix --format json . + +# SARIF output for GitHub Code Scanning +agnix --format sarif . + +# Strict mode +agnix --strict . +``` + +`--strict`, `--fix`, `--fix-safe`, `--fix-unsafe`, `--dry-run`, `--show-fixes`, and `--format` are CLI flags, not `.agnix.toml` keys. + +## Full reference + +For the complete configuration specification, see +[docs/CONFIGURATION.md](https://github.com/agent-sh/agnix/blob/v0.47.0/docs/CONFIGURATION.md) +in the repository. diff --git a/website/versioned_docs/version-0.47.0/contributing.md b/website/versioned_docs/version-0.47.0/contributing.md new file mode 100644 index 00000000..1afe35e5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/contributing.md @@ -0,0 +1,49 @@ +--- +title: Contributing +description: "How to contribute to agnix - report bugs, request rules, improve docs, or write code." +--- + +# Contributing + +Contributions are welcome and appreciated. + +## Found something off? + +agnix validates against 447 rules, but the agent config ecosystem moves fast. If a rule is wrong, missing, or too noisy, I want to know. + +- [Report a bug](https://github.com/agent-sh/agnix/issues/new) +- [Request a rule](https://github.com/agent-sh/agnix/issues/new) + +Your real-world configs are the best test suite I could ask for. + +## Contribute code + +Good first issues are labeled and ready: +[good first issues](https://github.com/agent-sh/agnix/issues?q=is%3Aissue+is%3Aopen+label%3A%22good+first+issue%22) + +Adding a new rule is one of the best ways to get started. Each rule is a self-contained unit with clear inputs, outputs, and test patterns. Find a similar existing rule to use as your template. + +## Improve docs + +This documentation site is in `website/`. To run locally: + +```bash +npm --prefix website ci +npm --prefix website run generate:rules +npm --prefix website start +``` + +## Where canonical content lives + +Long-form source-of-truth docs remain in the repository: + +- `README.md` +- `SPEC.md` +- `knowledge-base/` + +This website assembles and links that content for navigation and search. + +## References + +- [CONTRIBUTING.md](https://github.com/agent-sh/agnix/blob/v0.47.0/CONTRIBUTING.md) - full contribution guidelines +- [SECURITY.md](https://github.com/agent-sh/agnix/blob/v0.47.0/SECURITY.md) - security policy diff --git a/website/versioned_docs/version-0.47.0/editor-integration.md b/website/versioned_docs/version-0.47.0/editor-integration.md new file mode 100644 index 00000000..05c1d885 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/editor-integration.md @@ -0,0 +1,69 @@ +--- +title: Editor Integration +description: "Set up agnix real-time diagnostics in VS Code, Neovim, JetBrains, and Zed." +--- + +# Editor Integration + +agnix ships an LSP server (`agnix-lsp`) that provides real-time diagnostics, code actions, and hover documentation in your editor. + +## Capabilities + +- Diagnostics on open, save, and change +- Code actions for fixable findings +- Hover details for rule explanations + +## VS Code + +Install the extension from the +[VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=avifenesh.agnix). + +The extension bundles the LSP server. No additional setup needed. + +For manual configuration, see the +[VS Code extension README](https://github.com/agent-sh/agnix/tree/v0.47.0/editors/vscode). + +## JetBrains (IntelliJ, WebStorm, etc.) + +Install from the +[JetBrains Plugin Marketplace](https://plugins.jetbrains.com/plugin/30087-agnix). + +Configure the `agnix-lsp` binary path in plugin settings if not auto-detected. + +For details, see the +[JetBrains plugin README](https://github.com/agent-sh/agnix/tree/v0.47.0/editors/jetbrains). + +## Neovim + +Install with lazy.nvim: + +```lua +{ "agent-sh/agnix.nvim" } +``` + +Then in your config: + +```lua +require('agnix').setup() +``` + +The plugin auto-detects and downloads the `agnix-lsp` binary. For full setup instructions, see the +[agnix.nvim README](https://github.com/agent-sh/agnix.nvim). + +## Zed + +Install the agnix extension from the +[Zed extension marketplace](https://zed.dev/extensions?query=agnix), or see the +[Zed extension README](https://github.com/agent-sh/agnix/tree/v0.47.0/editors/zed). + +## Other editors + +Any editor with LSP support can use `agnix-lsp`. Point your LSP client to the binary: + +```bash +cargo install agnix-lsp +agnix-lsp +``` + +For the full editor support matrix, see +[docs/EDITOR-SETUP.md](https://github.com/agent-sh/agnix/blob/v0.47.0/docs/EDITOR-SETUP.md). diff --git a/website/versioned_docs/version-0.47.0/getting-started.md b/website/versioned_docs/version-0.47.0/getting-started.md new file mode 100644 index 00000000..56730581 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/getting-started.md @@ -0,0 +1,78 @@ +--- +title: Getting Started +description: "Install agnix and validate your agent configuration files in under 60 seconds." +--- + +# Getting Started + +:::tip No install needed? +[Try the playground](/playground) - paste your config and see diagnostics instantly, right in your browser. +::: + +## 1. Run agnix + +No installation needed. Use `npx` to run against your project: + +```bash +npx agnix . +``` + +Expected output: + +``` +Validating: . + +CLAUDE.md:15:1 warning: Generic instruction 'Be helpful and accurate' [fixable] + help: Remove generic instructions. Claude already knows this. + +.claude/skills/review/SKILL.md:3:1 error: Invalid name 'Review-Code' [fixable] + help: Use lowercase letters and hyphens only (e.g., 'code-review') + +Found 1 error, 1 warning + 2 issues are automatically fixable + +hint: Run with --fix to apply fixes +``` + +## 2. Auto-fix issues + +```bash +npx agnix --fix . +``` + +agnix applies safe fixes automatically and reports what changed. + +## 3. Install globally (optional) + +If you use agnix regularly: + +```bash +npm install -g agnix +``` + +Then run with: + +```bash +agnix . +``` + +See [Installation](./installation.md) for Homebrew, Cargo, and binary options. + +## 4. Target a specific tool + +Validate only configs relevant to a single tool: + +```bash +agnix --target claude-code . +agnix --target cursor . +agnix --target codex . +``` + +GitHub Copilot validation is enabled by default and can be targeted in config with `tools = ["github-copilot"]`. + +## Next steps + +- [Configuration](./configuration.md) - customize rules with `.agnix.toml` +- [Rules Reference](./rules/index.md) - browse all 447 rules +- [Editor Integration](./editor-integration.md) - get diagnostics in your editor +- [Troubleshooting](./troubleshooting.md) - common issues and fixes diff --git a/website/versioned_docs/version-0.47.0/installation.md b/website/versioned_docs/version-0.47.0/installation.md new file mode 100644 index 00000000..85fc2573 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/installation.md @@ -0,0 +1,55 @@ +--- +title: Installation +description: "Install agnix via npm, Homebrew, Cargo, or download pre-built binaries." +--- + +# Installation + +## npm (recommended) + +Works on all platforms. Includes pre-built binaries. + +```bash +npm install -g agnix +``` + +Or run without installing: + +```bash +npx agnix . +``` + +## Homebrew (macOS / Linux) + +```bash +brew tap agent-sh/agnix && brew install agnix +``` + +## Cargo (Rust toolchain) + +```bash +cargo install agnix-cli +``` + +## Pre-built binaries + +Download from [GitHub Releases](https://github.com/agent-sh/agnix/releases) for your platform. + +## Verify installation + +```bash +agnix --version +``` + +## Editor extensions + +agnix ships editor integrations powered by the `agnix-lsp` server: + +| Editor | Install | +|--------|---------| +| VS Code | [Marketplace](https://marketplace.visualstudio.com/items?itemName=avifenesh.agnix) | +| JetBrains | [Plugin](https://plugins.jetbrains.com/plugin/30087-agnix) | +| Neovim | [Plugin](https://github.com/agent-sh/agnix.nvim) | +| Zed | [Extension](https://zed.dev/extensions?query=agnix) | + +See [Editor Integration](./editor-integration.md) for setup details. diff --git a/website/versioned_docs/version-0.47.0/intro.md b/website/versioned_docs/version-0.47.0/intro.md new file mode 100644 index 00000000..0c49237b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/intro.md @@ -0,0 +1,29 @@ +--- +title: Introduction +slug: / +description: "agnix validates AI agent configuration files across Claude Code, Cursor, Copilot, MCP, and AGENTS.md. 447 rules, auto-fix, and editor integration." +--- + +# agnix + +agnix is a linter for AI agent configuration files. It validates Skills, Hooks, Memory, Plugins, MCP configs, and more across Claude Code, Cursor, GitHub Copilot, Codex CLI, and other tools. + +```bash +npx agnix . +``` + +## What it does + +- **Validates** configuration files against 447 rules derived from official specs and real-world testing +- **Auto-fixes** common issues with `--fix` +- **Integrates** with VS Code, Neovim, JetBrains, and Zed via the LSP server +- **Runs in your browser** - [try the playground](/playground) with zero install +- **Outputs** in text, JSON, or SARIF for CI integration + +## Next steps + +- [Playground](/playground) - try it now, no install needed +- [Getting Started](./getting-started.md) - install and run in 60 seconds +- [Rules Reference](./rules/index.md) - browse all 447 validation rules +- [Configuration](./configuration.md) - customize with `.agnix.toml` +- [Editor Integration](./editor-integration.md) - set up real-time diagnostics diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-001.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-001.md new file mode 100644 index 00000000..aae4bbd0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-001.md @@ -0,0 +1,63 @@ +--- +id: agm-001 +title: "AGM-001: Valid Markdown Structure - AGENTS.md" +sidebar_label: "AGM-001" +description: "agnix rule AGM-001 checks for valid markdown structure in agents.md files. Severity: HIGH. See examples and fix guidance." +keywords: ["AGM-001", "valid markdown structure", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-001` +- **Severity**: `HIGH` +- **Category**: `AGENTS.md` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules +- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +````markdown +# Project + +```python +def hello(): + print("world") + +This code block is never closed. +```` + +### Valid + +````markdown +# Project + +```python +def hello(): + print("world") +``` + +See [docs](https://example.com) for more. +```` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-002.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-002.md new file mode 100644 index 00000000..a7dfc3de --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-002.md @@ -0,0 +1,57 @@ +--- +id: agm-002 +title: "AGM-002: Missing Section Headers - AGENTS.md" +sidebar_label: "AGM-002" +description: "agnix rule AGM-002 checks for missing section headers in agents.md files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AGM-002", "missing section headers", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-002` +- **Severity**: `MEDIUM` +- **Category**: `AGENTS.md` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules +- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +Just plain text without any headers. +No structure at all. +Hard to navigate. +``` + +### Valid + +```markdown +# Main Title + +Some content here. + +## Section + +More content. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-003.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-003.md new file mode 100644 index 00000000..6f35a5c5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-003.md @@ -0,0 +1,356 @@ +--- +id: agm-003 +title: "AGM-003: Character Limit (Windsurf) - AGENTS.md" +sidebar_label: "AGM-003" +description: "agnix rule AGM-003 checks for character limit (windsurf) in agents.md files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AGM-003", "character limit (windsurf)", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-003` +- **Severity**: `MEDIUM` +- **Category**: `AGENTS.md` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +- Configuration rule 1: ensure all environment variables are documented and validated at startup. +- Configuration rule 2: ensure all environment variables are documented and validated at startup. +- Configuration rule 3: ensure all environment variables are documented and validated at startup. +- Configuration rule 4: ensure all environment variables are documented and validated at startup. +- Configuration rule 5: ensure all environment variables are documented and validated at startup. +- Configuration rule 6: ensure all environment variables are documented and validated at startup. +- Configuration rule 7: ensure all environment variables are documented and validated at startup. +- Configuration rule 8: ensure all environment variables are documented and validated at startup. +- Configuration rule 9: ensure all environment variables are documented and validated at startup. +- Configuration rule 10: ensure all environment variables are documented and validated at startup. +- Configuration rule 11: ensure all environment variables are documented and validated at startup. +- Configuration rule 12: ensure all environment variables are documented and validated at startup. +- Configuration rule 13: ensure all environment variables are documented and validated at startup. +- Configuration rule 14: ensure all environment variables are documented and validated at startup. +- Configuration rule 15: ensure all environment variables are documented and validated at startup. +- Configuration rule 16: ensure all environment variables are documented and validated at startup. +- Configuration rule 17: ensure all environment variables are documented and validated at startup. +- Configuration rule 18: ensure all environment variables are documented and validated at startup. +- Configuration rule 19: ensure all environment variables are documented and validated at startup. +- Configuration rule 20: ensure all environment variables are documented and validated at startup. +- Configuration rule 21: ensure all environment variables are documented and validated at startup. +- Configuration rule 22: ensure all environment variables are documented and validated at startup. +- Configuration rule 23: ensure all environment variables are documented and validated at startup. +- Configuration rule 24: ensure all environment variables are documented and validated at startup. +- Configuration rule 25: ensure all environment variables are documented and validated at startup. +- Configuration rule 26: ensure all environment variables are documented and validated at startup. +- Configuration rule 27: ensure all environment variables are documented and validated at startup. +- Configuration rule 28: ensure all environment variables are documented and validated at startup. +- Configuration rule 29: ensure all environment variables are documented and validated at startup. +- Configuration rule 30: ensure all environment variables are documented and validated at startup. +- Configuration rule 31: ensure all environment variables are documented and validated at startup. +- Configuration rule 32: ensure all environment variables are documented and validated at startup. +- Configuration rule 33: ensure all environment variables are documented and validated at startup. +- Configuration rule 34: ensure all environment variables are documented and validated at startup. +- Configuration rule 35: ensure all environment variables are documented and validated at startup. +- Configuration rule 36: ensure all environment variables are documented and validated at startup. +- Configuration rule 37: ensure all environment variables are documented and validated at startup. +- Configuration rule 38: ensure all environment variables are documented and validated at startup. +- Configuration rule 39: ensure all environment variables are documented and validated at startup. +- Configuration rule 40: ensure all environment variables are documented and validated at startup. +- Configuration rule 41: ensure all environment variables are documented and validated at startup. +- Configuration rule 42: ensure all environment variables are documented and validated at startup. +- Configuration rule 43: ensure all environment variables are documented and validated at startup. +- Configuration rule 44: ensure all environment variables are documented and validated at startup. +- Configuration rule 45: ensure all environment variables are documented and validated at startup. +- Configuration rule 46: ensure all environment variables are documented and validated at startup. +- Configuration rule 47: ensure all environment variables are documented and validated at startup. +- Configuration rule 48: ensure all environment variables are documented and validated at startup. +- Configuration rule 49: ensure all environment variables are documented and validated at startup. +- Configuration rule 50: ensure all environment variables are documented and validated at startup. +- Configuration rule 51: ensure all environment variables are documented and validated at startup. +- Configuration rule 52: ensure all environment variables are documented and validated at startup. +- Configuration rule 53: ensure all environment variables are documented and validated at startup. +- Configuration rule 54: ensure all environment variables are documented and validated at startup. +- Configuration rule 55: ensure all environment variables are documented and validated at startup. +- Configuration rule 56: ensure all environment variables are documented and validated at startup. +- Configuration rule 57: ensure all environment variables are documented and validated at startup. +- Configuration rule 58: ensure all environment variables are documented and validated at startup. +- Configuration rule 59: ensure all environment variables are documented and validated at startup. +- Configuration rule 60: ensure all environment variables are documented and validated at startup. +- Configuration rule 61: ensure all environment variables are documented and validated at startup. +- Configuration rule 62: ensure all environment variables are documented and validated at startup. +- Configuration rule 63: ensure all environment variables are documented and validated at startup. +- Configuration rule 64: ensure all environment variables are documented and validated at startup. +- Configuration rule 65: ensure all environment variables are documented and validated at startup. +- Configuration rule 66: ensure all environment variables are documented and validated at startup. +- Configuration rule 67: ensure all environment variables are documented and validated at startup. +- Configuration rule 68: ensure all environment variables are documented and validated at startup. +- Configuration rule 69: ensure all environment variables are documented and validated at startup. +- Configuration rule 70: ensure all environment variables are documented and validated at startup. +- Configuration rule 71: ensure all environment variables are documented and validated at startup. +- Configuration rule 72: ensure all environment variables are documented and validated at startup. +- Configuration rule 73: ensure all environment variables are documented and validated at startup. +- Configuration rule 74: ensure all environment variables are documented and validated at startup. +- Configuration rule 75: ensure all environment variables are documented and validated at startup. +- Configuration rule 76: ensure all environment variables are documented and validated at startup. +- Configuration rule 77: ensure all environment variables are documented and validated at startup. +- Configuration rule 78: ensure all environment variables are documented and validated at startup. +- Configuration rule 79: ensure all environment variables are documented and validated at startup. +- Configuration rule 80: ensure all environment variables are documented and validated at startup. +- Configuration rule 81: ensure all environment variables are documented and validated at startup. +- Configuration rule 82: ensure all environment variables are documented and validated at startup. +- Configuration rule 83: ensure all environment variables are documented and validated at startup. +- Configuration rule 84: ensure all environment variables are documented and validated at startup. +- Configuration rule 85: ensure all environment variables are documented and validated at startup. +- Configuration rule 86: ensure all environment variables are documented and validated at startup. +- Configuration rule 87: ensure all environment variables are documented and validated at startup. +- Configuration rule 88: ensure all environment variables are documented and validated at startup. +- Configuration rule 89: ensure all environment variables are documented and validated at startup. +- Configuration rule 90: ensure all environment variables are documented and validated at startup. +- Configuration rule 91: ensure all environment variables are documented and validated at startup. +- Configuration rule 92: ensure all environment variables are documented and validated at startup. +- Configuration rule 93: ensure all environment variables are documented and validated at startup. +- Configuration rule 94: ensure all environment variables are documented and validated at startup. +- Configuration rule 95: ensure all environment variables are documented and validated at startup. +- Configuration rule 96: ensure all environment variables are documented and validated at startup. +- Configuration rule 97: ensure all environment variables are documented and validated at startup. +- Configuration rule 98: ensure all environment variables are documented and validated at startup. +- Configuration rule 99: ensure all environment variables are documented and validated at startup. +- Configuration rule 100: ensure all environment variables are documented and validated at startup. +- Configuration rule 101: ensure all environment variables are documented and validated at startup. +- Configuration rule 102: ensure all environment variables are documented and validated at startup. +- Configuration rule 103: ensure all environment variables are documented and validated at startup. +- Configuration rule 104: ensure all environment variables are documented and validated at startup. +- Configuration rule 105: ensure all environment variables are documented and validated at startup. +- Configuration rule 106: ensure all environment variables are documented and validated at startup. +- Configuration rule 107: ensure all environment variables are documented and validated at startup. +- Configuration rule 108: ensure all environment variables are documented and validated at startup. +- Configuration rule 109: ensure all environment variables are documented and validated at startup. +- Configuration rule 110: ensure all environment variables are documented and validated at startup. +- Configuration rule 111: ensure all environment variables are documented and validated at startup. +- Configuration rule 112: ensure all environment variables are documented and validated at startup. +- Configuration rule 113: ensure all environment variables are documented and validated at startup. +- Configuration rule 114: ensure all environment variables are documented and validated at startup. +- Configuration rule 115: ensure all environment variables are documented and validated at startup. +- Configuration rule 116: ensure all environment variables are documented and validated at startup. +- Configuration rule 117: ensure all environment variables are documented and validated at startup. +- Configuration rule 118: ensure all environment variables are documented and validated at startup. +- Configuration rule 119: ensure all environment variables are documented and validated at startup. +- Configuration rule 120: ensure all environment variables are documented and validated at startup. +- Configuration rule 121: ensure all environment variables are documented and validated at startup. +- Configuration rule 122: ensure all environment variables are documented and validated at startup. +- Configuration rule 123: ensure all environment variables are documented and validated at startup. +- Configuration rule 124: ensure all environment variables are documented and validated at startup. +- Configuration rule 125: ensure all environment variables are documented and validated at startup. +- Configuration rule 126: ensure all environment variables are documented and validated at startup. +- Configuration rule 127: ensure all environment variables are documented and validated at startup. +- Configuration rule 128: ensure all environment variables are documented and validated at startup. +- Configuration rule 129: ensure all environment variables are documented and validated at startup. +- Configuration rule 130: ensure all environment variables are documented and validated at startup. +- Configuration rule 131: ensure all environment variables are documented and validated at startup. +- Configuration rule 132: ensure all environment variables are documented and validated at startup. +- Configuration rule 133: ensure all environment variables are documented and validated at startup. +- Configuration rule 134: ensure all environment variables are documented and validated at startup. +- Configuration rule 135: ensure all environment variables are documented and validated at startup. +- Configuration rule 136: ensure all environment variables are documented and validated at startup. +- Configuration rule 137: ensure all environment variables are documented and validated at startup. +- Configuration rule 138: ensure all environment variables are documented and validated at startup. +- Configuration rule 139: ensure all environment variables are documented and validated at startup. +- Configuration rule 140: ensure all environment variables are documented and validated at startup. +- Configuration rule 141: ensure all environment variables are documented and validated at startup. +- Configuration rule 142: ensure all environment variables are documented and validated at startup. +- Configuration rule 143: ensure all environment variables are documented and validated at startup. +- Configuration rule 144: ensure all environment variables are documented and validated at startup. +- Configuration rule 145: ensure all environment variables are documented and validated at startup. +- Configuration rule 146: ensure all environment variables are documented and validated at startup. +- Configuration rule 147: ensure all environment variables are documented and validated at startup. +- Configuration rule 148: ensure all environment variables are documented and validated at startup. +- Configuration rule 149: ensure all environment variables are documented and validated at startup. +- Configuration rule 150: ensure all environment variables are documented and validated at startup. +- Configuration rule 151: ensure all environment variables are documented and validated at startup. +- Configuration rule 152: ensure all environment variables are documented and validated at startup. +- Configuration rule 153: ensure all environment variables are documented and validated at startup. +- Configuration rule 154: ensure all environment variables are documented and validated at startup. +- Configuration rule 155: ensure all environment variables are documented and validated at startup. +- Configuration rule 156: ensure all environment variables are documented and validated at startup. +- Configuration rule 157: ensure all environment variables are documented and validated at startup. +- Configuration rule 158: ensure all environment variables are documented and validated at startup. +- Configuration rule 159: ensure all environment variables are documented and validated at startup. +- Configuration rule 160: ensure all environment variables are documented and validated at startup. +- Configuration rule 161: ensure all environment variables are documented and validated at startup. +- Configuration rule 162: ensure all environment variables are documented and validated at startup. +- Configuration rule 163: ensure all environment variables are documented and validated at startup. +- Configuration rule 164: ensure all environment variables are documented and validated at startup. +- Configuration rule 165: ensure all environment variables are documented and validated at startup. +- Configuration rule 166: ensure all environment variables are documented and validated at startup. +- Configuration rule 167: ensure all environment variables are documented and validated at startup. +- Configuration rule 168: ensure all environment variables are documented and validated at startup. +- Configuration rule 169: ensure all environment variables are documented and validated at startup. +- Configuration rule 170: ensure all environment variables are documented and validated at startup. +- Configuration rule 171: ensure all environment variables are documented and validated at startup. +- Configuration rule 172: ensure all environment variables are documented and validated at startup. +- Configuration rule 173: ensure all environment variables are documented and validated at startup. +- Configuration rule 174: ensure all environment variables are documented and validated at startup. +- Configuration rule 175: ensure all environment variables are documented and validated at startup. +- Configuration rule 176: ensure all environment variables are documented and validated at startup. +- Configuration rule 177: ensure all environment variables are documented and validated at startup. +- Configuration rule 178: ensure all environment variables are documented and validated at startup. +- Configuration rule 179: ensure all environment variables are documented and validated at startup. +- Configuration rule 180: ensure all environment variables are documented and validated at startup. +- Configuration rule 181: ensure all environment variables are documented and validated at startup. +- Configuration rule 182: ensure all environment variables are documented and validated at startup. +- Configuration rule 183: ensure all environment variables are documented and validated at startup. +- Configuration rule 184: ensure all environment variables are documented and validated at startup. +- Configuration rule 185: ensure all environment variables are documented and validated at startup. +- Configuration rule 186: ensure all environment variables are documented and validated at startup. +- Configuration rule 187: ensure all environment variables are documented and validated at startup. +- Configuration rule 188: ensure all environment variables are documented and validated at startup. +- Configuration rule 189: ensure all environment variables are documented and validated at startup. +- Configuration rule 190: ensure all environment variables are documented and validated at startup. +- Configuration rule 191: ensure all environment variables are documented and validated at startup. +- Configuration rule 192: ensure all environment variables are documented and validated at startup. +- Configuration rule 193: ensure all environment variables are documented and validated at startup. +- Configuration rule 194: ensure all environment variables are documented and validated at startup. +- Configuration rule 195: ensure all environment variables are documented and validated at startup. +- Configuration rule 196: ensure all environment variables are documented and validated at startup. +- Configuration rule 197: ensure all environment variables are documented and validated at startup. +- Configuration rule 198: ensure all environment variables are documented and validated at startup. +- Configuration rule 199: ensure all environment variables are documented and validated at startup. +- Configuration rule 200: ensure all environment variables are documented and validated at startup. +- Configuration rule 201: ensure all environment variables are documented and validated at startup. +- Configuration rule 202: ensure all environment variables are documented and validated at startup. +- Configuration rule 203: ensure all environment variables are documented and validated at startup. +- Configuration rule 204: ensure all environment variables are documented and validated at startup. +- Configuration rule 205: ensure all environment variables are documented and validated at startup. +- Configuration rule 206: ensure all environment variables are documented and validated at startup. +- Configuration rule 207: ensure all environment variables are documented and validated at startup. +- Configuration rule 208: ensure all environment variables are documented and validated at startup. +- Configuration rule 209: ensure all environment variables are documented and validated at startup. +- Configuration rule 210: ensure all environment variables are documented and validated at startup. +- Configuration rule 211: ensure all environment variables are documented and validated at startup. +- Configuration rule 212: ensure all environment variables are documented and validated at startup. +- Configuration rule 213: ensure all environment variables are documented and validated at startup. +- Configuration rule 214: ensure all environment variables are documented and validated at startup. +- Configuration rule 215: ensure all environment variables are documented and validated at startup. +- Configuration rule 216: ensure all environment variables are documented and validated at startup. +- Configuration rule 217: ensure all environment variables are documented and validated at startup. +- Configuration rule 218: ensure all environment variables are documented and validated at startup. +- Configuration rule 219: ensure all environment variables are documented and validated at startup. +- Configuration rule 220: ensure all environment variables are documented and validated at startup. +- Configuration rule 221: ensure all environment variables are documented and validated at startup. +- Configuration rule 222: ensure all environment variables are documented and validated at startup. +- Configuration rule 223: ensure all environment variables are documented and validated at startup. +- Configuration rule 224: ensure all environment variables are documented and validated at startup. +- Configuration rule 225: ensure all environment variables are documented and validated at startup. +- Configuration rule 226: ensure all environment variables are documented and validated at startup. +- Configuration rule 227: ensure all environment variables are documented and validated at startup. +- Configuration rule 228: ensure all environment variables are documented and validated at startup. +- Configuration rule 229: ensure all environment variables are documented and validated at startup. +- Configuration rule 230: ensure all environment variables are documented and validated at startup. +- Configuration rule 231: ensure all environment variables are documented and validated at startup. +- Configuration rule 232: ensure all environment variables are documented and validated at startup. +- Configuration rule 233: ensure all environment variables are documented and validated at startup. +- Configuration rule 234: ensure all environment variables are documented and validated at startup. +- Configuration rule 235: ensure all environment variables are documented and validated at startup. +- Configuration rule 236: ensure all environment variables are documented and validated at startup. +- Configuration rule 237: ensure all environment variables are documented and validated at startup. +- Configuration rule 238: ensure all environment variables are documented and validated at startup. +- Configuration rule 239: ensure all environment variables are documented and validated at startup. +- Configuration rule 240: ensure all environment variables are documented and validated at startup. +- Configuration rule 241: ensure all environment variables are documented and validated at startup. +- Configuration rule 242: ensure all environment variables are documented and validated at startup. +- Configuration rule 243: ensure all environment variables are documented and validated at startup. +- Configuration rule 244: ensure all environment variables are documented and validated at startup. +- Configuration rule 245: ensure all environment variables are documented and validated at startup. +- Configuration rule 246: ensure all environment variables are documented and validated at startup. +- Configuration rule 247: ensure all environment variables are documented and validated at startup. +- Configuration rule 248: ensure all environment variables are documented and validated at startup. +- Configuration rule 249: ensure all environment variables are documented and validated at startup. +- Configuration rule 250: ensure all environment variables are documented and validated at startup. +- Configuration rule 251: ensure all environment variables are documented and validated at startup. +- Configuration rule 252: ensure all environment variables are documented and validated at startup. +- Configuration rule 253: ensure all environment variables are documented and validated at startup. +- Configuration rule 254: ensure all environment variables are documented and validated at startup. +- Configuration rule 255: ensure all environment variables are documented and validated at startup. +- Configuration rule 256: ensure all environment variables are documented and validated at startup. +- Configuration rule 257: ensure all environment variables are documented and validated at startup. +- Configuration rule 258: ensure all environment variables are documented and validated at startup. +- Configuration rule 259: ensure all environment variables are documented and validated at startup. +- Configuration rule 260: ensure all environment variables are documented and validated at startup. +- Configuration rule 261: ensure all environment variables are documented and validated at startup. +- Configuration rule 262: ensure all environment variables are documented and validated at startup. +- Configuration rule 263: ensure all environment variables are documented and validated at startup. +- Configuration rule 264: ensure all environment variables are documented and validated at startup. +- Configuration rule 265: ensure all environment variables are documented and validated at startup. +- Configuration rule 266: ensure all environment variables are documented and validated at startup. +- Configuration rule 267: ensure all environment variables are documented and validated at startup. +- Configuration rule 268: ensure all environment variables are documented and validated at startup. +- Configuration rule 269: ensure all environment variables are documented and validated at startup. +- Configuration rule 270: ensure all environment variables are documented and validated at startup. +- Configuration rule 271: ensure all environment variables are documented and validated at startup. +- Configuration rule 272: ensure all environment variables are documented and validated at startup. +- Configuration rule 273: ensure all environment variables are documented and validated at startup. +- Configuration rule 274: ensure all environment variables are documented and validated at startup. +- Configuration rule 275: ensure all environment variables are documented and validated at startup. +- Configuration rule 276: ensure all environment variables are documented and validated at startup. +- Configuration rule 277: ensure all environment variables are documented and validated at startup. +- Configuration rule 278: ensure all environment variables are documented and validated at startup. +- Configuration rule 279: ensure all environment variables are documented and validated at startup. +- Configuration rule 280: ensure all environment variables are documented and validated at startup. +- Configuration rule 281: ensure all environment variables are documented and validated at startup. +- Configuration rule 282: ensure all environment variables are documented and validated at startup. +- Configuration rule 283: ensure all environment variables are documented and validated at startup. +- Configuration rule 284: ensure all environment variables are documented and validated at startup. +- Configuration rule 285: ensure all environment variables are documented and validated at startup. +- Configuration rule 286: ensure all environment variables are documented and validated at startup. +- Configuration rule 287: ensure all environment variables are documented and validated at startup. +- Configuration rule 288: ensure all environment variables are documented and validated at startup. +- Configuration rule 289: ensure all environment variables are documented and validated at startup. +- Configuration rule 290: ensure all environment variables are documented and validated at startup. +- Configuration rule 291: ensure all environment variables are documented and validated at startup. +- Configuration rule 292: ensure all environment variables are documented and validated at startup. +- Configuration rule 293: ensure all environment variables are documented and validated at startup. +- Configuration rule 294: ensure all environment variables are documented and validated at startup. +- Configuration rule 295: ensure all environment variables are documented and validated at startup. +- Configuration rule 296: ensure all environment variables are documented and validated at startup. +- Configuration rule 297: ensure all environment variables are documented and validated at startup. +- Configuration rule 298: ensure all environment variables are documented and validated at startup. +- Configuration rule 299: ensure all environment variables are documented and validated at startup. +- Configuration rule 300: ensure all environment variables are documented and validated at startup. +``` + +### Valid + +```markdown +# Project + +Concise agent instructions that stay well under the 12000 character limit. + +## Commands + +- npm test +- npm build +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-004.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-004.md new file mode 100644 index 00000000..2254cf82 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-004.md @@ -0,0 +1,61 @@ +--- +id: agm-004 +title: "AGM-004: Missing Project Context - AGENTS.md" +sidebar_label: "AGM-004" +description: "agnix rule AGM-004 checks for missing project context in agents.md files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AGM-004", "missing project context", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-004` +- **Severity**: `MEDIUM` +- **Category**: `AGENTS.md` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Build Commands + +Run npm install and npm build. + +## Testing + +Use npm test. +``` + +### Valid + +```markdown +# Project + +This is a web application for task management built with React and Node.js. + +## Build Commands + +Run npm install and npm build. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-005.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-005.md new file mode 100644 index 00000000..92de9408 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-005.md @@ -0,0 +1,68 @@ +--- +id: agm-005 +title: "AGM-005: Platform-Specific Features Without Guard" +sidebar_label: "AGM-005" +description: "agnix rule AGM-005 checks for platform-specific features without guard in agents.md files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AGM-005", "platform-specific features without guard", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-005` +- **Severity**: `MEDIUM` +- **Category**: `AGENTS.md` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +This project uses hooks. + +- type: PreToolExecution + command: echo "test" + +context: fork +agent: reviewer +allowed-tools: Read Write +``` + +### Valid + +```markdown +# Project + +This project uses various tools. + +## Claude Code Specific + +- type: PreToolExecution + command: echo "lint" + +context: fork +agent: security-reviewer +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/agm-006.md b/website/versioned_docs/version-0.47.0/rules/generated/agm-006.md new file mode 100644 index 00000000..0e87fdea --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/agm-006.md @@ -0,0 +1,62 @@ +--- +id: agm-006 +title: "AGM-006: Nested AGENTS.md Hierarchy - AGENTS.md" +sidebar_label: "AGM-006" +description: "agnix rule AGM-006 checks for nested agents.md hierarchy in agents.md files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AGM-006", "nested agents.md hierarchy", "agents.md", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AGM-006` +- **Severity**: `MEDIUM` +- **Category**: `AGENTS.md` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- 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/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Root AGENTS.md + +Project instructions. + +# src/AGENTS.md (nested, separate file) + +Component-specific instructions that create hierarchy ambiguity. +``` + +### Valid + +```markdown +# Project + +Single AGENTS.md at the project root with all instructions. + +## Commands + +- npm test +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/amp-001.md b/website/versioned_docs/version-0.47.0/rules/generated/amp-001.md new file mode 100644 index 00000000..2b4e169e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/amp-001.md @@ -0,0 +1,63 @@ +--- +id: amp-001 +title: "AMP-001: Invalid Amp Check Frontmatter - Amp Checks" +sidebar_label: "AMP-001" +description: "agnix rule AMP-001 checks for invalid amp check frontmatter in amp checks files. Severity: HIGH. See examples and fix guidance." +keywords: ["AMP-001", "invalid amp check frontmatter", "amp checks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AMP-001` +- **Severity**: `HIGH` +- **Category**: `Amp Checks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `amp` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://ampcode.com/manual#code-review-checks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Review security-sensitive changes +unknownKey: true +--- +# Security Review + +Missing required name field. +``` + +### Valid + +```markdown +--- +name: security-review +description: Review security-sensitive changes +severity-default: high +tools: + - rg +--- +# Security Review + +Review auth, secrets, and shell execution paths. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/amp-002.md b/website/versioned_docs/version-0.47.0/rules/generated/amp-002.md new file mode 100644 index 00000000..d6fd3916 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/amp-002.md @@ -0,0 +1,60 @@ +--- +id: amp-002 +title: "AMP-002: Invalid Amp severity-default - Amp Checks" +sidebar_label: "AMP-002" +description: "agnix rule AMP-002 checks for invalid amp severity-default in amp checks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AMP-002", "invalid amp severity-default", "amp checks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AMP-002` +- **Severity**: `MEDIUM` +- **Category**: `Amp Checks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `amp` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://ampcode.com/manual#code-review-checks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: security-review +severity-default: urgent +--- +# Security Review + +Invalid severity-default value. +``` + +### Valid + +```markdown +--- +name: security-review +severity-default: high +--- +# Security Review + +Review auth and secret handling. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/amp-003.md b/website/versioned_docs/version-0.47.0/rules/generated/amp-003.md new file mode 100644 index 00000000..a6ab6d16 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/amp-003.md @@ -0,0 +1,59 @@ +--- +id: amp-003 +title: "AMP-003: Invalid AGENTS.md globs Frontmatter for Amp" +sidebar_label: "AMP-003" +description: "agnix rule AMP-003 checks for invalid agents.md globs frontmatter for amp in amp checks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AMP-003", "invalid agents.md globs frontmatter for amp", "amp checks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AMP-003` +- **Severity**: `MEDIUM` +- **Category**: `Amp Checks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `amp` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://ampcode.com/manual#settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +globs: "[broken" +--- +# AGENTS + +Invalid glob syntax. +``` + +### Valid + +```markdown +--- +globs: + - "src/**/*.rs" +--- +# AGENTS + +Project instructions for Amp. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/amp-004.md b/website/versioned_docs/version-0.47.0/rules/generated/amp-004.md new file mode 100644 index 00000000..0eeff7c4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/amp-004.md @@ -0,0 +1,54 @@ +--- +id: amp-004 +title: "AMP-004: Invalid Amp Settings Configuration - Amp Checks" +sidebar_label: "AMP-004" +description: "agnix rule AMP-004 checks for invalid amp settings configuration in amp checks files. Severity: HIGH. See examples and fix guidance." +keywords: ["AMP-004", "invalid amp settings configuration", "amp checks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AMP-004` +- **Severity**: `HIGH` +- **Category**: `Amp Checks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `amp` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://ampcode.com/manual#settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "model": "amp-default", + "unknownKey": true +} +``` + +### Valid + +```json +{ + "model": "amp-default", + "notify": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/amp-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/amp-sk-001.md new file mode 100644 index 00000000..b8aadfa3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/amp-sk-001.md @@ -0,0 +1,63 @@ +--- +id: amp-sk-001 +title: "AMP-SK-001: Amp Skill Uses Unsupported Field - Amp Skills" +sidebar_label: "AMP-SK-001" +description: "agnix rule AMP-SK-001 checks for amp skill uses unsupported field in amp skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AMP-SK-001", "amp skill uses unsupported field", "amp skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AMP-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Amp Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `amp` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://ampcode.com/manual#agent-skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +model: opus +--- +# My Skill + +Skill instructions here. + +(Note: AMP-SK-001 requires explicit Amp configuration context. The .agents/ directory is mapped to Codex by default.) +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-001.md b/website/versioned_docs/version-0.47.0/rules/generated/as-001.md new file mode 100644 index 00000000..a42e71ff --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-001.md @@ -0,0 +1,53 @@ +--- +id: as-001 +title: "AS-001: Missing Frontmatter - Agent Skills" +sidebar_label: "AS-001" +description: "agnix rule AS-001 checks for missing frontmatter in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-001", "missing frontmatter", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-001` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-08-05` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +No frontmatter here. +Just plain markdown content without YAML delimiters. +``` + +### Valid + +```markdown +--- +name: deploy-app +description: Use when deploying the application to production +--- +Run the deploy script with the correct environment variables. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-002.md b/website/versioned_docs/version-0.47.0/rules/generated/as-002.md new file mode 100644 index 00000000..f47ee329 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-002.md @@ -0,0 +1,55 @@ +--- +id: as-002 +title: "AS-002: Missing Required Field: name - Agent Skills" +sidebar_label: "AS-002" +description: "agnix rule AS-002 checks for missing required field: name in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-002", "missing required field: name", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-002` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Use when linting the codebase +--- +Run eslint on all source files. +``` + +### Valid + +```markdown +--- +name: lint-code +description: Use when linting the codebase +--- +Run eslint on all source files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-003.md b/website/versioned_docs/version-0.47.0/rules/generated/as-003.md new file mode 100644 index 00000000..bb72e4a9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-003.md @@ -0,0 +1,55 @@ +--- +id: as-003 +title: "AS-003: Missing Required Field: description - Agent Skills" +sidebar_label: "AS-003" +description: "agnix rule AS-003 checks for missing required field: description in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-003", "missing required field: description", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-003` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: lint-code +--- +Run eslint on all source files. +``` + +### Valid + +```markdown +--- +name: lint-code +description: Use when linting the codebase +--- +Run eslint on all source files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-004.md b/website/versioned_docs/version-0.47.0/rules/generated/as-004.md new file mode 100644 index 00000000..6de44941 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-004.md @@ -0,0 +1,56 @@ +--- +id: as-004 +title: "AS-004: Invalid Name Format - Agent Skills" +sidebar_label: "AS-004" +description: "agnix rule AS-004 checks for invalid name format in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-004", "invalid name format", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-004` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: Run_Tests! +description: Use when running the test suite +--- +Execute all unit tests. +``` + +### Valid + +```markdown +--- +name: run-tests +description: Use when running the test suite +--- +Execute all unit tests. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-005.md b/website/versioned_docs/version-0.47.0/rules/generated/as-005.md new file mode 100644 index 00000000..962a52d1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-005.md @@ -0,0 +1,56 @@ +--- +id: as-005 +title: "AS-005: Name Starts/Ends with Hyphen - Agent Skills" +sidebar_label: "AS-005" +description: "agnix rule AS-005 checks for name starts/ends with hyphen in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-005", "name starts/ends with hyphen", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-005` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: -build-project- +description: Use when building the project +--- +Run the build script. +``` + +### Valid + +```markdown +--- +name: build-project +description: Use when building the project +--- +Run the build script. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-006.md b/website/versioned_docs/version-0.47.0/rules/generated/as-006.md new file mode 100644 index 00000000..bad5547a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-006.md @@ -0,0 +1,56 @@ +--- +id: as-006 +title: "AS-006: Consecutive Hyphens in Name - Agent Skills" +sidebar_label: "AS-006" +description: "agnix rule AS-006 checks for consecutive hyphens in name in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-006", "consecutive hyphens in name", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-006` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: format--code +description: Use when formatting source code +--- +Run prettier on all files. +``` + +### Valid + +```markdown +--- +name: format-code +description: Use when formatting source code +--- +Run prettier on all files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-008.md b/website/versioned_docs/version-0.47.0/rules/generated/as-008.md new file mode 100644 index 00000000..c7058b89 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-008.md @@ -0,0 +1,56 @@ +--- +id: as-008 +title: "AS-008: Description Too Short - Agent Skills" +sidebar_label: "AS-008" +description: "agnix rule AS-008 checks for description too short in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-008", "description too short", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-008` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: check-deps +description: "" +--- +Run npm outdated. +``` + +### Valid + +```markdown +--- +name: check-deps +description: Use when checking project dependencies for updates +--- +Run npm outdated. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-009.md b/website/versioned_docs/version-0.47.0/rules/generated/as-009.md new file mode 100644 index 00000000..e1ea3131 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-009.md @@ -0,0 +1,56 @@ +--- +id: as-009 +title: "AS-009: Description Contains Angle Brackets (Codex)" +sidebar_label: "AS-009" +description: "agnix rule AS-009 checks for description contains angle brackets (codex) in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-009", "description contains angle brackets (codex)", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-009` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-05-24` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/main/codex-rs/skills/src/assets/samples/skill-creator/scripts/quick_validate.py + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: review-pr +description: Use when reviewing a for +--- +Check the PR for bugs. +``` + +### Valid + +```markdown +--- +name: review-pr +description: Use when reviewing a pull request for issues +--- +Check the PR for bugs. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-011.md b/website/versioned_docs/version-0.47.0/rules/generated/as-011.md new file mode 100644 index 00000000..fb9da917 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-011.md @@ -0,0 +1,58 @@ +--- +id: as-011 +title: "AS-011: Invalid Compatibility Length - Agent Skills" +sidebar_label: "AS-011" +description: "agnix rule AS-011 checks for invalid compatibility length in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-011", "invalid compatibility length", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-011` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: migrate-db +description: Use when running database migrations +compatibility: "" +--- +Run the migration scripts. +``` + +### Valid + +```markdown +--- +name: migrate-db +description: Use when running database migrations +compatibility: Requires PostgreSQL 14+ and Node.js 18+ +--- +Run the migration scripts. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-012.md b/website/versioned_docs/version-0.47.0/rules/generated/as-012.md new file mode 100644 index 00000000..cd3da6e8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-012.md @@ -0,0 +1,66 @@ +--- +id: as-012 +title: "AS-012: Content Exceeds 500 Lines - Agent Skills" +sidebar_label: "AS-012" +description: "agnix rule AS-012 checks for content exceeds 500 lines in agent skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AS-012", "content exceeds 500 lines", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-012` +- **Severity**: `MEDIUM` +- **Category**: `Agent Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-24` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: setup-env +description: Use when setting up the development environment +--- +Step 1: Install Node.js +Step 2: Install npm packages +Step 3: Configure database +Step 4: Set environment variables +Step 5: Run migrations +Step 6: Seed data +Step 7: Start server +Step 8: Verify health check +Step 9: Run smoke tests +Step 10: Done +(imagine this continues for 500+ lines) +``` + +### Valid + +```markdown +--- +name: setup-env +description: Use when setting up the development environment +--- +Install dependencies and configure env vars. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-013.md b/website/versioned_docs/version-0.47.0/rules/generated/as-013.md new file mode 100644 index 00000000..d031dfc1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-013.md @@ -0,0 +1,56 @@ +--- +id: as-013 +title: "AS-013: File Reference Too Deep - Agent Skills" +sidebar_label: "AS-013" +description: "agnix rule AS-013 checks for file reference too deep in agent skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["AS-013", "file reference too deep", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-013` +- **Severity**: `MEDIUM` +- **Category**: `Agent Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: read-config +description: Use when reading project configuration +--- +See references/deep/nested/config.md for details. +``` + +### Valid + +```markdown +--- +name: read-config +description: Use when reading project configuration +--- +See references/config.md for details. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-015.md b/website/versioned_docs/version-0.47.0/rules/generated/as-015.md new file mode 100644 index 00000000..094cd1bc --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-015.md @@ -0,0 +1,56 @@ +--- +id: as-015 +title: "AS-015: Upload Size Exceeds 8MB - Agent Skills" +sidebar_label: "AS-015" +description: "agnix rule AS-015 checks for upload size exceeds 8mb in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-015", "upload size exceeds 8mb", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-015` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://platform.claude.com/docs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: huge-skill +description: Use when running a task with many large assets +--- +This skill bundles 10MB of binary data in its directory. +``` + +### Valid + +```markdown +--- +name: small-skill +description: Use when running a lightweight task +--- +This skill directory is under 8MB total. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-016.md b/website/versioned_docs/version-0.47.0/rules/generated/as-016.md new file mode 100644 index 00000000..04cd46a0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-016.md @@ -0,0 +1,60 @@ +--- +id: as-016 +title: "AS-016: Skill Parse Error - Agent Skills" +sidebar_label: "AS-016" +description: "agnix rule AS-016 checks for skill parse error in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-016", "skill parse error", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-016` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: broken-yaml +description: Use when demonstrating invalid metadata +metadata: + priority: 1 +--- +Body content here. +``` + +### Valid + +```markdown +--- +name: valid-yaml +description: Use when demonstrating valid YAML frontmatter +metadata: + owner: platform +--- +Body content here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/as-017.md b/website/versioned_docs/version-0.47.0/rules/generated/as-017.md new file mode 100644 index 00000000..ceda464a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/as-017.md @@ -0,0 +1,57 @@ +--- +id: as-017 +title: "AS-017: Name Must Match Parent Directory - Agent Skills" +sidebar_label: "AS-017" +description: "agnix rule AS-017 checks for name must match parent directory in agent skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["AS-017", "name must match parent directory", "agent skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `AS-017` +- **Severity**: `HIGH` +- **Category**: `Agent Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `1.0` + +## Evidence Sources + +- https://agentskills.io/specification +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: deploy-helper +description: Use when validating deployment checks +--- +This file is stored in code-review/SKILL.md. +``` + +### Valid + +```markdown +--- +name: code-review +description: Use when reviewing pull requests +--- +Review changed files and report findings. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-001.md new file mode 100644 index 00000000..4186d405 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-001.md @@ -0,0 +1,55 @@ +--- +id: cc-ag-001 +title: "CC-AG-001: Missing Name Field - Claude Agents" +sidebar_label: "CC-AG-001" +description: "agnix rule CC-AG-001 checks for missing name field in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-001", "missing name field", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-001` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Reviews pull requests for quality +--- +Review code changes and provide feedback. +``` + +### Valid + +```markdown +--- +name: code-reviewer +description: Reviews pull requests for quality +--- +Review code changes and provide feedback. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-002.md new file mode 100644 index 00000000..35b33f97 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-002.md @@ -0,0 +1,55 @@ +--- +id: cc-ag-002 +title: "CC-AG-002: Missing Description Field - Claude Agents" +sidebar_label: "CC-AG-002" +description: "agnix rule CC-AG-002 checks for missing description field in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-002", "missing description field", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-002` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: code-reviewer +--- +Review code changes and provide feedback. +``` + +### Valid + +```markdown +--- +name: code-reviewer +description: Reviews pull requests for quality +--- +Review code changes and provide feedback. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-003.md new file mode 100644 index 00000000..e66f699b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-003.md @@ -0,0 +1,59 @@ +--- +id: cc-ag-003 +title: "CC-AG-003: Invalid Model Value - Claude Agents" +sidebar_label: "CC-AG-003" +description: "agnix rule CC-AG-003 checks for invalid model value in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-003", "invalid model value", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-003` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents +- https://code.claude.com/docs/en/model-config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: code-reviewer +description: Reviews code +model: gpt-4 +--- +Review code changes. +``` + +### Valid + +```markdown +--- +name: code-reviewer +description: Reviews code +model: sonnet +--- +Review code changes. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-004.md new file mode 100644 index 00000000..cc3245d4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-004.md @@ -0,0 +1,59 @@ +--- +id: cc-ag-004 +title: "CC-AG-004: Invalid Permission Mode - Claude Agents" +sidebar_label: "CC-AG-004" +description: "agnix rule CC-AG-004 checks for invalid permission mode in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-004", "invalid permission mode", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-004` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents +- https://code.claude.com/docs/en/permission-modes + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: code-reviewer +description: Reviews code +permissionMode: yolo +--- +Review code changes. +``` + +### Valid + +```markdown +--- +name: code-reviewer +description: Reviews code +permissionMode: acceptEdits +--- +Review code changes. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-005.md new file mode 100644 index 00000000..a4f6436e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-005.md @@ -0,0 +1,60 @@ +--- +id: cc-ag-005 +title: "CC-AG-005: Referenced Skill Not Found - Claude Agents" +sidebar_label: "CC-AG-005" +description: "agnix rule CC-AG-005 checks for referenced skill not found in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-005", "referenced skill not found", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-005` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: code-reviewer +description: Reviews code +skills: + - nonexistent-skill +--- +Review code changes. +``` + +### Valid + +```markdown +--- +name: code-reviewer +description: Reviews code +skills: + - code-review +--- +Review code changes. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-006.md new file mode 100644 index 00000000..efbc9b98 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-006.md @@ -0,0 +1,66 @@ +--- +id: cc-ag-006 +title: "CC-AG-006: Tool/Disallowed Conflict - Claude Agents" +sidebar_label: "CC-AG-006" +description: "agnix rule CC-AG-006 checks for tool/disallowed conflict in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-006", "tool/disallowed conflict", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-006` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: conflict-agent +description: Agent with conflicting tool lists +tools: + - Read + - Bash +disallowedTools: + - Bash +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: safe-agent +description: Agent with separate tool lists +tools: + - Read + - Grep +disallowedTools: + - Bash +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-007.md new file mode 100644 index 00000000..40812d4b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-007.md @@ -0,0 +1,55 @@ +--- +id: cc-ag-007 +title: "CC-AG-007: Agent Parse Error - Claude Agents" +sidebar_label: "CC-AG-007" +description: "agnix rule CC-AG-007 checks for agent parse error in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-007", "agent parse error", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-007` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +name: my-agent +description: Missing the --- delimiters + +Agent instructions here. +``` + +### Valid + +```markdown +--- +name: my-agent +description: A working agent +--- +Agent instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-008.md new file mode 100644 index 00000000..c629d6ea --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-008.md @@ -0,0 +1,58 @@ +--- +id: cc-ag-008 +title: "CC-AG-008: Invalid Memory Scope - Claude Agents" +sidebar_label: "CC-AG-008" +description: "agnix rule CC-AG-008 checks for invalid memory scope in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-008", "invalid memory scope", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-008` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with invalid memory +memory: global +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with valid memory +memory: project +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-009.md new file mode 100644 index 00000000..2b2b0490 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-009.md @@ -0,0 +1,64 @@ +--- +id: cc-ag-009 +title: "CC-AG-009: Invalid Tool Name in Tools List - Claude Agents" +sidebar_label: "CC-AG-009" +description: "agnix rule CC-AG-009 checks for invalid tool name in tools list in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-009", "invalid tool name in tools list", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-009` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents +- https://code.claude.com/docs/en/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with unknown tool +tools: + - Read + - MakeFile +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with valid tools +tools: + - Read + - Write + - Bash +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-010.md new file mode 100644 index 00000000..05d2c3bd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-010.md @@ -0,0 +1,63 @@ +--- +id: cc-ag-010 +title: "CC-AG-010: Invalid Tool Name in DisallowedTools" +sidebar_label: "CC-AG-010" +description: "agnix rule CC-AG-010 checks for invalid tool name in disallowedtools in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-010", "invalid tool name in disallowedtools", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-010` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents +- https://code.claude.com/docs/en/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with unknown disallowed tool +disallowedTools: + - Bash + - RunCode +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with valid disallowed tools +disallowedTools: + - Bash + - WebFetch +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-011.md new file mode 100644 index 00000000..13f3c8dc --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-011.md @@ -0,0 +1,68 @@ +--- +id: cc-ag-011 +title: "CC-AG-011: Invalid Hooks in Agent Frontmatter" +sidebar_label: "CC-AG-011" +description: "agnix rule CC-AG-011 checks for invalid hooks in agent frontmatter in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-011", "invalid hooks in agent frontmatter", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-011` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with invalid hooks +hooks: + InvalidEvent: + - matcher: Bash + hooks: + - type: command + command: echo ok +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with valid hooks +hooks: + PreToolUse: + - matcher: Bash + hooks: + - type: command + command: echo ok +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-012.md new file mode 100644 index 00000000..3cf48fae --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-012.md @@ -0,0 +1,58 @@ +--- +id: cc-ag-012 +title: "CC-AG-012: Bypass Permissions Warning - Claude Agents" +sidebar_label: "CC-AG-012" +description: "agnix rule CC-AG-012 checks for bypass permissions warning in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-012", "bypass permissions warning", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-012` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with dangerous permissions +permissionMode: bypassPermissions +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with safe permissions +permissionMode: default +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-013.md new file mode 100644 index 00000000..cb3fa994 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-013.md @@ -0,0 +1,62 @@ +--- +id: cc-ag-013 +title: "CC-AG-013: Invalid Skill Name Format - Claude Agents" +sidebar_label: "CC-AG-013" +description: "agnix rule CC-AG-013 checks for invalid skill name format in claude agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-AG-013", "invalid skill name format", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-013` +- **Severity**: `MEDIUM` +- **Category**: `Claude Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +description: Agent with invalid skill name format +skills: + - Code_Review + - --bad-name +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: Agent with valid skill names +skills: + - code-review + - deploy-prod +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-014.md new file mode 100644 index 00000000..0d64a37d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-014.md @@ -0,0 +1,56 @@ +--- +id: cc-ag-014 +title: "CC-AG-014: Invalid Effort Value - Claude Agents" +sidebar_label: "CC-AG-014" +description: "agnix rule CC-AG-014 checks for invalid effort value in claude agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-AG-014", "invalid effort value", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-014` +- **Severity**: `MEDIUM` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +effort: maximum +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +effort: high +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-015.md new file mode 100644 index 00000000..7d744e75 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-015.md @@ -0,0 +1,56 @@ +--- +id: cc-ag-015 +title: "CC-AG-015: Invalid Isolation Value - Claude Agents" +sidebar_label: "CC-AG-015" +description: "agnix rule CC-AG-015 checks for invalid isolation value in claude agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-AG-015", "invalid isolation value", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-015` +- **Severity**: `MEDIUM` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +isolation: partial +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +isolation: full +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-017.md new file mode 100644 index 00000000..1b46c0e6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-017.md @@ -0,0 +1,56 @@ +--- +id: cc-ag-017 +title: "CC-AG-017: Invalid MaxTurns Value - Claude Agents" +sidebar_label: "CC-AG-017" +description: "agnix rule CC-AG-017 checks for invalid maxturns value in claude agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-AG-017", "invalid maxturns value", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-017` +- **Severity**: `MEDIUM` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +max-turns: "ten" +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +max-turns: 10 +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-019.md new file mode 100644 index 00000000..1949756d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-019.md @@ -0,0 +1,56 @@ +--- +id: cc-ag-019 +title: "CC-AG-019: Unknown Agent Frontmatter Field - Claude Agents" +sidebar_label: "CC-AG-019" +description: "agnix rule CC-AG-019 checks for unknown agent frontmatter field in claude agents files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-AG-019", "unknown agent frontmatter field", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-019` +- **Severity**: `LOW` +- **Category**: `Claude Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-agent +priority: high +--- +Agent instructions. +``` + +### Valid + +```markdown +--- +name: my-agent +description: A helpful agent +--- +Agent instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-020.md new file mode 100644 index 00000000..653ce44b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-ag-020.md @@ -0,0 +1,57 @@ +--- +id: cc-ag-020 +title: "CC-AG-020: Reserved Colon in Agent Name - Claude Agents" +sidebar_label: "CC-AG-020" +description: "agnix rule CC-AG-020 checks for reserved colon in agent name in claude agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-AG-020", "reserved colon in agent name", "claude agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-AG-020` +- **Severity**: `HIGH` +- **Category**: `Claude Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.218` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.218 +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: plugin:reviewer +description: Reviews code +--- +Review the change. +``` + +### Valid + +```markdown +--- +name: reviewer +description: Reviews code +--- +Review the change. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-001.md new file mode 100644 index 00000000..eda40a98 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-001.md @@ -0,0 +1,71 @@ +--- +id: cc-hk-001 +title: "CC-HK-001: Invalid Hook Event - Claude Hooks" +sidebar_label: "CC-HK-001" +description: "agnix rule CC-HK-001 checks for invalid hook event in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-001", "invalid hook event", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-001` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks +- https://github.com/anthropics/claude-code/releases/tag/v2.1.219 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "OnBeforeTool": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo hello", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo pre-tool", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-002.md new file mode 100644 index 00000000..9468a9d5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-002.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-002 +title: "CC-HK-002: Prompt Hook on Wrong Event - Claude Hooks" +sidebar_label: "CC-HK-002" +description: "agnix rule CC-HK-002 checks for prompt hook on wrong event in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-002", "prompt hook on wrong event", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-002` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "SessionStart": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Check session start", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PostToolBatch": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Review the completed tool batch: $ARGUMENTS", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-003.md new file mode 100644 index 00000000..940eb7f0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-003.md @@ -0,0 +1,69 @@ +--- +id: cc-hk-003 +title: "CC-HK-003: Matcher Hint for Tool Events - Claude Hooks" +sidebar_label: "CC-HK-003" +description: "agnix rule CC-HK-003 checks for matcher hint for tool events in claude hooks files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-HK-003", "matcher hint for tool events", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-003` +- **Severity**: `LOW` +- **Category**: `Claude Hooks` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-004.md new file mode 100644 index 00000000..a69d7b96 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-004.md @@ -0,0 +1,69 @@ +--- +id: cc-hk-004 +title: "CC-HK-004: Matcher on Unsupported Event - Claude Hooks" +sidebar_label: "CC-HK-004" +description: "agnix rule CC-HK-004 checks for matcher on unsupported event in claude hooks files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-HK-004", "matcher on unsupported event", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-004` +- **Severity**: `LOW` +- **Category**: `Claude Hooks` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PostToolBatch": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo batch done", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PostToolBatch": [ + { + "hooks": [ + { "type": "command", "command": "echo batch done", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-005.md new file mode 100644 index 00000000..406f1a3d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-005.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-005 +title: "CC-HK-005: Missing Type Field - Claude Hooks" +sidebar_label: "CC-HK-005" +description: "agnix rule CC-HK-005 checks for missing type field in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-005", "missing type field", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-005` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "command": "echo missing type field" } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "command": "echo done", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-006.md new file mode 100644 index 00000000..1362bf5b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-006.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-006 +title: "CC-HK-006: Missing Command Field - Claude Hooks" +sidebar_label: "CC-HK-006" +description: "agnix rule CC-HK-006 checks for missing command field in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-006", "missing command field", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-006` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "command": "echo done", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-007.md new file mode 100644 index 00000000..88655f0d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-007.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-007 +title: "CC-HK-007: Missing Prompt Field - Claude Hooks" +sidebar_label: "CC-HK-007" +description: "agnix rule CC-HK-007 checks for missing prompt field in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-007", "missing prompt field", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-007` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Summarize what was done", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-008.md new file mode 100644 index 00000000..ff1e9fa8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-008.md @@ -0,0 +1,70 @@ +--- +id: cc-hk-008 +title: "CC-HK-008: Script File Not Found - Claude Hooks" +sidebar_label: "CC-HK-008" +description: "agnix rule CC-HK-008 checks for script file not found in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-008", "script file not found", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-008` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "./scripts/nonexistent-hook.sh", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo inline check", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-009.md new file mode 100644 index 00000000..6e0b4422 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-009.md @@ -0,0 +1,70 @@ +--- +id: cc-hk-009 +title: "CC-HK-009: Dangerous Command Pattern - Claude Hooks" +sidebar_label: "CC-HK-009" +description: "agnix rule CC-HK-009 checks for dangerous command pattern in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-009", "dangerous command pattern", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-009` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/tree/main/.claude/commands + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "rm -rf /", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo $TOOL_INPUT | jq .command", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-010.md new file mode 100644 index 00000000..d44fdc72 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-010.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-010 +title: "CC-HK-010: Timeout Policy - Claude Hooks" +sidebar_label: "CC-HK-010" +description: "agnix rule CC-HK-010 checks for timeout policy in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-010", "timeout policy", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-010` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "agent", "prompt": "Review: $ARGUMENTS", "timeout": 120 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "agent", "prompt": "Review: $ARGUMENTS", "timeout": 60 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-011.md new file mode 100644 index 00000000..8a4fa310 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-011.md @@ -0,0 +1,70 @@ +--- +id: cc-hk-011 +title: "CC-HK-011: Invalid Timeout Value - Claude Hooks" +sidebar_label: "CC-HK-011" +description: "agnix rule CC-HK-011 checks for invalid timeout value in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-011", "invalid timeout value", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-011` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": -5 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-012.md new file mode 100644 index 00000000..a83bea25 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-012.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-012 +title: "CC-HK-012: Hooks Parse Error - Claude Hooks" +sidebar_label: "CC-HK-012" +description: "agnix rule CC-HK-012 checks for hooks parse error in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-012", "hooks parse error", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-012` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + hooks: [ + { type: command } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "command": "echo bye", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-013.md new file mode 100644 index 00000000..2094eb09 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-013.md @@ -0,0 +1,69 @@ +--- +id: cc-hk-013 +title: "CC-HK-013: Async on Non-Command Hook - Claude Hooks" +sidebar_label: "CC-HK-013" +description: "agnix rule CC-HK-013 checks for async on non-command hook in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-013", "async on non-command hook", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-013` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Summarize", "async": true, "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-014.md new file mode 100644 index 00000000..81747841 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-014.md @@ -0,0 +1,70 @@ +--- +id: cc-hk-014 +title: "CC-HK-014: Once Outside Skill/Agent Frontmatter" +sidebar_label: "CC-HK-014" +description: "agnix rule CC-HK-014 checks for once outside skill/agent frontmatter in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-014", "once outside skill/agent frontmatter", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-014` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "once": true, "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-015.md new file mode 100644 index 00000000..d4a147aa --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-015.md @@ -0,0 +1,69 @@ +--- +id: cc-hk-015 +title: "CC-HK-015: Model on Command Hook - Claude Hooks" +sidebar_label: "CC-HK-015" +description: "agnix rule CC-HK-015 checks for model on command hook in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-015", "model on command hook", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-015` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "PreToolUse": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo ok", "model": "haiku", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Summarize", "model": "haiku", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-016.md new file mode 100644 index 00000000..6cddc22e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-016.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-016 +title: "CC-HK-016: Validate Hook Type Agent - Claude Hooks" +sidebar_label: "CC-HK-016" +description: "agnix rule CC-HK-016 checks for validate hook type agent in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-016", "validate hook type agent", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-016` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "webhook", "url": "https://example.com", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "command", "command": "echo done", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-017.md new file mode 100644 index 00000000..fd3313e4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-017.md @@ -0,0 +1,68 @@ +--- +id: cc-hk-017 +title: "CC-HK-017: Prompt/Agent Hook Missing $ARGUMENTS" +sidebar_label: "CC-HK-017" +description: "agnix rule CC-HK-017 checks for prompt/agent hook missing $arguments in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-017", "prompt/agent hook missing $arguments", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-017` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Summarize what was done", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Stop": [ + { + "hooks": [ + { "type": "prompt", "prompt": "Summarize: $ARGUMENTS", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-018.md new file mode 100644 index 00000000..009b990e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-018.md @@ -0,0 +1,69 @@ +--- +id: cc-hk-018 +title: "CC-HK-018: Matcher on Ignored Event - Claude Hooks" +sidebar_label: "CC-HK-018" +description: "agnix rule CC-HK-018 checks for matcher on ignored event in claude hooks files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-HK-018", "matcher on ignored event", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-018` +- **Severity**: `LOW` +- **Category**: `Claude Hooks` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "TaskCompleted": [ + { + "matcher": "Bash", + "hooks": [ + { "type": "command", "command": "echo task complete", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "TaskCompleted": [ + { + "hooks": [ + { "type": "command", "command": "echo task complete", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-020.md new file mode 100644 index 00000000..7b8742c5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-020.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-020 +title: "CC-HK-020: HTTP Hook Missing URL - Claude Hooks" +sidebar_label: "CC-HK-020" +description: "agnix rule CC-HK-020 checks for http hook missing url in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-020", "http hook missing url", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-020` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "http", "timeout": 30 } +``` + +### Valid + +```json +{ "type": "http", "url": "https://example.com/hook", "timeout": 30 } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-021.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-021.md new file mode 100644 index 00000000..76d4d5e6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-021.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-021 +title: "CC-HK-021: Invalid If Field - Claude Hooks" +sidebar_label: "CC-HK-021" +description: "agnix rule CC-HK-021 checks for invalid if field in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-021", "invalid if field", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-021` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "command", "command": "npm test", "if": "" } +``` + +### Valid + +```json +{ "type": "command", "command": "npm test", "if": "Bash(npm test)" } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-022.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-022.md new file mode 100644 index 00000000..4246a64b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-022.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-022 +title: "CC-HK-022: Invalid Shell Value - Claude Hooks" +sidebar_label: "CC-HK-022" +description: "agnix rule CC-HK-022 checks for invalid shell value in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-022", "invalid shell value", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-022` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "command", "command": "echo hi", "shell": "zsh" } +``` + +### Valid + +```json +{ "type": "command", "command": "echo hi", "shell": "bash" } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-023.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-023.md new file mode 100644 index 00000000..a75b4b7e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-023.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-023 +title: "CC-HK-023: Once Field Not Boolean - Claude Hooks" +sidebar_label: "CC-HK-023" +description: "agnix rule CC-HK-023 checks for once field not boolean in claude hooks files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-HK-023", "once field not boolean", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-023` +- **Severity**: `LOW` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "command", "command": "echo hi", "once": "yes" } +``` + +### Valid + +```json +{ "type": "command", "command": "echo hi", "once": true } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-024.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-024.md new file mode 100644 index 00000000..7588b512 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-024.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-024 +title: "CC-HK-024: Headers Missing AllowedEnvVars - Claude Hooks" +sidebar_label: "CC-HK-024" +description: "agnix rule CC-HK-024 checks for headers missing allowedenvvars in claude hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-HK-024", "headers missing allowedenvvars", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-024` +- **Severity**: `MEDIUM` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "http", "url": "https://ex.com", "headers": { "Authorization": "$TOKEN" } } +``` + +### Valid + +```json +{ "type": "http", "url": "https://ex.com", "headers": { "Authorization": "$TOKEN" }, "allowedEnvVars": ["TOKEN"] } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-025.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-025.md new file mode 100644 index 00000000..89d509f0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-025.md @@ -0,0 +1,70 @@ +--- +id: cc-hk-025 +title: "CC-HK-025: Invalid Matcher Value - Claude Hooks" +sidebar_label: "CC-HK-025" +description: "agnix rule CC-HK-025 checks for invalid matcher value in claude hooks files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-HK-025", "invalid matcher value", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-025` +- **Severity**: `LOW` +- **Category**: `Claude Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-02` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "Notification": [ + { + "matcher": "unknown_notification", + "hooks": [ + { "type": "command", "command": "echo agent finished", "timeout": 30 } + ] + } + ] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "Notification": [ + { + "matcher": "agent_completed", + "hooks": [ + { "type": "command", "command": "echo agent finished", "timeout": 30 } + ] + } + ] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-026.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-026.md new file mode 100644 index 00000000..8b6384df --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-026.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-026 +title: "CC-HK-026: MCP Tool Hook Missing Server - Claude Hooks" +sidebar_label: "CC-HK-026" +description: "agnix rule CC-HK-026 checks for mcp tool hook missing server in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-026", "mcp tool hook missing server", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-026` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "mcp_tool", "tool": "security_scan" } +``` + +### Valid + +```json +{ "type": "mcp_tool", "server": "my_server", "tool": "security_scan" } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-027.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-027.md new file mode 100644 index 00000000..8bdb3916 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-027.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-027 +title: "CC-HK-027: MCP Tool Hook Missing Tool - Claude Hooks" +sidebar_label: "CC-HK-027" +description: "agnix rule CC-HK-027 checks for mcp tool hook missing tool in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-027", "mcp tool hook missing tool", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-027` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "mcp_tool", "server": "my_server" } +``` + +### Valid + +```json +{ "type": "mcp_tool", "server": "my_server", "tool": "security_scan" } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-028.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-028.md new file mode 100644 index 00000000..8ebf341a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-hk-028.md @@ -0,0 +1,48 @@ +--- +id: cc-hk-028 +title: "CC-HK-028: Rejected user_config Interpolation in Shell-Form Command" +sidebar_label: "CC-HK-028" +description: "agnix rule CC-HK-028 checks for rejected user_config interpolation in shell-form command in claude hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-HK-028", "rejected user_config interpolation in shell-form command", "claude hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-HK-028` +- **Severity**: `HIGH` +- **Category**: `Claude Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.207` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ "type": "command", "command": "my-script ${user_config.api_key}" } +``` + +### Valid + +```json +{ "type": "command", "command": "my-script $CLAUDE_PLUGIN_OPTION_API_KEY" } +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-001.md new file mode 100644 index 00000000..00437d0c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-001.md @@ -0,0 +1,55 @@ +--- +id: cc-mem-001 +title: "CC-MEM-001: Invalid Import Path - Claude Memory" +sidebar_label: "CC-MEM-001" +description: "agnix rule CC-MEM-001 checks for invalid import path in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-001", "invalid import path", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-001` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project Memory + +See @docs/nonexistent-guide.md for the coding standards. + +Always run tests before committing. +``` + +### Valid + +```markdown +# Project Memory + +Always run tests before committing. +Follow the coding standards in the docs/ directory. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-002.md new file mode 100644 index 00000000..072cfdc6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-002.md @@ -0,0 +1,57 @@ +--- +id: cc-mem-002 +title: "CC-MEM-002: Circular Import - Claude Memory" +sidebar_label: "CC-MEM-002" +description: "agnix rule CC-MEM-002 checks for circular import in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-002", "circular import", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-002` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project Memory + +@import ./CLAUDE.md + +This file imports itself, creating a circular dependency. +``` + +### Valid + +```markdown +# Project Memory + +@import ./docs/style.md +@import ./docs/testing.md + +Follow these standards. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-003.md new file mode 100644 index 00000000..e4a66c19 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-003.md @@ -0,0 +1,56 @@ +--- +id: cc-mem-003 +title: "CC-MEM-003: Import Depth Exceeds 4 - Claude Memory" +sidebar_label: "CC-MEM-003" +description: "agnix rule CC-MEM-003 checks for import depth exceeds 4 in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-003", "import depth exceeds 4", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-003` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project Memory + +@import ./level1.md + +This starts a chain: level1 -> level2 -> level3 -> level4 -> level5 -> level6 (exceeds depth 5). +``` + +### Valid + +```markdown +# Project Memory + +@import ./docs/guidelines.md + +Keep import chains shallow. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-004.md new file mode 100644 index 00000000..6066ee34 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-004.md @@ -0,0 +1,57 @@ +--- +id: cc-mem-004 +title: "CC-MEM-004: Invalid Command Reference - Claude Memory" +sidebar_label: "CC-MEM-004" +description: "agnix rule CC-MEM-004 checks for invalid command reference in claude memory files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-MEM-004", "invalid command reference", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-004` +- **Severity**: `MEDIUM` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/tree/main/.claude/commands + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Commands + +Run tests with `npm run nonexistent` + +(Requires package.json with scripts section in the same directory for this rule to trigger) +``` + +### Valid + +```markdown +# Commands + +Run tests with `npm run test` +Build with `npm run build` + +(Valid when package.json has test and build scripts) +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-005.md new file mode 100644 index 00000000..7a7c011a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-005.md @@ -0,0 +1,53 @@ +--- +id: cc-mem-005 +title: "CC-MEM-005: Generic Instruction - Claude Memory" +sidebar_label: "CC-MEM-005" +description: "agnix rule CC-MEM-005 checks for generic instruction in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-005", "generic instruction", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-005` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/tree/main/.claude/commands +- https://arxiv.org/abs/2201.11903 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +Be helpful and accurate when responding. +Always provide the best possible answer. +``` + +### Valid + +```markdown +# Project Rules + +Always use TypeScript strict mode. +Run `cargo test` before committing. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-006.md new file mode 100644 index 00000000..08a73c4b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-006.md @@ -0,0 +1,52 @@ +--- +id: cc-mem-006 +title: "CC-MEM-006: Negative Without Positive - Claude Memory" +sidebar_label: "CC-MEM-006" +description: "agnix rule CC-MEM-006 checks for negative without positive in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-006", "negative without positive", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-006` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://arxiv.org/abs/2201.11903 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules + +Never use var in JavaScript. +``` + +### Valid + +```markdown +# Rules + +Never use var in JavaScript, instead prefer const or let. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-007.md new file mode 100644 index 00000000..faa77cac --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-007.md @@ -0,0 +1,52 @@ +--- +id: cc-mem-007 +title: "CC-MEM-007: Weak Constraint Language - Claude Memory" +sidebar_label: "CC-MEM-007" +description: "agnix rule CC-MEM-007 checks for weak constraint language in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-007", "weak constraint language", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-007` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://arxiv.org/abs/2201.11903 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Critical Rules + +You should follow the coding style guide. +``` + +### Valid + +```markdown +# Critical Rules + +You must follow the coding style guide. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-008.md new file mode 100644 index 00000000..67d17a6d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-008.md @@ -0,0 +1,98 @@ +--- +id: cc-mem-008 +title: "CC-MEM-008: Critical Content in Middle - Claude Memory" +sidebar_label: "CC-MEM-008" +description: "agnix rule CC-MEM-008 checks for critical content in middle in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-008", "critical content in middle", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-008` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://aclanthology.org/2024.tacl-1.9/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +## Setup + +Install dependencies with npm install. + +## Architecture + +The project uses a monorepo structure. + +## Testing + +Run unit tests with npm test. + +IMPORTANT: Always run tests before committing. + +## Deployment + +Deploy to staging first. + +## Monitoring + +Check dashboards after deploy. + +## Cleanup + +Remove temp files after build. +``` + +### Valid + +```markdown +# Critical Rules + +IMPORTANT: Always run tests before committing. + +## Setup + +Install dependencies with npm install. + +## Architecture + +The project uses a monorepo structure. + +## Testing + +Run unit tests. + +## Deployment + +Deploy to staging. + +## Monitoring + +Check dashboards. + +## Cleanup + +Remove temp files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-009.md new file mode 100644 index 00000000..8252a208 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-009.md @@ -0,0 +1,202 @@ +--- +id: cc-mem-009 +title: "CC-MEM-009: Token Count Exceeded - Claude Memory" +sidebar_label: "CC-MEM-009" +description: "agnix rule CC-MEM-009 checks for token count exceeded in claude memory files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-MEM-009", "token count exceeded", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-009` +- **Severity**: `MEDIUM` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project Rules +- Follow coding standard rule 1: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 2: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 3: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 4: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 5: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 6: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 7: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 8: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 9: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 10: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 11: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 12: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 13: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 14: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 15: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 16: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 17: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 18: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 19: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 20: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 21: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 22: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 23: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 24: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 25: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 26: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 27: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 28: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 29: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 30: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 31: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 32: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 33: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 34: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 35: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 36: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 37: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 38: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 39: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 40: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 41: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 42: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 43: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 44: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 45: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 46: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 47: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 48: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 49: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 50: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 51: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 52: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 53: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 54: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 55: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 56: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 57: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 58: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 59: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 60: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 61: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 62: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 63: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 64: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 65: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 66: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 67: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 68: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 69: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 70: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 71: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 72: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 73: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 74: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 75: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 76: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 77: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 78: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 79: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 80: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 81: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 82: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 83: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 84: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 85: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 86: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 87: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 88: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 89: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 90: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 91: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 92: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 93: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 94: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 95: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 96: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 97: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 98: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 99: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 100: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 101: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 102: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 103: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 104: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 105: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 106: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 107: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 108: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 109: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 110: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 111: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 112: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 113: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 114: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 115: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 116: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 117: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 118: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 119: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 120: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 121: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 122: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 123: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 124: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 125: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 126: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 127: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 128: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 129: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 130: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 131: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 132: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 133: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 134: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 135: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 136: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 137: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 138: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 139: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 140: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 141: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 142: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 143: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 144: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 145: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 146: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 147: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 148: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 149: use consistent naming conventions and document all public APIs. +- Follow coding standard rule 150: use consistent naming conventions and document all public APIs. +``` + +### Valid + +```markdown +# Project Rules + +Use TypeScript strict mode. +Run tests before committing. +Follow the style guide. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-010.md new file mode 100644 index 00000000..6f9bfc06 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-010.md @@ -0,0 +1,56 @@ +--- +id: cc-mem-010 +title: "CC-MEM-010: README Duplication - Claude Memory" +sidebar_label: "CC-MEM-010" +description: "agnix rule CC-MEM-010 checks for readme duplication in claude memory files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-MEM-010", "readme duplication", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-010` +- **Severity**: `MEDIUM` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/tree/main/.claude/commands + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# My Project + +This project validates agent configurations using Rust for performance. + +(Content duplicated verbatim from README.md) +``` + +### Valid + +```markdown +# Project Memory + +Project-specific agent instructions: +- Always run tests before committing +- Use feature branches for changes +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-011.md new file mode 100644 index 00000000..65f43a41 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-011.md @@ -0,0 +1,61 @@ +--- +id: cc-mem-011 +title: "CC-MEM-011: Invalid Paths Glob in Rules - Claude Memory" +sidebar_label: "CC-MEM-011" +description: "agnix rule CC-MEM-011 checks for invalid paths glob in rules in claude memory files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-MEM-011", "invalid paths glob in rules", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-011` +- **Severity**: `HIGH` +- **Category**: `Claude Memory` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +paths: + - "[unclosed" +--- +# TypeScript Guidelines + +Always use strict mode. +``` + +### Valid + +```markdown +--- +paths: + - "src/**/*.ts" + - "lib/**/*.js" +--- +# TypeScript Guidelines + +Always use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-012.md new file mode 100644 index 00000000..521eeba2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-012.md @@ -0,0 +1,62 @@ +--- +id: cc-mem-012 +title: "CC-MEM-012: Rules File Unknown Frontmatter Key" +sidebar_label: "CC-MEM-012" +description: "agnix rule CC-MEM-012 checks for rules file unknown frontmatter key in claude memory files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-MEM-012", "rules file unknown frontmatter key", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-012` +- **Severity**: `MEDIUM` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +paths: + - "src/**/*.ts" +description: "some rule" +alwaysApply: true +--- +# TypeScript Guidelines + +Always use strict mode. +``` + +### Valid + +```markdown +--- +paths: + - "src/**/*.ts" +--- +# TypeScript Guidelines + +Always use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-014.md new file mode 100644 index 00000000..d0b5240c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-mem-014.md @@ -0,0 +1,52 @@ +--- +id: cc-mem-014 +title: "CC-MEM-014: CLAUDE.md Exceeds Line Limit - Claude Memory" +sidebar_label: "CC-MEM-014" +description: "agnix rule CC-MEM-014 checks for claude.md exceeds line limit in claude memory files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-MEM-014", "claude.md exceeds line limit", "claude memory", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-MEM-014` +- **Severity**: `MEDIUM` +- **Category**: `Claude Memory` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +(200+ lines of instructions that exceed recommended limits) +``` + +### Valid + +```markdown +# Project + +Keep CLAUDE.md concise and focused. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-001.md new file mode 100644 index 00000000..ec549dd9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-001.md @@ -0,0 +1,55 @@ +--- +id: cc-os-001 +title: "CC-OS-001: Output Style Missing Description" +sidebar_label: "CC-OS-001" +description: "agnix rule CC-OS-001 checks for output style missing description in claude-output-styles files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-OS-001", "output style missing description", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-001` +- **Severity**: `LOW` +- **Category**: `claude-output-styles` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: Concise +--- +Be brief. +``` + +### Valid + +```text +--- +name: Concise +description: Short, direct replies +--- +Be brief. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-002.md new file mode 100644 index 00000000..9c47cc98 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-002.md @@ -0,0 +1,58 @@ +--- +id: cc-os-002 +title: "CC-OS-002: Output Style Invalid keep-coding-instructions Type" +sidebar_label: "CC-OS-002" +description: "agnix rule CC-OS-002 checks for output style invalid keep-coding-instructions type in claude-output-styles files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-OS-002", "output style invalid keep-coding-instructions type", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-002` +- **Severity**: `HIGH` +- **Category**: `claude-output-styles` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: Concise +description: Short replies +keep-coding-instructions: "yes" +--- +Be brief. +``` + +### Valid + +```text +--- +name: Concise +description: Short replies +keep-coding-instructions: true +--- +Be brief. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-003.md new file mode 100644 index 00000000..73362c22 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-003.md @@ -0,0 +1,58 @@ +--- +id: cc-os-003 +title: "CC-OS-003: Output Style Unknown Frontmatter Key" +sidebar_label: "CC-OS-003" +description: "agnix rule CC-OS-003 checks for output style unknown frontmatter key in claude-output-styles files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-OS-003", "output style unknown frontmatter key", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-003` +- **Severity**: `MEDIUM` +- **Category**: `claude-output-styles` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: Concise +description: Short replies +alwaysApply: true +--- +Be brief. +``` + +### Valid + +```text +--- +name: Concise +description: Short replies +keep-coding-instructions: false +--- +Be brief. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-004.md new file mode 100644 index 00000000..ecf70b4f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-004.md @@ -0,0 +1,55 @@ +--- +id: cc-os-004 +title: "CC-OS-004: Output Style Empty Body - claude-output-styles" +sidebar_label: "CC-OS-004" +description: "agnix rule CC-OS-004 checks for output style empty body in claude-output-styles files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-OS-004", "output style empty body", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-004` +- **Severity**: `MEDIUM` +- **Category**: `claude-output-styles` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: Concise +description: Short replies +--- +``` + +### Valid + +```text +--- +name: Concise +description: Short replies +--- +Be brief and direct. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-005.md new file mode 100644 index 00000000..772ac827 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-005.md @@ -0,0 +1,56 @@ +--- +id: cc-os-005 +title: "CC-OS-005: Output Style Name Exceeds Length" +sidebar_label: "CC-OS-005" +description: "agnix rule CC-OS-005 checks for output style name exceeds length in claude-output-styles files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-OS-005", "output style name exceeds length", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-005` +- **Severity**: `LOW` +- **Category**: `claude-output-styles` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: A very very very very very very very very very very long output style name +description: Short +--- +Be brief. +``` + +### Valid + +```text +--- +name: Concise +description: Short replies +--- +Be brief. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-os-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-006.md new file mode 100644 index 00000000..b89c3a5c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-os-006.md @@ -0,0 +1,54 @@ +--- +id: cc-os-006 +title: "CC-OS-006: Invalid Output Style Frontmatter Syntax" +sidebar_label: "CC-OS-006" +description: "agnix rule CC-OS-006 checks for invalid output style frontmatter syntax in claude-output-styles files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-OS-006", "invalid output style frontmatter syntax", "claude-output-styles", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-OS-006` +- **Severity**: `HIGH` +- **Category**: `claude-output-styles` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/output-styles + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: Concise +description: Short replies +``` + +### Valid + +```text +--- +name: Concise +description: Short replies +--- +Be brief. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-001.md new file mode 100644 index 00000000..4ca8f1d7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-001.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-001 +title: "CC-PL-001: Plugin Manifest Not in .claude-plugin/" +sidebar_label: "CC-PL-001" +description: "agnix rule CC-PL-001 checks for plugin manifest not in .claude-plugin/ in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-001", "plugin manifest not in .claude-plugin/", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-001` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "manifest_path": "plugin.json" +} +``` + +### Valid + +```json +{ + "manifest_path": ".claude-plugin/plugin.json" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-002.md new file mode 100644 index 00000000..31443b61 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-002.md @@ -0,0 +1,57 @@ +--- +id: cc-pl-002 +title: "CC-PL-002: Components in .claude-plugin/ - Claude Plugins" +sidebar_label: "CC-PL-002" +description: "agnix rule CC-PL-002 checks for components in .claude-plugin/ in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-002", "components in .claude-plugin/", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-002` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "skills": "./.claude-plugin/skills" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-003.md new file mode 100644 index 00000000..515124b5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-003.md @@ -0,0 +1,56 @@ +--- +id: cc-pl-003 +title: "CC-PL-003: Invalid Semver - Claude Plugins" +sidebar_label: "CC-PL-003" +description: "agnix rule CC-PL-003 checks for invalid semver in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-003", "invalid semver", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-003` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-004.md new file mode 100644 index 00000000..bc800df1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-004.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-004 +title: "CC-PL-004: Missing Required/Recommended Plugin Field" +sidebar_label: "CC-PL-004" +description: "agnix rule CC-PL-004 checks for missing required/recommended plugin field in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-004", "missing required/recommended plugin field", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-004` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-005.md new file mode 100644 index 00000000..e5652ac0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-005.md @@ -0,0 +1,56 @@ +--- +id: cc-pl-005 +title: "CC-PL-005: Empty Plugin Name - Claude Plugins" +sidebar_label: "CC-PL-005" +description: "agnix rule CC-PL-005 checks for empty plugin name in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-005", "empty plugin name", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-005` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": " ", + "description": "A useful plugin", + "version": "1.0.0" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-006.md new file mode 100644 index 00000000..d805d1c6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-006.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-006 +title: "CC-PL-006: Plugin Parse Error - Claude Plugins" +sidebar_label: "CC-PL-006" +description: "agnix rule CC-PL-006 checks for plugin parse error in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-006", "plugin parse error", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-006` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ name: my-plugin, version: 1.0.0 } +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-007.md new file mode 100644 index 00000000..fe14264d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-007.md @@ -0,0 +1,59 @@ +--- +id: cc-pl-007 +title: "CC-PL-007: Invalid Component Path - Claude Plugins" +sidebar_label: "CC-PL-007" +description: "agnix rule CC-PL-007 checks for invalid component path in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-007", "invalid component path", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-007` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-08-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference +- https://github.com/anthropics/claude-code/releases/tag/v2.1.221 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "commands": "/usr/local/bin/cmd" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "skills": "." +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-008.md new file mode 100644 index 00000000..79b4f652 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-008.md @@ -0,0 +1,58 @@ +--- +id: cc-pl-008 +title: "CC-PL-008: Component Inside .claude-plugin - Claude Plugins" +sidebar_label: "CC-PL-008" +description: "agnix rule CC-PL-008 checks for component inside .claude-plugin in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-008", "component inside .claude-plugin", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-008` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "agents": ".claude-plugin/agents" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "agents": "./agents/" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-009.md new file mode 100644 index 00000000..d3bb00eb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-009.md @@ -0,0 +1,58 @@ +--- +id: cc-pl-009 +title: "CC-PL-009: Invalid Author Object - Claude Plugins" +sidebar_label: "CC-PL-009" +description: "agnix rule CC-PL-009 checks for invalid author object in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-009", "invalid author object", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-009` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "author": { "email": "jane@example.com" } +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "author": { "name": "Jane Doe" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-010.md new file mode 100644 index 00000000..c1879f21 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-010.md @@ -0,0 +1,58 @@ +--- +id: cc-pl-010 +title: "CC-PL-010: Invalid Homepage URL - Claude Plugins" +sidebar_label: "CC-PL-010" +description: "agnix rule CC-PL-010 checks for invalid homepage url in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-010", "invalid homepage url", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-010` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "homepage": "not-a-valid-url" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "description": "A useful plugin", + "version": "1.0.0", + "homepage": "https://example.com/my-plugin" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-011.md new file mode 100644 index 00000000..2a0adc6a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-011.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-011 +title: "CC-PL-011: LSP Server Missing Required Fields" +sidebar_label: "CC-PL-011" +description: "agnix rule CC-PL-011 checks for lsp server missing required fields in claude plugins files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-PL-011", "lsp server missing required fields", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-011` +- **Severity**: `HIGH` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "lsp": { "command": "node" } +} +``` + +### Valid + +```json +{ + "lsp": { "command": "node", "args": ["server.js"], "languages": ["typescript"] } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-012.md new file mode 100644 index 00000000..e05e3a50 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-012.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-012 +title: "CC-PL-012: Invalid UserConfig Key - Claude Plugins" +sidebar_label: "CC-PL-012" +description: "agnix rule CC-PL-012 checks for invalid userconfig key in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-012", "invalid userconfig key", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-012` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "userConfig": { "api key!": { "type": "string" } } +} +``` + +### Valid + +```json +{ + "userConfig": { "apiKey": { "type": "string" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-013.md new file mode 100644 index 00000000..b7029ffd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-013.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-013 +title: "CC-PL-013: Channel Missing Server Reference - Claude Plugins" +sidebar_label: "CC-PL-013" +description: "agnix rule CC-PL-013 checks for channel missing server reference in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-013", "channel missing server reference", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-013` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "channels": [{ "name": "stable" }] +} +``` + +### Valid + +```json +{ + "channels": [{ "name": "stable", "server": "https://example.com" }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-014.md new file mode 100644 index 00000000..67a2526c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-014.md @@ -0,0 +1,52 @@ +--- +id: cc-pl-014 +title: "CC-PL-014: Plugin Agent Unsupported Field - Claude Plugins" +sidebar_label: "CC-PL-014" +description: "agnix rule CC-PL-014 checks for plugin agent unsupported field in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-014", "plugin agent unsupported field", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-014` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agents": [{ "name": "helper", "priority": 1 }] +} +``` + +### Valid + +```json +{ + "agents": [{ "name": "helper", "description": "Assists with code" }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-015.md new file mode 100644 index 00000000..102c0a26 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-pl-015.md @@ -0,0 +1,53 @@ +--- +id: cc-pl-015 +title: "CC-PL-015: Default Component Folder Shadowed by Manifest" +sidebar_label: "CC-PL-015" +description: "agnix rule CC-PL-015 checks for default component folder shadowed by manifest in claude plugins files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-PL-015", "default component folder shadowed by manifest", "claude plugins", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-PL-015` +- **Severity**: `MEDIUM` +- **Category**: `Claude Plugins` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.140` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/plugins-reference +- https://github.com/anthropics/claude-code/releases/tag/v2.1.140 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "commands": "./custom-commands" +} +``` + +### Valid + +```json +{ + "commands": ["./custom-commands", "./commands"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-001.md new file mode 100644 index 00000000..39164366 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-001.md @@ -0,0 +1,52 @@ +--- +id: cc-set-001 +title: "CC-SET-001: Invalid prUrlTemplate Setting - Claude Settings" +sidebar_label: "CC-SET-001" +description: "agnix rule CC-SET-001 checks for invalid prurltemplate setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-001", "invalid prurltemplate setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-001` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "prUrlTemplate": "https://reviews.example.com/" +} +``` + +### Valid + +```json +{ + "prUrlTemplate": "https://reviews.example.com/{owner}/{repo}/pull/{number}" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-002.md new file mode 100644 index 00000000..a4f90df9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-002.md @@ -0,0 +1,52 @@ +--- +id: cc-set-002 +title: "CC-SET-002: Non-boolean channelsEnabled Setting" +sidebar_label: "CC-SET-002" +description: "agnix rule CC-SET-002 checks for non-boolean channelsenabled setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-002", "non-boolean channelsenabled setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-002` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-06` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.128` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.128 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "channelsEnabled": "true" +} +``` + +### Valid + +```json +{ + "channelsEnabled": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-003.md new file mode 100644 index 00000000..4b69c7e0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-003.md @@ -0,0 +1,52 @@ +--- +id: cc-set-003 +title: "CC-SET-003: Invalid worktree.baseRef Value - Claude Settings" +sidebar_label: "CC-SET-003" +description: "agnix rule CC-SET-003 checks for invalid worktree.baseref value in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-003", "invalid worktree.baseref value", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-003` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.133` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.133 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "worktree": {"baseRef": "main"} +} +``` + +### Valid + +```json +{ + "worktree": {"baseRef": "fresh"} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-004.md new file mode 100644 index 00000000..2dbfccdf --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-004.md @@ -0,0 +1,52 @@ +--- +id: cc-set-004 +title: "CC-SET-004: Invalid Sandbox Path Setting - Claude Settings" +sidebar_label: "CC-SET-004" +description: "agnix rule CC-SET-004 checks for invalid sandbox path setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-004", "invalid sandbox path setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-004` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.133` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.133 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "sandbox": {"bwrapPath": "", "socatPath": 42} +} +``` + +### Valid + +```json +{ + "sandbox": {"bwrapPath": "/usr/local/bin/bwrap", "socatPath": "/usr/bin/socat"} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-005.md new file mode 100644 index 00000000..7a39b611 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-005.md @@ -0,0 +1,52 @@ +--- +id: cc-set-005 +title: "CC-SET-005: Invalid parentSettingsBehavior Value" +sidebar_label: "CC-SET-005" +description: "agnix rule CC-SET-005 checks for invalid parentsettingsbehavior value in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-005", "invalid parentsettingsbehavior value", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-005` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.133` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.133 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "parentSettingsBehavior": "override" +} +``` + +### Valid + +```json +{ + "parentSettingsBehavior": "first-wins" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-006.md new file mode 100644 index 00000000..ad91f883 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-006.md @@ -0,0 +1,53 @@ +--- +id: cc-set-006 +title: "CC-SET-006: Non-boolean disableBundledSkills Setting" +sidebar_label: "CC-SET-006" +description: "agnix rule CC-SET-006 checks for non-boolean disablebundledskills setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-006", "non-boolean disablebundledskills setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-006` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-11` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.169` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.169 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "disableBundledSkills": "true" +} +``` + +### Valid + +```json +{ + "disableBundledSkills": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-007.md new file mode 100644 index 00000000..cdda4ecd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-007.md @@ -0,0 +1,53 @@ +--- +id: cc-set-007 +title: "CC-SET-007: Non-boolean enforceAvailableModels Setting" +sidebar_label: "CC-SET-007" +description: "agnix rule CC-SET-007 checks for non-boolean enforceavailablemodels setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-007", "non-boolean enforceavailablemodels setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-007` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-16` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.175` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.175 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "enforceAvailableModels": "true" +} +``` + +### Valid + +```json +{ + "enforceAvailableModels": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-008.md new file mode 100644 index 00000000..e9ec19ca --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-008.md @@ -0,0 +1,53 @@ +--- +id: cc-set-008 +title: "CC-SET-008: Non-boolean sandbox.allowAppleEvents Setting" +sidebar_label: "CC-SET-008" +description: "agnix rule CC-SET-008 checks for non-boolean sandbox.allowappleevents setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-008", "non-boolean sandbox.allowappleevents setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-008` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-18` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.181` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.181 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "sandbox": {"allowAppleEvents": "true"} +} +``` + +### Valid + +```json +{ + "sandbox": {"allowAppleEvents": true} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-009.md new file mode 100644 index 00000000..a509eaf1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-009.md @@ -0,0 +1,53 @@ +--- +id: cc-set-009 +title: "CC-SET-009: Non-boolean attribution.sessionUrl Setting" +sidebar_label: "CC-SET-009" +description: "agnix rule CC-SET-009 checks for non-boolean attribution.sessionurl setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-009", "non-boolean attribution.sessionurl setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-009` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-21` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.183` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.183 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "attribution": {"sessionUrl": "false"} +} +``` + +### Valid + +```json +{ + "attribution": {"sessionUrl": false} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-010.md new file mode 100644 index 00000000..119451ee --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-010.md @@ -0,0 +1,54 @@ +--- +id: cc-set-010 +title: "CC-SET-010: Invalid teammateMode Setting - Claude Settings" +sidebar_label: "CC-SET-010" +description: "agnix rule CC-SET-010 checks for invalid teammatemode setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-010", "invalid teammatemode setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-010` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-24` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.186` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.186 +- https://code.claude.com/docs/en/settings +- https://code.claude.com/docs/en/agent-teams + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "teammateMode": "screen" +} +``` + +### Valid + +```json +{ + "teammateMode": "iterm2" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-011.md new file mode 100644 index 00000000..eeed908f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-011.md @@ -0,0 +1,52 @@ +--- +id: cc-set-011 +title: "CC-SET-011: Non-boolean respondToBashCommands Setting" +sidebar_label: "CC-SET-011" +description: "agnix rule CC-SET-011 checks for non-boolean respondtobashcommands setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-011", "non-boolean respondtobashcommands setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-011` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-24` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.186` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.186 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "respondToBashCommands": "false" +} +``` + +### Valid + +```json +{ + "respondToBashCommands": false +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-012.md new file mode 100644 index 00000000..c2c9705f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-012.md @@ -0,0 +1,77 @@ +--- +id: cc-set-012 +title: "CC-SET-012: Invalid sandbox.credentials Setting" +sidebar_label: "CC-SET-012" +description: "agnix rule CC-SET-012 checks for invalid sandbox.credentials setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-012", "invalid sandbox.credentials setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-012` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.187` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.187 +- https://github.com/anthropics/claude-code/releases/tag/v2.1.199 +- https://github.com/anthropics/claude-code/releases/tag/v2.1.221 +- https://github.com/anthropics/claude-code/releases/tag/v2.1.224 +- https://code.claude.com/docs/en/settings +- https://code.claude.com/docs/en/sandboxing + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "sandbox": { + "credentials": { + "files": [ + {"path": "~/.aws/", "mode": "mask", "extract": "password=\\S+", "onExtractNoMatch": "ignore"} + ], + "envVars": [ + {"name": "BAD-NAME", "mode": "allow"} + ], + "allowPlaintextInject": "false" + } + } +} +``` + +### Valid + +```json +{ + "sandbox": { + "credentials": { + "files": [ + {"path": "~/.netrc", "mode": "mask", "extract": "password:\\s*(\\S+)", "onExtractNoMatch": "deny", "injectHosts": ["api.example.com"]} + ], + "envVars": [ + {"name": "GITHUB_TOKEN", "mode": "mask", "injectHosts": ["api.github.com"]} + ], + "allowPlaintextInject": false + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-013.md new file mode 100644 index 00000000..e55cb7fa --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-013.md @@ -0,0 +1,52 @@ +--- +id: cc-set-013 +title: "CC-SET-013: Non-boolean autoMode.classifyAllShell Setting" +sidebar_label: "CC-SET-013" +description: "agnix rule CC-SET-013 checks for non-boolean automode.classifyallshell setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-013", "non-boolean automode.classifyallshell setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-013` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-27` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.193` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.193 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "autoMode": {"classifyAllShell": "true"} +} +``` + +### Valid + +```json +{ + "autoMode": {"classifyAllShell": true} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-014.md new file mode 100644 index 00000000..96a55498 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-014.md @@ -0,0 +1,52 @@ +--- +id: cc-set-014 +title: "CC-SET-014: autoMode Setting Ignored in settings.local.json" +sidebar_label: "CC-SET-014" +description: "agnix rule CC-SET-014 checks for automode setting ignored in settings.local.json in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-014", "automode setting ignored in settings.local.json", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-014` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-15` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.207` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.207 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "autoMode": {"classifyAllShell": true} +} +``` + +### Valid + +```json +{ + "model": "claude-sonnet-4" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-015.md new file mode 100644 index 00000000..233ab592 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-015.md @@ -0,0 +1,52 @@ +--- +id: cc-set-015 +title: "CC-SET-015: Dead pluginConfigs in Project-Level Settings" +sidebar_label: "CC-SET-015" +description: "agnix rule CC-SET-015 checks for dead pluginconfigs in project-level settings in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-015", "dead pluginconfigs in project-level settings", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-015` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-15` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.207` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.207 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "pluginConfigs": {"my-plugin": {"apiKey": "abc"}} +} +``` + +### Valid + +```json +{ + "model": "claude-sonnet-4" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-016.md new file mode 100644 index 00000000..f9a82f3f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-016.md @@ -0,0 +1,52 @@ +--- +id: cc-set-016 +title: "CC-SET-016: Deprecated Tool-Scoped Permission Rule Form" +sidebar_label: "CC-SET-016" +description: "agnix rule CC-SET-016 checks for deprecated tool-scoped permission rule form in claude settings files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-SET-016", "deprecated tool-scoped permission rule form", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-016` +- **Severity**: `LOW` +- **Category**: `Claude Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-16` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.210` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.210 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "permissions": {"allow": ["Write(src/**)", "Glob(docs/**)"]} +} +``` + +### Valid + +```json +{ + "permissions": {"allow": ["Edit(src/**)", "Read(docs/**)"]} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-017.md new file mode 100644 index 00000000..0d15f826 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-017.md @@ -0,0 +1,53 @@ +--- +id: cc-set-017 +title: "CC-SET-017: Non-boolean sandbox.filesystem.disabled Setting" +sidebar_label: "CC-SET-017" +description: "agnix rule CC-SET-017 checks for non-boolean sandbox.filesystem.disabled setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-017", "non-boolean sandbox.filesystem.disabled setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-017` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.216` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.216 +- https://code.claude.com/docs/en/sandboxing + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "sandbox": {"filesystem": {"disabled": "false"}} +} +``` + +### Valid + +```json +{ + "sandbox": {"filesystem": {"disabled": false}} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-018.md new file mode 100644 index 00000000..1f644c62 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-018.md @@ -0,0 +1,53 @@ +--- +id: cc-set-018 +title: "CC-SET-018: Non-boolean emojiCompletionEnabled Setting" +sidebar_label: "CC-SET-018" +description: "agnix rule CC-SET-018 checks for non-boolean emojicompletionenabled setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-018", "non-boolean emojicompletionenabled setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-018` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.217` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.217 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "emojiCompletionEnabled": "true" +} +``` + +### Valid + +```json +{ + "emojiCompletionEnabled": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-019.md new file mode 100644 index 00000000..51414b24 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-019.md @@ -0,0 +1,53 @@ +--- +id: cc-set-019 +title: "CC-SET-019: Non-boolean sandbox.network.strictAllowlist Setting" +sidebar_label: "CC-SET-019" +description: "agnix rule CC-SET-019 checks for non-boolean sandbox.network.strictallowlist setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-019", "non-boolean sandbox.network.strictallowlist setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-019` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.219` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.219 +- https://code.claude.com/docs/en/sandboxing + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "sandbox": {"network": {"strictAllowlist": "true"}} +} +``` + +### Valid + +```json +{ + "sandbox": {"network": {"strictAllowlist": true}} +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-020.md new file mode 100644 index 00000000..c7bef5a7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-020.md @@ -0,0 +1,53 @@ +--- +id: cc-set-020 +title: "CC-SET-020: Invalid workflowSizeGuideline Setting" +sidebar_label: "CC-SET-020" +description: "agnix rule CC-SET-020 checks for invalid workflowsizeguideline setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-020", "invalid workflowsizeguideline setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-020` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.219` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.219 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "workflowSizeGuideline": "tiny" +} +``` + +### Valid + +```json +{ + "workflowSizeGuideline": "medium" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-021.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-021.md new file mode 100644 index 00000000..1422bbb4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-021.md @@ -0,0 +1,54 @@ +--- +id: cc-set-021 +title: "CC-SET-021: Ineffective Project Remote Control Auto-start" +sidebar_label: "CC-SET-021" +description: "agnix rule CC-SET-021 checks for ineffective project remote control auto-start in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-021", "ineffective project remote control auto-start", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-021` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-05` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.222` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.222 +- https://code.claude.com/docs/en/settings +- https://code.claude.com/docs/en/remote-control + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "remoteControlAtStartup": true +} +``` + +### Valid + +```json +{ + "remoteControlAtStartup": false +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-022.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-022.md new file mode 100644 index 00000000..df8ab812 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-022.md @@ -0,0 +1,54 @@ +--- +id: cc-set-022 +title: "CC-SET-022: Invalid crossSessionInbound Setting" +sidebar_label: "CC-SET-022" +description: "agnix rule CC-SET-022 checks for invalid crosssessioninbound setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-022", "invalid crosssessioninbound setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-022` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.224` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.224 +- https://code.claude.com/docs/en/settings +- https://code.claude.com/docs/en/cross-session-messaging + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "crossSessionInbound": "prompt" +} +``` + +### Valid + +```json +{ + "crossSessionInbound": "hold" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-set-023.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-023.md new file mode 100644 index 00000000..87944537 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-set-023.md @@ -0,0 +1,53 @@ +--- +id: cc-set-023 +title: "CC-SET-023: Invalid dialogExpiry Setting - Claude Settings" +sidebar_label: "CC-SET-023" +description: "agnix rule CC-SET-023 checks for invalid dialogexpiry setting in claude settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SET-023", "invalid dialogexpiry setting", "claude settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SET-023` +- **Severity**: `MEDIUM` +- **Category**: `Claude Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-08` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.224` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.224 +- https://code.claude.com/docs/en/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "dialogExpiry": "30s" +} +``` + +### Valid + +```json +{ + "dialogExpiry": "10m" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-001.md new file mode 100644 index 00000000..9c610b85 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-001.md @@ -0,0 +1,59 @@ +--- +id: cc-sk-001 +title: "CC-SK-001: Invalid Model Value - Claude Skills" +sidebar_label: "CC-SK-001" +description: "agnix rule CC-SK-001 checks for invalid model value in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-001", "invalid model value", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-001` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills +- https://code.claude.com/docs/en/model-config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: fast-review +description: Use when doing quick code reviews +model: gpt-4 +--- +Review the code for obvious issues. +``` + +### Valid + +```markdown +--- +name: fast-review +description: Use when doing quick code reviews +model: haiku +--- +Review the code for obvious issues. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-002.md new file mode 100644 index 00000000..27341091 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-002.md @@ -0,0 +1,60 @@ +--- +id: cc-sk-002 +title: "CC-SK-002: Invalid Context Value - Claude Skills" +sidebar_label: "CC-SK-002" +description: "agnix rule CC-SK-002 checks for invalid context value in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-002", "invalid context value", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-002` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: parallel-task +description: Use when running tasks in parallel +context: spawn +agent: general-purpose +--- +Run the task in a spawned context. +``` + +### Valid + +```markdown +--- +name: parallel-task +description: Use when running tasks in parallel +context: fork +agent: general-purpose +--- +Run the task in a forked context. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-004.md new file mode 100644 index 00000000..2862881b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-004.md @@ -0,0 +1,59 @@ +--- +id: cc-sk-004 +title: "CC-SK-004: Agent Without Context - Claude Skills" +sidebar_label: "CC-SK-004" +description: "agnix rule CC-SK-004 checks for agent without context in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-004", "agent without context", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-004` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: explore-code +description: Use when exploring the codebase +agent: Explore +--- +Explore the codebase structure. +``` + +### Valid + +```markdown +--- +name: explore-code +description: Use when exploring the codebase +context: fork +agent: Explore +--- +Explore the codebase structure. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-005.md new file mode 100644 index 00000000..f2ebe231 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-005.md @@ -0,0 +1,60 @@ +--- +id: cc-sk-005 +title: "CC-SK-005: Invalid Agent Type - Claude Skills" +sidebar_label: "CC-SK-005" +description: "agnix rule CC-SK-005 checks for invalid agent type in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-005", "invalid agent type", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-005` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/sub-agents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: search-files +description: Use when searching for files in the project +context: fork +agent: Invalid Agent!! +--- +Search the project for relevant files. +``` + +### Valid + +```markdown +--- +name: search-files +description: Use when searching for files in the project +context: fork +agent: Explore +--- +Search the project for relevant files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-006.md new file mode 100644 index 00000000..aa8cda49 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-006.md @@ -0,0 +1,57 @@ +--- +id: cc-sk-006 +title: "CC-SK-006: Dangerous Auto-Invocation - Claude Skills" +sidebar_label: "CC-SK-006" +description: "agnix rule CC-SK-006 checks for dangerous auto-invocation in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-006", "dangerous auto-invocation", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-006` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: deploy-staging +description: Use when deploying to staging environment +--- +Deploy the application to staging. +``` + +### Valid + +```markdown +--- +name: deploy-staging +description: Use when deploying to staging environment +disable-model-invocation: true +--- +Deploy the application to staging. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-007.md new file mode 100644 index 00000000..16e4155d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-007.md @@ -0,0 +1,58 @@ +--- +id: cc-sk-007 +title: "CC-SK-007: Unrestricted Bash - Claude Skills" +sidebar_label: "CC-SK-007" +description: "agnix rule CC-SK-007 checks for unrestricted bash in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-007", "unrestricted bash", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-007` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-09` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/tree/main/.claude/commands + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: git-status +description: Use when checking git status +allowed-tools: Bash, Read +--- +Run git status and read the output. +``` + +### Valid + +```markdown +--- +name: git-status +description: Use when checking git status +allowed-tools: Bash(git:*), Read +--- +Run git status and read the output. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-008.md new file mode 100644 index 00000000..ae980cbf --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-008.md @@ -0,0 +1,60 @@ +--- +id: cc-sk-008 +title: "CC-SK-008: Unknown Tool Name - Claude Skills" +sidebar_label: "CC-SK-008" +description: "agnix rule CC-SK-008 checks for unknown tool name in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-008", "unknown tool name", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-008` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/settings +- https://code.claude.com/docs/en/tools +- https://code.claude.com/docs/en/permissions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: find-files +description: Use when finding files by pattern +allowed-tools: Glob, Grep, FooBar +--- +Search for files matching the pattern. +``` + +### Valid + +```markdown +--- +name: find-files +description: Use when finding files by pattern +allowed-tools: Glob, Grep, Read +--- +Search for files matching the pattern. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-009.md new file mode 100644 index 00000000..ee61b40f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-009.md @@ -0,0 +1,56 @@ +--- +id: cc-sk-009 +title: "CC-SK-009: Too Many Injections - Claude Skills" +sidebar_label: "CC-SK-009" +description: "agnix rule CC-SK-009 checks for too many injections in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-009", "too many injections", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-009` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: template-skill +description: Use when applying a code template +--- +Use !`config.json` and !`env.json` and !`secrets.json` and !`overrides.json` for setup. +``` + +### Valid + +```markdown +--- +name: template-skill +description: Use when applying a code template +--- +Apply the template with !`config.json` values. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-010.md new file mode 100644 index 00000000..afc09cd8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-010.md @@ -0,0 +1,64 @@ +--- +id: cc-sk-010 +title: "CC-SK-010: Invalid Hooks in Skill Frontmatter" +sidebar_label: "CC-SK-010" +description: "agnix rule CC-SK-010 checks for invalid hooks in skill frontmatter in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-010", "invalid hooks in skill frontmatter", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-010` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: hook-skill +description: Use when running a skill with hooks +hooks: + InvalidEvent: + - type: command + command: echo bad +--- +Run with hooks. +``` + +### Valid + +```markdown +--- +name: hook-skill +description: Use when running a skill with hooks +hooks: + PreToolUse: + - type: command + command: echo pre +--- +Run with hooks. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-011.md new file mode 100644 index 00000000..a00c81d0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-011.md @@ -0,0 +1,59 @@ +--- +id: cc-sk-011 +title: "CC-SK-011: Unreachable Skill - Claude Skills" +sidebar_label: "CC-SK-011" +description: "agnix rule CC-SK-011 checks for unreachable skill in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-011", "unreachable skill", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-011` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: internal-skill +description: Use when running internal automation +user-invocable: false +disable-model-invocation: true +--- +This skill cannot be reached by anyone. +``` + +### Valid + +```markdown +--- +name: internal-skill +description: Use when running internal automation +user-invocable: false +--- +This skill can still be invoked by the model. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-012.md new file mode 100644 index 00000000..4b610571 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-012.md @@ -0,0 +1,58 @@ +--- +id: cc-sk-012 +title: "CC-SK-012: Argument Hint Without $ARGUMENTS - Claude Skills" +sidebar_label: "CC-SK-012" +description: "agnix rule CC-SK-012 checks for argument hint without $arguments in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-012", "argument hint without $arguments", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-012` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: greet-user +description: Use when greeting a user by name +argument-hint: Enter the user's name +--- +Greet the user with a friendly message. +``` + +### Valid + +```markdown +--- +name: greet-user +description: Use when greeting a user by name +argument-hint: Enter the user's name +--- +Greet the user: Hello, $ARGUMENTS! +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-013.md new file mode 100644 index 00000000..2f5a7a91 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-013.md @@ -0,0 +1,60 @@ +--- +id: cc-sk-013 +title: "CC-SK-013: Fork Context Without Actionable Instructions" +sidebar_label: "CC-SK-013" +description: "agnix rule CC-SK-013 checks for fork context without actionable instructions in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-013", "fork context without actionable instructions", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-013` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: analyze-code +description: Use when analyzing code quality +context: fork +agent: general-purpose +--- +This is some informational text without any actionable verbs. +``` + +### Valid + +```markdown +--- +name: analyze-code +description: Use when analyzing code quality +context: fork +agent: general-purpose +--- +Run static analysis on the codebase and report findings. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-014.md new file mode 100644 index 00000000..70bef34f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-014.md @@ -0,0 +1,59 @@ +--- +id: cc-sk-014 +title: "CC-SK-014: Invalid disable-model-invocation Type" +sidebar_label: "CC-SK-014" +description: "agnix rule CC-SK-014 checks for invalid disable-model-invocation type in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-014", "invalid disable-model-invocation type", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-014` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.218` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills +- https://github.com/anthropics/claude-code/releases/tag/v2.1.218 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: quiet-skill +description: Use when running without model invocation +disable-model-invocation: "maybe" +--- +Run silently. +``` + +### Valid + +```markdown +--- +name: quiet-skill +description: Use when running without model invocation +disable-model-invocation: "YES" +--- +Run silently. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-015.md new file mode 100644 index 00000000..4eab04b4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-015.md @@ -0,0 +1,59 @@ +--- +id: cc-sk-015 +title: "CC-SK-015: Invalid user-invocable Type - Claude Skills" +sidebar_label: "CC-SK-015" +description: "agnix rule CC-SK-015 checks for invalid user-invocable type in claude skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CC-SK-015", "invalid user-invocable type", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-015` +- **Severity**: `HIGH` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.218` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills +- https://github.com/anthropics/claude-code/releases/tag/v2.1.218 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: slash-cmd +description: Use when user types the slash command +user-invocable: "maybe" +--- +Handle the slash command. +``` + +### Valid + +```markdown +--- +name: slash-cmd +description: Use when user types the slash command +user-invocable: on +--- +Handle the slash command. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-016.md new file mode 100644 index 00000000..dec6f49a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-016.md @@ -0,0 +1,57 @@ +--- +id: cc-sk-016 +title: "CC-SK-016: Indexed $ARGUMENTS Without argument-hint" +sidebar_label: "CC-SK-016" +description: "agnix rule CC-SK-016 checks for indexed $arguments without argument-hint in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-016", "indexed $arguments without argument-hint", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-016` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: run-check +description: Use when validating a provided path +--- +Run checks against $ARGUMENTS[0]. +``` + +### Valid + +```markdown +--- +name: run-check +description: Use when validating a provided path +argument-hint: path-to-target +--- +Run checks against $ARGUMENTS[0]. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-017.md new file mode 100644 index 00000000..dfea5909 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-017.md @@ -0,0 +1,61 @@ +--- +id: cc-sk-017 +title: "CC-SK-017: Unknown Frontmatter Field - Claude Skills" +sidebar_label: "CC-SK-017" +description: "agnix rule CC-SK-017 checks for unknown frontmatter field in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-017", "unknown frontmatter field", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-017` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-14` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: lint-config +description: Use when validating configuration files +allowed_tools: Read, Grep +--- +Lint project configuration files. +``` + +### Valid + +```markdown +--- +name: lint-config +description: Use when validating configuration files +display-name: Lint Config +default-enabled: true +fallback: lint-config +allowed-tools: Read, Grep +--- +Lint project configuration files. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-018.md new file mode 100644 index 00000000..b1c35d73 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-018.md @@ -0,0 +1,56 @@ +--- +id: cc-sk-018 +title: "CC-SK-018: Invalid Effort Value - Claude Skills" +sidebar_label: "CC-SK-018" +description: "agnix rule CC-SK-018 checks for invalid effort value in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-018", "invalid effort value", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-018` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +effort: maximum +--- +Skill instructions. +``` + +### Valid + +```markdown +--- +name: my-skill +effort: high +--- +Skill instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-019.md new file mode 100644 index 00000000..ed78ce22 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-019.md @@ -0,0 +1,57 @@ +--- +id: cc-sk-019 +title: "CC-SK-019: Invalid Paths Format - Claude Skills" +sidebar_label: "CC-SK-019" +description: "agnix rule CC-SK-019 checks for invalid paths format in claude skills files. Severity: LOW. See examples and fix guidance." +keywords: ["CC-SK-019", "invalid paths format", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-019` +- **Severity**: `LOW` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +paths: src/**/*.ts +--- +Skill instructions. +``` + +### Valid + +```markdown +--- +name: my-skill +paths: + - "src/**/*.ts" +--- +Skill instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-020.md new file mode 100644 index 00000000..f75af84c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-020.md @@ -0,0 +1,56 @@ +--- +id: cc-sk-020 +title: "CC-SK-020: Invalid Shell Value - Claude Skills" +sidebar_label: "CC-SK-020" +description: "agnix rule CC-SK-020 checks for invalid shell value in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-020", "invalid shell value", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-020` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-03-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +shell: zsh +--- +Skill instructions. +``` + +### Valid + +```markdown +--- +name: my-skill +shell: bash +--- +Skill instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-021.md b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-021.md new file mode 100644 index 00000000..2fd539f5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cc-sk-021.md @@ -0,0 +1,56 @@ +--- +id: cc-sk-021 +title: "CC-SK-021: Hardcoded User Directory Path - Claude Skills" +sidebar_label: "CC-SK-021" +description: "agnix rule CC-SK-021 checks for hardcoded user directory path in claude skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CC-SK-021", "hardcoded user directory path", "claude skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CC-SK-021` +- **Severity**: `MEDIUM` +- **Category**: `Claude Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: build-helper +description: Build the project +--- +Run the script at /Users/alice/projects/myrepo/build.sh to compile. +``` + +### Valid + +```markdown +--- +name: build-helper +description: Build the project +--- +Run `cargo build` from the repo root, or set `$BUILD_DIR` to override. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-000.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-000.md new file mode 100644 index 00000000..74442d5a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-000.md @@ -0,0 +1,51 @@ +--- +id: cdx-000 +title: "CDX-000: TOML Parse Error - Codex CLI" +sidebar_label: "CDX-000" +description: "agnix rule CDX-000 checks for toml parse error in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-000", "toml parse error", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-000` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[model +approvalMode = suggest +``` + +### Valid + +```toml +[model] +approvalMode = "suggest" +fullAutoErrorMode = "ask-user" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-001.md new file mode 100644 index 00000000..d7f8196e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-001.md @@ -0,0 +1,48 @@ +--- +id: cdx-001 +title: "CDX-001: Invalid Approval Mode - Codex CLI" +sidebar_label: "CDX-001" +description: "agnix rule CDX-001 checks for invalid approval mode in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-001", "invalid approval mode", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-001` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +approvalMode = "yolo" +``` + +### Valid + +```toml +approvalMode = "suggest" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-002.md new file mode 100644 index 00000000..478c2f26 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-002.md @@ -0,0 +1,48 @@ +--- +id: cdx-002 +title: "CDX-002: Invalid Full Auto Error Mode - Codex CLI" +sidebar_label: "CDX-002" +description: "agnix rule CDX-002 checks for invalid full auto error mode in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-002", "invalid full auto error mode", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-002` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +fullAutoErrorMode = "crash" +``` + +### Valid + +```toml +fullAutoErrorMode = "ask-user" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-003.md new file mode 100644 index 00000000..d4151269 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-003.md @@ -0,0 +1,52 @@ +--- +id: cdx-003 +title: "CDX-003: AGENTS.override.md in Version Control - Codex CLI" +sidebar_label: "CDX-003" +description: "agnix rule CDX-003 checks for agents.override.md in version control in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-003", "agents.override.md in version control", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-003` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +# AGENTS.override.md + +Local overrides that should not be committed to version control. +``` + +### Valid + +```toml +# AGENTS.md + +Project instructions for Codex CLI. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-004.md new file mode 100644 index 00000000..509fae61 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-004.md @@ -0,0 +1,49 @@ +--- +id: cdx-004 +title: "CDX-004: Unknown Config Key - Codex CLI" +sidebar_label: "CDX-004" +description: "agnix rule CDX-004 checks for unknown config key in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-004", "unknown config key", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-004` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +unknownKey = true +``` + +### Valid + +```toml +model = "o4-mini" +approvalMode = "suggest" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-005.md new file mode 100644 index 00000000..2eaf4e3e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-005.md @@ -0,0 +1,48 @@ +--- +id: cdx-005 +title: "CDX-005: project_doc_max_bytes Exceeds Limit - Codex CLI" +sidebar_label: "CDX-005" +description: "agnix rule CDX-005 checks for project_doc_max_bytes exceeds limit in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-005", "project_doc_max_bytes exceeds limit", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-005` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +project_doc_max_bytes = 100000 +``` + +### Valid + +```toml +project_doc_max_bytes = 32768 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-006.md new file mode 100644 index 00000000..d7cfc04e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-006.md @@ -0,0 +1,48 @@ +--- +id: cdx-006 +title: "CDX-006: Invalid project_doc_fallback_filenames - Codex CLI" +sidebar_label: "CDX-006" +description: "agnix rule CDX-006 checks for invalid project_doc_fallback_filenames in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-006", "invalid project_doc_fallback_filenames", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-006` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +project_doc_fallback_filenames = ["AGENTS.md", "", 42, "AGENTS.md"] +``` + +### Valid + +```toml +project_doc_fallback_filenames = ["AGENTS.md", "README.md"] +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-001.md new file mode 100644 index 00000000..631c319a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-001.md @@ -0,0 +1,50 @@ +--- +id: cdx-ag-001 +title: "CDX-AG-001: Empty AGENTS.md for Codex - Codex CLI" +sidebar_label: "CDX-AG-001" +description: "agnix rule CDX-AG-001 checks for empty agents.md for codex in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-AG-001", "empty agents.md for codex", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-001` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml + +``` + +### Valid + +```toml +# AGENTS.md + +Use `cargo test` before opening PRs. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-002.md new file mode 100644 index 00000000..cb64041c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-002.md @@ -0,0 +1,48 @@ +--- +id: cdx-ag-002 +title: "CDX-AG-002: Secrets in AGENTS.md for Codex - Codex CLI" +sidebar_label: "CDX-AG-002" +description: "agnix rule CDX-AG-002 checks for secrets in agents.md for codex in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-AG-002", "secrets in agents.md for codex", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-002` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +OPENAI_API_KEY=sk-live-super-secret-value +``` + +### Valid + +```toml +Use `${OPENAI_API_KEY}` from the environment. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-003.md new file mode 100644 index 00000000..a38be28e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-003.md @@ -0,0 +1,48 @@ +--- +id: cdx-ag-003 +title: "CDX-AG-003: Generic AGENTS.md Guidance for Codex - Codex CLI" +sidebar_label: "CDX-AG-003" +description: "agnix rule CDX-AG-003 checks for generic agents.md guidance for codex in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-AG-003", "generic agents.md guidance for codex", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-003` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +Be helpful and accurate. +``` + +### Valid + +```toml +Run `cargo test -p agnix-core` and `cargo test -p agnix-cli` before merge. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-004.md new file mode 100644 index 00000000..ff95828d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-004.md @@ -0,0 +1,52 @@ +--- +id: cdx-ag-004 +title: "CDX-AG-004: AGENTS.md Exceeds Size Limit - Codex CLI" +sidebar_label: "CDX-AG-004" +description: "agnix rule CDX-AG-004 checks for agents.md exceeds size limit in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-AG-004", "agents.md exceeds size limit", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-004` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +# AGENTS.md + +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +### Valid + +```toml +# AGENTS.md + +Concise project instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-005.md new file mode 100644 index 00000000..41a2caad --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-005.md @@ -0,0 +1,48 @@ +--- +id: cdx-ag-005 +title: "CDX-AG-005: AGENTS.md References Missing File - Codex CLI" +sidebar_label: "CDX-AG-005" +description: "agnix rule CDX-AG-005 checks for agents.md references missing file in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-AG-005", "agents.md references missing file", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-005` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +See `docs/nonexistent.md` for details. +``` + +### Valid + +```toml +See `docs/setup.md` for details. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-006.md new file mode 100644 index 00000000..89c50422 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-006.md @@ -0,0 +1,56 @@ +--- +id: cdx-ag-006 +title: "CDX-AG-006: AGENTS.md Missing Project Context - Codex CLI" +sidebar_label: "CDX-AG-006" +description: "agnix rule CDX-AG-006 checks for agents.md missing project context in codex cli files. Severity: LOW. See examples and fix guidance." +keywords: ["CDX-AG-006", "agents.md missing project context", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-006` +- **Severity**: `LOW` +- **Category**: `Codex CLI` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +# AGENTS.md + +Follow best practices. +``` + +### Valid + +```toml +# AGENTS.md + +This is a Rust project using cargo. + +## Commands + +`cargo test` +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-007.md new file mode 100644 index 00000000..e35c0f3a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-ag-007.md @@ -0,0 +1,52 @@ +--- +id: cdx-ag-007 +title: "CDX-AG-007: AGENTS.md Contradicts config.toml - Codex CLI" +sidebar_label: "CDX-AG-007" +description: "agnix rule CDX-AG-007 checks for agents.md contradicts config.toml in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-AG-007", "agents.md contradicts config.toml", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-AG-007` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +Use suggest mode. + +approvalMode = "full-auto" +``` + +### Valid + +```toml +Use full-auto mode for CI. + +approvalMode = "full-auto" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-001.md new file mode 100644 index 00000000..e16e0141 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-001.md @@ -0,0 +1,52 @@ +--- +id: cdx-app-001 +title: "CDX-APP-001: Invalid default_tools_approval_mode Value" +sidebar_label: "CDX-APP-001" +description: "agnix rule CDX-APP-001 checks for invalid default_tools_approval_mode value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-APP-001", "invalid default_tools_approval_mode value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-APP-001` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[apps.github] +default_tools_approval_mode = "manual" +``` + +### Valid + +```toml +[apps.github] +default_tools_approval_mode = "prompt" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-002.md new file mode 100644 index 00000000..12a86181 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-002.md @@ -0,0 +1,51 @@ +--- +id: cdx-app-002 +title: "CDX-APP-002: Invalid skills Configuration - Codex CLI" +sidebar_label: "CDX-APP-002" +description: "agnix rule CDX-APP-002 checks for invalid skills configuration in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-APP-002", "invalid skills configuration", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-APP-002` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[skills] +max_concurrent = "many" +``` + +### Valid + +```toml +[skills] +max_concurrent = 3 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-003.md new file mode 100644 index 00000000..ffa69f5d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-app-003.md @@ -0,0 +1,49 @@ +--- +id: cdx-app-003 +title: "CDX-APP-003: Invalid profile Configuration - Codex CLI" +sidebar_label: "CDX-APP-003" +description: "agnix rule CDX-APP-003 checks for invalid profile configuration in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-APP-003", "invalid profile configuration", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-APP-003` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +profile = 123 +``` + +### Valid + +```toml +profile = "default" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-001.md new file mode 100644 index 00000000..8ae07a22 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-001.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-001 +title: "CDX-CFG-001: Invalid approval_policy Value - Codex CLI" +sidebar_label: "CDX-CFG-001" +description: "agnix rule CDX-CFG-001 checks for invalid approval_policy value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-001", "invalid approval_policy value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-001` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +approval_policy = "always" +``` + +### Valid + +```toml +approval_policy = "on-request" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-002.md new file mode 100644 index 00000000..475fcb6c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-002.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-002 +title: "CDX-CFG-002: Invalid sandbox_mode Value - Codex CLI" +sidebar_label: "CDX-CFG-002" +description: "agnix rule CDX-CFG-002 checks for invalid sandbox_mode value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-002", "invalid sandbox_mode value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-002` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +sandbox_mode = "open" +``` + +### Valid + +```toml +sandbox_mode = "workspace-write" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-003.md new file mode 100644 index 00000000..c34bbf85 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-003.md @@ -0,0 +1,51 @@ +--- +id: cdx-cfg-003 +title: "CDX-CFG-003: Invalid model_reasoning_effort Value" +sidebar_label: "CDX-CFG-003" +description: "agnix rule CDX-CFG-003 checks for invalid model_reasoning_effort value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-003", "invalid model_reasoning_effort value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-003` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-11` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration +- https://github.com/openai/codex/releases/tag/rust-v0.138.0 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_reasoning_effort = "" +``` + +### Valid + +```toml +model_reasoning_effort = "high" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-004.md new file mode 100644 index 00000000..823a693a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-004.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-004 +title: "CDX-CFG-004: Invalid model_verbosity Value - Codex CLI" +sidebar_label: "CDX-CFG-004" +description: "agnix rule CDX-CFG-004 checks for invalid model_verbosity value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-004", "invalid model_verbosity value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-004` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_verbosity = "verbose" +``` + +### Valid + +```toml +model_verbosity = "medium" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-005.md new file mode 100644 index 00000000..4b214977 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-005.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-005 +title: "CDX-CFG-005: Invalid personality Value - Codex CLI" +sidebar_label: "CDX-CFG-005" +description: "agnix rule CDX-CFG-005 checks for invalid personality value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-005", "invalid personality value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-005` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +personality = "assistant" +``` + +### Valid + +```toml +personality = "friendly" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-006.md new file mode 100644 index 00000000..a77fa8f1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-006.md @@ -0,0 +1,52 @@ +--- +id: cdx-cfg-006 +title: "CDX-CFG-006: Unknown Codex Config Field - Codex CLI" +sidebar_label: "CDX-CFG-006" +description: "agnix rule CDX-CFG-006 checks for unknown codex config field in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-006", "unknown codex config field", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-006` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[features] +unknown_flag = true +``` + +### Valid + +```toml +[features] +memories = true +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-007.md new file mode 100644 index 00000000..9f914fd6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-007.md @@ -0,0 +1,52 @@ +--- +id: cdx-cfg-007 +title: "CDX-CFG-007: Danger Full Access Without Acknowledgment" +sidebar_label: "CDX-CFG-007" +description: "agnix rule CDX-CFG-007 checks for danger full access without acknowledgment in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-007", "danger full access without acknowledgment", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-007` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +sandbox_mode = "danger-full-access" +``` + +### Valid + +```toml +sandbox_mode = "danger-full-access" +[notice] +hide_full_access_warning = true +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-008.md new file mode 100644 index 00000000..54d2a75e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-008.md @@ -0,0 +1,57 @@ +--- +id: cdx-cfg-008 +title: "CDX-CFG-008: Invalid shell_environment_policy Value" +sidebar_label: "CDX-CFG-008" +description: "agnix rule CDX-CFG-008 checks for invalid shell_environment_policy value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-008", "invalid shell_environment_policy value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-008` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core/config.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[shell_environment_policy] +exclude = ["AWS_*"] +[shell_environment_policy.filters] +"PATH" = "include" +``` + +### Valid + +```toml +[shell_environment_policy] +inherit = "core" +[shell_environment_policy.filters] +"AWS_*" = "exclude" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-009.md new file mode 100644 index 00000000..4e1a6525 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-009.md @@ -0,0 +1,53 @@ +--- +id: cdx-cfg-009 +title: "CDX-CFG-009: Invalid MCP Server Structure in Codex Config" +sidebar_label: "CDX-CFG-009" +description: "agnix rule CDX-CFG-009 checks for invalid mcp server structure in codex config in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-009", "invalid mcp server structure in codex config", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-009` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[mcp_servers.local] +enabled = true +``` + +### Valid + +```toml +[mcp_servers.local] +command = "npx" +args = ["-y", "@modelcontextprotocol/server-filesystem"] +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-010.md new file mode 100644 index 00000000..f29d5b2a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-010.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-010 +title: "CDX-CFG-010: Hardcoded Secret in Codex Config - Codex CLI" +sidebar_label: "CDX-CFG-010" +description: "agnix rule CDX-CFG-010 checks for hardcoded secret in codex config in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-010", "hardcoded secret in codex config", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-010` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +api_key = "sk-live-super-secret-value" +``` + +### Valid + +```toml +api_key = "${OPENAI_API_KEY}" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-011.md new file mode 100644 index 00000000..dddea3df --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-011.md @@ -0,0 +1,52 @@ +--- +id: cdx-cfg-011 +title: "CDX-CFG-011: Invalid Feature Flag Name or Shape - Codex CLI" +sidebar_label: "CDX-CFG-011" +description: "agnix rule CDX-CFG-011 checks for invalid feature flag name or shape in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-011", "invalid feature flag name or shape", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-011` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core/config.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[features.non_prefixed_mcp_tool_names] +server_names = [42] +``` + +### Valid + +```toml +[features.non_prefixed_mcp_tool_names] +enabled = true +server_names = ["docs"] +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-012.md new file mode 100644 index 00000000..cd0e295b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-012.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-012 +title: "CDX-CFG-012: Invalid cli_auth_credentials_store Value" +sidebar_label: "CDX-CFG-012" +description: "agnix rule CDX-CFG-012 checks for invalid cli_auth_credentials_store value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-012", "invalid cli_auth_credentials_store value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-012` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json +- https://developers.openai.com/codex/enterprise/managed-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +cli_auth_credentials_store = "vault" +``` + +### Valid + +```toml +cli_auth_credentials_store = "keyring" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-013.md new file mode 100644 index 00000000..83e03648 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-013.md @@ -0,0 +1,51 @@ +--- +id: cdx-cfg-013 +title: "CDX-CFG-013: Invalid sandbox_workspace_write Mode" +sidebar_label: "CDX-CFG-013" +description: "agnix rule CDX-CFG-013 checks for invalid sandbox_workspace_write mode in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-013", "invalid sandbox_workspace_write mode", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-013` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[sandbox_workspace_write] +mode = "yolo" +``` + +### Valid + +```toml +[sandbox_workspace_write] +mode = "allowlist" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-014.md new file mode 100644 index 00000000..eda6946d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-014.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-014 +title: "CDX-CFG-014: Invalid model Value - Codex CLI" +sidebar_label: "CDX-CFG-014" +description: "agnix rule CDX-CFG-014 checks for invalid model value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-014", "invalid model value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-014` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model = 123 +``` + +### Valid + +```toml +model = "o4-mini" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-015.md new file mode 100644 index 00000000..15e0d0ff --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-015.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-015 +title: "CDX-CFG-015: Invalid model_provider Value - Codex CLI" +sidebar_label: "CDX-CFG-015" +description: "agnix rule CDX-CFG-015 checks for invalid model_provider value in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-015", "invalid model_provider value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-015` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_provider = 123 +``` + +### Valid + +```toml +model_provider = "openai" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-016.md new file mode 100644 index 00000000..0fb740c2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-016.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-016 +title: "CDX-CFG-016: Invalid model_reasoning_summary Value" +sidebar_label: "CDX-CFG-016" +description: "agnix rule CDX-CFG-016 checks for invalid model_reasoning_summary value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-016", "invalid model_reasoning_summary value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-016` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_reasoning_summary = 123 +``` + +### Valid + +```toml +model_reasoning_summary = "auto" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-017.md new file mode 100644 index 00000000..fb8aafb2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-017.md @@ -0,0 +1,52 @@ +--- +id: cdx-cfg-017 +title: "CDX-CFG-017: Invalid history Configuration - Codex CLI" +sidebar_label: "CDX-CFG-017" +description: "agnix rule CDX-CFG-017 checks for invalid history configuration in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-017", "invalid history configuration", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-017` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[history] +persistence = "yes" +``` + +### Valid + +```toml +[history] +persistence = true +max_entries = 1000 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-018.md new file mode 100644 index 00000000..eed4df98 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-018.md @@ -0,0 +1,52 @@ +--- +id: cdx-cfg-018 +title: "CDX-CFG-018: Invalid tui Configuration - Codex CLI" +sidebar_label: "CDX-CFG-018" +description: "agnix rule CDX-CFG-018 checks for invalid tui configuration in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-018", "invalid tui configuration", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-018` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[tui] +theme = 123 +``` + +### Valid + +```toml +[tui] +theme = "dark" +notifications = true +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-019.md new file mode 100644 index 00000000..3aa6751a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-019.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-019 +title: "CDX-CFG-019: Invalid file_opener Value - Codex CLI" +sidebar_label: "CDX-CFG-019" +description: "agnix rule CDX-CFG-019 checks for invalid file_opener value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-019", "invalid file_opener value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-019` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +file_opener = 123 +``` + +### Valid + +```toml +file_opener = "vscode" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-020.md new file mode 100644 index 00000000..1c9878b7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-020.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-020 +title: "CDX-CFG-020: Invalid MCP OAuth Config - Codex CLI" +sidebar_label: "CDX-CFG-020" +description: "agnix rule CDX-CFG-020 checks for invalid mcp oauth config in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-020", "invalid mcp oauth config", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-020` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +mcp_oauth_credentials_store = 123 +``` + +### Valid + +```toml +mcp_oauth_credentials_store = "file" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-021.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-021.md new file mode 100644 index 00000000..03a16ca1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-021.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-021 +title: "CDX-CFG-021: Invalid model_context_window Value - Codex CLI" +sidebar_label: "CDX-CFG-021" +description: "agnix rule CDX-CFG-021 checks for invalid model_context_window value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-021", "invalid model_context_window value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-021` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_context_window = "big" +``` + +### Valid + +```toml +model_context_window = 128000 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-022.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-022.md new file mode 100644 index 00000000..0d54eeb5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-022.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-022 +title: "CDX-CFG-022: Invalid model_auto_compact_token_limit Value" +sidebar_label: "CDX-CFG-022" +description: "agnix rule CDX-CFG-022 checks for invalid model_auto_compact_token_limit value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-022", "invalid model_auto_compact_token_limit value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-022` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/config-reference +- https://developers.openai.com/codex/config-schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +model_auto_compact_token_limit = "lots" +``` + +### Valid + +```toml +model_auto_compact_token_limit = 80000 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-023.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-023.md new file mode 100644 index 00000000..724d1985 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-023.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-023 +title: "CDX-CFG-023: Invalid Approval Policy Sub-field - Codex CLI" +sidebar_label: "CDX-CFG-023" +description: "agnix rule CDX-CFG-023 checks for invalid approval policy sub-field in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-023", "invalid approval policy sub-field", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-023` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[approval_policy] +mode = "yolo" +``` + +### Valid + +```toml +[approval_policy] +mode = "suggest" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-024.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-024.md new file mode 100644 index 00000000..51f20a2f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-024.md @@ -0,0 +1,61 @@ +--- +id: cdx-cfg-024 +title: "CDX-CFG-024: Invalid Approvals Reviewer Value - Codex CLI" +sidebar_label: "CDX-CFG-024" +description: "agnix rule CDX-CFG-024 checks for invalid approvals reviewer value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-024", "invalid approvals reviewer value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-024` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-06-16` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core/config.schema.json +- https://github.com/openai/codex/blob/rust-v0.140.0/codex-rs/core/config.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +approvals_reviewer = "approve" + +[apps.browser] +approvals_reviewer = 42 + +[apps._default] +approvals_reviewer = "approve" +``` + +### Valid + +```toml +approvals_reviewer = "auto_review" + +[apps.browser] +approvals_reviewer = "user" + +[apps._default] +approvals_reviewer = "guardian_subagent" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-025.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-025.md new file mode 100644 index 00000000..e0488a43 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-025.md @@ -0,0 +1,48 @@ +--- +id: cdx-cfg-025 +title: "CDX-CFG-025: Invalid Service Tier Value - Codex CLI" +sidebar_label: "CDX-CFG-025" +description: "agnix rule CDX-CFG-025 checks for invalid service tier value in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-025", "invalid service tier value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-025` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +service_tier = "ultra" +``` + +### Valid + +```toml +service_tier = "default" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-026.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-026.md new file mode 100644 index 00000000..2de360ca --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-026.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-026 +title: "CDX-CFG-026: Invalid Network Permission Field - Codex CLI" +sidebar_label: "CDX-CFG-026" +description: "agnix rule CDX-CFG-026 checks for invalid network permission field in codex cli files. Severity: LOW. See examples and fix guidance." +keywords: ["CDX-CFG-026", "invalid network permission field", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-026` +- **Severity**: `LOW` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://developers.openai.com/codex/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[network] +allow = "all" +``` + +### Valid + +```toml +[network] +allow = ["*.example.com"] +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-027.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-027.md new file mode 100644 index 00000000..63d82f7f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-027.md @@ -0,0 +1,50 @@ +--- +id: cdx-cfg-027 +title: "CDX-CFG-027: Invalid Windows Sandbox Value - Codex CLI" +sidebar_label: "CDX-CFG-027" +description: "agnix rule CDX-CFG-027 checks for invalid windows sandbox value in codex cli files. Severity: LOW. See examples and fix guidance." +keywords: ["CDX-CFG-027", "invalid windows sandbox value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-027` +- **Severity**: `LOW` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core/config.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[windows] +sandbox = "docker" +``` + +### Valid + +```toml +[windows] +sandbox = "elevated" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-028.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-028.md new file mode 100644 index 00000000..fb2670ba --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-028.md @@ -0,0 +1,53 @@ +--- +id: cdx-cfg-028 +title: "CDX-CFG-028: Unsupported Inline MCP bearer_token Field" +sidebar_label: "CDX-CFG-028" +description: "agnix rule CDX-CFG-028 checks for unsupported inline mcp bearer_token field in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-028", "unsupported inline mcp bearer_token field", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-028` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-25` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/pull/19294 +- https://github.com/openai/codex/issues/19275 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[mcp_servers.myserver] +url = "https://api.example.com" +bearer_token = "sk-live-..." +``` + +### Valid + +```toml +[mcp_servers.myserver] +url = "https://api.example.com" +bearer_token_env_var = "MY_API_TOKEN" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-029.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-029.md new file mode 100644 index 00000000..7978e531 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-029.md @@ -0,0 +1,55 @@ +--- +id: cdx-cfg-029 +title: "CDX-CFG-029: Invalid Agent Concurrency Limit - Codex CLI" +sidebar_label: "CDX-CFG-029" +description: "agnix rule CDX-CFG-029 checks for invalid agent concurrency limit in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-CFG-029", "invalid agent concurrency limit", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-029` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.145.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/releases/tag/rust-v0.145.0 +- https://github.com/openai/codex/pull/33550 +- https://github.com/openai/codex/blob/rust-v0.145.0/codex-rs/config/src/config_toml.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +[agents] +max_concurrent_threads_per_session = 0 +``` + +### Valid + +```toml +[agents] +max_concurrent_threads_per_session = 4 + +[features] +multi_agent_v2 = true +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-030.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-030.md new file mode 100644 index 00000000..37baf7dc --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-cfg-030.md @@ -0,0 +1,49 @@ +--- +id: cdx-cfg-030 +title: "CDX-CFG-030: Invalid web_search Mode - Codex CLI" +sidebar_label: "CDX-CFG-030" +description: "agnix rule CDX-CFG-030 checks for invalid web_search mode in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-CFG-030", "invalid web_search mode", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-CFG-030` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-24` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.142.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/releases/tag/rust-v0.142.0 +- https://github.com/openai/codex/blob/rust-v0.142.0/codex-rs/protocol/src/config_types.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +web_search = "server_approved" +``` + +### Valid + +```toml +web_search = "indexed" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-001.md new file mode 100644 index 00000000..75843d2f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-001.md @@ -0,0 +1,49 @@ +--- +id: cdx-pl-001 +title: "CDX-PL-001: Codex Plugin Manifest Location or Agent Plugins Schema" +sidebar_label: "CDX-PL-001" +description: "agnix rule CDX-PL-001 checks for codex plugin manifest location or agent plugins schema in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-001", "codex plugin manifest location or agent plugins schema", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-001` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core-plugins/src/agent_plugin_manifest.rs +- https://agent-plugins.org/schemas/1.0.0/plugin.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +root plugin.json with unsupported $schema https://agent-plugins.org/schemas/2.0.0/plugin.schema.json +``` + +### Valid + +```toml +.codex-plugin/plugin.json, or root plugin.json with $schema https://agent-plugins.org/schemas/1.0.0/plugin.schema.json +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-002.md new file mode 100644 index 00000000..e0ec3fd5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-002.md @@ -0,0 +1,50 @@ +--- +id: cdx-pl-002 +title: "CDX-PL-002: Invalid Plugin Manifest - Codex CLI" +sidebar_label: "CDX-PL-002" +description: "agnix rule CDX-PL-002 checks for invalid plugin manifest in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-002", "invalid plugin manifest", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-002` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core-plugins/src/manifest.rs +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core-plugins/src/agent_plugin_manifest.rs +- https://agent-plugins.org/schemas/1.0.0/plugin.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","name":"my-plugin","homepage":42} +``` + +### Valid + +```json +{"$schema":"https://agent-plugins.org/schemas/1.0.0/plugin.schema.json","name":"my-plugin","keywords":["tools"]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-003.md new file mode 100644 index 00000000..3a6f760b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-003.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-003 +title: "CDX-PL-003: Missing or Empty Plugin Name - Codex CLI" +sidebar_label: "CDX-PL-003" +description: "agnix rule CDX-PL-003 checks for missing or empty plugin name in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-003", "missing or empty plugin name", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-003` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": ""} +``` + +### Valid + +```json +{"name": "my-plugin"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-004.md new file mode 100644 index 00000000..de379f9d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-004.md @@ -0,0 +1,49 @@ +--- +id: cdx-pl-004 +title: "CDX-PL-004: Invalid Plugin Name Characters - Codex CLI" +sidebar_label: "CDX-PL-004" +description: "agnix rule CDX-PL-004 checks for invalid plugin name characters in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-004", "invalid plugin name characters", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-004` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-08` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.147.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs +- https://github.com/openai/codex/blob/rust-v0.147.0/codex-rs/plugin/src/plugin_id.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "acme..tools"} +``` + +### Valid + +```json +{"name": "acme.tools"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-005.md new file mode 100644 index 00000000..0224de83 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-005.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-005 +title: "CDX-PL-005: Component Path Missing ./ Prefix - Codex CLI" +sidebar_label: "CDX-PL-005" +description: "agnix rule CDX-PL-005 checks for component path missing ./ prefix in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-005", "component path missing ./ prefix", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-005` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "skills": "src"} +``` + +### Valid + +```json +{"name": "my-plugin", "skills": "./src"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-006.md new file mode 100644 index 00000000..831a492e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-006.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-006 +title: "CDX-PL-006: Component Path Directory Traversal - Codex CLI" +sidebar_label: "CDX-PL-006" +description: "agnix rule CDX-PL-006 checks for component path directory traversal in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-006", "component path directory traversal", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-006` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "mcpServers": "./../../../etc/passwd"} +``` + +### Valid + +```json +{"name": "my-plugin", "mcpServers": "./servers"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-007.md new file mode 100644 index 00000000..51350463 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-007.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-007 +title: "CDX-PL-007: Component Path Empty Relative - Codex CLI" +sidebar_label: "CDX-PL-007" +description: "agnix rule CDX-PL-007 checks for component path empty relative in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-PL-007", "component path empty relative", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-007` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "apps": "./"} +``` + +### Valid + +```json +{"name": "my-plugin", "apps": "./apps"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-008.md new file mode 100644 index 00000000..287627cb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-008.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-008 +title: "CDX-PL-008: Too Many Default Prompts - Codex CLI" +sidebar_label: "CDX-PL-008" +description: "agnix rule CDX-PL-008 checks for too many default prompts in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-008", "too many default prompts", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-008` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["a", "b", "c", "d"]}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["Fix the bug", "Add tests"]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-009.md new file mode 100644 index 00000000..70c2208f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-009.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-009 +title: "CDX-PL-009: Default Prompt Too Long - Codex CLI" +sidebar_label: "CDX-PL-009" +description: "agnix rule CDX-PL-009 checks for default prompt too long in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-009", "default prompt too long", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-009` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["<500+ character prompt string>"]}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["Fix the login bug"]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-010.md new file mode 100644 index 00000000..43bbc369 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-010.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-010 +title: "CDX-PL-010: Empty Default Prompt Entry - Codex CLI" +sidebar_label: "CDX-PL-010" +description: "agnix rule CDX-PL-010 checks for empty default prompt entry in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-010", "empty default prompt entry", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-010` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["Fix the bug", "", "Add tests"]}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"defaultPrompt": ["Fix the bug", "Add tests"]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-011.md new file mode 100644 index 00000000..d4421c3c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-011.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-011 +title: "CDX-PL-011: Invalid Interface URL - Codex CLI" +sidebar_label: "CDX-PL-011" +description: "agnix rule CDX-PL-011 checks for invalid interface url in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-011", "invalid interface url", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-011` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"websiteUrl": "not a url"}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"websiteUrl": "https://example.com"}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-012.md new file mode 100644 index 00000000..aa51ee48 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-012.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-012 +title: "CDX-PL-012: Invalid Asset Path - Codex CLI" +sidebar_label: "CDX-PL-012" +description: "agnix rule CDX-PL-012 checks for invalid asset path in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-012", "invalid asset path", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-012` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"logo": "assets/logo.png"}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"logo": "./assets/logo.png"}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-013.md new file mode 100644 index 00000000..97546e45 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-013.md @@ -0,0 +1,49 @@ +--- +id: cdx-pl-013 +title: "CDX-PL-013: Invalid Hooks Value - Codex CLI" +sidebar_label: "CDX-PL-013" +description: "agnix rule CDX-PL-013 checks for invalid hooks value in codex cli files. Severity: LOW. See examples and fix guidance." +keywords: ["CDX-PL-013", "invalid hooks value", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-013` +- **Severity**: `LOW` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core-plugins/src/manifest.rs +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/core-plugins/src/agent_plugin_manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name":"my-plugin","hooks":42} +``` + +### Valid + +```json +{"name":"my-plugin","hooks":["./hooks.json"]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-014.md new file mode 100644 index 00000000..140b80ad --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-014.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-014 +title: "CDX-PL-014: Missing Description - Codex CLI" +sidebar_label: "CDX-PL-014" +description: "agnix rule CDX-PL-014 checks for missing description in codex cli files. Severity: LOW. See examples and fix guidance." +keywords: ["CDX-PL-014", "missing description", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-014` +- **Severity**: `LOW` +- **Category**: `Codex CLI` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.117.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin"} +``` + +### Valid + +```json +{"name": "my-plugin", "description": "Adds code review capabilities"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-015.md new file mode 100644 index 00000000..5480b715 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-015.md @@ -0,0 +1,48 @@ +--- +id: cdx-pl-015 +title: "CDX-PL-015: Invalid Skills Path Type - Codex CLI" +sidebar_label: "CDX-PL-015" +description: "agnix rule CDX-PL-015 checks for invalid skills path type in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-015", "invalid skills path type", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-015` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.137.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "skills": ["./skills"]} +``` + +### Valid + +```json +{"name": "my-plugin", "skills": "./skills"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-016.md new file mode 100644 index 00000000..4410a5f4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-pl-016.md @@ -0,0 +1,49 @@ +--- +id: cdx-pl-016 +title: "CDX-PL-016: Invalid Dark-mode Logo Path - Codex CLI" +sidebar_label: "CDX-PL-016" +description: "agnix rule CDX-PL-016 checks for invalid dark-mode logo path in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-PL-016", "invalid dark-mode logo path", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-PL-016` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-27` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.142.2` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/pull/29488 +- https://github.com/openai/codex/blob/rust-v0.142.2/codex-rs/core-plugins/src/manifest.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "my-plugin", "interface": {"logoDark": "assets/logo-dark.png"}} +``` + +### Valid + +```json +{"name": "my-plugin", "interface": {"logoDark": "./assets/logo-dark.png"}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-000.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-000.md new file mode 100644 index 00000000..704d1309 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-000.md @@ -0,0 +1,49 @@ +--- +id: cdx-req-000 +title: "CDX-REQ-000: Codex requirements.toml TOML Parse Error" +sidebar_label: "CDX-REQ-000" +description: "agnix rule CDX-REQ-000 checks for codex requirements.toml toml parse error in codex cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["CDX-REQ-000", "codex requirements.toml toml parse error", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-REQ-000` +- **Severity**: `HIGH` +- **Category**: `Codex CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-06-04` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.133.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/config/src/config_requirements.rs +- https://github.com/openai/codex/blob/rust-v0.137.0/codex-rs/config/src/loader/mod.rs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +allowed_sandbox_modes = [unclosed +``` + +### Valid + +```toml +allow_managed_hooks_only = true +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-001.md new file mode 100644 index 00000000..bca68f3f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cdx-req-001.md @@ -0,0 +1,51 @@ +--- +id: cdx-req-001 +title: "CDX-REQ-001: Unknown Codex requirements.toml Key - Codex CLI" +sidebar_label: "CDX-REQ-001" +description: "agnix rule CDX-REQ-001 checks for unknown codex requirements.toml key in codex cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CDX-REQ-001", "unknown codex requirements.toml key", "codex cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CDX-REQ-001` +- **Severity**: `MEDIUM` +- **Category**: `Codex CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `>=0.133.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/openai/codex/blob/rust-v0.146.0/codex-rs/config/src/config_requirements.rs +- https://github.com/openai/codex/blob/rust-v0.146.0/docs/config.md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```toml +allowed_sandbox_mode = ["read-only"] +``` + +### Valid + +```toml +allowed_sandbox_modes = ["read-only"] +[windows] +allowed_sandbox_implementations = ["elevated", "unelevated"] +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-001.md new file mode 100644 index 00000000..44181cac --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-001.md @@ -0,0 +1,61 @@ +--- +id: cl-sk-001 +title: "CL-SK-001: Cline Skill Uses Unsupported Field - Cline Skills" +sidebar_label: "CL-SK-001" +description: "agnix rule CL-SK-001 checks for cline skill uses unsupported field in cline skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CL-SK-001", "cline skill uses unsupported field", "cline skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CL-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Cline Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/prompting/cline-memory-bank#cline-memory-bank-custom-instructions-[copy-this] + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +context: fork +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-002.md new file mode 100644 index 00000000..8d306d41 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-002.md @@ -0,0 +1,55 @@ +--- +id: cl-sk-002 +title: "CL-SK-002: Missing Skill Name - Cline Skills" +sidebar_label: "CL-SK-002" +description: "agnix rule CL-SK-002 checks for missing skill name in cline skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CL-SK-002", "missing skill name", "cline skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CL-SK-002` +- **Severity**: `HIGH` +- **Category**: `Cline Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: A skill +--- +# My Skill +``` + +### Valid + +```markdown +--- +name: my-skill +description: A skill +--- +# My Skill +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-003.md new file mode 100644 index 00000000..2ca9608e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cl-sk-003.md @@ -0,0 +1,55 @@ +--- +id: cl-sk-003 +title: "CL-SK-003: Missing Skill Description - Cline Skills" +sidebar_label: "CL-SK-003" +description: "agnix rule CL-SK-003 checks for missing skill description in cline skills files. Severity: HIGH. See examples and fix guidance." +keywords: ["CL-SK-003", "missing skill description", "cline skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CL-SK-003` +- **Severity**: `HIGH` +- **Category**: `Cline Skills` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +--- +# My Skill +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-001.md new file mode 100644 index 00000000..a08a8690 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-001.md @@ -0,0 +1,50 @@ +--- +id: cln-001 +title: "CLN-001: Empty Cline Rules File - Cline" +sidebar_label: "CLN-001" +description: "agnix rule CLN-001 checks for empty cline rules file in cline files. Severity: HIGH. See examples and fix guidance." +keywords: ["CLN-001", "empty cline rules file", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-001` +- **Severity**: `HIGH` +- **Category**: `Cline` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown + +``` + +### Valid + +```markdown +# Project Rules + +Always follow the coding style guide and write tests for new features. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-002.md new file mode 100644 index 00000000..0a19ef5c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-002.md @@ -0,0 +1,60 @@ +--- +id: cln-002 +title: "CLN-002: Invalid Paths Glob in Cline Rules - Cline" +sidebar_label: "CLN-002" +description: "agnix rule CLN-002 checks for invalid paths glob in cline rules in cline files. Severity: HIGH. See examples and fix guidance." +keywords: ["CLN-002", "invalid paths glob in cline rules", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-002` +- **Severity**: `HIGH` +- **Category**: `Cline` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +paths: + - "[unclosed" +--- +# TypeScript Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +paths: + - "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-003.md new file mode 100644 index 00000000..11d97734 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-003.md @@ -0,0 +1,61 @@ +--- +id: cln-003 +title: "CLN-003: Unknown Frontmatter Key in Cline Rules - Cline" +sidebar_label: "CLN-003" +description: "agnix rule CLN-003 checks for unknown frontmatter key in cline rules in cline files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CLN-003", "unknown frontmatter key in cline rules", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-003` +- **Severity**: `MEDIUM` +- **Category**: `Cline` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +paths: + - "**/*.ts" +unknownKey: some-value +--- +# TypeScript Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +paths: + - "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-004.md new file mode 100644 index 00000000..1ae327fb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-004.md @@ -0,0 +1,59 @@ +--- +id: cln-004 +title: "CLN-004: Scalar Paths in Cline Rules - Cline" +sidebar_label: "CLN-004" +description: "agnix rule CLN-004 checks for scalar paths in cline rules in cline files. Severity: HIGH. See examples and fix guidance." +keywords: ["CLN-004", "scalar paths in cline rules", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-004` +- **Severity**: `HIGH` +- **Category**: `Cline` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +paths: "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +paths: + - "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-005.md new file mode 100644 index 00000000..aa7ace2b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-005.md @@ -0,0 +1,52 @@ +--- +id: cln-005 +title: "CLN-005: Empty Workflow File - Cline" +sidebar_label: "CLN-005" +description: "agnix rule CLN-005 checks for empty workflow file in cline files. Severity: HIGH. See examples and fix guidance." +keywords: ["CLN-005", "empty workflow file", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-005` +- **Severity**: `HIGH` +- **Category**: `Cline` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules +``` + +### Valid + +```markdown +# Deploy Workflow + +1. Run tests +2. Build +3. Deploy +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-006.md new file mode 100644 index 00000000..0e8db7d2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-006.md @@ -0,0 +1,57 @@ +--- +id: cln-006 +title: "CLN-006: Workflow With Frontmatter - Cline" +sidebar_label: "CLN-006" +description: "agnix rule CLN-006 checks for workflow with frontmatter in cline files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CLN-006", "workflow with frontmatter", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-006` +- **Severity**: `MEDIUM` +- **Category**: `Cline` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: deploy +--- +# Deploy Workflow + +1. Run tests +2. Deploy +``` + +### Valid + +```markdown +# Deploy Workflow + +1. Run tests +2. Deploy +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cln-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cln-009.md new file mode 100644 index 00000000..c54c6cf4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cln-009.md @@ -0,0 +1,52 @@ +--- +id: cln-009 +title: "CLN-009: Unknown Hook Event Name - Cline" +sidebar_label: "CLN-009" +description: "agnix rule CLN-009 checks for unknown hook event name in cline files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CLN-009", "unknown hook event name", "cline", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CLN-009` +- **Severity**: `MEDIUM` +- **Category**: `Cline` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cline` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cline.bot/customization/cline-rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { "on_magic": [{ "command": "npm test" }] } +} +``` + +### Valid + +```json +{ + "hooks": { "on_save": [{ "command": "npm test" }] } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-001.md new file mode 100644 index 00000000..8275d8de --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-001.md @@ -0,0 +1,52 @@ +--- +id: cop-001 +title: "COP-001: Empty Copilot Instruction File - GitHub Copilot" +sidebar_label: "COP-001" +description: "agnix rule COP-001 checks for empty copilot instruction file in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-001", "empty copilot instruction file", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-001` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-instructions-support +- https://docs.github.com/en/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot +- https://github.blog/changelog/2025-08-28-copilot-coding-agent-now-supports-agents-md-custom-instructions/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown + +``` + +### Valid + +```markdown +# Copilot Instructions + +Follow the project coding standards and use TypeScript strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-002.md new file mode 100644 index 00000000..fe74d95c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-002.md @@ -0,0 +1,56 @@ +--- +id: cop-002 +title: "COP-002: Invalid Frontmatter in Scoped Instructions" +sidebar_label: "COP-002" +description: "agnix rule COP-002 checks for invalid frontmatter in scoped instructions in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-002", "invalid frontmatter in scoped instructions", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-002` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# TypeScript Instructions + +Use strict mode and explicit types. +``` + +### Valid + +```markdown +--- +applyTo: "**/*.ts" +--- +# TypeScript Instructions + +Use strict mode and explicit types. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-003.md new file mode 100644 index 00000000..7d9ec22c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-003.md @@ -0,0 +1,58 @@ +--- +id: cop-003 +title: "COP-003: Invalid Glob Pattern in applyTo - GitHub Copilot" +sidebar_label: "COP-003" +description: "agnix rule COP-003 checks for invalid glob pattern in applyto in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-003", "invalid glob pattern in applyto", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-003` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +applyTo: "[unclosed" +--- +# TypeScript Instructions + +Use strict mode. +``` + +### Valid + +```markdown +--- +applyTo: "**/*.ts" +--- +# TypeScript Instructions + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-004.md new file mode 100644 index 00000000..b0aa1a74 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-004.md @@ -0,0 +1,60 @@ +--- +id: cop-004 +title: "COP-004: Unknown Frontmatter Keys - GitHub Copilot" +sidebar_label: "COP-004" +description: "agnix rule COP-004 checks for unknown frontmatter keys in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-004", "unknown frontmatter keys", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-004` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +applyTo: "**/*.ts" +unknownKey: some-value +--- +# TypeScript Instructions + +Use strict mode. +``` + +### Valid + +```markdown +--- +applyTo: "**/*.ts" +--- +# TypeScript Instructions + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-005.md new file mode 100644 index 00000000..d1e57882 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-005.md @@ -0,0 +1,60 @@ +--- +id: cop-005 +title: "COP-005: Invalid excludeAgent Value - GitHub Copilot" +sidebar_label: "COP-005" +description: "agnix rule COP-005 checks for invalid excludeagent value in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-005", "invalid excludeagent value", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-005` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +applyTo: "**/*.ts" +excludeAgent: "invalid-agent" +--- +# TypeScript Instructions + +Use strict mode. +``` + +### Valid + +```markdown +--- +applyTo: "**/*.ts" +excludeAgent: "code-review" +--- +# TypeScript Instructions + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-006.md new file mode 100644 index 00000000..b114202c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-006.md @@ -0,0 +1,89 @@ +--- +id: cop-006 +title: "COP-006: File Length Limit - GitHub Copilot" +sidebar_label: "COP-006" +description: "agnix rule COP-006 checks for file length limit in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-006", "file length limit", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-006` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/custom-instructions/adding-repository-custom-instructions-for-github-copilot +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Copilot Instructions + +This file contains overly detailed coding guidelines. + +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +Follow consistent naming conventions for variables and functions. Use descriptive names that clearly convey purpose. +``` + +### Valid + +```markdown +# Copilot Instructions + +Keep instructions concise and focused on key coding standards. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-007.md new file mode 100644 index 00000000..4f6ad358 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-007.md @@ -0,0 +1,54 @@ +--- +id: cop-007 +title: "COP-007: Custom Agent Missing Description - GitHub Copilot" +sidebar_label: "COP-007" +description: "agnix rule COP-007 checks for custom agent missing description in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-007", "custom agent missing description", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-007` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +target: vscode +--- +Review pull requests. +``` + +### Valid + +```markdown +--- +description: Review pull requests for quality and safety +--- +Review pull requests and suggest focused improvements. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-008.md new file mode 100644 index 00000000..fc7b6008 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-008.md @@ -0,0 +1,60 @@ +--- +id: cop-008 +title: "COP-008: Custom Agent Unknown or Invalid Frontmatter Field" +sidebar_label: "COP-008" +description: "agnix rule COP-008 checks for custom agent unknown or invalid frontmatter field in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-008", "custom agent unknown or invalid frontmatter field", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-008` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Review pull requests +user-invocable: "yes" +unknown-field: true +--- +Review pull requests. +``` + +### Valid + +```markdown +--- +name: reviewer +description: Review pull requests +user-invocable: true +metadata: + owner: security +--- +Review pull requests. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-009.md new file mode 100644 index 00000000..d91ff664 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-009.md @@ -0,0 +1,56 @@ +--- +id: cop-009 +title: "COP-009: Custom Agent Invalid Target - GitHub Copilot" +sidebar_label: "COP-009" +description: "agnix rule COP-009 checks for custom agent invalid target in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-009", "custom agent invalid target", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-009` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Review pull requests +target: desktop +--- +Review pull requests. +``` + +### Valid + +```markdown +--- +description: Review pull requests +target: vscode +--- +Review pull requests. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-010.md new file mode 100644 index 00000000..41b0e5f6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-010.md @@ -0,0 +1,56 @@ +--- +id: cop-010 +title: "COP-010: Custom Agent infer Field Must Be Boolean" +sidebar_label: "COP-010" +description: "agnix rule COP-010 checks for custom agent infer field must be boolean in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-010", "custom agent infer field must be boolean", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-010` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Review pull requests +infer: "auto" +--- +Review pull requests. +``` + +### Valid + +```markdown +--- +description: Review pull requests +infer: true +--- +Review pull requests. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-011.md new file mode 100644 index 00000000..e0266347 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-011.md @@ -0,0 +1,54 @@ +--- +id: cop-011 +title: "COP-011: Custom Agent Prompt Body Exceeds Length Limit" +sidebar_label: "COP-011" +description: "agnix rule COP-011 checks for custom agent prompt body exceeds length limit in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-011", "custom agent prompt body exceeds length limit", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-011` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Large prompt +--- +xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx +``` + +### Valid + +```markdown +--- +description: Review pull requests +--- +Use concise, focused instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-012.md new file mode 100644 index 00000000..ff9795ef --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-012.md @@ -0,0 +1,56 @@ +--- +id: cop-012 +title: "COP-012: Custom Agent Uses GitHub.com Unsupported Fields" +sidebar_label: "COP-012" +description: "agnix rule COP-012 checks for custom agent uses github.com unsupported fields in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-012", "custom agent uses github.com unsupported fields", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-012` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/reference/custom-agents-configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Review pull requests +model: gpt-4.1 +argument-hint: branch-name +--- +Review pull requests. +``` + +### Valid + +```markdown +--- +description: Review pull requests +--- +Review pull requests. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-013.md new file mode 100644 index 00000000..1d5d1504 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-013.md @@ -0,0 +1,54 @@ +--- +id: cop-013 +title: "COP-013: Prompt File Empty Body - GitHub Copilot" +sidebar_label: "COP-013" +description: "agnix rule COP-013 checks for prompt file empty body in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-013", "prompt file empty body", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-013` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.visualstudio.com/docs/copilot/customization/prompt-files +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Refactor selected code +--- +``` + +### Valid + +```markdown +--- +description: Refactor selected code +--- +Refactor the selected code while preserving behavior. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-014.md new file mode 100644 index 00000000..ad57c1a7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-014.md @@ -0,0 +1,57 @@ +--- +id: cop-014 +title: "COP-014: Prompt File Unknown Frontmatter Field" +sidebar_label: "COP-014" +description: "agnix rule COP-014 checks for prompt file unknown frontmatter field in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-014", "prompt file unknown frontmatter field", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-014` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.visualstudio.com/docs/copilot/customization/prompt-files +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Refactor selected code +unknown-option: true +--- +Refactor the selected code. +``` + +### Valid + +```markdown +--- +description: Refactor selected code +agent: ask +--- +Refactor the selected code. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-015.md new file mode 100644 index 00000000..ccc77246 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-015.md @@ -0,0 +1,57 @@ +--- +id: cop-015 +title: "COP-015: Prompt File Invalid Agent Mode - GitHub Copilot" +sidebar_label: "COP-015" +description: "agnix rule COP-015 checks for prompt file invalid agent mode in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-015", "prompt file invalid agent mode", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-015` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.visualstudio.com/docs/copilot/customization/prompt-files +- https://docs.github.com/en/copilot/reference/custom-instructions-support + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: Refactor selected code +agent: maybe +--- +Refactor the selected code. +``` + +### Valid + +```markdown +--- +description: Refactor selected code +agent: ask +--- +Refactor the selected code. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-017.md new file mode 100644 index 00000000..d15ba994 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-017.md @@ -0,0 +1,48 @@ +--- +id: cop-017 +title: "COP-017: Copilot Hooks Schema Validation - GitHub Copilot" +sidebar_label: "COP-017" +description: "agnix rule COP-017 checks for copilot hooks schema validation in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-017", "copilot hooks schema validation", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-017` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/concepts/agents/coding-agent/about-hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"version":1,"hooks":[{"events":["sessionStart"],"command":{"bash":"echo start"}}]} +``` + +### Valid + +```json +{"version":1,"hooks":[{"type":"command","events":["sessionStart"],"command":{"bash":"echo start"}}]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-018.md new file mode 100644 index 00000000..8cc8edf0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-018.md @@ -0,0 +1,56 @@ +--- +id: cop-018 +title: "COP-018: Invalid copilot-setup-steps Job - GitHub Copilot" +sidebar_label: "COP-018" +description: "agnix rule COP-018 checks for invalid copilot-setup-steps job in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-018", "invalid copilot-setup-steps job", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-018` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/agents/copilot-coding-agent/customizing-the-development-environment-for-copilot-coding-agent + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +jobs: + setup: + runs-on: ubuntu-latest + steps: + - run: echo setup +``` + +### Valid + +```markdown +jobs: + copilot-setup-steps: + runs-on: ubuntu-latest + steps: + - run: echo setup +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-019.md new file mode 100644 index 00000000..497cf87d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-019.md @@ -0,0 +1,54 @@ +--- +id: cop-019 +title: "COP-019: Plugin Missing Required Fields - GitHub Copilot" +sidebar_label: "COP-019" +description: "agnix rule COP-019 checks for plugin missing required fields in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-019", "plugin missing required fields", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-019` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "version": "1.0.0", + "description": "A plugin" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-020.md new file mode 100644 index 00000000..5e6cc6cc --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-020.md @@ -0,0 +1,56 @@ +--- +id: cop-020 +title: "COP-020: Plugin Invalid Field Types - GitHub Copilot" +sidebar_label: "COP-020" +description: "agnix rule COP-020 checks for plugin invalid field types in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-020", "plugin invalid field types", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-020` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "version": 1, + "enabled": "yes" +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "version": "1.0.0", + "enabled": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-022.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-022.md new file mode 100644 index 00000000..8b063555 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-022.md @@ -0,0 +1,54 @@ +--- +id: cop-022 +title: "COP-022: CLI Skill Missing Frontmatter - GitHub Copilot" +sidebar_label: "COP-022" +description: "agnix rule COP-022 checks for cli skill missing frontmatter in github copilot files. Severity: HIGH. See examples and fix guidance." +keywords: ["COP-022", "cli skill missing frontmatter", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-022` +- **Severity**: `HIGH` +- **Category**: `GitHub Copilot` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# My Skill +Instructions without frontmatter. +``` + +### Valid + +```markdown +--- +name: my-skill +description: Skill for linting +--- +# My Skill +Instructions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-023.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-023.md new file mode 100644 index 00000000..657866e8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-023.md @@ -0,0 +1,54 @@ +--- +id: cop-023 +title: "COP-023: CLI Skill Name Format - GitHub Copilot" +sidebar_label: "COP-023" +description: "agnix rule COP-023 checks for cli skill name format in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-023", "cli skill name format", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-023` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: Lint Config!! +description: Lint config files +--- +``` + +### Valid + +```markdown +--- +name: lint-config +description: Lint config files +--- +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-024.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-024.md new file mode 100644 index 00000000..26ed8b61 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-024.md @@ -0,0 +1,55 @@ +--- +id: cop-024 +title: "COP-024: CLI Skill Unknown Field - GitHub Copilot" +sidebar_label: "COP-024" +description: "agnix rule COP-024 checks for cli skill unknown field in github copilot files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["COP-024", "cli skill unknown field", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-024` +- **Severity**: `MEDIUM` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful skill +priority: high +--- +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful skill +--- +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-025.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-025.md new file mode 100644 index 00000000..24ba9658 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-025.md @@ -0,0 +1,48 @@ +--- +id: cop-025 +title: "COP-025: Agent File Wrong Location - GitHub Copilot" +sidebar_label: "COP-025" +description: "agnix rule COP-025 checks for agent file wrong location in github copilot files. Severity: LOW. See examples and fix guidance." +keywords: ["COP-025", "agent file wrong location", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-025` +- **Severity**: `LOW` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +copilot-instructions.md +``` + +### Valid + +```markdown +.github/copilot-instructions.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-026.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-026.md new file mode 100644 index 00000000..c79175f8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-026.md @@ -0,0 +1,52 @@ +--- +id: cop-026 +title: "COP-026: Deprecated SSE Transport - GitHub Copilot" +sidebar_label: "COP-026" +description: "agnix rule COP-026 checks for deprecated sse transport in github copilot files. Severity: LOW. See examples and fix guidance." +keywords: ["COP-026", "deprecated sse transport", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-026` +- **Severity**: `LOW` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "transport": "sse" +} +``` + +### Valid + +```json +{ + "transport": "streamable-http" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cop-027.md b/website/versioned_docs/version-0.47.0/rules/generated/cop-027.md new file mode 100644 index 00000000..f6e7a77e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cop-027.md @@ -0,0 +1,54 @@ +--- +id: cop-027 +title: "COP-027: Deprecated Infer Field - GitHub Copilot" +sidebar_label: "COP-027" +description: "agnix rule COP-027 checks for deprecated infer field in github copilot files. Severity: LOW. See examples and fix guidance." +keywords: ["COP-027", "deprecated infer field", "github copilot", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `COP-027` +- **Severity**: `LOW` +- **Category**: `GitHub Copilot` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "my-plugin", + "infer": true +} +``` + +### Valid + +```json +{ + "name": "my-plugin", + "version": "1.0.0" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cp-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cp-sk-001.md new file mode 100644 index 00000000..0d420006 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cp-sk-001.md @@ -0,0 +1,61 @@ +--- +id: cp-sk-001 +title: "CP-SK-001: Copilot Skill Uses Unsupported Field" +sidebar_label: "CP-SK-001" +description: "agnix rule CP-SK-001 checks for copilot skill uses unsupported field in copilot skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CP-SK-001", "copilot skill uses unsupported field", "copilot skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CP-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Copilot Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `github-copilot` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.github.com/en/copilot/how-tos/copilot-on-github/customize-copilot/add-custom-instructions/add-repository-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +agent: general-purpose +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cr-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cr-sk-001.md new file mode 100644 index 00000000..36d9a3fa --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cr-sk-001.md @@ -0,0 +1,62 @@ +--- +id: cr-sk-001 +title: "CR-SK-001: Cursor Skill Uses Unsupported Field" +sidebar_label: "CR-SK-001" +description: "agnix rule CR-SK-001 checks for cursor skill uses unsupported field in cursor skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CR-SK-001", "cursor skill uses unsupported field", "cursor skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CR-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Cursor Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/context/skills + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +model: opus +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +disable-model-invocation: true +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-001.md new file mode 100644 index 00000000..83ea00f7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-001.md @@ -0,0 +1,56 @@ +--- +id: cur-001 +title: "CUR-001: Empty Cursor Rule File - Cursor" +sidebar_label: "CUR-001" +description: "agnix rule CUR-001 checks for empty cursor rule file in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-001", "empty cursor rule file", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-001` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: +--- +``` + +### Valid + +```markdown +--- +description: TypeScript coding rules +globs: "**/*.ts" +--- +# TypeScript Rules + +Use strict mode and explicit types. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-002.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-002.md new file mode 100644 index 00000000..2f804959 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-002.md @@ -0,0 +1,56 @@ +--- +id: cur-002 +title: "CUR-002: Missing Frontmatter in .mdc File - Cursor" +sidebar_label: "CUR-002" +description: "agnix rule CUR-002 checks for missing frontmatter in .mdc file in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-002", "missing frontmatter in .mdc file", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-002` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# TypeScript Rules + +Use strict mode and explicit types. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +globs: "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-003.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-003.md new file mode 100644 index 00000000..67de3790 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-003.md @@ -0,0 +1,59 @@ +--- +id: cur-003 +title: "CUR-003: Invalid YAML Frontmatter - Cursor" +sidebar_label: "CUR-003" +description: "agnix rule CUR-003 checks for invalid yaml frontmatter in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-003", "invalid yaml frontmatter", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-003` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +globs: [unclosed +--- +# Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +globs: "**/*.ts" +--- +# Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-004.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-004.md new file mode 100644 index 00000000..7bcd15e3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-004.md @@ -0,0 +1,60 @@ +--- +id: cur-004 +title: "CUR-004: Invalid Glob Pattern in globs Field - Cursor" +sidebar_label: "CUR-004" +description: "agnix rule CUR-004 checks for invalid glob pattern in globs field in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-004", "invalid glob pattern in globs field", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-004` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: TypeScript rules +globs: "[unclosed" +--- +# Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +globs: "**/*.ts" +--- +# Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-005.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-005.md new file mode 100644 index 00000000..01438a99 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-005.md @@ -0,0 +1,61 @@ +--- +id: cur-005 +title: "CUR-005: Unknown Frontmatter Keys - Cursor" +sidebar_label: "CUR-005" +description: "agnix rule CUR-005 checks for unknown frontmatter keys in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-005", "unknown frontmatter keys", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-005` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: TypeScript rules +unknownKey: some-value +--- +# Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +globs: "**/*.ts" +alwaysApply: false +--- +# Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-006.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-006.md new file mode 100644 index 00000000..2109d104 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-006.md @@ -0,0 +1,56 @@ +--- +id: cur-006 +title: "CUR-006: Legacy .cursorrules File Detected - Cursor" +sidebar_label: "CUR-006" +description: "agnix rule CUR-006 checks for legacy .cursorrules file detected in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-006", "legacy .cursorrules file detected", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-006` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Legacy cursor rules + +Use strict mode and explicit types. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +globs: "**/*.ts" +--- +# TypeScript Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-007.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-007.md new file mode 100644 index 00000000..8bcfc558 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-007.md @@ -0,0 +1,61 @@ +--- +id: cur-007 +title: "CUR-007: alwaysApply with Redundant globs - Cursor" +sidebar_label: "CUR-007" +description: "agnix rule CUR-007 checks for alwaysapply with redundant globs in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-007", "alwaysapply with redundant globs", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-007` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: TypeScript rules +alwaysApply: true +globs: "**/*.ts" +--- +# Rules + +Use strict mode. +``` + +### Valid + +```markdown +--- +description: Global rules +alwaysApply: true +--- +# Rules + +Always apply these rules. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-008.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-008.md new file mode 100644 index 00000000..989b98ea --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-008.md @@ -0,0 +1,60 @@ +--- +id: cur-008 +title: "CUR-008: Invalid alwaysApply Type - Cursor" +sidebar_label: "CUR-008" +description: "agnix rule CUR-008 checks for invalid alwaysapply type in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-008", "invalid alwaysapply type", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-008` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +description: TypeScript rules +alwaysApply: "true" +--- +# Rules + +Always use strict mode. +``` + +### Valid + +```markdown +--- +description: TypeScript rules +alwaysApply: true +--- +# Rules + +Always use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-009.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-009.md new file mode 100644 index 00000000..5b4483b1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-009.md @@ -0,0 +1,58 @@ +--- +id: cur-009 +title: "CUR-009: Missing Description for Agent-Requested Rule" +sidebar_label: "CUR-009" +description: "agnix rule CUR-009 checks for missing description for agent-requested rule in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-009", "missing description for agent-requested rule", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-009` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- + +--- +# Rules + +Use strict mode and explicit types. +``` + +### Valid + +```markdown +--- +description: TypeScript coding standards and best practices +--- +# Rules + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-010.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-010.md new file mode 100644 index 00000000..d37f74e0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-010.md @@ -0,0 +1,48 @@ +--- +id: cur-010 +title: "CUR-010: Invalid Cursor Hooks Schema - Cursor" +sidebar_label: "CUR-010" +description: "agnix rule CUR-010 checks for invalid cursor hooks schema in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-010", "invalid cursor hooks schema", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-010` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"hooks":{}} +``` + +### Valid + +```json +{"version":1,"hooks":{"sessionStart":[{"type":"command","command":"echo start"}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-011.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-011.md new file mode 100644 index 00000000..228b69f0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-011.md @@ -0,0 +1,48 @@ +--- +id: cur-011 +title: "CUR-011: Unknown Cursor Hook Event Name - Cursor" +sidebar_label: "CUR-011" +description: "agnix rule CUR-011 checks for unknown cursor hook event name in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-011", "unknown cursor hook event name", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-011` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"version":1,"hooks":{"unknownEvent":[{"type":"command","command":"echo start"}]}} +``` + +### Valid + +```json +{"version":1,"hooks":{"workspaceOpen":[{"type":"command","command":"echo open"}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-012.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-012.md new file mode 100644 index 00000000..b3580874 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-012.md @@ -0,0 +1,48 @@ +--- +id: cur-012 +title: "CUR-012: Hook Entry Missing Required Command Field - Cursor" +sidebar_label: "CUR-012" +description: "agnix rule CUR-012 checks for hook entry missing required command field in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-012", "hook entry missing required command field", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-012` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"version":1,"hooks":{"sessionStart":[{"type":"command"}]}} +``` + +### Valid + +```json +{"version":1,"hooks":{"sessionStart":[{"type":"command","command":"echo start"}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-013.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-013.md new file mode 100644 index 00000000..972fd4b3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-013.md @@ -0,0 +1,48 @@ +--- +id: cur-013 +title: "CUR-013: Invalid Cursor Hook Type Value - Cursor" +sidebar_label: "CUR-013" +description: "agnix rule CUR-013 checks for invalid cursor hook type value in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-013", "invalid cursor hook type value", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-013` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"version":1,"hooks":{"sessionStart":[{"type":"agent","command":"echo start"}]}} +``` + +### Valid + +```json +{"version":1,"hooks":{"beforeShellExecution":[{"type":"prompt","prompt":"Is this command safe?"}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-014.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-014.md new file mode 100644 index 00000000..c4695217 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-014.md @@ -0,0 +1,60 @@ +--- +id: cur-014 +title: "CUR-014: Invalid Cursor Subagent Frontmatter - Cursor" +sidebar_label: "CUR-014" +description: "agnix rule CUR-014 checks for invalid cursor subagent frontmatter in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-014", "invalid cursor subagent frontmatter", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-014` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/subagents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: ReviewerAgent +description: 123 +readonly: "true" +--- +Review staged changes. +``` + +### Valid + +```markdown +--- +name: reviewer-agent +description: Reviews code for defects +model: claude-opus-5[effort=high] +readonly: true +is_background: false +--- +Review staged changes and prioritize findings. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-015.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-015.md new file mode 100644 index 00000000..3f73565f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-015.md @@ -0,0 +1,55 @@ +--- +id: cur-015 +title: "CUR-015: Empty Cursor Subagent Body - Cursor" +sidebar_label: "CUR-015" +description: "agnix rule CUR-015 checks for empty cursor subagent body in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-015", "empty cursor subagent body", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-015` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/subagents + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: reviewer-agent +description: Reviews code for defects +--- +``` + +### Valid + +```markdown +--- +name: reviewer-agent +description: Reviews code for defects +--- +Review the diff and return a concise risk report. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-016.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-016.md new file mode 100644 index 00000000..c4e21c0e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-016.md @@ -0,0 +1,49 @@ +--- +id: cur-016 +title: "CUR-016: Invalid Cursor Environment Schema - Cursor" +sidebar_label: "CUR-016" +description: "agnix rule CUR-016 checks for invalid cursor environment schema in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-016", "invalid cursor environment schema", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-016` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-05` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/cloud-agent/setup +- https://cursor.com/schemas/environment.schema.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"install":42,"terminals":[{"name":"app"}]} +``` + +### Valid + +```json +{"$schema":"https://cursor.com/schemas/environment.schema.json","build":{"dockerfile":"Dockerfile","context":".."},"install":"npm ci","start":"npm run dev","terminals":[{"name":"app","command":"npm run dev"}]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-017.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-017.md new file mode 100644 index 00000000..76c6c205 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-017.md @@ -0,0 +1,56 @@ +--- +id: cur-017 +title: "CUR-017: Invalid Hook Entry Field Types - Cursor" +sidebar_label: "CUR-017" +description: "agnix rule CUR-017 checks for invalid hook entry field types in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-017", "invalid hook entry field types", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-017` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "beforeShellExecution": [{ "type": "command", "command": "npm run lint", "timeout": "slow", "failClosed": "yes" }] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "beforeShellExecution": [{ "type": "command", "command": "npm run lint", "timeout": 30, "failClosed": true }] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-018.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-018.md new file mode 100644 index 00000000..f88cd13a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-018.md @@ -0,0 +1,56 @@ +--- +id: cur-018 +title: "CUR-018: Invalid or Missing Prompt Hook Field - Cursor" +sidebar_label: "CUR-018" +description: "agnix rule CUR-018 checks for invalid or missing prompt hook field in cursor files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CUR-018", "invalid or missing prompt hook field", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-018` +- **Severity**: `MEDIUM` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "beforeShellExecution": [{ "type": "prompt", "prompt": null }] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "beforeShellExecution": [{ "type": "prompt", "prompt": "Review this command" }] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-019.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-019.md new file mode 100644 index 00000000..3b9a3264 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-019.md @@ -0,0 +1,56 @@ +--- +id: cur-019 +title: "CUR-019: Invalid Prompt Hook Model Type - Cursor" +sidebar_label: "CUR-019" +description: "agnix rule CUR-019 checks for invalid prompt hook model type in cursor files. Severity: LOW. See examples and fix guidance." +keywords: ["CUR-019", "invalid prompt hook model type", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-019` +- **Severity**: `LOW` +- **Category**: `Cursor` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "ai-review": [{ "type": "prompt", "prompt": "Review", "model": 123 }] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "ai-review": [{ "type": "prompt", "prompt": "Review", "model": "gpt-4" }] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cur-020.md b/website/versioned_docs/version-0.47.0/rules/generated/cur-020.md new file mode 100644 index 00000000..b44f5dca --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cur-020.md @@ -0,0 +1,48 @@ +--- +id: cur-020 +title: "CUR-020: Ignored Plain Markdown Cursor Rule - Cursor" +sidebar_label: "CUR-020" +description: "agnix rule CUR-020 checks for ignored plain markdown cursor rule in cursor files. Severity: HIGH. See examples and fix guidance." +keywords: ["CUR-020", "ignored plain markdown cursor rule", "cursor", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CUR-020` +- **Severity**: `HIGH` +- **Category**: `Cursor` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +.cursor/rules/typescript.md +``` + +### Valid + +```markdown +.cursor/rules/typescript.mdc +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/cx-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/cx-sk-001.md new file mode 100644 index 00000000..16cbfad7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/cx-sk-001.md @@ -0,0 +1,61 @@ +--- +id: cx-sk-001 +title: "CX-SK-001: Codex Skill Uses Unsupported Field - Codex Skills" +sidebar_label: "CX-SK-001" +description: "agnix rule CX-SK-001 checks for codex skill uses unsupported field in codex skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["CX-SK-001", "codex skill uses unsupported field", "codex skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `CX-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Codex Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +hooks: some-value +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-001.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-001.md new file mode 100644 index 00000000..86146c50 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-001.md @@ -0,0 +1,63 @@ +--- +id: gm-001 +title: "GM-001: Invalid Markdown Structure in GEMINI.md - Gemini CLI" +sidebar_label: "GM-001" +description: "agnix rule GM-001 checks for invalid markdown structure in gemini.md in gemini cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["GM-001", "invalid markdown structure in gemini.md", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-001` +- **Severity**: `HIGH` +- **Category**: `Gemini CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/gemini-md/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +````markdown +# Project + +This is a web application. + +```bash +npm install +```` + +### Valid + +````markdown +# Project + +This is a web application. + +```bash +npm install +``` + +## Testing + +Run npm test. +```` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-002.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-002.md new file mode 100644 index 00000000..10a76970 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-002.md @@ -0,0 +1,54 @@ +--- +id: gm-002 +title: "GM-002: Missing Section Headers in GEMINI.md - Gemini CLI" +sidebar_label: "GM-002" +description: "agnix rule GM-002 checks for missing section headers in gemini.md in gemini cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["GM-002", "missing section headers in gemini.md", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-002` +- **Severity**: `MEDIUM` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/gemini-md/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +Just plain text instructions without any section headers or structure. +``` + +### Valid + +```markdown +# My Project + +A web application built with TypeScript. + +## Build + +Run npm build. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-003.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-003.md new file mode 100644 index 00000000..9d30f044 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-003.md @@ -0,0 +1,60 @@ +--- +id: gm-003 +title: "GM-003: Missing Project Context in GEMINI.md - Gemini CLI" +sidebar_label: "GM-003" +description: "agnix rule GM-003 checks for missing project context in gemini.md in gemini cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["GM-003", "missing project context in gemini.md", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-003` +- **Severity**: `MEDIUM` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/gemini-md/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Build Commands + +Run npm install and npm build. + +## Testing + +Use npm test. +``` + +### Valid + +```markdown +# Project + +This is a linter for agent configurations. + +## Build + +Run cargo build. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-004.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-004.md new file mode 100644 index 00000000..883f709d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-004.md @@ -0,0 +1,48 @@ +--- +id: gm-004 +title: "GM-004: Invalid Hooks Configuration in Gemini Settings" +sidebar_label: "GM-004" +description: "agnix rule GM-004 checks for invalid hooks configuration in gemini settings in gemini cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["GM-004", "invalid hooks configuration in gemini settings", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-004` +- **Severity**: `MEDIUM` +- **Category**: `Gemini CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"hooksConfig":{"InvalidEvent":[{"type":"command","command":"echo test"}]}} +``` + +### Valid + +```json +{"hooksConfig":{"BeforeAgent":[{"type":"command","command":"echo test"}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-005.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-005.md new file mode 100644 index 00000000..b5264837 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-005.md @@ -0,0 +1,48 @@ +--- +id: gm-005 +title: "GM-005: Invalid Extension Manifest - Gemini CLI" +sidebar_label: "GM-005" +description: "agnix rule GM-005 checks for invalid extension manifest in gemini cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["GM-005", "invalid extension manifest", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-005` +- **Severity**: `HIGH` +- **Category**: `Gemini CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/extensions/reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"version":"1.0.0"} +``` + +### Valid + +```json +{"name":"my-extension","version":"1.0.0","description":"A useful extension"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-006.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-006.md new file mode 100644 index 00000000..4c79e896 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-006.md @@ -0,0 +1,50 @@ +--- +id: gm-006 +title: "GM-006: Invalid .geminiignore File - Gemini CLI" +sidebar_label: "GM-006" +description: "agnix rule GM-006 checks for invalid .geminiignore file in gemini cli files. Severity: LOW. See examples and fix guidance." +keywords: ["GM-006", "invalid .geminiignore file", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-006` +- **Severity**: `LOW` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Gemini +``` + +### Valid + +```markdown +node_modules/ +*.log +.env +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-007.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-007.md new file mode 100644 index 00000000..29120b89 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-007.md @@ -0,0 +1,48 @@ +--- +id: gm-007 +title: "GM-007: @import File Not Found in GEMINI.md - Gemini CLI" +sidebar_label: "GM-007" +description: "agnix rule GM-007 checks for @import file not found in gemini.md in gemini cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["GM-007", "@import file not found in gemini.md", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-007` +- **Severity**: `MEDIUM` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/gemini-md/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +@import nonexistent-file.md +``` + +### Valid + +```markdown +@import shared-rules.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-008.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-008.md new file mode 100644 index 00000000..4a4820e2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-008.md @@ -0,0 +1,48 @@ +--- +id: gm-008 +title: "GM-008: Invalid Context File Name Configuration - Gemini CLI" +sidebar_label: "GM-008" +description: "agnix rule GM-008 checks for invalid context file name configuration in gemini cli files. Severity: LOW. See examples and fix guidance." +keywords: ["GM-008", "invalid context file name configuration", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-008` +- **Severity**: `LOW` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/extensions/reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"contextFileName":"docs/context.md"} +``` + +### Valid + +```json +{"contextFileName":"CONTEXT.md"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-009.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-009.md new file mode 100644 index 00000000..7168e9b7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-009.md @@ -0,0 +1,48 @@ +--- +id: gm-009 +title: "GM-009: Settings.json Parse Error - Gemini CLI" +sidebar_label: "GM-009" +description: "agnix rule GM-009 checks for settings.json parse error in gemini cli files. Severity: HIGH. See examples and fix guidance." +keywords: ["GM-009", "settings.json parse error", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-009` +- **Severity**: `HIGH` +- **Category**: `Gemini CLI` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://geminicli.com/docs/cli/settings + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ invalid json } +``` + +### Valid + +```json +{"general":{},"model":{}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-010.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-010.md new file mode 100644 index 00000000..cb30e0ab --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-010.md @@ -0,0 +1,50 @@ +--- +id: gm-010 +title: "GM-010: memoryManager Without autoMemory After v0.40 Split" +sidebar_label: "GM-010" +description: "agnix rule GM-010 checks for memorymanager without automemory after v0.40 split in gemini cli files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["GM-010", "memorymanager without automemory after v0.40 split", "gemini cli", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-010` +- **Severity**: `MEDIUM` +- **Category**: `Gemini CLI` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-29` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `>=0.40.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/google-gemini/gemini-cli/pull/25601 +- https://github.com/google-gemini/gemini-cli/blob/v0.40.0/packages/cli/src/config/settingsSchema.ts +- https://github.com/google-gemini/gemini-cli/blob/v0.40.0/docs/cli/auto-memory.md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"experimental":{"memoryManager":true}} +``` + +### Valid + +```json +{"experimental":{"memoryManager":true,"autoMemory":true}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/gm-ag-001.md b/website/versioned_docs/version-0.47.0/rules/generated/gm-ag-001.md new file mode 100644 index 00000000..5bbf1955 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/gm-ag-001.md @@ -0,0 +1,68 @@ +--- +id: gm-ag-001 +title: "GM-AG-001: Invalid auth block in Gemini agent MCP server" +sidebar_label: "GM-AG-001" +description: "agnix rule GM-AG-001 checks for invalid auth block in gemini agent mcp server in gemini agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["GM-AG-001", "invalid auth block in gemini agent mcp server", "gemini agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `GM-AG-001` +- **Severity**: `HIGH` +- **Category**: `Gemini Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `gemini-cli` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/google-gemini/gemini-cli/pull/24770 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +kind: local +name: spanner-agent +mcp_servers: + spanner: + auth: + type: basic-auth +system_prompt: Example +--- +``` + +### Valid + +```text +--- +kind: local +name: spanner-agent +mcp_servers: + spanner: + url: https://spanner.googleapis.com/mcp + type: http + auth: + type: google-credentials + scopes: + - https://www.googleapis.com/auth/cloud-platform +system_prompt: Example +--- +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-001.md new file mode 100644 index 00000000..e091fdda --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-001.md @@ -0,0 +1,58 @@ +--- +id: kiro-001 +title: "KIRO-001: Invalid Steering File Inclusion Mode" +sidebar_label: "KIRO-001" +description: "agnix rule KIRO-001 checks for invalid steering file inclusion mode in kiro steering files. Severity: HIGH. See examples and fix guidance." +keywords: ["KIRO-001", "invalid steering file inclusion mode", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-001` +- **Severity**: `HIGH` +- **Category**: `Kiro Steering` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: invalid_mode +--- +# TypeScript Guidelines + +Use strict mode. +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# TypeScript Guidelines + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-002.md new file mode 100644 index 00000000..fa881490 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-002.md @@ -0,0 +1,56 @@ +--- +id: kiro-002 +title: "KIRO-002: Missing Required Fields for Inclusion Mode" +sidebar_label: "KIRO-002" +description: "agnix rule KIRO-002 checks for missing required fields for inclusion mode in kiro steering files. Severity: HIGH. See examples and fix guidance." +keywords: ["KIRO-002", "missing required fields for inclusion mode", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-002` +- **Severity**: `HIGH` +- **Category**: `Kiro Steering` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: auto +--- +# TypeScript Guidelines +``` + +### Valid + +```markdown +--- +inclusion: auto +name: typescript-guidelines +description: Guidelines for TypeScript development +--- +# TypeScript Guidelines +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-003.md new file mode 100644 index 00000000..5b29804a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-003.md @@ -0,0 +1,56 @@ +--- +id: kiro-003 +title: "KIRO-003: Invalid fileMatchPattern Glob - Kiro Steering" +sidebar_label: "KIRO-003" +description: "agnix rule KIRO-003 checks for invalid filematchpattern glob in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-003", "invalid filematchpattern glob", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-003` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: fileMatch +fileMatchPattern: "[unclosed" +--- +# TypeScript Guidelines +``` + +### Valid + +```markdown +--- +inclusion: fileMatch +fileMatchPattern: "**/*.ts" +--- +# TypeScript Guidelines +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-004.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-004.md new file mode 100644 index 00000000..38052a64 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-004.md @@ -0,0 +1,53 @@ +--- +id: kiro-004 +title: "KIRO-004: Empty Kiro Steering File - Kiro Steering" +sidebar_label: "KIRO-004" +description: "agnix rule KIRO-004 checks for empty kiro steering file in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-004", "empty kiro steering file", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-004` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown + +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# TypeScript Guidelines + +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-005.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-005.md new file mode 100644 index 00000000..211da475 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-005.md @@ -0,0 +1,55 @@ +--- +id: kiro-005 +title: "KIRO-005: Empty Steering Body After Frontmatter" +sidebar_label: "KIRO-005" +description: "agnix rule KIRO-005 checks for empty steering body after frontmatter in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-005", "empty steering body after frontmatter", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-005` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +--- +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# Team Standards + +Explain reasoning and include concrete examples. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-006.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-006.md new file mode 100644 index 00000000..1c65c794 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-006.md @@ -0,0 +1,54 @@ +--- +id: kiro-006 +title: "KIRO-006: Secrets Detected in Steering File - Kiro Steering" +sidebar_label: "KIRO-006" +description: "agnix rule KIRO-006 checks for secrets detected in steering file in kiro steering files. Severity: HIGH. See examples and fix guidance." +keywords: ["KIRO-006", "secrets detected in steering file", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-006` +- **Severity**: `HIGH` +- **Category**: `Kiro Steering` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +--- +API_KEY=hardcoded-secret-123 +``` + +### Valid + +```markdown +--- +inclusion: always +--- +Use ${API_KEY} from the environment at runtime. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-007.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-007.md new file mode 100644 index 00000000..1ad1f4f6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-007.md @@ -0,0 +1,56 @@ +--- +id: kiro-007 +title: "KIRO-007: fileMatchPattern Without fileMatch Inclusion" +sidebar_label: "KIRO-007" +description: "agnix rule KIRO-007 checks for filematchpattern without filematch inclusion in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-007", "filematchpattern without filematch inclusion", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-007` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +fileMatchPattern: "**/*.ts" +--- +This pattern is never applied. +``` + +### Valid + +```markdown +--- +inclusion: fileMatch +fileMatchPattern: "**/*.ts" +--- +TypeScript guidance. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-008.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-008.md new file mode 100644 index 00000000..c903c801 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-008.md @@ -0,0 +1,56 @@ +--- +id: kiro-008 +title: "KIRO-008: Unknown Kiro Steering Frontmatter Field" +sidebar_label: "KIRO-008" +description: "agnix rule KIRO-008 checks for unknown kiro steering frontmatter field in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-008", "unknown kiro steering frontmatter field", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-008` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusions: always +--- +Typo in frontmatter key. +``` + +### Valid + +```markdown +--- +inclusion: auto +name: coding-style +description: Team coding standards +--- +Follow conventions. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-009.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-009.md new file mode 100644 index 00000000..521728f6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-009.md @@ -0,0 +1,48 @@ +--- +id: kiro-009 +title: "KIRO-009: Broken Inline File Reference in Steering" +sidebar_label: "KIRO-009" +description: "agnix rule KIRO-009 checks for broken inline file reference in steering in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-009", "broken inline file reference in steering", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-009` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +Read #[[file:docs/missing-style-guide.md]] before generating code. +``` + +### Valid + +```markdown +Read #[[file:docs/style-guide.md]] before generating code. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-010.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-010.md new file mode 100644 index 00000000..3715a384 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-010.md @@ -0,0 +1,54 @@ +--- +id: kiro-010 +title: "KIRO-010: Missing Inclusion Mode - Kiro Steering" +sidebar_label: "KIRO-010" +description: "agnix rule KIRO-010 checks for missing inclusion mode in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-010", "missing inclusion mode", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-010` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: test +--- +# Steering +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# Steering +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-011.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-011.md new file mode 100644 index 00000000..a66ee09c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-011.md @@ -0,0 +1,54 @@ +--- +id: kiro-011 +title: "KIRO-011: Steering Doc Excessively Long - Kiro Steering" +sidebar_label: "KIRO-011" +description: "agnix rule KIRO-011 checks for steering doc excessively long in kiro steering files. Severity: LOW. See examples and fix guidance." +keywords: ["KIRO-011", "steering doc excessively long", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-011` +- **Severity**: `LOW` +- **Category**: `Kiro Steering` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +--- +# Very long doc... +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# Concise guidance +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-012.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-012.md new file mode 100644 index 00000000..45288984 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-012.md @@ -0,0 +1,53 @@ +--- +id: kiro-012 +title: "KIRO-012: Duplicate Steering Name - Kiro Steering" +sidebar_label: "KIRO-012" +description: "agnix rule KIRO-012 checks for duplicate steering name in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-012", "duplicate steering name", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-012` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Two steering files with name: duplicate-name +``` + +### Valid + +```markdown +--- +inclusion: auto +name: unique-name +description: desc +--- +# Content +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-013.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-013.md new file mode 100644 index 00000000..7909a27d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-013.md @@ -0,0 +1,55 @@ +--- +id: kiro-013 +title: "KIRO-013: Conflicting Inclusion Modes - Kiro Steering" +sidebar_label: "KIRO-013" +description: "agnix rule KIRO-013 checks for conflicting inclusion modes in kiro steering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KIRO-013", "conflicting inclusion modes", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-013` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Steering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +inclusion: manual +--- +# Content +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# Content +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kiro-014.md b/website/versioned_docs/version-0.47.0/rules/generated/kiro-014.md new file mode 100644 index 00000000..20152d69 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kiro-014.md @@ -0,0 +1,56 @@ +--- +id: kiro-014 +title: "KIRO-014: Markdown Structure Issues - Kiro Steering" +sidebar_label: "KIRO-014" +description: "agnix rule KIRO-014 checks for markdown structure issues in kiro steering files. Severity: LOW. See examples and fix guidance." +keywords: ["KIRO-014", "markdown structure issues", "kiro steering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KIRO-014` +- **Severity**: `LOW` +- **Category**: `Kiro Steering` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +inclusion: always +--- +No heading, just text. +``` + +### Valid + +```markdown +--- +inclusion: always +--- +# Heading + +Content here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-001.md new file mode 100644 index 00000000..389adf2e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-001.md @@ -0,0 +1,55 @@ +--- +id: kr-ag-001 +title: "KR-AG-001: Unknown Field in Kiro Agent JSON - Kiro Agents" +sidebar_label: "KR-AG-001" +description: "agnix rule KR-AG-001 checks for unknown field in kiro agent json in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-001", "unknown field in kiro agent json", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-001` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/configuration-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "review-agent", + "madeUpField": true +} +``` + +### Valid + +```json +{ + "name": "review-agent", + "prompt": "Review the diff", + "model": "claude-sonnet-4" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-002.md new file mode 100644 index 00000000..f117fb6f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-002.md @@ -0,0 +1,52 @@ +--- +id: kr-ag-002 +title: "KR-AG-002: Invalid Kiro Agent Resource Protocol" +sidebar_label: "KR-AG-002" +description: "agnix rule KR-AG-002 checks for invalid kiro agent resource protocol in kiro agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-AG-002", "invalid kiro agent resource protocol", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-002` +- **Severity**: `HIGH` +- **Category**: `Kiro Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/creating + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "resources": ["https://example.com/private"] +} +``` + +### Valid + +```json +{ + "resources": ["file://docs/architecture.md", "skill://deploy"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-003.md new file mode 100644 index 00000000..7f51ef2d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-003.md @@ -0,0 +1,54 @@ +--- +id: kr-ag-003 +title: "KR-AG-003: allowedTools Not Subset of tools - Kiro Agents" +sidebar_label: "KR-AG-003" +description: "agnix rule KR-AG-003 checks for allowedtools not subset of tools in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-003", "allowedtools not subset of tools", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-003` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/configuration-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tools": ["readFiles"], + "allowedTools": ["runShellCommand"] +} +``` + +### Valid + +```json +{ + "tools": ["readFiles", "listDirectory"], + "allowedTools": ["readFiles"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-004.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-004.md new file mode 100644 index 00000000..9bbad939 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-004.md @@ -0,0 +1,52 @@ +--- +id: kr-ag-004 +title: "KR-AG-004: Invalid Kiro Agent Model Value - Kiro Agents" +sidebar_label: "KR-AG-004" +description: "agnix rule KR-AG-004 checks for invalid kiro agent model value in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-004", "invalid kiro agent model value", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-004` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/configuration-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "model": "unsupported-model" +} +``` + +### Valid + +```json +{ + "model": "claude-sonnet-4-5" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-005.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-005.md new file mode 100644 index 00000000..07be55ac --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-005.md @@ -0,0 +1,52 @@ +--- +id: kr-ag-005 +title: "KR-AG-005: Kiro Agent Has No MCP Access - Kiro Agents" +sidebar_label: "KR-AG-005" +description: "agnix rule KR-AG-005 checks for kiro agent has no mcp access in kiro agents files. Severity: LOW. See examples and fix guidance." +keywords: ["KR-AG-005", "kiro agent has no mcp access", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-005` +- **Severity**: `LOW` +- **Category**: `Kiro Agents` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/configuration-reference + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "includeMcpJson": false +} +``` + +### Valid + +```json +{ + "includeMcpJson": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-006.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-006.md new file mode 100644 index 00000000..66848a10 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-006.md @@ -0,0 +1,55 @@ +--- +id: kr-ag-006 +title: "KR-AG-006: Kiro Agent References Unknown Subagent" +sidebar_label: "KR-AG-006" +description: "agnix rule KR-AG-006 checks for kiro agent references unknown subagent in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-006", "kiro agent references unknown subagent", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-006` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/kirodotdev/kiro/issues/5743 +- https://github.com/kirodotdev/kiro/issues/4262 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "orchestrator", + "prompt": "Delegate review to @missing-agent" +} +``` + +### Valid + +```json +{ + "name": "orchestrator", + "prompt": "Delegate review to @reviewer-agent" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-007.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-007.md new file mode 100644 index 00000000..0c3b2b60 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-007.md @@ -0,0 +1,57 @@ +--- +id: kr-ag-007 +title: "KR-AG-007: Kiro Agent Tool Scope Broader Than Referenced Subagent" +sidebar_label: "KR-AG-007" +description: "agnix rule KR-AG-007 checks for kiro agent tool scope broader than referenced subagent in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-007", "kiro agent tool scope broader than referenced subagent", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-007` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/kirodotdev/kiro/issues/5071 +- https://github.com/kirodotdev/kiro/issues/5449 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "orchestrator", + "allowedTools": ["readFiles", "runShellCommand"], + "prompt": "Delegate review to @reviewer-agent" +} +``` + +### Valid + +```json +{ + "name": "orchestrator", + "allowedTools": ["readFiles"], + "prompt": "Delegate review to @reviewer-agent" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-008.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-008.md new file mode 100644 index 00000000..6210d839 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-008.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-008 +title: "KR-AG-008: Empty Explicit Agent Name - Kiro Agents" +sidebar_label: "KR-AG-008" +description: "agnix rule KR-AG-008 checks for empty explicit agent name in kiro agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-AG-008", "empty explicit agent name", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-008` +- **Severity**: `HIGH` +- **Category**: `Kiro Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/custom-agents/configuration-reference/ +- https://kiro.dev/docs/cli/v3/agent-config/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": " ", "prompt": "Review code"} +``` + +### Valid + +```json +{"prompt": "Review code"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-009.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-009.md new file mode 100644 index 00000000..44ddd630 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-009.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-009 +title: "KR-AG-009: Agent Missing Prompt - Kiro Agents" +sidebar_label: "KR-AG-009" +description: "agnix rule KR-AG-009 checks for agent missing prompt in kiro agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-AG-009", "agent missing prompt", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-009` +- **Severity**: `HIGH` +- **Category**: `Kiro Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/agents +- https://kiro.dev/docs/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"name": "review-agent"} +``` + +### Valid + +```json +{"name": "review-agent", "prompt": "Review code"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-010.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-010.md new file mode 100644 index 00000000..7c6a5ad7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-010.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-010 +title: "KR-AG-010: Duplicate Tool Entries - Kiro Agents" +sidebar_label: "KR-AG-010" +description: "agnix rule KR-AG-010 checks for duplicate tool entries in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-010", "duplicate tool entries", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-010` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/agents +- https://kiro.dev/docs/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"tools": ["readFiles", "readFiles"]} +``` + +### Valid + +```json +{"tools": ["readFiles", "writeFiles"]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-011.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-011.md new file mode 100644 index 00000000..207f1e06 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-011.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-011 +title: "KR-AG-011: Empty Tools Array - Kiro Agents" +sidebar_label: "KR-AG-011" +description: "agnix rule KR-AG-011 checks for empty tools array in kiro agents files. Severity: LOW. See examples and fix guidance." +keywords: ["KR-AG-011", "empty tools array", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-011` +- **Severity**: `LOW` +- **Category**: `Kiro Agents` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/agents +- https://kiro.dev/docs/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"tools": []} +``` + +### Valid + +```json +{"tools": ["readFiles"]} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-012.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-012.md new file mode 100644 index 00000000..75dc54ba --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-012.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-012 +title: "KR-AG-012: toolAliases References Unknown Tool - Kiro Agents" +sidebar_label: "KR-AG-012" +description: "agnix rule KR-AG-012 checks for toolaliases references unknown tool in kiro agents files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-AG-012", "toolaliases references unknown tool", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-012` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Agents` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/agents +- https://kiro.dev/docs/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"tools": ["readFiles"], "toolAliases": {"wf": "writeFiles"}} +``` + +### Valid + +```json +{"tools": ["readFiles"], "toolAliases": {"rf": "readFiles"}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-013.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-013.md new file mode 100644 index 00000000..8ae80433 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-013.md @@ -0,0 +1,49 @@ +--- +id: kr-ag-013 +title: "KR-AG-013: Secrets in Agent Prompt - Kiro Agents" +sidebar_label: "KR-AG-013" +description: "agnix rule KR-AG-013 checks for secrets in agent prompt in kiro agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-AG-013", "secrets in agent prompt", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-013` +- **Severity**: `HIGH` +- **Category**: `Kiro Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/agents +- https://kiro.dev/docs/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"prompt": "API_KEY=sk-live-secret123"} +``` + +### Valid + +```json +{"prompt": "Use ${API_KEY} from env"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-014.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-014.md new file mode 100644 index 00000000..b0f93e6d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-ag-014.md @@ -0,0 +1,50 @@ +--- +id: kr-ag-014 +title: "KR-AG-014: Invalid Universal Permissions Rule - Kiro Agents" +sidebar_label: "KR-AG-014" +description: "agnix rule KR-AG-014 checks for invalid universal permissions rule in kiro agents files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-AG-014", "invalid universal permissions rule", "kiro agents", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-AG-014` +- **Severity**: `HIGH` +- **Category**: `Kiro Agents` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-26` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `>=2.14.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/changelog/cli/2-14/ +- https://kiro.dev/docs/cli/v3/agent-config/ +- https://kiro.dev/docs/cli/v3/permissions/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"permissions": {"rules": [{"capability": "shell", "effect": "sometimes", "match": "npm *"}]}} +``` + +### Valid + +```json +{"permissions": {"rules": [{"capability": "shell", "effect": "allow", "match": ["npm *"]}]}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-001.md new file mode 100644 index 00000000..cdee960f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-001.md @@ -0,0 +1,55 @@ +--- +id: kr-hk-001 +title: "KR-HK-001: Invalid Kiro IDE Hook Event Type - Kiro Hooks" +sidebar_label: "KR-HK-001" +description: "agnix rule KR-HK-001 checks for invalid kiro ide hook event type in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-001", "invalid kiro ide hook event type", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-001` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks/types + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "event": "beforeSave", + "runCommand": "echo invalid" +} +``` + +### Valid + +```json +{ + "event": "fileEdited", + "patterns": ["**/*.md"], + "runCommand": "echo changed" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-002.md new file mode 100644 index 00000000..925e359a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-002.md @@ -0,0 +1,55 @@ +--- +id: kr-hk-002 +title: "KR-HK-002: Kiro File Hook Missing Patterns - Kiro Hooks" +sidebar_label: "KR-HK-002" +description: "agnix rule KR-HK-002 checks for kiro file hook missing patterns in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-002", "kiro file hook missing patterns", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-002` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks/types + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "event": "fileEdited", + "runCommand": "echo missing patterns" +} +``` + +### Valid + +```json +{ + "event": "fileEdited", + "patterns": ["**/*.ts"], + "runCommand": "echo ok" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-003.md new file mode 100644 index 00000000..8a1fa9e9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-003.md @@ -0,0 +1,53 @@ +--- +id: kr-hk-003 +title: "KR-HK-003: Kiro IDE Hook Missing Action - Kiro Hooks" +sidebar_label: "KR-HK-003" +description: "agnix rule KR-HK-003 checks for kiro ide hook missing action in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-003", "kiro ide hook missing action", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-003` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks/actions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "event": "promptSubmit" +} +``` + +### Valid + +```json +{ + "event": "promptSubmit", + "askAgent": "review-agent" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-004.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-004.md new file mode 100644 index 00000000..c45f4e89 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-004.md @@ -0,0 +1,55 @@ +--- +id: kr-hk-004 +title: "KR-HK-004: Kiro Tool Hook Missing toolTypes Filter" +sidebar_label: "KR-HK-004" +description: "agnix rule KR-HK-004 checks for kiro tool hook missing tooltypes filter in kiro hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-HK-004", "kiro tool hook missing tooltypes filter", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-004` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks/types + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "event": "preToolUse", + "runCommand": "echo broad" +} +``` + +### Valid + +```json +{ + "event": "preToolUse", + "toolTypes": ["readFiles"], + "runCommand": "echo ok" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-005.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-005.md new file mode 100644 index 00000000..79a81efd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-005.md @@ -0,0 +1,56 @@ +--- +id: kr-hk-005 +title: "KR-HK-005: Invalid Kiro CLI Hook Event Key - Kiro Hooks" +sidebar_label: "KR-HK-005" +description: "agnix rule KR-HK-005 checks for invalid kiro cli hook event key in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-005", "invalid kiro cli hook event key", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-005` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "beforePrompt": [{"command": "echo bad"}] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "preToolUse": [{"command": "echo pre"}] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-006.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-006.md new file mode 100644 index 00000000..1b55320e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-006.md @@ -0,0 +1,56 @@ +--- +id: kr-hk-006 +title: "KR-HK-006: Kiro CLI Hook Missing Command - Kiro Hooks" +sidebar_label: "KR-HK-006" +description: "agnix rule KR-HK-006 checks for kiro cli hook missing command in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-006", "kiro cli hook missing command", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-006` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "hooks": { + "preToolUse": [{"toolTypes": ["readFiles"]}] + } +} +``` + +### Valid + +```json +{ + "hooks": { + "preToolUse": [{"command": "echo pre", "toolTypes": ["readFiles"]}] + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-007.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-007.md new file mode 100644 index 00000000..373c28e0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-007.md @@ -0,0 +1,48 @@ +--- +id: kr-hk-007 +title: "KR-HK-007: Hook Timeout Out of Range - Kiro Hooks" +sidebar_label: "KR-HK-007" +description: "agnix rule KR-HK-007 checks for hook timeout out of range in kiro hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-HK-007", "hook timeout out of range", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-007` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"event": "fileEdited", "patterns": ["**/*.md"], "runCommand": "echo ok", "timeout": 999999} +``` + +### Valid + +```json +{"event": "fileEdited", "patterns": ["**/*.md"], "runCommand": "echo ok"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-008.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-008.md new file mode 100644 index 00000000..cc293a5c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-008.md @@ -0,0 +1,48 @@ +--- +id: kr-hk-008 +title: "KR-HK-008: Duplicate Event Handlers - Kiro Hooks" +sidebar_label: "KR-HK-008" +description: "agnix rule KR-HK-008 checks for duplicate event handlers in kiro hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-HK-008", "duplicate event handlers", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-008` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +# Two hooks with identical event+patterns +``` + +### Valid + +```json +{"event": "fileEdited", "patterns": ["**/*.md"], "runCommand": "echo ok"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-009.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-009.md new file mode 100644 index 00000000..0d9e7548 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-009.md @@ -0,0 +1,48 @@ +--- +id: kr-hk-009 +title: "KR-HK-009: Command Uses Absolute Path - Kiro Hooks" +sidebar_label: "KR-HK-009" +description: "agnix rule KR-HK-009 checks for command uses absolute path in kiro hooks files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-HK-009", "command uses absolute path", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-009` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Hooks` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"event": "promptSubmit", "runCommand": "/usr/local/bin/npm test"} +``` + +### Valid + +```json +{"event": "promptSubmit", "runCommand": "npm test"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-010.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-010.md new file mode 100644 index 00000000..031ba9d1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-hk-010.md @@ -0,0 +1,48 @@ +--- +id: kr-hk-010 +title: "KR-HK-010: Secrets in Hook Command - Kiro Hooks" +sidebar_label: "KR-HK-010" +description: "agnix rule KR-HK-010 checks for secrets in hook command in kiro hooks files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-HK-010", "secrets in hook command", "kiro hooks", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-HK-010` +- **Severity**: `HIGH` +- **Category**: `Kiro Hooks` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/hooks + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"event": "promptSubmit", "runCommand": "curl -H 'Authorization: Bearer sk-live-secret123'"} +``` + +### Valid + +```json +{"event": "promptSubmit", "runCommand": "echo $API_KEY"} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-001.md new file mode 100644 index 00000000..2933afbc --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-001.md @@ -0,0 +1,56 @@ +--- +id: kr-mcp-001 +title: "KR-MCP-001: Kiro MCP Server Missing command and url" +sidebar_label: "KR-MCP-001" +description: "agnix rule KR-MCP-001 checks for kiro mcp server missing command and url in kiro mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-MCP-001", "kiro mcp server missing command and url", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-001` +- **Severity**: `HIGH` +- **Category**: `Kiro MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/mcp/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "broken": {"args": ["--debug"]} + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": {"command": "node", "args": ["server.js"]} + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-002.md new file mode 100644 index 00000000..c83bcf69 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-002.md @@ -0,0 +1,62 @@ +--- +id: kr-mcp-002 +title: "KR-MCP-002: Hardcoded Secrets in Kiro MCP env - Kiro MCP" +sidebar_label: "KR-MCP-002" +description: "agnix rule KR-MCP-002 checks for hardcoded secrets in kiro mcp env in kiro mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-MCP-002", "hardcoded secrets in kiro mcp env", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-002` +- **Severity**: `MEDIUM` +- **Category**: `Kiro MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/mcp/configuration + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "server": { + "command": "node", + "env": {"API_KEY": "hardcoded-secret"} + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "server": { + "command": "node", + "env": {"API_KEY": "${API_KEY}"} + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-003.md new file mode 100644 index 00000000..0d15df2f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-003.md @@ -0,0 +1,48 @@ +--- +id: kr-mcp-003 +title: "KR-MCP-003: Missing Required Args - Kiro MCP" +sidebar_label: "KR-MCP-003" +description: "agnix rule KR-MCP-003 checks for missing required args in kiro mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-MCP-003", "missing required args", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-003` +- **Severity**: `MEDIUM` +- **Category**: `Kiro MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/mcp + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"mcpServers": {"fs": {"command": "node"}}} +``` + +### Valid + +```json +{"mcpServers": {"fs": {"command": "node", "args": ["server.js"]}}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-004.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-004.md new file mode 100644 index 00000000..5dd289de --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-004.md @@ -0,0 +1,48 @@ +--- +id: kr-mcp-004 +title: "KR-MCP-004: Invalid MCP URL - Kiro MCP" +sidebar_label: "KR-MCP-004" +description: "agnix rule KR-MCP-004 checks for invalid mcp url in kiro mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-MCP-004", "invalid mcp url", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-004` +- **Severity**: `HIGH` +- **Category**: `Kiro MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/mcp + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"mcpServers": {"remote": {"url": "not-a-url"}}} +``` + +### Valid + +```json +{"mcpServers": {"remote": {"url": "https://example.com/mcp"}}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-005.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-005.md new file mode 100644 index 00000000..c3e1e2b2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-005.md @@ -0,0 +1,48 @@ +--- +id: kr-mcp-005 +title: "KR-MCP-005: Duplicate MCP Server Names - Kiro MCP" +sidebar_label: "KR-MCP-005" +description: "agnix rule KR-MCP-005 checks for duplicate mcp server names in kiro mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-MCP-005", "duplicate mcp server names", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-005` +- **Severity**: `MEDIUM` +- **Category**: `Kiro MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/mcp + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +# Two servers with same name in different config files +``` + +### Valid + +```json +{"mcpServers": {"a": {"command": "a"}, "b": {"command": "b"}}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-006.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-006.md new file mode 100644 index 00000000..82091110 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-mcp-006.md @@ -0,0 +1,49 @@ +--- +id: kr-mcp-006 +title: "KR-MCP-006: Invalid OAuth Configuration - Kiro MCP" +sidebar_label: "KR-MCP-006" +description: "agnix rule KR-MCP-006 checks for invalid oauth configuration in kiro mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-MCP-006", "invalid oauth configuration", "kiro mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-MCP-006` +- **Severity**: `MEDIUM` +- **Category**: `Kiro MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-11` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `>=2.3.0` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/mcp/configuration/#oauth-configuration +- https://kiro.dev/changelog/cli/2-12/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{"mcpServers": {"remote": {"url": "https://example.com/mcp", "oauth": {"clientSecret": "secret-without-client-id", "redirectUri": "https://example.com/callback"}}}} +``` + +### Valid + +```json +{"mcpServers": {"remote": {"url": "https://example.com/mcp", "oauth": {"clientId": "registered-client", "clientSecret": "registered-secret", "redirectUri": "http://localhost:7778/oauth/callback", "oauthScopes": ["read"]}}}} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-001.md new file mode 100644 index 00000000..1e29f458 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-001.md @@ -0,0 +1,56 @@ +--- +id: kr-pw-001 +title: "KR-PW-001: Missing Required POWER.md Frontmatter Fields" +sidebar_label: "KR-PW-001" +description: "agnix rule KR-PW-001 checks for missing required power.md frontmatter fields in kiro powers files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-PW-001", "missing required power.md frontmatter fields", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-001` +- **Severity**: `HIGH` +- **Category**: `Kiro Powers` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers/create + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +# Missing frontmatter +This power omits required metadata. +``` + +### Valid + +```text +--- +name: review-power +description: Reviews code changes +keywords: + - review + - quality +--- +# Review Power +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-002.md new file mode 100644 index 00000000..f8ed0e32 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-002.md @@ -0,0 +1,59 @@ +--- +id: kr-pw-002 +title: "KR-PW-002: Empty POWER.md Keywords Array - Kiro Powers" +sidebar_label: "KR-PW-002" +description: "agnix rule KR-PW-002 checks for empty power.md keywords array in kiro powers files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-PW-002", "empty power.md keywords array", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-002` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Powers` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: review-power +description: Reviews code changes +keywords: [] +--- +# Review Power +``` + +### Valid + +```text +--- +name: review-power +description: Reviews code changes +keywords: + - review +--- +# Review Power +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-003.md new file mode 100644 index 00000000..8dd83d89 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-003.md @@ -0,0 +1,60 @@ +--- +id: kr-pw-003 +title: "KR-PW-003: Empty POWER.md Body - Kiro Powers" +sidebar_label: "KR-PW-003" +description: "agnix rule KR-PW-003 checks for empty power.md body in kiro powers files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-PW-003", "empty power.md body", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-003` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Powers` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers/create + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: review-power +description: Reviews code changes +keywords: + - review +--- +``` + +### Valid + +```text +--- +name: review-power +description: Reviews code changes +keywords: + - review +--- +# Onboarding +Use this power for review flows. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-004.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-004.md new file mode 100644 index 00000000..058a11e8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-004.md @@ -0,0 +1,54 @@ +--- +id: kr-pw-004 +title: "KR-PW-004: Invalid Adjacent Power mcp.json Structure" +sidebar_label: "KR-PW-004" +description: "agnix rule KR-PW-004 checks for invalid adjacent power mcp.json structure in kiro powers files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-PW-004", "invalid adjacent power mcp.json structure", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-004` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Powers` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": [] +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": {"command": "node", "args": ["server.js"]} + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-005.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-005.md new file mode 100644 index 00000000..fbbc1cd7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-005.md @@ -0,0 +1,59 @@ +--- +id: kr-pw-005 +title: "KR-PW-005: Step Missing Description - Kiro Powers" +sidebar_label: "KR-PW-005" +description: "agnix rule KR-PW-005 checks for step missing description in kiro powers files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-PW-005", "step missing description", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-005` +- **Severity**: `HIGH` +- **Category**: `Kiro Powers` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: test +description: desc +keywords: [test] +--- +## Step 1 +``` + +### Valid + +```text +--- +name: test +description: desc +keywords: [test] +--- +## Step 1 +Do something. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-006.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-006.md new file mode 100644 index 00000000..7135dda0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-006.md @@ -0,0 +1,58 @@ +--- +id: kr-pw-006 +title: "KR-PW-006: Duplicate Keywords - Kiro Powers" +sidebar_label: "KR-PW-006" +description: "agnix rule KR-PW-006 checks for duplicate keywords in kiro powers files. Severity: LOW. See examples and fix guidance." +keywords: ["KR-PW-006", "duplicate keywords", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-006` +- **Severity**: `LOW` +- **Category**: `Kiro Powers` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: test +description: desc +keywords: [test, test] +--- +# Body +``` + +### Valid + +```text +--- +name: test +description: desc +keywords: [test, deploy] +--- +# Body +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-007.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-007.md new file mode 100644 index 00000000..ebd82a1b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-007.md @@ -0,0 +1,58 @@ +--- +id: kr-pw-007 +title: "KR-PW-007: Name Invalid Characters - Kiro Powers" +sidebar_label: "KR-PW-007" +description: "agnix rule KR-PW-007 checks for name invalid characters in kiro powers files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-PW-007", "name invalid characters", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-007` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Powers` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: My Power! +description: desc +keywords: [test] +--- +# Body +``` + +### Valid + +```text +--- +name: my-power +description: desc +keywords: [test] +--- +# Body +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-008.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-008.md new file mode 100644 index 00000000..c128c7a6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-pw-008.md @@ -0,0 +1,58 @@ +--- +id: kr-pw-008 +title: "KR-PW-008: Secrets in Power Body - Kiro Powers" +sidebar_label: "KR-PW-008" +description: "agnix rule KR-PW-008 checks for secrets in power body in kiro powers files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-PW-008", "secrets in power body", "kiro powers", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-PW-008` +- **Severity**: `HIGH` +- **Category**: `Kiro Powers` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/powers + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +--- +name: test +description: desc +keywords: [test] +--- +API_KEY=sk-live-secret123 +``` + +### Valid + +```text +--- +name: test +description: desc +keywords: [test] +--- +Use ${API_KEY} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-set-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-001.md new file mode 100644 index 00000000..8b8177f9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-001.md @@ -0,0 +1,52 @@ +--- +id: kr-set-001 +title: "KR-SET-001: Invalid toolSearch.enabled Value - Kiro Settings" +sidebar_label: "KR-SET-001" +description: "agnix rule KR-SET-001 checks for invalid toolsearch.enabled value in kiro settings files. Severity: HIGH. See examples and fix guidance." +keywords: ["KR-SET-001", "invalid toolsearch.enabled value", "kiro settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-SET-001` +- **Severity**: `HIGH` +- **Category**: `Kiro Settings` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/mcp/tool-search/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "toolSearch.enabled": "true" +} +``` + +### Valid + +```json +{ + "toolSearch.enabled": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-set-002.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-002.md new file mode 100644 index 00000000..feac8207 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-002.md @@ -0,0 +1,52 @@ +--- +id: kr-set-002 +title: "KR-SET-002: Invalid toolSearch.minPct Value - Kiro Settings" +sidebar_label: "KR-SET-002" +description: "agnix rule KR-SET-002 checks for invalid toolsearch.minpct value in kiro settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-SET-002", "invalid toolsearch.minpct value", "kiro settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-SET-002` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/mcp/tool-search/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "toolSearch.minPct": -5 +} +``` + +### Valid + +```json +{ + "toolSearch.minPct": 5 +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-set-003.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-003.md new file mode 100644 index 00000000..6b5e0908 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-set-003.md @@ -0,0 +1,52 @@ +--- +id: kr-set-003 +title: "KR-SET-003: Invalid toolSearch.minTokens Value" +sidebar_label: "KR-SET-003" +description: "agnix rule KR-SET-003 checks for invalid toolsearch.mintokens value in kiro settings files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-SET-003", "invalid toolsearch.mintokens value", "kiro settings", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-SET-003` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Settings` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-26` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/cli/mcp/tool-search/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "toolSearch.minTokens": -1 +} +``` + +### Valid + +```json +{ + "toolSearch.minTokens": 50000 +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/kr-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/kr-sk-001.md new file mode 100644 index 00000000..ba488f04 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/kr-sk-001.md @@ -0,0 +1,61 @@ +--- +id: kr-sk-001 +title: "KR-SK-001: Kiro Skill Uses Unsupported Field - Kiro Skills" +sidebar_label: "KR-SK-001" +description: "agnix rule KR-SK-001 checks for kiro skill uses unsupported field in kiro skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["KR-SK-001", "kiro skill uses unsupported field", "kiro skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `KR-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Kiro Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-04-22` + +## Applicability + +- **Tool**: `kiro` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://kiro.dev/docs/steering/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +model: haiku +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-001.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-001.md new file mode 100644 index 00000000..7e84f093 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-001.md @@ -0,0 +1,56 @@ +--- +id: mcp-001 +title: "MCP-001: Invalid JSON-RPC Version - MCP" +sidebar_label: "MCP-001" +description: "agnix rule MCP-001 checks for invalid json-rpc version in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-001", "invalid json-rpc version", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-001` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "jsonrpc": "1.0", + "method": "tools/list", + "id": 1 +} +``` + +### Valid + +```json +{ + "jsonrpc": "2.0", + "method": "tools/list", + "id": 1 +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-002.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-002.md new file mode 100644 index 00000000..8be02057 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-002.md @@ -0,0 +1,66 @@ +--- +id: mcp-002 +title: "MCP-002: Missing Required Tool Field - MCP" +sidebar_label: "MCP-002" +description: "agnix rule MCP-002 checks for missing required tool field in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-002", "missing required tool field", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-002` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/docs/concepts/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "description": "Reads a file from disk", + "inputSchema": { "type": "object" } +} +``` + +### Valid + +```json +{ + "name": "read-file", + "title": "Read File", + "description": "Reads a file from disk and returns its contents", + "inputSchema": { + "type": "object", + "properties": { + "path": { "type": "string" } + }, + "required": ["path"] + }, + "outputSchema": { + "type": "object" + }, + "icons": [{"src": "https://example.com/icon.png"}] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-003.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-003.md new file mode 100644 index 00000000..51707045 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-003.md @@ -0,0 +1,70 @@ +--- +id: mcp-003 +title: "MCP-003: Invalid JSON Schema - MCP" +sidebar_label: "MCP-003" +description: "agnix rule MCP-003 checks for invalid json schema in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-003", "invalid json schema", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-003` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "search", + "description": "Searches for files matching a query string", + "inputSchema": { + "type": "invalid_type" + }, + "outputSchema": { + "type": 42 + } +} +``` + +### Valid + +```json +{ + "name": "search", + "description": "Searches for files matching a query string", + "inputSchema": { + "type": "object", + "properties": { + "query": { "type": "string" } + } + }, + "outputSchema": { + "$schema": "https://json-schema.org/draft/2020-12/schema", + "type": "object" + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-004.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-004.md new file mode 100644 index 00000000..b5600c3f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-004.md @@ -0,0 +1,56 @@ +--- +id: mcp-004 +title: "MCP-004: Missing Tool Description - MCP" +sidebar_label: "MCP-004" +description: "agnix rule MCP-004 checks for missing tool description in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-004", "missing tool description", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-004` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/docs/concepts/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "deploy", + "description": "Short", + "inputSchema": { "type": "object" } +} +``` + +### Valid + +```json +{ + "name": "deploy", + "description": "Deploys the application to the specified environment with rollback support", + "inputSchema": { "type": "object" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-005.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-005.md new file mode 100644 index 00000000..a2122b9e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-005.md @@ -0,0 +1,57 @@ +--- +id: mcp-005 +title: "MCP-005: Tool Without User Consent - MCP" +sidebar_label: "MCP-005" +description: "agnix rule MCP-005 checks for tool without user consent in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-005", "tool without user consent", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-005` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "delete-file", + "description": "Permanently deletes a file from the filesystem", + "inputSchema": { "type": "object" } +} +``` + +### Valid + +```json +{ + "name": "delete-file", + "description": "Permanently deletes a file from the filesystem", + "inputSchema": { "type": "object" }, + "requiresApproval": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-006.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-006.md new file mode 100644 index 00000000..948acad7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-006.md @@ -0,0 +1,60 @@ +--- +id: mcp-006 +title: "MCP-006: Untrusted Annotations - MCP" +sidebar_label: "MCP-006" +description: "agnix rule MCP-006 checks for untrusted annotations in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-006", "untrusted annotations", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-006` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/docs/concepts/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "name": "read-file", + "description": "Reads a file and returns its contents as text", + "inputSchema": { "type": "object" }, + "annotations": { "unsafeHint": true }, + "requiresApproval": true +} +``` + +### Valid + +```json +{ + "name": "read-file", + "description": "Reads a file and returns its contents as text", + "inputSchema": { "type": "object" }, + "annotations": { "readOnlyHint": true, "title": "File Reader" }, + "requiresApproval": true +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-007.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-007.md new file mode 100644 index 00000000..e5399d02 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-007.md @@ -0,0 +1,52 @@ +--- +id: mcp-007 +title: "MCP-007: MCP Parse Error - MCP" +sidebar_label: "MCP-007" +description: "agnix rule MCP-007 checks for mcp parse error in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-007", "mcp parse error", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-007` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ invalid json content +``` + +### Valid + +```json +{ + "jsonrpc": "2.0", + "method": "tools/list", + "id": 1 +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-008.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-008.md new file mode 100644 index 00000000..3282a2cd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-008.md @@ -0,0 +1,64 @@ +--- +id: mcp-008 +title: "MCP-008: Protocol Version Mismatch - MCP" +sidebar_label: "MCP-008" +description: "agnix rule MCP-008 checks for protocol version mismatch in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-008", "protocol version mismatch", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-008` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "jsonrpc": "2.0", + "method": "initialize", + "id": 1, + "params": { + "protocolVersion": "2024-11-05", + "clientInfo": { "name": "my-client", "version": "1.0.0" } + } +} +``` + +### Valid + +```json +{ + "jsonrpc": "2.0", + "method": "initialize", + "id": 1, + "params": { + "protocolVersion": "2025-11-25", + "clientInfo": { "name": "my-client", "version": "1.0.0" } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-009.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-009.md new file mode 100644 index 00000000..cda90fab --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-009.md @@ -0,0 +1,64 @@ +--- +id: mcp-009 +title: "MCP-009: Missing command for stdio server - MCP" +sidebar_label: "MCP-009" +description: "agnix rule MCP-009 checks for missing command for stdio server in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-009", "missing command for stdio server", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-009` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification +- https://cursor.com/docs/mcp + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "my-server": { + "type": "stdio", + "args": ["server.js"] + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "my-server": { + "type": "stdio", + "command": "node", + "args": ["server.js"] + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-010.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-010.md new file mode 100644 index 00000000..b7e7bf39 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-010.md @@ -0,0 +1,62 @@ +--- +id: mcp-010 +title: "MCP-010: Missing url for http/sse server - MCP" +sidebar_label: "MCP-010" +description: "agnix rule MCP-010 checks for missing url for http/sse server in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-010", "missing url for http/sse server", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-010` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-08-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification +- https://cursor.com/docs/mcp + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "remote-api": { + "type": "http" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "remote-api": { + "type": "http", + "url": "http://localhost:3000/mcp" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-011.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-011.md new file mode 100644 index 00000000..c4376cbb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-011.md @@ -0,0 +1,62 @@ +--- +id: mcp-011 +title: "MCP-011: Invalid MCP server type - MCP" +sidebar_label: "MCP-011" +description: "agnix rule MCP-011 checks for invalid mcp server type in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-011", "invalid mcp server type", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-011` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "my-server": { + "type": "websocket", + "url": "ws://localhost:8080" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "my-server": { + "type": "stdio", + "command": "node" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-012.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-012.md new file mode 100644 index 00000000..d158bf41 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-012.md @@ -0,0 +1,62 @@ +--- +id: mcp-012 +title: "MCP-012: Deprecated SSE transport - MCP" +sidebar_label: "MCP-012" +description: "agnix rule MCP-012 checks for deprecated sse transport in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-012", "deprecated sse transport", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-012` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "remote-api": { + "type": "sse", + "url": "http://localhost:3000/sse" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "remote-api": { + "type": "http", + "url": "http://localhost:3000/mcp" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-013.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-013.md new file mode 100644 index 00000000..0df27997 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-013.md @@ -0,0 +1,60 @@ +--- +id: mcp-013 +title: "MCP-013: Invalid Tool Name Format - MCP" +sidebar_label: "MCP-013" +description: "agnix rule MCP-013 checks for invalid tool name format in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-013", "invalid tool name format", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-013` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/server/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tools": [{ + "name": "read file", + "description": "Reads file contents", + "inputSchema": { "type": "object" } + }] +} +``` + +### Valid + +```json +{ + "tools": [{ + "name": "read_file.v2", + "description": "Reads file contents", + "inputSchema": { "type": "object" } + }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-014.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-014.md new file mode 100644 index 00000000..a2fd1b43 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-014.md @@ -0,0 +1,62 @@ +--- +id: mcp-014 +title: "MCP-014: Invalid outputSchema Definition - MCP" +sidebar_label: "MCP-014" +description: "agnix rule MCP-014 checks for invalid outputschema definition in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-014", "invalid outputschema definition", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-014` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/server/tools + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tools": [{ + "name": "lookup", + "description": "Looks up records", + "inputSchema": { "type": "object" }, + "outputSchema": { "type": "invalid_type" } + }] +} +``` + +### Valid + +```json +{ + "tools": [{ + "name": "lookup", + "description": "Looks up records", + "inputSchema": { "type": "object" }, + "outputSchema": { "type": "object" } + }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-015.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-015.md new file mode 100644 index 00000000..9a649ce3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-015.md @@ -0,0 +1,57 @@ +--- +id: mcp-015 +title: "MCP-015: Missing Resource Required Fields - MCP" +sidebar_label: "MCP-015" +description: "agnix rule MCP-015 checks for missing resource required fields in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-015", "missing resource required fields", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-015` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/server/resources + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "resources": [{ + "description": "missing uri and name" + }] +} +``` + +### Valid + +```json +{ + "resources": [{ + "uri": "file:///README.md", + "name": "readme" + }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-016.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-016.md new file mode 100644 index 00000000..8c24f420 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-016.md @@ -0,0 +1,57 @@ +--- +id: mcp-016 +title: "MCP-016: Missing Prompt Required Name - MCP" +sidebar_label: "MCP-016" +description: "agnix rule MCP-016 checks for missing prompt required name in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-016", "missing prompt required name", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-016` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/server/prompts + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "prompts": [{ + "description": "missing prompt name" + }] +} +``` + +### Valid + +```json +{ + "prompts": [{ + "name": "review_code", + "description": "Review the provided code" + }] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-017.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-017.md new file mode 100644 index 00000000..0e6887e5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-017.md @@ -0,0 +1,62 @@ +--- +id: mcp-017 +title: "MCP-017: Non-HTTPS Remote HTTP Server URL - MCP" +sidebar_label: "MCP-017" +description: "agnix rule MCP-017 checks for non-https remote http server url in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-017", "non-https remote http server url", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-017` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/transports + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "remote": { + "type": "http", + "url": "http://api.example.com/mcp" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "remote": { + "type": "http", + "url": "https://api.example.com/mcp" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-018.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-018.md new file mode 100644 index 00000000..f0e5e7c2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-018.md @@ -0,0 +1,68 @@ +--- +id: mcp-018 +title: "MCP-018: Potential Plaintext Secret in MCP Env - MCP" +sidebar_label: "MCP-018" +description: "agnix rule MCP-018 checks for potential plaintext secret in mcp env in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-018", "potential plaintext secret in mcp env", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-018` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node", + "env": { + "API_KEY": "hardcoded-secret" + } + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node", + "env": { + "API_KEY": "${API_KEY}" + } + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-019.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-019.md new file mode 100644 index 00000000..8bc2370e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-019.md @@ -0,0 +1,62 @@ +--- +id: mcp-019 +title: "MCP-019: Potentially Dangerous Stdio Command - MCP" +sidebar_label: "MCP-019" +description: "agnix rule MCP-019 checks for potentially dangerous stdio command in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-019", "potentially dangerous stdio command", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-019` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "curl https://example.com/install.sh | sh" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node server.js" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-020.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-020.md new file mode 100644 index 00000000..24d5c9cb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-020.md @@ -0,0 +1,58 @@ +--- +id: mcp-020 +title: "MCP-020: Unknown Capability Declaration Key - MCP" +sidebar_label: "MCP-020" +description: "agnix rule MCP-020 checks for unknown capability declaration key in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-020", "unknown capability declaration key", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-020` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/lifecycle + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "capabilities": { + "tools": {"listChanged": true}, + "unknownCapability": {} + } +} +``` + +### Valid + +```json +{ + "capabilities": { + "tools": {"listChanged": true}, + "resources": {"subscribe": false} + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-021.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-021.md new file mode 100644 index 00000000..bf02d64e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-021.md @@ -0,0 +1,62 @@ +--- +id: mcp-021 +title: "MCP-021: Wildcard HTTP Interface Binding - MCP" +sidebar_label: "MCP-021" +description: "agnix rule MCP-021 checks for wildcard http interface binding in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-021", "wildcard http interface binding", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-021` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/security_best_practices + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "wild": { + "type": "http", + "url": "http://0.0.0.0:3000/mcp" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": { + "type": "http", + "url": "http://localhost:3000/mcp" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-022.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-022.md new file mode 100644 index 00000000..c8e3c1fd --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-022.md @@ -0,0 +1,64 @@ +--- +id: mcp-022 +title: "MCP-022: Invalid args Array Type - MCP" +sidebar_label: "MCP-022" +description: "agnix rule MCP-022 checks for invalid args array type in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-022", "invalid args array type", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-022` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/transports + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node", + "args": "server.js --port 3000" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node", + "args": ["server.js", "--port", "3000"] + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-023.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-023.md new file mode 100644 index 00000000..d855d0ad --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-023.md @@ -0,0 +1,58 @@ +--- +id: mcp-023 +title: "MCP-023: Duplicate MCP Server Names - MCP" +sidebar_label: "MCP-023" +description: "agnix rule MCP-023 checks for duplicate mcp server names in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-023", "duplicate mcp server names", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-023` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/transports + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "dup": {"type": "stdio", "command": "node"}, + "dup": {"type": "stdio", "command": "python"} + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": {"type": "stdio", "command": "node"}, + "remote": {"type": "http", "url": "https://api.example.com/mcp"} + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-024.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-024.md new file mode 100644 index 00000000..f58a9e8d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-024.md @@ -0,0 +1,59 @@ +--- +id: mcp-024 +title: "MCP-024: Empty MCP Server Configuration - MCP" +sidebar_label: "MCP-024" +description: "agnix rule MCP-024 checks for empty mcp server configuration in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-024", "empty mcp server configuration", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-024` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-13` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `2025-11-25` + +## Evidence Sources + +- https://modelcontextprotocol.io/specification/2025-11-25/basic/transports + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "empty": {} + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "local": { + "type": "stdio", + "command": "node" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-025.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-025.md new file mode 100644 index 00000000..916c385f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-025.md @@ -0,0 +1,64 @@ +--- +id: mcp-025 +title: "MCP-025: Non-boolean alwaysLoad in MCP Server Config - MCP" +sidebar_label: "MCP-025" +description: "agnix rule MCP-025 checks for non-boolean alwaysload in mcp server config in mcp files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["MCP-025", "non-boolean alwaysload in mcp server config", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-025` +- **Severity**: `MEDIUM` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-28` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.121` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.121 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "fs": { + "type": "stdio", + "command": "node", + "alwaysLoad": "true" + } + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "fs": { + "type": "stdio", + "command": "node", + "alwaysLoad": true + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/mcp-026.md b/website/versioned_docs/version-0.47.0/rules/generated/mcp-026.md new file mode 100644 index 00000000..634c3915 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/mcp-026.md @@ -0,0 +1,56 @@ +--- +id: mcp-026 +title: "MCP-026: Reserved MCP Server Name - MCP" +sidebar_label: "MCP-026" +description: "agnix rule MCP-026 checks for reserved mcp server name in mcp files. Severity: HIGH. See examples and fix guidance." +keywords: ["MCP-026", "reserved mcp server name", "mcp", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `MCP-026` +- **Severity**: `HIGH` +- **Category**: `MCP` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-05-06` + +## Applicability + +- **Tool**: `claude-code` +- **Version Range**: `>=2.1.128` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anthropics/claude-code/releases/tag/v2.1.128 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": { + "workspace": {"type": "stdio", "command": "node"} + } +} +``` + +### Valid + +```json +{ + "mcpServers": { + "fs": {"type": "stdio", "command": "node"} + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-001.md new file mode 100644 index 00000000..2331c143 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-001.md @@ -0,0 +1,52 @@ +--- +id: oc-001 +title: "OC-001: Invalid Share Mode - OpenCode" +sidebar_label: "OC-001" +description: "agnix rule OC-001 checks for invalid share mode in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-001", "invalid share mode", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-001` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "share": "public" +} +``` + +### Valid + +```json +{ + "share": "manual" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-002.md new file mode 100644 index 00000000..7805de23 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-002.md @@ -0,0 +1,52 @@ +--- +id: oc-002 +title: "OC-002: Invalid Instruction Path - OpenCode" +sidebar_label: "OC-002" +description: "agnix rule OC-002 checks for invalid instruction path in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-002", "invalid instruction path", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "instructions": ["[unclosed"] +} +``` + +### Valid + +```json +{ + "instructions": ["**/*.md"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-003.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-003.md new file mode 100644 index 00000000..45bced7c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-003.md @@ -0,0 +1,51 @@ +--- +id: oc-003 +title: "OC-003: opencode.json Parse Error - OpenCode" +sidebar_label: "OC-003" +description: "agnix rule OC-003 checks for opencode.json parse error in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-003", "opencode.json parse error", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-003` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ invalid json content } +``` + +### Valid + +```json +{ + "share": "manual", + "instructions": ["**/*.md"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-004.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-004.md new file mode 100644 index 00000000..fbbb6beb --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-004.md @@ -0,0 +1,53 @@ +--- +id: oc-004 +title: "OC-004: Unknown Config Key - OpenCode" +sidebar_label: "OC-004" +description: "agnix rule OC-004 checks for unknown config key in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-004", "unknown config key", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-004` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "unknownKey": true +} +``` + +### Valid + +```json +{ + "share": "manual", + "model": "claude-sonnet-4-5" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-006.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-006.md new file mode 100644 index 00000000..2fc1e5ac --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-006.md @@ -0,0 +1,52 @@ +--- +id: oc-006 +title: "OC-006: Remote URL in Instructions - OpenCode" +sidebar_label: "OC-006" +description: "agnix rule OC-006 checks for remote url in instructions in opencode files. Severity: LOW. See examples and fix guidance." +keywords: ["OC-006", "remote url in instructions", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-006` +- **Severity**: `LOW` +- **Category**: `OpenCode` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "instructions": ["https://example.com/rules.md"] +} +``` + +### Valid + +```json +{ + "instructions": ["**/*.md"] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-007.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-007.md new file mode 100644 index 00000000..3a9ef097 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-007.md @@ -0,0 +1,58 @@ +--- +id: oc-007 +title: "OC-007: Invalid Agent Definition - OpenCode" +sidebar_label: "OC-007" +description: "agnix rule OC-007 checks for invalid agent definition in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-007", "invalid agent definition", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-007` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { + "my-agent": {} + } +} +``` + +### Valid + +```json +{ + "agent": { + "my-agent": { + "description": "A custom agent" + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-008.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-008.md new file mode 100644 index 00000000..7326a62e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-008.md @@ -0,0 +1,57 @@ +--- +id: oc-008 +title: "OC-008: Invalid Permission Config - OpenCode" +sidebar_label: "OC-008" +description: "agnix rule OC-008 checks for invalid permission config in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-008", "invalid permission config", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-008` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "permission": { + "read": "yes" + } +} +``` + +### Valid + +```json +{ + "permission": { + "read": "allow", + "edit": "ask" + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-009.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-009.md new file mode 100644 index 00000000..fc6c8bd8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-009.md @@ -0,0 +1,52 @@ +--- +id: oc-009 +title: "OC-009: Invalid Variable Substitution - OpenCode" +sidebar_label: "OC-009" +description: "agnix rule OC-009 checks for invalid variable substitution in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-009", "invalid variable substitution", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-009` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "model": "{bad:value}" +} +``` + +### Valid + +```json +{ + "model": "{env:OPENAI_MODEL}" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-001.md new file mode 100644 index 00000000..9cf4125f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-001.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-001 +title: "OC-AG-001: Invalid Agent Mode Value - OpenCode" +sidebar_label: "OC-AG-001" +description: "agnix rule OC-AG-001 checks for invalid agent mode value in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-001", "invalid agent mode value", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-001` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "custom": { "mode": "invalid" } } +} +``` + +### Valid + +```json +{ + "agent": { "custom": { "mode": "subagent" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-002.md new file mode 100644 index 00000000..192174aa --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-002.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-002 +title: "OC-AG-002: Invalid Color Format - OpenCode" +sidebar_label: "OC-AG-002" +description: "agnix rule OC-AG-002 checks for invalid color format in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-002", "invalid color format", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "custom": { "color": "red" } } +} +``` + +### Valid + +```json +{ + "agent": { "custom": { "color": "#ff0000" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-003.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-003.md new file mode 100644 index 00000000..213a2652 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-003.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-003 +title: "OC-AG-003: Temperature Out of Range - OpenCode" +sidebar_label: "OC-AG-003" +description: "agnix rule OC-AG-003 checks for temperature out of range in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-003", "temperature out of range", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-003` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "custom": { "temperature": 3.5 } } +} +``` + +### Valid + +```json +{ + "agent": { "custom": { "temperature": 0.7 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-004.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-004.md new file mode 100644 index 00000000..85405609 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-004.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-004 +title: "OC-AG-004: Steps Not a Positive Integer - OpenCode" +sidebar_label: "OC-AG-004" +description: "agnix rule OC-AG-004 checks for steps not a positive integer in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-004", "steps not a positive integer", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-004` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "custom": { "steps": -5 } } +} +``` + +### Valid + +```json +{ + "agent": { "custom": { "steps": 50 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-005.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-005.md new file mode 100644 index 00000000..e2c4d895 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-005.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-005 +title: "OC-AG-005: top_p Out of Range - OpenCode" +sidebar_label: "OC-AG-005" +description: "agnix rule OC-AG-005 checks for top_p out of range in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-005", "top_p out of range", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-005` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "top_p": 1.5 } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "top_p": 0.9 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-006.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-006.md new file mode 100644 index 00000000..b9372682 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-006.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-006 +title: "OC-AG-006: Invalid Named Color - OpenCode" +sidebar_label: "OC-AG-006" +description: "agnix rule OC-AG-006 checks for invalid named color in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-AG-006", "invalid named color", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-006` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "color": "purple" } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "color": "primary" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-007.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-007.md new file mode 100644 index 00000000..52e2aade --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-007.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-007 +title: "OC-AG-007: Redundant steps and maxSteps - OpenCode" +sidebar_label: "OC-AG-007" +description: "agnix rule OC-AG-007 checks for redundant steps and maxsteps in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-AG-007", "redundant steps and maxsteps", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-007` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "steps": 10, "maxSteps": 20 } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "steps": 20 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-008.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-008.md new file mode 100644 index 00000000..3c1982a1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-008.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-008 +title: "OC-AG-008: Invalid hidden Type - OpenCode" +sidebar_label: "OC-AG-008" +description: "agnix rule OC-AG-008 checks for invalid hidden type in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-008", "invalid hidden type", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-008` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "hidden": "yes" } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "hidden": true } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-009.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-009.md new file mode 100644 index 00000000..ed4ac377 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-ag-009.md @@ -0,0 +1,52 @@ +--- +id: oc-ag-009 +title: "OC-AG-009: Invalid Agent Disable Type - OpenCode" +sidebar_label: "OC-AG-009" +description: "agnix rule OC-AG-009 checks for invalid agent disable type in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AG-009", "invalid agent disable type", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AG-009` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "disabled": "yes" } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "disabled": true } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-001.md new file mode 100644 index 00000000..b92fe5f4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-001.md @@ -0,0 +1,50 @@ +--- +id: oc-agm-001 +title: "OC-AGM-001: Empty AGENTS.md - OpenCode" +sidebar_label: "OC-AGM-001" +description: "agnix rule OC-AGM-001 checks for empty agents.md in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AGM-001", "empty agents.md", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AGM-001` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{} +``` + +### Valid + +```json +# AGENTS + +Some content. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-002.md new file mode 100644 index 00000000..d6e41d95 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-agm-002.md @@ -0,0 +1,52 @@ +--- +id: oc-agm-002 +title: "OC-AGM-002: Secrets in AGENTS.md - OpenCode" +sidebar_label: "OC-AGM-002" +description: "agnix rule OC-AGM-002 checks for secrets in agents.md in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-AGM-002", "secrets in agents.md", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-AGM-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +# AGENTS + +API_KEY=sk-123456 +``` + +### Valid + +```json +# AGENTS + +Use environment variables. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-001.md new file mode 100644 index 00000000..1c64abfe --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-001.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-001 +title: "OC-CFG-001: Invalid Model Format - OpenCode" +sidebar_label: "OC-CFG-001" +description: "agnix rule OC-CFG-001 checks for invalid model format in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-001", "invalid model format", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-001` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "model": "claude-3-opus" +} +``` + +### Valid + +```json +{ + "model": "anthropic/claude-3-opus" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-002.md new file mode 100644 index 00000000..a0e0f802 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-002.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-002 +title: "OC-CFG-002: Invalid autoupdate value - OpenCode" +sidebar_label: "OC-CFG-002" +description: "agnix rule OC-CFG-002 checks for invalid autoupdate value in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-002", "invalid autoupdate value", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "autoupdate": "yes" +} +``` + +### Valid + +```json +{ + "autoupdate": "notify" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-003.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-003.md new file mode 100644 index 00000000..423a9171 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-003.md @@ -0,0 +1,53 @@ +--- +id: oc-cfg-003 +title: "OC-CFG-003: Unknown Top-level Config Field - OpenCode" +sidebar_label: "OC-CFG-003" +description: "agnix rule OC-CFG-003 checks for unknown top-level config field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-CFG-003", "unknown top-level config field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-003` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mdoel": "anthropic/claude-3-opus" +} +``` + +### Valid + +```json +{ + "model": "anthropic/claude-3-opus", + "share": "manual" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-004.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-004.md new file mode 100644 index 00000000..91de2643 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-004.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-004 +title: "OC-CFG-004: Invalid Default Agent - OpenCode" +sidebar_label: "OC-CFG-004" +description: "agnix rule OC-CFG-004 checks for invalid default agent in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-CFG-004", "invalid default agent", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-004` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "default_agent": "unknown-agent" +} +``` + +### Valid + +```json +{ + "default_agent": "build" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-005.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-005.md new file mode 100644 index 00000000..6246e4e2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-005.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-005 +title: "OC-CFG-005: Hardcoded API Key - OpenCode" +sidebar_label: "OC-CFG-005" +description: "agnix rule OC-CFG-005 checks for hardcoded api key in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-005", "hardcoded api key", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-005` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "provider": { "options": { "apiKey": "sk-1234567890abcdef" } } +} +``` + +### Valid + +```json +{ + "provider": { "options": { "apiKey": "{env:OPENAI_API_KEY}" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-006.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-006.md new file mode 100644 index 00000000..c11d2a4b --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-006.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-006 +title: "OC-CFG-006: Invalid MCP Server Structure - OpenCode" +sidebar_label: "OC-CFG-006" +description: "agnix rule OC-CFG-006 checks for invalid mcp server structure in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-006", "invalid mcp server structure", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-006` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcp": { "server": { "type": "invalid" } } +} +``` + +### Valid + +```json +{ + "mcp": { "server": { "type": "local", "command": ["node"] } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-007.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-007.md new file mode 100644 index 00000000..a676984d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-007.md @@ -0,0 +1,54 @@ +--- +id: oc-cfg-007 +title: "OC-CFG-007: Invalid MCP Server Command, URL, cwd, or Environment" +sidebar_label: "OC-CFG-007" +description: "agnix rule OC-CFG-007 checks for invalid mcp server command, url, cwd, or environment in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-007", "invalid mcp server command, url, cwd, or environment", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-007` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-30` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config +- https://github.com/sst/opencode/pull/30676 +- https://opencode.ai/config.json + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcp": { "server": { "type": "local", "command": ["node"], "env": { "PORT": 3000 } } } +} +``` + +### Valid + +```json +{ + "mcp": { "server": { "type": "local", "command": ["node"], "environment": { "NODE_ENV": "test" } } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-008.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-008.md new file mode 100644 index 00000000..24c0db72 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-008.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-008 +title: "OC-CFG-008: Invalid Log Level - OpenCode" +sidebar_label: "OC-CFG-008" +description: "agnix rule OC-CFG-008 checks for invalid log level in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-008", "invalid log level", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-008` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "logLevel": "verbose" +} +``` + +### Valid + +```json +{ + "logLevel": "info" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-009.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-009.md new file mode 100644 index 00000000..1e50897c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-009.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-009 +title: "OC-CFG-009: Invalid Compaction Reserved - OpenCode" +sidebar_label: "OC-CFG-009" +description: "agnix rule OC-CFG-009 checks for invalid compaction reserved in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-009", "invalid compaction reserved", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-009` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "compaction": { "reserved": -1 } +} +``` + +### Valid + +```json +{ + "compaction": { "reserved": 5 } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-010.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-010.md new file mode 100644 index 00000000..ac10206e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-010.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-010 +title: "OC-CFG-010: Invalid Skills URL - OpenCode" +sidebar_label: "OC-CFG-010" +description: "agnix rule OC-CFG-010 checks for invalid skills url in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-010", "invalid skills url", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-010` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "skills": { "urls": ["not-a-url"] } +} +``` + +### Valid + +```json +{ + "skills": { "urls": ["https://example.com"] } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-011.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-011.md new file mode 100644 index 00000000..56692aa1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-011.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-011 +title: "OC-CFG-011: Invalid MCP Timeout - OpenCode" +sidebar_label: "OC-CFG-011" +description: "agnix rule OC-CFG-011 checks for invalid mcp timeout in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-011", "invalid mcp timeout", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-011` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcp": { "srv": { "timeout": -5 } } +} +``` + +### Valid + +```json +{ + "mcp": { "srv": { "timeout": 5000 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-012.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-012.md new file mode 100644 index 00000000..d1d5024e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-012.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-012 +title: "OC-CFG-012: Invalid MCP OAuth Config - OpenCode" +sidebar_label: "OC-CFG-012" +description: "agnix rule OC-CFG-012 checks for invalid mcp oauth config in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-012", "invalid mcp oauth config", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-012` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcp": { "srv": { "oauth": { "client_id": "abc" } } } +} +``` + +### Valid + +```json +{ + "mcp": { "srv": { "oauth": { "client_id": "abc", "authorization_url": "https://auth.example.com" } } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-013.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-013.md new file mode 100644 index 00000000..0e4ad6e0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-013.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-013 +title: "OC-CFG-013: Invalid Server Config - OpenCode" +sidebar_label: "OC-CFG-013" +description: "agnix rule OC-CFG-013 checks for invalid server config in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-CFG-013", "invalid server config", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-013` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcp": { "srv": { "type": "invalid" } } +} +``` + +### Valid + +```json +{ + "mcp": { "srv": { "type": "stdio", "command": "node server.js" } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-014.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-014.md new file mode 100644 index 00000000..fa155bb4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-cfg-014.md @@ -0,0 +1,52 @@ +--- +id: oc-cfg-014 +title: "OC-CFG-014: Invalid subagent_depth Value - OpenCode" +sidebar_label: "OC-CFG-014" +description: "agnix rule OC-CFG-014 checks for invalid subagent_depth value in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-CFG-014", "invalid subagent_depth value", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-CFG-014` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-16` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `>=1.18.2` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/anomalyco/opencode/releases/tag/v1.18.2 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "subagent_depth": -1 +} +``` + +### Valid + +```json +{ + "subagent_depth": 2 +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-001.md new file mode 100644 index 00000000..38a75358 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-001.md @@ -0,0 +1,52 @@ +--- +id: oc-dep-001 +title: "OC-DEP-001: Deprecated mode Field - OpenCode" +sidebar_label: "OC-DEP-001" +description: "agnix rule OC-DEP-001 checks for deprecated mode field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-001", "deprecated mode field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-001` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mode": "agent" +} +``` + +### Valid + +```json +{ + "agent": { "my-agent": {} } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-002.md new file mode 100644 index 00000000..a682eabe --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-002.md @@ -0,0 +1,52 @@ +--- +id: oc-dep-002 +title: "OC-DEP-002: Deprecated tools Field - OpenCode" +sidebar_label: "OC-DEP-002" +description: "agnix rule OC-DEP-002 checks for deprecated tools field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-002", "deprecated tools field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-002` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tools": {} +} +``` + +### Valid + +```json +{ + "permission": { "read": "allow" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-003.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-003.md new file mode 100644 index 00000000..482f20ff --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-003.md @@ -0,0 +1,52 @@ +--- +id: oc-dep-003 +title: "OC-DEP-003: Deprecated autoshare Field - OpenCode" +sidebar_label: "OC-DEP-003" +description: "agnix rule OC-DEP-003 checks for deprecated autoshare field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-003", "deprecated autoshare field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-003` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "autoshare": "manual" +} +``` + +### Valid + +```json +{ + "share": "manual" +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-004.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-004.md new file mode 100644 index 00000000..882634e1 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-004.md @@ -0,0 +1,48 @@ +--- +id: oc-dep-004 +title: "OC-DEP-004: Deprecated CONTEXT.md Filename - OpenCode" +sidebar_label: "OC-DEP-004" +description: "agnix rule OC-DEP-004 checks for deprecated context.md filename in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-004", "deprecated context.md filename", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-004` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +CONTEXT.md +``` + +### Valid + +```json +AGENTS.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-005.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-005.md new file mode 100644 index 00000000..c8f0a7de --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-005.md @@ -0,0 +1,52 @@ +--- +id: oc-dep-005 +title: "OC-DEP-005: Deprecated TUI Keys - OpenCode" +sidebar_label: "OC-DEP-005" +description: "agnix rule OC-DEP-005 checks for deprecated tui keys in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-005", "deprecated tui keys", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-005` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tui": { "colors": { "bg": "#000" } } +} +``` + +### Valid + +```json +{ + "tui": { "theme": "dark" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-006.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-006.md new file mode 100644 index 00000000..3e6a7fa3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-006.md @@ -0,0 +1,52 @@ +--- +id: oc-dep-006 +title: "OC-DEP-006: Deprecated MaxSteps Field - OpenCode" +sidebar_label: "OC-DEP-006" +description: "agnix rule OC-DEP-006 checks for deprecated maxsteps field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-006", "deprecated maxsteps field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-006` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "agent": { "a": { "maxSteps": 50 } } +} +``` + +### Valid + +```json +{ + "agent": { "a": { "maxTokens": 8000 } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-007.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-007.md new file mode 100644 index 00000000..5aecc2ef --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-dep-007.md @@ -0,0 +1,53 @@ +--- +id: oc-dep-007 +title: "OC-DEP-007: Deprecated Reference Field - OpenCode" +sidebar_label: "OC-DEP-007" +description: "agnix rule OC-DEP-007 checks for deprecated reference field in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-DEP-007", "deprecated reference field", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-DEP-007` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2026-07-27` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/config.json +- https://opencode.ai/docs/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "reference": { "lib": "github:org/repo" } +} +``` + +### Valid + +```json +{ + "references": { "lib": "github:org/repo" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-001.md new file mode 100644 index 00000000..dc34c801 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-001.md @@ -0,0 +1,52 @@ +--- +id: oc-lsp-001 +title: "OC-LSP-001: LSP Command Without Extensions - OpenCode" +sidebar_label: "OC-LSP-001" +description: "agnix rule OC-LSP-001 checks for lsp command without extensions in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-LSP-001", "lsp command without extensions", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-LSP-001` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "lsp": { "ts": { "command": "tsc" } } +} +``` + +### Valid + +```json +{ + "lsp": { "ts": { "command": "tsc", "extensions": [".ts"] } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-002.md new file mode 100644 index 00000000..03722927 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-lsp-002.md @@ -0,0 +1,52 @@ +--- +id: oc-lsp-002 +title: "OC-LSP-002: Invalid LSP Extensions - OpenCode" +sidebar_label: "OC-LSP-002" +description: "agnix rule OC-LSP-002 checks for invalid lsp extensions in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-LSP-002", "invalid lsp extensions", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-LSP-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "lsp": { "ts": { "extensions": [] } } +} +``` + +### Valid + +```json +{ + "lsp": { "ts": { "extensions": [".ts", ".tsx"] } } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-001.md new file mode 100644 index 00000000..15f1cd78 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-001.md @@ -0,0 +1,52 @@ +--- +id: oc-pm-001 +title: "OC-PM-001: Invalid Permission Action - OpenCode" +sidebar_label: "OC-PM-001" +description: "agnix rule OC-PM-001 checks for invalid permission action in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-PM-001", "invalid permission action", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-PM-001` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "permission": { "read": "yes" } +} +``` + +### Valid + +```json +{ + "permission": { "read": "allow", "bash": "ask" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-002.md new file mode 100644 index 00000000..5fc5f3b6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-pm-002.md @@ -0,0 +1,52 @@ +--- +id: oc-pm-002 +title: "OC-PM-002: Unknown Permission Key - OpenCode" +sidebar_label: "OC-PM-002" +description: "agnix rule OC-PM-002 checks for unknown permission key in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-PM-002", "unknown permission key", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-PM-002` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "permission": { "unknown": "allow" } +} +``` + +### Valid + +```json +{ + "permission": { "read": "allow" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-sk-001.md new file mode 100644 index 00000000..ccdaa00e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-sk-001.md @@ -0,0 +1,61 @@ +--- +id: oc-sk-001 +title: "OC-SK-001: OpenCode Skill Uses Unsupported Field" +sidebar_label: "OC-SK-001" +description: "agnix rule OC-SK-001 checks for opencode skill uses unsupported field in opencode skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-SK-001", "opencode skill uses unsupported field", "opencode skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +argument-hint: provide a file path +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-001.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-001.md new file mode 100644 index 00000000..2feb02f7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-001.md @@ -0,0 +1,52 @@ +--- +id: oc-tui-001 +title: "OC-TUI-001: Unknown TUI Key - OpenCode" +sidebar_label: "OC-TUI-001" +description: "agnix rule OC-TUI-001 checks for unknown tui key in opencode files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["OC-TUI-001", "unknown tui key", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-TUI-001` +- **Severity**: `MEDIUM` +- **Category**: `OpenCode` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tui": { "unknown_opt": true } +} +``` + +### Valid + +```json +{ + "tui": { "theme": "dark" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-002.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-002.md new file mode 100644 index 00000000..1ba1bff2 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-002.md @@ -0,0 +1,52 @@ +--- +id: oc-tui-002 +title: "OC-TUI-002: Invalid scroll_speed - OpenCode" +sidebar_label: "OC-TUI-002" +description: "agnix rule OC-TUI-002 checks for invalid scroll_speed in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-TUI-002", "invalid scroll_speed", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-TUI-002` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tui": { "scroll_speed": 0.0001 } +} +``` + +### Valid + +```json +{ + "tui": { "scroll_speed": 1.0 } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-003.md b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-003.md new file mode 100644 index 00000000..f10776ff --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/oc-tui-003.md @@ -0,0 +1,52 @@ +--- +id: oc-tui-003 +title: "OC-TUI-003: Invalid diff_style - OpenCode" +sidebar_label: "OC-TUI-003" +description: "agnix rule OC-TUI-003 checks for invalid diff_style in opencode files. Severity: HIGH. See examples and fix guidance." +keywords: ["OC-TUI-003", "invalid diff_style", "opencode", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `OC-TUI-003` +- **Severity**: `HIGH` +- **Category**: `OpenCode` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `opencode` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://opencode.ai/docs/config + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "tui": { "diff_style": "unified" } +} +``` + +### Valid + +```json +{ + "tui": { "diff_style": "auto" } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-001.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-001.md new file mode 100644 index 00000000..bf8dc2a8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-001.md @@ -0,0 +1,93 @@ +--- +id: pe-001 +title: "PE-001: Lost in the Middle - Prompt Engineering" +sidebar_label: "PE-001" +description: "agnix rule PE-001 checks for lost in the middle in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-001", "lost in the middle", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-001` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://aclanthology.org/2024.tacl-1.9/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +## Guidelines + +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +NEVER commit secrets to the repository. +Line 10 +Line 11 +Line 12 +Line 13 +Line 14 +Line 15 +Line 16 +Line 17 +Line 18 +Line 19 +Line 20 +``` + +### Valid + +```markdown +# Critical Rules + +NEVER commit secrets to the repository. +Always run tests before pushing. + +## Guidelines + +Line 1 +Line 2 +Line 3 +Line 4 +Line 5 +Line 6 +Line 7 +Line 8 +Line 9 +Line 10 +Line 11 +Line 12 +Line 13 +Line 14 +Line 15 +Line 16 +Line 17 +Line 18 +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-002.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-002.md new file mode 100644 index 00000000..e53b8443 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-002.md @@ -0,0 +1,52 @@ +--- +id: pe-002 +title: "PE-002: Chain-of-Thought on Simple Task - Prompt Engineering" +sidebar_label: "PE-002" +description: "agnix rule PE-002 checks for chain-of-thought on simple task in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-002", "chain-of-thought on simple task", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-002` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://arxiv.org/abs/2201.11903 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Read File Skill + +When asked to read the file, think step by step. +``` + +### Valid + +```markdown +# Code Review Skill + +Think step by step when reviewing complex code. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-003.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-003.md new file mode 100644 index 00000000..66b1edba --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-003.md @@ -0,0 +1,55 @@ +--- +id: pe-003 +title: "PE-003: Weak Imperative Language - Prompt Engineering" +sidebar_label: "PE-003" +description: "agnix rule PE-003 checks for weak imperative language in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-003", "weak imperative language", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-003` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://arxiv.org/abs/2201.11903 +- https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Critical Rules + +You should follow the style guide. +Try to run linting before commits. +``` + +### Valid + +```markdown +# Critical Rules + +You must follow the style guide. +Always run linting before commits. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-004.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-004.md new file mode 100644 index 00000000..32f76410 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-004.md @@ -0,0 +1,55 @@ +--- +id: pe-004 +title: "PE-004: Ambiguous Instructions - Prompt Engineering" +sidebar_label: "PE-004" +description: "agnix rule PE-004 checks for ambiguous instructions in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-004", "ambiguous instructions", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-004` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules + +Usually format output as JSON. +Include tests if possible. +Sometimes run the linter when appropriate. +``` + +### Valid + +```markdown +# Rules + +Always format output as JSON. +Never skip test execution. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-005.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-005.md new file mode 100644 index 00000000..a2826ed5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-005.md @@ -0,0 +1,55 @@ +--- +id: pe-005 +title: "PE-005: Redundant Generic Instructions - Prompt Engineering" +sidebar_label: "PE-005" +description: "agnix rule PE-005 checks for redundant generic instructions in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-005", "redundant generic instructions", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-005` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2025-05-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules + +Be helpful and accurate. +Be concise. +Format all output as JSON. +``` + +### Valid + +```markdown +# Rules + +Format all output as JSON with 2-space indentation. +Always include error codes in responses. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/pe-006.md b/website/versioned_docs/version-0.47.0/rules/generated/pe-006.md new file mode 100644 index 00000000..f857dd01 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/pe-006.md @@ -0,0 +1,55 @@ +--- +id: pe-006 +title: "PE-006: Negative-Only Instructions - Prompt Engineering" +sidebar_label: "PE-006" +description: "agnix rule PE-006 checks for negative-only instructions in prompt engineering files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["PE-006", "negative-only instructions", "prompt engineering", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `PE-006` +- **Severity**: `MEDIUM` +- **Category**: `Prompt Engineering` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2025-05-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.anthropic.com/en/docs/build-with-claude/prompt-engineering/overview + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules + +Don't use global variables. +Never use console.log. +Avoid inline styles. +``` + +### Valid + +```markdown +# Rules + +Don't use global variables. Instead, pass values as function parameters. +Avoid console.log in production. Use the structured logger instead. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/rc-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/rc-sk-001.md new file mode 100644 index 00000000..69fe7451 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/rc-sk-001.md @@ -0,0 +1,61 @@ +--- +id: rc-sk-001 +title: "RC-SK-001: Roo Code Skill Uses Unsupported Field" +sidebar_label: "RC-SK-001" +description: "agnix rule RC-SK-001 checks for roo code skill uses unsupported field in roo code skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["RC-SK-001", "roo code skill uses unsupported field", "roo code skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `RC-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Roo Code Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/custom-instructions + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +disable-model-invocation: false +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ref-001.md b/website/versioned_docs/version-0.47.0/rules/generated/ref-001.md new file mode 100644 index 00000000..0d0b0e29 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ref-001.md @@ -0,0 +1,57 @@ +--- +id: ref-001 +title: "REF-001: Import File Not Found - References" +sidebar_label: "REF-001" +description: "agnix rule REF-001 checks for import file not found in references files. Severity: HIGH. See examples and fix guidance." +keywords: ["REF-001", "import file not found", "references", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `REF-001` +- **Severity**: `HIGH` +- **Category**: `References` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory +- https://agentskills.io + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +See @docs/nonexistent-file.md for the style guide. + +(where docs/nonexistent-file.md does not exist) +``` + +### Valid + +```markdown +# Project + +See @docs/coding-standards.md for style guide. + +(where docs/coding-standards.md exists on disk) +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ref-002.md b/website/versioned_docs/version-0.47.0/rules/generated/ref-002.md new file mode 100644 index 00000000..263218ab --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ref-002.md @@ -0,0 +1,58 @@ +--- +id: ref-002 +title: "REF-002: Broken Markdown Link - References" +sidebar_label: "REF-002" +description: "agnix rule REF-002 checks for broken markdown link in references files. Severity: HIGH. See examples and fix guidance." +keywords: ["REF-002", "broken markdown link", "references", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `REF-002` +- **Severity**: `HIGH` +- **Category**: `References` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://spec.commonmark.org/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +See [style guide](docs/STYLE.md) for conventions. +See [architecture](docs/ARCHITECTURE.md) for design. + +(where docs/STYLE.md and docs/ARCHITECTURE.md do not exist) +``` + +### Valid + +```markdown +# Project + +See [style guide](docs/STYLE.md) for conventions. +Visit [GitHub](https://github.com) for source. + +(where docs/STYLE.md exists on disk) +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ref-003.md b/website/versioned_docs/version-0.47.0/rules/generated/ref-003.md new file mode 100644 index 00000000..9c08d0c4 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ref-003.md @@ -0,0 +1,55 @@ +--- +id: ref-003 +title: "REF-003: Duplicate Import - References" +sidebar_label: "REF-003" +description: "agnix rule REF-003 checks for duplicate import in references files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["REF-003", "duplicate import", "references", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `REF-003` +- **Severity**: `MEDIUM` +- **Category**: `References` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe)` +- **Verified On**: `2025-05-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +@docs/coding-standards.md +@docs/testing-guide.md +@docs/coding-standards.md +``` + +### Valid + +```markdown +# Project + +@docs/coding-standards.md +@docs/testing-guide.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ref-004.md b/website/versioned_docs/version-0.47.0/rules/generated/ref-004.md new file mode 100644 index 00000000..b822d448 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ref-004.md @@ -0,0 +1,55 @@ +--- +id: ref-004 +title: "REF-004: Non-Markdown Import - References" +sidebar_label: "REF-004" +description: "agnix rule REF-004 checks for non-markdown import in references files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["REF-004", "non-markdown import", "references", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `REF-004` +- **Severity**: `MEDIUM` +- **Category**: `References` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2025-05-01` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://code.claude.com/docs/en/memory + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project + +@config.json +@scripts/deploy.py +@src/utils.ts +``` + +### Valid + +```markdown +# Project + +@docs/coding-standards.md +@docs/architecture.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-001.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-001.md new file mode 100644 index 00000000..5430fad8 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-001.md @@ -0,0 +1,50 @@ +--- +id: roo-001 +title: "ROO-001: Empty Roo Code Rule File - Roo Code" +sidebar_label: "ROO-001" +description: "agnix rule ROO-001 checks for empty roo code rule file in roo code files. Severity: HIGH. See examples and fix guidance." +keywords: ["ROO-001", "empty roo code rule file", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-001` +- **Severity**: `HIGH` +- **Category**: `Roo Code` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/custom-modes + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules +``` + +### Valid + +```markdown +# General Rules + +Follow project coding standards and write clean, maintainable code. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-002.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-002.md new file mode 100644 index 00000000..3c243d3e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-002.md @@ -0,0 +1,59 @@ +--- +id: roo-002 +title: "ROO-002: Invalid .roomodes Configuration - Roo Code" +sidebar_label: "ROO-002" +description: "agnix rule ROO-002 checks for invalid .roomodes configuration in roo code files. Severity: HIGH. See examples and fix guidance." +keywords: ["ROO-002", "invalid .roomodes configuration", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-002` +- **Severity**: `HIGH` +- **Category**: `Roo Code` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/custom-modes + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "customModes": "not-an-array" +} +``` + +### Valid + +```json +{ + "customModes": [ + { + "slug": "designer", + "name": "Designer", + "roleDefinition": "You are a UI/UX designer.", + "groups": ["read", "edit"] + } + ] +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-003.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-003.md new file mode 100644 index 00000000..11f8c609 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-003.md @@ -0,0 +1,51 @@ +--- +id: roo-003 +title: "ROO-003: Invalid .rooignore File - Roo Code" +sidebar_label: "ROO-003" +description: "agnix rule ROO-003 checks for invalid .rooignore file in roo code files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["ROO-003", "invalid .rooignore file", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-003` +- **Severity**: `MEDIUM` +- **Category**: `Roo Code` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/rooignore + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Rules +``` + +### Valid + +```markdown +node_modules/ +*.log +.env +build/ +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-004.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-004.md new file mode 100644 index 00000000..78dc28a0 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-004.md @@ -0,0 +1,48 @@ +--- +id: roo-004 +title: "ROO-004: Invalid Mode Slug in Rule Directory - Roo Code" +sidebar_label: "ROO-004" +description: "agnix rule ROO-004 checks for invalid mode slug in rule directory in roo code files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["ROO-004", "invalid mode slug in rule directory", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-004` +- **Severity**: `MEDIUM` +- **Category**: `Roo Code` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/custom-modes + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +.roo/rules-INVALID SLUG/general.md +``` + +### Valid + +```markdown +.roo/rules-architect/general.md +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-005.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-005.md new file mode 100644 index 00000000..2c1ae36c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-005.md @@ -0,0 +1,57 @@ +--- +id: roo-005 +title: "ROO-005: Invalid .roo/mcp.json Configuration - Roo Code" +sidebar_label: "ROO-005" +description: "agnix rule ROO-005 checks for invalid .roo/mcp.json configuration in roo code files. Severity: HIGH. See examples and fix guidance." +keywords: ["ROO-005", "invalid .roo/mcp.json configuration", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-005` +- **Severity**: `HIGH` +- **Category**: `Roo Code` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/mcp/using-mcp-in-roo + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```json +{ + "mcpServers": "not-an-object" +} +``` + +### Valid + +```json +{ + "mcpServers": { + "my-server": { + "command": "node", + "args": ["server.js"] + } + } +} +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/roo-006.md b/website/versioned_docs/version-0.47.0/rules/generated/roo-006.md new file mode 100644 index 00000000..61d7c087 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/roo-006.md @@ -0,0 +1,48 @@ +--- +id: roo-006 +title: "ROO-006: Mode Slug Not Recognized - Roo Code" +sidebar_label: "ROO-006" +description: "agnix rule ROO-006 checks for mode slug not recognized in roo code files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["ROO-006", "mode slug not recognized", "roo code", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `ROO-006` +- **Severity**: `MEDIUM` +- **Category**: `Roo Code` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `roo-code` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.roocode.com/features/custom-modes + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +.roo/rules-custom-undefined/SKILL.md +``` + +### Valid + +```markdown +.roo/rules-code/SKILL.md with content +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ver-001.md b/website/versioned_docs/version-0.47.0/rules/generated/ver-001.md new file mode 100644 index 00000000..add8a47e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ver-001.md @@ -0,0 +1,59 @@ +--- +id: ver-001 +title: "VER-001: No Tool/Spec Versions Pinned - Version Awareness" +sidebar_label: "VER-001" +description: "agnix rule VER-001 checks for no tool/spec versions pinned in version awareness files. Severity: LOW. See examples and fix guidance." +keywords: ["VER-001", "no tool/spec versions pinned", "version awareness", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `VER-001` +- **Severity**: `LOW` +- **Category**: `Version Awareness` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://github.com/avifenesh/agnix/issues/104 + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# .agnix.toml + +[rules] +prompt_engineering = true + +# No tool_versions or spec_revisions pinned +``` + +### Valid + +```markdown +# .agnix.toml + +[tool_versions] +claude_code = "1.0.20" + +[spec_revisions] +agent_skills_spec = "2025-01-15" +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ws-001.md b/website/versioned_docs/version-0.47.0/rules/generated/ws-001.md new file mode 100644 index 00000000..848bf93d --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ws-001.md @@ -0,0 +1,49 @@ +--- +id: ws-001 +title: "WS-001: Empty Windsurf Rule File - windsurf" +sidebar_label: "WS-001" +description: "agnix rule WS-001 checks for empty windsurf rule file in windsurf files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["WS-001", "empty windsurf rule file", "windsurf", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `WS-001` +- **Severity**: `MEDIUM` +- **Category**: `windsurf` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +Configuration omitted required fields for this rule. +``` + +### Valid + +```text +# TypeScript Guidelines +Use strict mode and explicit types. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ws-002.md b/website/versioned_docs/version-0.47.0/rules/generated/ws-002.md new file mode 100644 index 00000000..97a9d444 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ws-002.md @@ -0,0 +1,49 @@ +--- +id: ws-002 +title: "WS-002: Windsurf Rule File Exceeds Character Limit" +sidebar_label: "WS-002" +description: "agnix rule WS-002 checks for windsurf rule file exceeds character limit in windsurf files. Severity: HIGH. See examples and fix guidance." +keywords: ["WS-002", "windsurf rule file exceeds character limit", "windsurf", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `WS-002` +- **Severity**: `HIGH` +- **Category**: `windsurf` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +# Very long rule file exceeding 12000 characters... +``` + +### Valid + +```text +# TypeScript Guidelines +Use strict mode and explicit types. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ws-003.md b/website/versioned_docs/version-0.47.0/rules/generated/ws-003.md new file mode 100644 index 00000000..94bd020a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ws-003.md @@ -0,0 +1,49 @@ +--- +id: ws-003 +title: "WS-003: Empty or Oversized Windsurf Workflow File - windsurf" +sidebar_label: "WS-003" +description: "agnix rule WS-003 checks for empty or oversized windsurf workflow file in windsurf files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["WS-003", "empty or oversized windsurf workflow file", "windsurf", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `WS-003` +- **Severity**: `MEDIUM` +- **Category**: `windsurf` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +Configuration omitted required fields for this rule. +``` + +### Valid + +```text +# Deploy Workflow +Run deployment steps. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ws-004.md b/website/versioned_docs/version-0.47.0/rules/generated/ws-004.md new file mode 100644 index 00000000..d4f8cfd5 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ws-004.md @@ -0,0 +1,51 @@ +--- +id: ws-004 +title: "WS-004: Legacy .windsurfrules File Detected - windsurf" +sidebar_label: "WS-004" +description: "agnix rule WS-004 checks for legacy .windsurfrules file detected in windsurf files. Severity: LOW. See examples and fix guidance." +keywords: ["WS-004", "legacy .windsurfrules file detected", "windsurf", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `WS-004` +- **Severity**: `LOW` +- **Category**: `windsurf` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```text +# .windsurfrules (legacy file) +Use strict mode. +``` + +### Valid + +```text +# .windsurf/rules/typescript.md +# TypeScript Guidelines +Use strict mode. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/ws-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/ws-sk-001.md new file mode 100644 index 00000000..ff99f6b3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/ws-sk-001.md @@ -0,0 +1,61 @@ +--- +id: ws-sk-001 +title: "WS-SK-001: Windsurf Skill Uses Unsupported Field" +sidebar_label: "WS-SK-001" +description: "agnix rule WS-SK-001 checks for windsurf skill uses unsupported field in windsurf skills files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["WS-SK-001", "windsurf skill uses unsupported field", "windsurf skills", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `WS-SK-001` +- **Severity**: `MEDIUM` +- **Category**: `Windsurf Skills` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `Yes (safe/unsafe)` +- **Verified On**: `2026-04-23` + +## Applicability + +- **Tool**: `windsurf` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.windsurf.com/windsurf/cascade/memories + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: my-skill +description: A useful development skill +user-invocable: true +--- +# My Skill + +Skill instructions here. +``` + +### Valid + +```markdown +--- +name: my-skill +description: A useful development skill +--- +# My Skill + +Skill instructions here. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xml-001.md b/website/versioned_docs/version-0.47.0/rules/generated/xml-001.md new file mode 100644 index 00000000..5f397b99 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xml-001.md @@ -0,0 +1,51 @@ +--- +id: xml-001 +title: "XML-001: Unclosed XML Tag - XML" +sidebar_label: "XML-001" +description: "agnix rule XML-001 checks for unclosed xml tag in xml files. Severity: HIGH. See examples and fix guidance." +keywords: ["XML-001", "unclosed xml tag", "xml", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XML-001` +- **Severity**: `HIGH` +- **Category**: `XML` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://platform.claude.com/docs + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```xml + +This XML tag is never closed and will confuse the parser. +``` + +### Valid + +```xml + +This is a properly closed XML tag in markdown. + +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xml-002.md b/website/versioned_docs/version-0.47.0/rules/generated/xml-002.md new file mode 100644 index 00000000..89392e8a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xml-002.md @@ -0,0 +1,56 @@ +--- +id: xml-002 +title: "XML-002: Mismatched Closing Tag - XML" +sidebar_label: "XML-002" +description: "agnix rule XML-002 checks for mismatched closing tag in xml files. Severity: HIGH. See examples and fix guidance." +keywords: ["XML-002", "mismatched closing tag", "xml", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XML-002` +- **Severity**: `HIGH` +- **Category**: `XML` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://www.w3.org/TR/xml/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```xml + + +Content here. + + +``` + +### Valid + +```xml + + +Content here. + + +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xml-003.md b/website/versioned_docs/version-0.47.0/rules/generated/xml-003.md new file mode 100644 index 00000000..aa781b55 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xml-003.md @@ -0,0 +1,51 @@ +--- +id: xml-003 +title: "XML-003: Unmatched Closing Tag - XML" +sidebar_label: "XML-003" +description: "agnix rule XML-003 checks for unmatched closing tag in xml files. Severity: HIGH. See examples and fix guidance." +keywords: ["XML-003", "unmatched closing tag", "xml", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XML-003` +- **Severity**: `HIGH` +- **Category**: `XML` +- **Normative Level**: `MUST` +- **Auto-Fix**: `Yes (unsafe)` +- **Verified On**: `2026-02-04` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://www.w3.org/TR/xml/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```xml +Follow these guidelines. + +``` + +### Valid + +```xml + +Follow these guidelines. + +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-001.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-001.md new file mode 100644 index 00000000..6efd644e --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-001.md @@ -0,0 +1,64 @@ +--- +id: xp-001 +title: "XP-001: Platform-Specific Feature in Generic Config" +sidebar_label: "XP-001" +description: "agnix rule XP-001 checks for platform-specific feature in generic config in cross-platform files. Severity: HIGH. See examples and fix guidance." +keywords: ["XP-001", "platform-specific feature in generic config", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-001` +- **Severity**: `HIGH` +- **Category**: `Cross-Platform` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Project Guidelines + +--- +context: fork +agent: reviewer +allowed-tools: Read Write +--- + +- type: PreToolExecution + command: echo "lint" +``` + +### Valid + +```markdown +# Project Guidelines + +Follow the coding style guide. + +## Commands +- npm run build +- npm run test +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-002.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-002.md new file mode 100644 index 00000000..21709c5f --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-002.md @@ -0,0 +1,58 @@ +--- +id: xp-002 +title: "XP-002: AGENTS.md Platform Compatibility - Cross-Platform" +sidebar_label: "XP-002" +description: "agnix rule XP-002 checks for agents.md platform compatibility in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-002", "agents.md platform compatibility", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-002` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://opencode.ai/docs/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/ + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +Just plain text without any markdown headers or structure. +``` + +### Valid + +```markdown +# Project Memory + +## Build Commands + +### Testing + +Run tests with npm test. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-003.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-003.md new file mode 100644 index 00000000..64d30e6a --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-003.md @@ -0,0 +1,56 @@ +--- +id: xp-003 +title: "XP-003: Hard-Coded Platform Paths - Cross-Platform" +sidebar_label: "XP-003" +description: "agnix rule XP-003 checks for hard-coded platform paths in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-003", "hard-coded platform paths", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-003` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Configuration + +- Claude: .claude/settings.json +- Cursor: .cursor/rules/ +- Config: ~/.config/my-tool/config.yaml +``` + +### Valid + +```markdown +# Configuration + +Use environment variables for all platform-specific settings. +See ./src/config.ts for defaults. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-004.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-004.md new file mode 100644 index 00000000..ce1b09c7 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-004.md @@ -0,0 +1,73 @@ +--- +id: xp-004 +title: "XP-004: Conflicting Build/Test Commands - Cross-Platform" +sidebar_label: "XP-004" +description: "agnix rule XP-004 checks for conflicting build/test commands in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-004", "conflicting build/test commands", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-004` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# CLAUDE.md + +## Commands +- `npm install` +- `npm run build` +- `npm run test` + +# AGENTS.md (separate file, same project) + +## Commands +- `pnpm install` +- `pnpm build` +- `pnpm test` +``` + +### Valid + +```markdown +# CLAUDE.md + +## Commands +- `npm install` +- `npm run build` +- `npm test` + +# AGENTS.md (separate file, same project) + +## Commands +- `npm install` +- `npm run build` +- `npm test` +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-005.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-005.md new file mode 100644 index 00000000..a2b7af4c --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-005.md @@ -0,0 +1,63 @@ +--- +id: xp-005 +title: "XP-005: Conflicting Tool Constraints - Cross-Platform" +sidebar_label: "XP-005" +description: "agnix rule XP-005 checks for conflicting tool constraints in cross-platform files. Severity: HIGH. See examples and fix guidance." +keywords: ["XP-005", "conflicting tool constraints", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-005` +- **Severity**: `HIGH` +- **Category**: `Cross-Platform` +- **Normative Level**: `MUST` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# CLAUDE.md + +allowed-tools: Read Write Edit Bash Grep +You can use Bash for git operations. + +# AGENTS.md (separate file, same project) + +Never use Bash for any operations. +Do not use Edit or Write tools. +``` + +### Valid + +```markdown +# CLAUDE.md + +allowed-tools: Read Write Edit Bash Grep + +# AGENTS.md (separate file, same project) + +allowed-tools: Read Write Edit Bash Grep +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-006.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-006.md new file mode 100644 index 00000000..b8505f98 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-006.md @@ -0,0 +1,65 @@ +--- +id: xp-006 +title: "XP-006: Multiple Layers Without Documented Precedence" +sidebar_label: "XP-006" +description: "agnix rule XP-006 checks for multiple layers without documented precedence in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-006", "multiple layers without documented precedence", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-006` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md +- https://cursor.com/docs/rules + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# CLAUDE.md + +## Code Style +- Use TypeScript +- Follow ESLint rules + +# AGENTS.md (separate file, same project) + +## Code Style +- Use JavaScript +- Follow Prettier rules +``` + +### Valid + +```markdown +# CLAUDE.md + +CLAUDE.md takes precedence over AGENTS.md. + +## Code Style +- Use TypeScript +- Follow ESLint rules +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-007.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-007.md new file mode 100644 index 00000000..ba9521f6 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-007.md @@ -0,0 +1,57 @@ +--- +id: xp-007 +title: "XP-007: AGENTS.md Exceeds Codex Byte Limit - Cross-Platform" +sidebar_label: "XP-007" +description: "agnix rule XP-007 checks for agents.md exceeds codex byte limit in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-007", "agents.md exceeds codex byte limit", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-007` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# AGENTS.md + +(content exceeding 32768 bytes - will be truncated by Codex CLI) +``` + +### Valid + +```markdown +# AGENTS.md + +## Overview +Concise project instructions under 32KB. + +## Commands +- npm run build +- npm run test +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-008.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-008.md new file mode 100644 index 00000000..85fa2126 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-008.md @@ -0,0 +1,61 @@ +--- +id: xp-008 +title: "XP-008: Claude-specific Features in CLAUDE.md for Cursor" +sidebar_label: "XP-008" +description: "agnix rule XP-008 checks for claude-specific features in claude.md for cursor in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-008", "claude-specific features in claude.md for cursor", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-008` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-21` + +## Applicability + +- **Tool**: `cursor` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://docs.cursor.com/context/rules-for-ai + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# CLAUDE.md + +context: fork +agent: reviewer +allowed-tools: Read Write +``` + +### Valid + +```markdown +# CLAUDE.md + +## Claude Code + +context: fork +agent: reviewer + +## General + +Keep code clean and well-tested. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-009.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-009.md new file mode 100644 index 00000000..9f2fbb78 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-009.md @@ -0,0 +1,48 @@ +--- +id: xp-009 +title: "XP-009: Codex Instruction Chain Exceeds project_doc_max_bytes" +sidebar_label: "XP-009" +description: "agnix rule XP-009 checks for codex instruction chain exceeds project_doc_max_bytes in cross-platform files. Severity: MEDIUM. See examples and fix guidance." +keywords: ["XP-009", "codex instruction chain exceeds project_doc_max_bytes", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-009` +- **Severity**: `MEDIUM` +- **Category**: `Cross-Platform` +- **Normative Level**: `SHOULD` +- **Auto-Fix**: `No` +- **Verified On**: `2026-07-31` + +## Applicability + +- **Tool**: `codex` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://learn.chatgpt.com/docs/agent-configuration/agents-md + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `false` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +# Root AGENTS.md (20 KB)\n\n# api/AGENTS.md (10 KB)\n\n# api/v2/AGENTS.md (8 KB)\n\nCombined 38 KB: Codex stops appending once the running total passes 32768, so api/v2 is silently dropped. +``` + +### Valid + +```markdown +# Root AGENTS.md (8 KB)\n\nProject conventions.\n\n# nested/AGENTS.md (6 KB)\n\nModule specifics. Combined 14 KB, under the 32768-byte cap. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/generated/xp-sk-001.md b/website/versioned_docs/version-0.47.0/rules/generated/xp-sk-001.md new file mode 100644 index 00000000..d76d11f3 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/generated/xp-sk-001.md @@ -0,0 +1,59 @@ +--- +id: xp-sk-001 +title: "XP-SK-001: Skill Uses Client-Specific Features" +sidebar_label: "XP-SK-001" +description: "agnix rule XP-SK-001 checks for skill uses client-specific features in cross-platform files. Severity: LOW. See examples and fix guidance." +keywords: ["XP-SK-001", "skill uses client-specific features", "cross-platform", "validation", "agnix", "linter"] +--- + +## Summary + +- **Rule ID**: `XP-SK-001` +- **Severity**: `LOW` +- **Category**: `Cross-Platform` +- **Normative Level**: `BEST_PRACTICE` +- **Auto-Fix**: `No` +- **Verified On**: `2026-02-07` + +## Applicability + +- **Tool**: `all` +- **Version Range**: `unspecified` +- **Spec Revision**: `unspecified` + +## Evidence Sources + +- https://agentskills.io/specification + +## Test Coverage Metadata + +- Unit tests: `true` +- Fixture tests: `true` +- E2E tests: `false` + +## Examples + +The following examples demonstrate what triggers this rule and how to fix it. + +### Invalid + +```markdown +--- +name: code-review +description: Reviews code for quality issues +model: opus +context: fork +agent: general-purpose +--- +Review the code for bugs and style issues. +``` + +### Valid + +```markdown +--- +name: code-review +description: Reviews code for quality issues +--- +Review the code for bugs and style issues. +``` diff --git a/website/versioned_docs/version-0.47.0/rules/index.md b/website/versioned_docs/version-0.47.0/rules/index.md new file mode 100644 index 00000000..272133e9 --- /dev/null +++ b/website/versioned_docs/version-0.47.0/rules/index.md @@ -0,0 +1,454 @@ +# Rules Reference + +This section contains all `447` validation rules generated from `knowledge-base/rules.json`. +`124` rules have automatic fixes. + +| Rule | Name | Severity | Category | Auto-Fix | +|------|------|----------|----------|----------| +| [AGM-001](./generated/agm-001.md) | Valid Markdown Structure | HIGH | AGENTS.md | Yes (safe) | +| [AGM-002](./generated/agm-002.md) | Missing Section Headers | MEDIUM | AGENTS.md | No | +| [AGM-003](./generated/agm-003.md) | Character Limit (Windsurf) | MEDIUM | AGENTS.md | No | +| [AGM-004](./generated/agm-004.md) | Missing Project Context | MEDIUM | AGENTS.md | No | +| [AGM-005](./generated/agm-005.md) | Platform-Specific Features Without Guard | MEDIUM | AGENTS.md | No | +| [AGM-006](./generated/agm-006.md) | Nested AGENTS.md Hierarchy | MEDIUM | AGENTS.md | No | +| [AMP-001](./generated/amp-001.md) | Invalid Amp Check Frontmatter | HIGH | Amp Checks | Yes (safe) | +| [AMP-002](./generated/amp-002.md) | Invalid Amp severity-default | MEDIUM | Amp Checks | Yes (safe) | +| [AMP-003](./generated/amp-003.md) | Invalid AGENTS.md globs Frontmatter for Amp | MEDIUM | Amp Checks | No | +| [AMP-004](./generated/amp-004.md) | Invalid Amp Settings Configuration | HIGH | Amp Checks | Yes (safe) | +| [AMP-SK-001](./generated/amp-sk-001.md) | Amp Skill Uses Unsupported Field | MEDIUM | Amp Skills | Yes (safe/unsafe) | +| [AS-001](./generated/as-001.md) | Missing Frontmatter | HIGH | Agent Skills | Yes (safe) | +| [AS-002](./generated/as-002.md) | Missing Required Field: name | HIGH | Agent Skills | Yes (safe) | +| [AS-003](./generated/as-003.md) | Missing Required Field: description | HIGH | Agent Skills | Yes (safe) | +| [AS-004](./generated/as-004.md) | Invalid Name Format | HIGH | Agent Skills | Yes (safe/unsafe) | +| [AS-005](./generated/as-005.md) | Name Starts/Ends with Hyphen | HIGH | Agent Skills | Yes (safe) | +| [AS-006](./generated/as-006.md) | Consecutive Hyphens in Name | HIGH | Agent Skills | Yes (safe) | +| [AS-008](./generated/as-008.md) | Description Too Short | HIGH | Agent Skills | No | +| [AS-009](./generated/as-009.md) | Description Contains Angle Brackets (Codex) | HIGH | Agent Skills | Yes (safe) | +| [AS-011](./generated/as-011.md) | Invalid Compatibility Length | HIGH | Agent Skills | No | +| [AS-012](./generated/as-012.md) | Content Exceeds 500 Lines | MEDIUM | Agent Skills | No | +| [AS-013](./generated/as-013.md) | File Reference Too Deep | MEDIUM | Agent Skills | No | +| [AS-015](./generated/as-015.md) | Upload Size Exceeds 8MB | HIGH | Agent Skills | No | +| [AS-016](./generated/as-016.md) | Skill Parse Error | HIGH | Agent Skills | No | +| [AS-017](./generated/as-017.md) | Name Must Match Parent Directory | HIGH | Agent Skills | No | +| [CC-AG-001](./generated/cc-ag-001.md) | Missing Name Field | HIGH | Claude Agents | Yes (safe) | +| [CC-AG-002](./generated/cc-ag-002.md) | Missing Description Field | HIGH | Claude Agents | Yes (safe) | +| [CC-AG-003](./generated/cc-ag-003.md) | Invalid Model Value | HIGH | Claude Agents | Yes (unsafe) | +| [CC-AG-004](./generated/cc-ag-004.md) | Invalid Permission Mode | HIGH | Claude Agents | Yes (unsafe) | +| [CC-AG-005](./generated/cc-ag-005.md) | Referenced Skill Not Found | HIGH | Claude Agents | No | +| [CC-AG-006](./generated/cc-ag-006.md) | Tool/Disallowed Conflict | HIGH | Claude Agents | No | +| [CC-AG-007](./generated/cc-ag-007.md) | Agent Parse Error | HIGH | Claude Agents | No | +| [CC-AG-008](./generated/cc-ag-008.md) | Invalid Memory Scope | HIGH | Claude Agents | Yes (unsafe) | +| [CC-AG-009](./generated/cc-ag-009.md) | Invalid Tool Name in Tools List | HIGH | Claude Agents | No | +| [CC-AG-010](./generated/cc-ag-010.md) | Invalid Tool Name in DisallowedTools | HIGH | Claude Agents | No | +| [CC-AG-011](./generated/cc-ag-011.md) | Invalid Hooks in Agent Frontmatter | HIGH | Claude Agents | No | +| [CC-AG-012](./generated/cc-ag-012.md) | Bypass Permissions Warning | HIGH | Claude Agents | Yes (unsafe) | +| [CC-AG-013](./generated/cc-ag-013.md) | Invalid Skill Name Format | MEDIUM | Claude Agents | Yes (unsafe) | +| [CC-AG-014](./generated/cc-ag-014.md) | Invalid Effort Value | MEDIUM | Claude Agents | Yes (unsafe) | +| [CC-AG-015](./generated/cc-ag-015.md) | Invalid Isolation Value | MEDIUM | Claude Agents | Yes (unsafe) | +| [CC-AG-017](./generated/cc-ag-017.md) | Invalid MaxTurns Value | MEDIUM | Claude Agents | No | +| [CC-AG-019](./generated/cc-ag-019.md) | Unknown Agent Frontmatter Field | LOW | Claude Agents | Yes (unsafe) | +| [CC-AG-020](./generated/cc-ag-020.md) | Reserved Colon in Agent Name | HIGH | Claude Agents | No | +| [CC-HK-001](./generated/cc-hk-001.md) | Invalid Hook Event | HIGH | Claude Hooks | Yes (safe/unsafe) | +| [CC-HK-002](./generated/cc-hk-002.md) | Prompt Hook on Wrong Event | HIGH | Claude Hooks | No | +| [CC-HK-003](./generated/cc-hk-003.md) | Matcher Hint for Tool Events | LOW | Claude Hooks | No | +| [CC-HK-004](./generated/cc-hk-004.md) | Matcher on Unsupported Event | LOW | Claude Hooks | Yes (safe) | +| [CC-HK-005](./generated/cc-hk-005.md) | Missing Type Field | HIGH | Claude Hooks | Yes (safe) | +| [CC-HK-006](./generated/cc-hk-006.md) | Missing Command Field | HIGH | Claude Hooks | No | +| [CC-HK-007](./generated/cc-hk-007.md) | Missing Prompt Field | HIGH | Claude Hooks | No | +| [CC-HK-008](./generated/cc-hk-008.md) | Script File Not Found | HIGH | Claude Hooks | No | +| [CC-HK-009](./generated/cc-hk-009.md) | Dangerous Command Pattern | HIGH | Claude Hooks | No | +| [CC-HK-010](./generated/cc-hk-010.md) | Timeout Policy | MEDIUM | Claude Hooks | Yes (safe) | +| [CC-HK-011](./generated/cc-hk-011.md) | Invalid Timeout Value | HIGH | Claude Hooks | Yes (unsafe) | +| [CC-HK-012](./generated/cc-hk-012.md) | Hooks Parse Error | HIGH | Claude Hooks | No | +| [CC-HK-013](./generated/cc-hk-013.md) | Async on Non-Command Hook | HIGH | Claude Hooks | Yes (safe) | +| [CC-HK-014](./generated/cc-hk-014.md) | Once Outside Skill/Agent Frontmatter | MEDIUM | Claude Hooks | Yes (safe) | +| [CC-HK-015](./generated/cc-hk-015.md) | Model on Command Hook | MEDIUM | Claude Hooks | Yes (safe) | +| [CC-HK-016](./generated/cc-hk-016.md) | Validate Hook Type Agent | HIGH | Claude Hooks | Yes (unsafe) | +| [CC-HK-017](./generated/cc-hk-017.md) | Prompt/Agent Hook Missing $ARGUMENTS | MEDIUM | Claude Hooks | Yes (safe) | +| [CC-HK-018](./generated/cc-hk-018.md) | Matcher on Ignored Event | LOW | Claude Hooks | Yes (safe) | +| [CC-HK-020](./generated/cc-hk-020.md) | HTTP Hook Missing URL | HIGH | Claude Hooks | No | +| [CC-HK-021](./generated/cc-hk-021.md) | Invalid If Field | MEDIUM | Claude Hooks | No | +| [CC-HK-022](./generated/cc-hk-022.md) | Invalid Shell Value | MEDIUM | Claude Hooks | Yes (unsafe) | +| [CC-HK-023](./generated/cc-hk-023.md) | Once Field Not Boolean | LOW | Claude Hooks | Yes (unsafe) | +| [CC-HK-024](./generated/cc-hk-024.md) | Headers Missing AllowedEnvVars | MEDIUM | Claude Hooks | Yes (safe) | +| [CC-HK-025](./generated/cc-hk-025.md) | Invalid Matcher Value | LOW | Claude Hooks | Yes (unsafe) | +| [CC-HK-026](./generated/cc-hk-026.md) | MCP Tool Hook Missing Server | HIGH | Claude Hooks | No | +| [CC-HK-027](./generated/cc-hk-027.md) | MCP Tool Hook Missing Tool | HIGH | Claude Hooks | No | +| [CC-HK-028](./generated/cc-hk-028.md) | Rejected user_config Interpolation in Shell-Form Command | HIGH | Claude Hooks | No | +| [CC-MEM-001](./generated/cc-mem-001.md) | Invalid Import Path | HIGH | Claude Memory | No | +| [CC-MEM-002](./generated/cc-mem-002.md) | Circular Import | HIGH | Claude Memory | No | +| [CC-MEM-003](./generated/cc-mem-003.md) | Import Depth Exceeds 4 | HIGH | Claude Memory | No | +| [CC-MEM-004](./generated/cc-mem-004.md) | Invalid Command Reference | MEDIUM | Claude Memory | No | +| [CC-MEM-005](./generated/cc-mem-005.md) | Generic Instruction | HIGH | Claude Memory | Yes (safe) | +| [CC-MEM-006](./generated/cc-mem-006.md) | Negative Without Positive | HIGH | Claude Memory | No | +| [CC-MEM-007](./generated/cc-mem-007.md) | Weak Constraint Language | HIGH | Claude Memory | Yes (safe/unsafe) | +| [CC-MEM-008](./generated/cc-mem-008.md) | Critical Content in Middle | HIGH | Claude Memory | No | +| [CC-MEM-009](./generated/cc-mem-009.md) | Token Count Exceeded | MEDIUM | Claude Memory | No | +| [CC-MEM-010](./generated/cc-mem-010.md) | README Duplication | MEDIUM | Claude Memory | No | +| [CC-MEM-011](./generated/cc-mem-011.md) | Invalid Paths Glob in Rules | HIGH | Claude Memory | No | +| [CC-MEM-012](./generated/cc-mem-012.md) | Rules File Unknown Frontmatter Key | MEDIUM | Claude Memory | Yes (unsafe) | +| [CC-OS-001](./generated/cc-os-001.md) | Output Style Missing Description | LOW | claude-output-styles | No | +| [CC-OS-002](./generated/cc-os-002.md) | Output Style Invalid keep-coding-instructions Type | HIGH | claude-output-styles | No | +| [CC-OS-003](./generated/cc-os-003.md) | Output Style Unknown Frontmatter Key | MEDIUM | claude-output-styles | No | +| [CC-OS-004](./generated/cc-os-004.md) | Output Style Empty Body | MEDIUM | claude-output-styles | No | +| [CC-OS-005](./generated/cc-os-005.md) | Output Style Name Exceeds Length | LOW | claude-output-styles | No | +| [CC-OS-006](./generated/cc-os-006.md) | Invalid Output Style Frontmatter Syntax | HIGH | claude-output-styles | No | +| [CC-MEM-014](./generated/cc-mem-014.md) | CLAUDE.md Exceeds Line Limit | MEDIUM | Claude Memory | No | +| [CC-PL-001](./generated/cc-pl-001.md) | Plugin Manifest Not in .claude-plugin/ | HIGH | Claude Plugins | No | +| [CC-PL-002](./generated/cc-pl-002.md) | Components in .claude-plugin/ | HIGH | Claude Plugins | No | +| [CC-PL-003](./generated/cc-pl-003.md) | Invalid Semver | HIGH | Claude Plugins | Yes (safe) | +| [CC-PL-004](./generated/cc-pl-004.md) | Missing Required/Recommended Plugin Field | HIGH | Claude Plugins | No | +| [CC-PL-005](./generated/cc-pl-005.md) | Empty Plugin Name | HIGH | Claude Plugins | Yes (unsafe) | +| [CC-PL-006](./generated/cc-pl-006.md) | Plugin Parse Error | HIGH | Claude Plugins | No | +| [CC-PL-007](./generated/cc-pl-007.md) | Invalid Component Path | HIGH | Claude Plugins | Yes (safe) | +| [CC-PL-008](./generated/cc-pl-008.md) | Component Inside .claude-plugin | HIGH | Claude Plugins | No | +| [CC-PL-009](./generated/cc-pl-009.md) | Invalid Author Object | MEDIUM | Claude Plugins | No | +| [CC-PL-010](./generated/cc-pl-010.md) | Invalid Homepage URL | MEDIUM | Claude Plugins | No | +| [CC-PL-011](./generated/cc-pl-011.md) | LSP Server Missing Required Fields | HIGH | Claude Plugins | No | +| [CC-PL-012](./generated/cc-pl-012.md) | Invalid UserConfig Key | MEDIUM | Claude Plugins | No | +| [CC-PL-013](./generated/cc-pl-013.md) | Channel Missing Server Reference | MEDIUM | Claude Plugins | No | +| [CC-PL-014](./generated/cc-pl-014.md) | Plugin Agent Unsupported Field | MEDIUM | Claude Plugins | Yes (safe) | +| [CC-PL-015](./generated/cc-pl-015.md) | Default Component Folder Shadowed by Manifest | MEDIUM | Claude Plugins | No | +| [CC-SK-001](./generated/cc-sk-001.md) | Invalid Model Value | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-002](./generated/cc-sk-002.md) | Invalid Context Value | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-004](./generated/cc-sk-004.md) | Agent Without Context | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-005](./generated/cc-sk-005.md) | Invalid Agent Type | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-006](./generated/cc-sk-006.md) | Dangerous Auto-Invocation | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-007](./generated/cc-sk-007.md) | Unrestricted Bash | MEDIUM | Claude Skills | Yes (unsafe) | +| [CC-SK-008](./generated/cc-sk-008.md) | Unknown Tool Name | HIGH | Claude Skills | No | +| [CC-SK-009](./generated/cc-sk-009.md) | Too Many Injections | MEDIUM | Claude Skills | No | +| [CC-SK-010](./generated/cc-sk-010.md) | Invalid Hooks in Skill Frontmatter | HIGH | Claude Skills | No | +| [CC-SK-011](./generated/cc-sk-011.md) | Unreachable Skill | HIGH | Claude Skills | Yes (unsafe) | +| [CC-SK-012](./generated/cc-sk-012.md) | Argument Hint Without $ARGUMENTS | MEDIUM | Claude Skills | Yes (unsafe) | +| [CC-SK-013](./generated/cc-sk-013.md) | Fork Context Without Actionable Instructions | MEDIUM | Claude Skills | No | +| [CC-SK-014](./generated/cc-sk-014.md) | Invalid disable-model-invocation Type | HIGH | Claude Skills | No | +| [CC-SK-015](./generated/cc-sk-015.md) | Invalid user-invocable Type | HIGH | Claude Skills | No | +| [CC-SK-016](./generated/cc-sk-016.md) | Indexed $ARGUMENTS Without argument-hint | MEDIUM | Claude Skills | No | +| [CC-SK-017](./generated/cc-sk-017.md) | Unknown Frontmatter Field | MEDIUM | Claude Skills | No | +| [CC-SK-018](./generated/cc-sk-018.md) | Invalid Effort Value | MEDIUM | Claude Skills | Yes (unsafe) | +| [CC-SK-019](./generated/cc-sk-019.md) | Invalid Paths Format | LOW | Claude Skills | No | +| [CC-SK-020](./generated/cc-sk-020.md) | Invalid Shell Value | MEDIUM | Claude Skills | Yes (unsafe) | +| [CC-SK-021](./generated/cc-sk-021.md) | Hardcoded User Directory Path | MEDIUM | Claude Skills | No | +| [CC-SET-001](./generated/cc-set-001.md) | Invalid prUrlTemplate Setting | MEDIUM | Claude Settings | No | +| [CC-SET-002](./generated/cc-set-002.md) | Non-boolean channelsEnabled Setting | MEDIUM | Claude Settings | No | +| [CC-SET-003](./generated/cc-set-003.md) | Invalid worktree.baseRef Value | MEDIUM | Claude Settings | No | +| [CC-SET-004](./generated/cc-set-004.md) | Invalid Sandbox Path Setting | MEDIUM | Claude Settings | No | +| [CC-SET-005](./generated/cc-set-005.md) | Invalid parentSettingsBehavior Value | MEDIUM | Claude Settings | No | +| [CC-SET-006](./generated/cc-set-006.md) | Non-boolean disableBundledSkills Setting | MEDIUM | Claude Settings | No | +| [CC-SET-007](./generated/cc-set-007.md) | Non-boolean enforceAvailableModels Setting | MEDIUM | Claude Settings | No | +| [CC-SET-008](./generated/cc-set-008.md) | Non-boolean sandbox.allowAppleEvents Setting | MEDIUM | Claude Settings | No | +| [CC-SET-009](./generated/cc-set-009.md) | Non-boolean attribution.sessionUrl Setting | MEDIUM | Claude Settings | No | +| [CC-SET-010](./generated/cc-set-010.md) | Invalid teammateMode Setting | MEDIUM | Claude Settings | No | +| [CC-SET-011](./generated/cc-set-011.md) | Non-boolean respondToBashCommands Setting | MEDIUM | Claude Settings | No | +| [CC-SET-012](./generated/cc-set-012.md) | Invalid sandbox.credentials Setting | MEDIUM | Claude Settings | No | +| [CC-SET-013](./generated/cc-set-013.md) | Non-boolean autoMode.classifyAllShell Setting | MEDIUM | Claude Settings | No | +| [CC-SET-014](./generated/cc-set-014.md) | autoMode Setting Ignored in settings.local.json | MEDIUM | Claude Settings | No | +| [CC-SET-015](./generated/cc-set-015.md) | Dead pluginConfigs in Project-Level Settings | MEDIUM | Claude Settings | No | +| [CC-SET-016](./generated/cc-set-016.md) | Deprecated Tool-Scoped Permission Rule Form | LOW | Claude Settings | No | +| [CC-SET-017](./generated/cc-set-017.md) | Non-boolean sandbox.filesystem.disabled Setting | MEDIUM | Claude Settings | No | +| [CC-SET-018](./generated/cc-set-018.md) | Non-boolean emojiCompletionEnabled Setting | MEDIUM | Claude Settings | No | +| [CC-SET-019](./generated/cc-set-019.md) | Non-boolean sandbox.network.strictAllowlist Setting | MEDIUM | Claude Settings | No | +| [CC-SET-020](./generated/cc-set-020.md) | Invalid workflowSizeGuideline Setting | MEDIUM | Claude Settings | No | +| [CC-SET-021](./generated/cc-set-021.md) | Ineffective Project Remote Control Auto-start | MEDIUM | Claude Settings | No | +| [CC-SET-022](./generated/cc-set-022.md) | Invalid crossSessionInbound Setting | MEDIUM | Claude Settings | No | +| [CC-SET-023](./generated/cc-set-023.md) | Invalid dialogExpiry Setting | MEDIUM | Claude Settings | No | +| [CDX-000](./generated/cdx-000.md) | TOML Parse Error | HIGH | Codex CLI | No | +| [CDX-001](./generated/cdx-001.md) | Invalid Approval Mode | HIGH | Codex CLI | Yes (unsafe) | +| [CDX-002](./generated/cdx-002.md) | Invalid Full Auto Error Mode | HIGH | Codex CLI | Yes (unsafe) | +| [CDX-003](./generated/cdx-003.md) | AGENTS.override.md in Version Control | MEDIUM | Codex CLI | No | +| [CDX-004](./generated/cdx-004.md) | Unknown Config Key | MEDIUM | Codex CLI | Yes (safe) | +| [CDX-005](./generated/cdx-005.md) | project_doc_max_bytes Exceeds Limit | HIGH | Codex CLI | No | +| [CDX-006](./generated/cdx-006.md) | Invalid project_doc_fallback_filenames | HIGH | Codex CLI | No | +| [CDX-CFG-001](./generated/cdx-cfg-001.md) | Invalid approval_policy Value | HIGH | Codex CLI | No | +| [CDX-CFG-002](./generated/cdx-cfg-002.md) | Invalid sandbox_mode Value | HIGH | Codex CLI | No | +| [CDX-CFG-003](./generated/cdx-cfg-003.md) | Invalid model_reasoning_effort Value | HIGH | Codex CLI | No | +| [CDX-CFG-004](./generated/cdx-cfg-004.md) | Invalid model_verbosity Value | HIGH | Codex CLI | No | +| [CDX-CFG-005](./generated/cdx-cfg-005.md) | Invalid personality Value | HIGH | Codex CLI | No | +| [CDX-CFG-006](./generated/cdx-cfg-006.md) | Unknown Codex Config Field | MEDIUM | Codex CLI | No | +| [CDX-CFG-007](./generated/cdx-cfg-007.md) | Danger Full Access Without Acknowledgment | HIGH | Codex CLI | No | +| [CDX-CFG-008](./generated/cdx-cfg-008.md) | Invalid shell_environment_policy Value | HIGH | Codex CLI | No | +| [CDX-CFG-009](./generated/cdx-cfg-009.md) | Invalid MCP Server Structure in Codex Config | HIGH | Codex CLI | No | +| [CDX-CFG-010](./generated/cdx-cfg-010.md) | Hardcoded Secret in Codex Config | HIGH | Codex CLI | No | +| [CDX-CFG-011](./generated/cdx-cfg-011.md) | Invalid Feature Flag Name or Shape | MEDIUM | Codex CLI | No | +| [CDX-CFG-012](./generated/cdx-cfg-012.md) | Invalid cli_auth_credentials_store Value | HIGH | Codex CLI | No | +| [CDX-CFG-013](./generated/cdx-cfg-013.md) | Invalid sandbox_workspace_write Mode | HIGH | Codex CLI | No | +| [CDX-CFG-014](./generated/cdx-cfg-014.md) | Invalid model Value | MEDIUM | Codex CLI | No | +| [CDX-CFG-015](./generated/cdx-cfg-015.md) | Invalid model_provider Value | HIGH | Codex CLI | No | +| [CDX-CFG-016](./generated/cdx-cfg-016.md) | Invalid model_reasoning_summary Value | MEDIUM | Codex CLI | No | +| [CDX-CFG-017](./generated/cdx-cfg-017.md) | Invalid history Configuration | MEDIUM | Codex CLI | No | +| [CDX-CFG-018](./generated/cdx-cfg-018.md) | Invalid tui Configuration | MEDIUM | Codex CLI | No | +| [CDX-CFG-019](./generated/cdx-cfg-019.md) | Invalid file_opener Value | MEDIUM | Codex CLI | No | +| [CDX-CFG-020](./generated/cdx-cfg-020.md) | Invalid MCP OAuth Config | HIGH | Codex CLI | No | +| [CDX-CFG-021](./generated/cdx-cfg-021.md) | Invalid model_context_window Value | MEDIUM | Codex CLI | No | +| [CDX-CFG-022](./generated/cdx-cfg-022.md) | Invalid model_auto_compact_token_limit Value | MEDIUM | Codex CLI | No | +| [CDX-AG-001](./generated/cdx-ag-001.md) | Empty AGENTS.md for Codex | HIGH | Codex CLI | No | +| [CDX-AG-002](./generated/cdx-ag-002.md) | Secrets in AGENTS.md for Codex | HIGH | Codex CLI | No | +| [CDX-AG-003](./generated/cdx-ag-003.md) | Generic AGENTS.md Guidance for Codex | MEDIUM | Codex CLI | No | +| [CDX-AG-004](./generated/cdx-ag-004.md) | AGENTS.md Exceeds Size Limit | MEDIUM | Codex CLI | No | +| [CDX-AG-005](./generated/cdx-ag-005.md) | AGENTS.md References Missing File | MEDIUM | Codex CLI | No | +| [CDX-AG-006](./generated/cdx-ag-006.md) | AGENTS.md Missing Project Context | LOW | Codex CLI | No | +| [CDX-AG-007](./generated/cdx-ag-007.md) | AGENTS.md Contradicts config.toml | MEDIUM | Codex CLI | No | +| [CDX-APP-001](./generated/cdx-app-001.md) | Invalid default_tools_approval_mode Value | HIGH | Codex CLI | No | +| [CDX-APP-002](./generated/cdx-app-002.md) | Invalid skills Configuration | MEDIUM | Codex CLI | No | +| [CDX-APP-003](./generated/cdx-app-003.md) | Invalid profile Configuration | MEDIUM | Codex CLI | No | +| [CDX-PL-001](./generated/cdx-pl-001.md) | Codex Plugin Manifest Location or Agent Plugins Schema | HIGH | Codex CLI | No | +| [CDX-PL-002](./generated/cdx-pl-002.md) | Invalid Plugin Manifest | HIGH | Codex CLI | No | +| [CDX-PL-003](./generated/cdx-pl-003.md) | Missing or Empty Plugin Name | HIGH | Codex CLI | Yes (unsafe) | +| [CDX-PL-004](./generated/cdx-pl-004.md) | Invalid Plugin Name Characters | HIGH | Codex CLI | No | +| [CDX-PL-005](./generated/cdx-pl-005.md) | Component Path Missing ./ Prefix | HIGH | Codex CLI | Yes (safe) | +| [CDX-PL-006](./generated/cdx-pl-006.md) | Component Path Directory Traversal | HIGH | Codex CLI | No | +| [CDX-PL-007](./generated/cdx-pl-007.md) | Component Path Empty Relative | HIGH | Codex CLI | No | +| [CDX-PL-008](./generated/cdx-pl-008.md) | Too Many Default Prompts | MEDIUM | Codex CLI | No | +| [CDX-PL-009](./generated/cdx-pl-009.md) | Default Prompt Too Long | MEDIUM | Codex CLI | No | +| [CDX-PL-010](./generated/cdx-pl-010.md) | Empty Default Prompt Entry | MEDIUM | Codex CLI | No | +| [CDX-PL-011](./generated/cdx-pl-011.md) | Invalid Interface URL | MEDIUM | Codex CLI | No | +| [CDX-PL-012](./generated/cdx-pl-012.md) | Invalid Asset Path | MEDIUM | Codex CLI | No | +| [CDX-PL-013](./generated/cdx-pl-013.md) | Invalid Hooks Value | LOW | Codex CLI | No | +| [CDX-PL-014](./generated/cdx-pl-014.md) | Missing Description | LOW | Codex CLI | No | +| [CDX-PL-015](./generated/cdx-pl-015.md) | Invalid Skills Path Type | MEDIUM | Codex CLI | No | +| [CDX-PL-016](./generated/cdx-pl-016.md) | Invalid Dark-mode Logo Path | MEDIUM | Codex CLI | No | +| [CDX-CFG-023](./generated/cdx-cfg-023.md) | Invalid Approval Policy Sub-field | MEDIUM | Codex CLI | Yes (safe) | +| [CDX-CFG-024](./generated/cdx-cfg-024.md) | Invalid Approvals Reviewer Value | MEDIUM | Codex CLI | Yes (unsafe) | +| [CDX-CFG-025](./generated/cdx-cfg-025.md) | Invalid Service Tier Value | MEDIUM | Codex CLI | Yes (unsafe) | +| [CDX-CFG-026](./generated/cdx-cfg-026.md) | Invalid Network Permission Field | LOW | Codex CLI | Yes (safe) | +| [CDX-CFG-027](./generated/cdx-cfg-027.md) | Invalid Windows Sandbox Value | LOW | Codex CLI | Yes (unsafe) | +| [CDX-CFG-028](./generated/cdx-cfg-028.md) | Unsupported Inline MCP bearer_token Field | HIGH | Codex CLI | No | +| [CDX-CFG-029](./generated/cdx-cfg-029.md) | Invalid Agent Concurrency Limit | HIGH | Codex CLI | No | +| [CDX-CFG-030](./generated/cdx-cfg-030.md) | Invalid web_search Mode | MEDIUM | Codex CLI | No | +| [CDX-REQ-000](./generated/cdx-req-000.md) | Codex requirements.toml TOML Parse Error | HIGH | Codex CLI | No | +| [CDX-REQ-001](./generated/cdx-req-001.md) | Unknown Codex requirements.toml Key | MEDIUM | Codex CLI | No | +| [CL-SK-001](./generated/cl-sk-001.md) | Cline Skill Uses Unsupported Field | MEDIUM | Cline Skills | Yes (safe/unsafe) | +| [CL-SK-002](./generated/cl-sk-002.md) | Missing Skill Name | HIGH | Cline Skills | Yes (safe) | +| [CL-SK-003](./generated/cl-sk-003.md) | Missing Skill Description | HIGH | Cline Skills | No | +| [CLN-001](./generated/cln-001.md) | Empty Cline Rules File | HIGH | Cline | No | +| [CLN-002](./generated/cln-002.md) | Invalid Paths Glob in Cline Rules | HIGH | Cline | No | +| [CLN-003](./generated/cln-003.md) | Unknown Frontmatter Key in Cline Rules | MEDIUM | Cline | Yes (unsafe) | +| [CLN-004](./generated/cln-004.md) | Scalar Paths in Cline Rules | HIGH | Cline | Yes (safe) | +| [CLN-005](./generated/cln-005.md) | Empty Workflow File | HIGH | Cline | No | +| [CLN-006](./generated/cln-006.md) | Workflow With Frontmatter | MEDIUM | Cline | Yes (unsafe) | +| [CLN-009](./generated/cln-009.md) | Unknown Hook Event Name | MEDIUM | Cline | No | +| [COP-001](./generated/cop-001.md) | Empty Copilot Instruction File | HIGH | GitHub Copilot | No | +| [COP-002](./generated/cop-002.md) | Invalid Frontmatter in Scoped Instructions | HIGH | GitHub Copilot | Yes (unsafe) | +| [COP-003](./generated/cop-003.md) | Invalid Glob Pattern in applyTo | HIGH | GitHub Copilot | No | +| [COP-004](./generated/cop-004.md) | Unknown Frontmatter Keys | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-005](./generated/cop-005.md) | Invalid excludeAgent Value | HIGH | GitHub Copilot | Yes (unsafe) | +| [COP-006](./generated/cop-006.md) | File Length Limit | MEDIUM | GitHub Copilot | No | +| [COP-007](./generated/cop-007.md) | Custom Agent Missing Description | HIGH | GitHub Copilot | No | +| [COP-008](./generated/cop-008.md) | Custom Agent Unknown or Invalid Frontmatter Field | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-009](./generated/cop-009.md) | Custom Agent Invalid Target | HIGH | GitHub Copilot | Yes (unsafe) | +| [COP-010](./generated/cop-010.md) | Custom Agent infer Field Must Be Boolean | MEDIUM | GitHub Copilot | No | +| [COP-011](./generated/cop-011.md) | Custom Agent Prompt Body Exceeds Length Limit | HIGH | GitHub Copilot | No | +| [COP-012](./generated/cop-012.md) | Custom Agent Uses GitHub.com Unsupported Fields | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-013](./generated/cop-013.md) | Prompt File Empty Body | HIGH | GitHub Copilot | No | +| [COP-014](./generated/cop-014.md) | Prompt File Unknown Frontmatter Field | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-015](./generated/cop-015.md) | Prompt File Invalid Agent Mode | HIGH | GitHub Copilot | Yes (safe) | +| [COP-017](./generated/cop-017.md) | Copilot Hooks Schema Validation | HIGH | GitHub Copilot | No | +| [COP-018](./generated/cop-018.md) | Invalid copilot-setup-steps Job | HIGH | GitHub Copilot | No | +| [COP-019](./generated/cop-019.md) | Plugin Missing Required Fields | HIGH | GitHub Copilot | No | +| [COP-020](./generated/cop-020.md) | Plugin Invalid Field Types | MEDIUM | GitHub Copilot | No | +| [COP-022](./generated/cop-022.md) | CLI Skill Missing Frontmatter | HIGH | GitHub Copilot | No | +| [COP-023](./generated/cop-023.md) | CLI Skill Name Format | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-024](./generated/cop-024.md) | CLI Skill Unknown Field | MEDIUM | GitHub Copilot | Yes (safe) | +| [COP-025](./generated/cop-025.md) | Agent File Wrong Location | LOW | GitHub Copilot | No | +| [COP-026](./generated/cop-026.md) | Deprecated SSE Transport | LOW | GitHub Copilot | Yes (unsafe) | +| [COP-027](./generated/cop-027.md) | Deprecated Infer Field | LOW | GitHub Copilot | No | +| [CP-SK-001](./generated/cp-sk-001.md) | Copilot Skill Uses Unsupported Field | MEDIUM | Copilot Skills | Yes (safe/unsafe) | +| [CR-SK-001](./generated/cr-sk-001.md) | Cursor Skill Uses Unsupported Field | MEDIUM | Cursor Skills | Yes (safe/unsafe) | +| [CUR-001](./generated/cur-001.md) | Empty Cursor Rule File | HIGH | Cursor | No | +| [CUR-002](./generated/cur-002.md) | Missing Frontmatter in .mdc File | MEDIUM | Cursor | Yes (unsafe) | +| [CUR-003](./generated/cur-003.md) | Invalid YAML Frontmatter | HIGH | Cursor | No | +| [CUR-004](./generated/cur-004.md) | Invalid Glob Pattern in globs Field | HIGH | Cursor | No | +| [CUR-005](./generated/cur-005.md) | Unknown Frontmatter Keys | MEDIUM | Cursor | Yes (safe) | +| [CUR-006](./generated/cur-006.md) | Legacy .cursorrules File Detected | MEDIUM | Cursor | No | +| [CUR-007](./generated/cur-007.md) | alwaysApply with Redundant globs | MEDIUM | Cursor | Yes (safe) | +| [CUR-008](./generated/cur-008.md) | Invalid alwaysApply Type | HIGH | Cursor | Yes (safe) | +| [CUR-009](./generated/cur-009.md) | Missing Description for Agent-Requested Rule | MEDIUM | Cursor | No | +| [CUR-010](./generated/cur-010.md) | Invalid Cursor Hooks Schema | HIGH | Cursor | No | +| [CUR-011](./generated/cur-011.md) | Unknown Cursor Hook Event Name | MEDIUM | Cursor | Yes (safe) | +| [CUR-012](./generated/cur-012.md) | Hook Entry Missing Required Command Field | HIGH | Cursor | No | +| [CUR-013](./generated/cur-013.md) | Invalid Cursor Hook Type Value | HIGH | Cursor | Yes (safe) | +| [CUR-014](./generated/cur-014.md) | Invalid Cursor Subagent Frontmatter | HIGH | Cursor | No | +| [CUR-015](./generated/cur-015.md) | Empty Cursor Subagent Body | MEDIUM | Cursor | No | +| [CUR-016](./generated/cur-016.md) | Invalid Cursor Environment Schema | HIGH | Cursor | No | +| [CUR-017](./generated/cur-017.md) | Invalid Hook Entry Field Types | MEDIUM | Cursor | No | +| [CUR-018](./generated/cur-018.md) | Invalid or Missing Prompt Hook Field | MEDIUM | Cursor | No | +| [CUR-019](./generated/cur-019.md) | Invalid Prompt Hook Model Type | LOW | Cursor | No | +| [CUR-020](./generated/cur-020.md) | Ignored Plain Markdown Cursor Rule | HIGH | Cursor | No | +| [CX-SK-001](./generated/cx-sk-001.md) | Codex Skill Uses Unsupported Field | MEDIUM | Codex Skills | Yes (safe/unsafe) | +| [GM-001](./generated/gm-001.md) | Invalid Markdown Structure in GEMINI.md | HIGH | Gemini CLI | Yes (safe) | +| [GM-002](./generated/gm-002.md) | Missing Section Headers in GEMINI.md | MEDIUM | Gemini CLI | No | +| [GM-003](./generated/gm-003.md) | Missing Project Context in GEMINI.md | MEDIUM | Gemini CLI | No | +| [GM-004](./generated/gm-004.md) | Invalid Hooks Configuration in Gemini Settings | MEDIUM | Gemini CLI | No | +| [GM-005](./generated/gm-005.md) | Invalid Extension Manifest | HIGH | Gemini CLI | No | +| [GM-006](./generated/gm-006.md) | Invalid .geminiignore File | LOW | Gemini CLI | No | +| [GM-007](./generated/gm-007.md) | @import File Not Found in GEMINI.md | MEDIUM | Gemini CLI | No | +| [GM-008](./generated/gm-008.md) | Invalid Context File Name Configuration | LOW | Gemini CLI | Yes (safe) | +| [GM-009](./generated/gm-009.md) | Settings.json Parse Error | HIGH | Gemini CLI | Yes (safe) | +| [GM-010](./generated/gm-010.md) | memoryManager Without autoMemory After v0.40 Split | MEDIUM | Gemini CLI | No | +| [GM-AG-001](./generated/gm-ag-001.md) | Invalid auth block in Gemini agent MCP server | HIGH | Gemini Agents | No | +| [KIRO-001](./generated/kiro-001.md) | Invalid Steering File Inclusion Mode | HIGH | Kiro Steering | Yes (safe) | +| [KIRO-002](./generated/kiro-002.md) | Missing Required Fields for Inclusion Mode | HIGH | Kiro Steering | No | +| [KIRO-003](./generated/kiro-003.md) | Invalid fileMatchPattern Glob | MEDIUM | Kiro Steering | No | +| [KIRO-004](./generated/kiro-004.md) | Empty Kiro Steering File | MEDIUM | Kiro Steering | No | +| [KIRO-005](./generated/kiro-005.md) | Empty Steering Body After Frontmatter | MEDIUM | Kiro Steering | No | +| [KIRO-006](./generated/kiro-006.md) | Secrets Detected in Steering File | HIGH | Kiro Steering | No | +| [KIRO-007](./generated/kiro-007.md) | fileMatchPattern Without fileMatch Inclusion | MEDIUM | Kiro Steering | No | +| [KIRO-008](./generated/kiro-008.md) | Unknown Kiro Steering Frontmatter Field | MEDIUM | Kiro Steering | No | +| [KIRO-009](./generated/kiro-009.md) | Broken Inline File Reference in Steering | MEDIUM | Kiro Steering | No | +| [KIRO-010](./generated/kiro-010.md) | Missing Inclusion Mode | MEDIUM | Kiro Steering | No | +| [KIRO-011](./generated/kiro-011.md) | Steering Doc Excessively Long | LOW | Kiro Steering | No | +| [KIRO-012](./generated/kiro-012.md) | Duplicate Steering Name | MEDIUM | Kiro Steering | No | +| [KIRO-013](./generated/kiro-013.md) | Conflicting Inclusion Modes | MEDIUM | Kiro Steering | No | +| [KIRO-014](./generated/kiro-014.md) | Markdown Structure Issues | LOW | Kiro Steering | No | +| [KR-SK-001](./generated/kr-sk-001.md) | Kiro Skill Uses Unsupported Field | MEDIUM | Kiro Skills | Yes (safe/unsafe) | +| [KR-AG-001](./generated/kr-ag-001.md) | Unknown Field in Kiro Agent JSON | MEDIUM | Kiro Agents | No | +| [KR-AG-002](./generated/kr-ag-002.md) | Invalid Kiro Agent Resource Protocol | HIGH | Kiro Agents | No | +| [KR-AG-003](./generated/kr-ag-003.md) | allowedTools Not Subset of tools | MEDIUM | Kiro Agents | No | +| [KR-AG-004](./generated/kr-ag-004.md) | Invalid Kiro Agent Model Value | MEDIUM | Kiro Agents | No | +| [KR-AG-005](./generated/kr-ag-005.md) | Kiro Agent Has No MCP Access | LOW | Kiro Agents | No | +| [KR-AG-006](./generated/kr-ag-006.md) | Kiro Agent References Unknown Subagent | MEDIUM | Kiro Agents | No | +| [KR-AG-007](./generated/kr-ag-007.md) | Kiro Agent Tool Scope Broader Than Referenced Subagent | MEDIUM | Kiro Agents | No | +| [KR-AG-008](./generated/kr-ag-008.md) | Empty Explicit Agent Name | HIGH | Kiro Agents | No | +| [KR-AG-009](./generated/kr-ag-009.md) | Agent Missing Prompt | HIGH | Kiro Agents | No | +| [KR-AG-010](./generated/kr-ag-010.md) | Duplicate Tool Entries | MEDIUM | Kiro Agents | No | +| [KR-AG-011](./generated/kr-ag-011.md) | Empty Tools Array | LOW | Kiro Agents | No | +| [KR-AG-012](./generated/kr-ag-012.md) | toolAliases References Unknown Tool | MEDIUM | Kiro Agents | No | +| [KR-AG-013](./generated/kr-ag-013.md) | Secrets in Agent Prompt | HIGH | Kiro Agents | No | +| [KR-AG-014](./generated/kr-ag-014.md) | Invalid Universal Permissions Rule | HIGH | Kiro Agents | No | +| [KR-HK-001](./generated/kr-hk-001.md) | Invalid Kiro IDE Hook Event Type | HIGH | Kiro Hooks | No | +| [KR-HK-002](./generated/kr-hk-002.md) | Kiro File Hook Missing Patterns | HIGH | Kiro Hooks | No | +| [KR-HK-003](./generated/kr-hk-003.md) | Kiro IDE Hook Missing Action | HIGH | Kiro Hooks | No | +| [KR-HK-004](./generated/kr-hk-004.md) | Kiro Tool Hook Missing toolTypes Filter | MEDIUM | Kiro Hooks | No | +| [KR-HK-005](./generated/kr-hk-005.md) | Invalid Kiro CLI Hook Event Key | HIGH | Kiro Hooks | No | +| [KR-HK-006](./generated/kr-hk-006.md) | Kiro CLI Hook Missing Command | HIGH | Kiro Hooks | No | +| [KR-HK-007](./generated/kr-hk-007.md) | Hook Timeout Out of Range | MEDIUM | Kiro Hooks | No | +| [KR-HK-008](./generated/kr-hk-008.md) | Duplicate Event Handlers | MEDIUM | Kiro Hooks | No | +| [KR-HK-009](./generated/kr-hk-009.md) | Command Uses Absolute Path | MEDIUM | Kiro Hooks | No | +| [KR-HK-010](./generated/kr-hk-010.md) | Secrets in Hook Command | HIGH | Kiro Hooks | No | +| [KR-MCP-001](./generated/kr-mcp-001.md) | Kiro MCP Server Missing command and url | HIGH | Kiro MCP | No | +| [KR-MCP-002](./generated/kr-mcp-002.md) | Hardcoded Secrets in Kiro MCP env | MEDIUM | Kiro MCP | No | +| [KR-MCP-003](./generated/kr-mcp-003.md) | Missing Required Args | MEDIUM | Kiro MCP | No | +| [KR-MCP-004](./generated/kr-mcp-004.md) | Invalid MCP URL | HIGH | Kiro MCP | No | +| [KR-MCP-005](./generated/kr-mcp-005.md) | Duplicate MCP Server Names | MEDIUM | Kiro MCP | No | +| [KR-MCP-006](./generated/kr-mcp-006.md) | Invalid OAuth Configuration | MEDIUM | Kiro MCP | No | +| [KR-PW-001](./generated/kr-pw-001.md) | Missing Required POWER.md Frontmatter Fields | HIGH | Kiro Powers | No | +| [KR-PW-002](./generated/kr-pw-002.md) | Empty POWER.md Keywords Array | MEDIUM | Kiro Powers | No | +| [KR-PW-003](./generated/kr-pw-003.md) | Empty POWER.md Body | MEDIUM | Kiro Powers | No | +| [KR-PW-004](./generated/kr-pw-004.md) | Invalid Adjacent Power mcp.json Structure | MEDIUM | Kiro Powers | No | +| [KR-PW-005](./generated/kr-pw-005.md) | Step Missing Description | HIGH | Kiro Powers | No | +| [KR-PW-006](./generated/kr-pw-006.md) | Duplicate Keywords | LOW | Kiro Powers | No | +| [KR-PW-007](./generated/kr-pw-007.md) | Name Invalid Characters | MEDIUM | Kiro Powers | No | +| [KR-PW-008](./generated/kr-pw-008.md) | Secrets in Power Body | HIGH | Kiro Powers | No | +| [KR-SET-001](./generated/kr-set-001.md) | Invalid toolSearch.enabled Value | HIGH | Kiro Settings | Yes (safe) | +| [KR-SET-002](./generated/kr-set-002.md) | Invalid toolSearch.minPct Value | MEDIUM | Kiro Settings | Yes (safe) | +| [KR-SET-003](./generated/kr-set-003.md) | Invalid toolSearch.minTokens Value | MEDIUM | Kiro Settings | Yes (safe) | +| [MCP-001](./generated/mcp-001.md) | Invalid JSON-RPC Version | HIGH | MCP | Yes (safe) | +| [MCP-002](./generated/mcp-002.md) | Missing Required Tool Field | HIGH | MCP | No | +| [MCP-003](./generated/mcp-003.md) | Invalid JSON Schema | HIGH | MCP | No | +| [MCP-004](./generated/mcp-004.md) | Missing Tool Description | HIGH | MCP | No | +| [MCP-005](./generated/mcp-005.md) | Tool Without User Consent | HIGH | MCP | No | +| [MCP-006](./generated/mcp-006.md) | Untrusted Annotations | HIGH | MCP | No | +| [MCP-007](./generated/mcp-007.md) | MCP Parse Error | HIGH | MCP | No | +| [MCP-008](./generated/mcp-008.md) | Protocol Version Mismatch | MEDIUM | MCP | Yes (unsafe) | +| [MCP-009](./generated/mcp-009.md) | Missing command for stdio server | HIGH | MCP | No | +| [MCP-010](./generated/mcp-010.md) | Missing url for http/sse server | HIGH | MCP | No | +| [MCP-011](./generated/mcp-011.md) | Invalid MCP server type | HIGH | MCP | Yes (unsafe) | +| [MCP-012](./generated/mcp-012.md) | Deprecated SSE transport | HIGH | MCP | Yes (unsafe) | +| [MCP-013](./generated/mcp-013.md) | Invalid Tool Name Format | HIGH | MCP | Yes (safe) | +| [MCP-014](./generated/mcp-014.md) | Invalid outputSchema Definition | HIGH | MCP | No | +| [MCP-015](./generated/mcp-015.md) | Missing Resource Required Fields | HIGH | MCP | No | +| [MCP-016](./generated/mcp-016.md) | Missing Prompt Required Name | HIGH | MCP | No | +| [MCP-017](./generated/mcp-017.md) | Non-HTTPS Remote HTTP Server URL | HIGH | MCP | Yes (safe) | +| [MCP-018](./generated/mcp-018.md) | Potential Plaintext Secret in MCP Env | MEDIUM | MCP | No | +| [MCP-019](./generated/mcp-019.md) | Potentially Dangerous Stdio Command | MEDIUM | MCP | No | +| [MCP-020](./generated/mcp-020.md) | Unknown Capability Declaration Key | MEDIUM | MCP | No | +| [MCP-021](./generated/mcp-021.md) | Wildcard HTTP Interface Binding | MEDIUM | MCP | Yes (safe) | +| [MCP-022](./generated/mcp-022.md) | Invalid args Array Type | HIGH | MCP | No | +| [MCP-023](./generated/mcp-023.md) | Duplicate MCP Server Names | HIGH | MCP | No | +| [MCP-024](./generated/mcp-024.md) | Empty MCP Server Configuration | HIGH | MCP | No | +| [MCP-025](./generated/mcp-025.md) | Non-boolean alwaysLoad in MCP Server Config | MEDIUM | MCP | No | +| [MCP-026](./generated/mcp-026.md) | Reserved MCP Server Name | HIGH | MCP | No | +| [OC-001](./generated/oc-001.md) | Invalid Share Mode | HIGH | OpenCode | Yes (unsafe) | +| [OC-002](./generated/oc-002.md) | Invalid Instruction Path | HIGH | OpenCode | No | +| [OC-003](./generated/oc-003.md) | opencode.json Parse Error | HIGH | OpenCode | No | +| [OC-004](./generated/oc-004.md) | Unknown Config Key | MEDIUM | OpenCode | No | +| [OC-006](./generated/oc-006.md) | Remote URL in Instructions | LOW | OpenCode | No | +| [OC-007](./generated/oc-007.md) | Invalid Agent Definition | MEDIUM | OpenCode | No | +| [OC-008](./generated/oc-008.md) | Invalid Permission Config | HIGH | OpenCode | Yes (unsafe) | +| [OC-009](./generated/oc-009.md) | Invalid Variable Substitution | MEDIUM | OpenCode | No | +| [OC-SK-001](./generated/oc-sk-001.md) | OpenCode Skill Uses Unsupported Field | MEDIUM | OpenCode Skills | Yes (safe/unsafe) | +| [PE-001](./generated/pe-001.md) | Lost in the Middle | MEDIUM | Prompt Engineering | No | +| [PE-002](./generated/pe-002.md) | Chain-of-Thought on Simple Task | MEDIUM | Prompt Engineering | No | +| [PE-003](./generated/pe-003.md) | Weak Imperative Language | MEDIUM | Prompt Engineering | Yes (unsafe) | +| [PE-004](./generated/pe-004.md) | Ambiguous Instructions | MEDIUM | Prompt Engineering | No | +| [PE-005](./generated/pe-005.md) | Redundant Generic Instructions | MEDIUM | Prompt Engineering | Yes (safe) | +| [PE-006](./generated/pe-006.md) | Negative-Only Instructions | MEDIUM | Prompt Engineering | No | +| [RC-SK-001](./generated/rc-sk-001.md) | Roo Code Skill Uses Unsupported Field | MEDIUM | Roo Code Skills | Yes (safe/unsafe) | +| [REF-001](./generated/ref-001.md) | Import File Not Found | HIGH | References | No | +| [REF-002](./generated/ref-002.md) | Broken Markdown Link | HIGH | References | No | +| [REF-003](./generated/ref-003.md) | Duplicate Import | MEDIUM | References | Yes (safe) | +| [REF-004](./generated/ref-004.md) | Non-Markdown Import | MEDIUM | References | No | +| [ROO-001](./generated/roo-001.md) | Empty Roo Code Rule File | HIGH | Roo Code | No | +| [ROO-002](./generated/roo-002.md) | Invalid .roomodes Configuration | HIGH | Roo Code | No | +| [ROO-003](./generated/roo-003.md) | Invalid .rooignore File | MEDIUM | Roo Code | No | +| [ROO-004](./generated/roo-004.md) | Invalid Mode Slug in Rule Directory | MEDIUM | Roo Code | No | +| [ROO-005](./generated/roo-005.md) | Invalid .roo/mcp.json Configuration | HIGH | Roo Code | No | +| [ROO-006](./generated/roo-006.md) | Mode Slug Not Recognized | MEDIUM | Roo Code | No | +| [VER-001](./generated/ver-001.md) | No Tool/Spec Versions Pinned | LOW | Version Awareness | No | +| [WS-001](./generated/ws-001.md) | Empty Windsurf Rule File | MEDIUM | windsurf | No | +| [WS-002](./generated/ws-002.md) | Windsurf Rule File Exceeds Character Limit | HIGH | windsurf | No | +| [WS-003](./generated/ws-003.md) | Empty or Oversized Windsurf Workflow File | MEDIUM | windsurf | No | +| [WS-004](./generated/ws-004.md) | Legacy .windsurfrules File Detected | LOW | windsurf | No | +| [WS-SK-001](./generated/ws-sk-001.md) | Windsurf Skill Uses Unsupported Field | MEDIUM | Windsurf Skills | Yes (safe/unsafe) | +| [XML-001](./generated/xml-001.md) | Unclosed XML Tag | HIGH | XML | Yes (unsafe) | +| [XML-002](./generated/xml-002.md) | Mismatched Closing Tag | HIGH | XML | Yes (unsafe) | +| [XML-003](./generated/xml-003.md) | Unmatched Closing Tag | HIGH | XML | Yes (unsafe) | +| [XP-001](./generated/xp-001.md) | Platform-Specific Feature in Generic Config | HIGH | Cross-Platform | No | +| [XP-002](./generated/xp-002.md) | AGENTS.md Platform Compatibility | MEDIUM | Cross-Platform | No | +| [XP-003](./generated/xp-003.md) | Hard-Coded Platform Paths | MEDIUM | Cross-Platform | No | +| [XP-004](./generated/xp-004.md) | Conflicting Build/Test Commands | MEDIUM | Cross-Platform | No | +| [XP-005](./generated/xp-005.md) | Conflicting Tool Constraints | HIGH | Cross-Platform | No | +| [XP-006](./generated/xp-006.md) | Multiple Layers Without Documented Precedence | MEDIUM | Cross-Platform | No | +| [XP-007](./generated/xp-007.md) | AGENTS.md Exceeds Codex Byte Limit | MEDIUM | Cross-Platform | No | +| [XP-009](./generated/xp-009.md) | Codex Instruction Chain Exceeds project_doc_max_bytes | MEDIUM | Cross-Platform | No | +| [XP-008](./generated/xp-008.md) | Claude-specific Features in CLAUDE.md for Cursor | MEDIUM | Cross-Platform | No | +| [XP-SK-001](./generated/xp-sk-001.md) | Skill Uses Client-Specific Features | LOW | Cross-Platform | No | +| [OC-CFG-001](./generated/oc-cfg-001.md) | Invalid Model Format | HIGH | OpenCode | No | +| [OC-CFG-002](./generated/oc-cfg-002.md) | Invalid autoupdate value | HIGH | OpenCode | No | +| [OC-CFG-003](./generated/oc-cfg-003.md) | Unknown Top-level Config Field | MEDIUM | OpenCode | No | +| [OC-CFG-004](./generated/oc-cfg-004.md) | Invalid Default Agent | MEDIUM | OpenCode | No | +| [OC-CFG-005](./generated/oc-cfg-005.md) | Hardcoded API Key | HIGH | OpenCode | No | +| [OC-CFG-006](./generated/oc-cfg-006.md) | Invalid MCP Server Structure | HIGH | OpenCode | No | +| [OC-CFG-007](./generated/oc-cfg-007.md) | Invalid MCP Server Command, URL, cwd, or Environment | HIGH | OpenCode | No | +| [OC-AG-001](./generated/oc-ag-001.md) | Invalid Agent Mode Value | HIGH | OpenCode | No | +| [OC-AG-002](./generated/oc-ag-002.md) | Invalid Color Format | HIGH | OpenCode | No | +| [OC-AG-003](./generated/oc-ag-003.md) | Temperature Out of Range | HIGH | OpenCode | No | +| [OC-AG-004](./generated/oc-ag-004.md) | Steps Not a Positive Integer | HIGH | OpenCode | No | +| [OC-PM-001](./generated/oc-pm-001.md) | Invalid Permission Action | HIGH | OpenCode | No | +| [OC-PM-002](./generated/oc-pm-002.md) | Unknown Permission Key | MEDIUM | OpenCode | No | +| [OC-AGM-001](./generated/oc-agm-001.md) | Empty AGENTS.md | HIGH | OpenCode | No | +| [OC-AGM-002](./generated/oc-agm-002.md) | Secrets in AGENTS.md | HIGH | OpenCode | No | +| [OC-DEP-001](./generated/oc-dep-001.md) | Deprecated mode Field | MEDIUM | OpenCode | Yes (safe) | +| [OC-DEP-002](./generated/oc-dep-002.md) | Deprecated tools Field | MEDIUM | OpenCode | Yes (safe) | +| [OC-DEP-003](./generated/oc-dep-003.md) | Deprecated autoshare Field | MEDIUM | OpenCode | Yes (safe) | +| [OC-DEP-004](./generated/oc-dep-004.md) | Deprecated CONTEXT.md Filename | MEDIUM | OpenCode | No | +| [OC-DEP-005](./generated/oc-dep-005.md) | Deprecated TUI Keys | MEDIUM | OpenCode | No | +| [OC-DEP-006](./generated/oc-dep-006.md) | Deprecated MaxSteps Field | MEDIUM | OpenCode | Yes (safe) | +| [OC-DEP-007](./generated/oc-dep-007.md) | Deprecated Reference Field | MEDIUM | OpenCode | Yes (safe) | +| [OC-CFG-008](./generated/oc-cfg-008.md) | Invalid Log Level | HIGH | OpenCode | Yes (unsafe) | +| [OC-CFG-009](./generated/oc-cfg-009.md) | Invalid Compaction Reserved | HIGH | OpenCode | No | +| [OC-CFG-010](./generated/oc-cfg-010.md) | Invalid Skills URL | HIGH | OpenCode | No | +| [OC-CFG-011](./generated/oc-cfg-011.md) | Invalid MCP Timeout | HIGH | OpenCode | No | +| [OC-CFG-012](./generated/oc-cfg-012.md) | Invalid MCP OAuth Config | HIGH | OpenCode | No | +| [OC-CFG-013](./generated/oc-cfg-013.md) | Invalid Server Config | HIGH | OpenCode | No | +| [OC-CFG-014](./generated/oc-cfg-014.md) | Invalid subagent_depth Value | MEDIUM | OpenCode | No | +| [OC-AG-005](./generated/oc-ag-005.md) | top_p Out of Range | HIGH | OpenCode | No | +| [OC-AG-006](./generated/oc-ag-006.md) | Invalid Named Color | MEDIUM | OpenCode | Yes (unsafe) | +| [OC-AG-007](./generated/oc-ag-007.md) | Redundant steps and maxSteps | MEDIUM | OpenCode | No | +| [OC-AG-008](./generated/oc-ag-008.md) | Invalid hidden Type | HIGH | OpenCode | No | +| [OC-AG-009](./generated/oc-ag-009.md) | Invalid Agent Disable Type | HIGH | OpenCode | Yes (unsafe) | +| [OC-LSP-001](./generated/oc-lsp-001.md) | LSP Command Without Extensions | MEDIUM | OpenCode | No | +| [OC-LSP-002](./generated/oc-lsp-002.md) | Invalid LSP Extensions | HIGH | OpenCode | No | +| [OC-TUI-001](./generated/oc-tui-001.md) | Unknown TUI Key | MEDIUM | OpenCode | No | +| [OC-TUI-002](./generated/oc-tui-002.md) | Invalid scroll_speed | HIGH | OpenCode | No | +| [OC-TUI-003](./generated/oc-tui-003.md) | Invalid diff_style | HIGH | OpenCode | Yes (unsafe) | diff --git a/website/versioned_docs/version-0.47.0/troubleshooting.md b/website/versioned_docs/version-0.47.0/troubleshooting.md new file mode 100644 index 00000000..9ee9f4fa --- /dev/null +++ b/website/versioned_docs/version-0.47.0/troubleshooting.md @@ -0,0 +1,60 @@ +--- +title: Troubleshooting +description: "Common issues and fixes when using agnix CLI and editor integrations." +--- + +# Troubleshooting + +## agnix command not found + +Ensure `agnix` is in your PATH: + +```bash +which agnix +agnix --version +``` + +If installed via npm, make sure npm global binaries are in your PATH. Run `npm config get prefix` to find the install location. + +## No files found to validate + +agnix respects `.gitignore` and has file discovery boundaries. Check: + +- You are running from the project root +- Your config files are not git-ignored +- `.agnix.toml` `target` or `tools` settings are not excluding your files + +## Unexpected rules triggering + +Check your `.agnix.toml` configuration: + +- `target` limits validation to a single tool's files +- `disabled_rules` can suppress specific rules +- Some rules only apply to specific tool configs + +## LSP diagnostics not showing + +1. Verify the `agnix-lsp` binary is installed and accessible: + ```bash + which agnix-lsp + agnix-lsp --version + ``` + +2. Check your editor plugin points to the correct binary path + +3. Check editor logs for LSP server startup errors + +4. For VS Code, the extension bundles the server - try reinstalling the extension + +## Rule behavior differs from docs + +Validate against the canonical rule data: + +- [knowledge-base/rules.json](https://github.com/agent-sh/agnix/blob/v0.47.0/knowledge-base/rules.json) +- [knowledge-base/VALIDATION-RULES.md](https://github.com/agent-sh/agnix/blob/v0.47.0/knowledge-base/VALIDATION-RULES.md) + +If you find a discrepancy, please [open an issue](https://github.com/agent-sh/agnix/issues/new). + +## Auto-fix changed something unexpected + +Run `agnix --fix` on a clean git working tree so you can review changes with `git diff`. If a fix is incorrect, [report it](https://github.com/agent-sh/agnix/issues/new) with the original file content. diff --git a/website/versioned_sidebars/version-0.47.0-sidebars.json b/website/versioned_sidebars/version-0.47.0-sidebars.json new file mode 100644 index 00000000..d5a27068 --- /dev/null +++ b/website/versioned_sidebars/version-0.47.0-sidebars.json @@ -0,0 +1,26 @@ +{ + "docsSidebar": [ + "intro", + "getting-started", + "installation", + "configuration", + { + "type": "category", + "label": "Rules Reference", + "link": { + "type": "doc", + "id": "rules/index" + }, + "items": [ + { + "type": "autogenerated", + "dirName": "rules/generated" + } + ] + }, + "editor-integration", + "api-reference", + "troubleshooting", + "contributing" + ] +} diff --git a/website/versions.json b/website/versions.json index bdb9ad1a..a7802cab 100644 --- a/website/versions.json +++ b/website/versions.json @@ -1,4 +1,5 @@ [ + "0.47.0", "0.46.0", "0.45.0", "0.44.0",