Rules
| # | Rule | Category | Description |
|---|---|---|---|
| 1 | dir_absent | Existence | Directory counterpart of file_absent. |
| 2 | dir_exists | Existence | Directory counterpart of file_exists. |
| 3 | file_absent | Existence | No file matching paths may exist in the walked tree. |
| 4 | file_exists | Existence | Every glob match in paths must correspond to a real file. |
| 5 | file_content_forbidden | Content, Security / Unicode sanity | File contents must NOT match a regex. |
| 6 | file_content_matches | Content | File contents must contain at least one match for a regex. |
| 7 | file_ends_with | Content | Byte-level prefix / suffix check. |
| 8 | file_footer | Content | Last lines lines of each file in scope must match a regex. |
| 9 | file_hash | Content, Security / Unicode sanity | Content SHA-256 must equal the expected digest. |
| 10 | file_header | Content | The first N lines must match a regex (line-oriented). |
| 11 | file_is_ascii | Content, Encoding, Security / Unicode sanity | Every byte in the file must be < 0x80 (pure ASCII), except codepoints listed in allow. |
| 12 | file_is_text | Content, Encoding | Content is detected as text (magic bytes + UTF-8 validity check), fails on binary files matched by paths. |
| 13 | file_max_lines | Content, Structure | File must have at most max_lines lines, using the same accounting as file_min_lines. |
| 14 | file_max_size | Content, Structure | File must be at most max_bytes in size. |
| 15 | file_min_lines | Content, Structure | File must have at least min_lines lines (\n-terminated, with an unterminated trailing segment counting as one more, wc -l semantics). |
| 16 | file_min_size | Content, Structure | File must be at least min_bytes in size. |
| 17 | file_shebang | Content, Unix metadata | First line of each file in scope must match the shebang regex. |
| 18 | file_starts_with | Content | Byte-level prefix / suffix check. |
| 19 | dotenv_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 20 | dotenv_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 21 | dotenv_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 22 | hcl_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 23 | hcl_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 24 | hcl_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 25 | ini_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 26 | ini_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 27 | ini_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 28 | json_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 29 | json_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 30 | json_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 31 | json_schema_passes | Structured query | Validate every JSON / YAML / TOML / XML / dotenv / properties / INI / HCL file in paths against a JSON Schema document. |
| 32 | properties_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 33 | properties_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 34 | properties_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 35 | toml_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 36 | toml_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 37 | toml_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 38 | xml_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 39 | xml_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 40 | xml_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 41 | yaml_path_absent | Structured query | Assert a JSONPath query over the document matches nothing; one file-level violation if present. |
| 42 | yaml_path_equals | Structured query | Query a structured document with a JSONPath expression and assert every match deep-equals the supplied value. |
| 43 | yaml_path_matches | Structured query | Same shape as the *_equals variants, but the asserted value is a regex matched against string values. |
| 44 | filename_case | Naming | Basename (stem only or full) matches a case convention: snake, kebab, pascal, camel, screaming-snake, flat, lower, upper. |
| 45 | filename_regex | Naming | Basename matches a regex. |
| 46 | final_newline | Text hygiene | File must end with a single \n. |
| 47 | indent_style | Text hygiene | Every non-blank line indents with the configured style (tabs or spaces). |
| 48 | line_endings | Text hygiene, Portable metadata | Every line ending matches target: lf or crlf. |
| 49 | line_max_width | Text hygiene | Cap line length in characters (not bytes, code points). |
| 50 | max_consecutive_blank_lines | Text hygiene | Cap runs of blank lines to max. |
| 51 | no_trailing_whitespace | Text hygiene | No line may end with space or tab. |
| 52 | no_bidi_controls | Security / Unicode sanity, Encoding | Flag Trojan-Source bidi override characters (U+202A 202E, U+2066 2069). |
| 53 | no_merge_conflict_markers | Security / Unicode sanity, Text hygiene | Flag <<<<<<<, =======, >>>>>>>, ||||||| markers at the start of a line, almost always left over from an unresolved merge. |
| 54 | no_zero_width_chars | Security / Unicode sanity, Encoding | Flag body-internal zero-width characters (U+200B, U+200C, U+200D, and non-leading U+FEFF). |
| 55 | no_bom | Encoding, Text hygiene | Flag a leading UTF-8 / UTF-16 LE/BE / UTF-32 LE/BE byte-order mark. |
| 56 | max_directory_depth | Structure | Tree depth from repo root may not exceed max_depth. |
| 57 | max_files_per_directory | Structure | Per-directory fanout may not exceed max_files. |
| 58 | no_empty_files | Structure | no_empty_files rule in alint''s structure family. |
| 59 | no_case_conflicts | Portable metadata, Naming | Flag paths that differ only by case (e.g. README.md + readme.md). |
| 60 | no_illegal_windows_names | Portable metadata, Naming | Reject path components Windows can''t represent. |
| 61 | executable_bit | Unix metadata | Assert every file in scope either has the +x bit set (require: true) or does not (require: false). |
| 62 | executable_has_shebang | Unix metadata, Content | Every file with +x set must begin with #! |
| 63 | no_symlinks | Unix metadata, Portable metadata, Security / Unicode sanity | Flag tracked paths that are symbolic links. |
| 64 | shebang_has_executable | Unix metadata, Content | Every file starting with #! must have +x set. |
| 65 | changeset_requires_path | Git hygiene, Cross-file | The <since>...HEAD diff must add (git status A) at least one path matching add_glob:, the "did you add a changelog entry?" gate. |
| 66 | commented_out_code | Git hygiene, Content | Heuristic detector for blocks of commented-out source code (as opposed to prose comments, license headers, doc comments, or ASCII banners). |
| 67 | git_blame_age | Git hygiene | Fire on lines matching a regex whose git blame author-time is older than max_age_days. |
| 68 | git_commit_author_allowlist | Git hygiene, Security / Unicode sanity | Assert every commit author in scope matches an allowed email and/or name pattern. |
| 69 | git_commit_gpg_signed | Git hygiene, Security / Unicode sanity | Assert every commit in scope has a verifying signature (git verify-commit exits 0). |
| 70 | git_commit_message | Git hygiene | Validate commit-message shape via regex, max-subject-length, or required-body. |
| 71 | git_commit_no_fixup | Git hygiene | Fail on residual fixup! / squash! / amend! commits left in scope, the ones git commit --fixup / --squash produce, meant to be collapsed by. |
| 72 | git_commit_signed_off | Git hygiene | Assert every commit in scope carries a DCO (Developer Certificate of Origin) Signed-off-by: trailer, required by every CNCF / Linux. |
| 73 | git_commit_subject_matches | Git hygiene | Each commit''s subject line (the first line of its message) must match the matches: regex, the subject-grammar member of the commit family. |
| 74 | git_no_denied_paths | Git hygiene, Security / Unicode sanity | Fire when any tracked file matches a configured glob denylist. |
| 75 | markdown_paths_resolve | Git hygiene, Cross-file | Validate that backticked workspace paths in markdown files resolve to real files or directories in the repo. |
| 76 | no_submodules | Git hygiene | Flag the presence of .gitmodules at the repo root, always, regardless of paths. |
| 77 | pair_changed_together | Git hygiene, Cross-file | If the <since>...HEAD diff changes any path matching if_changed:, at least one path matching then_changed: must change in the same range. |
| 78 | command_idempotent | Cross-file | Run a user-declared formatter/checker in its --check (idempotence) mode once: exit 0 => the tree is formatter-clean (silent); non-zero. |
| 79 | cross_file | Cross-file | A source must hold a relation to one or more targets (or, for resolves, the filesystem). |
| 80 | dir_contains | Cross-file, Structure | Every directory matching select: must contain files matching every glob in require. |
| 81 | dir_only_contains | Cross-file, Structure | Every direct-child file of a directory matching select: must match at least one glob in allow. |
| 82 | every_matching_has | Cross-file | For every file or directory matching select:, every nested rule under require: must be satisfied. |
| 83 | file_graph | Cross-file | Assemble the repo''s file -> file reference graph and assert a global structural property the 1-level cross-file kinds can''t express. |
| 84 | for_each_dir | Cross-file | For every matching directory / file, evaluate a nested require: block with the entry as context. |
| 85 | for_each_file | Cross-file | For every matching directory / file, evaluate a nested require: block with the entry as context. |
| 86 | for_each_match | Cross-file | For each line matching select (a regex), the line must satisfy the nested require: predicates. |
| 87 | generated_file_fresh | Cross-file, Security / Unicode sanity | A committed artefact must equal what a declared command generator produces, in one of two modes (exactly one of file / outputs). |
| 88 | import_gate | Cross-file, Security / Unicode sanity | Forbid imports whose extracted target matches a forbid regex, within the paths scope, an architectural import firewall. |
| 89 | ordered_block | Cross-file, Text hygiene | The lines between a start / end marker pair must stay sorted (and, with unique: true, free of duplicates) under comparator. |
| 90 | pair | Cross-file | For every file matching primary, a file matching the partner template must exist. |
| 91 | pair_hash | Cross-file, Security / Unicode sanity | The algorithm digest (sha256 default / sha512) of every file matching source must appear in the single target file, either as an embedded. |
| 92 | registry_paths_resolve | Cross-file | A manifest file enumerates path entries; each must resolve to an on-disk artefact. |
| 93 | unique_by | Cross-file | No two files matching select may share the value of key (a path template; tokens {path}/{dir}/{basename}/{stem}/{ext}/{parent_name}). |
| 94 | command | Plugin (tier 1) | Shell out to an external CLI per matched file. |
No rules match that filter.