Implemented
Code exists and runs. Correctness not assessed.
Every scientific claim the viewer makes is tracked in a machine-readable register with a current evidence level and a required one. A level is earned by evidence that exists today, never by intent. This page is the plain-language reading of that register as of v0.6.9.
Ordered weakest to strongest. Everything at or below E3 is verified only against our own code or our own synthetic data, so nothing there may claim independent or field-grade accuracy. Independent evidence begins at E4. Field-grade validity begins at E5.
Code exists and runs. Correctness not assessed.
Unit tests pin the implementation against hand-worked expectations.
Output checked against a closed-form ground truth: the slope of a synthetic plane equals atan of its gradient, the volume of a cone equals πR²H/3, a saddle’s lobes cancel.
Validated end-to-end against generated known-truth fixtures: synthetic surfaces and labelled clouds we created.
A second, independent implementation agrees within a stated tolerance, ideally one registered before the reference was generated. The slope, hillshade and contour tolerances were fixed weeks ahead of their results. The aspect tolerance was carried over from slope and is recorded as such, not as preregistered.
Validated against external field ground truth by a prospective study: protocol and tolerance frozen before the observations, operators independent of this project. Data alone does not buy it.
An independent party reproduced the result from the archived artifact.
Each row names the independent reference and the fixture. All but one are agreement on frozen synthetic or analytic fixtures; the E57 row decodes a real public terrestrial scan. None is accuracy against a surveyed monument.
| Product | Claim id | Reference | Agreement and scope |
|---|---|---|---|
| Slope raster | SLOPE-RASTER | GDAL 3.13.1 gdaldem | Within 0.5° on a frozen analytic fixture; tolerance registered before the reference existed. |
| Aspect raster | ASPECT-RASTER | GDAL 3.13.1 gdaldem | Within 0.5° with flat ground excluded; tolerance carried over from slope, not preregistered. |
| Hillshade | HILLSHADE | GDAL 3.13.1 gdaldem | Within the preregistered one-level tolerance on the 0 to 255 scale, single-direction model only. The maximum difference against GDAL is exactly one level, because the two encode the same 0 to 1 value differently. |
| Contours | CONTOURS | GDAL gdal_contour | Contour-position distance under 0.05 m on a frozen analytic plane, agreement to 2.9e-5 m. |
| Area | MEAS-AREA | GDAL/OGR OGR_GEOM_AREA | Planar-polygon fixture. Not a field measurement. |
| DSM | DSM | PDAL 2.10.2 writers.gdal | Max-return grid over 7,500 cells, difference under 4e-6 m within a 0.05 m tolerance. Covers gridding, not ground classification. |
| DTM | DTM | PDAL 2.10.2 writers.gdal | Min-return grid over 7,500 cells, same tolerance. Required bar remains E5. |
| Canopy height | CHM | PDAL 2.10.2 writers.gdal | Clamped DSM − DTM against PDAL max minus min over 7,500 cells, under 8e-6 m within 0.1 m. |
| TPI | TPI | gdaldem 3.13.1 + closed form | 3,364 interior cells under 9e-7 within 1e-5 on a low-amplitude quadratic chosen to keep the reference’s float32 accumulation below tolerance. |
| VRM | VRM | SAGA 7.8.2 + closed form | 3,136 interior cells within 1e-4 on a smooth tilted quadratic; reproduces closed-form Sappington VRM to under 1e-9. |
| Cross-section profile | MEAS-PROFILE | OGR/SpatiaLite 5.1.0 + R quantile | 751 stations across three parameter sets, largest difference 3.6e-15 m against a 1e-6 m preregistered tolerance. Points held clear of bin and corridor edges, so tie-breaking is untested. |
| E57 ingest | E57-INGEST | PDAL 2.10.2 readers.e57 | All 1,788,994 points, nine dimensions, exact quantised-integer sum at 1e-6. Intensity excluded because PDAL rescales it differently. One CloudCompare re-export tested, not a scanner-native write. |
| UTM projection | CRS-UTM-PROJECTION | GeographicLib 2.7 + PROJ 9.8.1 | 36 geodetic fixtures including Norway 32V and the Svalbard zones. Easting and northing under 1.5 mm. Same datum both sides, so no datum transformation is exercised. |
| Change raster | CHANGE-RASTER | GRASS 8.5.0 r.mapcalc | Eight synthetic epoch pairs, 3,007 comparable cells, largest relative difference 7e-6 under a 1e-5 gate. Co-registration error absent by construction. |
| Change volume | CHANGE-VOLUME | GRASS 8.5.0 r.univar + closed form | Same eight pairs. The threshold-applied gain and loss volumes agree with r.univar and with the closed form; the raw net volume is outside the check. Uncertainty band stays exploratory. |
| Hold-out RMSE | HOLDOUT-RMSE | base R | Six frozen residual vectors; bias, RMSE and max residual agree to about 4.4e-16. Confirms the computation, not field accuracy: held-out points share the source of the interpolated ones. |
| NVA / VVA statistic | NVA-VVA | base R | 1.96 × pooled RMSE agrees to about 8.9e-16. Not ASPRS checkpoint accuracy; still requires E5. |
Downloading a public checkpoint database and computing an RMSE is retrospective. A result chosen after the fact from a database one had access to is not evidence that the method would pass a test it did not know was coming.
The study design, the tolerance and the pass condition are written down and committed before any observation is made. The harness commit that fixed the slope, hillshade and contour tolerances on 2026-07-05 is the model.
People who did not write the code collect the reference and run the comparison. The project supplies the archived artifact and the protocol, then steps back.
Surveyed monuments, GNSS checkpoints or a metrology-grade reference, with their own uncertainty stated, not another point cloud from the same sensor.
Until such a study runs, the DTM, contours and every product built on them read as validated against independent implementations and as preview or review wherever field accuracy would be implied. An evidence boundary inspector and a scientific artifact passport are implemented and tested, but no user path reaches either in v0.6.9. Both are recorded in the project’s unreachable-module register, so they are inventory rather than delivered features, and this site does not count them as shipped.
Every release archive carries a Sigstore-signed SLSA provenance statement binding it to the workflow run and commit that produced it, a SHA256SUMS manifest, a CycloneDX SBOM and an evidence record that cites the mutation score, the coverage and the gate that ran. A record with no mutation result, or one under the 75 threshold, is refused.
# download the release assets, then shasum -a 256 -c SHA256SUMS npm run release:verify -- --dir <downloaded-assets> gh attestation verify <archive> --repo Aurtechmx/openlidarviewer # rebuild the evidence yourself git clone https://github.com/Aurtechmx/openlidarviewer.git cd openlidarviewer && npm ci npm run gate # 15,598 passed, 49 skipped npm run validation:study:verify # the PDAL / GDAL / GRASS / SAGA / R study records node scripts/verify-oracle-versions.mjs # the oracle versions on this machine
Independent tool versions are declared, not assumed. Every study record names the version behind its reference: GDAL 3.13.1 with 3.13.3 recorded where that is what ran, PDAL 2.10.2, GRASS 8.5.0, SAGA 7.8.2, PROJ 9.8.1, GeographicLib 2.7, SpatiaLite 5.1.0 and the R release used. A re-run on a version outside the accepted set fails loudly instead of quietly drifting.
Datasets are cited with their licence. Every registered dataset carries a licence and a licence URL in the dataset register, and a lint refuses a citation that does not resolve. Public fixtures are CC BY 4.0 Zenodo depositions and USGS 3DEP tiles. A dataset of unknown licence is never used.
Method versions are stamped. Each product records the identifier of the method that made it, so a receipt from an older release is comparable to a newer one only when the method id matches.
Analytic planes and quadratics avoid the confounds real terrain carries: void interpolation, mixed returns, vegetation under canopy. Agreement there bounds implementation error, not field error.
Held-out points share the sensor, flight and processing of the interpolated ones. An RMSE from them is a self-consistency figure.
The E57 cross-decode used a CloudCompare re-export. Vendor extension blocks, multi-scan files and spherical coordinates are untested.
The UTM projection check never exercised a datum transformation, a PROJ grid or a vertical reference. It proves the projection formula, nothing about datums.
Profile fixtures hold every point clear of a bin boundary and a corridor edge, so behaviour exactly on an edge is unverified.
A previous gate still passed 6,182 tests with 16 skipped while all 18 corrected defects remained present. The count is reported; it is not the argument.
The concept DOI always resolves to the newest release. A version DOI pins one archived build. Both carry the CITATION.cff metadata from the repository.
# CITATION.cff (excerpt) title: "OpenLiDARViewer" type: software authors: - family-names: "Urias" given-names: "A." affiliation: "Aurtech" orcid: "https://orcid.org/0009-0007-3147-323X" license: AGPL-3.0-only repository-code: "https://github.com/Aurtechmx/openlidarviewer" identifiers: - type: doi value: "10.5281/zenodo.21544619" description: "Concept DOI, resolves to the newest version"
Releases through v0.6.6 remain under MIT. The licence change at v0.6.7 is forward-looking and does not alter any earlier archive. v0.6.9 is deposited under the same concept.