Your namespace, read the way the reviewer at the next desk reads it
Paste your .clj — and the _test.clj beside it if you have one.
The browser reads both for free: it parses the file with a real Clojure reader, names the
delimiter that never closed, inventories every definition with its arglists and docstring, and
counts the mutable decisions in each function. Then pick a lane.
Both examples ship with a saved result for every lane, so you can see a whole lane — findings, tables, rewritten docstrings, schemas and killing tests — without signing in and without spending a credit.
Findings
Every var, graded
Reader reconciliation
Every flag the free reader raised, and what the run did with it. A flag set aside with a reason is a real answer; a flag the run never mentions is the thing this panel exists to catch.
Artifacts
Next steps
Assumptions
Open questions
Summary
What the free reader does, before any model runs
It actually reads Clojure
Its own tokenizer and form reader, not a regex. A string full of closing parens, a
\( character literal, a #"\)+" regex, a #_ discard, a
#?(:clj ...) reader conditional, a #:ns{} map — each is read
as what it is, which is why the delimiter count can be trusted.
The delimiter that went missing
When a file does not balance, the compiler reports the end of the file. The reader reports the
line and column of the opener that was never closed, and whether a
) is closing something that was opened with a [.
The ns form, resolved
Every require with its alias; a :refer :all that makes every unqualified symbol
ambiguous; a libspec declared twice, where the later one silently wins; a deprecated
:use; and every alias declared in the ns form that nothing in the pasted code
uses.
The mutation surface, counted
Every branch, comparison, arithmetic operator and literal in each function — the exact set a mutation runner would rewrite. Beside it, which functions the pasted test namespace never names. A function with twenty-seven generatable mutants and no test is not a feeling; it is a number.