Files
geointel/CHANGELOG.md
T
Codex 7dcce9c2b8
GeoIntel CI / docs-smoke (push) Has been cancelled
GeoIntel CI / contract-smoke (push) Has been cancelled
Harden AI Docker runtime imports
2026-07-05 00:40:08 +02:00

81 KiB

M13 — Codex Optimization Pack

  • Added reusable Codex skills under skills/.
  • Added prompt discipline, token/context budget policy, secrets policy and parallel-agent strategy.
  • Added M13 day-one optimized master prompt and pass completion report prompt.
  • Added M13 validation script and included it in readiness checks.

Changelog

Sprint 116 Operational GIS map workflow (2026-07-04)

  • Switched the default MapLibre basemap from demo tiles to an OpenStreetMap road raster basemap with visible attribution while keeping VITE_MAP_STYLE_URL as the production override.
  • Added a persisted database layer selector to the Map workspace so users can directly load a ready vector dataset from stored project data.
  • Added an Operational GIS run panel that reuses AOI or active layer extents to query persisted PostGIS vector_features through the existing bbox selection flow.
  • Added a basemap policy notice when the public OpenStreetMap fallback is active and a guided operational workflow for query, derived dataset, QA/QC and export handoff.
  • Added a one-click full GIS workflow action that runs persisted selection, saves the derived dataset, saves a GeoJSON export and optionally runs QA/QC against the selected reference dataset.
  • Added a full-workflow run mode selector so repeated Map QA/QC runs can reuse the latest saved derived dataset instead of creating duplicate dataset/export artifacts.
  • Added an opt-in Docker/Unraid AI build path (GEOINTEL_INSTALL_AI=true) for installing optional PyTorch/Ultralytics dependencies while keeping the default GIS runtime lightweight and import-safe.
  • Hardened the AI Docker runtime with OpenCV native libraries required by Ultralytics and made YOLO dependency detection use real imports instead of optimistic module discovery.
  • Added static regression coverage for the road basemap, attribution, basemap policy notice, database layer selector and persisted operational GIS workflow wiring.

Sprint 115 QA/QC and Exports usability layout pass (2026-07-04)

  • Made the QA/QC workspace calmer by compacting summary, handoff, drilldown, feature evidence and metric history surfaces.
  • Reduced raw QA provenance height so JSON evidence remains available without dominating the screen.
  • Rebalanced QA/QC and Exports workspace columns for review-first usage.
  • Made export handoff cards, latest artifact cards and export history controls denser and easier to scan.
  • Added static regression coverage for compact QA evidence review and export handoff layouts.

Sprint 114 Data and Map usability layout pass (2026-07-04)

  • Made the Data workspace catalog more compact with quieter upload controls, denser role summaries and shorter dataset action buttons.
  • Rebalanced the Data workspace columns so catalog review has more room while setup panels remain available.
  • Made the Map workspace more map-first by placing the MapLibre frame before dense layer controls and increasing the desktop map height.
  • Reduced Map context, provenance, bbox selection and feature extraction density while keeping existing selection/export/QA actions unchanged.
  • Added static regression coverage for the compact Data catalog and map-first workspace ordering.

Sprint 113 Calm workbench layout pass (2026-07-04)

  • Reduced visual density in the workbench shell without changing API contracts or workflows.
  • Softened the base palette, borders and shadows so panels read as a work surface instead of stacked cards.
  • Made the top context bar, sidebar navigation, workspace heading, status tiles and inspector more compact.
  • Hid the duplicated workspace command bar because the persistent sidebar already provides primary navigation.
  • Added static regression coverage for the calmer shell density and mobile-safe navigation rules.

Sprint 112 QA evidence map overlay (2026-06-25)

  • Added a read-only QA/QC evidence GeoJSON endpoint for persisted quality checks.
  • The endpoint resolves match_evidence, false_positive_evidence and false_negative_evidence ids back to persisted vector, detection or segmentation geometries where available.
  • Added QA/QC actions to render evidence overlays in the existing MapLibre workspace with distinct match, false-positive and false-negative styling.
  • Added frontend loading/error/clear states for the QA evidence overlay and a compact map legend.
  • No migration, new table, provider fetching, AI behavior or new product domain was introduced.

Sprint 111 QA feature evidence persistence (2026-06-25)

  • Added feature-level QA evidence to dataset, detection and segmentation QA matching.
  • Persisted matched feature ids, false-positive feature ids and false-negative feature ids inside quality_checks.findings_json.
  • Extended QA/QC drilldown with compact matched/false-positive/false-negative feature id lists beside the existing metrics and raw findings JSON.
  • Updated API contracts to document match_evidence, false_positive_evidence and false_negative_evidence.
  • No migration, new table, provider fetching, AI behavior or new product domain was introduced.

Sprint 110 Map QA evidence drilldown (2026-06-25)

  • Extended the Map workspace QA/QC shortcut with inline evidence after comparing a saved derived selection dataset.
  • The result now shows quality-check id, matches, false positives, false negatives, mean IoU and QA warnings beside precision/recall/F1.
  • Added an Open QA/QC evidence handoff to the existing QA/QC workspace drilldown instead of creating a parallel QA detail system.
  • No backend API contracts, migrations, provider fetching, AI behavior or new product domains were introduced.

Sprint 109 Map selection QA shortcut (2026-06-25)

  • Added a Map workspace QA/QC shortcut for saved derived selection datasets.
  • The shortcut reuses the existing QA comparison workflow and persists QualityCheck/Metric rows through the existing backend route.
  • Added reference dataset selection, loading/error state and compact precision/recall/F1/status feedback beside the saved map selection.
  • Kept QA orchestration in a dedicated frontend hook so App.tsx remains an orchestrator and API calls stay out of the shell component.
  • No backend API contracts, migrations, provider fetching, AI behavior or new product domains were introduced.

Sprint 108 Map selection derived datasets (2026-06-25)

  • Added POST /api/v1/projects/{project_id}/datasets/{dataset_id}/vector/select/derive to persist a map bbox selection as a reusable derived vector dataset.
  • Derived selection datasets keep source provenance, write a GeoJSON artifact and index their features back into vector_features.
  • Added Save as dataset to the Map workspace after area extract, including loading/error/latest dataset feedback.
  • Added regression coverage for service persistence, empty-selection failure, canonical API envelope and frontend wiring.

Sprint 107 Map selection export handoff (2026-06-25)

  • Added vector_selection GeoJSON export support to persist bbox-selected map features as normal export artifacts.
  • Selection exports query persisted PostGIS vector_features, write a vector_selection_geojson FeatureCollection and store selection bbox/count metadata in the export record.
  • Added Save area export to the Map workspace after an area extract, including loading/error state and latest artifact path feedback.
  • Updated frontend export typing/API hook wiring so saved selections appear in the existing Export Center history.
  • No migrations, provider fetching, AI behavior, real model dependencies or new product domains were introduced.

Sprint 106 Map area selection extract (2026-06-25)

  • Added a read-only bbox selection endpoint for vector datasets: POST /api/v1/projects/{project_id}/datasets/{dataset_id}/vector/select.
  • The endpoint queries persisted PostGIS vector_features and returns a canonical-envelope GeoJSON FeatureCollection with selection bbox, feature count, limit and truncation state.
  • Added Map workspace area selection with two-click bbox drawing, manual EPSG:4326 bbox inputs, selected-feature/AOI/layer bbox shortcuts and client-side GeoJSON download/copy.
  • Added MapLibre overlays for the active bbox and extracted selection result.
  • Added regression coverage for backend selection behavior, route envelope and frontend wiring.
  • No migrations, provider fetching, AI behavior, real model dependencies or new product domains were introduced.

Sprint 105 Map feature extract (2026-06-25)

  • Added a Selection & extract panel to the Map workspace for clicked map features.
  • Selected features are highlighted through a dedicated MapLibre GeoJSON source/layer.
  • The extract panel now shows geometry type, coordinate count, EPSG:4326 bbox and a property table.
  • Added client-side Download selected GeoJSON, Copy selected properties and Clear selection actions for the clicked feature.
  • No backend API contracts, migrations, provider fetching, AI behavior or database persistence changed.

Sprint 102 Detection Lab handoff polish (2026-06-24)

  • Updated the raster tile manifest handoff to Detection Lab so it automatically selects yolo-configured.
  • Tightened the AI handoff browser smoke so it now verifies that the model selection is set by the UI handoff rather than by the test.
  • Added regression coverage for the automatic model handoff.
  • No backend API, persistence, migration, provider fetching or AI dependency behavior changed.

