On this page
mathlib-fp 1.9.1 qualification
Completion-gate evidence
| Gate | Evidence |
|---|---|
| Defect triage | Read-only issue triage on 2026-08-02 found no open repository reports against 1.9.0. Output-aware guide execution exposed one confirmed seeded-bootstrap defect; the correction and permanent regression are described below. |
| Five-minute first use | The README links the exact release page and direct .tar.gz/.zip downloads. Its one-screen program is extracted, compiled with only -Fusrc, executed, and required to print P(Z <= 1.96) = 0.975002 in clean-archive CI. |
| Versioned web/offline/repository agreement | docs/versions.json identifies 1.9.1 as current and 1.9.0 as preserved. documentation.yml rebuilds 1.9.0 from tag v1.9.0, builds 1.9.1 from the release tag, deploys both, and produces the deterministic offline ZIP/checksum from that same site tree. Every HTML page and release.json carries its release identity. |
| Published qualification | release-qualification.yml creates a checksummed archive with git archive, extracts it into an isolated directory on Linux and Windows, runs the configurations below without network access, and publishes JSON plus per-gate logs. The Windows archive job also builds the Lazarus package. |
| API freeze | test_api_snapshot.py and check_docs.py compare all source interface sections with the unchanged schema-2 1.9.0 baseline: 2,880 exact owner/signature-aware declarations and 281 required public names. |
Confirmed correction and regression
The seeded bootstrap overload used the low bits of a 32-bit LCG followed by mod Length(Data). For a length-eight input, those low bits cycle through all eight indices, so each nominal resample was a permutation and every mean was identical. The 95% percentile interval in the Stats guide therefore printed [3.2375, 3.2375] instead of expressing sampling uncertainty.
The private implementation now uses TLocalRandom.NextInteger, the shared xoshiro256** explicit-state generator and rejection-sampled bounded-integer kernel. TestSeededBootstrapPowerOfTwoSampleVaries verifies that 64 resample means vary and that the seeded 2,000-iteration interval brackets the sample mean. Existing tests retain exact same-seed replay and verify that RandSeed is unchanged. The checked guide result is [2.7747, 3.7375] for seed 2026. No public declaration, seed parameter, ownership rule, or global-state contract changed.
Output-aware documentation evidence
check_doc_examples.py inventories all 225 Pascal fences, compiles and runs the 15 self-contained programs, and verifies 13 adjacent output contracts. Every runnable program that calls Write/WriteLn must declare either exact output or ordered required fragments; a zero exit code alone does not pass.
examples/output-contracts.json additionally checks numerical values and statuses for examples 15, 16, 22, and 23, then requires their exact final success marker. This prevents a guide from passing after printing a limit or failure status on an otherwise successful process exit. check_built_docs.py then verifies every generated page's release metadata, search-index target, local file link, and HTML anchor. The publishing rehearsal checked 123 landing/release pages across the two version paths.
Reproducible release commands
The cross-platform driver is intended to run inside an extracted source archive:
python tools/qualify_release.py --release 1.9.1 --compiler fpc \
--lazbuild lazbuild
It records one JSON entry and a complete log for each gate:
- normal
-Btests; - optimised
-B -O3tests; - checked/heap-traced
-Ci -Cr -Co -Ct -Sa -gl -ghtests, including the0 unfreed memory blocksmarker; - all 24 examples plus the four output/status/final-marker contracts;
- API snapshot, documentation unit/static/execution checks, searchable HTML, and offline ZIP/checksum generation;
- the Lazarus package where
lazbuildis available; - the representative
-O3benchmark and its bounded-allocation failures.
Observed release matrix
| Path | Result |
|---|---|
| Win64 normal | 931 tests, 0 errors, 0 failures |
Win64 -O3 |
931 tests, 0 errors, 0 failures |
| Win64 checked/heap-traced | 931 tests, 0 errors, 0 failures; 295,621 blocks allocated/freed and 0 unfreed |
| Examples and checked output contracts | All 24 compile and run; all four release-facing output/status/final-marker contracts pass |
| Documentation/API snapshot | 63 pages; 15 runnable programs and 13 output contracts pass; all 2,880 declarations remain unchanged |
| Offline documentation | 63 searchable pages; deterministic ZIP and SHA-256 generated locally |
| Lazarus package | Version 1.9.1 package builds with Lazarus 4.8/FPC 3.2.2 on Win64 |
| Representative benchmark | Compiles/runs at -O3; 100,000-entry sparse and 200,000-dimensional matrix-free cases retain linear storage, allocate no dense-shape elements, and keep warmed heap growth at zero below the 65,536-byte failure ceiling |
| Clean source archive | A disposable prospective-tree commit was archived and SHA-256 verified, extracted in isolation, and passed all 68 Win64 gates; release-qualification.yml repeats this on the exact release tag for Linux and Windows and publishes its authoritative checksum, JSON, and logs |
The local Win64 driver completed all 68 recorded gates on 2026-08-02 using FPC 3.2.2, Lazarus 4.8, and Python 3.13.5 on Windows 11 x86-64. Local timing is not a performance threshold. The exact tagged Linux/Windows archive jobs, not this configured checkout, are the final portability and packaging evidence. An independent publishing rehearsal extracted docs/ from tag v1.9.0, built its 59 historical pages beside the 63 current pages, verified both release.json identities and the root's current/older links, and generated the combined offline archive plus checksum. The built-site checker verified all 123 HTML pages and their local links/anchors. The disposable rehearsal tree was then removed.
The clean candidate archive included only Git-tracked and prospective release files, not ignored compiler output or maintainer configuration. Its temporary repository, archive, extraction, and generated results were removed after the 68-gate run. The tag-generated checksums published by CI, rather than a mutable pre-commit candidate digest, identify the release artifacts.
Dependencies, compatibility, and known limitations
The normal library, tests, examples, generated documentation, and offline archive need only FPC 3.2.2 and standard RTL/FCL units. Documentation generation uses Python's standard library. The release paths do not download numerical packages, load a foreign numerical DLL, contact a service, or require a licence key.
The stable capability boundary and limitations remain those published for 1.9.0 in CAPABILITIES.md: no new algorithm family or public convenience surface is included. In particular, none of the planned 1.9.2 beginner-learning-path or later 1.9.x/2.0 convergence work is part of this release.