Skip to main content
manual page/ Reference

Checks

sourceSource: suspec/docs/reference/checks.mdModified: 2026-06-30
Sections
13
Format
Markdown
Order
24 / 156

Checks catch common Suspec mistakes.

Use this page as a review checklist.

suspec check implements the toolable subset. The CLI command catalogue is the source for what ships today.

Honesty levels

LevelMeaning
conventionexpected practice; not checked
checklistreviewer inspects it
toolablea tool can check it
enforceda configured gate blocks on it

This docs repo enforces nothing by itself.

Core checks

IDNameCheckSeverity
C001unique-idsRequirement IDs are unique within a file.hard
C002duplicate-idNo other workspace file uses the same frontmatter id:. Requirement IDs are spec-scoped.hard
C003verify-withEvery requirement has Verify with: or VERIFY BY.hard
C004one-strength-wordEach requirement uses one binding word.warning
C005non-goals-presentNon-goals section exists and is non-empty.warning
C006open-questions-presentOpen questions section exists, even if it says None.warning
C007no-tbd-at-readystatus: ready has no TBD, TODO, ???, or blocking open question.hard
C008sources-namedFrontmatter sources: names at least one origin.warning
C009broken-source-linkWorkspace paths and cross-reference IDs resolve.hard
C010preserves-refs-resolveChange-plan preserves: entries resolve to requirements or PG-NNN.hard
C011waves-presentMigration, rewrite, and schema-change plans have waves with verify steps.warning
C012coverageReview coverage rows match the task scope and source spec.warning
C013verify-evidence-bindingStructured verify blocks match the requirement command and row result.warning
C014do-not-change-touchedChanged files are reconciled against Do not change.warning
C015citation-resolves[[KEY]] citations resolve to anchors in the named sources.md.warning
C016pass-needs-evidenceA Pass row with empty evidence is invalid.hard
C017orphaned-referenceA bundled skill reference file is not named by its sibling SKILL.md.warning

Notes:

  • AC-NNN IDs are unique within a spec, not across the workspace. Cross-spec references use SPEC-id#AC-NNN.
  • A Verify with: command that does not exist yet is not a spec defect. The requirement is Unverified until evidence exists.
  • The oversized-packet size band is specified-not-shipped. suspec review reports diff size as neutral information.

Workspace validity

A valid workspace has:

  • populated AGENTS.md
  • core templates present
  • at least one spec that passes core checks

Keep live AGENTS.md and board files free of {{placeholder}} text. Templates may keep placeholders.

Task and review packet checks

CheckRule
non-empty-pasteCompletion claims need pasted output or a CI link.
no-open-criticalTerminal task or review status has no unresolved blocking question.
trigger-coverageHuman attention considered every trigger class or marked it n/a.
verify-evidence-bindingStructured evidence matches its requirement row and command.

Writing watchlist

These words are allowed only when the same line makes them checkable.

FamilyExamplesBetter form
subjectiverobust, clean, simple, intuitivestate observable behavior
quality without measurefast, secure, reliablegive threshold or named test
vague verbshandle, support, improvename actor, action, object
loopholeswhere feasible, if practicalmake it required or remove it
ambiguous qualifierssignificant, minimalquantify
comparativesbetter, fastername baseline and margin
broad quantifiersall, any, every, somename the exact set
bundlingand, or, and/orsplit requirements
vague referencesit, this, abovename the thing

SOL checks

SOL-specific checks apply only to specs with format: sol.

The core C checks apply to both plain and SOL specs.

SOL-specific codes are the reference contract. Use the CLI catalogue to confirm which are implemented in your installed version.

Structure

CodeCheck
SOL-S001trigger without actor line
SOL-S002unknown block type or clause
SOL-S003actor line missing strength word
SOL-S004duplicate block ID
SOL-S005ID prefix does not match block type
SOL-S006SHOULD or SHOULD NOT lacks BECAUSE or EXCEPT
SOL-S007malformed header
SOL-S008metadata or prose before first control line
SOL-S010unknown metadata field
SOL-S011recognized block type with no ID
SOL-S012required spec section missing or out of order
SOL-S013hidden control or homoglyph characters
SOL-S014required clause missing

Prose

CodeCheck
SOL-P001condition has no consequence
SOL-P002actor missing
SOL-P003strength word missing or lowercase
SOL-P004multiple behaviors in one clause
SOL-P005watchlist word without same-line criterion
SOL-P006undefined term
SOL-P007bare MUST NOT with no affirmative behavior
SOL-P008uncertainty left in requirement prose
SOL-P050pronoun has no unique antecedent
SOL-P051passive voice hides actor
SOL-P052sentence is too long
SOL-P053not present tense / active voice
SOL-P054decorative phrase adds no constraint
SOL-P055repeated context adds nothing
SOL-P056comparative has no baseline
SOL-P057term drifts from glossary
SOL-P058SHALL used as a strength word

Cross-reference

CodeCheck
SOL-M001actor, object, surface, or ID resolves nowhere
SOL-M002direct contradiction
SOL-M003DEPENDS ON, IMPLEMENTS, or PRESERVES reference missing
SOL-M004lower-authority file weakens higher-authority requirement

Verification

CodeCheck
SOL-V001requirement, constraint, invariant, or interface lacks VERIFY BY
SOL-V002VERIFY BY target does not resolve
SOL-V003evidence cannot observe the claim
SOL-V004pass recorded against changed text or code
SOL-V005invalid result or lifecycle marker
SOL-V006interface not verified by contract check
SOL-V007lifecycle marker on wrong result
SOL-V008required binding has no result
SOL-V009unknown evidence type
SOL-V010manual or waived result lacks named human
SOL-V011evidence does not state what it exercised

Splitting

CodeCheck
SOL-O001parallel tasks write same files
SOL-O002dependency cycle
SOL-O003blocking question reaches task split
SOL-O004requirement lacks write/read scope
SOL-O005task writes outside scope
SOL-O006imported file duplicates policy requirement
SOL-O007requirement assigned to no task
SOL-O008requirement assigned to two implementing tasks

Severity split

Hard:

  • C001, C002, C003, C007, C009, C010, C016
  • all SOL-S
  • SOL-P001-SOL-P008
  • all SOL-M
  • SOL-V001, SOL-V002, SOL-V004-SOL-V010
  • SOL-O001, SOL-O002, SOL-O003, SOL-O005, SOL-O007, SOL-O008

Warning:

  • C004, C005, C006, C008, C011, C012, C013, C014, C015, C017
  • SOL-P050-SOL-P058
  • SOL-V003, SOL-V011
  • SOL-O004, SOL-O006

Teams may promote warnings to blocking in their own gates.

Starter kit: Set up a workspace