Sprint 101 AI Lab handoff browser smoke (2026-06-24)

  • Added scripts/verify_ai_handoff_interactions.sh to exercise the browser click path from raster tiling into Detection Lab and Segmentation Lab.
  • The smoke seeds the explicit offline demo workflow, generates a small raster tile manifest, clicks both AI handoff buttons and verifies the selected raster dataset plus manifest path are preserved.
  • Added readiness syntax coverage for the new browser interaction smoke and documented its optional Playwright requirement.
  • Added regression coverage for the script/readiness contract.
  • No product behavior, API contract, migration, AI dependency or provider-fetching changes were introduced.

Sprint 100 raster tile Segmentation Lab handoff (2026-06-24)

  • Added Segmentation Lab tile manifest state and wired it into the existing segmentation run request tile_manifest_path.
  • Added a raster inspector handoff action that fills the selected raster dataset and tile manifest path in Segmentation Lab.
  • Mirrored the existing Detection Lab manifest input pattern without adding new backend routes, migrations, AI dependencies or model behavior.
  • Added regression coverage for the segmentation handoff wiring.

Sprint 99 raster tile Detection Lab handoff (2026-06-23)

  • Surfaced the latest persisted raster.tile manifest path in the raster dataset inspector.
  • Added a direct Detection Lab handoff action that fills the selected raster dataset and tile manifest path from the existing raster tile job result.
  • Preserved existing raster, detection and segmentation API contracts; no AI inference, provider fetching, migrations or backend route changes were introduced.
  • Added regression coverage for the frontend handoff wiring.

Sprint 98 demo raster workflow smoke (2026-06-23)

  • Added scripts/verify_demo_raster_workflow.sh to validate the browser-facing demo raster happy path: inspect, preview, stats and tile manifest generation.
  • Added readiness syntax coverage for the raster workflow smoke.
  • Fixed raster tiling manifest generation for Rasterio versions that return window bounds as tuples instead of bound objects.
  • Added regression coverage for tuple-based raster window bounds and the new raster smoke contract.
  • No AI inference, external provider fetching, migrations or API route changes were introduced.

Sprint 97 demo raster fixture workflow (2026-06-23)

  • Added a deterministic local GeoTIFF raster fixture to the offline demo workflow so raster controls and AI Lab dataset prerequisites have usable V1 context.
  • Returned raster_dataset_id from the canonical demo workflow response and wired the frontend demo loader to select it for Detection and Segmentation Labs.
  • Kept the candidate vector dataset as the default Data/Map/Export context after demo load.
  • Hardened workbench default/interactions smoke scripts to require the candidate vector, reference vector and raster fixture datasets as 3/3 ready.
  • No external provider fetching, real AI inference, migrations or API behavior outside the demo response contract changed.

Sprint 96 useful default context (2026-06-22)

  • Auto-open the first ready vector dataset after project data loads so Data, Map and Exports start with usable context.
  • Kept user-driven dataset selection intact; the default is only applied when no dataset is selected.
  • Added explicit Detection/Segmentation Lab guidance when no raster datasets are available.
  • Added regression coverage for useful default dataset selection and AI Lab raster prerequisite messaging.
  • No API contracts, migrations, provider fetching or AI/model behavior changed.

Sprint 95 raster pipeline hardening (2026-06-22)

  • Added a raster pipeline readiness surface to the dataset inspector.
  • Surfaced metadata profile, CRS readiness, preview artifact, tile manifest handoff and clip AOI state before raster operations.
  • Added processing guardrails for missing metadata, missing CRS, missing preview, invalid tile parameters, unavailable rasters and missing clip areas.
  • Added responsive styling and regression coverage for the raster readiness/handoff structure.
  • No API contracts, migrations, provider fetching or AI/model behavior changed.

Sprint 94 QA/QC evidence drilldown (2026-06-22)

  • Added a selected QA/QC evidence drilldown to the Quality Results panel.
  • Surfaced candidate/reference layer names, analysis run/job provenance, status, score and completed/created timestamps for the selected persisted quality check.
  • Added false-positive, false-negative and map-evidence handoff cards from persisted metric rows.
  • Added parameter/findings JSON panes for persisted QA/QC provenance.
  • Added regression coverage for drilldown structure, metric evidence and responsive styles.
  • No API contracts, migrations, provider fetching or AI/model behavior changed.

Sprint 93 export handoff artifact polish (2026-06-21)

  • Added a latest handoff artifacts section to the Export Center for project reports, project metadata, dataset GeoJSON, detection GeoJSON and segmentation GeoJSON.
  • Reused existing preview/download export actions from each latest artifact card without changing export API contracts or persistence.
  • Added responsive styling for latest artifact cards, empty artifact states and compact artifact actions.
  • Added regression coverage for grouped latest artifact surfaces and preserved preview/download controls.
  • No API contracts, migrations, provider fetching or AI/model behavior changed.

