agentleFS
maister-devmaister-dev/maister/.agents/skills/aif-rules-check/SKILL.md

aif-rules-check

Skill10 starsChanged 6 months agoMITView on GitHub

Run a standalone read-only rules compliance gate against changed files or a git ref. Use when you need a dedicated project-rules check without a full review or verify pass.

3 other projects use a version of this, 2 of them edited.

Adopted by

Most recently taken up by

The file

Show its rules and text

We split this skill into the rules it gives an agent

28 rules. About 0 are common, 13 are distinctive, and 15 are very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈13

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 15

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    Run a standalone read-only rules gate for project rules.

    line 15
  2. Distinctive:

    Treat it as the canonical source for verdict semantics and report structure.

    line 20
  3. Distinctive:

    If examples in this file drift from the reference, follow the reference.

    line 21
  4. Very specific:

    FIRST: Read .ai-factory/config.yaml if it exists to resolve:

    line 25
  5. Very specific:

    Treat any unknown value as slug.

    line 40
  6. Distinctive:

    If config is missing or partial, use defaults:

    line 42
  7. Very specific:

    If paths.rules_file is missing from config, default to .ai-factory/RULES.md instead of treating config as incomplete.

    line 52
  8. Very specific:

    If git.base_branch is missing from config, resolve the repository default branch from git metadata when possible.

    line 53
  9. Distinctive:

    Treat them as project-level overrides for this skill's general instructions.

    line 63
  10. Distinctive:

    When a skill-context rule conflicts with a general rule in this file, the skill-context rule wins.

    line 64
  11. Distinctive:

    When there is no conflict, apply both.

    line 65
  12. Distinctive:

    Enforcement: Before presenting the final report, verify it against all skill-context rules and fix any drift.

    line 68
  13. Distinctive:

    If nothing is staged, fall back to working tree:

    line 107
  14. Very specific:

    If there is still no local diff and git.enabled = true, fall back to branch diff:

    line 112
  15. Very specific:

    If there are still no changed files, return WARN rather than a hard failure.

    line 118
  16. Distinctive:

    Use changed file paths, folder names, and optional plan context to judge relevance.

    line 129
  17. Very specific:

    If relevance is ambiguous, mention the rule source as uncertain and keep the outcome at WARN, not FAIL.

    line 130
  18. Very specific:

    If no rules sources resolve, return WARN rather than a hard failure.

    line 132
  19. Very specific:

    when workflow.plan_id_format = sequential, glob first paths.plans/[0-9][0-9][0-9][0-9]_<branch_stem>.md and pick the highest-numbered match.

    line 145
  20. Distinctive:

    Do not fail the rules check because a plan file is missing or ambiguous.

    line 154
  21. Distinctive:

    Read the changed files from the resolved scope and compare them against the resolved rules.

    line 158
  22. Very specific:

    Only return FAIL when an explicit hard rule is clearly violated by the inspected diff or changed files.

    line 165
  23. Very specific:

    If a rule sounds like a preference, is too vague, or cannot be verified confidently from the diff, do not escalate it past WARN.

    line 169
  24. Distinctive:

    If rules are missing, stale, or need refinement:

    line 176
  25. Very specific:

    Use the exact verdict semantics and section order from references/RULES-CHECK-CONTRACT.md.

    line 182
  26. Distinctive:

    When useful, suggest the next best workflow:

    line 193
  27. Very specific:

    Use "blocking": true|false.

    line 202
  28. Very specific:

    Do not use $aif-review in the JSON suggested_next.command.

    line 206

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Rules Compliance Gate

Run a standalone read-only rules gate for project rules. This command checks rule compliance only; it does not replace $aif-review or $aif-verify.

Step 0: Load Contract

  • Read references/RULES-CHECK-CONTRACT.md first.
  • Treat it as the canonical source for verdict semantics and report structure.
  • If examples in this file drift from the reference, follow the reference.

Step 1: Load Config

FIRST: Read .ai-factory/config.yaml if it exists to resolve:

  • paths.rules_file
  • paths.rules
  • paths.plan
  • paths.plans
  • language.ui
  • git.enabled
  • git.base_branch
  • rules.base
  • named rules.<area> entries
  • workflow.plan_id_format (default: slug) — used by the optional branch-based plan-context lookup in Step 2.3. Active values: slug and sequential. When sequential, the resolver globs <paths.plans>/[0-9]{4}_<branch_stem>.md first and falls back to <paths.plans>/<branch_stem>.md only if no numbered match is found. timestamp and uuid are reserved values and currently behave like slug. Treat any unknown value as slug.

If config is missing or partial, use defaults:

  • paths.rules_file: .ai-factory/RULES.md
  • paths.rules: .ai-factory/rules/
  • paths.plan: .ai-factory/PLAN.md
  • paths.plans: .ai-factory/plans/
  • git.enabled: true
  • git.base_branch: detect the repo default branch from git metadata; fall back to main only when detection is unavailable
  • rules.base: .ai-factory/rules/base.md
  • workflow.plan_id_format: slug

If paths.rules_file is missing from config, default to .ai-factory/RULES.md instead of treating config as incomplete. If git.base_branch is missing from config, resolve the repository default branch from git metadata when possible; use main only as the final fallback.

Step 1.1: Load Skill Context

Read .ai-factory/skill-context/aif-rules-check/SKILL.md - MANDATORY if the file exists.

This file contains project-specific rules accumulated by $aif-evolve from patches, codebase conventions, and tech-stack analysis. These rules are tailored to the current project.

