3 Commits

Author SHA1 Message Date
88f55ade46 Status report: record the radius merge, and the projection finding in full
Section 18 described the typed circle radius and the movable analysis popup as
held on a branch awaiting a usability check. They have since been merged and
issued as Service Worker v24, so the section now says so.

  18 intro   Service Worker versions for the period run to v24.
  18.5       Heading no longer "under test". The status paragraph records the
             merge after desktop approval, and the two defects found by testing
             through the controls before it: Escape applying the value it was
             meant to discard, and a typed 200 m stepping by 5 m because the map
             library recomputes the radius a couple of hundred-billionths of a
             metre short. Mobile remains unverified.
  18.6       Adds "Typing a number exposes an error that dragging hides" from the
             Typed Measurements design review, with its paragraph and table
             verbatim, replacing the section's own shorter version of the same
             point. What follows says what was built, including where it departs
             from the review: the review suggested measuring the result with
             ol/sphere, but the same cos(latitude) factor is used both ways so
             the value typed, the radius shown and pi x radius^2 agree exactly.
  18.7       Records the four guide and manual passages corrected after the
             merge, and that the fourth was only found by reading the rendered
             page.
  18.8       The open item is no longer "merge it"; it is the phone check that
             is still outstanding.

August's open items in 17.13 are left as written — they are the record of that
period.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-17 11:21:24 +02:00
34cc2563a3 Status report: bring the tracked copy up to date through September
The tracked report had not moved since May and still ended at section 12, the
April update — five months and six sections behind. Revisions 13 to 18 were
written but only ever existed as -v(n) snapshots, which .gitignore excludes by
design: the rule added in 9b57ff9e keeps interim snapshots out of the repository
and says the current report stays tracked. That second half had stopped
happening, so the repository's copy was quietly stale while the real document
moved on outside it.

This replaces the tracked file with the current revision, which now runs to
section 18 (September 2026) and covers the period April to September.

Section 18 records this period's work: the drawing toolbar rebuilt as a docked
left rail, four rounds of correction against a real iPhone, the two ways of
adding a point reduced to one, the Markers-layer defect that had been present
since the beginning, the Web Mercator correction to circle measurements, and the
first part of the user manual alongside the schema summary.

Two things it states plainly rather than glossing. The typed circle radius and
the movable analysis popup are recorded as under test on a branch, not as
shipped — LUSPA confirmed them on a desktop, but the remote server was down and
the touch behaviour is unverified. And 18.2 lists the four iPhone failures with
their causes, because the pattern is more useful for planning than the
individual faults: desktop testing at a phone-sized window verifies layout
arithmetic, but not stylesheet load order in the built application, nor how iOS
paints.

The -v(n) files stay ignored. If those snapshots should be versioned too, the
ignore rule is the thing to change, not this commit.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-09-08 17:43:33 +02:00
ef12e4477b Offline tile cache, polygon Divide, topographic layer integrations
Major feature batch covering drawing-tool improvements, layer additions,
and offline-first capabilities. Largest changes in MapView.js (+1700),
main.js (+1500), public/sw.js (+367), and new modules under src/.

Drawing & editing toolkit
  * Polygon Divide tool — sub-button under Split, divides a polygon into
    N equal-area pieces via binary search; user picks the cutting edge
  * UPN pick phase after Split and Divide — non-picked pieces have their
    identifier fields cleared automatically
  * Improved Merge algorithm — vertex-to-edge proximity (5 m tol.) with
    hybrid lockstep extension; bold A/B labels on selected polygons
  * Persistent vertex highlights — all vertices of the selected polygon
    rendered as dots while edit mode is on, without subclassing ol-ext
  * Toast notifications for merge/split/divide outcomes
  * Shapefile import — addGeoJSONLayer now includes an image style so
    Point features render (previously invisible)

Background & overlay layers
  * DEAfrica Coastlines v0.4 (WMS) in Biophysical Environment
  * DEAfrica Slope (SRTM 30m, style_slope) — semi-transparent background
  * Contours hillshade — get_contours_hillshade.php → local SQLite cache
  * OSM_roads — get_osm_roads.php → local SQLite cache, casing-stroke
    style (black 3.5 px outer, #F0F1F0 1.5 px inner)
  * External Source dialog — green + button in LayerSwitcher lets users
    add WMS / WFS / XYZ layers at runtime
  * Generic addWMSLayer / addXYZLayer with style, opacity, zIndex,
    legendUrl, onlineOnly options
  * TileWMS replaces ImageWMS (fixes 'Width exceeds 512' WMS errors)
  * Legend panel — bottom-right, auto-shown for visible layers that
    register a legendUrl
  * Default base map setting in Settings, persisted in localStorage;
    setBaseMap() on MapView

Offline tile cache (Phase 1 + 2)
  * Service worker: per-host tile caches (osm / topo / satellite /
    carto-light / carto-dark), counter-based eviction to prevent
    iOS Safari memory-pressure reloads, GET_TILE_STATS /
    CLEAR_TILE_CACHES message API
  * pwa.js helpers: getActiveServiceWorker, onServiceWorkerControllerChange,
    getTileCacheStats, clearTileCaches, getStorageEstimate
  * Settings: Offline Map Tiles card with per-provider stats + clear
  * Phase 2 download dialog: form to pick base map, area (current view /
    district / Ghana), zoom range; live tile-count + size estimate;
    progress bar with cancel; OfflineTileDownloader class with
    concurrency + throttling

Local database management
  * osm_roads table + saveOSMRoads / getLocalOSMRoads helpers
  * CACHED_LAYER_TABLES allow-list with clearTable / clearAllCachedLayers
  * Local Database Tables card: per-row Clear button (cached layers
    only) + 'Refresh cached layers' header button with reload prompt

Build & infrastructure
  * Shpjs lazy-loaded via dynamic import (saves ~140 kB from initial JS)
  * chunkSizeWarningLimit raised to 900 kB (openlayers + sqlite3.wasm
    can't be split further)
  * Toast notification module (src/toast.js)
  * Units module (src/units.js) for metric / imperial conversions
  * PDF export module (src/pdf-export.js)

Documentation & SQL
  * Topographic_Background_Layers_for_LUPMIS2.docx — research report
  * OpenTopography_Workflow.svg/.png — ETL pipeline diagram
  * LUPMIS2_Development_Status_Report.docx — April update section
  * sql/create_landuse_parcels.sql — PostgreSQL schema for the LUSPA
    land-use parcel specification (Feb 2026, revised), with PostGIS
    geometry column and standard indices

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-26 10:55:30 +02:00