Last updated 15 October 2026
Each claim this project makes about itself, the figure behind it, the day it was measured, and the command that measures it again. Run the command on a copy of the repository and you should get the same figure. The file named under each claim is the one that fails if the rule behind it breaks.
Most figures are rewritten by npm run evidence, which re-runs every audit that needs no server and no database. The rest need a running build or a database, so a person wrote them down with the day and the place they ran. Each row says which. A figure older than the latest release is still a figure, so its date is printed rather than hidden. The wider picture is on the trust page, and what it costs to run is on the funding page.
Every person of a verb the app works out from a stored first person agrees with what Ekilex records for that verb.
npm run audit:verbslib/estonian/conjugate.test.ts, which fails on a person ending the rule gets wrongEvery regular case of a noun the app works out from its stored forms agrees with the form Ekilex records.
npm run audit:caseslib/estonian/attested.test.ts, which walks every shipped entry and fails on a case that disagreesNo question the app can build from the shipped dictionary prints its own answer.
npm run audit:questions.github/workflows/ci.yml, which runs the audit on every pull request and fails on oneEvery question and sentence the app builds makes sense for the word it is about.
npm run audit:sense.github/workflows/ci.yml, which runs the audit on every pull request and fails on oneThe level check places a learner who says they do not know at their own level most of the time, and almost never above it.
npm run measure:placementlib/assessment/session.test.ts, which checks a band ends early only where the finished band would agreeA one-letter slip is forgiven only from eight letters, because below that a slip usually spells another real word.
npm run measure:typo-collisionslib/estonian/answer.test.ts, which fails on a short answer marked as a slipNo package the app runs on is under a license that would bind the project's own code.
npm run check:licences.github/workflows/ci.yml, which runs the license check on every pull requestThe rules in CLAUDE.md are asserted by checks that read the source, not described.
npm run test:invariantsscripts/test-invariants.ts, which exits non-zero on a broken rule, and CI runs itThe unit suite runs with no database, no network and no clock it does not control.
npm run testvitest.config.mts, which blanks every variable the app reads and pins the time zoneNo credential reaches the code a browser downloads.
npm run check:secrets.github/workflows/ci.yml, which builds with a marked string in every server-only variable and searches the outputText and icons stay inside the boxes they were drawn in, on every route, at three widths and in both themes.
npm run test:containmentscripts/test-containment.mjs, which measures the rectangles and fails on one outside its boxNo page scrolls sideways on a phone, and every control under a finger is at least 44 pixels.
npm run test:mobilescripts/test-mobile.mjs, which measures five widths and fails on overflow or a small targetAn automated accessibility checker finds no fault on any route, in the light theme or the dark.
npm run test:a11yscripts/a11y-check.mjs, which runs axe on every route in both themes and fails on a violationProgress is worked out from the review log on every request and still answers quickly for a learner with a year of history.
npm run test:loadscripts/load-test.mjs, which fails a query over 400 ms or a page over 1,500 ms at the 95th percentileA dump of the database restores into an empty one with every row and the app healthy against the copy.
npm run drill:restorescripts/restore-drill.mjs, which compares every table's rows and asks the health checkEvery English gloss in the built dictionary still says what the Wiktionary page it came from says.
npm run audit:glosses.github/workflows/drift.yml, which re-reads the pages every weekA claim with no command behind it. This project has no SOC 2 report, no ISO 27001 certificate and no external penetration test, and none of the checks here stands in for one. The accessibility figures are automated checks, which find some faults and not others; the accessibility statement says what a person has to judge.