Sprint 92 workflow rail interaction polish (2026-06-21)

  • Audited the live Overview workflow rail click path from Overview to Data, Map, QA/QC and Exports.
  • Hardened the Map workflow step to reuse the first ready vector/GeoJSON dataset through the existing map-open flow when no layer is active.
  • Hardened the Export workflow step to reuse the first ready vector/GeoJSON dataset through the existing export-open flow when no dataset is selected.
  • Added regression coverage for the context-aware rail handler and fallback workspace navigation.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 91 populated workflow audit polish (2026-06-21)

  • Audited the live populated demo workflow on http://192.168.10.150:1202 across Overview, Data, Map, QA/QC, AI Labs and Exports.
  • Tightened the Overview workflow guidance complete state so a fully populated flow shows Ready for handoff instead of another next-step prompt.
  • Clarified the Map guidance detail by separating rendered layer feature count from AOI context.
  • Added regression coverage for complete-state copy and precise Map guidance copy.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 90 workflow guidance polish (2026-06-20)

  • Added an Overview workflow guidance rail for the V1 path: Project & AOI, Data, Map, QA / AI and Export.
  • The guidance rail uses existing workspace navigation only; it does not add API calls, backend behavior or persistence.
  • Added compact ready/waiting/next visual states based on already loaded project, dataset, map, QA/AI and export state.
  • Added regression coverage for the guidance rail, existing workspace routing and responsive CSS contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 89 Export/System density polish (2026-06-20)

  • Grouped Export Center summary, handoff readiness, artifact actions, state cards and history into focused surfaces.
  • Grouped Provider Capabilities into a system shell with registry state cards, capability cards and attribution/license provenance cards.
  • Preserved existing export action, filter, preview/download and provider refresh workflows without API or persistence changes.
  • Added static regression coverage for Export/System hierarchy and density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 88 AI Labs density polish (2026-06-20)

  • Grouped Detection Lab and Segmentation Lab model registry, run controls, result loading and QA controls into focused surfaces.
  • Added shared AI Lab density CSS for model lists, run forms, result/QA summaries and mobile-safe grids.
  • Preserved existing detection/segmentation model loading, run, result filtering and QA callbacks without API or persistence changes.
  • Added static regression coverage for AI Lab hierarchy and density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 87 Change Detection density polish (2026-06-20)

  • Grouped Change Detection heading, input controls, result states, summary and warnings into focused surfaces.
  • Reused shared result-state cards for not-enough-data and error states.
  • Added compact desktop/mobile grids for vector inputs and change summary metrics.
  • Added static regression coverage for Change Detection hierarchy and density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 86 QA/QC workspace density polish (2026-06-20)

  • Grouped QA/QC summary, dataset evidence, refresh/filter controls and result history into focused surfaces.
  • Kept existing persisted quality check filters, refresh behavior, metric cards and history rendering unchanged.
  • Added compact mobile breakpoint grids for QA/QC summary, handoff evidence, filters and metric/history rows.
  • Added static regression coverage for QA/QC workspace hierarchy and density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 85 Map workspace density polish (2026-06-20)

  • Added a compact Map workspace context summary for selected AOI, active layer and rendered feature state.
  • Grouped map controls, provenance, map frame and feature inspector into clearer surfaces without changing MapLibre behavior.
  • Tightened map toolbar/provenance spacing and mobile breakpoint grids so Map workspace scans better on desktop and narrow screens.
  • Added static regression coverage for Map workspace hierarchy and density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 84 Data workspace density polish (2026-06-20)

  • Added selected-summary regions to Project, AOI and Dataset panels so active context is visible before forms.
  • Split Data workspace panels into named form/list/catalog blocks to reduce form-first scanning friction.
  • Restyled dataset upload as an embedded source-data block while preserving the existing upload flow.
  • Added static regression coverage for Data workspace selected-summary, upload and catalog density contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 83 Workspace panel hierarchy polish (2026-06-20)

  • Made the Overview readiness strip a calmer section surface with tighter status tiles.
  • Added explicit Overview action-copy and recommended-action regions for easier scanning and future UI regression coverage.
  • Restyled recommended next actions as a lighter callout instead of another equally weighted white card.
  • Added static regression coverage for Overview hierarchy regions, compact status tiles and secondary action-callout styling.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 82 Shell density polish (2026-06-20)

  • Added a keyboard skip link to jump directly from the workbench shell to active workspace content.
  • Added an explicit primary workspace navigation label and main focus target.
  • Made narrow-view context chips, sidebar navigation and workspace shortcuts more compact and scroll-safe.
  • Locked the smallest mobile breakpoint so the topbar context remains a horizontal rail instead of expanding into a tall preamble.
  • Added static regression coverage for shell density, skip-link and mobile navigation contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 81 Result state consistency polish (2026-06-20)

  • Added shared result-state styling for compact loading, error, empty and ready states.
  • Applied consistent state blocks to QA/QC results, export history and AI lab model/result panels.
  • Replaced loose text/error rows in Detection and Segmentation Labs with scan-friendly state cards.
  • Added static regression coverage for result-state CSS and panel usage contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 80 Operation form readability polish (2026-06-20)

  • Added structured headings, helper text, field wrappers and action rows to dense raster operation controls.
  • Added the same form readability structure to vector clip, buffer and intersect controls.
  • Added compact CSS contracts for dataset tool headings, helper text, field grids, action rows and inline error blocks.
  • Added static regression coverage for raster/vector operation form readability contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 79 Accessibility focus polish (2026-06-20)

  • Added a shared visible focus-ring contract for primary buttons, workspace navigation, command chips, inspector tabs and dataset action buttons.
  • Added explicit ARIA labels to workspace navigation, command chips and overview quick actions.
  • Bound inspector tabs to their active tab panels with aria-controls, tab ids and tabpanel metadata.
  • Added static regression coverage for keyboard focus and inspector tab accessibility contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 78 Export preview readability polish (2026-06-20)

  • Added compact preview summary cards for JSON/GeoJSON export payloads.
  • Wrapped export preview JSON in a scroll-contained shell with a lightweight toolbar.
  • Improved long key/value wrapping for large handoff artifacts while preserving the stored payload.
  • Added static regression coverage for export preview readability contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 77 Inspector mobile visual polish (2026-06-20)

  • Added compact inspector action button grids for narrow screens.
  • Added mobile-safe wrapping for dataset filenames, checksums, bounds, persisted export paths and loaded feature/job JSON.
  • Added structured raster/vector tool panel classes so operation inputs and buttons stay inside the inspector.
  • Added static regression coverage for inspector mobile CSS and dataset tool markup contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 76 Export/System mobile visual polish (2026-06-20)

  • Added scan-friendly Provider Capabilities cards with structured status, authority, geometry, query mode and layer chips.
  • Tightened mobile export action cards, export history controls and export card headers.
  • Added overflow wrapping for long provider limitations, attribution text, export ids and artifact paths.
  • Added static regression coverage for Export/System mobile CSS and workflow markup contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 75 AI Labs mobile visual polish (2026-06-20)

  • Tightened mobile Detection and Segmentation Lab model card, form and result-summary sizing.
  • Added overflow wrapping for long model ids, source tile paths, mask paths and QA summary values.
  • Kept result tables scroll-contained instead of allowing them to widen the workbench.
  • Added static regression coverage for AI Labs mobile CSS and workflow markup contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 74 Data/Map mobile visual polish (2026-06-20)

  • Tightened mobile Data workspace upload form, file input and dataset action button sizing.
  • Kept desktop dataset action grid width contract while adding compact mobile tracks.
  • Tightened Map toolbar, layer control sliders and empty-map quick actions for narrow screens.
  • Added static regression coverage for Data/Map mobile CSS contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 73 QA/QC result filtering (2026-06-20)

  • Added client-side QA/QC result search, status and check-type filters.
  • Added latest-eight density control with a show-all toggle for long-lived demo projects.
  • Added a no-match empty state and reset action for filtered QA/QC result views.
  • Kept metric evidence cards and raw persisted metrics unchanged.
  • Added static regression coverage for QA/QC filtering and dense history styles.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 72 Mobile overflow hardening (2026-06-20)

  • Clamped page-level horizontal overflow for the workbench shell on mobile.
  • Kept sidebar navigation and workspace shortcut chips as contained horizontal scroll areas.
  • Added wrapping/containment for long QA identifiers, dataset links and inspector values.
  • Made inspector tabs two-column on narrow screens to avoid header overflow.
  • Added static regression coverage for mobile overflow and long-identifier wrapping contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 71 QA/QC metric card polish (2026-06-19)

  • Added core metric evidence cards for precision, recall, F1, mean IoU and false positive/negative counts.
  • Kept the raw persisted metric list available below the promoted metric evidence.
  • Added number formatting for compact metric display while preserving persisted metric values.
  • Added static regression coverage for metric promotion and responsive metric-card styles.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 70 QA/QC handoff polish (2026-06-19)

  • Added candidate/reference handoff cards to the QA/QC workspace.
  • Resolved persisted quality-check candidate/reference dataset IDs back to loaded dataset names where available.
  • Filtered QA candidate context to non-reference vector/GeoJSON datasets while keeping persisted dataset roles unchanged.
  • Added static regression coverage for QA handoff props, App wiring and responsive handoff styles.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 69 Data catalog action polish (2026-06-19)

  • Added recommended-action hints to each dataset card so reference and candidate layers explain their QA role.
  • Reworked dataset card actions into compact two-line buttons for Inspect, Map, Export / QA and Metadata.
  • Preserved existing handlers, API contracts and persistence behavior; this is UI affordance polish only.
  • Added static regression coverage for the action hints, disabled-action copy and responsive action grid.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 68 Data catalog density polish (2026-06-19)

  • Added a compact Data catalog summary for Selected, Reference, Candidate and Source layers.
  • Added scan-friendly dataset role badges, source/layer/CRS context and safer title wrapping to dataset cards.
  • Kept candidate as a frontend workbench display role only: persisted dataset roles and API contracts remain unchanged.
  • Added static regression coverage for the dataset catalog density structure and responsive CSS.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 63 Map overlay ergonomics (2026-06-18)

  • Added an active layer provenance rail to the Map workspace, showing layer source, provenance and draw state from existing frontend state.
  • Added clear empty guidance when no vector/result layer is active on the map.
  • Added scan-friendly selected-feature property chips before the raw JSON inspector.
  • Tightened panel title alignment after the visual polish pass exposed a generic CSS selector specificity issue.
  • Added static regression coverage for the map provenance and feature-summary UI contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 62 Workbench visual polish (2026-06-18)

  • Added a compact workspace command bar for fast switching between the primary workbench surfaces.
  • Polished the shell visual system with raised/sunken surfaces, softer shadows, tighter topbar spacing and more consistent panel styling.
  • Replaced raw empty-state text in project/dataset panels with structured empty-state blocks.
  • Improved Detection Lab and Segmentation Lab result summaries and wrapped long result tables in scroll-safe containers.
  • Improved mobile workbench navigation by using horizontal rails for the primary nav and command chips, reducing vertical crowding without adding new behavior.
  • Added static regression coverage for the visual polish contracts.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 61 Golden QA scenario expansion (2026-06-18)

  • Expanded the deterministic QA/QC golden benchmark from one building scenario to four local fixture scenarios: partial match, perfect match, no-overlap and MultiPolygon match.
  • Added fixtures/golden/golden_qa_benchmarks.json as the scenario manifest while preserving the original expected_qa_metrics.json baseline for existing demo workflow checks.
  • Updated scripts/run_golden_qa_benchmark.py to run every scenario, verify metric drift and report aggregate QualityCheck/Metric persistence expectations.
  • Added regression coverage for the multi-scenario manifest and aggregate benchmark output.
  • No product behavior, API contract, migration, provider fetching or AI model behavior changed.

Sprint 49 Workbench shell UI refactor (2026-06-17)

  • Replaced the one-page workbench panel stack with a task-based UI shell.
  • Added primary workspaces for Overview, Data, Map, QA/QC, AI Labs, Exports and System.
  • Added a persistent top context bar for active project, AOI, dataset and layer state.
  • Moved dataset details into a persistent right-side inspector instead of leaving them below the full workflow.
  • Kept existing hooks, API contracts, backend behavior, migrations, provider behavior and AI configuration unchanged.
  • Added static regression coverage for the new shell regions and workspace navigation anchors.

