Expand description
Blueprint lint: the checks Blueprint::validate deliberately does not make.
Blueprint::validate answers “is this manifest structurally coherent” - the
layout fits, the graph resolves, fan-out wiring points at real stages. It
says nothing about the fields whose absence quietly changes what a run
does, and those are what actually bite:
- a stage with no
[stages.<name>.model]table parses fine, because the parser substitutes a default, and then runs on whatever the user’s default provider happens to be - an agent-level
[model]block is never read at all, so the author’s model choice is discarded silently - a typo in
available_toolsmatches nothing, and the stage just advertises one tool fewer - the model is told the tool does not exist - an autonomous stage granting
ask_user_textparks inWaitingInputthe first time it asks, with nobody there to answer
Each of those is invisible on inspection and shows up hours later as a stuck run. This module names them at author time instead.
Questions about what the author declared (“is there a mode key?”) are
answered from the manifest text, not from the parsed Blueprint: by then
the parser has already filled in its defaults, and asking the struct cannot
tell “wrote autonomous” apart from “wrote nothing”.
Structs§
- LintEnv
- Facts about the machine the blueprint will run on, which the manifest alone cannot supply.
- Lint
Finding - One thing worth telling the author about.
Enums§
- Lint
Severity - How much a finding matters. Only
LintSeverity::Errorfailslev validate; warnings are printed and the command still exits zero (unless--deny-warningsis passed); notes never fail anything.
Functions§
- lint_
manifest - Lint
blueprint, which was parsed fromcontent.