Skip to content

Validation rules ​

validate (the tool, or brindley validate) reports problems with file and line. Errors make brindley validate exit 1; warnings don't. Pass rules: [...] to the tool to see only some.

Errors ​

RuleMeaning
parseFront-matter doesn't parse, or an initiative outside a status folder has none.
status-missingNo status — and no status folder to take it from. When the body states one, status-inferable says which; otherwise the message quotes what the body says, if anything.
status-invalidA status word that isn't a core status, an alias, or mapped with statuses:.
duplicate-numberTwo initiatives in one collection share a number. When one file's name is the other's plus a suffix (24-booking-window-rationale.md), it is treated as a companion note: the finding suggests moving it into the initiative's asset folder, or the ignore pattern that leaves it in place.
cycleDependencies loop back on themselves. Often one link is a back-reference ("depended on by"): move it to ## Related, or to ## See also for a plain link.
dangling-refsuperseded_by refers to an initiative that doesn't exist.
dateupdated isn't an ISO date.
superseded-bySuperseded, with nothing saying by what (a warning for files in a superseded/ folder).
duplicate-collectionTwo collections have the same name; give one a name:.
alias-clashA name or alias is used by more than one collection.
alias-formatA name or alias contains characters that can't be used in references.
collection-statusA collection status other than active, done or abandoned.
dimension-valueA scoring dimension value that isn't one of its declared values.
dimension-declarationA dimensions: entry with no values, a repeated value, a default that isn't one of them, or a reserved name like status.
duplicate-themeTwo overview docs claim the same theme.

Warnings ​

RuleMeaning
designed-open-questionsDesigned, but blocking questions remain.
dimension-missingA required scoring dimension has no value.
abandoned-reasonAbandoned, with no reason recorded (status_note) — unless the status comes from a status folder.
status-inferableNo status recorded, but a **Status:** line or ## Status section states one that maps to a core status — record it with update (status: …), or many at once with batch_update (status: "from-text"). Free text isn't read.
branch-missingIn progress on a branch that doesn't exist, locally or as a remote-tracking branch.
readme-columnsA collection README's columns: names an unknown table or column, or isn't a list; unknown columns are left out.
graph-settingA collection README's graph: has an unknown setting or a value it can't use.
open-questionsIn progress or done, with questions still open.
docs-impactDone, with no docs_impact recorded.
status-folder-mismatchFront-matter says one status, the folder another.
status-not-in-folderThe file isn't where its status belongs: with folders: declared, a listed status in its folder and everything else at the top (tidy moves it); otherwise, the collection keeps this status in a folder (e.g. done in completed/) but this file is elsewhere.
report-settingA collection README's report: has an unknown setting, a size that isn't a scoring dimension, points for a value the dimension doesn't have, word values without points, or labels the report doesn't use.
folders-settingA collection README's folders: lists something that isn't a status, or a value that isn't a plain folder name.
status-prose-mismatchThe body's "Status:" line disagrees with the actual status.
broken-linkA link target doesn't exist — with where the file is now, if it moved; the repo path a ../ link resolves to; and the worktree that has it, if another one does.
front-matter-dependenciesdepends_on / related in front-matter, which are ignored; use the sections.
number-paddingA number padded differently from the rest of its collection (e.g. 9- among 01-, 02-). repad makes them consistent.
number-widthThe collection's highest number has reached 80% of its padding width (8, 80, 800 …): repad to one digit more.
orphan-assetsAn asset folder whose number matches no initiative.
spike-measuresA designed spike without ## Measures.
spike-findingsA finished spike without ## Findings.
type-unknownA type the collection doesn't declare.
tag-format / tag-unknownA tag that isn't kebab-case, or isn't declared.
readme-staleA generated README block is out of date.
collection-done-openA collection marked done with open initiatives.
nested-collectionA collection inside another collection's folder.

With docs: true, project docs are linted too (see check_docs).

Paths and worktrees ​

Brindley works on the git checkout it was started in. Errors about a path you give a tool (a reference by path, a collection folder, a docs_impact path) name that checkout. When another worktree of the repository has the missing file, the message says which one — usually the sign that the server was started in a different checkout from the one being changed. Call use_worktree with that worktree's path to switch the server to it.

MIT licensed · Named after James Brindley, engineer of the Bridgewater Canal