Sprint 50 Workspace usability polish (2026-06-17)

  • Reworked the Data workspace panels into compact operator forms and scan-friendly project/AOI/dataset cards.
  • Reworked the Map workspace controls into a layer toolbar with clearer AOI/layer status.
  • Reworked Detection Lab and Segmentation Lab into model, run, result and QA blocks instead of raw stacked controls.
  • Added responsive card/form styling so nested workspaces do not overflow inside the shell.
  • Added static regression coverage for the polished workspace structure.
  • No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed.

Sprint 48 Backend API contract audit (2026-06-17)

  • Added scripts/audit_api_contracts.py to compare the active FastAPI route surface with docs/API_CONTRACTS.md.
  • Added the API contract audit to the readiness gate so undocumented routes and stale documented routes fail release checks.
  • Corrected API contract drift for area detail/update, vector stats, dataset content and future analysis/YOLO export placeholders.
  • Added regression tests for the contract audit and readiness integration.

Sprint 47 Workbench interaction smoke (2026-06-17)

  • Added stable data-testid anchors to the existing project, area, map, dataset, QA/QC and export controls for browser regression checks.
  • Added scripts/verify_workbench_interactions.sh to verify the live backing state for project switching, AOI/map selection, dataset readiness, QA refresh and export refresh.
  • Added readiness syntax coverage and static regression tests for the new interaction smoke.
  • No API contracts, migrations, provider fetching, AI behavior or product capabilities changed.

Sprint 46 Workbench default-state smoke (2026-06-17)

  • Added scripts/verify_workbench_default_state.sh to verify the live frontend/API default demo state through the browser-facing URL.
  • The smoke seeds the offline demo workflow and verifies the demo project, AOI geometry, ready candidate/reference datasets and persisted QA/QC result via canonical envelopes.
  • Added readiness coverage for the new smoke script syntax and static tests for its expected contract checks.
  • No API contracts, migrations, provider fetching, AI behavior or product capabilities changed.

Sprint 45 Default demo selection polish (2026-06-17)

  • Improved frontend project selection so a cold start prefers a populated demo/workbench project over an empty first project.
  • Preserved the current project selection when it still exists and selected newly created projects immediately after creation.
  • Updated the demo workflow hook to pass the seeded project as the preferred project during refresh.
  • Added static regression coverage for the smarter project selection and demo refresh behavior.
  • No API contracts, migrations, provider fetching, AI behavior or product capabilities changed.

Sprint 44 Workbench UI polish pass (2026-06-17)

  • Reworked the frontend workbench styling into a cleaner operational GIS interface with compact panels, modern controls, restrained green/neutral accents and scroll-contained long sections.
  • Promoted MapWorkspace above the dense workflow grid so the map is visible early in the workbench flow.
  • Moved DatasetPanel into the first workflow row beside project/area/provider setup.
  • Added a static layout regression test for map-first ordering and scroll-contained workflow panels.
  • No API contracts, migrations, provider fetching, AI behavior or product capabilities changed.

Sprint 43 Workbench bootstrap hook decomposition (2026-06-17)

  • Moved frontend bootstrap/project/result reload effects from App.tsx into frontend/src/hooks/useWorkbenchBootstrap.ts.
  • App.tsx no longer imports or owns useEffect; it wires hook state into panels and delegates lifecycle loading to focused hooks.
  • Extended orchestration regression tests so bootstrap loading and result refresh effects stay out of App.tsx.
  • No behavior, API contracts, migrations, provider fetching or AI behavior changed.

Sprint 42 App entrypoint cleanup (2026-06-17)

  • Removed the stale FormEvent/useState React imports from frontend/src/App.tsx.
  • Removed the UTF-8 BOM from the frontend entrypoint so future text patches and static checks are stable.
  • Added a regression test that keeps App.tsx free of the stale imports and BOM.
  • No behavior, API contracts, migrations, provider fetching or AI behavior changed.

Sprint 41 Demo workflow hook decomposition (2026-06-17)

  • Moved offline demo workflow orchestration from App.tsx into frontend/src/hooks/useDemoWorkflow.ts.
  • The hook keeps the existing cross-module selection behavior for project, candidate/reference datasets, map AOI, QA/QC, detection, segmentation and export refresh state.
  • Extended frontend orchestration regression tests so demoApi stays out of App.tsx.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 40 Project workspace hook decomposition (2026-06-17)

  • Moved project listing/creation, area creation and project-scoped area/dataset loading from App.tsx into frontend/src/hooks/useProjectWorkspace.ts.
  • Moved default clip-area selection into useDatasetWorkflow.ts and default map-area selection into useMapWorkspaceState.ts, keeping selection state with the owning workflow.
  • Extended frontend orchestration regression tests to keep project, provider, change-detection and map orchestration out of App.tsx.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 39 Frontend orchestration decomposition (2026-06-17)

  • Moved provider capability loading from App.tsx into frontend/src/hooks/useProviderCapabilities.ts.
  • Moved change detection state and API orchestration into frontend/src/hooks/useChangeDetectionWorkflow.ts.
  • Moved derived MapLibre workbench state, feature collection selection and feature-inspector reset behavior into frontend/src/hooks/useMapWorkspaceState.ts.
  • Added regression tests that keep provider/change/map orchestration out of App.tsx.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 38 Export Center preview hardening (2026-06-17)

  • Prevented HTML project report artifacts from being offered through the JSON preview path in the frontend Export Center.
  • Added a clear backend EXPORT_CONTENT_UNSUPPORTED response when /api/v1/exports/{export_id}/content is called for HTML report artifacts.
  • Extracted export JSON preview rendering into frontend/src/components/exports/ExportPreview.tsx.
  • Added regression coverage for HTML report content-preview rejection.
  • No API routes, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 37 Tower PostgreSQL collation maintenance (2026-06-17)

  • Created a live Tower database backup before collation maintenance: backups/geointel-before-collation-refresh-20260617-065707.dump.
  • Ran REINDEX DATABASE geointel; and ALTER DATABASE "geointel" REFRESH COLLATION VERSION; against the all-in-one PostGIS runtime.
  • Verified the reused database volume now reports matching collation versions: stored=2.36 actual=2.36.
  • Re-ran live migration smoke, browser runtime smoke, GIS runtime smoke and demo/export/golden QA workflow smoke successfully against http://192.168.10.150:1202.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 36 PostgreSQL collation maintenance visibility (2026-06-17)

  • Added database collation version reporting to scripts/live_migration_smoke.sh.
  • The live smoke now prints COLLATION_VERSION_MISMATCH plus the exact ALTER DATABASE ... REFRESH COLLATION VERSION acknowledgement command when an old PostGIS volume is reused on a newer runtime.
  • Documented the Unraid maintenance procedure and backup/index review guidance.
  • Added regression coverage for the collation mismatch reporting path.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 35 Docker runtime secret hygiene (2026-06-17)

  • Removed embedded PostGIS database name/user/password defaults from deploy/unraid/Dockerfile.all-in-one image metadata.
  • Kept database credentials as runtime configuration through .env, the Unraid template, Compose or docker run -e.
  • Added regression coverage so GEOINTEL_POSTGRES_PASSWORD is not baked into the all-in-one Dockerfile again.
  • Updated Unraid runtime documentation to clarify that credentials are runtime config, not image metadata.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 34 browser-facing golden QA demo hardening (2026-06-17)

  • Hardened scripts/verify_demo_export_workflow.sh so the browser-facing demo/export smoke compares persisted QA/QC metrics against fixtures/golden/expected_qa_metrics.json.
  • The runtime smoke now verifies QA/QC status, F1 score, precision, recall, mean IoU, false positives, false negatives and match counts from persisted quality_checks/metrics.
  • Corrected the offline demo AOI to cover the golden building fixtures and made existing demo workflows self-heal stale/unsupported QA checks by syncing the AOI and persisting a fresh golden QA result.
  • Added regression tests to keep the golden QA baseline wired into the demo/export smoke.
  • Updated script documentation for the stricter runtime QA/QC checks.
  • No API contracts, migrations, product features, live provider fetching or AI behavior were introduced.

Sprint 33 QA/QC benchmark readiness hardening (2026-06-17)

  • Added scripts/verify_golden_qa_benchmark.sh as a shell wrapper for the deterministic QA/QC golden benchmark.
  • Made scripts/run_readiness_check.sh execute the golden QA/QC benchmark and syntax-check the wrapper.
  • Hardened fixture validation so fixtures/golden GeoJSON files and expected fixture paths are checked.
  • Added regression tests to keep the golden benchmark in the readiness gate.
  • Updated script/backend docs to document the benchmark wrapper and release gate behavior.
  • No API contracts, migrations, product features, live provider fetching or AI behavior were introduced.

