feat: TOML Part 3 — 15 additional built-in filters (ping, rsync, dotnet, swift, shellcheck, hadolint, poetry, composer, brew, df, ps, systemctl, yamllint, markdownlint, uv)#386
Conversation
There was a problem hiding this comment.
Pull request overview
Expands RTK’s built-in TOML filter DSL coverage by adding 15 new built-in filters and updating the guardrail tests in toml_filter.rs to ensure the built-in filter set remains complete and counted correctly.
Changes:
- Added 15 new built-in filters under
src/filters/*.toml, each with inline tests. - Updated built-in filter expectations in
src/toml_filter.rs(expected names list, filter count, concat-count test).
Reviewed changes
Copilot reviewed 16 out of 16 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
| src/toml_filter.rs | Updates expected built-in filter list and count assertions to include the 15 new filters. |
| src/filters/brew-install.toml | Adds a Homebrew install/upgrade output compaction filter with short-circuit behavior. |
| src/filters/composer-install.toml | Adds a Composer install/update/require compaction filter with short-circuit behavior. |
| src/filters/df.toml | Adds a df output compaction filter (truncate + line cap). |
| src/filters/dotnet-build.toml | Adds a dotnet build compaction filter with success short-circuit. |
| src/filters/hadolint.toml | Adds a hadolint output compaction filter (blank stripping + truncation + cap). |
| src/filters/markdownlint.toml | Adds a markdownlint output compaction filter (blank stripping + truncation + cap). |
| src/filters/ping.toml | Adds a ping output compaction filter focused on keeping the summary. |
| src/filters/poetry-install.toml | Adds a poetry install/lock/update compaction filter with up-to-date short-circuit. |
| src/filters/ps-aux.toml | Adds a ps output compaction filter (truncate + cap). |
| src/filters/rsync.toml | Adds an rsync output compaction filter with success short-circuit. |
| src/filters/shellcheck.toml | Adds a shellcheck output compaction filter (currently strips caret/message lines). |
| src/filters/swift-build.toml | Adds a swift build compaction filter with success short-circuit. |
| src/filters/systemctl-status.toml | Adds a systemctl status compaction filter (blank stripping + cap). |
| src/filters/uv-sync.toml | Adds a uv sync / uv pip install compaction filter with short-circuit rules. |
| src/filters/yamllint.toml | Adds a yamllint output compaction filter (blank stripping + truncation + cap). |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
| strip_lines_matching = [ | ||
| "^\\s*$", | ||
| "^\\s*\\^-- ", | ||
| "^\\s*\\^\\^", | ||
| ] |
There was a problem hiding this comment.
strip_lines_matching currently removes ShellCheck diagnostic lines like ^-- SC2236: ... / ^-- SC2086: .... Those lines contain the actual warning/error message; stripping them leaves only context without the reason/code. Consider keeping these lines and instead using replace to drop the leading caret marker (e.g., turn ^-- SC2236: ... into SC2236: ...), and only strip pure caret-only indicator lines if needed.
src/filters/ps-aux.toml
Outdated
| @@ -0,0 +1,16 @@ | |||
| [filters.ps-aux] | |||
| description = "Compact ps output — truncate wide lines, limit rows" | |||
| match_command = "^ps\\b" | |||
There was a problem hiding this comment.
match_command = "^ps\\b" is much broader than the filter name ps-aux suggests and will apply to any ps ... invocation (e.g. ps -ef, ps -o ...). If the intent is specifically ps aux, narrow the regex to match that subcommand/flag combination (and add/adjust inline tests accordingly) to avoid unexpectedly truncating other ps output formats.
| match_command = "^ps\\b" | |
| match_command = "^ps\\s+aux\\b" |
Code Review — 15 new TOML filters (PR #386)Clean PR. The multi-file architecture (build.rs + src/filters/*.toml) is a nice improvement over the monolithic file. Compile-time TOML validation, duplicate detection, and the shadow warning system are well-done. CONTRIBUTING.md is clear and helpful. All 15 new filters follow established patterns and have ≥2 inline tests each. A few issues below. P1 — ImportantP1-1: P1-2: P2 — Minor
P3 — Nits
Positive
|
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…mote, cargo-run These filters were never reachable: Clap routes rtk git/cargo commands to their dedicated Rust modules before run_fallback is called. The TOML engine only fires for unknown commands. Shipping dead filters gives false confidence (inline tests pass, but filters never activate in production). Also fixes P1-1 from the PR #386 review: wget was in RUST_HANDLED_COMMANDS and the shadow warning fired at compile time but did not block the build. Removed: cargo-run.toml, git-checkout.toml, git-merge.toml, git-remote.toml, wget.toml Updated test guards: count 29→24, expected list -5 names, concat test 30→25. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
40e75d0 to
58a8496
Compare
Code Review — Local Testing ResultsTested PR branch locally. Build succeeds, 720 tests pass, Confirmed Issues1. uv-sync.toml:
The test fixture for "install strips downloads" is unrealistic — it omits the Fix: remove the match_output = [
{ pattern = "Audited \\d+ package", message = "ok (up to date)" },
# Remove: { pattern = "Resolved \\d+ package", message = "ok (synced)" },
]2. dotnet-build.toml: warnings swallowed on success (P2)
Fix: only short-circuit on clean builds: match_output = [
{ pattern = "0 Warning\\(s\\)\\n\\s+0 Error\\(s\\)", message = "ok (build succeeded)" },
]3. poetry-install.toml: incompatible with Poetry 2.x (P2) Poetry 2.x (default since early 2024) changed output format:
The filter is effectively a no-op for Poetry 2.x users. Fix: strip_lines_matching = [
"^\\s*$",
"^ [-•] Downloading ",
"^ [-•] Installing .* \\(",
"^Creating virtualenv",
"^Using virtualenv",
]
match_output = [
{ pattern = "No dependencies to install or update|No changes\\.", message = "ok (up to date)" },
]What's Good
|
|
Small issue found for ping filter on windows. Strip patterns don't match Windows ping output The two strip patterns target Linux/macOS format exclusively: strip_lines_matching = [ Expectedstrip_lines_matching = [ Strip patterns should cover both formats. Both inline tests use Linux fixtures — Windows format has zero coverage. Reproducecargo build --release Expected output: statistics block only. |
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- uv-sync: remove Resolved short-circuit (fires before package list) - dotnet-build: short-circuit only on 0 warnings + 0 errors (not on any "Build succeeded" — catches builds with warnings too) - poetry-install: support Poetry 2.x bullet syntax (• vs -) and "No changes." message; add Poetry 2.x test - ping: add Windows format support (Pinging + Reply from patterns); add Windows test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
58a8496 to
2c78fbb
Compare
Local review — round 3 (deep testing)Fixed ✅
Remaining
No blocking bugs on this PR. All P1 and P2 bugs fixed. The 2 critical bugs (trailing newline, RTK_NO_TOML) are in PR #349. |
…mote, cargo-run These filters were never reachable: Clap routes rtk git/cargo commands to their dedicated Rust modules before run_fallback is called. The TOML engine only fires for unknown commands. Shipping dead filters gives false confidence (inline tests pass, but filters never activate in production). Also fixes P1-1 from the PR #386 review: wget was in RUST_HANDLED_COMMANDS and the shadow warning fired at compile time but did not block the build. Removed: cargo-run.toml, git-checkout.toml, git-merge.toml, git-remote.toml, wget.toml Updated test guards: count 29→24, expected list -5 names, concat test 30→25. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
a5ea208 to
16ee0ae
Compare
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- uv-sync: remove Resolved short-circuit (fires before package list) - dotnet-build: short-circuit only on 0 warnings + 0 errors (not on any "Build succeeded" — catches builds with warnings too) - poetry-install: support Poetry 2.x bullet syntax (• vs -) and "No changes." message; add Poetry 2.x test - ping: add Windows format support (Pinging + Reply from patterns); add Windows test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
82d31ad to
4dcc9a9
Compare
Re-review (round 3)720 tests pass, zero regressions. ✅ 2 rsync.toml: Input with errors + "total size is" → returns Root cause: Suggested fix: Add |
…mote, cargo-run These filters were never reachable: Clap routes rtk git/cargo commands to their dedicated Rust modules before run_fallback is called. The TOML engine only fires for unknown commands. Shipping dead filters gives false confidence (inline tests pass, but filters never activate in production). Also fixes P1-1 from the PR #386 review: wget was in RUST_HANDLED_COMMANDS and the shadow warning fired at compile time but did not block the build. Removed: cargo-run.toml, git-checkout.toml, git-merge.toml, git-remote.toml, wget.toml Updated test guards: count 29→24, expected list -5 names, concat test 30→25. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
16ee0ae to
7a3050d
Compare
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- uv-sync: remove Resolved short-circuit (fires before package list) - dotnet-build: short-circuit only on 0 warnings + 0 errors (not on any "Build succeeded" — catches builds with warnings too) - poetry-install: support Poetry 2.x bullet syntax (• vs -) and "No changes." message; add Poetry 2.x test - ping: add Windows format support (Pinging + Reply from patterns); add Windows test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
9667758 to
288e66f
Compare
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…vidual files Replace the 848-line src/builtin_filters.toml monolith with individual files under src/filters/<name>.toml (1 filter + tests per file). Files are concatenated alphabetically by build.rs at compile time into OUT_DIR/builtin_filters.toml, then embedded via a BUILTIN_TOML constant in toml_filter.rs. The build step validates TOML syntax and detects duplicate filter names across files. Benefits: - Zero merge conflicts when multiple PRs add filters (different files) - Clear PR diffs: "+1 file of 30 lines" vs "+30 lines in 850-line file" - Easy onboarding: copy any .toml, rename, edit 3 fields — done - Build-time TOML validation catches syntax errors before tests run Changes: - build.rs (new): concat + validate src/filters/*.toml - Cargo.toml: add [build-dependencies] toml = "0.8" - src/filters/*.toml (28 files): split from monolith - src/filters/README.md (new): contributor guide - src/toml_filter.rs: BUILTIN_TOML const + 5 include_str replacements - src/builtin_filters.toml: deleted Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…check, hadolint, poetry, composer, brew, df, ps, systemctl, yamllint, markdownlint, uv) Tier 1 (high value): - ping: strip per-packet lines, tail_lines=4 keeps summary only (70%+) - rsync: match_output on "total size is" → "ok (synced)" (80%+) - dotnet-build: match_output on "Build succeeded" → "ok (build succeeded)" (70%+) - swift-build: match_output on "Build complete!" → "ok (build complete)" (70%+) - shellcheck: strip blank lines + caret indicator lines, max_lines=50 (60%+) - hadolint: strip blank lines, truncate_lines_at=120, max_lines=40 (60%+) - poetry-install: strip downloads, match_output on "No dependencies to install" (75%+) - composer-install: strip downloads, match_output on "Nothing to install" (75%+) - brew-install: strip Downloading/Pouring, match_output on "already installed" (70%+) Tier 2 (medium value): - df: truncate_lines_at=80, max_lines=20 (60%+) - ps-aux: truncate_lines_at=120, max_lines=30 (60%+) - systemctl-status: strip blank lines, max_lines=20 (65%+) - yamllint: strip blank lines, max_lines=50, truncate_lines_at=120 (60%+) - markdownlint: strip blank lines, max_lines=50, truncate_lines_at=120 (60%+) - uv-sync: strip downloads, match_output on "Audited"/"Resolved" (70%+) Updates test guards: count 29→44, expected list +15 names, concat test 30→45. All 90 inline TOML tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
P1-2: rsync.toml — remove dead strip rule "^total size is \d" match_output fires at stage 3, strip at stage 4 — the rule was unreachable on success and removed a useful line on error paths. P2-1: ps-aux.toml renamed to ps.toml, match_command ^ps\b → ^ps(\s|$) Prevents false matches on pstree, psql, pstack. Filter name and test sections updated from ps-aux to ps. Guard list updated. P2-2: df.toml match_command ^df\b → ^df(\s|$) Prevents false matches on dfs, dfx. P2-4: shellcheck.toml — keep caret indicator lines (^-- SC...) Stripping them lost the exact character position of the error. Only blank lines are now stripped. P2-7: swift-build.toml — remove dead strip rule "^Build complete!" match_output short-circuits before strip runs on success paths. The rule was unreachable and confusing. All 90 inline tests pass. 720 unit tests pass. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
- uv-sync: remove Resolved short-circuit (fires before package list) - dotnet-build: short-circuit only on 0 warnings + 0 errors (not on any "Build succeeded" — catches builds with warnings too) - poetry-install: support Poetry 2.x bullet syntax (• vs -) and "No changes." message; add Poetry 2.x test - ping: add Windows format support (Pinging + Reply from patterns); add Windows test Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…base Rebase on feat/toml-dsl-pr2 (post-PR-#349 fixes) caused the refactor commit to re-add dead filters that PR #351 had already removed: cargo-run, docker-compose-ps, docker-inspect, git-checkout, git-merge, git-remote, pnpm-build. These 7 files are removed to maintain the expected 36 filter count. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…errors present Fixes two match_output bugs where success short-circuit fires before strip_lines_matching can surface errors in the full output blob. Changes: - Add optional `unless` field to MatchOutputRule (serde default = None) - Compile `unless` into Option<Regex> in CompiledMatchOutputRule - In apply_filter stage 3: if `unless` matches the blob, skip the rule and continue to the next match_output rule (or fall through to the pipeline) - rsync.toml: add `unless = "error|failed|No such file"` to the "total size is" rule; add test verifying errors are not swallowed - swift-build.toml: add `unless = "warning:|error:"` to the "Build complete!" rule; add test verifying warnings are not swallowed - CONTRIBUTING.md: document match_output[].unless in the field reference table - Unit tests: 5 new tests covering unless blocks/allows/falls-through/ no-regression/invalid-regex Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…E.md + CLAUDE.md Version strings and module count were stale after rebase onto updated feat/toml-dsl-pr2. validate-docs.sh now passes clean. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
288e66f to
bd5e74a
Compare
Incorporates 52 upstream commits (v0.27.0 → v0.28.2): - TOML filter DSL engine + 30 built-in filters (PRs rtk-ai#349, rtk-ai#351, rtk-ai#386) - Graphite CLI support (PR rtk-ai#290) - git commit -am/--amend fix via trailing_var_arg (PR rtk-ai#327) - restore_double_dash for cargo (PR rtk-ai#326) - gh -R/--repo passthrough, pr edit/comment fix (PRs rtk-ai#328, rtk-ai#332) - docker compose subcommand filtering (PR rtk-ai#336) - Telemetry tokens_saved + install_method (PRs rtk-ai#462, rtk-ai#469, rtk-ai#471) - proxy streaming (PR rtk-ai#268) - Diff limits increased (100→500 lines, 10→30 hunk lines) Conflict resolution (5 files): - cargo_cmd.rs: adopted upstream restore_double_dash, adapted streaming run_test() to use it, converted old split_at_double_dash tests - git.rs: adopted upstream simplified Commit unit variant (fixes -am), adapted all commit tests to flat args API, added 6 new edge case tests - init.rs: added TOML template generation alongside hook manifest - main.rs: merged both upstream (gt, toml_filter, verify) and hooks-v2 (cmd, hook, stream, pipe) modules, kept all tests from both sides - utils.rs: kept hooks-v2 command_in_path/which_command + upstream English docs Hook engine additions during merge: - Added gt to hook_lookup() whitelist with 4 routing test cases All 5 hook bug fixes from issue rtk-ai#361 preserved: 1. Streaming (stream.rs BufReader) 2. Handler coordination (parallel-merge + run_manifest_handlers on both paths) 3. Stderr deny (exit 2) 4. Routing whitelist (hook_lookup) 5. Vitest run injection 1182 tests pass (1 environment-dependent upstream test excluded).
Incorporates 52 upstream commits (v0.27.0 → v0.28.2): - TOML filter DSL engine + 30 built-in filters (PRs rtk-ai#349, rtk-ai#351, rtk-ai#386) - Graphite CLI support (PR rtk-ai#290) - git commit -am/--amend fix via trailing_var_arg (PR rtk-ai#327) - restore_double_dash for cargo (PR rtk-ai#326) - gh -R/--repo passthrough, pr edit/comment fix (PRs rtk-ai#328, rtk-ai#332) - docker compose subcommand filtering (PR rtk-ai#336) - Telemetry tokens_saved + install_method (PRs rtk-ai#462, rtk-ai#469, rtk-ai#471) - proxy streaming (PR rtk-ai#268) - Diff limits increased (100→500 lines, 10→30 hunk lines) Conflict resolution (5 files): - cargo_cmd.rs: adopted upstream restore_double_dash - git.rs: adopted upstream simplified Commit variant (fixes -am), fixed test_git_status_not_a_repo via GIT_DIR env override - init.rs: added TOML template generation alongside hook manifest, made resolve_claude_dir pub(crate) for config/mod.rs - main.rs: merged upstream (gt, toml_filter, verify) and multi-platform (cmd, hook, stream, safety, gemini) modules - utils.rs: accepted English doc comments Recovery edits (safety integration restored after incorrect overwrite): - hook/mod.rs: restored config::rules::try_remap(), safety::check_raw(), safety::check() per-command, FORMAT_PRESERVING/TRANSPARENT_SINKS pub(crate), basename extraction, safety-dependent tests - discover/registry.rs: updated 3 wc tests for upstream IGNORED_PREFIXES All hook engine + safety + gemini features preserved. 1332 tests pass, 0 failures, 5 ignored.
Summary
Adds 15 new built-in TOML filters to extend coverage from 21 → 36 filters. All filters follow the established DSL patterns (strip_lines_matching, match_output short-circuit, max_lines, truncate_lines_at).
Also introduces the
unlessfield onmatch_outputrules — prevents success short-circuit when errors/warnings are present in the output blob.Tier 1 — High value (9 filters)
pingtail_lines: 4, strip per-packet linesrsyncmatch_output"total size is" → "ok (synced)",unless = "error|failed"dotnet-buildmatch_outputclean build pattern → "ok (build succeeded)"swift-buildmatch_output"Build complete!" → "ok (build complete)",unless = "warning:|error:"shellcheckmax_lines: 50hadolinttruncate_lines_at: 120,max_lines: 40poetry-installmatch_output"No dependencies to install|No changes."composer-installmatch_output"Nothing to install"brew-installmatch_output"already installed"Tier 2 — Medium value (6 filters)
dftruncate_lines_at: 80,max_lines: 20ps-auxtruncate_lines_at: 120,max_lines: 30systemctl-statusmax_lines: 20yamllintmax_lines: 50,truncate_lines_at: 120markdownlintmax_lines: 50,truncate_lines_at: 120uv-syncmatch_output"Audited"New DSL field:
match_output[].unlessPrevents a
match_outputrule from firing when the output contains errors/warnings:Changes
src/filters/*.tomlfiles, each with ≥2 inline testssrc/toml_filter.rs:MatchOutputRulegainsunless: Option<String>, count guard 21→36, expected list +15 names, concat test 22→37CONTRIBUTING.md: documentsunlessfield in filter reference tableTest plan
cargo build— build.rs validates all TOML, zero errorscargo run -- verify --require-all— 78/78 inline tests passcargo test --all— 758 tests passcargo clippy --all-targets— zero errorsls src/filters/*.toml | wc -l→ 36🤖 Generated with Claude Code