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.
62
75%
Does it follow best practices?
Run evals on this skill
Adds up to 20 points to the overall score
View guide
Passed
No findings from the security scan
Fix and improve this skill with Tessl
tessl review fix ./skills/aif-rules-check/SKILL.mdRun a standalone read-only rules gate for project rules. This command checks rule compliance only; it does not replace /aif-review or /aif-verify.
references/RULES-CHECK-CONTRACT.md first.FIRST: Read .ai-factory/config.yaml if it exists to resolve:
paths.rules_filepaths.rulespaths.planpaths.planslanguage.uigit.enabledgit.base_branchrules.baserules.<area> entriesworkflow.plan_id_format (default: slug) — used by the optional branch-based plan-context lookup in Step 2.3.
Active values: slug and sequential. Plan context may be a root full-plan
file or direct child ultra index.md; numbered lookup covers both shapes.
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.mdpaths.rules: .ai-factory/rules/paths.plan: .ai-factory/PLAN.mdpaths.plans: .ai-factory/plans/git.enabled: truegit.base_branch: detect the repo default branch from git metadata; fall back to main only when detection is unavailablerules.base: .ai-factory/rules/base.mdworkflow.plan_id_format: slugIf 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.
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:
Enforcement: Before presenting the final report, verify it against all skill-context rules and fix any drift.
Resolve two inputs before checking any rule:
If the user provided a git ref:
Validate it first:
git rev-parse --verify <argument>If valid, use:
git diff --name-only <argument>...HEAD
git diff <argument>...HEADIf invalid, ask:
AskUserQuestion: `<argument>` is not a valid git ref. What should I check instead?
Options:
1. Check staged / working-tree changes
2. CancelWithout arguments:
git diff --cached --name-only
git diff --cachedgit diff --name-only
git diffgit.enabled = true, fall back to branch diff:
git diff --name-only <resolved-base-branch>...HEAD
git diff <resolved-base-branch>...HEADIf there are still no changed files, return WARN rather than a hard failure.
Load rule sources in this order:
paths.rules_file artifactrules.base filerules.<area> files from config that clearly match the changed scopeArea rules are optional and scoped:
WARN, not FAIL.If no rules sources resolve, return WARN rather than a hard failure.
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:
/aif-plan,
/aif-implement, and /aif-improve:
git branch --show-current (git mode only);branch_stem = current branch with every / replaced by -
(for example feature/user-auth → feature-user-auth).<branch_stem>:
workflow.plan_id_format = sequential, glob both
paths.plans/[0-9][0-9][0-9][0-9]_<branch_stem>.md and
paths.plans/[0-9][0-9][0-9][0-9]_<branch_stem>/index.md; Read every
directory candidate and retain it only when it contains exactly one
<!-- aif:plan-mode:ultra -->, then pick the highest-numbered valid
artifact and warn when multiple valid candidates exist; prefer ultra if
both shapes share the highest prefix;paths.plans/<branch_stem>/index.md and
paths.plans/<branch_stem>.md; Read the directory entrypoint first, ignore
it unless it contains exactly one ultra marker, and warn/prefer ultra if
both valid shapes exist.paths.plans: count root *.md full plans and
direct child */index.md entrypoints containing
<!-- aif:plan-mode:ultra -->; exclude
the resolved fast-plan path and never count phase files.paths.plan.For ultra, read index.md first and only the linked phase files relevant to the
changed area when extra scope detail is needed. Do not fail the rules check
because a plan artifact is missing or ambiguous.
An automatically discovered directory entrypoint counts only when it contains
exactly one <!-- aif:plan-mode:ultra -->; ignore unrelated */index.md files.
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:
WARN.WARN, not FAIL.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:
/aif-rules <rule text> for axioms/aif-rules area:<name> for area-specific rulesUse the exact verdict semantics and section order from references/RULES-CHECK-CONTRACT.md.
Required content:
aif-gate-result fenced JSON blockWhen 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 correctedMachine-readable gate result:
aif-gate-result JSON block after the human-readable rules report."gate": "rules".PASS -> pass, WARN -> warn, and FAIL -> fail."blocking": true|false; set it to true only for explicit hard-rule violations that produce a human FAIL."blockers": [."affected_files": [."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./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": {.
ac92beb
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.