DSL
Lint codes
Every finding `POST /programs/lint` can report.
E… codes block publishing a version; W… codes are advisory and show as warnings. POST /programs/lint, kaab programs lint and the builder report the same findings, each with the JSON path of the key it is about.
| Code | Severity | Rule |
|---|---|---|
| E001 | error | unknown key or wrong type |
| E002 | error | loop_until/scroll.until/paginate without max/max_pages |
| E003 | error | evaluate without timeout_ms or max_result_bytes within limits |
| E004 | error | target/field has no locator key |
| E005 | error | more than one locator key without candidates |
| E006 | error | duplicate step id |
| E007 | error | template references unknown inputs/vars |
| E008 | error | invalid field name or reserved $ key |
| E009 | error | invalid regex / glob / JSONPath |
| E010 | error | paginate extract has no many:true field |
| E011 | error | side_effect step with retry or optional |
| E012 | error | nesting depth > 3, > 200 steps, > 256 KB, > 500 extract fields or nested deeper than 32 |
| E013 | error | secret input used in extract or rendered into a URL |
| E014 | error | download.name or read_pdf.artifact renders to no usable artifact name |
| W001 | warning | goto/click without expect |
| W002 | warning | locator list contains only structural/positional candidates (rank ≤ 20) |
| W003 | warning | sleep used |
| W004 | warning | side_effect step not followed by a checkpoint before the next side effect |
| W005 | warning | type: number|money without locale/decimal and sample contains both . and , |
| W006 | warning | evaluate present (healing-opaque) |
| W007 | warning | await_input with collect: hosted but no hosted.notify |
| W008 | warning | {{vars.x}} read after a block that sets x on one branch only |
| W009 | warning | top-level extract alongside an extract step that writes data (nested ones included) |
| W010 | warning | read_pdf with no earlier goto or download that could produce a PDF |