Skip to content

v0.8.0

Choose a tag to compare

@stbenjam stbenjam released this 11 May 12:43
· 1041 commits to main since this release

What's New

Features

  • Lint tree architecture — complete rewrite of plugin/skill discovery using a typed tree with parent pointers, replacing ad-hoc file scanning. All rules now use tree traversal (MarketplaceNode, ApmNode, ApmConfigNode, MarketplaceConfigNode, HooksBlock, McpBlock, ReadmeBlock)
  • LLM autofix for frontmatterskillsaw fix --llm can now auto-correct bad YAML frontmatter in skills and agents
  • Context budget rule — new context-budget rule checks frontmatter description token budgets for skills and commands
  • DOT format and token counts in skillsaw tree output
  • Verbose logging and APM tree nesting improvements

Fixes

  • Fix CommonMark fence parsing: handle closing fence length >= opening, allow indent differences, and strip indented code fences (0-3 spaces)
  • Fix thread-safety: per-file cache invalidation instead of global clears
  • Fix YAML line number handling: centralized with ruamel.yaml, correct offsets for block scalars
  • Fix crash on null/non-dict values in JSON config files, plugin metadata, marketplace entries
  • Fix --max-iterations 0 silently ignored due to truthy check
  • Fix enabled: "auto" in user config now bypasses version gate
  • Fix non-enabled config overrides now implicitly activate disabled rules
  • Fix dry-run LLM fix exits 0 instead of 1 when changes don't improve violations
  • Fix LintTool now applies exclude_patterns from config
  • Fix frontmatter regex truncation on --- inside YAML values
  • Fix named .instructions.md file detection (e.g. coding.instructions.md)
  • Fix semver version regex missing end anchor in plugin-json-valid
  • Fix SARIF output: reject startLine=0, add synthetic rule descriptors
  • Fix double-substitution in apply_replacements
  • Fix Path.rename() for command rename fixes to prevent duplicates/data loss
  • Fix concurrency race in LLM relint
  • Fix various crash guards for binary files, missing env vars, empty hooks, unreadable files

Refactoring

  • Centralize frontmatter parsing on tree nodes
  • Introduce ContentBlock as universal unit for linting and fixing
  • Support custom line mapping in ContentFile
  • Migrate all rule families (coderabbit, APM, marketplace, skills, instruction files) to tree traversal

Docs

  • Document skillsaw tree subcommand, content-paths, version pinning, exclude patterns
  • Add missing repository types to README
  • Clarify APM compiles to all agents, not just .claude