Compatibility notes
This is independent software, not an official or certified emulator. Earlier test counts are historical. Source link notation is preserved below.
# TI-30XS compatibility audit Reference: [TI-30XS MultiView official guidebook](https://education.ti.com/download/en/ed-tech/50BE24C84836434485BD2E8D49374AF7/2FB7733DDAC447A4B4375E77846E1DF0/30XSMV_Guidebook_EN.pdf), especially Scrolling, Clearing and Correcting, Fractions, Menus, and Order of Operations. Audit performed October 8, 2026. This is documentation-based testing in Chrome, not a comparison against a physical device or TI's emulator. ## Automated checks The latest behavioral audit and correction register is [BEHAVIOR-AUDIT.md](BEHAVIOR-AUDIT.md). Its initial matrices describe the historical baseline; the follow-up register documents the current corrections. Earlier verification counts below remain historical results. ### Current behavioral corrections - October 9, 2026 MODE, K, reset, Clear Var, PRB/RAND, ANGLE and Recall Var now operate in the existing LCD with keypad/keyboard routing; Preferences and other web conveniences remain optional. Style changes clear history/K, retaining Ans and variables. History boundaries, repeated DEL, TABLE field clearing/Ask-x deletion, formula detachment/conversion, STAT setup/cancellation, conversion timing and Classic fraction exit have regression coverage. Variable-parenthesis multiplication supports the documented parabola table; RAND/coordinate templates no longer prefill conflicting arguments. Ls restores the insertion selection. The single verified NORM tiny-value example displays a decimal while explicit fractions remain exact. A general TI tiny-value threshold is still unverified. B05/B15 retain the requested policies: Quit restores the draft; Clear empties the whole entry/result and retains Ans. B11 establishes parity between web input methods; B19 fixes web cursor restoration without claiming observed handheld semantics. Fractional-frequency quartiles, hardware precision/limits, historical answer-row selection and exact menu geometry remain unresolved. Styling and keypad layout are unchanged. Final correction verification: **193/193 unit tests and 200/200 browser tests passed**, with the entire browser suite in one uninterrupted run without retries. Check and build passed. Logs: `corrections-final-unit.log`, `corrections-final-browser.log`, `corrections-final-check.log`, `corrections-final-build.log`. The subsequent [end-to-end acceptance report](ACCEPTANCE-REPORT.md) covers combined user sessions, refresh and error recovery. It adds home/LCD error-message restoration across cancelled menus without changing the mathematical engine or styling. The counts above describe the earlier correction run; acceptance results are recorded in that report. `npm.cmd test` checks arithmetic, exact fractions, radicals, angle units, chained powers in both modes, display precision, domain errors, probability, statistics, regression, and template field navigation. `npm.cmd run test:browser` checks full keypad workflows and observable display values: | Workflow | Coverage | | --- | --- | | Fraction and mixed number entry | Numerator/denominator arrows, existing values, nested fractions, official mixed-number example | | Exponents and radicals | Exponent scope, arrow exit, automatic closing of open radicals, nth roots | | Horizontal navigation | Individual cursor movement, second-left/right boundaries, consuming second modifier, long mobile entries | | History | Up/down, first Enter pastes, second evaluates, newest-entry restart, unfinished draft restoration, pasting history into a denominator | | Menus | Number selection, vertical item selection, horizontal PRB/RAND switching, Enter selection, Escape cancellation | | Corrections | Delete at cursor, clearing a result, dismissing an error while preserving entry | | Memory and power | Variable cycling, store sequence, Ans retention, off/on, persistence, reset | | Display and input | Fraction/decimal conversion, numeric output, no overflow at 320/390/768/1440 px, touch and physical keyboard | ## Fixes from this audit - Second-Up/Down browses history rather than incorrectly moving to an entry boundary. - History browsing preserves the unfinished expression and selection; Down restores it and Enter can paste into the selected fraction field. - Starting another history selection begins at the newest entry. - A nested fraction starts in its numerator instead of the denominator. - Enter activates the highlighted numbered menu item even when the dialog itself has focus. The first pass only established ordinary history traversal. The subsequent B01 correction implements second-Up/Down boundary shortcuts separately from ordinary Up/Down, preserving unfinished drafts. ## Remaining differences - The original screen renders nested fractions, mixed numbers, radicals and powers with an offset-mapped natural cursor. It shows two older calculations plus the active entry and answer, rather than enforcing a four-line, 16-character hardware screen. Function syntax remains the underlying editor model; not every hidden syntax boundary has a hardware-equivalent cursor stop. - DATA, STAT, TABLE and primary keypad menus now use the LCD and directional-key inputs. Optional Preferences, memory management and other web tools remain dialogs; their transitions do not reproduce handheld menus. The virtual keypad is unavailable while those optional dialogs are open. - Clear intentionally blanks the active display and repeated Clear stays clear, following the requested website behavior. Ans is retained. The guide describes moving to the last history entry when the display is already clear. - History can be pasted into a selected field, but browsing does not separately select historical answer rows as a full MultiView implementation would. - MathPrint's four-level nesting limit and Classic fraction editing restrictions are not enforced. Automatic shutdown, battery behavior, contrast, and hardware rounding/underflow rules are not simulated. - Transcendental calculations use JavaScript floating-point arithmetic; symbolic output supports a limited set of radicals and pi multiples. Random numbers do not reproduce TI's sequence. Passing these tests establishes the listed workflows, not full hardware equivalence. Exact display/navigation equivalence still requires device-level comparison fixtures. ## Comprehensive editor audit The editor keeps source text and source-offset selections as its canonical state. `structureAt` in `public/editor.mjs` now provides the shared template/field model used by rendering, horizontal traversal, vertical navigation, exit detection, and deletion. Mathematical evaluation remains in the separate safe parser. This avoids renderer/editor disagreement about where a root, exponent, or fraction ends. Additional fixes from the comprehensive pass: - Down from a root or power in a numerator can reach the enclosing denominator instead of unexpectedly browsing history. - Up/Down can move between a parenthesized exponent and its base boundary. - Delete at a template's outer boundary removes the whole template; internal edits preserve its delimiters. Pi is deleted as one token, and Backspace uses the same protected-character model as Delete. - Shift-arrow selections maintain their anchor and reverse correctly. Classic-mode Backspace deletes exactly the selection. Home/End update the visible cursor. - Editing a history selection commits it for editing rather than later pasting into an obsolete draft; restoring a draft updates the cursor after restoring its selection. - Empty fields show an editable placeholder, and incomplete/deeply nested structures retain a visible cursor. Rendering beyond 24 nested levels falls back to source text instead of dropping the cursor. - Plain exponent rendering stops before subtraction; `2^3-4` displays the subtraction outside the exponent. The physical power key now creates the same editable template as the keypad. - Long-entry scrolling uses the cursor's position relative to the screen rather than a nested element's local offset. - Exiting an unfinished root also closes unfinished ordinary parentheses within that root, so a subsequent operator cannot silently stay under its radical bar. Testing includes cursor checks for all editable positions in adjacent/nested/empty/incomplete structures, replacement of every numeric field character in six representative expressions, keypad and physical-keyboard exit sequences, real browser touch events with mobile emulation, and 320 deterministically generated complete/incomplete expressions checked for reversible bounded navigation. The browser suite runs in installed desktop Chrome with mobile/touch emulation. It does not validate Safari, Firefox, a physical touchscreen, or a physical TI device. Keyboard arrows retain insertion-caret behavior; the on-screen Left pad additionally selects digits for replacement, as requested. Shift-arrow offers explicit keyboard selection. Directly pasted function syntax and arbitrary selections can still form invalid expressions; the evaluator reports errors without executing the input. Clear retains its requested web policy. DATA/TABLE forms and primary MODE/menu dialogs were replaced in the subsequent integration and correction passes. Final audit validation: 102 unit tests passed, including 320 generated editor inputs. The full 106-case browser suite passed; after the final unfinished-parentheses fix, all 56 audit/root-exit cases passed again. Two additional regression cases (unfinished ordinary parentheses and mobile cursor scrolling) bring browser coverage to 108 cases, all verified in the full run or focused reruns. Syntax/type checks and the production build passed. No changes were made to calculator styling or the mathematical evaluator in this audit. ## Mathematical audit See [MATH-AUDIT.md](MATH-AUDIT.md) for the complete function inventory, independently expected tests, mathematical fixes, and remaining numerical/workflow differences. Numbered Recall Var and LCD STAT/StatVars menus provide reusable results; recalled rational values retain their exact numerator and denominator. ## Targeted numerical compatibility pass - October 9, 2026 See the [second-audit evidence table](MATH-AUDIT.md#targeted-second-audit---october-9-2026) for documented TI rules, mathematical references, and device-dependent unknowns. Confirmed changes include exact DEG/GRAD periodic reduction and near-pole residuals, BigInt parity for large exponents/root indices, preservation of tiny rational values through arithmetic and display, robust BigInt-to-number ratios, tiny-argument logarithmic scaling, exact FLOAT tie rounding, scientific fallback for large NORM integers, subnormal notation formatting, stable small-scale correlation, and decimal Classic root/pi output. No styling or keypad layout changed. The official fractional-frequency wording promises other statistics but does not define median/quartile weighting. Their algorithm remains unverified and those three statistics are still absent with noninteger frequencies. Precise TI tiny-value NORM/FIX switching, underflow, guard digits and rounding ties also remain unverified. The website's FLOAT fallback below 1e-6 is explicitly a web formatting policy. Exact values remain stored even when a rounded display uses scientific notation. Classic complex fractions and nested table fractions remain intentional extensions. Fraction output cutoffs have not been guessed from different TI models. Pending-operation capacities and hardware internals are not simulated. Final validation on the updated code: **186 unit tests and all 136 browser tests passed**. The browser count comes from one complete suite run after the final change, including the caret timing fix. Check and static build also passed. ## LCD Statistics and Table integration - October 9, 2026 The separate Statistics and Table tabs have been removed. The existing LCD, MathPrint editor, keypad, status indicators and visual theme now host these workflows. The reference is the official guidebook's Data Editor, Statistics and Function Table chapters; this remains documentation-based verification without a physical calculator. - DATA opens L1/L2/L3 (42 entries each). Enter saves and advances, arrows select cells/lists, Delete removes a selected unchanged cell, and second-Up/Down reaches the first/last populated value. While an entry is being edited, arrows navigate its mathematical structure before committing it. DATA again opens CLEAR/FORMULA; DATA during formula editing opens the Ls menu. Linked formulas recalculate, with transactional rollback on invalid edits or deletions. - Second-DATA opens STAT: 1-Var, 2-Var and, after calculation, StatVars. Setup selects X/Y and frequency lists or ONE. CALC displays scrollable statistical variables in the LCD; Enter recalls the selected value or prediction function into the restored home entry. The existing weighted-statistics evaluator and frequency/domain validation are preserved. - TABLE opens function entry, then Start/Step/Auto-or-Ask-x setup, then two-column results. Auto generates exact x values as rows are navigated. Ask-x supports keypad entry and editing; a domain error in f(x) remains confined to its row. Clear returns through setup and function entry; second-Quit restores the home entry. Both workflows preserve Ans, variables and history, and persist committed lists and table settings. Remaining workflow differences are explicit: the original LCD shows three list/table rows plus an editor rather than reproducing the hardware's exact dimensions. Ask-x retains the application's 42-value limit, not a documented TI limit. The follow-up restores the insertion selection when returning from Ls. Menu geometry and some editing transitions still need physical-device comparison. Complex Classic fractions and nested table fractions remain web extensions; fractional-frequency quartiles remain unresolved. Exact list/table fractions are preserved, while statistical calculations use the existing floating-point moment/regression implementation. Verification: **189/189 unit tests and 157/157 browser tests passed in a single full browser run**, without retries. This adds 3 parser-validation unit cases and 21 browser cases covering complete DATA/STAT/TABLE workflows, structured entry, linked formulas and rollback, exact fractions, guidebook weighted statistics, regression, Auto/Ask-x, mode changes, persistence, keyboard/touch, limits and error recovery. Existing browser cases were migrated from tabs to LCD workflows. Syntax checks and production build passed. Desktop DATA and 320px TABLE screenshots were also visually inspected.