How to apply skill-context rules:

  • Treat them as project-level overrides for this skill's general instructions.
  • When a skill-context rule conflicts with a general rule in this file, the skill-context rule wins.
  • When there is no conflict, apply both.
  • Skill-context rules apply to all outputs of this skill, including verdict wording and report structure.

Enforcement: Before presenting the final report, verify it against all skill-context rules and fix any drift.

Step 2: Resolve Inputs

Resolve two inputs before checking any rule:

  1. Changed scope - the diff and file list you are evaluating
  2. Resolved rule sources - the rule artifacts that may apply to that scope

Step 2.1: Resolve Changed Scope

If the user provided a git ref:

  1. Validate it first:
    git rev-parse --verify <argument>
  2. If valid, use:
    git diff --name-only <argument>...HEAD
    git diff <argument>...HEAD
  3. If invalid, ask:

    AskUserQuestion: `<argument>` is not a valid git ref. What should I check instead?
    
    Options:
    1. Check staged / working-tree changes
    2. Cancel

Without arguments:

  1. Prefer staged work:
    git diff --cached --name-only
    git diff --cached
  2. If nothing is staged, fall back to working tree:
    git diff --name-only
    git diff
  3. If there is still no local diff and git.enabled = true, fall back to branch diff:
    git diff --name-only <resolved-base-branch>...HEAD
    git diff <resolved-base-branch>...HEAD

If there are still no changed files, return WARN rather than a hard failure.

Step 2.2: Resolve Rule Sources

Load rule sources in this order:

  1. The resolved paths.rules_file artifact
  2. The resolved rules.base file
  3. Any named rules.<area> files from config that clearly match the changed scope

Area rules are optional and scoped:

  • Use changed file paths, folder names, and optional plan context to judge relevance.
  • If relevance is ambiguous, mention the rule source as uncertain and keep the outcome at WARN, not FAIL.

If no rules sources resolve, return WARN rather than a hard failure.

Step 2.3: Optional Plan Context

Optional plan context: use the active plan file only when it helps interpret scope or area relevance; absence of a plan is never a failure.

Plan resolution order:

  1. Compute the canonical branch stem the same way as $aif-plan, $aif-implement, and $aif-improve:
    • get current branch via git branch --show-current (git mode only);
    • branch_stem = current branch with every / replaced by - (for example feature/user-auth → feature-user-auth).
  2. Branch-based lookup using <branch_stem>:
    • when workflow.plan_id_format = sequential, glob first paths.plans/[0-9][0-9][0-9][0-9]_<branch_stem>.md and pick the highest-numbered match; emit a WARN [aif-rules-check] multiple sequential plans for <branch>: <list>; using <chosen> if more than one matches;
    • otherwise (or no numbered match), fall back to paths.plans/<branch_stem>.md.
  3. A single named full plan in paths.plans (the leading NNNN_ prefix counts as a match) when no branch-based plan resolves.
  4. The fast plan at paths.plan.

Do not fail the rules check because a plan file is missing or ambiguous.

Step 3: Evaluate Rules

Read the changed files from the resolved scope and compare them against the resolved rules.

Classification rules:

  • PASS when at least one applicable rule was checked and no clear violations were found.
  • WARN when no applicable rules were resolved, the evidence is ambiguous, or there are no changed files to evaluate.
  • FAIL when an explicit hard rule is clearly violated by the inspected diff or changed files.

Only return FAIL when an explicit hard rule is clearly violated by the inspected diff or changed files.

Evidence rules:

  • Tie every blocking violation to specific rule text and at least one concrete file/path or diff hunk.
  • If a rule sounds like a preference, is too vague, or cannot be verified confidently from the diff, do not escalate it past WARN.
  • Missing optional files or partially configured rules hierarchy are WARN, not FAIL.

Step 4: Read-Only Boundary

This command is read-only: do not edit RULES.md, rules/base.md, rules.<area>, plan files, or source code.

If rules are missing, stale, or need refinement:

  • Suggest $aif-rules <rule text> for axioms
  • Suggest $aif-rules area:<name> for area-specific rules

Step 5: Output

Use the exact verdict semantics and section order from references/RULES-CHECK-CONTRACT.md.

Required content:

  • overall verdict
  • files checked
  • gate results
  • blocking violations
  • suggested fixes
  • suggested rule updates
  • final machine-readable aif-gate-result fenced JSON block

When useful, suggest the next best workflow:

  • $aif-review for broader code review
  • $aif-verify for full plan-completeness verification
  • $aif-rules when the underlying rules need to be captured or corrected

Machine-readable gate result:

  • Append one final fenced aif-gate-result JSON block after the human-readable rules report.
  • Use "gate": "rules".
  • Map the human rules verdict exactly: PASS -> pass, WARN -> warn, and FAIL -> fail.
  • Use "blocking": true|false; set it to true only for explicit hard-rule violations that produce a human FAIL.
  • Include only hard-rule violations in "blockers": [.
  • Include changed or inspected paths in "affected_files": [.
  • Set "suggested_next": { to $aif-rules when rules should be added or clarified, $aif-fix when code must change, or null when no allowed next command fits.
  • Do not use $aif-review in the JSON suggested_next.command; it may appear only in human-readable workflow suggestions.
{
  "schema_version": 1,
  "gate": "rules",
  "status": "warn",
  "blocking": false,
  "blockers": [],
  "affected_files": [],
  "suggested_next": {
    "command": "$aif-rules",
    "reason": "Rules are missing or ambiguous for the changed scope."
  }
}

Schema reminder: "status": "pass|warn|fail", "blocking": true|false, "blockers": [, "affected_files": [, "suggested_next": {.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.