Sprint 32 Unraid all-in-one runtime (2026-06-17)

  • Added docker-compose.unraid.yml for a single geointel container on Unraid.
  • Added deploy/unraid/Dockerfile.all-in-one, embedding PostgreSQL 16/PostGIS, FastAPI, nginx and the built React frontend in one image.
  • Added deploy/unraid/all-in-one-start.sh to start embedded PostGIS, apply Alembic migrations, start the backend and serve nginx.
  • Added deploy/unraid/nginx-all-in-one.conf with localhost backend proxying inside the same container.
  • Added a PNG DockerMan icon and made the Unraid template name match the running geointel container.
  • Added DockerMan labels to the all-in-one Compose service so Unraid can associate the running container with web UI and icon metadata.
  • Added deploy/unraid/run-dockerman-container.sh so repo deploys automatically replace Compose-owned containers with a DockerMan-native geointel container while preserving/migrating persisted data.
  • Switched Tower deploy image creation from docker compose build to plain docker build to avoid Compose metadata labels on the final DockerMan-managed container.
  • Updated Tower deploy scripts to install /boot/config/plugins/dockerMan/templates-user/my-geointel.xml and /boot/config/plugins/dockerMan/images/geointel-icon.png.
  • Updated Tower deploy scripts to stop the old multi-container stack without removing volumes and start the all-in-one stack.
  • Updated the Unraid template so the Docker can be edited from Unraid with one web port, storage path, PostGIS data path and app icon.
  • Hardened live migration and browser runtime smoke scripts with startup retries and an icon check.
  • Verified Tower deployment at http://192.168.10.150:1202 with one healthy geointel container, passing live migration smoke, API proxy smoke and icon smoke.
  • No API contracts, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 31 Unraid deployment template (2026-06-17)

  • Made Docker Compose ports, storage path, PostGIS credentials, CORS origins and upload limit configurable through .env defaults.
  • Added deploy/unraid/geointel.env.example for Unraid/Tower setup.
  • Added deploy/unraid/geointel-unraid-template.xml documenting editable Unraid settings for the multi-container Compose stack.
  • Added GeoIntel SVG icon assets for Unraid/template use and frontend favicon serving.
  • Added regression coverage for Compose env defaults, Unraid template settings, README instructions and icon availability.
  • No API contracts, backend behavior, migrations, product features, provider fetching or AI behavior were introduced.

Sprint 30 workbench component decomposition (2026-06-17)

  • Moved persisted QA/QC result rendering into QualityResultsPanel.
  • Moved map controls, MapLibre composition and feature inspector rendering into MapWorkspace.
  • Added regression coverage to verify App.tsx wires these presentational components without taking QA/map markup back inline.
  • No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced.

Sprint 29 dataset component decomposition (2026-06-17)

  • Moved dataset upload/list UI into DatasetPanel.
  • Moved dataset details and job list UI into DatasetDetailPanel.
  • Split raster and vector controls into RasterControls and VectorControls.
  • Added regression coverage to verify App.tsx wires the new presentational dataset components without taking dataset markup back inline.
  • No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced.

Sprint 28 dataset workflow hook hardening (2026-06-17)

  • Moved dataset selection, upload, detail loading, dataset jobs and raster/vector operation orchestration from App.tsx into useDatasetWorkflow.
  • Kept project dataset listing in App.tsx so project/area loading remains the shared workbench boundary.
  • Added regression coverage to verify App.tsx still wires dataset, raster and vector UI callbacks while operation API ownership stays inside the focused hook.
  • No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced.

Sprint 27 export and QA workflow hook hardening (2026-06-17)

  • Moved Export Center orchestration state and API calls from App.tsx into useExportWorkflow.
  • Moved QA/QC comparison state and persisted quality-check loading from App.tsx into useQualityWorkflow.
  • Added regression coverage to verify App.tsx wires the new hooks while export and QA API ownership stays inside focused hooks.
  • No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced.

Sprint 26 frontend workflow hook hardening (2026-06-17)

  • Moved Detection Lab orchestration state and API calls from App.tsx into useDetectionWorkflow.
  • Moved Segmentation Lab orchestration state and API calls from App.tsx into useSegmentationWorkflow.
  • Added shared frontend formatError helper.
  • Added regression coverage to verify App.tsx wires the workflow hooks and panels without direct detection/segmentation API ownership.
  • No API contracts, backend behavior, migrations, product features, provider fetching, AI behavior or UI redesign were introduced.

Sprint 25 YOLO compatibility smoke hardening (2026-06-17)

  • Added an explicit --check-model-load mode to scripts/yolo_preflight.py.
  • Added the same YOLO preflight entrypoint under backend/scripts/ so it can run inside the backend Docker container.
  • The smoke loads only a configured local model file through the YOLO adapter, runs no inference and does not download weights.
  • The CLI rejects --check-model-load together with --assume-dependencies to avoid false-positive AI readiness.
  • Added tests for successful mocked model-load smoke, load failure reporting and CLI guard behavior.
  • Added the YOLO preflight script to the main readiness gate via Python compile validation.
  • No base dependencies, API contracts, migrations, product features, provider fetching or detection persistence behavior were changed.

Sprint 24 demo/export artifact cleanup tooling (2026-06-17)

  • Added scripts/cleanup_demo_artifacts.py, a dry-run-first maintenance script for old offline demo export artifacts.
  • Added the same cleanup entrypoint under backend/scripts/ so it can run inside the backend Docker container.
  • The cleanup keeps the newest exports per matching demo project, deletes only explicit exports rows/files when --apply is set and refuses file deletion outside STORAGE_ROOT.
  • Added tests for cleanup candidate selection, storage-root path safety and readiness gate coverage.
  • Added the cleanup script to the main readiness gate via Python compile validation.
  • No API contracts, migrations, product features, provider fetching, AI inference or source dataset cleanup behavior were changed.

Sprint 23 V1 report handoff summary (2026-06-17)

  • Added V1 readiness summary data to project metadata exports.
  • Added a V1 Readiness Summary and Known Limitations section to lightweight HTML project reports.
  • The summary covers project, AOI, dataset readiness, QA/QC and export history using persisted state.
  • No new report designer, PDF generation, provider fetching, AI inference, migrations or API route changes were introduced.

Sprint 22 V1 workbench status strip (2026-06-17)

  • Added a compact frontend status strip for project, AOI, datasets, active map layer, QA/QC and exports.
  • The strip is driven by existing App state and suggests the next operator action in the V1 loop.
  • Hardened the MapLibre component so GeoJSON sources/layers wait for the map style to finish loading before updates run.
  • Hardened the offline demo workflow so duplicate historical demo projects prefer complete fixture state before repairing incomplete state.
  • Added regression coverage to ensure the strip remains wired without introducing new API calls.
  • No backend behavior, migrations, API contracts, provider downloads, AI inference or new dependencies were introduced.

Sprint 21 V1 demo workflow smoke hardening (2026-06-17)

  • Hardened the browser-facing demo/export smoke to verify connected V1 state: project area GeoJSON, fixture datasets, vector FeatureCollection content, vector feature summary, persisted QA/QC metrics and export downloads.
  • Loading the offline demo workflow in the frontend now opens the candidate vector fixture dataset directly, so the map workbench is populated after the demo action.
  • Added regression tests for the strengthened demo smoke and frontend demo dataset loading contract.
  • No migrations, provider downloads, AI inference, new dependencies or API route renames were introduced.

Sprint 20 selected area map overlay (2026-06-17)

  • Added persisted AOI GeoJSON to area API responses without changing the database schema.
  • Added a dedicated MapLibre area overlay layer with visibility and opacity controls.
  • Added area list actions to choose which AOI is shown on the map.
  • Added regression tests for area GeoJSON serialization and frontend map overlay wiring.
  • No migrations, provider downloads, AI inference, new dependencies or API route renames were introduced.

Sprint 19 V1 map workbench controls (2026-06-17)

  • Added MapLibre layer visibility and opacity controls for the active GeoJSON workbench layer.
  • Added click-to-inspect feature properties for the active map layer.
  • Updated the visible app identity from the stale Sprint 9 label to GeoIntel Kempen V1 Workbench.
  • Added regression tests that lock the map control and feature inspection wiring.
  • No API contracts, migrations, backend behavior, provider fetching, AI inference or new dependencies were introduced.

