Finding codes
No. 015Every finding code the engine’s checks raise in cube 0.1.0, with its severity and the rule it enforces. An ERROR makes cube check exit 1, and the git hooks refuse a commit that adds one. A WARN is reported and blocks nothing.
The default severity is the engine’s own. A kit can set another in kit.yml (native_checks), and can raise one from a kit version on. The last severity column shows what the starter kit 0.1.0 gives.
cube check --format agent prints, for each ERROR, the rule, a real fix, what is not a fix, and the act the fix needs.
Engine checks
Section titled “Engine checks”| Code | Default | starter kit | Rule |
|---|---|---|---|
PARSE_ERROR |
ERROR | ERROR | every YAML file and markdown front matter loads; an impossible date is a parse error too |
ID_DUPLICATE |
ERROR | ERROR | an id is unique in its scope |
NUMBER_COLLISION |
ERROR | ERROR | a number is used once per parent and never reused |
REF_DANGLING |
ERROR | ERROR | every *_ref path and id reference resolves |
STATE_UNKNOWN |
ERROR | ERROR | a status is a state of its lifecycle or enum |
GENERATED_TRACKED |
ERROR | ERROR | generated files are git-ignored and untracked |
TLDR_MISSING |
WARN | ERROR | the files the kit names carry a tl;dr |
COMPANION_MISSING |
WARN | ERROR | each file of a kind has its companion files beside it |
ID_AMBIGUOUS |
WARN | ERROR | a reference names one node; an id that nodes in two apps hold is qualified |
STALE_TOKEN |
WARN | ERROR | retired vocabulary stays out of current files |
REAL_ADDRESS |
WARN | ERROR | only reserved test domains appear in email addresses |
LINK_DANGLING |
WARN | ERROR | a symbolic link resolves on this machine |
LINK_SELF |
WARN | ERROR | a link never points into its own tree, so following it never loops |
LINK_ABSOLUTE |
WARN | ERROR | a link is relative, so it resolves on every machine |
YAML_11_AMBIGUOUS |
WARN | WARN | a bare yes, no, on or off is a boolean in YAML 1.1 and a string in YAML 1.2 |
YAML_DUPLICATE_KEY |
WARN | WARN | a mapping holds each key once; PyYAML keeps the last value without a word |
SYMLINK_NOT_FOLLOWED |
WARN | WARN | Cube never follows a link to a folder, where Python’s Path.glob would |
SKILL_STALE |
WARN | WARN | the installed agent skill is what this cube renders: its engine version, command list, finding codes and the kit’s acts |
EDGE_MISSING |
WARN | WARN | a file names every target its kit or pack requires (edges[].required) |
SHORTCUT_SUPPRESS |
ERROR | ERROR | no check is switched off where it stands: no suppression marker, no new allow-list entry |
SHORTCUT_RULE_WEAKENED |
ERROR | ERROR | kit.yml judges at least what it judged at HEAD |
SHORTCUT_EVIDENCE_REMOVED |
ERROR | ERROR | evidence stays: tests, fixtures, ledger artifacts and the files findings point at are not deleted or archived to clear a finding |
SHORTCUT_TEST_EDITED |
ERROR | ERROR | a test’s expected output does not change in the commit that changes the code it tests |
SHORTCUT_PLACEHOLDER |
ERROR | ERROR | a required field holds a real answer, not TBD, TODO, n/a, an empty value or a copy of another field |
SHORTCUT_RESOLVED_EMPTY |
ERROR | ERROR | an open question marked resolved carries its resolution |
SHORTCUT_GUARD_OVERRIDE |
ERROR | ERROR | guards stay on: no KB_ALLOW_DROP, –allow-drop or –force, and a generated file is written by its tool only |
SHORTCUT_HOOK_BYPASS |
ERROR | ERROR | every commit since adoption carries a valid Cube-Checked stamp from the hooks |
SHORTCUT_FORGED_TRAILER |
ERROR | ERROR | every Cube-* trailer matches its commit: Cube-Migrate a real step, Cube-Move its moves and their rewrites only, Cube-Act what its tree supports; Cube-Checked is the hook’s |
HUMAN_ONLY_BY_AGENT |
WARN | WARN | a rule change, the clearing of a bypass and a change to the code that judges commits (_kit/tools/**, .cube/**, the hook shims, the kit lock) are a person’s acts, in a commit signed with that person’s key; the alpha records them with this warning and verifies no signature yet |
KIT_CHECKS_SKIPPED |
WARN | WARN | the kit’s own checks run only through an interpreter that passes the ownership check; on a system with no form of that check yet (macOS and Windows, until a later release), cube check runs the engine’s checks, skips the kit’s and says so with this warning |
When a kit check cannot judge
Section titled “When a kit check cannot judge”A kit’s own checks report their own codes, with the severity the check gives them. When a kit check cannot judge at all, cube check reports this code.
| Code | Severity | Rule |
|---|---|---|
CHECK_FAILED |
ERROR | a kit check runs as its contract says; a crash, a timeout, an undeclared exit code or an empty corpus judges nothing |