{"version":"v1.0","client_state":{"DocsNavigation.default":{"fields":{"query":""},"persist":"memory","send_to_server":true},"ColorScheme.default":{"fields":{"mode":"system"},"persist":"local","send_to_server":true}},"endpoints":{"action":"/_bretzel/action","sse":"/_bretzel/sse","refetch":"/_bretzel/refetch"},"csrf":"b8e50f6eed3b4c5838c6bc80b6849b02","page_id":"0d3af3b3a9f04aba9107aa520ccaea15","address":""}

Judge the code

`describe` says what exists; `check` judges what you made of it. Both read the INSTALLED code, so neither can be out of date.

Running it

py -m bretzel.cli.main check my_app/
py -m bretzel.cli.main check --deep my_app.main:app
The first pass is STATIC: it reads the files, mounts nothing, and needs no app to start. `--deep` additionally mounts the real app and arbitrates its map — the declared features against what they really do.

Why ONE MORE linter

Ruff and mypy judge Python. Neither knows that an unknown kwarg passed to `ui.button` leaves as an inert HTML attribute: it does not raise, it does not show, and it is not visible in review. That is the dominant failure mode here, and it is the one these rules take — each catches a SILENT mistake.

What it can see

18
Read live by `rule_summaries()` — the table the CLI executes, and the sentence every rule carries at the head of its module. A new rule appears here without this page being edited.
RuleIt refuses…
assembled-tailwind-classan assembled Tailwind class only exists in dev
class-duplicates-a-propa class in `classes=` that the SAME prop already sets
half-overridden-size-stepa theme that resizes PART of the form controls
hand-written-transportan app does not drive the transport by hand
lambda-handlera handler cannot be a lambda
link-inside-a-linka link INSIDE a link — the parser undoes the card
mixed-sizesSIBLING form controls at different sizes
non-literal-html`ui.html` with anything but a literal
page-declared-in-a-functiona `@page` declared in a function body, harvested by nothing
state-built-on-the-loopa `ServerState` built in an `async def` body
state-lost-by-a-casta cast that erases a state value's PROVENANCE
test-client-without-lifespana `TestClient` built without ever entering the lifespan
theme-step-changed-shapea theme override that keeps the NAME and changes the SHAPE
undeclared-shared-counteran `AppState` total incremented without being declared additive
unknown-kwarga kwarg passed to `ui.*` that the component does not accept
unknown-theme-vocabularya `Theme(components={…})` name that nothing reads
value-outside-the-tablea `variant=` / `size=` value no table carries
zone-listening-too-widelya zone listening on behalf of a NESTED zone