Sprint 18 vector change detection foundation (2026-06-16)

  • Added POST /api/v1/analysis/change-detection for synchronous comparison of two vector datasets in the same project.
  • Added a ChangeDetectionService that prefers persisted vector_features, falls back to stored GeoJSON with an explicit warning, and returns added/removed/unchanged GeoJSON features.
  • Added a frontend Change Detection panel and MapLibre change overlay styling for added, removed and unchanged geometries.
  • Added nginx no-cache headers for frontend HTML/assets so LAN Docker rebuilds are visible without stale browser modules.
  • Added backend tests for persisted vector feature comparison and canonical API envelope behavior.
  • No migrations, live provider fetching, AI inference, new dependencies, LiDAR, Copilot, Training Studio or separate Reports module were introduced.

Release hardening audit pass (2026-06-15)

  • Replaced remaining backend datetime.utcnow() usage with timezone-aware UTC timestamps.
  • Verified the affected backend tests with DeprecationWarning promoted to errors.
  • Split the frontend production bundle into explicit app, React vendor and MapLibre vendor chunks.
  • Raised the Vite chunk warning threshold to match the isolated MapLibre GIS dependency rather than masking app-code growth.
  • Hardened the main readiness gate so backend deprecation warnings fail release readiness.
  • Added API contract smoke validation to the main readiness gate.
  • Hardened the pass-end placeholder scan to skip dependency, build-output and bytecode-cache folders.
  • Added backend tests for the release/readiness script expectations.
  • Updated docs/TODO.md with current implementation status while preserving older planning context.
  • No API contracts, migrations, product features, AI dependencies or provider behavior were changed.

Docker runtime hardening (2026-06-15)

  • Fixed the backend Docker build by copying README.md and app/ before pip install ..
  • Removed mandatory Compose .env references so docker compose up works with checked-in local defaults.
  • Published the Docker Compose frontend on host port 1202.
  • Added backend CORS defaults for http://localhost:1202 and http://127.0.0.1:1202.
  • Stopped publishing PostGIS on host port 5432; backend uses Docker-internal db:5432.
  • Added a PostGIS healthcheck and made the backend wait for a healthy database.
  • Added a backend Docker start script that retries a real SQL connection before running migrations, avoiding first-start database race conditions.
  • Made the backend container run alembic upgrade head before starting Uvicorn.
  • Added backend/frontend .dockerignore files to keep dependency folders, build outputs and caches out of Docker build contexts.
  • Added Docker runtime configuration regression tests.
  • Fixed Alembic logging format so Docker migration logs no longer print literal %(levelname) formatter strings.
  • Changed the frontend API default to same-origin requests and added a Vite proxy for /api and /health, with Docker routing to http://backend:8000.
  • Added a browser runtime verification script that fails when the frontend /api proxy returns Vite HTML instead of the backend JSON envelope.
  • Updated environment and local runbook documentation so Docker/LAN browser clients use same-origin API calls through the frontend proxy by default.
  • Corrected example YOLO environment variables to the names the backend actually reads: YOLO_ENABLED, YOLO_MODEL_PATH and YOLO_MAX_TILES.
  • Replaced the Docker frontend runtime with an nginx-served production build and explicit /api plus /health reverse proxy to the backend service, avoiding Vite HTML fallback for API requests.

M6 — Codex Autonomy Pack

Added:

  • M6 autonomy boundaries.
  • M6 quality gates.
  • Codex self-review checklist.
  • Failure recovery playbook.
  • Gap registry.
  • Next-day execution checklist.
  • Final handoff template.
  • Codex pass prompts PASS 00 through PASS 12.
  • GitHub issue templates and PR template.
  • GitHub Actions docs/contract smoke workflow.
  • Codex preflight and pass-end scripts.

Purpose:

  • Prepare the repository so Codex can build with strict guidance and bounded improvement freedom.

M7 - Implementation Control Layer

Added:

  • M7 implementation control layer.
  • Locked build sequence.
  • Regression trap catalogue.
  • Codex self-review checklist.
  • Geospatial calculation rules.
  • Frontend state rules.
  • API response rules.
  • Module completion matrix.
  • Codex decision boundaries.
  • Proposed improvements backlog.
  • End-of-pass review prompts.
  • Regression and contract drift audit prompts.
  • Module contracts for project/area/dataset, detection boundary and QA/QC.
  • M7 self-review scripts.

M8 - Tomorrow Execution Pack

  • Added Day 1 Codex execution pack.
  • Added pass-by-pass Day 1 prompts.
  • Added autonomy boundaries, failure recovery and quality gate matrix.
  • Added operator checklist and smoke script scaffold.
  • Added next-pass guidance for Day 2 GeoAI loop.

v0.9 — M9 Max Preparation

  • Added Codex day-one master prompt.
  • Added autonomous build doctrine and pass scorecards.
  • Added real-vs-demo data policy and detailed data contracts.
  • Added geospatial edge cases, UI state spec and API validation examples.
  • Added implementation review script, regression map and gap-to-task conversion rules.
  • Added final pre-code checklist and long-form prompt variants.

Sprint 1 readiness hardening (2026-06-11)

  • Added cross-platform backend/runtime scripts with python/python3 fallback in readiness tooling.
  • Fixed backend packaging metadata so editable install works in current flat repo layout.
  • Added dependency and smoke test script updates for Sprint 1 services.
  • Added minimal Sprint 1 tests for health endpoint, GeoJSON metadata extraction, invalid payload rejection, and dataset content reads.
  • Fixed frontend README doc reference typo for repository conventions.
  • Updated Sprint 1 docs to include backend import smoke and concrete local setup commands.

Sprint 2 foundation (2026-06-11)

  • Added canonical vector/raster dataset handling and lifecycle status transitions (uploaded, validating, ready, failed).
  • Added vector metadata extraction (feature count, geometry types, bounds, approximate area, CRS assumptions).
  • Added raster metadata extraction service with dependency-aware fallback (RASTER_PROCESSING_UNAVAILABLE).
  • Added deterministic storage metadata capture (original_filename, stored_filename, content_type, size_bytes, checksum_sha256) and upload folder layout.
  • Added dataset inspection/vector summary/raster metadata API endpoints and frontend detail panel support.
  • Added Sprint 2 tests for vector metadata, invalid GeoJSON handling, legacy geojson compatibility and raster dependency fallback.

Sprint 3 foundation (2026-06-11)

  • Added job model and database migration for queued/running/success/failed operations.
  • Added job APIs for create/list/read/status under project scope.
  • Added vector operation services and route wiring for inspect/bbox/stats/clip/buffer/intersect.
  • Added raster operation scaffolding for inspect/metadata/preview, with dependency-aware clip/tile unavailability.
  • Added frontend operation controls, job status display, and derived dataset link-through in dataset detail panel.
  • Updated API contracts and execution log for Sprint 3 foundations.

Sprint 5 raster analytics hardening (2026-06-11)

  • Added raster band statistics operation:
    • min, max, mean, std, nodata count, nodata ratio, valid pixel count, dtype, band index and optional histogram.
    • chunked raster reads to reduce memory pressure and explicit dependency-aware unavailable mode when raster libs are missing.
  • Added raster reproject operation foundation with CRS validation:
    • supports target CRS selection via explicit parameter,
    • persists derived output dataset with operation provenance,
    • records operation parameters and error details when invalid.
  • Hardened raster clip and tile manifest flow:
    • explicit empty clip failure behavior,
    • bounds/metadata refresh and improved tile manifest fields.
  • Added raster operation job persistence tests:
    • result_json and error_message persistence,
    • dependency-aware statistics failure behavior,
    • invalid CRS handling,
    • output linkage for reprojected datasets.
  • Extended dataset UI dataset detail job panel:
    • raster metadata visibility (CRS, bounds, resolution),
    • raster band statistics rendering,
    • reproject form and job result visibility.

Sprint 6 local spectral indices (2026-06-12)

  • Added local spectral index operations:
    • NDVI endpoint
    • NDWI endpoint
    • NDBI endpoint
  • Added explicit spectral index input validation:
    • positive integer checks
    • source raster band-count bounds checks
  • Implemented dependency-aware index execution for missing raster dependencies.
  • Added local spectral raster output generation using float32 and NaN invalid handling.
  • Stored index-derived dataset provenance metadata:
    • source_dataset_id
    • operation (raster.ndvi, raster.ndwi, raster.ndbi)
    • band_mapping
    • formula
    • output_dtype
    • nodata_strategy
    • value_range_note
    • created_at
    • output_dataset_id
    • path
  • Extended dataset detail UI with spectral index controls and result dataset actions.
  • Updated:
    • docs/API_CONTRACTS.md
    • docs/RASTER_OPERATIONS_SPEC.md
    • backend/README.md
    • frontend/README.md
    • docs/CODEX_EXECUTION_LOG.md

