Backend acceptance — 0.3 beta

Qualified on 2026-09-26 against the pinned WORDS 1.99.0 reference, using the existing upstream-tests-v1 profile. The 0.3 backend is frozen; processing a classical-text corpus is deferred to a later iteration.

CheckResult
Complete Latin replay4,144,877 inputs; 4,144,873 matching normal outputs
Original native failuresBoth reproduced: pilarium, pilarivm; diagnostic output and exit status retained
Comparator exclusions2: empty console input and the ! developer menu
Differences/regressions introduced0 / 0 against the preceding repaired checkpoint
Original 0.2 normal differencesAll 109,001 remain resolved
English index and probes24,000/24,000 match; 23,808 distinct nonempty index spellings plus 192 POS/trim/input probes
English failure observations5 native overflow outcomes preserved within the 24,000 comparisons
Native capacity states10/10 match, including 80/81 and 249/250/251 boundaries
Latin sequences/options512/512 sessions across 16 profiles match
Portable regression tests36/36 groups pass; the frozen backend hashes are also checked
Fresh native controls96 normal inputs, forward/reverse order, and both original native errors verified in two builds

A matching native failure is not a successful analysis. Normal output equality uses the established prompt/trailing-whitespace normalization and preserves internal blank lines, order, multiplicity and explanations. Original dictionary content and linguistic errors remain unchanged; the corrected layer is empty.

Beta indicates preliminary engineering reliability within this measured scope. It does not establish equivalence for every input or option combination, philological correctness, completed classical-text corpus testing or physical iOS installation qualification. Native interactive menus, filesystem side effects and host-resource failures remain outside the analysis-body API contract.

See the frozen backend manifest, compatibility details and release notes.

Historical 0.2 fixed-wordlist acceptance

The historical 0.2 candidate compares the complete four-profile version 1.0.0 of classical-lexical-test-data. This is a dictionary-input corpus, not classical prose or adjudicated answers.

The reproducible runner is scripts/acceptance.mjs. Use an immutable data directory containing its manifest and four gzip lists, plus the built reference described in building.md:

node --max-old-space-size=8192 scripts/acceptance.mjs \
  --data /path/to/data --oracle /path/to/oracle --out /path/to/results --workers 6

The runner checks input hashes, pins the executable/generated data and comparison profile, and records the engine/adapter/runner identities. Equal strings shared by profiles execute once; membership masks preserve full per-profile accounting. Multiword lines are not flattened. Distinct browser macron-adapted inputs are compared using the same adapted text on both engines.

Each 2,000-query reference process is isolated. A failing reference batch is retried as individual cases for classification. Console commands, empty console input, overlong lines and embedded controls are separately accounted for; they are never silently discarded or counted as successful lookups.

The comparison preserves candidate order, multiplicity, morphology, meanings and internal blank lines. It only removes prompts and frame-edge/trailing whitespace. Per-input outcomes and output hashes, complete differences, timings and runtime identity remain in resumable files. Completed batches can be reused only under the same recorded identities. A zero exit means the run completed; counters and difference adjudication determine acceptance. --limit is for harness checks.

Complete run — 2026-09-22

All four immutable input files were verified and exhausted. Their union contains 4,135,067 exact strings. Applying the browser adapter changes 1,011,189 of these; its additional distinct strings bring the total to 4,144,877 comparisons, in 2,073 resumable batches.

ProfileInputsStrictly equalOutput differsAda exceptionConsole limitation
original2,074,7582,028,94245,81411
simple3,036,1692,968,00668,16021
teaching4,126,7494,018,678108,06821
special1,014,233974,60339,62901
browser3,133,6883,064,25269,43222

Profiles overlap and must not be added together. The browser row counts distinct normalized queries, not original marked spellings. Overall unique results are 4,035,872 equal (97.370%), 109,001 different, 2 reference exceptions and 2 console limitations. No TypeScript exception was observed; all reference-exception and console-limitation inputs were additionally run through the TypeScript API. Equality includes matching unknown/unsupported results; it is not dictionary coverage or a judgment of Latin correctness.

Mechanical triage of the recorded failures:

Output categoryQueries
adapterUnsupported2
analysis-rows-differ61,972
explanatory-or-unknown-output-differs15,673
same-analysis-rows-other-output-differs31,226
layout-only128
order-only2
oracleFailure2

These categories group observed output; they do not establish shared root causes. Analysis rows are the fixed-column inflection rows. Ordering, multiplicity, explanations and meanings remain part of the strict acceptance requirement.

The Ada reference reports internal exceptions for pilarium and pilarivm, even though it exits with status zero. Frame accounting detects these failures. The port returns analyses for both; this difference is recorded rather than treated as a parity pass. A blank adapted query and ! are console-adapter limitations.

Independent fresh-process replay of 51 selected cases, including the exceptional boundaries, confirmed the recorded Ada observations where the console accepts the input, across two independently built source- identical oracles. Both builds also pass the 21 original byte-for-byte fixtures. This additional replay is representative confirmation, not a second full run.

Acceptance judgment

The full-wordlist compatibility gate fails. The frozen 21 cases / 751 fragments and 3,953 expanded observations still pass, but the larger corpus exposes real unresolved departures. Examples include alternate fallback analyses for abare, additional suffix candidates for colucula, and lost explanation-only output for ebit. The input adapter and browser repairs do not resolve these engine issues.

Version 0.2 alpha releases the verified browser improvements with these known engine differences; compatibility repairs and a full rerun are scheduled for 0.3 alpha. No linguistic correction has been activated; original dictionary bytes remain fixed. This report does not qualify full classical prose, every option combination, or physical mobile installation.

Reproduction identity and performance boundary