Skip to content

Commit 6354a10

Browse files
authored
Merge pull request #8 from Aurtechmx/feat/v0.4.9
Feat/v0.4.9
2 parents b7695b6 + 064efb2 commit 6354a10

74 files changed

Lines changed: 2841 additions & 377 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/ISSUE_TEMPLATE/bug_report.md

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,7 @@ What you thought would happen instead.
2525
- Approximate point count and file size:
2626
- Where it came from (drone LiDAR, phone scan, exported from other software):
2727

28-
Please do not attach confidential or sensitive scan data to a public issue.
29-
A tiny synthetic file that still shows the bug is ideal. See
30-
[SECURITY.md](../../SECURITY.md).
28+
A tiny synthetic file that still shows the bug is ideal.
3129

3230
**Environment**
3331

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,4 +24,3 @@ changes, note the browser and backend (WebGPU or WebGL 2) you tested in.
2424
- [ ] New behavior has unit tests where the logic is pure
2525
- [ ] Docs updated if behavior or formats changed
2626
- [ ] Commits follow Conventional Commits (`type(scope): description`)
27-
- [ ] No secrets, personal paths, or sensitive scan data included

CHANGELOG.md

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,64 @@
22

33
The format is based on Keep a Changelog and the project follows Semantic Versioning.
44

5+
## [0.4.9] - 2026-06-20
6+
7+
### Added
8+
9+
- **Data Fitness scorecard.** The Analyse panel now leads with one plain-language
10+
verdict and a six-row traffic-light scorecard — Location & height, Coverage,
11+
Ground detail, Vertical accuracy, Classification, Integrity — each with a
12+
metaphor icon and a shape-distinct tone glyph (check / dash / triangle, never
13+
colour alone). Caveats are non-hideable, and the USGS Quality Level badge is
14+
shown only when earned (georeferenced, density above floor,
15+
accuracy validated).
16+
- **Portable security headers.** A `_headers` file ships alongside `.htaccess`
17+
so the same deploy bundle is hardened on Netlify / Cloudflare Pages-style
18+
static hosts, not only Apache-family ones.
19+
20+
### Changed
21+
22+
- **File-scale honesty across every surface.** Large clouds are strided for
23+
display, so the rendered count is a subset. The Scan Report, the Engineering
24+
Inspection PDF, the Provenance density, and the Layers chip now report the
25+
file's true point count and areal density (back-scaled from the sample), with
26+
a "Loaded" row disclosing the in-memory subset — a dense survey no longer
27+
reads as several times sparser than it is.
28+
- **Capture-type detection.** Dense drone surveys (UAV LiDAR, ~100–1000 pts/m²
29+
over an open mapping footprint) classify as drone-mounted LiDAR rather than
30+
Terrestrial Laser Scan, matching the cited density literature.
31+
- **Honest classification + terrain wording.** A classification dimension that
32+
carries no assigned classes reads "Present, unclassified" instead of a bare
33+
"Yes"; the Terrain Intelligence Report labels its ground-point counts "Ground
34+
points / Used in DTM" rather than the misreadable "Source points".
35+
- **Analyse panel de-duplicated.** Each fact now has one home — the scorecard is
36+
the headline, the assessment block carries export readiness + terrain products
37+
+ "Why?", and the collapsed Details holds the lone composite score and the
38+
unique validation detail.
39+
- **Portable PWA manifest.** Relative `./` paths + `scope` so the app installs
40+
correctly under subpath hosting; `X-Frame-Options: SAMEORIGIN` added.
41+
42+
### Fixed
43+
44+
- The point cloud no longer clips to a square on browser zoom-out.
45+
- Contour GeoJSON exports carry 3D coordinates (elevation) and per-feature
46+
evidence grades.
47+
- Vertical units are honoured: `VerticalUnitsGeoKey` (4099) and the WKT vertical
48+
`UNIT` are parsed, and Z is scaled to metres for accuracy bucketing.
49+
- Honest height wording for georeferenced scans. A horizontally-georeferenced
50+
scan with an undeclared vertical datum (common for drone LiDAR — absolute
51+
Z, no `VerticalCRS`) now reads "elevation datum not declared" rather than
52+
"heights are relative." Its heights are absolute; only the datum is unverified.
53+
Truly floating scans (no CRS) still read "relative."
54+
55+
### Under the hood
56+
57+
- A tested orchestration seam for the full-cloud grade (plan → coverage →
58+
back-scaled grade) landed ahead of its streaming surface.
59+
- Brand assets trimmed ~1.05 MB from the deploy: the mark and favicon are
60+
re-rastered to display size, and the unused full-resolution logo master moved
61+
out of the shipped bundle (kept in the repo for regenerating share cards).
62+
563
## [0.4.8] - 2026-06-17
664