Sprint 7A persistence and QA foundation (2026-06-12)

  • Added vector_features as first-class queryable vector state while preserving original uploaded files as source artifacts.
  • Added quality_checks and metrics as persisted QA/QC domain records.
  • Added Alembic migration 202606120700_sprint7a_persistence_foundation.py for vector features, quality checks, metrics and required indexes.
  • Persisted uploaded vector GeoJSON feature properties and geometries into PostGIS-backed feature rows.
  • Updated QA candidate-vs-reference jobs to persist quality checks and metric rows and return quality_check_id.
  • Hardened GRB/OSM provider contracts as honest not_configured capability stubs only.
  • Added tests for Sprint 7A persistence, dataset role validation, provider contracts, migration integrity and QA route persistence.

Sprint 7B provider integration skeleton (2026-06-12)

  • Added central provider registry entries for grb, osm, manual and fixture.
  • Added provider capability, layer, status and future import-contract endpoints using the existing API envelope style.
  • Kept GRB and OSM as explicit not_configured providers with no live WFS, Overpass or download behavior.
  • Added provider-to-dataset mapping rules for future imports through DatasetService and VectorFeatureService.
  • Added lightweight frontend Provider Capabilities panel with status, authority, layers, query modes and limitations.
  • Added live PostGIS migration smoke script for opt-in local database verification.
  • Added Sprint 7B provider registry/API tests.

Sprint 8 Detection Lab foundation (2026-06-12)

  • Added detections as first-class persisted PostGIS records linked to project, dataset, job and analysis run.
  • Hardened analysis_runs with dataset/job/model/result metadata for future detection and segmentation workflows.
  • Added model registry capabilities for yolo-placeholder and manual-fixture-detector.
  • Added Detection Lab service and API foundation with dependency-aware DETECTION_MODEL_UNAVAILABLE responses.
  • Added explicit fixture detector mode for tests/demo fixtures only; no fake production inference was introduced.
  • Added minimal frontend Detection Lab panel for model status, raster dataset selection, confidence threshold and run status.
  • Added Sprint 8 tests for persistence, model capabilities, unavailable model behavior, invalid dataset validation, explicit fixture persistence and API envelope shape.

Sprint 8B configured YOLO foundation (2026-06-12)

  • Added optional ai backend dependency group for Ultralytics/Torch without making AI dependencies mandatory for normal startup.
  • Added yolo-configured model registry capability with not_configured, dependency_unavailable and configured status behavior.
  • Added import-safe YOLO adapter that loads only an existing local model path and does not auto-download weights.
  • Added raster tile manifest validation, configured tile limits and pixel bbox to EPSG:4326 detection polygon conversion.
  • Added mocked YOLO persistence tests that verify first-class detection records without requiring YOLO dependencies.
  • Added Detection Lab tile manifest path input for configured YOLO runs.
  • Updated AI/API/backend/frontend docs for Sprint 8B configuration and limitations.

Sprint 8C detection visualization and QA integration (2026-06-12)

  • Added detection result review endpoints for run lists, filtered detections, detection detail and GeoJSON FeatureCollection output.
  • Added detection QA against persisted reference vector_features using existing quality_checks and metrics.
  • Added frontend Detection Lab run selection, detection table, class/confidence filters and MapLibre detection GeoJSON overlay.
  • Added frontend detection QA controls and metric summary display.
  • Added tests for detection GeoJSON shape, filters, detail, QA persistence, no-match QA and Sprint 8B manifest edge cases.
  • Segmentation, LiDAR, Copilot, Training Studio and Reports remain out of scope.

Sprint 9 Segmentation Lab foundation (2026-06-12)

  • Added segmentations as first-class persisted PostGIS MultiPolygon records linked to project, dataset, job and analysis run.
  • Added deterministic segmentation mask path convention under storage/masks/{project_id}/{analysis_run_id}/tile_{tile_index}/.
  • Added segmentation model registry capabilities:
    • segmentation-placeholder
    • fixture-segmenter
    • yolo-seg-configured
    • sam-configured
  • Added Segmentation Lab service and API foundation for model listing, run creation, run/result listing, detail, GeoJSON output and reference QA.
  • Added segmentation QA against persisted reference vector_features using existing quality_checks and metrics.
  • Added minimal frontend Segmentation Lab UI with model status, raster selection, run/result table, map overlay and QA metric display.
  • Real SAM, real YOLO-seg, model downloads, new AI dependencies, LiDAR, Copilot, Training Studio and Reports remain out of scope.

Sprint 10 release hardening and modularization (2026-06-13)

  • Extracted project, area, provider capabilities, Detection Lab and Segmentation Lab UI sections from frontend/src/App.tsx into focused components.
  • Preserved existing API client usage, state ownership, MapLibre overlay behavior and workbench UX.
  • Hardened readiness checks to include Alembic head verification and scripts/live_migration_smoke.sh syntax validation.
  • No new product features, migrations, AI dependencies or live external provider fetching were introduced.

Sprint 11 live Docker/PostGIS runtime validation (2026-06-13)

  • Hardened scripts/live_migration_smoke.sh so fresh databases run Alembic migrations before checking PostGIS_Version().
  • Added live runtime schema-object checks for core migrated tables and geometry indexes.
  • Added backend tests that lock the live migration smoke ordering and schema-check contract.
  • Documented exact Docker/PostGIS validation commands, expected DATABASE_URL and local cleanup commands.
  • Docker was unavailable in the current shell, so live container execution remains pending on a Docker-enabled machine.

Sprint 12 QA/QC golden dataset and benchmarking (2026-06-15)

  • Added deterministic golden building QA/QC fixtures and expected metric baseline.
  • Added scripts/run_golden_qa_benchmark.py to run existing QA/QC logic against the golden fixtures and fail on metric drift.
  • Added backend tests covering expected golden metrics and QualityCheck/Metric persistence verification.
  • Documented benchmark purpose, command, expected outputs, tolerance and limitations.
  • No product features, API contracts, migrations, live providers, AI models or new dependencies were introduced.

Sprint 13 real YOLO operational hardening (2026-06-15)

  • Added YoloPreflightService for local configured-YOLO readiness checks without loading models or running inference.
  • Added scripts/yolo_preflight.py for checking enabled state, optional dependency availability, local model path, tile manifest validity, tile limit and referenced tile paths.
  • Added backend tests for disabled, dependency-unavailable and ready preflight states plus CLI JSON output.
  • Documented preflight usage in backend and AI pipeline docs.
  • No model downloads, API contracts, migrations, new dependencies, segmentation behavior or provider fetching were introduced.

Sprint 14 Docker GIS runtime enablement (2026-06-16)

  • Added a backend gis optional dependency group for the approved raster/vector runtime stack.
  • Updated the backend Docker image to install the gis extra plus GDAL/GEOS/PROJ system packages.
  • Added scripts/verify_gis_runtime.sh to verify browser-facing PostGIS, Rasterio and GeoPandas capabilities through the frontend proxy.
  • Added scripts/gis_import_smoke.py and made the backend Docker build fail if Rasterio, GeoPandas or pyogrio cannot be imported.
  • Moved the Docker build-time GIS import smoke into the backend build context and kept the root script as a local wrapper.
  • Included the GIS runtime script syntax check in the main readiness gate.
  • Added backend and frontend Docker Compose healthchecks and made the frontend wait for a healthy backend.
  • Added regression tests for Docker GIS dependency installation and capability verification script coverage.
  • Documented Docker GIS runtime verification commands for local and LAN deployments.
  • No API contracts, migrations, AI dependencies, provider fetching or product features were changed.

Sprint 15 explicit demo workflow seed (2026-06-16)

  • Added POST /api/v1/demo/workflow to seed or return an explicit offline demo workflow.
  • The demo workflow creates a project, AOI, fixture reference building dataset, fixture candidate building dataset and persisted QA/QC metrics.
  • Added scripts/seed_demo_workflow.py for CLI-based demo seeding.
  • Added frontend "Load demo workflow" action in the Projects panel.
  • Added tests for the demo endpoint envelope and fixture contract.
  • No live GRB/OSM fetching, AI inference, migrations or new dependencies were introduced.

Sprint 16 QA/QC result visibility (2026-06-16)

  • Added GET /api/v1/projects/{project_id}/quality-checks to list persisted quality checks and metric rows.
  • Added a frontend QA/QC Results panel for project-level persisted QA output.
  • Demo workflow loading and QA actions now refresh visible QA/QC results.
  • Added backend tests for quality check listing and canonical response envelopes.
  • No migrations, new dependencies, live provider fetching or AI inference were introduced.

