Specline canon 2.8.0 Handbook For agents ↗
Specline · Rules

Rule catalog

Every check Specline can emit, in one place. The engine and specline rules read from the same registry, so a finding can never carry a rule_id the catalog lacks — and the catalog can never drift from what actually fires.

Severity is the line (canon 2.7). error means integrity — a fact that's broken regardless of any opinion about good specs; it fails the gate. warning means advisory — a judgment about whether a spec is good (completeness, sizing, mechanics, build-readiness); it's surfaced for the decider and never blocks. Scoperepo findings consider the whole tree; spec integrity errors quarantine to --changed.

rule_idseverityscopetierfires when
STRUCT-MISSING-SPECerrorspec1a specs/ folder has no spec.md — the constitutive file; the folder is not a spec without it.
FRONTMATTER-UNPARSEABLEerrorspec1spec.md frontmatter is missing or doesn't parse.
FRONTMATTER-SLUG-MISMATCHerrorspec1frontmatter slug doesn't match the directory.
ENUM-INVALIDerrorspec1blast_radius / target_model holds a value outside the allowed set.
RELATION-DANGLINGerrorrepo1a relations.md edge points to a slug that exists nowhere.
LINK-DANGLINGerrorrepo1a relative link under docs/ doesn't resolve.
SLUG-DUPLICATEerrorrepo1a slug appears in more than one of specs/, knowledge/, or archive/ — each slug is a unique identity.
KNOWLEDGE-HAS-STATUSerrorrepo1knowledge/ contains a lifecycle artifact (status.md, open-questions.md).
ARCHIVE-EDITEDerrorrepo1an archived spec is modified (adding one is graduation, allowed) — the audit trail is immutable.
STRUCT-MISSING-RELATIONSwarningspec1a specs/ folder has no relations.md — an auxiliary file.
STATUS-SCHEMAwarningspec1status.md is missing or duplicates a required section.
UNKNOWN-FRONTMATTER-KEYwarningspec1an unrecognized frontmatter key — preserved, not failed (newer canon).
UNKNOWN-SECTIONwarningspec1an unrecognized body section — preserved, not failed.
RELATION-CROSS-REPOwarningrepo1a repo:slug edge — validated weakly, warn only.
RELATION-KILLEDwarningrepo1an edge points to a killed slug — warn only.
GOAL-MISSINGwarningspec1a spec has no `## Goal` — the build loop has no single falsifiable target.
LOOP-BUDGET-INVALIDwarningspec1loop_budget is present but not a positive integer (the autonomy grant).
JUDGEABLE-NO-SECTIONwarningspec1a judgeable acceptance check names no spec section to judge against (B5).
CHECK-RUN-MALFORMEDwarningspec1an agent-loopable item carries `— run:` but not a single backtick-fenced command (v2.8). Absence of the suffix never fires.
SCOPE-EXCEEDS-SIZEwarningspec1size: small but measured size is over suggest_slicing_past — slice it, or declare size: large.
PARENT-HAS-MECHANICSwarningspec1a type: parent carries Behavior or acceptance — a parent is a map, not a plan.
PARENT-NO-SCOPESwarningspec1a type: parent lists no child scopes — a misfiled scope.
CORRECTIONS-MALFORMEDwarningspec1a status.md ## Corrections entry doesn't carry the `<what> — <altitude> — <who caught it>` shape.
CANON-PIN-MISMATCHwarningrepo1the repo's pinned canon (specline.yml / doc-architecture.md) differs from the tool's served canon.
RATIFIED-NO-BLAST-RADIUSwarningspec1a building spec has no blast_radius — build-readiness advice; the risk judgment that routes effort.
RATIFIED-ACCEPTANCE-UNPARTITIONEDwarningspec1a building spec has no agent-loopable acceptance set — the loop has no mechanical exit.
ARCHIVE-NO-ACCEPTANCEwarningrepo1a shipped, archived spec carries no linked acceptance_results — graduation may have skipped its run.
OPEN-QUESTION-INCOMPLETEwarningspec1an open question is missing a decider or default.
OPEN-QUESTION-OVERDUEwarningspec1a building/blocked spec has an open question past its deadline.
STALE-QUARANTINEwarningspec2a building/blocked spec is past stale_after — flagged for a human (B4).
DECIDER-OVER-BUDGETwarningrepo2a decider is over the focus_limit for building or active specs (B7).
COUPLING-CEILINGwarningspec2spec + transitively forced loads exceeds coupling_ceiling% of context_window — too entangled (B2).

This table mirrors specline rules --format json — that command, not this page, is the authoritative machine-readable catalog. Only the nine integrity rules block; everything else is advice the decider weighs. A few canon checks that need git history (specline diff) or aren't built yet (relations-index --fix) are marked planned in the canon.