765
### Added

CODE_OF_CONDUCT.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ project in public spaces.
2828
## Enforcement
2929

3030
Report unacceptable behavior to **info@aurtech.mx**. Reports are reviewed
31-
confidentially. Maintainers may remove, edit, or reject contributions, or take
31+
in private. Maintainers may remove, edit, or reject contributions, or take
3232
other appropriate action.
3333

3434
This Code of Conduct is adapted from the

CONTRIBUTING.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ Open a GitHub issue and include:
2121
- your browser, OS, and GPU if it is relevant
2222
- the file format involved
2323

24-
Please do not attach confidential scan data. Use a small, non-sensitive sample
25-
instead, or describe the file's structure. See [SECURITY.md](SECURITY.md).
24+
A small sample file that reproduces the issue, or a description of the file's
25+
structure, is ideal.
2626

2727
## Suggesting features
2828

README.md

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ It opens georeferenced drone LiDAR surveys in LAS and LAZ, terrestrial laser-sca
4141
## Key Advantages
4242

4343
- Inspect point-cloud datasets directly in a modern web interface, with nothing to install.
44-
- Local-first by design: files are read and rendered in your browser, with no upload, which suits sensitive survey data.
44+
- Local-first by design: files are read and rendered in your browser, with no upload.
4545
- Opens compatible iPhone and mobile scan exports when saved as PLY, OBJ, GLB/GLTF, XYZ, or CSV.
4646
- Opens georeferenced drone LiDAR surveys in LAS and LAZ, and terrestrial laser-scanner data in E57, PTX, and PTS, with a coordinate bridge that keeps large survey coordinates precise.
4747
- Reads Point Cloud Library (PCD) files — ASCII, binary, and binary-compressed.
@@ -320,7 +320,7 @@ Full detail is in [`docs/mobile-browser-support.md`](docs/mobile-browser-support
320320

321321
## Research & Development Focus
322322

323-
OpenLiDARViewer started as an experiment: how far can modern browser technology go in making LiDAR and point-cloud data easy to reach? It looks at browser-native point-cloud rendering, lightweight WebGL/WebGPU pipelines, human-centered interaction with 3D data, game-inspired navigation for technical inspection, local-first workflows for sensitive data, and simpler interfaces for complex datasets.
323+
OpenLiDARViewer started as an experiment: how far can modern browser technology go in making LiDAR and point-cloud data easy to reach? It looks at browser-native point-cloud rendering, lightweight WebGL/WebGPU pipelines, human-centered interaction with 3D data, game-inspired navigation for technical inspection, local-first workflows, and simpler interfaces for complex datasets.
324324

325325
The aim is not to replace full GIS or survey-grade processing. It is to give people a fast, approachable way to open, inspect, navigate, measure, and present point clouds. See [`docs/research-notes.md`](docs/research-notes.md).
326326

@@ -405,10 +405,20 @@ COPC streaming — local and remote — ships in v0.3.0 and is hardened across v
405405

406406
## What's in this release
407407

408-
The current release is **v0.4.7**. The full, dated history is in
408+
The current release is **v0.4.9**. The full, dated history is in
409409
[CHANGELOG.md](CHANGELOG.md); the highlights below are a reverse-chronological
410410
summary.
411411

412+
### v0.4.9 — Data Fitness scorecard, file-scale honesty & a leaner deploy
413+
- The **Data Fitness scorecard** leads the Analyse panel — one plain verdict plus a six-row traffic-light scorecard (Location & height, Coverage, Ground detail, Vertical accuracy, Classification, Integrity) with shape-distinct glyphs and a USGS Quality Level badge shown only when earned; the panel is de-duplicated so each fact has a single home
414+
- **File-scale honesty** across the Scan Report, the inspection PDF, the provenance density, and the Layers chip — the file's true point count and back-scaled density, not the strided display sample (with a "Loaded" row disclosing it); dense drone surveys identify as UAV LiDAR; georeferenced scans with an undeclared datum read "elevation datum not declared," not "relative"
415+
- A **leaner deploy** (~1.05 MB of brand assets trimmed), a portable `_headers` file and relative PWA manifest for any static host, and fixes for the zoom-out square-clip, contour-GeoJSON elevation, and vertical-unit handling
416+
417+
### v0.4.8 — Derived classification & trust you can act on
418+
- **Derive a classification** for scans that ship functionally unclassified (every point ASPRS 0/1), with **RGB-assisted vegetation**, per-run **confidence**, and **void-honest heights** that leave hole-filled points unclassified rather than guessed
419+
- **Dataset Story** and **Export Health check** actions synthesise what a scan is, its biggest limiter, and a ready / caution / blocked hand-off verdict; shared `.olvsession` files remember the class-visibility filter
420+
- A new **Credits** page attributing the sample-data providers and the open-source dependencies; a producer's existing classification is never overwritten
421+
412422
### v0.4.7 — Accessibility, workflow & honesty fixes
413423
- A **colourblind-safe (Okabe-Ito) classification palette** toggle, an **annotation grouping** summary (totals, per-category counts, areas) in the panel and the PDF report, and a quiet **signal-tier cue** on the Dataset Intelligence card
414424
- The **workflow recorder** returns — record and replay `.olvworkflow` camera/tool sequences with a settings popup (file format, save destination, start/stop shortcut, replay speed, pre-record countdown, capture scope, loop)

RELEASE_NOTES_v0.4.8.md

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,24 @@ uploaded.
5858
"validate before relying on it" caveat, and the provenance line now records
5959
when the RGB cue was used.
6060

61+
## Credits
62+
63+
- **Data sources & credits.** A new credits page — reachable from a **Credits**
64+
link in the header, with a mirror at `docs/credits.md` — names the providers
65+
behind the public sample datasets (USGS 3DEP and the swisstopo / GURS / AHN
66+
national programmes) and thanks the open-source projects the viewer is built on:
67+
three.js, loaders.gl, proj4, pdf-lib, laz-perf, and the COPC / EPT formats. The
68+
README gained an Acknowledgements section, and `THIRD_PARTY_NOTICES.md` is now
69+
complete.
70+
71+
## Fixes
72+
73+
- **Export units.** The Studio raster exports (contour, depth, height) and the
74+
shared Width / Depth / Height / Density rows now label values in the scan's real
75+
linear unit — feet for foot-based CRSs, metres otherwise — instead of a
76+
hardcoded "m". Coordinates are stored in native units, so this corrects feet
77+
shown as metres on US-survey-foot scans.
78+
6179
## Under the hood
6280

6381
- The classifier gained a "classify the gaps" capability — derive only the

RELEASE_NOTES_v0.4.9.md

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
# OpenLiDARViewer v0.4.9
2+
3+
An honesty-and-polish release. The Analyse panel now leads with one plain
4+
verdict, every surface reports the file's true scale instead of the display
5+
sample, and the deploy is ~1 MB leaner. Still browser-native, local-first,
6+
nothing uploaded.
7+
8+
## Highlights
9+
10+
- **Data Fitness scorecard** — the Analyse panel opens with one plain-language
11+
verdict and a six-row traffic-light scorecard: Location & height, Coverage,
12+
Ground detail, Vertical accuracy, Classification, Integrity. Each row pairs a
13+
metaphor icon with a shape-distinct tone glyph (check / dash / triangle, never
14+
colour alone), the caveats can't be hidden, and the USGS Quality Level badge
15+
appears only when earned — georeferenced, density above the
16+
floor, and accuracy validated.
17+
- **Panel de-duplication** — each fact now has exactly one home. The scorecard is
18+
the headline; the assessment block carries export readiness, terrain products,
19+
and "Why?"; and the collapsed Details holds the single composite score plus the
20+
validation detail nothing else shows.
21+
22+
## File-scale honesty
23+
24+
- **The numbers describe the file, not the display sample.** Large clouds are
25+
strided down for rendering, so the in-memory count is a subset. The Scan Report,
26+
the Engineering Inspection PDF, the Provenance density, and the Layers chip now
27+
report the file's true point count and areal density (back-scaled from the
28+
sample), with a "Loaded" row disclosing the subset — a dense survey no longer
29+
reads as several times sparser than it is.
30+
- **Capture type** — dense drone surveys (UAV LiDAR, ~100–1000 pts/m² over an open
31+
mapping footprint) are identified as drone-mounted LiDAR rather than Terrestrial
32+
Laser Scan, matching the cited density literature.
33+
- **Honest height wording** — a horizontally-georeferenced scan with an undeclared
34+
vertical datum (common for drone LiDAR: absolute Z, no VerticalCRS) reads
35+
"elevation datum not declared" rather than "heights are relative." Its heights
36+
are absolute; only the datum is unverified. Truly floating scans still read
37+
"relative."
38+
- **Honest classification + terrain wording** — a classification dimension
39+
carrying no assigned classes reads "Present, unclassified" instead of a bare
40+
"Yes," and the Terrain Intelligence Report labels its ground-point counts
41+
"Ground points / Used in DTM" rather than the misreadable "Source points."
42+
43+
## Fixes
44+
45+
- The point cloud no longer clips to a square on browser zoom-out.
46+
- Contour GeoJSON exports carry 3D coordinates (elevation) and per-feature
47+
evidence grades.
48+
- Vertical units are honoured — `VerticalUnitsGeoKey` (4099) and the WKT vertical
49+
`UNIT` are parsed, and Z is scaled to metres for accuracy bucketing.
50+
51+
## Deploy & hardening
52+
53+
- **~1.05 MB lighter.** The brand mark and favicon are re-rastered to display size
54+
(the 530 KB master moves out of the shipped bundle into `design/`, kept for
55+
regenerating share cards), so first paint carries a fraction of the previous
56+
brand weight.
57+
- **Portable hardening** — a `_headers` file ships alongside `.htaccess` so the
58+
same deploy is hardened on Netlify / Cloudflare Pages-style hosts, the PWA
59+
manifest uses relative paths + scope for subpath hosting, and
60+
`X-Frame-Options: SAMEORIGIN` is set.
61+
62+
## Under the hood
63+
64+
- A tested orchestration seam for the full-cloud grade (plan → coverage →
65+
back-scaled grade) landed ahead of its streaming surface — consistent with the
66+
project's "tested core first, UI follows" pattern.
67+
68+
These confidence figures and quality grades describe the delivered data; they are
69+
not a survey-grade certification. Treat terrain products and exports as
70+
deliverable-ready only when the assessment reads **Good**, and validate against
71+
ground control where survey-grade accuracy is required.
72+
73+
See [CHANGELOG.md](./CHANGELOG.md) for the full list.
74+
75+
## Deploy
76+
77+
Static files — host anywhere (GitHub Pages, Netlify, any CDN). The deploy zip
78+
extracts with web-safe permissions (644 files / 755 directories) and carries
79+
`index.html` plus `assets/` at the archive root, along with `.htaccess` and
80+
`_headers` for host-side security headers.

SECURITY.md

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -17,15 +17,9 @@ plan.
1717

1818
OpenLiDARViewer is designed around local-first inspection. Scan files are read,
1919
parsed, and rendered entirely in the browser — there is no server to upload
20-
them to. This makes it suitable for confidential survey data. The security of
20+
them to. The security of
2121
your data also depends on how and where you choose to deploy and run the app.
2222

23-
## Do not post sensitive data publicly
24-
25-
When reporting a bug, **do not attach confidential or proprietary scan data**
26-
to public GitHub issues. Provide a minimal, non-sensitive sample, or describe
27-
the file structure instead.
28-
2923
## Supported versions
3024

3125
OpenLiDARViewer is an R&D-stage project. Security fixes are applied to the

0 commit comments

Comments
 (0)