Sprint 17 export foundation (2026-06-16)

  • Hardened POST /api/v1/exports/geojson so exports persist Export rows instead of returning dataset ids as export ids.
  • Added GeoJSON export support for vector datasets, detection runs and segmentation runs using existing persisted geometry services.
  • Added project metadata JSON export, lightweight project report HTML export and export list/read/content/download endpoints.
  • Added a frontend Export Center panel for creating exports, listing export records, previewing JSON artifact content and downloading artifacts.
  • Added export history to project metadata/report artifacts.
  • Added scripts/verify_demo_export_workflow.sh to smoke test demo seeding, QA/QC visibility, metadata/report/vector exports, export listing and artifact downloads through the browser-facing URL.
  • Added backend tests for export persistence, artifact writing, raster rejection, HTML report creation, canonical export envelopes and raw file downloads.
  • No migrations, new dependencies, live provider fetching, AI inference, LiDAR, Copilot, Training Studio or separate Reports module were introduced.

Sprint 51 QA/QC and export workspace polish (2026-06-17)

  • Polished the QA/QC workspace with persisted-check summary tiles, clearer empty state, quality-check cards and metric chips.
  • Polished the Exports workspace with artifact action groups, latest-export card, export history cards and preview panel framing.
  • Preserved existing API clients, callbacks and export/QA behavior.
  • Added regression coverage for the QA/QC and Exports workspace structure.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 52 selected context inspector tabs (2026-06-17)

  • Replaced the fixed dataset-only right inspector with tabbed Context, Dataset, QA/Exports and AI Runs inspection.
  • Reused the existing dataset detail component for raster/vector operations so dataset behavior and callbacks remain unchanged.
  • Added context cards for selected project, AOI, map feature, latest QA/QC result, latest export and selected detection/segmentation run state.
  • Added regression coverage for inspector wiring and tab structure.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 53 map/dataset selection ergonomics (2026-06-17)

  • Added active selected-state styling to dataset cards.
  • Added dataset quick actions for opening the selected dataset in the Map workspace or Exports workspace.
  • Added inspector navigation actions for Data, Map, QA/QC, Exports and AI Labs workspaces.
  • Preserved existing dataset detail loading, map layer state, export actions and API client behavior.
  • Added regression coverage for dataset quick actions and inspector navigation wiring.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 54 populated-state UI polish (2026-06-17)

  • Ran the live demo/export workflow against Tower and audited populated Data and Exports states.
  • Changed the Data workspace to keep Project and AOI side by side while giving the Dataset catalog a full-width row.
  • Compacted the Exports history to show the latest 10 artifacts by default with an explicit show-all toggle.
  • Kept a visible Export Preview panel even before preview content is selected.
  • Shortened displayed export paths while preserving the full path in the element title.
  • Added regression coverage for populated-state Data layout, export limiting and export preview empty state.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 55 live visual shell polish (2026-06-17)

  • Audited the live workbench visually in Browser on http://192.168.10.150:1202.
  • Compacted the top context bar and primary navigation so the workbench has more usable canvas space.
  • Moved the inspector below the workspace on standard desktop widths instead of forcing a cramped three-column layout.
  • Preserved the side inspector behavior for wider screens.
  • Improved Map workspace control wrapping so the map/status controls do not clip at 1280px.
  • Reset page scroll on workspace changes so workspaces open from their heading instead of inheriting stale scroll positions.
  • Added regression coverage for the standard-desktop layout and workspace scroll reset.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 56 export history controls (2026-06-17)

  • Added frontend-only export history search across export type, status, id and storage path.
  • Added export type and status filters based on the currently loaded export records.
  • Made the existing latest-10 export limiter operate on filtered results instead of the whole export list.
  • Added a no-match empty state and reset view action for filtered export history.
  • Slightly compacted export action buttons so filters are visible earlier on standard desktop viewports.
  • Added regression coverage for filtering controls, filtered list limiting and the no-match state.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 57 safer demo export cleanup (2026-06-17)

  • Hardened the existing dry-run-first demo export cleanup command with a --max-delete safety cap.
  • Added repeated --export-type filters so operators can clean only selected artifact kinds.
  • Cleanup apply runs now report a blocked_reason instead of deleting when selected candidates exceed the cap.
  • Dry-run output now includes candidate_exports with export ids so duplicate storage paths remain auditable.
  • Updated root and backend cleanup entrypoints, docs and regression coverage.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 58 demo cleanup dry-run smoke (2026-06-18)

  • Added scripts/verify_demo_cleanup_dry_run.sh to verify the demo export cleanup path against a running backend without passing --apply.
  • The smoke supports compose, all-in-one container and local modes, and asserts dry_run=true, deleted_export_count=0, empty deleted files and candidate dry-run fields.
  • Added the smoke syntax check to the main readiness gate and regression coverage for the non-mutating script contract.
  • Updated maintenance documentation in scripts/README.md, docs/STORAGE_ARCHITECTURE.md and backend/README.md.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 59 workbench screenshot artifacts (2026-06-18)

  • Added scripts/capture_workbench_screenshots.sh for optional visual regression handoff screenshots.
  • The capture script seeds the explicit offline demo workflow, opens each main workspace and writes viewport PNG screenshots plus a manifest.json under ignored local artifacts.
  • Desktop screenshots are always captured; mobile screenshots are captured by default and can be disabled with CAPTURE_MOBILE=0.
  • Added readiness syntax coverage and regression checks for the non-mutating screenshot capture contract.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 60 API error-envelope contract hardening (2026-06-18)

  • Aligned backend error responses with the documented ApiError contract: top-level error, message, details and request_id.
  • Preserved frontend compatibility with both the canonical top-level error payload and the older nested error-object shape.
  • Added regression coverage for AppError, HTTPException and validation-error envelopes.
  • Added static frontend parser coverage so API client error parsing does not drift silently.
  • No migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 64 export/report handoff polish (2026-06-18)

  • Added a handoff readiness summary to the Export Center for selected dataset, detection run, segmentation run and latest artifact context.
  • Grouped existing export actions into scan-friendly artifact cards for project report, metadata, vector GeoJSON, detection GeoJSON and segmentation GeoJSON.
  • Added clearer export history provenance with formatted export-type badges, analysis-run ids and created timestamps when available.
  • Added regression coverage for the Export Center handoff structure and responsive styling.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 65 project report readability polish (2026-06-18)

  • Reworked the lightweight HTML project report template into a self-contained handoff layout with hero, readiness pill, scorecards and sectioned tables.
  • Added print-friendly CSS and scroll-safe table wrappers while preserving the existing project_report_html export type and download behavior.
  • Added source/CRS columns to the dataset inventory section and clearer "Dataset inventory", "QA/QC evidence" and "Artifact history" report headings.
  • Added regression coverage for report layout markers, print CSS and HTML escaping.
  • No API contracts, migrations, product capabilities, PDF/report-designer functionality, live provider fetching or AI/model dependency changes were introduced.

Sprint 67 map empty-state quick actions (2026-06-19)

  • Added ready vector/GeoJSON dataset quick actions to the Map workspace empty state.
  • Reused the existing openDatasetInMap flow so selecting a quick action loads the persisted dataset layer without changing API contracts.
  • Added responsive styling and regression coverage for the Map quick-action grid.
  • Verified locally against the live demo state that the empty map state exposes two dataset actions and opens demo_predicted_buildings.geojson as a 2-feature map layer.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 103 AI Lab run readiness (2026-06-24)

  • Added compact run-readiness panels to Detection Lab and Segmentation Lab.
  • Detection readiness now shows raster dataset, model availability and the configured-YOLO tile manifest requirement before submitting a run.
  • Segmentation readiness now shows raster dataset, model availability and tile manifest provenance state before submitting a run.
  • Added regression coverage for the AI Lab readiness UI contract and styling.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.

Sprint 104 AI Lab action guardrails (2026-06-24)

  • Added explicit action guardrails below Detection and Segmentation run-readiness panels.
  • Detection now distinguishes configured model state from UI-runnable state and blocks the explicit test/demo-only fixture detector in the normal run form.
  • Segmentation now distinguishes configured model state from UI-runnable state and blocks the explicit test/demo-only fixture segmenter in the normal run form.
  • Added regression coverage for AI Lab action guardrails and compact guardrail styling.
  • No API contracts, migrations, product capabilities, live provider fetching or AI/model dependency changes were introduced.