Skip to Content
User guideReferenceContent rules

Content rules

Both stages run a content-quality linter after their structural gates pass. These linters are advisory: they print findings and exit 0, so nothing here blocks a pipeline run. Pass --strict to exit non-zero on an error-severity finding — no rule in either table below declares one today, so --strict currently changes nothing for either linter — and --json for machine-readable output.

The tables below are generated from the linters’ own rule registries. They cannot describe a rule that does not exist, or miss one that does.

Design rules

Run by lint_design_content.py over .sdlc/design.

RuleSeverityApplies toFieldsWhat it catches
vague-responsibilitywarn / infocomponentresponsibilityA component responsibility uses a vague qualifier with no concrete metric. Demoted to info when the sentence carries a number.
god-componentwarncomponentresponsibilityTwo actions joined by a conjunction in one responsibility — the component is doing two jobs.
error-modes-handwavedwarninterfaceerror_modesAn error mode gestures at failure rather than naming one.
orphan-interfacewarninterfaceidThe contract is provided but consumed by no component. Set-level check: not decidable from a single file.
adr-consequences-one-sidedwarnadrconsequencesConsequences list only upsides; no cost is recorded. A decision with no downside was not a decision.
adr-vague-driverwarn / infoadrdecision_driversA decision driver names no threshold the chosen option can be checked against. Demoted to info when the line carries a number.
adr-option-unexaminedinfoadrconsidered_optionsAn option listed in frontmatter never appears under the 'Considered Options' heading, so it was named but not weighed.
dependency-cyclewarncomponentdepends_onA cycle in the component graph where every individual edge resolves. Set-level check: invisible one file at a time.

Requirements rules

Run by lint_requirements_content.py over .sdlc/requirements.

RuleSeverityApplies toFieldsWhat it catches
vague-qualifierwarn / inforequirementdescription / titleA vague qualifier with no concrete metric. Demoted to info when the sentence carries a number.
compoundwarnrequirementdescriptionMultiple actions joined by a conjunction in one requirement, which cannot be verified or traced as a single unit.
ears-conformancewarnrequirementdescriptionThe description does not match the shape of the EARS pattern the requirement declares.
passive-namelesswarnrequirementdescriptionPassive voice hides the responsible actor.
impl-biasinforequirementdescription / titleAn implementation detail appears in a requirement whose tier should stay solution-free.
glossary-unusedwarnrequirementtermsA glossary term no requirement uses. Set-level check: not decidable from a single file.

Reading a severity

A rule listed as warn / info demotes itself to info when the text it flagged carries a number — a vague word next to a concrete threshold is usually prose, not a missing measurement.

Last updated on