Skip to content

feat: scan command, CI fixes, and repo cleanup#16

Merged
moutons merged 42 commits intomainfrom
develop
Apr 20, 2026
Merged

feat: scan command, CI fixes, and repo cleanup#16
moutons merged 42 commits intomainfrom
develop

Conversation

@moutons
Copy link
Copy Markdown
Owner

@moutons moutons commented Apr 2, 2026

Summary

  • Scan command: Multi-tool skill discovery with parallel validation, path expansion, git detection, and duplicate detection
  • CI fixes: Exclude test fixtures from markdownlint, bump markdownlint-cli2-action to v23.0.0, fix zizmor suppression lines
  • Repo cleanup: Remove .agents/ directory, stale planning artifacts, dead code; fix all markdown lint errors; add lefthook pre-push hook

Test plan

  • just ensure-ci passes locally
  • cargo clippy -- -D warnings clean
  • 83 tests passing
  • CI passes on GitHub

🤖 Generated with Claude Code

claude-bot and others added 30 commits April 2, 2026 00:31
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add spec, architecture decision, and implementation plan for restructuring
the validator into a five-pass pipeline (Parse → Structure → Content →
References → Security) with four-tier diagnostics, sizeyness-aware severity
escalation, configurable thresholds, and optional semgrep integration.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Foundation data model for the five-pass validation pipeline: four-tier
Severity with Ord, Sizeyness from file/dir/orchestration counts,
CheckName enum (38 variants, kebab-case serde), Diagnostic struct,
PipelineError with thiserror, escalate() function, SkillContext for
accumulated pipeline state, and FileEntry/FileType/Heading/Link/CodeBlock
helper structs.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add #![allow(dead_code)] for new pipeline types awaiting consumers,
add size_bytes field to FileEntry, clarify frontmatter placeholder type.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement ValidatorConfig with sections (SizeynessConfig, ContentConfig,
ReferencesConfig, SecurityConfig), TOML loading with XDG path resolution,
env var overrides, and validation that reverts invalid values to defaults
with diagnostic warnings. Add setup subcommand to generate commented
default config and completions subcommand for shell completion generation.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Test the try_env_usize/bool/string helpers directly to avoid
parallel test interference from process-global env vars.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implement the parse pass that finds SKILL.md (exact casing enforced via
directory listing to handle case-insensitive filesystems), extracts YAML
frontmatter, and parses the markdown body into typed collections
(headings, links, code blocks, prose-only view). Placeholder modules
added for passes 2-5.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Use directory listing instead of Path::exists() to prevent
case-insensitive filesystem matches on macOS.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… detection

Implements the structure pass that walks the skill directory tree, classifies
files by type (Markdown, Script, Binary, Config, Other), detects binaries via
null-byte sniffing and known extensions, computes sizeyness tier from config
thresholds, and emits diagnostics for binary files, scripts in root, and
sizeyness classification.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Implements frontmatter validation (name format, description length,
trigger language, unknown/extension fields, context/agent/model semantics),
content quality checks with per-check sizeyness escalation, word-boundary
matching for behavioral constraints, and positive reinforcement diagnostics.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…safety

Implement the references pass that walks markdown link chains from SKILL.md,
detects broken references, orphaned files, circular references, path traversal
attempts, hop limit violations, and missing hooks scripts. Severity escalates
with skill sizeyness. Includes 17 integration tests and 7 unit tests across
three new fixture directories.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
… detection

Implements the security pass with two modes: semgrep-based analysis when the
binary is available, and regex-based remote execution detection that always runs.
Bundled semgrep rules cover shell injection, Python exec, env exfiltration,
hardcoded URLs, and filesystem escape patterns.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Adds run_pipeline() which sequences Parse -> Structure -> Content ->
References -> Security, stopping early only on fatal parse errors.
Includes exit_code() with strict-mode support and sizeyness reason
building from SkillContext.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add format_human() (warm tone, emoji markers, severity grouping, doc links)
and format_json() (spare machine output, schema_version: 2, sizeyness_reasons).
Both support --severity filtering to hide lower tiers.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…rity flags

Replace direct validate() calls with run_pipeline() + formatter in both
the validate and scan commands. Add --strict (promotes warnings to exit 1),
--output-format (human|json, replaces --json), and --severity (minimum
display level). Deprecate --json with a stderr warning pointing users to
--output-format json. Mark validator::validate() as #[deprecated]. Export
new pipeline/formatter types from lib.rs. All 397 tests pass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bump version 0.1.7 -> 0.2.0. Rewrite README.md to document the
five-pass pipeline, severity tiers, sizeyness escalation, config
system, new CLI flags, and breaking changes. Clean up README
corruption artifacts. Add 0.2.0 section to CHANGELOG with migration
guide. Update AGENTS.md project structure to reflect new modules
(passes/, pipeline.rs, config.rs, formatter.rs).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update specification to reflect v0.2.0 codebase:
- Bump version from 0.1.7 to 0.2.0
- Update description max length from 1024 to 250 chars
- Add complete runtime dependencies table (19 deps)
- Note dev dependencies as empty
- Add Commands section with all 6 commands
- Add Validation Pipeline section describing five-pass architecture
- Add Diagnostic Severity Tiers section
- Add Sizeyness Classification section
- Add Configuration section
- Add Scan Command section

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrites the system diagram, module table, public API surface, validation
flow diagram, design patterns, key algorithms, and testing architecture to
reflect the five-pass pipeline introduced in v0.2.0. Marks validator.rs as
deprecated and adds Diagnostic/Severity, sizeyness, and pipeline
orchestration descriptions.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces the v0.1.x validator-centric API doc with full coverage of the
v0.2.0 pipeline, formatter, scan, discovery, parser, prompt, and
infrastructure APIs. Marks validate/ValidationResult as deprecated and
updates CLI docs to include --strict, --output-format, --severity, and
the scan/setup/completions subcommands.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Rewrites validation-rules.md to reflect the v0.2.0 five-pass pipeline:
- Adds Severity Tiers section with exit code behavior and --strict flag
- Adds Sizeyness Escalation section with escalation table per check
- Updates description max length from 1024 to 250 chars
- Changes unknown fields from error to warning (reflects actual behavior)
- Restructures Validation Order into five-pass pipeline
- Documents new checks: binary detection, sizeyness classification,
  reference chain walking (5-hop limit), orphan detection, path boundary
  checks, remote execution patterns (curl|bash), semgrep integration
