Added
- Builder pattern for LintConfig:
LintConfig::builder()with validation onbuild(). All serializable fields are now private with getter/setter methods.ConfigErrorenum for build-time validation failures. Runtime state (root_dir,import_cache) moved intoRuntimeContext - RUSTSEC advisory tracking - Documented process for reviewing ignored security advisories with
docs/RUSTSEC-ADVISORIES.mdtracking document, monthly review checklist inMONTHLY-REVIEW.md, and pre-release checks inRELEASING.md(closes #346) - Structured rule metadata in diagnostics - All diagnostic outputs (JSON, SARIF, MCP, LSP, CLI) now include optional metadata fields: category, rule_severity, and applies_to_tool. Metadata is automatically populated from rules.json at build time
- Plugin architecture:
ValidatorProvidertrait enables external validator registration - Builder pattern:
ValidatorRegistry::builder()for ergonomic registry construction withwith_defaults(),with_provider(),without_validator() - Validator disabling:
disabled_validatorsconfig field in[rules]section to disable validators by name at runtime - Validator naming:
Validator::name()method for programmatic identification of validators - Validator introspection:
Validator::metadata()method returns rule IDs and descriptions for runtime validator inspection - Hierarchical error types - New
CoreErrorenum withFile(FileError),Validation(ValidationError),Config(ConfigError)variants provides structured error information. Helper methodspath()andsource_diagnostics()enable better error introspection.LintErrorremains as type alias for backward compatibility - Backward-compatibility policy documenting public vs. internal API surface with three stability tiers (CONTRIBUTING.md)
- Cross-crate API contract tests ensuring stable interfaces between agnix-core, agnix-rules, and downstream crates (CLI, LSP, MCP)
- Feature flags policy documenting when and how to use feature flags
- Clickable rule links in IDEs - LSP diagnostics now include
code_descriptionso rule codes (e.g. AS-001) link to per-rule website docs - Explicit code action kinds - LSP advertises QUICKFIX capability for more reliable quick-fix surfacing
- Per-rule examples for all 155 rules - Each rule now has specific good/bad examples in
rules.jsonand on the website, replacing generic category-level stubs - LSP project-level validation -
validate_project_rules()public API for workspace-wide rules (AGM-006, XP-004/005/006, VER-001) - LSP lifecycle integration - project-level diagnostics on workspace open, file save, config change
- VS Code
validateWorkspace- now triggersagnix.validateProjectRulesexecuteCommand - Dependabot config for automated cargo and GitHub Actions dependency updates
- MSRV defined as Rust 1.91 (latest stable), tested in CI matrix
- 70+ new tests covering diagnostics, config versions, LSP backend, MCP errors, parsers, schemas, span_utils, eval edge cases
Changed
- Refactoring: Extracted
file_types.rsinto extensiblefile_types/module directory withFileTypeDetectortrait,FileTypeDetectorChain, named constants,Displayimpl, andis_validatable()method (#349) - Refactoring: Split
crates/agnix-core/src/lib.rsinto focused modules:file_types.rs,registry.rs,pipeline.rs - Error handling: Replaced flat
LintErrorenum with hierarchicalCoreErrorstructure, preserving error context through conversion layers. Binary crates (CLI, LSP, MCP) gain automaticanyhow::Errorconversion via thiserror - All rule documentation links now point to website (
avifenesh.github.io/agnix) instead of GitHubVALIDATION-RULES.md - README overhauled to focused landing page with punchy value prop and website links
- API (BREAKING): Made
parsersmodule internal and moved#[doc(hidden)]re-exports to__internalmodule (closes #350) - API (BREAKING): Marked
ValidationResultas#[non_exhaustive]- useValidationResult::new()or..in patterns - API (BREAKING): Renamed
ValidationResult.rules_checkedtovalidator_factories_registeredfor accuracy - API: Added stability tier documentation (Stable/Unstable/Internal) to all public modules
- API: Added metadata fields to
ValidationResult:validation_time_msandvalidator_factories_registered - API: Use saturating cast for validation timing (prevents u128 truncation to u64)
Fixed
- i18n diagnostic messages now display properly translated text instead of raw key paths when installed via
cargo install(fixes #341) - CI locale-sync check prevents locale files from drifting across crates
- CC-AG-009, CC-AG-010, CC-SK-008 false positives for
Skill,StatusBarMessageTool,TaskOutputtools and MCP server tools withmcp__<server>__<tool>format (fixes #342) - Performance: Replaced Mutex-based path collection with rayon fold/reduce in parallel validation, eliminating lock contention
- Performance: Reduced string allocations in
normalize_rel_path,detect_file_type, and project-level checks - Code quality: Merged duplicate
resolve_config_pathfunctions in CLI - Code quality: Improved regex error messages in hooks validator
- Code quality: Added panic-safe
EnvGuardfor telemetry test isolation - Code quality: Added panic logging in markdown parser instead of silent failure
- CI: Pinned
huacnlee/zed-extension-actionto SHA, pinned cargo tool versions - CI: Moved
CARGO_REGISTRY_TOKENfrom CLI args to env vars in release workflow