714 lines
51 KiB
Markdown
714 lines
51 KiB
Markdown
# 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 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.
|