Manual / What’s new

What’s new

The features worth knowing about, newest first — then the complete record of everything that changed in the last 3 months.

Highlights

Everything that changed

Every user-visible change in the window, grouped by the part of the product it touched. Nothing here is trimmed — the highlights above are a selection from this same record, not a substitute for it. The one exception is work on the modelling tools (grade shells, block estimates, geological models, drill targeting) and the map-sheet and figure exports, which are not part of this release and are left out of this page.

September 2026 26 changes

Stories & presenting3 new · 3 fixed
  • Fixed09-27Review round one - one-row strip floor, every row one line, full extent union
  • New09-27Phones frame regional beats at scale; short screens give the model the room
  • Fixed09-26Review round one - verified host cover, band re-base, honest toggles
  • New09-26Phone colour key keeps its place; iPhone embed fullscreen
  • Fixed09-26Review round one - phone-only lock, recipient deferral, empty-state copy
  • New09-26Declutter story mode; phones are viewers only
site4 new · 1 fixed
  • New09-28Exploration.rocks sells self-serve - build it in an afternoon, update any time, the link stays live
  • New09-27Brand skill, copy pass, design audit, one scroll moment, one icon set
  • New09-27Exploration Sites logo and brand across the marketing site
  • Fixed09-27Review round one - returning authors keep their origin, canonical /e/ addresses, consent evidence
  • New09-27Exploration.rocks becomes the ES3D marketing site; app moves to app.exploration.rocks
3D viewer1 new · 2 fixed
  • Fixed09-28Letting go of a two-button pan in either order no longer jump-cuts the view
  • Fixed09-28Never save a blank readback as a black scene thumbnail
  • New09-27Slower, proportional Ctrl+both-button slice envelope resize
Other improvements9 new · 3 fixed
  • New09-28Blank and pending assays are tagged, not drawn as a second layer
  • New09-28A free 7-day trial replaces "Request access"; then paused until a plan is paid
  • Fixed09-27A data deck keeps counting scenes after it loads; the report chart gets a 30-day frame
  • New09-27Published decks are counted, and their owners get a report to send
  • New09-27The sample, the intro and Draft story tell a v1 story
  • New09-27Helper lifts z-indexed ancestors, verifies by hit-test, exposes es3dEmbed.cover
  • Fixed09-09Stop the chrome pointing at a tab that no longer exists
  • New09-09Two tabs — hold every interpolation surface, rehome the rest
  • New09-09Build-time flags for the held model surfaces
  • New09-01Lift the handheld zoom ceiling by the framing headroom; cover cedes its wide shot
  • Fixed09-01Review round one - the iPad fade anchor, URL allowlist, and honesty carve-out
  • New09-01Framing headroom, iOS standalone link, minimal-chrome share option

August 2026 332 changes

Stories & presenting19 new · 18 fixed · 3 faster
  • Fixed08-27The Report pill is pressable again, and the Reset chip gets its 6px back
  • New08-24Arrows drive the slicer; media photos can be uploaded; text fades only in Present
  • New08-21Distance arrows survive share links, beats and the bundle
  • Fixed08-20The ✕ reaches every deck, and the terms link actually stands
  • New08-20The dismiss control clears the whole compliance bar
  • New08-20Make Play/Stop read as the primary action
  • New08-19A viewer touching anything stops the tour
  • New08-19One action for 'the viewer took over'
  • Fixed08-12Busy card tucks bottom-right under the story cover
  • New08-10Make the scene rail's scrollability discoverable
  • New08-1044px tap areas that do not move one painted pixel
  • Faster08-10The capture walk visits scenes instantly
  • Faster08-10Deflate the .pptx instead of storing it
  • Fixed08-10The capture pass now answers Cancel, and stops steering live followers
  • Fixed08-09Stop offering Cancel once it cannot take effect — plus its announcement and its boundary
  • New08-09A way out of a 33-second render — cancel, abandon before writeFile
  • Fixed08-09Key every classified figure a slide drew, not just the drill ramp
  • Fixed08-09A share link decides the attribution — and the figures that may sit under it
  • Fixed08-09Pin exportDeck(rendered) vs exportDeck(spec) — review finding
  • New08-09Render slides on export, with progress, a ref guard and a real error path
  • New08-09Render each beat at export time, with its overlays and furniture
  • New08-09Carry the author's brand, and a sender's meta on a recipient deck
  • New08-09Carry the slide → source view index through buildDeck
  • New08-09A settle policy that outlasts the debounces sceneHold misses
  • New08-09Render buffers that match the PPTX box aspects
  • Fixed08-08Capture any unvisited scene before exporting, so a story exports as pictures
  • Fixed08-08Carry the per-scene captures in the .es3d, so a reopened project exports slides with images
  • Fixed08-08Reset view arms on real camera motion, not on a bare click
  • New08-08A compact scene rail for embed-sized viewports
  • Fixed08-08One owner for the top-right corner — chapters, fullscreen and help stop colliding
  • New08-08A one-time gesture hint and a viewing-only help popover
  • New08-08Reset view — the way back when the camera is lost
  • New08-08Layer flyout lists exactly what the scene contains
  • Fixed08-03The cover's re-ask fired before the composites existed
  • Fixed08-03A deck skipped past its cover reached the reveal with no model
  • Faster08-03The AI-targets group stopped rebuilding what it already had
  • Fixed08-03The FIRST reveal in a freshly opened deck had no model to reuse
  • Fixed08-03A beat that reveals the AI targets retrained a model it already had
  • Fixed08-03The training key stated the LIVE rule under a frozen round's tiers
  • Fixed08-02The training key counted grid-averaged blends as composites
GIS & terrain13 new · 15 fixed · 1 faster
  • Fixed08-27Stop terrain showing through a draped polygon's cap
  • Faster08-27Ration vector drape refinement by the ground it actually covers
  • Fixed08-19The filter badge counts features, and labels honour the filter-kind gate
  • Fixed08-19Resolve exact layer names against the full layer list, not just filterable ones
  • Fixed08-19A removed layer drops its query-filter binding
  • Fixed08-19Fallback chain for feature totals on bridge-less line/polygon layers
  • New08-19One feature-space count authority for filtered layers
  • Fixed08-13The fallback test actually drives the fallbacks, and two comments stop lying
  • Fixed08-13The fill lift bites on OLD projects, and its total is bounded
  • Fixed08-13The merge transposed ctx.theme and ctx.bloom — both features were inverted
  • Fixed08-13The greenstone belts stop tearing on the country polygon
  • Fixed08-13A glow keeps its Size control, and picking Glow writes its intensity
  • New08-13Default hero-glow intensity 5 (hero sweet spot) + hero-bloom showcase probe
  • New08-12A glow effect auto-enables the FX/bloom path (edge-triggered, respects manual toggle)
  • New08-12Hero glow drives sibling HDR (xintensity) so post bloom catches it as real light
  • New08-12Softness-driven feathered shadow spread + intensity/softness in rebuild signature
  • New08-12Editor Intensity (glow) + Softness (shadow) controls
  • New08-12Add intensity+softness to VectorEffect model + sanitize
  • Fixed08-06Vector-effect halos ride the transition fade, and stop rebuilding 60x/s
  • Fixed08-06Restore path must set depthByOpacity, matching the builders
  • Fixed08-05Carry hidden labels in the scene snapshot, conditionally
  • New08-05Remove individual labels from the scene, restorably
  • New08-05Per-ortho encoding quality picker (Balanced/High/Lossless)
  • Fixed08-05Stop compounding lossy re-encodes + close review gaps on drape encoding
  • New08-05Encode image drapes as WebP/PNG instead of raw RGBA
  • New08-05Read encoded image drapes via an async decode pre-pass
  • New08-05"Conform to terrain" — re-place an existing layer on the ground
  • Fixed08-04Conform imported 2D vectors to the terrain instead of a flat mid-elevation sheet
  • New08-03Infrastructure proximity — measure the deck's "12 km from the highway" claim
3D viewer9 new · 13 fixed · 5 faster
  • Faster08-26Defer GIS geometry a handheld's opening scene does not show
  • Faster08-25Release normal/uv CPU copies on an embed, behind a save-proof belt
  • Faster08-25Cap drape DECODE on handhelds, source bitmaps 179.6 -> 24.1 MB
  • Faster08-25Cap drape imagery on handhelds, measured 349.9 -> 32.4 MB
  • Fixed08-24Stop point icons ghosting and orthophotos popping across a beat change
  • Fixed08-23The fat-line clip must be installed in setupOutput, or it never compiles
  • Fixed08-23The slicer must reach drill traces without needing a rebuild
  • Fixed08-22The slicer reaches drillholes imported as their own database
  • New08-22Free text blocks, and markup that fades across a scene change
  • Fixed08-22The arrowheads stop at the end lines instead of spearing them
  • Fixed08-22The arrow panel stops closing itself, and the number can be relabelled
  • New08-22Restyle the number on a distance arrow
  • Fixed08-22Keep the arrow's panel open while you drag its ends
  • New08-22Style a distance arrow, and end lines at each end
  • Fixed08-22Arrow endpoints actually drag now
  • New08-21Two clicks anywhere place a distance arrow
  • New08-21Draw distance arrows with screen-space heads and a live label
  • Fixed08-21Trace thickness now survives a slice or clip box
  • New08-11Eye-dome lighting — contact edges that show what is in front of what
  • Fixed08-11Demo labels laid across the sign-in dialog — pin every drei <Html> z-band
  • Faster08-08Mount a content family only when the scene contains it
  • New08-08A dependency-free scene-family readiness registry
  • New08-08Publish a camera-off-authored-pose signal from inside the Canvas
  • New08-08SceneContents() — one derived truth about what is in the scene
  • Fixed08-03Three layers skipped the crossfade when their material was rebuilt mid-flight
  • Fixed08-03The AI targets get their own crossfade channel
  • Fixed08-03Crossfade the learning-points layer with its siblings
Importing data10 new · 9 fixed
  • New08-27Streamed GeoTIFFs read pyramid overviews, pool their decode, and prefetch chunks
  • Fixed08-21A second drillhole import is a separate database again
  • New08-21Replace a drillhole table, including removing what is gone
  • Fixed08-21The wizard can complete a partial merge payload
  • Fixed08-21Use colour tokens this theme actually defines
  • New08-21Add or update drillhole data in an existing project
  • Fixed08-1410 adversarial-review defects in the GeoTIFF streaming slice
  • New08-14Ortho imagery path streams through the decimated reader
  • New08-14Geophysics GeoTIFF path streams at a 2500-cell target
  • New08-14DEM GeoTIFF path streams — AOI-windowed, tier-decimated, exact node lattice
  • New08-14GeoTIFFs to 2 GB — blob-range open above 250 MB, honest gate above 2 GB
  • New08-14Streaming decimated GeoTIFF reader (tile-aligned, skip-aware, budget-bounded)
  • New08-11Leapfrog .msh meshes, routed by content not extension
  • Fixed08-11Say when a repeated interval discards an assay
  • Fixed08-11Say what arrived out of what was handed over
  • Fixed08-11A negative assay is a code, not a grade
  • Fixed08-10A below-detection-heavy element is an element, not a missing column
  • New08-08Refuse an oversize raster before reading a byte of it
  • Fixed08-08Planned holes in a drilled-collar export are a warning, not 31 errors
Core engine9 new · 8 fixed
  • New08-21Merge drillhole tables into an existing dataset
  • Fixed08-13A fill's tier stops depending on which vertex its ring starts at
  • New08-13Coplanar polygon fills separate in DEPTH, not in the sort
  • New08-13Read bundle terrain into a world-referenced HeightGrid
  • Fixed08-13SourceVector props sidecar hard-fails like kinds, not a silent ?? []
  • Fixed08-12Points parts selected by role, slack that adds its float term, over-inflation warns
  • Fixed08-12Points-bounds slack is the exact import-time formula, not a heuristic; outline parts no longer double-decode
  • Fixed08-12Points-slack floor scales with pointSize/pointRadius, not a flat metre
  • Fixed08-12Frame guard cannot promote a mirror-ambiguous layer to verified
  • New08-12Reconstruct baked layers with a hard coordinate-frame guard
  • Fixed08-12Source-vector reader hard-fails on corrupt sidecars instead of degrading silently
  • New08-12Decode source-vector layers into world map coordinates
  • Fixed08-12Gis.json layers key is validated, not silently defaulted; drop dead sidecar helpers
  • New08-12.es3d GIS bundle reader scaffold with an awkward-case fixture
  • New08-05Drape encoding tiers + imageMime/quality in the bundle sanitizer
  • New08-03Capture readout and top drivers for the report card
  • New08-03Fit bands and the refusal rule, with the yardstick as data
Colour & legends1 new · 15 fixed
  • Fixed08-21Stop a background rebuild wiping a bin threshold mid-edit
  • New08-19Drop one element's scale without wiping the shared map
  • Fixed08-19The drill colour key follows what the scene actually draws
  • Fixed08-19The key obeys the filter-kind gate, and discloses counts it could not filter
  • Fixed08-19The key follows a filter RENAME, and the folder gate pins its full table
  • Fixed08-19The GIS key re-renders when the query filter or a folder moves
  • Fixed08-19A class-card note only where its denominator matches its rows
  • Fixed08-19GIS keys count what the filter and the folder leave on screen
  • Fixed08-18The exported key shows its hidden classes, and a roster guards the set
  • Fixed08-18The exported grade key indexes by class, like the screen
  • Fixed08-12The picker card lands on-screen — portalled, fixed, viewport-clamped
  • Fixed08-12On-canvas grade legend spans the merged range across databases
  • Fixed08-12One row model for the grade key, indexed by class
  • Fixed08-12Key the drill scales only when a drill layer is drawn
  • Fixed08-12Stop keying figures that are not on screen
  • Fixed08-11The low end of a pinned ramp clips too, and now says so
Slicing & sections8 new · 6 fixed · 1 faster
  • Fixed08-24A tap moves the cut 10 cm, not 2 m
  • New08-24Arrow keys step the slice 2 m, and holding one sweeps the model
  • New08-24Ctrl+arrows move and resize the slice; ease the content crossfade
  • Fixed08-12Keep the fault chip on the face, and re-ask the gate as the cursor moves
  • New08-12Cut fault planes and planned holes, and move their labels with them
  • Fixed08-11Gate the demo hover, and un-blind the guard's extractor
  • Fixed08-11Round-3 — drop the unsound bounds cache, gate five more hover producers
  • Fixed08-11Round-2 review — revert the descent gate, close the box hole, stop the walks
  • Fixed08-11Close the CLICK door, walk EOH labels from their own end
  • Faster08-11Keep the tube rebuild off the clip dependency
  • New08-11GIS point labels, annotations and target pins
  • New08-11Intercept callouts respect the slice, and stop going stale
  • New08-11Hole-id labels relocate onto in-band trace
  • New08-11Hover reports nothing the slice hides
  • New08-11One pure clip predicate + the CPU readback
speaker12 new · 1 fixed
  • Fixed08-27Default the overlay to TOP-right, measured not guessed
  • New08-27Say that exported movies omit the talking head
  • New08-27Publish clips to a public story-media bucket
  • New08-27Voice | Video authoring modes with webcam recording
  • New08-27Mount the overlay in Present mode, one narration status
  • New08-27SpeakerOverlay - reports the same NarrationStatus as audio
  • New08-27Carry the speaker field on share links (https-only)
  • New08-27Embed and re-home speaker clips in .es3d
  • New08-27.es3d video/ container, stored not deflated, additive
  • New08-27VideoAssets IndexedDB store, own DB (the imageAssets pattern)
  • New08-27SavedView.speaker + setSpeaker, mutually exclusive with audio
  • New08-27Placement geometry - shrink on phones, keep the corner
  • New08-27The narration-track rule - speaker wins over audio
Sharing & embeds4 new · 4 fixed · 4 faster
  • Faster08-26Compress share bundles losslessly, and gate mobile on raw bytes
  • New08-24Publish a story to a permanent /e/<slug> address
  • Fixed08-20Release the audience defer for targets, and lift disclosure over the pano
  • Faster08-20The chat brain loads with the chat, not with the viewer
  • Faster08-20Select the authored-intent boolean, and pin the roots inside the boundary
  • Faster08-20The geology renderers load only when a scene asks for them
  • New08-12Refuse a hydrate this device cannot survive, instead of dying
  • New08-06Stream the recipient's project download, with honest progress and resume
  • Fixed08-12Sync optsRef in an effect, not during render
  • Fixed08-12The upload progress row was inside a disclosure nobody had opened
  • Fixed08-12Ask the size question before the mount-time auto-upload
  • New08-08One obvious action, with options and embed behind disclosures
Cloud projects5 new · 6 fixed
  • Fixed08-12The pre-compress ceiling was the wrong shape, not the wrong side
  • Fixed08-12Bound the pre-compress budget by what the compress peak can survive
  • New08-05Progress and cancel for a share-with-data upload
  • Fixed08-05Lower per-project cap to 400 MiB and refuse over-cap saves BEFORE compressing
  • New08-05Determinate upload progress with cancel
  • New08-05Route saves and share bundles over 6 MiB through TUS
  • Fixed08-05Plug abort-listener leak and honour cancel during the tus import window
  • New08-05Resumable TUS upload transport with progress and cancel
  • New08-051 GiB per-project cap with its own message, 1.5 GiB bucket backstop
  • Fixed08-05Add test coverage for uploadShareBundle and openFromCloud error surfacing
  • Fixed08-05Surface the real Supabase error instead of a bare Upload failed
Exports3 new · 7 fixed
  • New08-04Render the 3D-view PNG at print resolution (1× / 2× / 4×)
  • New08-11GOCAD TSurf writer + committed-snapshot export
  • Fixed08-11Anchor drill-derived exports on project.center, not grid.origin
  • New08-11Drill traces → DXF polylines, collars → CSV
  • Fixed08-09The run owns activeId, hands it back first, and restores the LIVE scene
  • Fixed08-09One claim, one export — a movie run can no longer start on top of a deck render
  • Fixed08-05Add mutation-proven URL revocation test for the click-throws path
  • Fixed08-05Cover the blobPartFor copy branch and error paths in saveBundleAction
  • Fixed08-05The local .es3d download failed silently on any throw
  • Fixed08-03A movie beat that turns the AI targets on baked its opening frames empty
Annotations7 new · 2 fixed
  • New08-24Media annotations — photos and embedded YouTube on a scene
  • New08-24Text blocks dim when the viewer moves off the beat's saved view
  • New08-23Text blocks get alignment, leading, tracking and a glyph halo
  • Fixed08-23A text block must establish its width, not merely cap it
  • New08-23Text blocks get bold, italic and rotation
  • New08-23Arrows expand in, pin across scenes; text blocks get width + a type voice
  • New08-21A distance arrow is a third annotation kind
  • New08-21The pure rules a distance arrow follows
  • Fixed08-12An armed placement cannot drop into an export mid-render
Project files2 new · 1 fixed · 5 faster
  • Faster08-30Omit derivable fills of stored-hidden layers - big decks fit phones
  • Faster08-27Ship a hidden polygon fill as a marker, re-earcut it on demand
  • New08-12Round-trip intensity+softness through core bundle twin + urlState share links
  • Faster08-12The writer's terrain reference computes only what it compares
  • Faster08-12Stop shipping a terrain lattice the heightGrid reproduces (phase 2, the writer)
  • Fixed08-11Phase-1 review — same material, a witness that cannot rot, an honest comment
  • New08-11The loader can rebuild a terrain mesh from its heightGrid (phase 1, reader only)
  • Faster08-11Stop shipping vertex normals the loader regenerates exactly
chat3 new · 5 fixed
  • Fixed08-20A throwing tool fails the turn instead of wedging the chat
  • Fixed08-19The GIS count unit tells the truth, and the renderer checks filter kind
  • New08-19Model_overview names the filterable GIS layers and their columns
  • Fixed08-19GIS filter counts disclose their unit, and never claim "all shown" over a hidden layer
  • New08-19Set_query_filter / clear_query_filter target a named GIS layer
  • Fixed08-13Adversarial-review findings F1-F6 on set_query_filter
  • Fixed08-13Reject conditions+intercept ambiguity; single project read in clear note
  • New08-13Set_query_filter / clear_query_filter — NL drillhole filtering via the chat (drill-only v1)
anysize4 new · 2 fixed
  • Fixed08-31Review round two - accounting, wire-cap headers, cover re-fire, export sweep + the pin battery
  • Fixed08-31The review's confirmed critical + four load-bearing hardenings
  • New08-30Mint the scene-peak - meta.data.peak rides every share link with beat snapshots
  • New08-30Beat-scoped eviction - a walked deck's residency tracks the window, not the union
  • New08-30Staged share-path load - measured re-verdict, selective inflate, wire cap
  • New08-30Core wave - one defer policy, scene-peak facts, peak verdict, staged unpack
report-card5 fixed
  • Fixed08-04Pin soft-label threshold, share the card's width cap, dedupe refusal qualifier
  • Fixed08-04The fit card speaks the card's own vocabulary, and refuses on a frozen round
  • Fixed08-03The band word carries its own rule when the legend clips
  • Fixed08-03Close the yardstick's contradicting ranges, pin its copy
  • Fixed08-03Band the printed number, not the raw AUC
Visual effects2 new · 2 fixed
  • Fixed08-13No HDR lift where no bloom will run — plan/ortho and WebGL2
  • New08-13Theme-aware outline/shadow defaults + glow probe re-pinned
  • Fixed08-13Curve both hero ramps, and assert the glow still reads ore-gold
  • New08-13The hero glow blooms and NOTHING ELSE does — threshold selectivity
Import & export2 new · 1 fixed
  • Fixed08-27Pin the .es3d zip mtime so bundles are reproducible
  • New08-11Multi-layer DXF writer, ACI colour, and one export frame
  • New08-11Leapfrog .msh binary mesh parser
engagement1 new · 2 fixed
  • Fixed08-27Close four holes in the guards that protect an opted-out viewer
  • Fixed08-27File a settled cut against the right scene; make the notice guards structural
  • New08-27Record settled section cuts and narration completions
App shell1 new · 2 fixed
  • New08-23Ask and Report become icons stacked above the compass
  • Fixed08-23Ask sits left of Report, and the float band spaces evenly against NavBox
  • Fixed08-12Auto-reload once on stale-deploy chunk failures
publish1 new · 2 fixed
  • Fixed08-22The trailing-slash form needs its own rewrite source
  • Fixed08-22/e/<slug>/ with a trailing slash must not 404
  • New08-22/e/<slug> is an audience route — the foundation for a stable embed pointer
project2 new · 1 fixed
  • New08-21Merge drillhole CSVs into the loaded project
  • Fixed08-19Null the project before wiping scales, not after
  • New08-19Clear the drill data without destroying the workspace
scene-tree1 new · 2 fixed
  • Fixed08-19Promise the grid outcome the clear actually delivers
  • New08-19Clear the drill data from the layer panel
  • Fixed08-19Don't strand the user after removing every drill row
Panoramas1 new · 2 fixed
  • Fixed08-12An armed placement cannot outlive the run, the beat, or the panel
  • Fixed08-12In-flight hotspot text survives an unmount — commit on change, not on blur
  • New08-12The author may place, edit and REMOVE 360° hotspots in Present
descent3 fixed
  • Fixed08-12An ungrounded chip is tested as a COLUMN, not skipped
  • Fixed08-12A chip stands on the ground the READER can see, resolved once
  • Fixed08-12Annotation altitude is an RL, and the clip gate comes back
Layers panel1 new · 2 fixed
  • New08-12Streamline the layer panel to an institutional density
  • Fixed08-08A colour-by mode the project cannot paint snaps back to one it can
  • Fixed08-08Mint drill rows only for content the project carries
Other improvements16 new · 40 fixed
  • Fixed08-31Review round one - the pose/pixel leak family + a11y + pins
  • New08-31Portrait framing fit + phone chrome round two
  • New08-30Fullscreen on handhelds, and Present chrome that yields to the model
  • Fixed08-30Guard the rebuild chokepoint - three ways the adversarial review found to lose or double a fill
  • Fixed08-30The SYNC save sweep must skip the fill-marker part too
  • Fixed08-30Import deferredFill lazily in the pump - a static edge closed a module cycle
  • New08-27Sensitivity sweep → story chapter
  • Fixed08-27Keep agent and QC working directories out of the upload
  • New08-23Say what the import options do, and give secondary databases real rows
  • Fixed08-22The shaft must stop inside the head so the point is sharp
  • Fixed08-2125 confirmed findings from the B/C/D adversarial review
  • Fixed08-21The last five findings from the adversarial review
  • New08-21Highlight composites as their own disclosed layer
  • New08-21The format gate for highlight composites
  • Fixed08-21Six defects from the adversarial review
  • Fixed08-21Count intervals removed and added, never their net difference
  • Fixed08-20Guard the deferred chunk, and make disabled Play legible
  • Fixed08-20Arm the grade-anisotropy subscription through a guard
  • Fixed08-19Removing every layer row no longer restores the drillholes
  • Fixed08-194 final whole-branch review findings
  • New08-19Drop drill filters without touching the GIS ones
  • New08-13Render from an .es3d bundle, disclosing reconstructed layers
  • Fixed08-13Honest selectivity bound, a gold check that can see the line, default 3
  • Fixed08-13Share links follow HERO_INTENSITY_MAX; probe-veffects skips cleanly
  • Fixed08-13Fold the ViewerHints '?' chip under the story cover
  • Fixed08-124 adversarial-review findings on the zoom-near-clip change
  • Fixed08-12Scene no longer vanishes on zoom-in — distance-adaptive near plane + null-island collar exclusion
  • New08-12The Report pill in Present too — shared links and embeds included
  • New08-12In-app bug reports — a Report pill beside Ask
  • Fixed08-12The third .vercel.app alias was still minting links
  • New08-12Transform gizmo — drag to move/rotate/resize a reference plane
  • Fixed08-12Primary grade histogram bins over mergedRangeForElement
  • Fixed08-12The length field never reads below what the scene is drawing
  • Fixed08-12Stop DXF surfaces tearing, let bars go short, allow a 0 s scene
  • New08-12Publish Terms, Viewer Terms and Privacy Policy; enforcement on
  • New08-11Withhold exports and layer control from shared links and embeds
  • Fixed08-11Never measure to a surface the slicer has erased
  • Fixed08-11Production stamped 'nogit' into the compliance record
  • Fixed08-10A grazed dot can no longer bake itself into an export
  • Fixed08-10The dot gets its numbers back, and the probe visits the state it was blind to
  • Fixed08-10The honesty chip gets its centre back — compass and callouts yield at 375
  • Fixed08-10Extend past the last station instead of collapsing the hole onto its collar
  • Fixed08-104 review findings — a probe that ships green, honestly
  • Fixed08-09An export must not steer followers, and pin the scene-entry write
  • Fixed08-09Photograph the scene being exported, and restore what the run changed
  • Fixed08-08301 the deprecated .vercel.app aliases to exploration.rocks
  • New08-08Font CDN links out, link-preview card in
  • New08-08Vendor Inter, Spectral and IBM Plex Mono as first-party woff2
  • Fixed08-08Never log renderer capability from an embed, and honour DNT
  • Fixed08-08?intro=1 replays the hero on a machine that has already seen it
  • Fixed08-08Four defects the adversarial review confirmed
  • Fixed08-06Size the cap from a measurement, and stop flushNow dropping edits
  • Fixed08-06Raise the cap to 500 MB and make every failure visible
  • Fixed08-06Finish an interrupted content tween instead of abandoning it
  • New08-03Persist the run's training composition for the report card
  • Fixed08-02Four places where a check reported success it had not earned

July 2026 429 changes

GIS & terrain45 new · 31 fixed · 2 faster
  • Fixed07-28The finest DEM owns the ground where terrains overlap
  • Faster07-24Skip unchanged layers in the GisLayers apply pass
  • Faster07-24Batch a transition frame's layer fades into one store write
  • New07-24Categorical legend in Present — colour key for classified vector layers
  • New07-24Categorical symbology for lines + polygons (per-vertex fan-out)
  • New07-24Categorical symbology — colour a point layer by a string field (Wave D)
  • New07-23Windowed + decimated ortho decode — never allocate the whole raster
  • Fixed07-23Halve ortho-import peak memory — read bands, drop the interleave copy
  • Fixed07-23Close the colorNode-override blast radius (geochem/grid rebake + dead code)
  • Fixed07-23Post-hoc ortho/GIS drapes render grey — rebuild the clip colorNode
  • Fixed07-23Stop orthos silently vanishing — honour declared alpha + warn off-terrain
  • New07-22Stronger vector effects — soft falloff glow/shadow + bolder outline
  • Fixed07-22List order drives GIS layer draw order (top of the list = in front)
  • Fixed07-22Overlay linework no longer writes depth (crossover z-fight)
  • New07-22FocusManyRequest — n-bumped bulk focus request + consume
  • New07-22Render OUTLINE + drop SHADOW vector effects (effects E3)
  • New07-22Render the per-layer GLOW effect (vector effects E2)
  • New07-22Per-layer vector effect model + editor (effects E1, no render yet)
  • New07-22Polygon outline on/off (show fill only)
  • Fixed07-21Translucent DEM/topography/DXF surfaces no longer hide geometry beneath them
  • Fixed07-21Persist line/polygon feature labels through save/reload (review fix)
  • Fixed07-21Mount the label overlay for line/polygon layers (labelsShownFor)
  • New07-21Enable Label-by for line and polygon layers
  • New07-21Label-by menu reads per-feature props with a union of keys
  • New07-21Render feature labels for line/polygon layers (kind-aware provider + per-feature keep)
  • New07-21Build-time per-feature label anchors + property stash for lines/polygons
  • Fixed07-21Labels inherit the layer's on/off (hidden layer hides its labels)
  • Fixed07-19The remedy follows provenance, and the net that could see itself
  • Fixed07-19The age message needs evidence — invert the default, mark the producers
  • Fixed07-19The thematic surface, the directional remedy, and the net that was blind
  • Fixed07-18The honesty layer around vector-source retention
  • New07-18Drape or un-drape a vector layer after import
  • Fixed07-19A rejected CRS entry can no longer be read as "translate only"
  • Fixed07-19Detect geographic CRSs from the PARSED projection, and make the guard enforce its own rules
  • Fixed07-18The drill wizard must refuse geographic CRSs — and a guard so the next one can't be missed
  • New07-18Geographic CRS support for CSV imports + block CSV CRS prompt
  • Fixed07-18Revert sentinel row-dropping; robust origin; drop lat/lon from this wave
  • Fixed07-18Confirm the CRS instead of inferring it; sanitise coordinates ungated
  • Fixed07-18A bad coordinate row can no longer move the sticky project grid
  • Fixed07-18Make the CSV discriminators sound — order-independent, gated, plausible
  • New07-18Thematic + natural-break classification for point layers
  • New07-18Greyscale by default + selectable terrain themes
  • New07-18Drape imported vectors onto terrain only when asked (default: keep as a layer)
  • Fixed07-17Verify round 2 — fround the geophysics nodata sentinel to the band, throw-safe geokey/nodata reads, PixelIsArea coverage
  • Fixed07-17Verify round — PixelIsPoint node truth, real-file geokey/nodata access, mutant-proof fixtures
  • Fixed07-17One extent convention — node-centre origin/spacing explicit on GridSource
  • New07-17Line styles — dash presets + display smoothing, screen == export
  • New07-17Linked contour layers from grids (GRD wave 2)
  • New07-16Hold 2D point markers at a constant on-screen size
  • New07-152D marker polish — query-filter hides them + 2D outline/halo
  • New07-15Finish label stack — colour + halo styles, manual on/off per point
  • New07-152D camera-facing point markers, 2D by default (3D on toggle)
  • New07-15Label declutter v1 — cap keeps highest-value points
  • New07-15Per-layer point-label font size control
  • New07-153D marker outline/halo (inverted-hull BackSide pass)
  • New07-15Filterable point labels by an attribute rule (Stage 2 v1)
  • Fixed07-153D marker shapes render distinctly + labels sit off the point
  • New07-15Drape KMZ GroundOverlays onto terrain
  • New07-15Import .kml/.kmz vector layers (WGS84) via the geojson path
  • Fixed07-15Imported points render again — route through the proven 3D path
  • New07-15Serialize/restore per-point properties so labels survive save/reopen
  • New07-15Add per-point properties field to the bundle points-part
  • New07-15"Label by" + "Max labels" editor controls
  • New07-15Persist labelBy/labelMax through the .es3d bundle
  • New07-15Render point labels as capped Html billboards
  • New07-15Retain per-point property values for labelling
  • New07-15LabelBy/labelMax fields + setters on GisLayer
  • Fixed07-15Imported points invisible — billboard markers had a zero instanceMatrix
  • Fixed07-153D point markers vanished — size sphere to the data extent, not px
  • New07-15Marker symbology controls + live apply in the viewer
  • New07-15Persist point marker symbology fields
  • Fixed07-15Recognise billboard point markers when serializing GIS layers
  • New07-15BuildPointMarkers — billboard shape markers + 3D fallback
  • New07-15Marker symbology fields + setters on GisLayer
  • New07-15Pure marker shape-atlas generator (7 shapes)
  • New07-14Fill + outline opacity sliders for vector layers
  • Fixed07-14Shapefile review fixes — batch resilience + store-zip + lone-.shp guidance
  • New07-14Import loose shapefile sidecars (.shp + .dbf + .prj together)
Stories & presenting30 new · 20 fixed · 2 faster
  • Fixed07-31The training sub-header matched the card, not the body text
  • Fixed07-31One gate decides whether the training key prints, and tests pin it
  • Fixed07-31The training-data key follows the points, not the tier rows
  • New07-31The training data gets a key that states its rule
  • New07-31A beat can carry the learning-points reveal
  • Fixed07-30A filtered beat's drillhole subset was leaking into every later unfiltered beat
  • New07-29A GIS-only project carries its Present story through save and reopen
  • Fixed07-29The legend stack clears the figures column below it too
  • Fixed07-29Apply queryFilters on the instant path too, via a shared helper
  • Fixed07-29The legend fit spends slack it was hoarding a row at a time
  • New07-29The ML targets finally have a key on screen
  • New07-29Replay the targets reveal + threshold on both scene-apply paths
  • New07-29The scene tier reveal + threshold survive the share/bundle envelope
  • New07-29Capture the targets reveal + threshold in a scene snapshot
  • Fixed07-29The deck headline survives a save and reopen
  • Fixed07-25The legend stack can no longer climb under the narrative card
  • New07-25The story cover quiets the intercept callouts and the NavBox
  • Fixed07-25The cover-quiet cuts on the way out, and lands in the same commit
  • Fixed07-25The story cover is a clean title card — the map furniture goes quiet under it
  • Fixed07-24Measure the compliance band's reservation instead of counting rows
  • Fixed07-24Calibrate the compliance strip's reserved row height to the measured 41px
  • Faster07-24CSS dwell bar, reserved bottom bands, lazy overlays, busy surface
  • Faster07-24Key the on-canvas GIS legends on a cheap fingerprint
  • New07-23Drag-reorder scene rows + slide-sorter grid overview
  • New07-23Shared scene-drag core (MIME + pure drop-index + edge scroll)
  • Fixed07-23Mutually exclude the Ask dock and 3D-Layers flyout in the shared corner
  • Fixed07-23Stack the Layers flyout above the NavBox (was hidden behind it)
  • New07-23Mount the 3D Layers flyout in Present mode
  • New07-233D Layers flyout component + layers icon
  • New07-23Pure 3D-layers assembly selector + show/hide gate
  • New07-23Read-only investor Ask in the distributed story
  • Fixed07-23Duplicate Scene-name field when switching to a slide/CTA scene
  • New07-23Unify — Cinematic motion + Chapter in the Story-tab scene editor
  • New07-23Scene management — undo Update, rail-tile Update, duplicate scene
  • New07-23Update button — re-frame a scene to the current view
  • New07-22Carry author headline (storyTitle) in the share/.es3d envelope
  • New07-22Hide in-scene chrome while the cover is up (clean hero takeover) + qc probe
  • New07-22Default share links to carry the project (share-with-data)
  • New07-22Wire live-model cover into PresentShell
  • New07-22StoryCover redesign — lower-left lockup over the live model, optional Skip, no full scrim
  • New07-22ViewController cover attract-orbit — establishing pose + slow orbit around scene 1
  • New07-22CoverActive (viewsStore) + coverDismissed (uiStore) session flags
  • New07-22CoverGeometry — firstCameraScene + establishingPose (pure, tested)
  • New07-22Smooth scene transitions — pole-safe camera + label/leader fade on layer-hide
  • Fixed07-22Review fixes — auto-play holds through the flight, robust reorder, tidy fields
  • New07-21Reorder scenes, per-scene transition duration, Story-tab rename
  • Fixed07-21Saved scene views no longer overwrite each other (id collision)
  • Fixed07-09Guard the demo story by its populate-time stamp, not live project stats (war-room #2 review)
  • New07-09Sample stories auto-populate — Present always opens playable (war-room #2)
  • New07-07Section.geoTraces rides the scene snapshot + bundle round-trip (G5 W3)
  • Fixed07-05Move the data legend out from under the narrative card (qc-confirmed P5 overlap)
  • New07-04Plain-language story beats + a Present-mode qc capture (persona panel #12)
3D viewer12 new · 16 fixed · 6 faster
  • New07-31An elevation (RL) scale — the viewer answers "how deep is it"
  • Fixed07-25A mode switch must produce the camera it produced before the hoist
  • Fixed07-25A renderer failure must not be terminal for the tab
  • Fixed07-25AdaptiveDpr must RE-ASSERT the pixel ratio, not cache it
  • Fixed07-25Hold the canvas slot in the Pro Suspense fallback + repoint the jsdom viewer mocks
  • Faster07-25Hoist the Canvas above the Pro<->Present swap — one renderer per tab
  • Fixed07-24The framing glide arcs around the content and always loses to a camera command
  • Fixed07-24A drag no longer freezes hover — unhover on drag start, re-pick on release
  • New07-24Framing glides instead of teleporting; slice drags and FPS reporting stop costing a frame
  • Faster07-24Keep DOM-only hover/selection and chrome-only uiStore writes out of the render epoch
  • Faster07-24No raycasts while the pointer is dragging, one pick per frame at rest
  • New07-24PDF reference planes — rasterise a PDF page onto a plane in 3D
  • New07-24Reference image planes — free-placed textured quads (Wave C)
  • New07-23Fog of war — radial distance fog centred on the focus
  • New07-22Persist depth-cue toggle + strength across reloads
  • New07-22User-tunable depth-cue strength + subtler default
  • Fixed07-22Stop camera drift after mouse release (disable OrbitControls damping)
  • Faster07-21Delete CursorProbe — a per-frame full-scene raycast with no reader
  • Fixed07-20An outlines-only polygon's fill stops picking, not just drawing
  • New07-21Wheel zoom-to-cursor + middle-click recentre (Leapfrog reflex)
  • New07-21IsTap predicate — stationary press→release vs drag
  • Fixed07-19Near plane follows the VISIBLE envelope, so hiding a regional layer stops clipping the drill
  • Fixed07-19A hidden layer stops picking, not just drawing
  • New07-18Backdrop presets — Flat / Studio / Horizon
  • Fixed07-18Slice terrain like everything else — keep the inside of the band
  • Fixed07-18Derive layer bounds so the slicer sizes to imported terrain/surfaces/grids
  • Fixed07-18Call vertexColor() — the bare factory blacked out every imported DEM
  • Faster07-16Stop the billboard facer redoing identical work every frame
  • New07-15User-settable viewport background colour
  • New07-14Dismissible forward-looking statement + north-up compass reset
  • Fixed07-13Stop three r171 InstanceNode from blanking the whole WebGPU frame
  • Fixed07-12Frame the deposit on load so drill data is visible
  • Faster07-12P1 drill-bar LOD — prism far-tier bucket (37.3M->13.2M tris, 7.6->30.7 fps @ 8k)
  • Fixed07-01Triangle-align the cap buffer capacities — kills the NaN bounding-sphere warning
Core engine19 new · 9 fixed
  • Fixed07-31A tiny non-zero share must never print as 0% or a cutoff as 0
  • New07-31The training split and the sentence that states its rule
  • New07-22GOCAD TSurf + legacy ASCII VTK surface parsers
  • New07-22Stage-A field builder — minimum curvature + clip/blanking + buildGrid2D router
  • Fixed07-21Strict-null-safe feature-anchor helpers (noUncheckedIndexedAccess)
  • New07-21Per-feature label anchors — polyline arc-midpoint + polygon interior point
  • New07-15Pure label density cap (capLabels)
  • New07-12Additive .es3d barLogs config (types + sanitize + round-trip)
  • New07-12Bar-log geometry math (value→length, azimuth outDir, over-cap)
  • Fixed07-07CompositeIntervals/collectSamples bail on undefined segments — no uncaught 'segments is not iterable' from an async recompute after teardown (CI hygiene)
  • Fixed07-07Topo datum-truncation gated on fill — cap-on/fill-off stays pre-Wave-A byte-identical, no logged rock shaved (Wave A re-review)
  • Fixed07-07Topo cap truncates uncovered-DEM columns at a conservative fallback datum — fill no longer balloons above ground where terrain is missing (Wave A review)
  • Fixed07-07Topo-cap SDF written in engine x-fastest order — cap no longer clips the wrong region on non-cubic grids (Wave A review CRITICAL)
  • Fixed07-07Lone real domain's filled halo renders solid (phi=-sk) — mesh consistent with label + inferred volume (Wave A 2b)
  • Fixed07-07Watershed neighbour min over OUTSIDE domains only — a co-inside older unit no longer holes a younger domain's constrained core (Wave A 2b)
  • New07-07Watershed carved field grows domains to tile filled voids — logged contact internal, contacts/chronology/topo preserved (Wave A)
  • New07-07Drill-envelope AABB + per-axis 10% expansion (Wave A)
  • New07-07Per-domain type features (PCA tabularity/coherence) + type heuristic over aggregated intervals (AI geo-setup W1)
  • New07-07Litho grouping heuristic + THE ASSAY-GUARD — protected ore-hosts never merged, borderline to protected (AI geo-setup W1)
  • New07-07Per-litho grouping features + assay significance (metal share, above-cutoff share) (AI geo-setup W1)
  • New07-07Assay-litho overlap join — hole+depth attribution grounding the assay-guard (AI geo-setup W1)
  • New07-07FillLabelCells — per-label section fill triangles (G5 W1)
  • New07-06SectionResolve2D — 2D chronology resolver matching the 3D carved fields (G5 W1)
  • New07-06ChainContours — weld marching-squares segments into polylines (G5 W1)
  • New07-06ConfidenceFromDrilling — pure per-vertex distance->confidence for the G3 confidence fade (G3 W1)
  • New07-06HonourRate part 2 — hit/miss counter with skipped/unmappable/outside-grid exclusions + per-domain support (G3 W1)
  • Fixed07-06ExplodeLayout stack centers on actual ranks + edge-case tests (G4 W1 review)
  • New07-06ExplodeLayout — pure explode-factor→per-domain offset (radial+stack) (G4 W1)
Exports7 new · 10 fixed
  • Fixed07-25Block the mode switch while a movie export is running
  • New07-23Mux per-scene narration into the exported movie
  • New07-23Optional AAC/Opus audio track on the WebCodecs encoder
  • New07-23Narration planning/mixing + decode to mono PCM
  • New07-23Hold each scene for max(durationSec, narrationSec)
  • New07-22Fade labels + leader lines between scenes in exported video
  • Fixed07-22Deck + fallback follow scene array order, not isCover hoist
  • Fixed07-19The local pass is not skipped in the 101-199 band; stacking words follow every measurement
  • Fixed07-19The surface classifier is ADVISORY — it recommends, it never suppresses the dialog
  • Fixed07-19Read solids against their OWN footprint; stop dedup eating real area; drop two false claims
  • Fixed07-18Delete the watertightness signal; a skipped measurement can no longer read as ground
  • New07-18Subsurface solids import as 3D meshes; terrain is a choice, never automatic
  • Fixed07-18SOLID stream↔parser parity — read e.points, triangulate the bowtie order on both paths
  • Fixed07-18Stream mid-size DXFs (threshold 256MB→48MB) to prevent parse-time OOM; stream/parser geometry parity
  • Fixed07-18Scope MESH recovery to the ENTITIES section (drop block-definition MESH)
  • Fixed07-18Import polyface meshes + MESH entities as surfaces (were dropped to 0 triangles)
  • New07-09Burn the compliance strip into PNG + movie exports (war-room #5)
App shell11 new · 5 fixed · 1 faster
  • Fixed07-24The busy card must show BEFORE the freeze, and keep its label
  • Fixed07-24Text fields keep native drag-and-drop; the wasm warm swallows its own failure
  • New07-24Delay-in and minimum-visible on the busy indicator
  • Faster07-24Dedupe setHover at the setter and split the Hud into leaf subscriptions
  • Fixed07-18Stack the Backdrop control so "Horizon" isn't clipped; add verification probes
  • New07-14Custom HEX-first colour picker (replaces the native OS swatch)
  • New07-12Persist downhole bar logs into .es3d (save + restore)
  • New07-12DownholeBarLogs renderer + pure instance builder, mounted in Scene
  • New07-12BarLogStore — configs, lifecycle seeding, bundle mappers
  • Fixed07-11Final-review fixes — mode-aware NavBox, keymap dialog guard
  • New07-11Wave 7 — warm-quartz light viewport, resizer a11y, polish residuals
  • New07-11Wave 5 — left rail intent groups + first-run/empty-state honesty
  • New07-11Wave 4 — Viewer card: junk drawer -> titled groups, control grammar, one help surface
  • New07-11Wave 3 — story rail P0 fix, honest thumbnails, +Add menu, delete undo, bottom-band layout
  • New07-11Wave 2 — Present-mode chrome integrity (P0) + TopBar redesign + Present keyboard nav
  • New07-10Wave 1 foundations — tokens, primitives, consistency sweeps
  • Fixed07-09Serve favicon.ico, apple-touch-icon.png and robots.txt (war-room pre-flight 404 hygiene)
Importing data8 new · 9 fixed
  • New07-24Per-terrain ortho draping — target the chosen/best-fit terrain
  • New07-24Per-file detail control for DEM + orthophoto fidelity
  • New07-22.ts (GOCAD TSurf) + .vtk land as surface GIS layers
  • Fixed07-20TIF DEM node-centre placement — share one geoTiffNodeGeometry producer
  • Fixed07-17F32HeightGrid frounds noData with the data; seam-test docstring states its honest scope
  • Fixed07-17Verify-minors pile — tighter GRD acceptance, honest near-miss, real shas, no NaN terrain
  • Fixed07-17Final review round — drape triage restored, polygon fills follow the filter
  • Fixed07-17MapInfo TAB review fixes — attributes reach the layer, .MAP header owns the CRS, binary hardening
  • New07-17MapInfo TAB vector sets — claims and tenure open natively
  • New07-17Double-precision binary .grd flavour — the second contractor GRD dialect opens natively
  • New07-17Content-aware DXF topo — contours/TIN become terrain, linework gets honest simplification
  • Fixed07-17GRD review fixes — f32-exact dummy sentinel, honest .gi clamps
  • New07-17Geosoft GRD — parser + drape/terrain routing (wave 1)
  • Fixed07-13Correct triangular 3DFACE + crop-on-ingest for streamed DXF
  • New07-13Stream large DXF DEMs past the 512MB string cap
  • Fixed07-06Honest empty/partial import messages (AOI mis-attribution + planned-holes partial) + disclosure uses CLASSIFICATION_MIN_HOLES (retro review)
  • Fixed07-03Surface the ten silent secondary-import failures (persona panel #10)
Drill data11 new · 4 fixed · 1 faster
  • Fixed07-25Reproduce drei's LINEAR z-index, box-cull, and stop hiding ids over live core
  • Faster07-25One container for the hole-id labels, not 600 <Html> roots
  • New07-22Per-DB bar-log editor in DrillDbEditor (Wave C3)
  • New07-22ExtraDownholeBarLogs — histogram combs per secondary DB (Wave C2)
  • New07-22Per-DB barLogsEnabled + barLogs in DrillDbStyle, sanitized (Wave C1)
  • New07-22Hole search spans secondary databases (Wave C4)
  • New07-22Center-in-view + reorder for secondary DB rows (Wave B4)
  • New07-22Secondary top-intercept parity + wider control ranges (Wave B3)
  • New07-22Per-DB collar/trace label toggles (Wave B2)
  • New07-22Per-DB independent traces/assay/litho parts + litho radius (Wave B1)
  • New07-22Per-DB filter UI — each secondary database gets its own filter control
  • New07-22Per-DB query filter reaches secondary DBs in render + store
  • Fixed07-22Stable secondary-DB ids + sourceCrs round-trip (reopen-corruption fixes)
  • Fixed07-09War-room #3 — disclosed cutoff composite, not lowest-baseline smear
  • New07-05Screen-space callout declutter (persona panel #5, layout half)
  • Fixed07-05Downhole qualifier + selection-rule disclosure on the callout cards (persona panel #5, disclosure half)
Panoramas16 new
  • New07-24Tour polish — hotspot drag-reposition + Present auto-pan (Wave A)
  • New07-24In-app pano image upload — render from blob + embed in .es3d (2c)
  • New07-24Pack/unpack uploaded pano images in .es3d (2c)
  • New07-24Pano.assetId type + setPanoImageAsset + link persistence (2c)
  • New07-24IndexedDB store for uploaded pano images (2c)
  • New07-24360->360 jump hotspots + target picker (2b-3)
  • New07-24Media hotspots — image/PDF/video overlays on Dialog (2b-2)
  • New07-24Hotspot authoring in the scene editor (pin/info)
  • New07-24Projected hotspot markers + sphere-click placement (pin/info)
  • New07-24Persist hotspots in share links + .es3d
  • New07-24Scene hotspot data + store actions
  • New07-24Pure hotspot anchor + id helpers + SavedView field
  • New07-23Persist the landing viewpoint in share links + .es3d
  • New07-23Set viewpoint / Clear controls in the pano scene editor
  • New07-23Glide to the saved viewpoint on entry + publish live pose
  • New07-23Saved-view data + pure landing-glide + live-pose singleton
Labels11 new · 4 fixed · 1 faster
  • New07-22Box stroke (colour + width) + legible shadow, screen==export
  • New07-22Opt-in box + text styling on drill-intercept callouts (wave 3)
  • New07-22Story-markup notes/hotspots adopt rich text + box (wave 2)
  • Fixed07-22Multiline in the rich editor — native Enter + recursive runs parse
  • New07-22Per-character rich text — chip spans, per-run export, contenteditable editor (wave 1)
  • New07-22Rich-text runs core + resolve + persistence (wave 1, foundation)
  • Faster07-22Update a chip's appearance IN PLACE, never rebuild the overlay
  • Fixed07-22Declutter accounts for glow/shadow painted extent (review finding 4)
  • Fixed07-22Review fixes — typeable editor, honest effect export, robustness
  • New07-22Map/PNG export renders per-label overrides
  • New07-22Edit icon on each chip + LabelEditor popover
  • New07-22Render per-label overrides on the chips
  • New07-22Persist labelOverrides through .es3d, share links, and scene snapshots
  • New07-22Box + chip-effect fields on LabelOverride
  • New07-22Per-label override data model + sanitizer + store actions
  • Fixed07-19A filter change now reaches the labels; a fade change now reaches the screen
w34 new · 4 fixed
  • Fixed07-24Palette Model-section rows tell the truth about sections with no data
  • Fixed07-24Escape undoes the clip envelope draw-slice armed, not just the AOI box
  • Fixed07-24Drop dispatch claims on an explicit marker, not defaultPrevented
  • Fixed07-24Layer filter — no dead-end panel, and Shift-range follows the filtered rows
  • New07-24Filter box on the Layers tree, and a gate on 'Clear imported'
  • New07-24Ctrl+K command palette, and Escape that disarms before it closes help
  • New07-24Glassy panel resize, drop-anywhere import, AOI panel selector
  • New07-24Pure cores for panel-drag, palette ranking, escape cascade, tree filter, import hand-off
Import & export3 new · 5 fixed
  • New07-21EsriPrjEpsg reads the OLD ArcInfo .prj keyword form for UTM
  • Fixed07-18Verify follow-up — positive-flood sentinel, 32767 user-defined CRS guard, per-band void predicate
  • Fixed07-18DEM+imagery geoKeys/CRS + GDAL_NODATA revival with fround + multi-format sentinel masking
  • Fixed07-18Robust GeoTIFF raster reader — decode Deflate/LZW/tiled tifs geotiff.js chokes on
  • Fixed07-18BIL CRS-confirm flow, content-sniff .grd dispatch, .prj EPSG prefill
  • Fixed07-18Content-sniff grids, correct Encom .grd message, add BIL/HDR DEM reader
  • New07-15KMZ container reader (parseKmz -> vectors + resolved GroundOverlays)
  • New07-15Dependency-free KML vector parser + GroundOverlay extraction
perf5 new · 3 fixed
  • Fixed07-10Harden probe toggle-confirm + honest fxState + measured rest dt; HUD rolling-window present-rate
  • New07-10Scale-sweep perf-baseline probe + npm script
  • New07-10Dev-only ?perf=1 live GPU-cost HUD
  • New07-10Snapshot renderer.info onto renderLoopStats at both present sites
  • New07-10Pure perf-stats helpers (captureGpuInfo, computeRates)
  • Fixed07-01Close the GPU-01 review findings — pointer-driven dirt + AdaptiveDpr presented-gating
  • Fixed07-01Quantize the static-skip signature + add DirectRenderGate for the no-FX path
  • New07-01GPU-01 — skip the whole render when the scene is static (idle GPU rest)
Statistics6 new · 1 fixed
  • Fixed07-22Source picker on its own row — protect the '· filtered' honesty cue from truncation
  • New07-22ProjectStats counts follow the selected DB source
  • New07-22GradeHistogram reads the selected DB source; cap gated to primary
  • New07-22StatsSourceSelect — compact DB picker, hidden when single-DB
  • New07-22UseStatsSource hook — primary/secondary read-model
  • New07-22Persisted uiStore.statsSource slice
  • New07-22Pure source resolver + descriptor type for multi-DB stats panels
classification4 fixed · 1 faster
  • Fixed07-30A NaN sample corrupted the bucket index; a flat slab froze it
  • Faster07-28Exact bucket index for the nth-hole sweep — 47x, bit-identical
  • Fixed07-03Honest control tooltips + suggest the LOWEST material class (persona #6 residue)
  • Fixed07-03Restore drillhole attribution end-to-end — the multi-hole metric was silently defeated (review 2026-07-03)
  • Fixed07-03Stop minting Measured tonnes from single holes (persona panel #6)
xray4 new · 1 fixed
  • New07-24Per-scene X-Ray snapshot (Wave B)
  • Fixed07-23Persist GIS solid/surface x-ray in the bundle + bump opacity to 0.5
  • New07-23Drill editor toggle + visibility sync + GIS solid/surface x-ray
  • New07-23Drill-trace occluded pass, wired + persisted + mechanism proven
  • New07-23Shared occluded-pass material + overlay builder
Layers panel4 new · 1 fixed
  • New07-23Drag-reorder honours the multi-selection too
  • Fixed07-23Per-row drag + visibility honour the multi-selection
  • New07-22Zoom-to-selection on the multi-select bulk bar
  • New07-22Bulk Hide/Show/Remove on the multi-select + hover-revealed checkboxes
  • New07-14Rename any layer (drill sub-layers, drill DBs, GIS) inline
Slicing & sections4 new · 1 fixed
  • Fixed07-21Slice-envelope thickness can reach 0.1 m (was floored at ~50 m)
  • New07-13Shift+D keyboard shortcut for Draw slice
  • New07-07SectionGeoTraces — exact contact lines + filled lithology polygons (G5 W2) [HOLD]
  • New07-07GeoTraces/lithoLog flags + autoSection action (G5 W2)
  • New07-07SectionGeoField — exact geo contact traces + fills on the section plane (G5 W2)
Sharing & embeds1 new · 4 fixed
  • Fixed07-17Verify minors — fold data.url into the shared URL policy + typo-aware wording
  • Fixed07-17Mint-time URL warnings — the author sees what the recipient loses
  • Fixed07-17The views array gets the same field-validation the meta envelope has
  • Fixed07-06Cache the share-with-data upload per modal session — stop re-uploading the dataset on every cosmetic option change (retro review)
  • New07-03Share-with-data — the investor link carries its dataset (persona panel #2)
Cloud projects1 new · 2 fixed · 1 faster
  • Faster07-24Keep @supabase off the first-paint path — lazy client, pure cloudConfig
  • Fixed07-22Allow Save to cloud without a drillhole DB (GIS-only projects)
  • Fixed07-13Make the save-name / rename durable (name lived in two places)
  • New07-13Name a project on save + rename existing cloud projects
autosave4 new
  • New07-23Wire init, recovery banner, and clear-on-save/load/new
  • New07-23Recovery banner (restore/discard on load)
  • New07-23Driver — subscribe project stores, debounce, snapshot to slot
  • New07-23IndexedDB recovery slot + pure idle-debounce scheduler
lines4 fixed
  • Fixed07-21Blend ALL fat lines, not just dashed — solid twins too
  • Fixed07-18Own the fat-line output — normal blending, coverage+opacity in alpha
  • Fixed07-18Route fat-line dash coverage to alpha, not the viewport-snapshot branch
  • Fixed07-18Antialias the dash pattern — analytic coverage + minification fade
barlogs3 new · 1 fixed
  • New07-13Billboard bar logs track the camera continuously, not just on settle
  • Fixed07-13Floor the log axis in manual mode + guard the over-cap rim
  • New07-13Discover-style downhole histogram combs (interval-spanning slabs)
  • New07-12Deposit-relative default width + render-epoch wiring + qc view
save2 fixed · 1 faster
  • Fixed07-24An off-thread pack/unpack must always settle
  • Fixed07-24The raw size pre-check is a work budget, not the cap
  • Faster07-24Weigh the bundle before compressing it, and inflate/deflate off-thread
boot1 fixed · 2 faster
  • Fixed07-24Stop share links preloading ProShell, and stop a stylesheet deferring the hint
  • Faster07-24Embeds skip auth+autosave, warm the wasm on idle, stop stray drops eating the session
  • Faster07-24Preload ProShell, bootstrap the theme inline, unblock first paint from Google Fonts
geophys3 new
  • New07-22Colour Grid presets (Discover 'Current Settings')
  • New07-22Colour Grid section + interactive sun-position dial (Discover-style)
  • New07-222D geophysics contours Model section
topo1 new · 2 fixed
  • Fixed07-17Analytic height sampling — the DEM freeze was O(columns × triangles) raycasting
  • Fixed07-13Review fixes -- max float parity + clear stale simplify note
  • New07-13Stream large .asc/.xyz topo imports past the 512MB string cap
General3 new
  • New07-09Surface the geology on sample load + story beat + chip (war-room #6)
  • New07-09War-room #4 — establishing shot + auto-ghost terrain
  • New07-09Demos pass their own honesty badge — declare sample CRS + one-click Declare CRS (war-room #1)
Other improvements15 new · 34 fixed · 2 faster
  • Fixed07-30Three verified defects — build_model note, GIS-only reopen leak, unfailable probe
  • Fixed07-30Close three lifecycle gaps in the DEM cover mask
  • Fixed07-29Clear the autosave slot from a leaf, not across the projectStore cycle
  • Fixed07-28Build_model arms a plan for the user to confirm — it no longer builds
  • Fixed07-25Guard the cover probe's server; quiet the strat key; one adopter roster
  • Fixed07-25Correct a false pointer-events rationale; fix the probe's spread denominator
  • Fixed07-25Font-serif was a no-op app-wide — quote "Source Serif 4"
  • Fixed07-24Self-review pass on the review fixes
  • Fixed07-24A failed SDK chunk load no longer disables auth for the life of the tab
  • Faster07-24Commit an AOI face drag once per frame instead of once per pointermove
  • Fixed07-22Replace raw NUL bytes with u0000 string escapes in DataPanel + lithoSetupAdvisor
  • Fixed07-22Draped soil-band editor reachable via Colour grid + Wave 2 probe
  • New07-22Confidence wash for interpolated soil-geochem surfaces
  • New07-22Synthetic Magnetics TMI grid draped on the demo terrain
  • Fixed07-22Extract samples from rendered geometry, not sourceVector
  • New07-22Soil geochem contours Model section — minimum curvature + clip
  • Fixed07-19Close the two rejected-CRS bypasses, and stop claiming a guarantee we don't provide
  • Fixed07-19Close round-2 review — real coverage for backdropNode, ortho depth-cue + ray fixes
  • New07-18Branded ES3D magic-link + confirm-signup emails
  • Fixed07-18Never emit NaN vertices for nodata holes — omit hole triangles instead
  • Faster07-17Wave 8 — the embed stops downloading the workbench
  • Fixed07-17Wave 3 — the compliance record stops asserting parameters that never governed
  • Fixed07-17Wave 5 — CI proves the wasm, the AI proxies stop being a blank cheque
  • Fixed07-17Waves 4+7 — exact-cutoff truth, de-tautologied guards, docs that stop lying
  • New07-16Investor-clean column headers — elementDisplayName with the canonical unit
  • Fixed07-16Wave 1 review — I made the deck worse, and two guards didn't hold
  • Fixed07-16Unit truth — kill the 10,000x roll-up and the competing resolvers
  • New07-15Remember point-label on/off per scene + fade labels on transition
  • New07-15Where-to-drill tool — suggest_drilling reports the trained targets
  • New07-15Agentic Ask v1 — build models from chat (build_model tool)
  • New07-14Allow saving/opening a GIS-only .es3d project
  • Fixed07-14Survive-rename-on-rederive + clean FLS strip collapse
  • Fixed07-14Don't let a blank dip/azimuth input zero the orientation
  • New07-14Edit a detected fault's dip / dip-azimuth
  • Fixed07-12Use themed signal token for pathfinder role chip
  • New07-10Backlog #1 — prove which data the audit record audits
  • New07-09Shared-story engagement pipeline — story_events schema, DNT-respecting telemetry, consent notice, owner card
  • New07-09Soften establishing camera + make geology opt-in
  • Fixed07-07Debounce section geo-field on plane settle + persist litho-log toggle + topoSdf length guard + gate auto-section on a built model (whole-branch review)
  • Fixed07-06Never show a stale honour-rate mid-rebuild + confidence-fade toggle + CB-safe misses + honest not-applicable message (whole-branch review)
  • Fixed07-06Clear reveal/explode channel per export scene + aria-pressed toggles + clear-on-disable (whole-branch review)
  • Fixed07-06Outward-winding for marching cubes + honest module doc (review w53u04tx7)
  • Fixed07-04Wrap azimuths at import + group the warning flood (persona panel #8)
  • Fixed07-03Stop the vein demo's planted anisotropy leaking onto real data + close the badge/copy residuals
  • Fixed07-03Purge misleading investor-facing copy (persona panel #4)
  • New07-02Three demo deposits behind the Load-sample menu + a stress-scale CSV generator
  • Fixed07-02Root-cause the honeycomb (wasm spheroidal bug, isoLab-pinned) + deposit-true vein anisotropy
  • New07-02The FX-options wave — filmic grading trio + contact-sheet-tuned presets
  • Fixed07-02Span-grade the 10 m default + scale-consistent polish (review-measured fixes)
  • Fixed07-01Terrain texture filtering + brand-compliance chrome (P2, board-verified)
  • Fixed07-01Close 2 criticals (XSS + a11y focus) + remove brand-illegal hero glow

June 2026 20 changes

3D viewer8 new · 1 fixed
  • New06-29W5 slicer lock-to-camera (Ctrl+L) + orient-to-view (Ctrl+V)
  • New06-29Leapfrog mouse navigation (right=zoom, middle/both=pan)
  • New06-29Draw-plane-line tool + properties panel (Leapfrog W4 Task D)
  • New06-29Moving-plane render + look-at camera (Leapfrog W4 Task C)
  • New06-29Moving-plane store + keymap bindings (Leapfrog W4 Task B)
  • New06-29U3 static story fallback for no-GPU machines (preview-hold)
  • New06-29U2 passive renderer-capability probe + graceful telemetry
  • Fixed06-29Branded card on total renderer-init failure (no silent black screen)
  • New06-29CameraNudge request + 'all' focus tag — Leapfrog nav W2 T2
keymap3 new
  • New06-29Leapfrog slicer parity — axis/centre/step/look/thick/remove (W3)
  • New06-29Leapfrog camera parity — arrow-rotate/pan/zoom/Home/P-O (W2 T3+T4)
  • New06-29Declarative keymap registry + data-driven help legend (W1)
Other improvements6 new · 2 fixed
  • Fixed06-30Gate GeoTIFF-DEM button on the real in-memory raster, not persisted config
  • Fixed06-30Resolve 6 adversarial-review findings before prod (W5 + GeoTIFF + analytics)
  • New06-29One-click PPTX investor deck (Export → Deck)
  • New06-29Renderer-telemetry readout (owner stats card over the U2 events)
  • New06-29Export → GeoTIFF (georeferenced DEM raster for QGIS/ArcGIS)
  • New06-29Moving-plane orientation math (Leapfrog W4 Task A)
  • New06-29U4 device-tier budget scaling — coarsen builds on weak HW, unchanged on capable
  • New06-29Pure orbit-nudge math (rotate/pan/dolly) — Leapfrog nav W2 T1
Generated 2026-09-28 from the git history (npm run docs:whatsnew). Entries are engineering changelog subjects, lightly filtered; internal-only work is omitted.