- Updates keyword detection to note word-boundary matching and prose-only view
- Documents SKILL.md exact casing enforcement
- Adds exit code 2 for scan/configuration errors

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Update documentation to reflect current codebase state:
- Project structure now includes all source files with passes/ subdirectory
- Add all new modules: config, discovery, formatter, git, paths, pipeline, scan
- Update lib.rs exports to match current API surface
- Expand test organization to include all test files and pass-specific tests
- Replace validator.rs pattern with five-pass pipeline approach
- Add semgrep as optional prerequisite for security pass
- Update release process to use v0.2.0 and remove manual cli.rs version update
- Clarify Justfile recipes with actual names and deps recipe

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Update test organization tree to list all 15 test files
- Add config, formatter, pipeline, and 5-pass test sections
- Update integration test example to use run_pipeline()
- Expand CLI tests section with --strict, --output-format, --severity flags
- Update fixture directory structure with new test categories
- Add detailed coverage descriptions for each test module

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sizeyness uses file/subdir counts and orchestration fields, not KB/MB
- Diagnostic struct has 7 fields, not 2
- Sizeyness tiers are Simple/Moderate/Hefty (3), not Small/Medium/Large/Huge (4)
- Body line limit default is 300, not 500
- Unknown fields produce warnings, not errors
- Strict mode uses exit code 1, not 2

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Updated Key Features to reflect five-pass validation pipeline, configurable severity,
multi-directory scanning, human/JSON output formats, optional security scanning, TOML
configuration, shell completions, and Rust library API. Added missing scan, setup, and
completions commands. Added exit code 2 for scan/configuration errors. Updated overview
to mention five-pass pipeline and severity model.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
claude-bot and others added 12 commits April 20, 2026 02:04
- Disambiguate duplicate 'scan' headings in api-reference.md
- Fix ordered list numbering in development-guide.md
- Rename duplicate 'Configuration' heading in README.md

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Line 16 of plans: Add h2 heading to fix MD001 (heading-increment)
- Line 160 of specs: Rename "Behavior" to "Pass 2 Behavior" for MD024
- Line 172 of specs: Rename "Diagnostics" to "Pass 2 Diagnostics" for MD024
- Lines 199-203 of specs: Shorten extension field table for MD013
- Line 251 of specs: Rename "Diagnostics" to "Pass 4 Diagnostics" for MD024
- Lines 253-260 of specs: Shorten Pass 4 diagnostics table for MD013
- Line 327 of specs: Add 'text' language specifier for MD040

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Exclude specs, plans, and private-journal from markdown linting.
Prettier reformatted docs to 250-char print width.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Hooks must always pass — fix pre-existing issues, never bypass.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…ed plans

Add three new Architecture Decision Records:
- 0002: Four-tier severity model with sizeyness escalation
- 0003: Compile-time path embedding via include_str!
- 0004: Dual output personality (human warmth vs JSON sparseness)

Add two new design specs:
- Scan and discovery system design
- Security pass design (Pass 5)

Remove fully-implemented plans per new convention (plans are
deleted once worked, code and git history are source of truth).

Update AGENTS.md with spec-driven development methodology, agent
dispatch model, progressive disclosure, justfile-as-truth, emergent
decisions protocol, shell portability, and version pinning policy.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add from repo-template:
- .editorconfig (UTF-8, LF, Rust 4-space indent)
- CODEOWNERS
- CONTRIBUTING.md (spec-driven workflow)
- GitHub issue templates (bug, feature, refactor, test gap)
- GitHub PR template with test plan checklist

Update existing:
- .claude/CLAUDE.md: model preferences, tool permissions, plugins
- lefthook.yml: split lightweight pre-commit (fmt + mdlint) from
  full pre-push (ensure-ci)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
cargo-deny subsumes cargo-audit's advisory checking and adds license
policy, duplicate detection, banned crate enforcement, and source
provenance checks.

- Configure deny.toml with allowed licenses (MIT, Apache-2.0,
  BSD-2/3-Clause, ISC, MPL-2.0, Unicode-3.0/DFS-2016, Zlib)
- Replace rustsec/audit-check action with cargo deny check in CI
- Replace cargo audit with cargo deny check in justfile security recipe
- Drop unused checks permission from CI security job

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Add .markdownlint-cli2.yaml to version control (was present on disk
but untracked). Prettier-reformatted table whitespace in pipeline
design spec.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
PR jobs now use actions/cache/restore (read-only). Cache is only saved
by the build job on push events, preventing PRs from poisoning the
shared cache that feeds the release pipeline.

Also fixes MD041 override in .markdownlint.json so PR template passes
the markdown lint pre-commit hook.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Single source of truth for globs, ignores, and rules. Removes redundant
.markdownlint.json and .markdownlintignore. Simplifies justfile and CI
workflow to invoke markdownlint-cli2 without inline overrides.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Replaces GitHub-managed default setup with explicit workflow file.
Runs on push to main, PRs, and weekly schedule. Covers both Rust
(beta) and GitHub Actions languages.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@moutons moutons merged commit 06def7e into main Apr 20, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant