UPDATE — 28 OCTOBER 2026
Current edge/erosional-surface evidence, contour math and runtime are included.
See edge-update/REBUILD_EDGES_AND_CONTOURS.txt for the update contract.
The following original source/provenance documentation is retained.

POOL-SURFACE AND WELLBORE UPDATE — 27 OCTOBER 2026

The original twenty formation models and historical controls are preserved.
This update adds published oil-pool footprints on supported regional tops,
a separate Red Jacket top-only reconstruction, and the complete queried modern
wellbore inventory. This is an analytical reproduction archive; the interactive
browser application and portable GLBs are separate downloads.

WHAT IS PLACED ON A SURFACE
There are 266 published oil-pool records in the study boundary.
251 have at least some supported regional-top geometry, represented by
289 pool/surface pairs. 81 pools have partial model coverage and 15 have no
supported geometry. Unsupported portions of 96 records remain explicitly marked
at the 0 m reference plane. Reference-plane placement has no reservoir-depth
meaning; it is not terrain or a measured contact.

The interval crosswalk assigns 203 records to a single named top,
52 combined-interval records to multiple explicit tops, and 11 records to
reference-only display. A combined pool's whole mapped footprint is shown on
each supported named top; zone-specific acreage is unknown. All seven Red Jacket
pools have full coverage on the additional Red Jacket top. No Wapella Sand,
Winnipegosis, Winnipeg Sand or Viewfield Rim depth is substituted from another
unit. Some otherwise matched pools fall outside their unit's existing mask.

Assignments use explicit interval tokens in official pool names, accompanied
by reported completion-formation evidence where available. Place names containing
formation words do not override the terminal reservoir name. Completion formation
is evidence for a named interval, not a measured reservoir contact or formation
at the well's total depth.

Pool polygons are intersected with the model's exact valid grid triangles,
including their null masks. Elevation is interpolated within each contributing
triangle. No extrapolation bridges model gaps; exterior rings and interior holes
are retained. Edges split at grid-triangle crossings. The same precomputed
pool_placements.json drives browser and GLB geometry. No vertical display offset
is added to pool meshes. Both GLBs use the same source coordinates and the
original tabletop convention, with 1x or 25x vertical exaggeration.

These are approximate regional formation-top placements of mapped pool-land
footprints. They do not define the actual reservoir top or base, oil-water
contact, connected oil extent, net pay, current production or recoverable volume.
Parcel divisions and gaps between polygons are not evidence of reservoir barriers.

RED JACKET SUPPLEMENT
The separate top-only surface uses 1,824 accepted historical Red_Jacket
TVD picks and source KB elevations: top = KB minus TVD. It is sampled onto the
unchanged 2 km grid using linear Delaunay interpolation. Support requires a node
inside the study boundary and control convex hull, within 15 km of a control,
and in a source triangle with a maximum 30 km edge. Areas farther than 10 km from
a control carry lower confidence. 55 nodes more than 25 m above the independently
mapped Jurassic top are omitted by the consistency screen. There are
11,542 finite grid nodes. The support boundary is not a depositional edge.
All thickness values are null; no Red Jacket base, net pay or volume is created.
Controls, script and provenance describe the historical datum and diagnostic
held-out checks. These are not independent local prediction bounds.

WELLBORES AND DEPTH ASSUMPTIONS
The compact inventory has 52,337 distinct wellbores from 43,264 origins,
including 46,886 drilled/in-progress and 5,451 planned/cancelled records.
Reported trajectory classification is retained even when only a point is mapped.
The full source query did not stop at a service page limit. The former 4,074
formation-top controls are not described as the complete modern inventory.

The portable well scene includes 46,886 drilled/in-progress markers and
46,884 vertical fallback lines. There are no supplied surveyed 3D tracks.
Reported TVD is used first; one drilled bore requires an explicit MD-as-TVD
assumption, and two with no usable depth remain markers only. Eighteen records
are still Drilling, so their reported depth is not called completed final TD.

Only 4,030 inventory records have a defensible historical KB-elevation join.
With KB, a vertical illustration runs from KB to KB minus depth. Without KB,
it runs from the 0 m reference plane downward by reported depth and is explicitly
relative, not sea-level elevation. All lines are vertical display assumptions,
including records classified as horizontal or directional. These paths use the
same wellDepth function as the browser and do not claim actual lateral geometry.

The GLBs retain 26,961 drilled/in-progress records with mapped 2D plan traces
(26,961 paths), shown separately in cyan at the 0 m reference plane.
Their source XY vertices are retained without display simplification. They are
published map representations with no surveyed per-vertex depth. They are not
joined into invented 3D survey tracks. The complete inventory retains all
29,306 mapped plan traces, including planned/cancelled records.

Metadata distinguish reported MD, reported TVD, historical reported formation
at TD, and completion formations. A browser model-inferred TD interval is
separately labelled and requires a usable endpoint elevation. Unknown values
stay unknown. Named formation tops alone do not establish the well's final rock.

PORTABLE SCENES AND METADATA
Each GLB preserves the original twenty formation meshes and their binary data.
A supplemental Red Jacket top and named pool groups appear in every scene.
The three original scene selections remain, with pools added. The fourth scene,
'Overview + pool surfaces + wellbore illustrations', includes aggregated bore
lines, location markers and mapped 2D plan traces. An importer that opens only
the default scene may require selecting this fourth scene.
Per-pool names, assignments, source and coverage are in glTF extras. Aggregated
well mesh extras retain well IDs and vertex/path ranges linked to well_data.json.
Hide the named pool, supplemental or well groups to inspect components separately.
Importers vary in handling transparent surfaces, lines and point sizes.

DATA AND SOURCE SCALE
Pool source: https://gis.saskatchewan.ca/egis/rest/services/Economy/Resource_Map/FeatureServer/4
Retrieved: 2026-10-27T14:15:40.434761+00:00
Retrieval time does not establish the vintage of individual pool boundaries.
Official queried footprints are retained in native EPSG:2957 and WGS84.
Viewer footprints are clipped to the study domain and simplified at 50 m with
topology preserved. Original HECTARES and unsimplified clipped area are separate.
Placement-coordinate serialization is not a claim of millimetre survey accuracy.
Regional elevations retain their source KB datum limitations.

MAIN ADDED FILES
sites/se-sask-geology-3d/dist/data/
  pool_data.json — clipped, simplified official footprint data.
  pool_surface_crosswalk.json — interval matches, rationale and source URLs.
  pool_placements.json — shared surface geometry and reference fallbacks.
  pool_placement_audit.json — geometry checks and per-pool coverage.
  supplemental_units.json — Red Jacket top and support-distance arrays.
  well_data.json — complete compact inventory, included only once.
sites/se-sask-geology-3d/dist/
  decode-well-data.js — decoder for the column-packed inventory.
  well-utils.mjs — shared depth and formation-label interpretation functions.
research_paleo/oil_pools/
  pool provenance; original GeoJSONs; query/layer metadata; source licence;
  build_pool_data.py; build-pool-placements.py; build-pool-glbs.mjs;
  build-pool-data-package.py; requirements; bundled Three.js and its licence;
  SE_Sask_Oil_Pools_GLB_Validation.json — current portable-export checks.
research_paleo/model/
  build-red-jacket-surface.py; SE_Sask_Red_Jacket_Top_Controls.csv;
  SE_Sask_Red_Jacket_Top_Provenance.json.
research_paleo/wellbores/
  README; well provenance/statistics; retrieval audit; source metadata;
  pool_completion_formations.json; processing scripts; raw-package manifest;
  FULL_SOURCE_DOWNLOAD.json — full-source ZIP location, size and checksum.

The standalone SE_Sask_Wellbore_Data.zip contains full unmodified current
vertical, nonvertical and legacy source records, metadata, IDs and scripts.
It is not nested here, avoiding duplicate raw snapshots; the full compact well
inventory and decoder are included here. Download the full-source archive from:
https://geonavigate.ca/regional-geology/se-saskatchewan/downloads/SE_Sask_Wellbore_Data.zip?v=20261027-surface-wells-v3
Sibling filename: SE_Sask_Wellbore_Data.zip
Bytes: 16,623,946
SHA256: dfdb3d7a1a930b13b0c5eb727215cb4d7e5b99860ee9abf85d8186ec3835cb41

REPRODUCE THIS UPDATE
From the extracted SE_Sask_3D_Model_Data directory, first recreate the baseline
formation GLBs using the original instructions below. Install the original
requirements and additional pinned requirements in research_paleo/oil_pools.
The following commands use retained inputs and do not require a new query:

  python research_paleo/oil_pools/build_pool_data.py --model sites/se-sask-geology-3d/dist/data/model.json --source-dir research_paleo/oil_pools --output-dir sites/se-sask-geology-3d/dist/data

  python research_paleo/model/build-red-jacket-surface.py --model sites/se-sask-geology-3d/dist/data/model.json --source research_paleo/model/formation_tops_raw.geojson --output sites/se-sask-geology-3d/dist/data/supplemental_units.json --provenance research_paleo/model/SE_Sask_Red_Jacket_Top_Provenance.json --controls research_paleo/model/SE_Sask_Red_Jacket_Top_Controls.csv

  python research_paleo/oil_pools/build-pool-placements.py --model sites/se-sask-geology-3d/dist/data/model.json --pools sites/se-sask-geology-3d/dist/data/pool_data.json --crosswalk sites/se-sask-geology-3d/dist/data/pool_surface_crosswalk.json --supplemental sites/se-sask-geology-3d/dist/data/supplemental_units.json --completion-evidence research_paleo/wellbores/pool_completion_formations.json --output sites/se-sask-geology-3d/dist/data/pool_placements.json

  node research_paleo/oil_pools/build-pool-glbs.mjs --pools sites/se-sask-geology-3d/dist/data/pool_data.json --placements sites/se-sask-geology-3d/dist/data/pool_placements.json --supplemental sites/se-sask-geology-3d/dist/data/supplemental_units.json --wells sites/se-sask-geology-3d/dist/data/well_data.json --decoder sites/se-sask-geology-3d/dist/decode-well-data.js --well-utils sites/se-sask-geology-3d/dist/well-utils.mjs --three research_paleo/oil_pools/vendor/three.module.js --input-dir sites/se-sask-geology-3d/dist/downloads --output-dir sites/se-sask-geology-3d/dist/downloads

Node.js 24 was used. The bundled Three.js dependency requires no network fetch.
The GLB script refuses already updated inputs to prevent duplicate layers;
reproduce clean baseline GLBs before appending again. To rebuild compact wells
from raw records, follow the standalone well ZIP README.

INTEGRITY AND LIMITS
Original formation descriptors and all 14,230,920 formation binary bytes in each
GLB are preserved. All original archive entries except this README and checksum
manifest remain byte-identical. The original glb_validation.json concerns
formation-only exports; the added validation covers the current additions.
Geometry checks cover concave polygons, interior holes, null-mask clipping,
no extrapolation, actual triangle interpolation, fallback validity, finite
coordinates and GLB accessor/index bounds. They do not replace physical headset
or importer testing. MANIFEST_SHA256.json covers this package's contents, both
separate GLBs and the standalone full-source well archive.

Contains information licensed under the Government of Saskatchewan Standard Unrestricted Use Data Licence (Version 2.0).
Licence: https://gisappl.saskatchewan.ca/Html5Ext/Resources/GOS_Standard_Unrestricted_Use_Data_Licence_v2.0.pdf

ORIGINAL REGIONAL RECONSTRUCTION NOTES (26 OCTOBER 2026)
-----------------------------------------------------

SE SASKATCHEWAN — 3D MODEL DATA AND GEOLOGICAL EVIDENCE
Compiled 26 October 2026

PURPOSE AND SCOPE
This is a regional screening reconstruction of 20 mapped stratigraphic intervals
in southeastern Saskatchewan. It supports investigation of the Walpole–Wawota–
Indian Head/Wolseley corridor. It does not establish a continuous oil belt,
paleoshoreline, drilling prospect, recoverable volume or current mobile oil.

The illustrated report and interactive browser viewer are delivered separately.
This archive contains the data and analytical scripts, not the hosted Site source
repository. The sites/.../dist/data directory here contains model data only; it
retains the layout used by the reproduction scripts. It is not an offline app.

MODEL AT A GLANCE
* 20 intervals; 4,074 usable public regional well records.
* 31,794 selected-interval picks; 37,505 retained picks including two unconformity fields.
* 135 columns x 116 rows, 2,000 m spacing; 49–51 N, 105–101.2 W,
  clipped to the actual Saskatchewan boundary.
* Structure contours are 50 m apart. Isopach intervals vary by unit.
* 197,685 modeled unit/grid-node rows in grid_interval_values.csv.
* 46 source entries and 50 environmental profiles in study.json.

START WITH THESE FILES
1. sites/se-sask-geology-3d/dist/data/model.json
   Structured 2 km top/thickness arrays, original well picks, methods, hierarchy
   notes, town locations and source URLs. JSON null means unmodeled, not absence.
2. research_paleo/model/formation_summary.csv
   Coverage, ranges and source-control counts for the 20 mapped intervals.
3. research_paleo/model/grid_interval_values.csv
   One row per valid interval/grid node: projected position, top, gross vertical
   thickness and calculated base. Values are regional interpolated model values.
4. research_paleo/model/well_top_controls.csv
   Original accepted public well tops, source field, TVD, KB and KB-minus-TVD
   elevation. This CSV includes the two unconformity fields as well as 20 units.
5. research_paleo/model/interval_hierarchy_audit.json
   Same-source geometric comparisons and the justified interval nesting.
6. research_paleo/study_content.json and older/, mississippian/, mesozoic/
   Published rock evidence, environmental interpretations, conditional targets,
   source references and well/depth anchors. No complete new LAS, DST, seismic or
   physical-core interpretation is claimed.
7. research_paleo/figures/
   Ten original explanatory/analytical figures in SVG, PDF and PNG, with scripts.
   Concept diagrams are not mapped paleoshorelines or measured cross-sections.

COORDINATES, ELEVATIONS AND ARRAY ORDER
Horizontal CRS: EPSG:2957, NAD83(CSRS) / UTM zone 13N, metres.
Each flattened array has nx*ny entries. Index = row*nx + column; rows increase
from south to north, columns west to east. At an index:
  E = grid.x0 + column*grid.spacing
  N = grid.y0 + row*grid.spacing
  derived base = source top elevation - mapped gross vertical thickness.

Signed contour elevations are interpreted consistently with source KB minus
formation TVD. The accessed metadata did not specify the exact geodetic vertical
datum realization. Do not merge these values with surveyed engineering elevations
without reconciling the datum. Zero is a source-elevation reference, not terrain.
Core-description depths in the evidence register require core/log shifts and MD/
TVD review before use on this regional elevation datum.

HOW THE GEOMETRY WAS MADE
The 2014 SPFPS structure contours, ordinary isopachs and zero-edge lines are public
inputs. These are not the original provincial kriging grids. Lines were resampled
at approximately 1 km and linearly interpolated to the 2 km mesh. The source
contours are more informative than the apparent precision of individual mesh
vertices. No extrapolation is made beyond the contour-sample convex hull.

Special near-zero ZLEVEL codes are categorical boundary identifiers, not physical
elevations or thicknesses. They are excluded from normal interpolation values.
The named zero-edge geometry supplies a zero-thickness constraint. Conservative
presence masks partition the province-clipped region using the published edges,
25 m noding and at most 100 m border-endpoint reconciliation. Only compartments
supported by positive thickness contours are retained. Very thin isolated bodies,
source gaps and unsupported compartments may be unmodeled. Blank does not prove
formation absence; a mapped edge does not automatically identify a shoreline.

The source well picks contributed to the original regional framework. Comparison
against these picks is an internal consistency check, not independent predictive
accuracy. Pick fields that are zero, blank or nonnumeric do not establish absence.
Picks beyond recorded TD by more than 5 m are excluded and recorded in the audit.
This source compilation is not a current inventory of every well drilled.

INTERVAL OVERLAPS — DO NOT ADD ALL THICKNESSES
* Mapped Midale includes basal Frobisher Evaporite.
* Mapped Ratcliffe includes basal Midale Evaporite.
* Total Mississippian includes its named Mississippian beds and excludes mapped
  Bakken; it may include younger beds not separately displayed.
* Total Watrous includes Lower and Upper Watrous.
* Total Jurassic includes Upper Watrous and Gravelbourg, but excludes Lower
  Watrous; it partially overlaps total Watrous.
* Mannville includes Cantuar and other upper Mannville/Pense beds.
Independently mapped surfaces are not shifted to make a watertight stack.
Intersections or small gaps can reflect interpolation or mapping definitions.
Gross mapped thickness is not net reservoir or net pay.

PORTABLE 3D FILES — SEPARATE DOWNLOADS
SE_Sask_Regional_Surfaces_1x.glb preserves the modeled true aspect ratio.
SE_Sask_Regional_Surfaces_25x.glb exaggerates the vertical dimension 25 times.
Both use a tabletop scene scale: 100 km horizontally = 1 metre in the glTF scene.
They are not 1:1 surveyed, metre-for-metre engineering models. X is east; Y is
elevation scaled/exaggerated; Z is south. The EPSG origin is stored in metadata.
For untransformed mesh coordinates, recover source metres as:
  E = originE + 100000*X; N = originN - 100000*Z;
  source elevation = 100000*Y / verticalExaggeration.
Each has 20 gross-interval meshes and three scenes: six-interval overview,
14-interval detailed stack, and all 20 with intentional overlaps. The default
scene is the overview. An importer may initially show only that default scene.
glb_validation.json records binary/accessor/mesh/scale checks. Physical-headset
tracking, controller behavior and GPU rendering still require device testing.

REPRODUCE THE MODEL LOCALLY
Keep this directory layout. Use Python 3.12 or a compatible modern Python.
From the extracted SE_Sask_3D_Model_Data directory:
  python -m venv .venv
  [activate the environment using the command appropriate for your operating system]
  python -m pip install -r requirements.txt
  python research_paleo/model/build_model.py
  python research_paleo/model/audit_interval_hierarchy.py
  python research_paleo/build_study.py
  python research_paleo/model/export_glb.py
  python research_paleo/model/validate_glb.py

To regenerate illustrations, run:
  python research_paleo/figures/build_older_diagrams.py
  python research_paleo/figures/build_mississippian_diagrams.py
  python research_paleo/build_root_figures.py

No network fetch is necessary to reconstruct these supplied inputs. Optional
fetch scripts document the public endpoints and original collection method;
rerunning them may retrieve changed data. A full rebuild can change last-decimal
rounding with different computational library versions. Independently inspect
the presence masks, source codes and datum before adapting the methodology.
build_delivery_package.py assembles the archive from the source layout; the
archive deliberately excludes GLBs and the standalone report to keep downloads
compact. Do not use the packaged data folder as a complete browser application.

PROVENANCE AND REUSE
Primary geometry and well-pick data originate from Saskatchewan public mapping
and ArcGIS services. Source URLs and metadata accompany each input. Official
settlement coordinates and province boundary are documented in Sources/
Basemap_Manifest.json. Well/source fields are preserved as distributed, subject
to the acceptance rules above. Original government datasets and publications
remain subject to their respective source terms; this package does not assign
a new license to those materials or represent official provincial endorsement.

Full third-party research reports and reproduced report-page images are not
included. The evidence registers provide titles, URLs and precise locators.
The supplied conceptual drawings and generated model are original syntheses.

PRACTICAL LIMIT
A 2 km mesh reconstructed from 50 m structure contours cannot resolve the closure
or reservoir continuity of a typical small pool. A target still needs bed-scale
well correlations, core-calibrated porosity/permeability, seal continuity, local
structure, charge timing and present-fluid tests. Oil stain, fluorescence and
pyrobitumen document shows/history; they do not establish current mobile oil.
