type LintCode =
| "goto-target-missing"
| "invalid-timeout"
| "empty-choice"
| "unreachable-step"
| "unreachable-flow"
| "empty-trigger"
| "duplicate-trigger"
| "flow-id-collision"
| "persistent-memory-store"
| "duplicate-choice"
| "ambiguous-choice"
| "missing-timeout"
| "wait-never-expires"
| "form-state-collision";
| code | severity | meaning |
|---|---|---|
goto-target-missing | error | goto('x') (or a guard redirect / choose option goto) targets a conversation that is not registered |
invalid-timeout | error | a step timeout the runtime cannot parse ('2 minutos') |
empty-choice | error | choose() without options — every answer is rejected |
unreachable-step | warning | steps after an unconditional goto (or an end step) |
unreachable-flow | warning / info | no trigger can start it and no reachable flow jumps to it (info when reachable code could still c.goto() it) |
empty-trigger | warning / info | [] never matches (info for a flow entered only by goto()/c.goto()); an empty regex matches everything ('' is rejected at registration) |
duplicate-trigger | warning | a route never fires: an earlier route in dispatch order owns the same pattern |
flow-id-collision | warning | two different flows/conversations share one id; only the last one runs |
persistent-memory-store | warning | .persistent() with only the RAM store: checkpoints die on restart |
duplicate-choice | warning | choose() options with the same (normalized) key or label |
ambiguous-choice | warning | typing an option’s key/label picks a different option |
missing-timeout | info | ask/choose falls back to the built-in 5-minute wait |
wait-never-expires | info | ask/choose with a 0 timeout never expires |
form-state-collision | warning | a form() stores its answers under a c.state key another ask/choose/form of the same flow also writes |
invalid-timeout, missing-timeout, wait-never-expires) also cover form() steps.