From cebeb5f3b4f836274c0504c2cc5fc2a019a8ea8b Mon Sep 17 00:00:00 2001
From: Jens
Date: Sat, 1 Aug 2026 19:00:48 +0200
Subject: [PATCH] audit: seal accuracy phase 1 evidence
---
.gitattributes | 5 +-
.../evidence/accuracy/P1/alembic-heads.txt | 10 +-
.../accuracy/P1/alembic-offline-upgrade.sql | 1000 ++--
.../accuracy/P1/backend-ci-entrypoint.txt | 56 +-
.../accuracy/P1/backend-full-suite.junit.xml | 464 +-
.../accuracy/P1/backend-full-suite.txt | 650 +--
.../accuracy/P1/evidence-manifest.json | 278 +
.../accuracy/P1/forensic-reproductions.json | 232 +-
.../evidence/accuracy/P1/frontend-build.txt | 62 +-
.../evidence/accuracy/P1/frontend-lint.txt | 24 +-
.../accuracy/P1/frontend-typecheck.txt | 16 +-
.../accuracy/P1/frontend-vitest-unit.txt | 70 +-
.../evidence/accuracy/P1/frontend-vitest.txt | 18 +-
.../P1/golden-qa-reproducibility.json | 22 +-
.../evidence/accuracy/P1/golden-qa-run-1.json | 354 +-
.../evidence/accuracy/P1/golden-qa-run-2.json | 354 +-
.../accuracy/P1/local-artifact-inventory.json | 3548 ++++++-------
.../accuracy/P1/openapi-contract-audit.txt | 10 +-
.../accuracy/P1/phase1-baseline-summary.json | 72 +-
.../accuracy/P1/phase1-tooling-tests.txt | 12 +-
.../accuracy/P1/repository-inventory.json | 1302 ++---
.../accuracy/P1/repository-ruff-baseline.json | 4452 ++++++++---------
.../accuracy/P1/repository-ruff-baseline.txt | 2176 ++++----
.../accuracy/P1/static-risk-signals.json | 1326 ++---
.../P1/tower-gpu-inference-smoke.json | 430 +-
.../P1/tower-key-artifact-hashes.json | 50 +-
.../P1/tower-ml-data-lineage-snapshot.json | 3466 ++++++-------
...er-runtime-database-snapshot-detailed.json | 1006 ++--
.../P1/tower-runtime-database-snapshot.json | 794 +--
29 files changed, 11269 insertions(+), 10990 deletions(-)
create mode 100644 artifacts/evidence/accuracy/P1/evidence-manifest.json
diff --git a/.gitattributes b/.gitattributes
index de4ed8ea..daea62d1 100644
--- a/.gitattributes
+++ b/.gitattributes
@@ -12,5 +12,6 @@ Dockerfile text eol=lf
*.css text eol=lf
*.json text eol=lf
-# Retained audit exports preserve source bytes, including tool-emitted whitespace.
-artifacts/evidence/accuracy/** -whitespace
+# Retained audit exports preserve source bytes, including line endings and
+# tool-emitted whitespace.
+artifacts/evidence/accuracy/** -text -whitespace
diff --git a/artifacts/evidence/accuracy/P1/alembic-heads.txt b/artifacts/evidence/accuracy/P1/alembic-heads.txt
index b1415588..b0466ad6 100644
--- a/artifacts/evidence/accuracy/P1/alembic-heads.txt
+++ b/artifacts/evidence/accuracy/P1/alembic-heads.txt
@@ -1,5 +1,5 @@
-command=python -m alembic heads
-exit_code=0
-captured_at=2026-08-01T18:37:24.0020021+02:00
-
-202607260001 (head)
+command=python -m alembic heads
+exit_code=0
+captured_at=2026-08-01T18:37:24.0020021+02:00
+
+202607260001 (head)
diff --git a/artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql b/artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql
index 7910b774..3257c5af 100644
--- a/artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql
+++ b/artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql
@@ -1,500 +1,500 @@
--- command=python -m alembic upgrade head --sql
--- exit_code=0
--- captured_at=2026-08-01T18:37:24.0299035+02:00
-
-BEGIN;
-
-INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
-INFO [alembic.runtime.migration] Generating static SQL
-INFO [alembic.runtime.migration] Will assume transactional DDL.
-CREATE TABLE alembic_version (
- version_num VARCHAR(32) NOT NULL,
- CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
-);
-
-INFO [alembic.runtime.migration] Running upgrade -> 202601110001, Initial PostGIS schema for Sprint 1 foundation.
--- Running upgrade -> 202601110001
-
-CREATE EXTENSION IF NOT EXISTS postgis;
-
-CREATE EXTENSION IF NOT EXISTS postgis_topology;
-
-CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
-
-CREATE TABLE projects (
- id UUID NOT NULL,
- name TEXT NOT NULL,
- description TEXT,
- region TEXT DEFAULT 'Kempen' NOT NULL,
- status TEXT DEFAULT 'active' NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id)
-);
-
-CREATE TABLE areas (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- name TEXT NOT NULL,
- geometry geometry(MULTIPOLYGON,4326) NOT NULL,
- original_crs TEXT,
- area_m2 FLOAT,
- bbox geometry(POLYGON,4326),
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE
-);
-
-CREATE INDEX idx_areas_geometry ON areas USING gist (geometry);
-
-CREATE INDEX idx_areas_bbox ON areas USING gist (bbox);
-
-CREATE TABLE datasets (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- area_id UUID,
- name TEXT NOT NULL,
- dataset_type TEXT NOT NULL,
- source TEXT NOT NULL,
- storage_path TEXT,
- derived_from_dataset_id UUID,
- crs TEXT,
- bounds_json JSON,
- resolution_json JSON,
- bands_json JSON,
- metadata_json JSON,
- status TEXT DEFAULT 'created' NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL,
- FOREIGN KEY(derived_from_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL
-);
-
-CREATE TABLE dataset_versions (
- id UUID NOT NULL,
- dataset_id UUID NOT NULL,
- version INTEGER DEFAULT '1' NOT NULL,
- storage_path TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
-);
-
-CREATE TABLE analysis_runs (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- area_id UUID,
- analysis_type TEXT NOT NULL,
- status TEXT NOT NULL,
- parameters_json JSON NOT NULL,
- started_at TIMESTAMP WITH TIME ZONE,
- finished_at TIMESTAMP WITH TIME ZONE,
- error_message TEXT,
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL
-);
-
-CREATE TABLE exports (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- analysis_run_id UUID,
- export_type TEXT NOT NULL,
- storage_path TEXT NOT NULL,
- metadata_json JSON,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_areas_geometry ON areas USING gist (geometry);
-
-CREATE INDEX ix_areas_project_id ON areas (project_id);
-
-CREATE INDEX ix_datasets_project_id ON datasets (project_id);
-
-INSERT INTO alembic_version (version_num) VALUES ('202601110001') RETURNING alembic_version.version_num;
-
-INFO [alembic.runtime.migration] Running upgrade 202601110001 -> 202601120001, Add dataset storage metadata columns.
--- Running upgrade 202601110001 -> 202601120001
-
-ALTER TABLE datasets ADD COLUMN original_filename TEXT;
-
-ALTER TABLE datasets ADD COLUMN stored_filename TEXT;
-
-ALTER TABLE datasets ADD COLUMN content_type TEXT;
-
-ALTER TABLE datasets ADD COLUMN size_bytes INTEGER;
-
-ALTER TABLE datasets ADD COLUMN checksum_sha256 TEXT;
-
-ALTER TABLE datasets ALTER COLUMN status SET DEFAULT 'uploaded';
-
-UPDATE alembic_version SET version_num='202601120001' WHERE alembic_version.version_num = '202601110001';
-
-INFO [alembic.runtime.migration] Running upgrade 202601120001 -> 20260611212435, Add lightweight job table for sprint-3 async architecture foundation.
--- Running upgrade 202601120001 -> 20260611212435
-
-CREATE TABLE jobs (
- id UUID NOT NULL,
- job_type TEXT NOT NULL,
- status TEXT DEFAULT 'queued' NOT NULL,
- project_id UUID NOT NULL,
- dataset_id UUID,
- input_dataset_id UUID,
- output_dataset_id UUID,
- parameters_json JSON NOT NULL,
- result_json JSON,
- error_message TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- started_at TIMESTAMP WITH TIME ZONE,
- finished_at TIMESTAMP WITH TIME ZONE,
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
- FOREIGN KEY(input_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
- FOREIGN KEY(output_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_jobs_project_id ON jobs (project_id);
-
-CREATE INDEX ix_jobs_status ON jobs (status);
-
-UPDATE alembic_version SET version_num='20260611212435' WHERE alembic_version.version_num = '202601120001';
-
-INFO [alembic.runtime.migration] Running upgrade 20260611212435 -> 202606120001, Add dataset reference and provenance metadata columns.
--- Running upgrade 20260611212435 -> 202606120001
-
-ALTER TABLE datasets ADD COLUMN dataset_role TEXT DEFAULT 'source' NOT NULL;
-
-ALTER TABLE datasets ADD COLUMN source_name TEXT;
-
-ALTER TABLE datasets ADD COLUMN reference_layer_name TEXT;
-
-ALTER TABLE datasets ADD COLUMN source_metadata JSON;
-
-ALTER TABLE datasets ADD COLUMN provenance_metadata JSON;
-
-ALTER TABLE datasets ADD COLUMN imported_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL;
-
-UPDATE alembic_version SET version_num='202606120001' WHERE alembic_version.version_num = '20260611212435';
-
-INFO [alembic.runtime.migration] Running upgrade 202606120001 -> 202606120700, Add Sprint 7A vector feature and QA persistence foundation.
--- Running upgrade 202606120001 -> 202606120700
-
-CREATE TABLE vector_features (
- id UUID NOT NULL,
- dataset_id UUID NOT NULL,
- feature_class TEXT,
- source_feature_id TEXT,
- properties_json JSON,
- geometry geometry(GEOMETRY,4326) NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
-);
-
-CREATE INDEX ix_vector_features_dataset_id ON vector_features (dataset_id);
-
-CREATE INDEX ix_vector_features_geometry ON vector_features USING gist (geometry);
-
-CREATE TABLE quality_checks (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- job_id UUID,
- analysis_run_id UUID,
- candidate_dataset_id UUID,
- reference_dataset_id UUID NOT NULL,
- check_type TEXT NOT NULL,
- status TEXT NOT NULL,
- score FLOAT,
- parameters_json JSON,
- findings_json JSON,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- completed_at TIMESTAMP WITH TIME ZONE,
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL,
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
- FOREIGN KEY(candidate_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
- FOREIGN KEY(reference_dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
-);
-
-CREATE INDEX ix_quality_checks_project_id ON quality_checks (project_id);
-
-CREATE INDEX ix_quality_checks_reference_dataset_id ON quality_checks (reference_dataset_id);
-
-CREATE INDEX ix_quality_checks_candidate_dataset_id ON quality_checks (candidate_dataset_id);
-
-CREATE INDEX ix_quality_checks_analysis_run_id ON quality_checks (analysis_run_id);
-
-CREATE TABLE metrics (
- id UUID NOT NULL,
- quality_check_id UUID,
- analysis_run_id UUID,
- metric_key TEXT NOT NULL,
- metric_value FLOAT,
- metric_unit TEXT,
- label TEXT,
- metadata_json JSON,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
- PRIMARY KEY (id),
- FOREIGN KEY(quality_check_id) REFERENCES quality_checks (id) ON DELETE CASCADE,
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_metrics_quality_check_id ON metrics (quality_check_id);
-
-CREATE INDEX ix_metrics_analysis_run_id ON metrics (analysis_run_id);
-
-UPDATE alembic_version SET version_num='202606120700' WHERE alembic_version.version_num = '202606120001';
-
-INFO [alembic.runtime.migration] Running upgrade 202606120700 -> 202606120800, Add Sprint 8 detection foundation.
--- Running upgrade 202606120700 -> 202606120800
-
-ALTER TABLE analysis_runs ADD COLUMN dataset_id UUID;
-
-ALTER TABLE analysis_runs ADD FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL;
-
-ALTER TABLE analysis_runs ADD COLUMN job_id UUID;
-
-ALTER TABLE analysis_runs ADD FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL;
-
-ALTER TABLE analysis_runs ADD COLUMN model_name VARCHAR(255);
-
-ALTER TABLE analysis_runs ADD COLUMN model_version VARCHAR(120);
-
-ALTER TABLE analysis_runs ADD COLUMN result_json JSON;
-
-ALTER TABLE analysis_runs ADD COLUMN created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL;
-
-CREATE TABLE detections (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- dataset_id UUID,
- analysis_run_id UUID,
- job_id UUID,
- model_name VARCHAR(255) NOT NULL,
- model_version VARCHAR(120),
- class_name VARCHAR(120) NOT NULL,
- confidence FLOAT NOT NULL,
- geometry geometry(GEOMETRY,4326) NOT NULL,
- bbox_json JSON,
- source_tile_path VARCHAR(500),
- properties_json JSON,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
- FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_detections_project_id ON detections (project_id);
-
-CREATE INDEX ix_detections_dataset_id ON detections (dataset_id);
-
-CREATE INDEX ix_detections_analysis_run_id ON detections (analysis_run_id);
-
-CREATE INDEX ix_detections_class_name ON detections (class_name);
-
-CREATE INDEX ix_detections_geometry ON detections USING gist (geometry);
-
-UPDATE alembic_version SET version_num='202606120800' WHERE alembic_version.version_num = '202606120700';
-
-INFO [alembic.runtime.migration] Running upgrade 202606120800 -> 202606120900, Add Sprint 9 segmentation foundation.
--- Running upgrade 202606120800 -> 202606120900
-
-CREATE TABLE segmentations (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- dataset_id UUID,
- job_id UUID,
- analysis_run_id UUID,
- model_name VARCHAR(255) NOT NULL,
- model_version VARCHAR(120),
- class_name VARCHAR(120) NOT NULL,
- confidence FLOAT,
- geometry geometry(MULTIPOLYGON,4326) NOT NULL,
- bbox_json JSON,
- area_m2 FLOAT,
- mask_path TEXT,
- source_tile_path VARCHAR(500),
- tile_index INTEGER,
- properties_json JSON,
- provenance_json JSON,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
- PRIMARY KEY (id),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
- FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL,
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_segmentations_project_id ON segmentations (project_id);
-
-CREATE INDEX ix_segmentations_dataset_id ON segmentations (dataset_id);
-
-CREATE INDEX ix_segmentations_analysis_run_id ON segmentations (analysis_run_id);
-
-CREATE INDEX ix_segmentations_job_id ON segmentations (job_id);
-
-CREATE INDEX ix_segmentations_class_name ON segmentations (class_name);
-
-CREATE INDEX ix_segmentations_geometry ON segmentations USING gist (geometry);
-
-UPDATE alembic_version SET version_num='202606120900' WHERE alembic_version.version_num = '202606120800';
-
-INFO [alembic.runtime.migration] Running upgrade 202606120900 -> 202607140001, Add temporal dataset metadata and durable dataset-version provenance.
--- Running upgrade 202606120900 -> 202607140001
-
-ALTER TABLE datasets ADD COLUMN temporal_series_key VARCHAR(255);
-
-ALTER TABLE datasets ADD COLUMN observed_at TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE datasets ADD COLUMN valid_from TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE datasets ADD COLUMN valid_to TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE datasets ADD COLUMN temporal_granularity VARCHAR(32);
-
-ALTER TABLE datasets ADD COLUMN source_version VARCHAR(120);
-
-ALTER TABLE dataset_versions ADD COLUMN source_version VARCHAR(120);
-
-ALTER TABLE dataset_versions ADD COLUMN observed_at TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE dataset_versions ADD COLUMN valid_from TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE dataset_versions ADD COLUMN valid_to TIMESTAMP WITH TIME ZONE;
-
-ALTER TABLE dataset_versions ADD COLUMN checksum_sha256 VARCHAR(64);
-
-ALTER TABLE dataset_versions ADD COLUMN source_metadata JSON;
-
-ALTER TABLE dataset_versions ADD COLUMN provenance_metadata JSON;
-
-CREATE INDEX ix_datasets_project_temporal_series_observed ON datasets (project_id, temporal_series_key, observed_at);
-
-CREATE UNIQUE INDEX ix_dataset_versions_dataset_version ON dataset_versions (dataset_id, version);
-
-CREATE INDEX ix_vector_features_dataset_source_feature ON vector_features (dataset_id, source_feature_id);
-
-ALTER TABLE datasets ADD CONSTRAINT ck_datasets_temporal_valid_range CHECK (valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from);
-
-ALTER TABLE dataset_versions ADD CONSTRAINT ck_dataset_versions_temporal_valid_range CHECK (valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from);
-
-UPDATE alembic_version SET version_num='202607140001' WHERE alembic_version.version_num = '202606120900';
-
-INFO [alembic.runtime.migration] Running upgrade 202607140001 -> 202607150001, Add durable operator review decisions for detection QA evidence.
--- Running upgrade 202607140001 -> 202607150001
-
-CREATE TABLE detection_reviews (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- quality_check_id UUID NOT NULL,
- analysis_run_id UUID,
- evidence_role VARCHAR(32) NOT NULL,
- evidence_feature_id VARCHAR(255) NOT NULL,
- detection_id UUID,
- reference_feature_id UUID,
- decision VARCHAR(64) DEFAULT 'unreviewed' NOT NULL,
- notes TEXT,
- reviewed_by VARCHAR(120) DEFAULT 'operator' NOT NULL,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
- PRIMARY KEY (id),
- CONSTRAINT ck_detection_reviews_evidence_role CHECK (evidence_role IN ('false_positive', 'false_negative')),
- CONSTRAINT ck_detection_reviews_decision CHECK (decision IN ('confirmed_model_false_positive', 'confirmed_model_false_negative', 'reference_gap_or_change', 'qa_alignment_mismatch', 'imagery_obscured_or_uncertain', 'uncertain', 'unreviewed')),
- FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
- FOREIGN KEY(detection_id) REFERENCES detections (id) ON DELETE SET NULL,
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(quality_check_id) REFERENCES quality_checks (id) ON DELETE CASCADE,
- FOREIGN KEY(reference_feature_id) REFERENCES vector_features (id) ON DELETE SET NULL,
- CONSTRAINT uq_detection_reviews_evidence UNIQUE (quality_check_id, evidence_role, evidence_feature_id)
-);
-
-CREATE INDEX ix_detection_reviews_project_id ON detection_reviews (project_id);
-
-CREATE INDEX ix_detection_reviews_quality_check_id ON detection_reviews (quality_check_id);
-
-CREATE INDEX ix_detection_reviews_analysis_run_id ON detection_reviews (analysis_run_id);
-
-CREATE INDEX ix_detection_reviews_decision ON detection_reviews (decision);
-
-UPDATE alembic_version SET version_num='202607150001' WHERE alembic_version.version_num = '202607140001';
-
-INFO [alembic.runtime.migration] Running upgrade 202607150001 -> 202607160001, Index partitioned vector features by dataset and municipality.
--- Running upgrade 202607150001 -> 202607160001
-
-CREATE INDEX ix_vector_features_dataset_municipality ON vector_features (dataset_id, (properties_json ->> 'municipality'));
-
-UPDATE alembic_version SET version_num='202607160001' WHERE alembic_version.version_num = '202607150001';
-
-INFO [alembic.runtime.migration] Running upgrade 202607160001 -> 202607260001, Add resumable AOI parent and partition operations.
--- Running upgrade 202607160001 -> 202607260001
-
-CREATE TABLE aoi_operations (
- id UUID NOT NULL,
- project_id UUID NOT NULL,
- area_id UUID,
- parent_job_id UUID,
- operation_type VARCHAR(128) NOT NULL,
- status VARCHAR(32) NOT NULL,
- geometry geometry(MULTIPOLYGON,4326) NOT NULL,
- request_json JSON NOT NULL,
- plan_json JSON NOT NULL,
- result_json JSON,
- error_message TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- started_at TIMESTAMP WITH TIME ZONE,
- finished_at TIMESTAMP WITH TIME ZONE,
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- PRIMARY KEY (id),
- CONSTRAINT ck_aoi_operations_status CHECK (status IN ('queued', 'running', 'partial', 'success', 'failed', 'cancelled')),
- FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
- FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL,
- FOREIGN KEY(parent_job_id) REFERENCES jobs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_aoi_operations_project_status ON aoi_operations (project_id, status);
-
-CREATE INDEX ix_aoi_operations_geometry ON aoi_operations USING gist (geometry);
-
-CREATE TABLE aoi_operation_partitions (
- id UUID NOT NULL,
- operation_id UUID NOT NULL,
- child_job_id UUID,
- partition_key VARCHAR(255) NOT NULL,
- provider_key VARCHAR(120) NOT NULL,
- product_key VARCHAR(120) NOT NULL,
- ordinal INTEGER NOT NULL,
- status VARCHAR(32) NOT NULL,
- geometry geometry(MULTIPOLYGON,4326) NOT NULL,
- attempt_count INTEGER DEFAULT '0' NOT NULL,
- max_attempts INTEGER DEFAULT '3' NOT NULL,
- checkpoint_json JSON,
- result_json JSON,
- error_message TEXT,
- created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- started_at TIMESTAMP WITH TIME ZONE,
- finished_at TIMESTAMP WITH TIME ZONE,
- updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
- PRIMARY KEY (id),
- CONSTRAINT ck_aoi_operation_partitions_status CHECK (status IN ('queued', 'running', 'success', 'failed', 'skipped')),
- CONSTRAINT uq_aoi_operation_partition_key UNIQUE (operation_id, partition_key),
- FOREIGN KEY(operation_id) REFERENCES aoi_operations (id) ON DELETE CASCADE,
- FOREIGN KEY(child_job_id) REFERENCES jobs (id) ON DELETE SET NULL
-);
-
-CREATE INDEX ix_aoi_operation_partitions_operation_status ON aoi_operation_partitions (operation_id, status);
-
-CREATE INDEX ix_aoi_operation_partitions_geometry ON aoi_operation_partitions USING gist (geometry);
-
-UPDATE alembic_version SET version_num='202607260001' WHERE alembic_version.version_num = '202607160001';
-
-COMMIT;
-
+-- command=python -m alembic upgrade head --sql
+-- exit_code=0
+-- captured_at=2026-08-01T18:37:24.0299035+02:00
+
+BEGIN;
+
+INFO [alembic.runtime.migration] Context impl PostgresqlImpl.
+INFO [alembic.runtime.migration] Generating static SQL
+INFO [alembic.runtime.migration] Will assume transactional DDL.
+CREATE TABLE alembic_version (
+ version_num VARCHAR(32) NOT NULL,
+ CONSTRAINT alembic_version_pkc PRIMARY KEY (version_num)
+);
+
+INFO [alembic.runtime.migration] Running upgrade -> 202601110001, Initial PostGIS schema for Sprint 1 foundation.
+-- Running upgrade -> 202601110001
+
+CREATE EXTENSION IF NOT EXISTS postgis;
+
+CREATE EXTENSION IF NOT EXISTS postgis_topology;
+
+CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
+
+CREATE TABLE projects (
+ id UUID NOT NULL,
+ name TEXT NOT NULL,
+ description TEXT,
+ region TEXT DEFAULT 'Kempen' NOT NULL,
+ status TEXT DEFAULT 'active' NOT NULL,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id)
+);
+
+CREATE TABLE areas (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ name TEXT NOT NULL,
+ geometry geometry(MULTIPOLYGON,4326) NOT NULL,
+ original_crs TEXT,
+ area_m2 FLOAT,
+ bbox geometry(POLYGON,4326),
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE
+);
+
+CREATE INDEX idx_areas_geometry ON areas USING gist (geometry);
+
+CREATE INDEX idx_areas_bbox ON areas USING gist (bbox);
+
+CREATE TABLE datasets (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ area_id UUID,
+ name TEXT NOT NULL,
+ dataset_type TEXT NOT NULL,
+ source TEXT NOT NULL,
+ storage_path TEXT,
+ derived_from_dataset_id UUID,
+ crs TEXT,
+ bounds_json JSON,
+ resolution_json JSON,
+ bands_json JSON,
+ metadata_json JSON,
+ status TEXT DEFAULT 'created' NOT NULL,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL,
+ FOREIGN KEY(derived_from_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL
+);
+
+CREATE TABLE dataset_versions (
+ id UUID NOT NULL,
+ dataset_id UUID NOT NULL,
+ version INTEGER DEFAULT '1' NOT NULL,
+ storage_path TEXT,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
+);
+
+CREATE TABLE analysis_runs (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ area_id UUID,
+ analysis_type TEXT NOT NULL,
+ status TEXT NOT NULL,
+ parameters_json JSON NOT NULL,
+ started_at TIMESTAMP WITH TIME ZONE,
+ finished_at TIMESTAMP WITH TIME ZONE,
+ error_message TEXT,
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL
+);
+
+CREATE TABLE exports (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ analysis_run_id UUID,
+ export_type TEXT NOT NULL,
+ storage_path TEXT NOT NULL,
+ metadata_json JSON,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_areas_geometry ON areas USING gist (geometry);
+
+CREATE INDEX ix_areas_project_id ON areas (project_id);
+
+CREATE INDEX ix_datasets_project_id ON datasets (project_id);
+
+INSERT INTO alembic_version (version_num) VALUES ('202601110001') RETURNING alembic_version.version_num;
+
+INFO [alembic.runtime.migration] Running upgrade 202601110001 -> 202601120001, Add dataset storage metadata columns.
+-- Running upgrade 202601110001 -> 202601120001
+
+ALTER TABLE datasets ADD COLUMN original_filename TEXT;
+
+ALTER TABLE datasets ADD COLUMN stored_filename TEXT;
+
+ALTER TABLE datasets ADD COLUMN content_type TEXT;
+
+ALTER TABLE datasets ADD COLUMN size_bytes INTEGER;
+
+ALTER TABLE datasets ADD COLUMN checksum_sha256 TEXT;
+
+ALTER TABLE datasets ALTER COLUMN status SET DEFAULT 'uploaded';
+
+UPDATE alembic_version SET version_num='202601120001' WHERE alembic_version.version_num = '202601110001';
+
+INFO [alembic.runtime.migration] Running upgrade 202601120001 -> 20260611212435, Add lightweight job table for sprint-3 async architecture foundation.
+-- Running upgrade 202601120001 -> 20260611212435
+
+CREATE TABLE jobs (
+ id UUID NOT NULL,
+ job_type TEXT NOT NULL,
+ status TEXT DEFAULT 'queued' NOT NULL,
+ project_id UUID NOT NULL,
+ dataset_id UUID,
+ input_dataset_id UUID,
+ output_dataset_id UUID,
+ parameters_json JSON NOT NULL,
+ result_json JSON,
+ error_message TEXT,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ started_at TIMESTAMP WITH TIME ZONE,
+ finished_at TIMESTAMP WITH TIME ZONE,
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
+ FOREIGN KEY(input_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
+ FOREIGN KEY(output_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_jobs_project_id ON jobs (project_id);
+
+CREATE INDEX ix_jobs_status ON jobs (status);
+
+UPDATE alembic_version SET version_num='20260611212435' WHERE alembic_version.version_num = '202601120001';
+
+INFO [alembic.runtime.migration] Running upgrade 20260611212435 -> 202606120001, Add dataset reference and provenance metadata columns.
+-- Running upgrade 20260611212435 -> 202606120001
+
+ALTER TABLE datasets ADD COLUMN dataset_role TEXT DEFAULT 'source' NOT NULL;
+
+ALTER TABLE datasets ADD COLUMN source_name TEXT;
+
+ALTER TABLE datasets ADD COLUMN reference_layer_name TEXT;
+
+ALTER TABLE datasets ADD COLUMN source_metadata JSON;
+
+ALTER TABLE datasets ADD COLUMN provenance_metadata JSON;
+
+ALTER TABLE datasets ADD COLUMN imported_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL;
+
+UPDATE alembic_version SET version_num='202606120001' WHERE alembic_version.version_num = '20260611212435';
+
+INFO [alembic.runtime.migration] Running upgrade 202606120001 -> 202606120700, Add Sprint 7A vector feature and QA persistence foundation.
+-- Running upgrade 202606120001 -> 202606120700
+
+CREATE TABLE vector_features (
+ id UUID NOT NULL,
+ dataset_id UUID NOT NULL,
+ feature_class TEXT,
+ source_feature_id TEXT,
+ properties_json JSON,
+ geometry geometry(GEOMETRY,4326) NOT NULL,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
+);
+
+CREATE INDEX ix_vector_features_dataset_id ON vector_features (dataset_id);
+
+CREATE INDEX ix_vector_features_geometry ON vector_features USING gist (geometry);
+
+CREATE TABLE quality_checks (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ job_id UUID,
+ analysis_run_id UUID,
+ candidate_dataset_id UUID,
+ reference_dataset_id UUID NOT NULL,
+ check_type TEXT NOT NULL,
+ status TEXT NOT NULL,
+ score FLOAT,
+ parameters_json JSON,
+ findings_json JSON,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ completed_at TIMESTAMP WITH TIME ZONE,
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL,
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
+ FOREIGN KEY(candidate_dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
+ FOREIGN KEY(reference_dataset_id) REFERENCES datasets (id) ON DELETE CASCADE
+);
+
+CREATE INDEX ix_quality_checks_project_id ON quality_checks (project_id);
+
+CREATE INDEX ix_quality_checks_reference_dataset_id ON quality_checks (reference_dataset_id);
+
+CREATE INDEX ix_quality_checks_candidate_dataset_id ON quality_checks (candidate_dataset_id);
+
+CREATE INDEX ix_quality_checks_analysis_run_id ON quality_checks (analysis_run_id);
+
+CREATE TABLE metrics (
+ id UUID NOT NULL,
+ quality_check_id UUID,
+ analysis_run_id UUID,
+ metric_key TEXT NOT NULL,
+ metric_value FLOAT,
+ metric_unit TEXT,
+ label TEXT,
+ metadata_json JSON,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW(),
+ PRIMARY KEY (id),
+ FOREIGN KEY(quality_check_id) REFERENCES quality_checks (id) ON DELETE CASCADE,
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_metrics_quality_check_id ON metrics (quality_check_id);
+
+CREATE INDEX ix_metrics_analysis_run_id ON metrics (analysis_run_id);
+
+UPDATE alembic_version SET version_num='202606120700' WHERE alembic_version.version_num = '202606120001';
+
+INFO [alembic.runtime.migration] Running upgrade 202606120700 -> 202606120800, Add Sprint 8 detection foundation.
+-- Running upgrade 202606120700 -> 202606120800
+
+ALTER TABLE analysis_runs ADD COLUMN dataset_id UUID;
+
+ALTER TABLE analysis_runs ADD FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL;
+
+ALTER TABLE analysis_runs ADD COLUMN job_id UUID;
+
+ALTER TABLE analysis_runs ADD FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL;
+
+ALTER TABLE analysis_runs ADD COLUMN model_name VARCHAR(255);
+
+ALTER TABLE analysis_runs ADD COLUMN model_version VARCHAR(120);
+
+ALTER TABLE analysis_runs ADD COLUMN result_json JSON;
+
+ALTER TABLE analysis_runs ADD COLUMN created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL;
+
+CREATE TABLE detections (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ dataset_id UUID,
+ analysis_run_id UUID,
+ job_id UUID,
+ model_name VARCHAR(255) NOT NULL,
+ model_version VARCHAR(120),
+ class_name VARCHAR(120) NOT NULL,
+ confidence FLOAT NOT NULL,
+ geometry geometry(GEOMETRY,4326) NOT NULL,
+ bbox_json JSON,
+ source_tile_path VARCHAR(500),
+ properties_json JSON,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
+ FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_detections_project_id ON detections (project_id);
+
+CREATE INDEX ix_detections_dataset_id ON detections (dataset_id);
+
+CREATE INDEX ix_detections_analysis_run_id ON detections (analysis_run_id);
+
+CREATE INDEX ix_detections_class_name ON detections (class_name);
+
+CREATE INDEX ix_detections_geometry ON detections USING gist (geometry);
+
+UPDATE alembic_version SET version_num='202606120800' WHERE alembic_version.version_num = '202606120700';
+
+INFO [alembic.runtime.migration] Running upgrade 202606120800 -> 202606120900, Add Sprint 9 segmentation foundation.
+-- Running upgrade 202606120800 -> 202606120900
+
+CREATE TABLE segmentations (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ dataset_id UUID,
+ job_id UUID,
+ analysis_run_id UUID,
+ model_name VARCHAR(255) NOT NULL,
+ model_version VARCHAR(120),
+ class_name VARCHAR(120) NOT NULL,
+ confidence FLOAT,
+ geometry geometry(MULTIPOLYGON,4326) NOT NULL,
+ bbox_json JSON,
+ area_m2 FLOAT,
+ mask_path TEXT,
+ source_tile_path VARCHAR(500),
+ tile_index INTEGER,
+ properties_json JSON,
+ provenance_json JSON,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW() NOT NULL,
+ PRIMARY KEY (id),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(dataset_id) REFERENCES datasets (id) ON DELETE SET NULL,
+ FOREIGN KEY(job_id) REFERENCES jobs (id) ON DELETE SET NULL,
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_segmentations_project_id ON segmentations (project_id);
+
+CREATE INDEX ix_segmentations_dataset_id ON segmentations (dataset_id);
+
+CREATE INDEX ix_segmentations_analysis_run_id ON segmentations (analysis_run_id);
+
+CREATE INDEX ix_segmentations_job_id ON segmentations (job_id);
+
+CREATE INDEX ix_segmentations_class_name ON segmentations (class_name);
+
+CREATE INDEX ix_segmentations_geometry ON segmentations USING gist (geometry);
+
+UPDATE alembic_version SET version_num='202606120900' WHERE alembic_version.version_num = '202606120800';
+
+INFO [alembic.runtime.migration] Running upgrade 202606120900 -> 202607140001, Add temporal dataset metadata and durable dataset-version provenance.
+-- Running upgrade 202606120900 -> 202607140001
+
+ALTER TABLE datasets ADD COLUMN temporal_series_key VARCHAR(255);
+
+ALTER TABLE datasets ADD COLUMN observed_at TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE datasets ADD COLUMN valid_from TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE datasets ADD COLUMN valid_to TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE datasets ADD COLUMN temporal_granularity VARCHAR(32);
+
+ALTER TABLE datasets ADD COLUMN source_version VARCHAR(120);
+
+ALTER TABLE dataset_versions ADD COLUMN source_version VARCHAR(120);
+
+ALTER TABLE dataset_versions ADD COLUMN observed_at TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE dataset_versions ADD COLUMN valid_from TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE dataset_versions ADD COLUMN valid_to TIMESTAMP WITH TIME ZONE;
+
+ALTER TABLE dataset_versions ADD COLUMN checksum_sha256 VARCHAR(64);
+
+ALTER TABLE dataset_versions ADD COLUMN source_metadata JSON;
+
+ALTER TABLE dataset_versions ADD COLUMN provenance_metadata JSON;
+
+CREATE INDEX ix_datasets_project_temporal_series_observed ON datasets (project_id, temporal_series_key, observed_at);
+
+CREATE UNIQUE INDEX ix_dataset_versions_dataset_version ON dataset_versions (dataset_id, version);
+
+CREATE INDEX ix_vector_features_dataset_source_feature ON vector_features (dataset_id, source_feature_id);
+
+ALTER TABLE datasets ADD CONSTRAINT ck_datasets_temporal_valid_range CHECK (valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from);
+
+ALTER TABLE dataset_versions ADD CONSTRAINT ck_dataset_versions_temporal_valid_range CHECK (valid_to IS NULL OR valid_from IS NULL OR valid_to >= valid_from);
+
+UPDATE alembic_version SET version_num='202607140001' WHERE alembic_version.version_num = '202606120900';
+
+INFO [alembic.runtime.migration] Running upgrade 202607140001 -> 202607150001, Add durable operator review decisions for detection QA evidence.
+-- Running upgrade 202607140001 -> 202607150001
+
+CREATE TABLE detection_reviews (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ quality_check_id UUID NOT NULL,
+ analysis_run_id UUID,
+ evidence_role VARCHAR(32) NOT NULL,
+ evidence_feature_id VARCHAR(255) NOT NULL,
+ detection_id UUID,
+ reference_feature_id UUID,
+ decision VARCHAR(64) DEFAULT 'unreviewed' NOT NULL,
+ notes TEXT,
+ reviewed_by VARCHAR(120) DEFAULT 'operator' NOT NULL,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT now() NOT NULL,
+ PRIMARY KEY (id),
+ CONSTRAINT ck_detection_reviews_evidence_role CHECK (evidence_role IN ('false_positive', 'false_negative')),
+ CONSTRAINT ck_detection_reviews_decision CHECK (decision IN ('confirmed_model_false_positive', 'confirmed_model_false_negative', 'reference_gap_or_change', 'qa_alignment_mismatch', 'imagery_obscured_or_uncertain', 'uncertain', 'unreviewed')),
+ FOREIGN KEY(analysis_run_id) REFERENCES analysis_runs (id) ON DELETE SET NULL,
+ FOREIGN KEY(detection_id) REFERENCES detections (id) ON DELETE SET NULL,
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(quality_check_id) REFERENCES quality_checks (id) ON DELETE CASCADE,
+ FOREIGN KEY(reference_feature_id) REFERENCES vector_features (id) ON DELETE SET NULL,
+ CONSTRAINT uq_detection_reviews_evidence UNIQUE (quality_check_id, evidence_role, evidence_feature_id)
+);
+
+CREATE INDEX ix_detection_reviews_project_id ON detection_reviews (project_id);
+
+CREATE INDEX ix_detection_reviews_quality_check_id ON detection_reviews (quality_check_id);
+
+CREATE INDEX ix_detection_reviews_analysis_run_id ON detection_reviews (analysis_run_id);
+
+CREATE INDEX ix_detection_reviews_decision ON detection_reviews (decision);
+
+UPDATE alembic_version SET version_num='202607150001' WHERE alembic_version.version_num = '202607140001';
+
+INFO [alembic.runtime.migration] Running upgrade 202607150001 -> 202607160001, Index partitioned vector features by dataset and municipality.
+-- Running upgrade 202607150001 -> 202607160001
+
+CREATE INDEX ix_vector_features_dataset_municipality ON vector_features (dataset_id, (properties_json ->> 'municipality'));
+
+UPDATE alembic_version SET version_num='202607160001' WHERE alembic_version.version_num = '202607150001';
+
+INFO [alembic.runtime.migration] Running upgrade 202607160001 -> 202607260001, Add resumable AOI parent and partition operations.
+-- Running upgrade 202607160001 -> 202607260001
+
+CREATE TABLE aoi_operations (
+ id UUID NOT NULL,
+ project_id UUID NOT NULL,
+ area_id UUID,
+ parent_job_id UUID,
+ operation_type VARCHAR(128) NOT NULL,
+ status VARCHAR(32) NOT NULL,
+ geometry geometry(MULTIPOLYGON,4326) NOT NULL,
+ request_json JSON NOT NULL,
+ plan_json JSON NOT NULL,
+ result_json JSON,
+ error_message TEXT,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
+ started_at TIMESTAMP WITH TIME ZONE,
+ finished_at TIMESTAMP WITH TIME ZONE,
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
+ PRIMARY KEY (id),
+ CONSTRAINT ck_aoi_operations_status CHECK (status IN ('queued', 'running', 'partial', 'success', 'failed', 'cancelled')),
+ FOREIGN KEY(project_id) REFERENCES projects (id) ON DELETE CASCADE,
+ FOREIGN KEY(area_id) REFERENCES areas (id) ON DELETE SET NULL,
+ FOREIGN KEY(parent_job_id) REFERENCES jobs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_aoi_operations_project_status ON aoi_operations (project_id, status);
+
+CREATE INDEX ix_aoi_operations_geometry ON aoi_operations USING gist (geometry);
+
+CREATE TABLE aoi_operation_partitions (
+ id UUID NOT NULL,
+ operation_id UUID NOT NULL,
+ child_job_id UUID,
+ partition_key VARCHAR(255) NOT NULL,
+ provider_key VARCHAR(120) NOT NULL,
+ product_key VARCHAR(120) NOT NULL,
+ ordinal INTEGER NOT NULL,
+ status VARCHAR(32) NOT NULL,
+ geometry geometry(MULTIPOLYGON,4326) NOT NULL,
+ attempt_count INTEGER DEFAULT '0' NOT NULL,
+ max_attempts INTEGER DEFAULT '3' NOT NULL,
+ checkpoint_json JSON,
+ result_json JSON,
+ error_message TEXT,
+ created_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
+ started_at TIMESTAMP WITH TIME ZONE,
+ finished_at TIMESTAMP WITH TIME ZONE,
+ updated_at TIMESTAMP WITH TIME ZONE DEFAULT now(),
+ PRIMARY KEY (id),
+ CONSTRAINT ck_aoi_operation_partitions_status CHECK (status IN ('queued', 'running', 'success', 'failed', 'skipped')),
+ CONSTRAINT uq_aoi_operation_partition_key UNIQUE (operation_id, partition_key),
+ FOREIGN KEY(operation_id) REFERENCES aoi_operations (id) ON DELETE CASCADE,
+ FOREIGN KEY(child_job_id) REFERENCES jobs (id) ON DELETE SET NULL
+);
+
+CREATE INDEX ix_aoi_operation_partitions_operation_status ON aoi_operation_partitions (operation_id, status);
+
+CREATE INDEX ix_aoi_operation_partitions_geometry ON aoi_operation_partitions USING gist (geometry);
+
+UPDATE alembic_version SET version_num='202607260001' WHERE alembic_version.version_num = '202607160001';
+
+COMMIT;
+
diff --git a/artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt b/artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt
index 2ef90354..015f7700 100644
--- a/artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt
+++ b/artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt
@@ -1,28 +1,28 @@
-workdir=backend
-command=python -m pytest -W error::DeprecationWarning
-exit_code=2
-captured_at=2026-08-01T18:33:34.1591431+02:00
-
-============================= test session starts =============================
-platform win32 -- Python 3.13.2, pytest-8.4.0, pluggy-1.6.0
-rootdir: C:\Projects\geointel\backend
-configfile: pyproject.toml
-plugins: asyncio-1.0.0, cov-6.3.0, anyio-4.12.1
-asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
-collected 1194 items / 1 error
-
-=================================== ERRORS ====================================
-__________ ERROR collecting tests/test_operator_polygon_label_qa.py ___________
-ImportError while importing test module 'C:\Projects\geointel\backend\tests\test_operator_polygon_label_qa.py'.
-Hint: make sure your test modules/packages have valid Python names.
-Traceback:
-C:\Program Files\Python313\Lib\importlib\__init__.py:88: in import_module
- return _bootstrap._gcd_import(name[level:], package, level)
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-tests\test_operator_polygon_label_qa.py:1: in
- from scripts.render_operator_polygon_label_qa import geometry_rings
-E ModuleNotFoundError: No module named 'scripts.render_operator_polygon_label_qa'
-=========================== short test summary info ===========================
-ERROR tests/test_operator_polygon_label_qa.py
-!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
-============================== 1 error in 5.69s ===============================
+workdir=backend
+command=python -m pytest -W error::DeprecationWarning
+exit_code=2
+captured_at=2026-08-01T18:33:34.1591431+02:00
+
+============================= test session starts =============================
+platform win32 -- Python 3.13.2, pytest-8.4.0, pluggy-1.6.0
+rootdir: C:\Projects\geointel\backend
+configfile: pyproject.toml
+plugins: asyncio-1.0.0, cov-6.3.0, anyio-4.12.1
+asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
+collected 1194 items / 1 error
+
+=================================== ERRORS ====================================
+__________ ERROR collecting tests/test_operator_polygon_label_qa.py ___________
+ImportError while importing test module 'C:\Projects\geointel\backend\tests\test_operator_polygon_label_qa.py'.
+Hint: make sure your test modules/packages have valid Python names.
+Traceback:
+C:\Program Files\Python313\Lib\importlib\__init__.py:88: in import_module
+ return _bootstrap._gcd_import(name[level:], package, level)
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+tests\test_operator_polygon_label_qa.py:1: in
+ from scripts.render_operator_polygon_label_qa import geometry_rings
+E ModuleNotFoundError: No module named 'scripts.render_operator_polygon_label_qa'
+=========================== short test summary info ===========================
+ERROR tests/test_operator_polygon_label_qa.py
+!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
+============================== 1 error in 5.69s ===============================
diff --git a/artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml b/artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
index bffff966..47321013 100644
--- a/artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
+++ b/artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
@@ -1,233 +1,233 @@
-def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None:
- root = Path(__file__).parents[2]
- focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8")
- workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8")
- coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8")
- map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
-
- assert "Belgium and North Sea Workbench" in focus
- assert "nationalProject" in workspace_hook
- assert "return nationalProject.id" in workspace_hook
- assert "NATIONAL_WORKSPACE_REGION" in workspace_hook
- assert "externalApi.resolveCoverage" in coverage_hook
- assert "coverage.outside_supported_scope" in map_workspace
- assert "coverageStatusLabel" in map_workspace
-> assert "coverageSelectionAvailable" in map_workspace
-E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_rc4_national_coverage.py:432: AssertionErrordef test_runtime_configuration_is_validated_before_container_replacement() -> None:
- run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
-
- validation_index = run_script.index("validate_runtime_config")
-> replacement_index = run_script.index("docker compose down")
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-E ValueError: substring not found
-
-backend\tests\test_rc5_release_deployment.py:65: ValueErrordef test_rc9_loading_and_accessibility_states_are_explicit() -> None:
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- map_workspace = (
- ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
- ).read_text(encoding="utf-8")
- geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
- encoding="utf-8"
- )
-
- assert "workspaceDataLoading" in app
- assert 'role="status" aria-live="polite"' in app
- assert "Databronnen worden gecontroleerd" in map_workspace
-> assert "Beschikbaarheid controleren" in map_workspace
-E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_rc9_ux_release_contract.py:33: AssertionErrordef test_all_in_one_deploy_embeds_immutable_build_identity() -> None:
- dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
- release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8")
- deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
- deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
-
- assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile
- assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile
- assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile
- assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile
-> assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script
-E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n'
-
-backend\tests\test_rc_runtime_observability.py:47: AssertionErrordef test_frontend_exposes_map_bbox_selection_contracts() -> None:
- api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8")
- map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
- geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8")
- theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
-
- assert "selectVectorFeatures" in api_client
- assert "Area selection" in map_workspace
- assert "Teken rechthoek" in map_workspace
- assert "Objecten in gebied ophalen" in map_workspace
- assert "Gebiedsdownload bewaren" in map_workspace
- assert "bboxSelectionMode" in geomap
- assert "selection-bbox" in geomap
- assert "selection-result" in geomap
- assert "useMapSelectionExtract" in app
- assert "area_id: areaId" in extract_hook
- assert "area_id: areaId" in theme_hook
-> assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace
-E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionErrordef test_frontend_declares_national_scope_as_primary_operating_focus() -> None:
- focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(
- encoding="utf-8"
- )
- project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(
- encoding="utf-8"
- )
- map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
- encoding="utf-8"
- )
- navigation = (
- ROOT
- / "frontend"
- / "src"
- / "components"
- / "shell"
- / "WorkbenchNavigation.tsx"
- ).read_text(encoding="utf-8")
-
- assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus
- assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus
- assert "NATIONAL_MAP_CENTER" in focus
- assert "return nationalProject.id" in project_hook
- assert "hasMappedAnalysisContext(data)" in project_hook
- assert "dataset.dataset_type === 'raster'" in project_hook
- assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook
- assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook
- assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook
- assert "center: NATIONAL_MAP_CENTER" in map_source
- assert "zoom: NATIONAL_MAP_ZOOM" in map_source
- assert "GeoIntel" in navigation
-> assert "Atlas Workbench" in navigation
-E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n </div>\n ))}\n </nav>\n <ItWorxSignature />\n </aside>\n )\n}\n'
-
-backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionErrordef test_product_docs_record_national_scope_and_mol_regression_focus() -> None:
- readme = (ROOT / "README.md").read_text(encoding="utf-8")
- vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8")
-
-> assert "Belgium and the Belgian North Sea" in readme
-E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n<p align="center">\n <img src="frontend/public/geointel-icon.png" width="92" alt="GeoIntel logo">\n</p...\n\nActieve mijlpaal: **v1.0.0 — Belgium and Belgian North Sea**.\n\nGeoIntel is een project van Jens / ITWorx.tech.\n'
-
-backend\tests\test_sprint177_mol_primary_focus.py:62: AssertionErrordef test_map_first_explorer_is_the_default_product_flow() -> None:
- app = read("frontend/src/App.tsx")
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "useState<WorkspaceKey>('map')" in app
- assert "Gebied analyseren" in workspace
-> assert "<h3>Focus op de kaart <small>optioneel</small></h3>" in workspace
-E assert '<h3>Focus op de kaart <small>optioneel</small></h3>' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionErrordef test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- geomap = read("frontend/src/components/GeoMap.tsx")
- styles = read("frontend/src/styles/app.css")
-
- assert "onMapBboxPreview={handleMapBboxPreview}" in workspace
- assert "onMapBboxSelect={handleMapBboxSelect}" in workspace
- assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace
- assert "const areaIdForSelection" in workspace
- assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace
-> assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace
-E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionErrordef test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "analysisMode === 'current'" in workspace
-> assert "Boolean(dataset || onDemandProduct)" in workspace
-E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionErrordef test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None:
- app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8")
- workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
- hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
- api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8")
-
- assert "regionalScopeSelected" in workspace
- assert "rasterPartitionsForDataset" in workspace
- assert "imageOverlays={activeImageOverlays}" in workspace
-> assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace
-E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionErrordef test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None:
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
- focus = (
- ROOT / "frontend" / "src" / "config" / "primaryFocus.ts"
- ).read_text(encoding="utf-8")
- map_workspace = (
- ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
- ).read_text(encoding="utf-8")
- theme_hook = (
- ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts"
- ).read_text(encoding="utf-8")
- dataset_api = (
- ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts"
- ).read_text(encoding="utf-8")
-
- assert "isPartitionedBathymetry" in map_workspace
- assert "regionalPartitionedThemeActive" in map_workspace
-> assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace
-E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionErrordef test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts")
- selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
- api = read("frontend/src/services/api/datasets.ts")
-
- assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace
- assert "new Map<DataThemeId, OnDemandMapProduct>" in workspace
-> assert "'Automatisch'" in workspace
-E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionErrordef test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- app = read("frontend/src/App.tsx")
- selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
-
-> assert "for (const theme of [activeTheme])" in workspace
-E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionErrordef test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "regionalOnDemandThemeActive" in workspace
-> assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace
-E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionErrordef test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None:
- selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
- catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8")
- workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
- contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8")
-
- assert "datasetsApi.acquireGrb" in selection_hook
- assert "datasetsApi.listGrbProducts" in catalog_hook
- assert "officialMapProducts.grb" in workspace
- assert "result[product.key] = null" in workspace
- assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace
- assert "onSetContextLayerLabel" in workspace
-> assert "'Automatisch'" in workspace
-E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
-
-backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionErrordef test_app_entrypoint_has_clean_encoding_and_react_imports() -> None:
- app_path = ROOT / "frontend" / "src" / "App.tsx"
- app_bytes = app_path.read_bytes()
- app = app_path.read_text(encoding="utf-8")
-
- assert not app_bytes.startswith(b"\xef\xbb\xbf")
- assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app
- assert "FormEvent" not in app
-> assert app.count("useEffect(") == 1
-E assert 3 == 1
-E + where 3 = <built-in method count of str object at 0x000001FED98D8C30>('useEffect(')
-E + where <built-in method count of str object at 0x000001FED98D8C30> = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count
-
+def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None:
+ root = Path(__file__).parents[2]
+ focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8")
+ workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8")
+ coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8")
+ map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
+
+ assert "Belgium and North Sea Workbench" in focus
+ assert "nationalProject" in workspace_hook
+ assert "return nationalProject.id" in workspace_hook
+ assert "NATIONAL_WORKSPACE_REGION" in workspace_hook
+ assert "externalApi.resolveCoverage" in coverage_hook
+ assert "coverage.outside_supported_scope" in map_workspace
+ assert "coverageStatusLabel" in map_workspace
+> assert "coverageSelectionAvailable" in map_workspace
+E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_rc4_national_coverage.py:432: AssertionErrordef test_runtime_configuration_is_validated_before_container_replacement() -> None:
+ run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
+
+ validation_index = run_script.index("validate_runtime_config")
+> replacement_index = run_script.index("docker compose down")
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+E ValueError: substring not found
+
+backend\tests\test_rc5_release_deployment.py:65: ValueErrordef test_rc9_loading_and_accessibility_states_are_explicit() -> None:
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ map_workspace = (
+ ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
+ ).read_text(encoding="utf-8")
+ geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
+ encoding="utf-8"
+ )
+
+ assert "workspaceDataLoading" in app
+ assert 'role="status" aria-live="polite"' in app
+ assert "Databronnen worden gecontroleerd" in map_workspace
+> assert "Beschikbaarheid controleren" in map_workspace
+E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_rc9_ux_release_contract.py:33: AssertionErrordef test_all_in_one_deploy_embeds_immutable_build_identity() -> None:
+ dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
+ release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8")
+ deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
+ deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
+
+ assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile
+ assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile
+ assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile
+ assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile
+> assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script
+E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n'
+
+backend\tests\test_rc_runtime_observability.py:47: AssertionErrordef test_frontend_exposes_map_bbox_selection_contracts() -> None:
+ api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8")
+ map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
+ geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8")
+ theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+
+ assert "selectVectorFeatures" in api_client
+ assert "Area selection" in map_workspace
+ assert "Teken rechthoek" in map_workspace
+ assert "Objecten in gebied ophalen" in map_workspace
+ assert "Gebiedsdownload bewaren" in map_workspace
+ assert "bboxSelectionMode" in geomap
+ assert "selection-bbox" in geomap
+ assert "selection-result" in geomap
+ assert "useMapSelectionExtract" in app
+ assert "area_id: areaId" in extract_hook
+ assert "area_id: areaId" in theme_hook
+> assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace
+E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionErrordef test_frontend_declares_national_scope_as_primary_operating_focus() -> None:
+ focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(
+ encoding="utf-8"
+ )
+ project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(
+ encoding="utf-8"
+ )
+ map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
+ encoding="utf-8"
+ )
+ navigation = (
+ ROOT
+ / "frontend"
+ / "src"
+ / "components"
+ / "shell"
+ / "WorkbenchNavigation.tsx"
+ ).read_text(encoding="utf-8")
+
+ assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus
+ assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus
+ assert "NATIONAL_MAP_CENTER" in focus
+ assert "return nationalProject.id" in project_hook
+ assert "hasMappedAnalysisContext(data)" in project_hook
+ assert "dataset.dataset_type === 'raster'" in project_hook
+ assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook
+ assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook
+ assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook
+ assert "center: NATIONAL_MAP_CENTER" in map_source
+ assert "zoom: NATIONAL_MAP_ZOOM" in map_source
+ assert "GeoIntel" in navigation
+> assert "Atlas Workbench" in navigation
+E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n </div>\n ))}\n </nav>\n <ItWorxSignature />\n </aside>\n )\n}\n'
+
+backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionErrordef test_product_docs_record_national_scope_and_mol_regression_focus() -> None:
+ readme = (ROOT / "README.md").read_text(encoding="utf-8")
+ vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8")
+
+> assert "Belgium and the Belgian North Sea" in readme
+E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n<p align="center">\n <img src="frontend/public/geointel-icon.png" width="92" alt="GeoIntel logo">\n</p...\n\nActieve mijlpaal: **v1.0.0 — Belgium and Belgian North Sea**.\n\nGeoIntel is een project van Jens / ITWorx.tech.\n'
+
+backend\tests\test_sprint177_mol_primary_focus.py:62: AssertionErrordef test_map_first_explorer_is_the_default_product_flow() -> None:
+ app = read("frontend/src/App.tsx")
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "useState<WorkspaceKey>('map')" in app
+ assert "Gebied analyseren" in workspace
+> assert "<h3>Focus op de kaart <small>optioneel</small></h3>" in workspace
+E assert '<h3>Focus op de kaart <small>optioneel</small></h3>' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionErrordef test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ geomap = read("frontend/src/components/GeoMap.tsx")
+ styles = read("frontend/src/styles/app.css")
+
+ assert "onMapBboxPreview={handleMapBboxPreview}" in workspace
+ assert "onMapBboxSelect={handleMapBboxSelect}" in workspace
+ assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace
+ assert "const areaIdForSelection" in workspace
+ assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace
+> assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace
+E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionErrordef test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "analysisMode === 'current'" in workspace
+> assert "Boolean(dataset || onDemandProduct)" in workspace
+E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionErrordef test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None:
+ app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8")
+ workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
+ hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+ api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8")
+
+ assert "regionalScopeSelected" in workspace
+ assert "rasterPartitionsForDataset" in workspace
+ assert "imageOverlays={activeImageOverlays}" in workspace
+> assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace
+E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionErrordef test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None:
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
+ focus = (
+ ROOT / "frontend" / "src" / "config" / "primaryFocus.ts"
+ ).read_text(encoding="utf-8")
+ map_workspace = (
+ ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
+ ).read_text(encoding="utf-8")
+ theme_hook = (
+ ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts"
+ ).read_text(encoding="utf-8")
+ dataset_api = (
+ ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts"
+ ).read_text(encoding="utf-8")
+
+ assert "isPartitionedBathymetry" in map_workspace
+ assert "regionalPartitionedThemeActive" in map_workspace
+> assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace
+E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionErrordef test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts")
+ selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
+ api = read("frontend/src/services/api/datasets.ts")
+
+ assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace
+ assert "new Map<DataThemeId, OnDemandMapProduct>" in workspace
+> assert "'Automatisch'" in workspace
+E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionErrordef test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ app = read("frontend/src/App.tsx")
+ selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
+
+> assert "for (const theme of [activeTheme])" in workspace
+E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionErrordef test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "regionalOnDemandThemeActive" in workspace
+> assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace
+E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionErrordef test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None:
+ selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+ catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8")
+ workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
+ contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8")
+
+ assert "datasetsApi.acquireGrb" in selection_hook
+ assert "datasetsApi.listGrbProducts" in catalog_hook
+ assert "officialMapProducts.grb" in workspace
+ assert "result[product.key] = null" in workspace
+ assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace
+ assert "onSetContextLayerLabel" in workspace
+> assert "'Automatisch'" in workspace
+E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
+
+backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionErrordef test_app_entrypoint_has_clean_encoding_and_react_imports() -> None:
+ app_path = ROOT / "frontend" / "src" / "App.tsx"
+ app_bytes = app_path.read_bytes()
+ app = app_path.read_text(encoding="utf-8")
+
+ assert not app_bytes.startswith(b"\xef\xbb\xbf")
+ assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app
+ assert "FormEvent" not in app
+> assert app.count("useEffect(") == 1
+E assert 3 == 1
+E + where 3 = <built-in method count of str object at 0x000001FED98D8C30>('useEffect(')
+E + where <built-in method count of str object at 0x000001FED98D8C30> = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count
+
backend\tests\test_sprint39_frontend_orchestration_hooks.py:40: AssertionError
\ No newline at end of file
diff --git a/artifacts/evidence/accuracy/P1/backend-full-suite.txt b/artifacts/evidence/accuracy/P1/backend-full-suite.txt
index 473e3008..a85b2336 100644
--- a/artifacts/evidence/accuracy/P1/backend-full-suite.txt
+++ b/artifacts/evidence/accuracy/P1/backend-full-suite.txt
@@ -1,325 +1,325 @@
-command=python -m pytest backend/tests -q -p no:cacheprovider -W error::DeprecationWarning --junitxml=artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
-exit_code=1
-captured_at=2026-08-01T18:32:02.4460806+02:00
-
-........................................................................ [ 6%]
-........................................................................ [ 12%]
-.........................................F..........F..................F [ 18%]
-..................F..................................................... [ 24%]
-.........F.............................................................. [ 30%]
-........................................................................ [ 36%]
-.....F.F.......................................FF....................... [ 42%]
-........................................................................ [ 48%]
-..F..................................................................... [ 54%]
-........................................................................ [ 60%]
-.......F................................................................ [ 66%]
-........................................................................ [ 72%]
-........................................FFFF...........F................ [ 78%]
-...............................................F........................ [ 84%]
-........................................................................ [ 90%]
-........................................................................ [ 96%]
-............................................. [100%]
-================================== FAILURES ===================================
-_ test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox _
-
- def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None:
- root = Path(__file__).parents[2]
- focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8")
- workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8")
- coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8")
- map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
-
- assert "Belgium and North Sea Workbench" in focus
- assert "nationalProject" in workspace_hook
- assert "return nationalProject.id" in workspace_hook
- assert "NATIONAL_WORKSPACE_REGION" in workspace_hook
- assert "externalApi.resolveCoverage" in coverage_hook
- assert "coverage.outside_supported_scope" in map_workspace
- assert "coverageStatusLabel" in map_workspace
-> assert "coverageSelectionAvailable" in map_workspace
-E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.
\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_rc4_national_coverage.py:432: AssertionError
-____ test_runtime_configuration_is_validated_before_container_replacement _____
-
- def test_runtime_configuration_is_validated_before_container_replacement() -> None:
- run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
-
- validation_index = run_script.index("validate_runtime_config")
-> replacement_index = run_script.index("docker compose down")
- ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
-E ValueError: substring not found
-
-backend\tests\test_rc5_release_deployment.py:65: ValueError
-___________ test_rc9_loading_and_accessibility_states_are_explicit ____________
-
- def test_rc9_loading_and_accessibility_states_are_explicit() -> None:
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- map_workspace = (
- ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
- ).read_text(encoding="utf-8")
- geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
- encoding="utf-8"
- )
-
- assert "workspaceDataLoading" in app
- assert 'role="status" aria-live="polite"' in app
- assert "Databronnen worden gecontroleerd" in map_workspace
-> assert "Beschikbaarheid controleren" in map_workspace
-E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_rc9_ux_release_contract.py:33: AssertionError
-___________ test_all_in_one_deploy_embeds_immutable_build_identity ____________
-
- def test_all_in_one_deploy_embeds_immutable_build_identity() -> None:
- dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
- release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8")
- deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
- deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
-
- assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile
- assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile
- assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile
- assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile
-> assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script
-E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n'
-
-backend\tests\test_rc_runtime_observability.py:47: AssertionError
-_____________ test_frontend_exposes_map_bbox_selection_contracts ______________
-
- def test_frontend_exposes_map_bbox_selection_contracts() -> None:
- api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8")
- map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
- geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8")
- theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
-
- assert "selectVectorFeatures" in api_client
- assert "Area selection" in map_workspace
- assert "Teken rechthoek" in map_workspace
- assert "Objecten in gebied ophalen" in map_workspace
- assert "Gebiedsdownload bewaren" in map_workspace
- assert "bboxSelectionMode" in geomap
- assert "selection-bbox" in geomap
- assert "selection-result" in geomap
- assert "useMapSelectionExtract" in app
- assert "area_id: areaId" in extract_hook
- assert "area_id: areaId" in theme_hook
-> assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace
-E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionError
-______ test_frontend_declares_national_scope_as_primary_operating_focus _______
-
- def test_frontend_declares_national_scope_as_primary_operating_focus() -> None:
- focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(
- encoding="utf-8"
- )
- project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(
- encoding="utf-8"
- )
- map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
- encoding="utf-8"
- )
- navigation = (
- ROOT
- / "frontend"
- / "src"
- / "components"
- / "shell"
- / "WorkbenchNavigation.tsx"
- ).read_text(encoding="utf-8")
-
- assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus
- assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus
- assert "NATIONAL_MAP_CENTER" in focus
- assert "return nationalProject.id" in project_hook
- assert "hasMappedAnalysisContext(data)" in project_hook
- assert "dataset.dataset_type === 'raster'" in project_hook
- assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook
- assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook
- assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook
- assert "center: NATIONAL_MAP_CENTER" in map_source
- assert "zoom: NATIONAL_MAP_ZOOM" in map_source
- assert "GeoIntel" in navigation
-> assert "Atlas Workbench" in navigation
-E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n \n ))}\n \n \n \n )\n}\n'
-
-backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionError
-______ test_product_docs_record_national_scope_and_mol_regression_focus _______
-
- def test_product_docs_record_national_scope_and_mol_regression_focus() -> None:
- readme = (ROOT / "README.md").read_text(encoding="utf-8")
- vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8")
-
-> assert "Belgium and the Belgian North Sea" in readme
-E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n\n
\n None:
- app = read("frontend/src/App.tsx")
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "useState('map')" in app
- assert "Gebied analyseren" in workspace
-> assert "Focus op de kaart optioneel
" in workspace
-E assert 'Focus op de kaart optioneel
' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.
\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionError
-___________ test_map_rectangle_drag_is_wired_to_automatic_analysis ____________
-
- def test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- geomap = read("frontend/src/components/GeoMap.tsx")
- styles = read("frontend/src/styles/app.css")
-
- assert "onMapBboxPreview={handleMapBboxPreview}" in workspace
- assert "onMapBboxSelect={handleMapBboxSelect}" in workspace
- assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace
- assert "const areaIdForSelection" in workspace
- assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace
-> assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace
-E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionError
-__ test_evolution_theme_catalog_distinguishes_history_from_current_only_data __
-
- def test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "analysisMode === 'current'" in workspace
-> assert "Boolean(dataset || onDemandProduct)" in workspace
-E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionError
-_____ test_regional_map_uses_logical_partition_groups_and_exact_analysis ______
-
- def test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None:
- app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8")
- workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
- hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
- api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8")
-
- assert "regionalScopeSelected" in workspace
- assert "rasterPartitionsForDataset" in workspace
- assert "imageOverlays={activeImageOverlays}" in workspace
-> assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace
-E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionError
-___ test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope ____
-
- def test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None:
- app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
- index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
- focus = (
- ROOT / "frontend" / "src" / "config" / "primaryFocus.ts"
- ).read_text(encoding="utf-8")
- map_workspace = (
- ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
- ).read_text(encoding="utf-8")
- theme_hook = (
- ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts"
- ).read_text(encoding="utf-8")
- dataset_api = (
- ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts"
- ).read_text(encoding="utf-8")
-
- assert "isPartitionedBathymetry" in map_workspace
- assert "regionalPartitionedThemeActive" in map_workspace
-> assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace
-E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionError
-____ test_flanders_workspace_exposes_governed_thematic_products_on_demand _____
-
- def test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts")
- selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
- api = read("frontend/src/services/api/datasets.ts")
-
- assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace
- assert "new Map" in workspace
-> assert "'Automatisch'" in workspace
-E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionError
-________ test_selection_reads_and_bounded_acquires_all_relevant_themes ________
-
- def test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
- app = read("frontend/src/App.tsx")
- selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
-
-> assert "for (const theme of [activeTheme])" in workspace
-E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionError
-______ test_regional_on_demand_sources_require_a_bounded_drawn_selection ______
-
- def test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None:
- workspace = read("frontend/src/components/map/MapWorkspace.tsx")
-
- assert "regionalOnDemandThemeActive" in workspace
-> assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace
-E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionError
-_____ test_grb_frontend_and_contracts_use_only_the_governed_backend_path ______
-
- def test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None:
- selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
- catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8")
- workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
- contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8")
-
- assert "datasetsApi.acquireGrb" in selection_hook
- assert "datasetsApi.listGrbProducts" in catalog_hook
- assert "officialMapProducts.grb" in workspace
- assert "result[product.key] = null" in workspace
- assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace
- assert "onSetContextLayerLabel" in workspace
-> assert "'Automatisch'" in workspace
-E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
-
-backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionError
-__________ test_app_entrypoint_has_clean_encoding_and_react_imports ___________
-
- def test_app_entrypoint_has_clean_encoding_and_react_imports() -> None:
- app_path = ROOT / "frontend" / "src" / "App.tsx"
- app_bytes = app_path.read_bytes()
- app = app_path.read_text(encoding="utf-8")
-
- assert not app_bytes.startswith(b"\xef\xbb\xbf")
- assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app
- assert "FormEvent" not in app
-> assert app.count("useEffect(") == 1
-E assert 3 == 1
-E + where 3 = ('useEffect(')
-E + where = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count
-
-backend\tests\test_sprint39_frontend_orchestration_hooks.py:40: AssertionError
-- generated xml file: C:\Projects\geointel\artifacts\evidence\accuracy\P1\backend-full-suite.junit.xml -
-=========================== short test summary info ===========================
-FAILED backend\tests\test_rc4_national_coverage.py::test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox
-FAILED backend\tests\test_rc5_release_deployment.py::test_runtime_configuration_is_validated_before_container_replacement
-FAILED backend\tests\test_rc9_ux_release_contract.py::test_rc9_loading_and_accessibility_states_are_explicit
-FAILED backend\tests\test_rc_runtime_observability.py::test_all_in_one_deploy_embeds_immutable_build_identity
-FAILED backend\tests\test_sprint106_map_bbox_extract.py::test_frontend_exposes_map_bbox_selection_contracts
-FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_frontend_declares_national_scope_as_primary_operating_focus
-FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_product_docs_record_national_scope_and_mol_regression_focus
-FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_first_explorer_is_the_default_product_flow
-FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_rectangle_drag_is_wired_to_automatic_analysis
-FAILED backend\tests\test_sprint200_temporal_explorer_handoff.py::test_evolution_theme_catalog_distinguishes_history_from_current_only_data
-FAILED backend\tests\test_sprint219_regional_raster_explorer.py::test_regional_map_uses_logical_partition_groups_and_exact_analysis
-FAILED backend\tests\test_sprint236_bathymetry_expansion.py::test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope
-FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_flanders_workspace_exposes_governed_thematic_products_on_demand
-FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_selection_reads_and_bounded_acquires_all_relevant_themes
-FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_regional_on_demand_sources_require_a_bounded_drawn_selection
-FAILED backend\tests\test_sprint239_bounded_grb_acquisition.py::test_grb_frontend_and_contracts_use_only_the_governed_backend_path
-FAILED backend\tests\test_sprint39_frontend_orchestration_hooks.py::test_app_entrypoint_has_clean_encoding_and_react_imports
-17 failed, 1180 passed in 70.63s (0:01:10)
+command=python -m pytest backend/tests -q -p no:cacheprovider -W error::DeprecationWarning --junitxml=artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
+exit_code=1
+captured_at=2026-08-01T18:32:02.4460806+02:00
+
+........................................................................ [ 6%]
+........................................................................ [ 12%]
+.........................................F..........F..................F [ 18%]
+..................F..................................................... [ 24%]
+.........F.............................................................. [ 30%]
+........................................................................ [ 36%]
+.....F.F.......................................FF....................... [ 42%]
+........................................................................ [ 48%]
+..F..................................................................... [ 54%]
+........................................................................ [ 60%]
+.......F................................................................ [ 66%]
+........................................................................ [ 72%]
+........................................FFFF...........F................ [ 78%]
+...............................................F........................ [ 84%]
+........................................................................ [ 90%]
+........................................................................ [ 96%]
+............................................. [100%]
+================================== FAILURES ===================================
+_ test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox _
+
+ def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None:
+ root = Path(__file__).parents[2]
+ focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8")
+ workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8")
+ coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8")
+ map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
+
+ assert "Belgium and North Sea Workbench" in focus
+ assert "nationalProject" in workspace_hook
+ assert "return nationalProject.id" in workspace_hook
+ assert "NATIONAL_WORKSPACE_REGION" in workspace_hook
+ assert "externalApi.resolveCoverage" in coverage_hook
+ assert "coverage.outside_supported_scope" in map_workspace
+ assert "coverageStatusLabel" in map_workspace
+> assert "coverageSelectionAvailable" in map_workspace
+E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_rc4_national_coverage.py:432: AssertionError
+____ test_runtime_configuration_is_validated_before_container_replacement _____
+
+ def test_runtime_configuration_is_validated_before_container_replacement() -> None:
+ run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
+
+ validation_index = run_script.index("validate_runtime_config")
+> replacement_index = run_script.index("docker compose down")
+ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
+E ValueError: substring not found
+
+backend\tests\test_rc5_release_deployment.py:65: ValueError
+___________ test_rc9_loading_and_accessibility_states_are_explicit ____________
+
+ def test_rc9_loading_and_accessibility_states_are_explicit() -> None:
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ map_workspace = (
+ ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
+ ).read_text(encoding="utf-8")
+ geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
+ encoding="utf-8"
+ )
+
+ assert "workspaceDataLoading" in app
+ assert 'role="status" aria-live="polite"' in app
+ assert "Databronnen worden gecontroleerd" in map_workspace
+> assert "Beschikbaarheid controleren" in map_workspace
+E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_rc9_ux_release_contract.py:33: AssertionError
+___________ test_all_in_one_deploy_embeds_immutable_build_identity ____________
+
+ def test_all_in_one_deploy_embeds_immutable_build_identity() -> None:
+ dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
+ release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8")
+ deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
+ deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
+
+ assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile
+ assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile
+ assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile
+ assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile
+> assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script
+E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n'
+
+backend\tests\test_rc_runtime_observability.py:47: AssertionError
+_____________ test_frontend_exposes_map_bbox_selection_contracts ______________
+
+ def test_frontend_exposes_map_bbox_selection_contracts() -> None:
+ api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8")
+ map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
+ geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8")
+ theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+
+ assert "selectVectorFeatures" in api_client
+ assert "Area selection" in map_workspace
+ assert "Teken rechthoek" in map_workspace
+ assert "Objecten in gebied ophalen" in map_workspace
+ assert "Gebiedsdownload bewaren" in map_workspace
+ assert "bboxSelectionMode" in geomap
+ assert "selection-bbox" in geomap
+ assert "selection-result" in geomap
+ assert "useMapSelectionExtract" in app
+ assert "area_id: areaId" in extract_hook
+ assert "area_id: areaId" in theme_hook
+> assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace
+E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionError
+______ test_frontend_declares_national_scope_as_primary_operating_focus _______
+
+ def test_frontend_declares_national_scope_as_primary_operating_focus() -> None:
+ focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(
+ encoding="utf-8"
+ )
+ project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(
+ encoding="utf-8"
+ )
+ map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
+ encoding="utf-8"
+ )
+ navigation = (
+ ROOT
+ / "frontend"
+ / "src"
+ / "components"
+ / "shell"
+ / "WorkbenchNavigation.tsx"
+ ).read_text(encoding="utf-8")
+
+ assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus
+ assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus
+ assert "NATIONAL_MAP_CENTER" in focus
+ assert "return nationalProject.id" in project_hook
+ assert "hasMappedAnalysisContext(data)" in project_hook
+ assert "dataset.dataset_type === 'raster'" in project_hook
+ assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook
+ assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook
+ assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook
+ assert "center: NATIONAL_MAP_CENTER" in map_source
+ assert "zoom: NATIONAL_MAP_ZOOM" in map_source
+ assert "GeoIntel" in navigation
+> assert "Atlas Workbench" in navigation
+E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n \n ))}\n \n \n \n )\n}\n'
+
+backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionError
+______ test_product_docs_record_national_scope_and_mol_regression_focus _______
+
+ def test_product_docs_record_national_scope_and_mol_regression_focus() -> None:
+ readme = (ROOT / "README.md").read_text(encoding="utf-8")
+ vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8")
+
+> assert "Belgium and the Belgian North Sea" in readme
+E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n\n
\n None:
+ app = read("frontend/src/App.tsx")
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "useState('map')" in app
+ assert "Gebied analyseren" in workspace
+> assert "Focus op de kaart optioneel
" in workspace
+E assert 'Focus op de kaart optioneel
' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.
\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionError
+___________ test_map_rectangle_drag_is_wired_to_automatic_analysis ____________
+
+ def test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ geomap = read("frontend/src/components/GeoMap.tsx")
+ styles = read("frontend/src/styles/app.css")
+
+ assert "onMapBboxPreview={handleMapBboxPreview}" in workspace
+ assert "onMapBboxSelect={handleMapBboxSelect}" in workspace
+ assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace
+ assert "const areaIdForSelection" in workspace
+ assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace
+> assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace
+E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionError
+__ test_evolution_theme_catalog_distinguishes_history_from_current_only_data __
+
+ def test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "analysisMode === 'current'" in workspace
+> assert "Boolean(dataset || onDemandProduct)" in workspace
+E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionError
+_____ test_regional_map_uses_logical_partition_groups_and_exact_analysis ______
+
+ def test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None:
+ app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8")
+ workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
+ hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+ api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8")
+
+ assert "regionalScopeSelected" in workspace
+ assert "rasterPartitionsForDataset" in workspace
+ assert "imageOverlays={activeImageOverlays}" in workspace
+> assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace
+E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionError
+___ test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope ____
+
+ def test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None:
+ app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
+ index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
+ focus = (
+ ROOT / "frontend" / "src" / "config" / "primaryFocus.ts"
+ ).read_text(encoding="utf-8")
+ map_workspace = (
+ ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
+ ).read_text(encoding="utf-8")
+ theme_hook = (
+ ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts"
+ ).read_text(encoding="utf-8")
+ dataset_api = (
+ ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts"
+ ).read_text(encoding="utf-8")
+
+ assert "isPartitionedBathymetry" in map_workspace
+ assert "regionalPartitionedThemeActive" in map_workspace
+> assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace
+E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionError
+____ test_flanders_workspace_exposes_governed_thematic_products_on_demand _____
+
+ def test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts")
+ selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
+ api = read("frontend/src/services/api/datasets.ts")
+
+ assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace
+ assert "new Map" in workspace
+> assert "'Automatisch'" in workspace
+E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionError
+________ test_selection_reads_and_bounded_acquires_all_relevant_themes ________
+
+ def test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+ app = read("frontend/src/App.tsx")
+ selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
+
+> assert "for (const theme of [activeTheme])" in workspace
+E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionError
+______ test_regional_on_demand_sources_require_a_bounded_drawn_selection ______
+
+ def test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None:
+ workspace = read("frontend/src/components/map/MapWorkspace.tsx")
+
+ assert "regionalOnDemandThemeActive" in workspace
+> assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace
+E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionError
+_____ test_grb_frontend_and_contracts_use_only_the_governed_backend_path ______
+
+ def test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None:
+ selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
+ catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8")
+ workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
+ contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8")
+
+ assert "datasetsApi.acquireGrb" in selection_hook
+ assert "datasetsApi.listGrbProducts" in catalog_hook
+ assert "officialMapProducts.grb" in workspace
+ assert "result[product.key] = null" in workspace
+ assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace
+ assert "onSetContextLayerLabel" in workspace
+> assert "'Automatisch'" in workspace
+E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.\n )}\n \n \n \n \n \n )\n}\n"
+
+backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionError
+__________ test_app_entrypoint_has_clean_encoding_and_react_imports ___________
+
+ def test_app_entrypoint_has_clean_encoding_and_react_imports() -> None:
+ app_path = ROOT / "frontend" / "src" / "App.tsx"
+ app_bytes = app_path.read_bytes()
+ app = app_path.read_text(encoding="utf-8")
+
+ assert not app_bytes.startswith(b"\xef\xbb\xbf")
+ assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app
+ assert "FormEvent" not in app
+> assert app.count("useEffect(") == 1
+E assert 3 == 1
+E + where 3 = ('useEffect(')
+E + where = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count
+
+backend\tests\test_sprint39_frontend_orchestration_hooks.py:40: AssertionError
+- generated xml file: C:\Projects\geointel\artifacts\evidence\accuracy\P1\backend-full-suite.junit.xml -
+=========================== short test summary info ===========================
+FAILED backend\tests\test_rc4_national_coverage.py::test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox
+FAILED backend\tests\test_rc5_release_deployment.py::test_runtime_configuration_is_validated_before_container_replacement
+FAILED backend\tests\test_rc9_ux_release_contract.py::test_rc9_loading_and_accessibility_states_are_explicit
+FAILED backend\tests\test_rc_runtime_observability.py::test_all_in_one_deploy_embeds_immutable_build_identity
+FAILED backend\tests\test_sprint106_map_bbox_extract.py::test_frontend_exposes_map_bbox_selection_contracts
+FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_frontend_declares_national_scope_as_primary_operating_focus
+FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_product_docs_record_national_scope_and_mol_regression_focus
+FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_first_explorer_is_the_default_product_flow
+FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_rectangle_drag_is_wired_to_automatic_analysis
+FAILED backend\tests\test_sprint200_temporal_explorer_handoff.py::test_evolution_theme_catalog_distinguishes_history_from_current_only_data
+FAILED backend\tests\test_sprint219_regional_raster_explorer.py::test_regional_map_uses_logical_partition_groups_and_exact_analysis
+FAILED backend\tests\test_sprint236_bathymetry_expansion.py::test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope
+FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_flanders_workspace_exposes_governed_thematic_products_on_demand
+FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_selection_reads_and_bounded_acquires_all_relevant_themes
+FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_regional_on_demand_sources_require_a_bounded_drawn_selection
+FAILED backend\tests\test_sprint239_bounded_grb_acquisition.py::test_grb_frontend_and_contracts_use_only_the_governed_backend_path
+FAILED backend\tests\test_sprint39_frontend_orchestration_hooks.py::test_app_entrypoint_has_clean_encoding_and_react_imports
+17 failed, 1180 passed in 70.63s (0:01:10)
diff --git a/artifacts/evidence/accuracy/P1/evidence-manifest.json b/artifacts/evidence/accuracy/P1/evidence-manifest.json
new file mode 100644
index 00000000..c27f6e9e
--- /dev/null
+++ b/artifacts/evidence/accuracy/P1/evidence-manifest.json
@@ -0,0 +1,278 @@
+{
+ "audited_repository_head": "3d442ef43fac0fdf1b86f3149c9b4c512830a39d",
+ "claim_boundary": "This manifest proves retained-file identity and completeness. It does not establish model accuracy, human label acceptance, split independence or release readiness.",
+ "evidence_file_count": 28,
+ "evidence_files": [
+ {
+ "path": "artifacts/evidence/accuracy/P1/alembic-heads.txt",
+ "role": "execution_log",
+ "sha256": "da4521233c6718fc7a5865c53904e73685fbdce65a1449b19cd0dc2e40d037ed",
+ "size_bytes": 116
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql",
+ "role": "migration_evidence",
+ "sha256": "e8905b881890cf95885a7515e3d9dcf2a7a0a24c4edbc57e98a363edcb22dd0e",
+ "size_bytes": 20199
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt",
+ "role": "execution_log",
+ "sha256": "0ac774ec19b4ff0a15142aab5f1db68c2592a230401d794ae7d040320e3ac0c0",
+ "size_bytes": 1601
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml",
+ "role": "test_report",
+ "sha256": "a01d0b5b6974d7ed184f46e8e35ac3b06c9a5db565e45e140b5f799819396b08",
+ "size_bytes": 207086
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/backend-full-suite.txt",
+ "role": "execution_log",
+ "sha256": "8521ed48b17b382752418750b3ea374831958fb063e83ef87048212e0fd5ea69",
+ "size_bytes": 23972
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/commands-and-results.md",
+ "role": "execution_log",
+ "sha256": "451d4cfc2d6d67937411b23192d9418ef6721af678aed1b0d5cb82113d82efc5",
+ "size_bytes": 8427
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/forensic-reproductions.json",
+ "role": "defect_reproduction",
+ "sha256": "f6349199a15ae789092d3d65c17a39a9b32ea3ed557571c0c228c4be3cf7235e",
+ "size_bytes": 3533
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/frontend-build.txt",
+ "role": "execution_log",
+ "sha256": "c3b8e10ef177ac1c2dc045bd710df1caeb46f8922a721291be431b304abbc079",
+ "size_bytes": 2356
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/frontend-lint.txt",
+ "role": "lint_evidence",
+ "sha256": "1115b013515c753e2dfb73abdad9024aec7b4c2337d117c7e1181341fef15c7f",
+ "size_bytes": 418
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/frontend-typecheck.txt",
+ "role": "execution_log",
+ "sha256": "3891c85c77b5ff50a1eb6d27a2a65d40c2c05423768734efd9d980f3784d68fa",
+ "size_bytes": 163
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt",
+ "role": "test_evidence",
+ "sha256": "6341bfa51ca3f4fe5ec7d4af7239c3c5e1a29e6bfe8bdfae85e824a2a6482ad0",
+ "size_bytes": 2774
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/frontend-vitest.txt",
+ "role": "test_evidence",
+ "sha256": "8a84afa48cc59e473725ed105a3f88da24f001cdcb794d942ede2ab8f0d48e48",
+ "size_bytes": 333
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json",
+ "role": "test_evidence",
+ "sha256": "576e5667a989c34086db3a2bc57003115a8a61b14e9f49f5407ee380baf0829d",
+ "size_bytes": 505
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/golden-qa-run-1.json",
+ "role": "test_evidence",
+ "sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc",
+ "size_bytes": 5242
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/golden-qa-run-2.json",
+ "role": "test_evidence",
+ "sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49",
+ "size_bytes": 5242
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/local-artifact-inventory.json",
+ "role": "structured_inventory",
+ "sha256": "0e187dbf3e91ee8e35567d6c8cd6e1cadfa6275d5908b829253491f3804adf7d",
+ "size_bytes": 75535
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/openapi-contract-audit.txt",
+ "role": "execution_log",
+ "sha256": "5af3d8f00be3f57fc309bc198fa3995d1eae7270a5f210b3e94d1aeeb653119d",
+ "size_bytes": 212
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/phase1-baseline-summary.json",
+ "role": "structured_inventory",
+ "sha256": "7d5960df64bdd4fb9b9d9d7a93de5f9cfd770f4dcf21454899345afe3ab12342",
+ "size_bytes": 1143
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt",
+ "role": "test_evidence",
+ "sha256": "a9bf261e1a811ad3e8bfa8edc439a11f00b46bc157f9ab6fc970033a87f45748",
+ "size_bytes": 250
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/repository-inventory.json",
+ "role": "structured_inventory",
+ "sha256": "07fa9356f298f9fe360e2e362ce9f3d558a9a66544fed3a5567cd9a5666451c7",
+ "size_bytes": 27695
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/repository-ruff-baseline.json",
+ "role": "lint_evidence",
+ "sha256": "de6617f030e49550e714c49b6e14bf291bf85016fd58086e9ca38b33a52252e9",
+ "size_bytes": 59359
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt",
+ "role": "lint_evidence",
+ "sha256": "cd654cea65710167beff8307cb71533fb645f25247ef46e7adc421bd520c9191",
+ "size_bytes": 57870
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/static-risk-signals.json",
+ "role": "structured_inventory",
+ "sha256": "729f0a5d3eece61be8e26d44b5dfa29c6cbf21eb16b8694a2d4dc45c94720757",
+ "size_bytes": 22467
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json",
+ "role": "runtime_evidence",
+ "sha256": "692a9fa193d589123b042110d7e80755f0c6634854f3134c291fc6083adb7b77",
+ "size_bytes": 5675
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json",
+ "role": "structured_inventory",
+ "sha256": "4d88d350604b377682da4d928c37ffb00ea1a32d2690d9b2bd54117363930414",
+ "size_bytes": 949
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json",
+ "role": "lineage_evidence",
+ "sha256": "d80275e8198ce63366d2a2d44eb8fba1f27c29d85aaaaedb94991d8c56febfb6",
+ "size_bytes": 71659
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json",
+ "role": "runtime_evidence",
+ "sha256": "744389b6c384a9fb3a9e16e56f1477f3b752e11a5b98e1fad7df47b4703a9ca1",
+ "size_bytes": 14946
+ },
+ {
+ "path": "artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json",
+ "role": "runtime_evidence",
+ "sha256": "aa7681d4a19ca20b7b442c509b3f56cb97bf239b2b5cc6a1fb1ca140d5320e9e",
+ "size_bytes": 10127
+ }
+ ],
+ "evidence_root": "artifacts/evidence/accuracy/P1",
+ "evidence_total_bytes": 629854,
+ "generated_at": "2026-08-01T17:00:31.742672+00:00",
+ "program_file_count": 16,
+ "program_files": [
+ {
+ "path": "docs/accuracy-program/00-execution-contract.md",
+ "role": "phase1_program",
+ "sha256": "d6c71dbccbb1e1f3bda2835cf9f53c3a5a92c173e9136d5cfccf007ec2c28684",
+ "size_bytes": 8720
+ },
+ {
+ "path": "docs/accuracy-program/01-system-inventory.md",
+ "role": "phase1_program",
+ "sha256": "2b27c28ca06ab8e8a36f12cccc8df23d5e83894e39b8e33406e6a6c05092cf22",
+ "size_bytes": 15708
+ },
+ {
+ "path": "docs/accuracy-program/02-data-lineage.md",
+ "role": "phase1_program",
+ "sha256": "8af25f30d43863438678b3e867c9bf0a318cdac78e12c891254fb2570e2d9d1d",
+ "size_bytes": 20409
+ },
+ {
+ "path": "docs/accuracy-program/03-baseline-and-gaps.md",
+ "role": "phase1_program",
+ "sha256": "ad3c2aae2944443d0f5d09b5c415b6202109071a6f194bb8b09b7df30332e3b3",
+ "size_bytes": 21253
+ },
+ {
+ "path": "docs/accuracy-program/04-risk-register.md",
+ "role": "phase1_program",
+ "sha256": "f3c0d35b95fd180a391950c2a6c9339aa3e4ace0e8512affbd242d159ca1e574",
+ "size_bytes": 23851
+ },
+ {
+ "path": "docs/accuracy-program/05-metric-framework.md",
+ "role": "phase1_program",
+ "sha256": "18abfc21964b7d98848d8ae513afce242184980c9517c9184d40efd9165ea00d",
+ "size_bytes": 28053
+ },
+ {
+ "path": "docs/accuracy-program/06-implementation-roadmap.md",
+ "role": "phase1_program",
+ "sha256": "c76ffebee4a23796ff221e6d4c5b5138f99d55a8b1422e897058b12a78a29ad9",
+ "size_bytes": 23695
+ },
+ {
+ "path": "docs/accuracy-program/status.json",
+ "role": "phase1_program",
+ "sha256": "5841cde783c7d8d4a54b126ed4120c83a553c9dec9a31e6ce45703ce3ab731c4",
+ "size_bytes": 7953
+ },
+ {
+ "path": "scripts/build_accuracy_phase1_evidence_manifest.py",
+ "role": "phase1_program",
+ "sha256": "882a935b29f787fc11a9f7b528392c1727463be24adcb0cac47a09fdb69a8382",
+ "size_bytes": 5523
+ },
+ {
+ "path": "scripts/collect_accuracy_phase1_inference_smoke.py",
+ "role": "phase1_program",
+ "sha256": "6d81541b7aa83f3c03ba5320a8075892eee658905ee981ba727e59f3b1dc792a",
+ "size_bytes": 6756
+ },
+ {
+ "path": "scripts/collect_accuracy_phase1_ml_lineage.py",
+ "role": "phase1_program",
+ "sha256": "3b1d3e45d45f1d4ca1211d1b2c70d9d93e15abc3b3ecfbd2e8302f645d6db7e1",
+ "size_bytes": 14080
+ },
+ {
+ "path": "scripts/collect_accuracy_phase1_runtime.py",
+ "role": "phase1_program",
+ "sha256": "a907779306076dccdf7fcf45f554e4778f5fab0e59d6af55673322775a1f5b4f",
+ "size_bytes": 13387
+ },
+ {
+ "path": "scripts/reproduce_accuracy_phase1_findings.py",
+ "role": "phase1_program",
+ "sha256": "c0f34e6bcaf73dcdada6e5b529a2e8e2177b1e97ee039c586d6ae51bb743015f",
+ "size_bytes": 9447
+ },
+ {
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "role": "phase1_program",
+ "sha256": "fcbd280245ccc598cab7ec5ca6448fbb350f7fa59aecc20177fdb0069c416643",
+ "size_bytes": 14498
+ },
+ {
+ "path": "scripts/verify_accuracy_phase1_evidence.py",
+ "role": "phase1_program",
+ "sha256": "fc72c315d26b8b7542fe01666aef56a8538d09090f2c0c877c4dd8a33c93e556",
+ "size_bytes": 4925
+ },
+ {
+ "path": "tests/test_accuracy_phase1_baseline.py",
+ "role": "phase1_program",
+ "sha256": "868f433b7de61e9ab3cd7aa9ad5bb2d29e8286afdcd68274ed290909ec605c7f",
+ "size_bytes": 3009
+ }
+ ],
+ "schema_version": 1
+}
diff --git a/artifacts/evidence/accuracy/P1/forensic-reproductions.json b/artifacts/evidence/accuracy/P1/forensic-reproductions.json
index 560a57e5..865c88c0 100644
--- a/artifacts/evidence/accuracy/P1/forensic-reproductions.json
+++ b/artifacts/evidence/accuracy/P1/forensic-reproductions.json
@@ -1,116 +1,116 @@
-{
- "findings": [
- {
- "expected": "A small buildings partition remains partial; a roads bbox cannot complete buildings coverage.",
- "id": "P1-COV-001",
- "observed": {
- "fully_covered": true,
- "matched_dataset_ids": [
- "00000000-0000-4000-8000-000000000001"
- ]
- },
- "reproduced": true,
- "severity": "critical",
- "source": "backend/app/services/coverage_registry_service.py:481-505"
- },
- {
- "expected": "A 100 metre buffer is projected to a metric CRS and spans roughly hundreds of metres.",
- "id": "P1-CRS-001",
- "observed": {
- "bounds_epsg4326": [
- -95.0,
- -49.0,
- 105.0,
- 151.0
- ],
- "longitude_span_degrees": 200.0
- },
- "reproduced": true,
- "severity": "critical",
- "source": "backend/app/services/vector_operations_service.py:179-203"
- },
- {
- "expected": "Non-WGS84 input is transformed to EPSG:4326 or rejected before persistence.",
- "id": "P1-CRS-002",
- "observed": {
- "stored_coordinates": [
- 150000.0,
- 210000.0
- ],
- "stored_srid": 4326
- },
- "reproduced": true,
- "severity": "critical",
- "source": "backend/app/services/vector_feature_service.py:271-299"
- },
- {
- "expected": "Only server-attested source identities can produce authoritative operational coverage.",
- "id": "P1-AUTH-001",
- "observed": {
- "caller_controlled_source_name": "grb",
- "coverage_status": "operational",
- "reported_authority": "authoritative"
- },
- "reproduced": true,
- "severity": "critical",
- "source": "backend/app/api/routes/datasets.py:142-163; backend/app/services/coverage_registry_service.py:463-559"
- },
- {
- "expected": "Validation scope is bound to immutable geometry/source/checksum evidence.",
- "id": "P1-AI-001",
- "observed": {
- "accepted": true,
- "area_name": "Mol validation bypass",
- "geometry_bounds": [
- -75.0,
- 35.0,
- -74.9,
- 35.1
- ]
- },
- "reproduced": true,
- "severity": "critical",
- "source": "backend/app/services/detection_service.py:223-232"
- },
- {
- "expected": "Renaming an Area cannot change its legal coverage-zone identity.",
- "id": "P1-COV-002",
- "observed": {
- "canonical": {
- "outside": false,
- "zones": [
- "flanders"
- ]
- },
- "renamed_same_geometry": {
- "outside": true,
- "zones": []
- }
- },
- "reproduced": true,
- "severity": "high",
- "source": "backend/app/services/coverage_registry_service.py:56-65,425-447"
- },
- {
- "expected": "PATCH /areas/{area_id} either validates and applies geometry or rejects the field.",
- "id": "P1-API-001",
- "observed": {
- "geometry_silently_ignored": true,
- "parsed_payload": {
- "crs": null,
- "name": "Renamed"
- }
- },
- "reproduced": true,
- "severity": "high",
- "source": "backend/app/schemas/area.py:15-17; backend/app/services/area_service.py:154-171"
- }
- ],
- "purpose": "Read-only deterministic reproductions of Phase-1 contract violations.",
- "schema_version": 1,
- "summary": {
- "all_reproduced": true,
- "reproduced": 7,
- "total": 7
- }
-}
+{
+ "findings": [
+ {
+ "expected": "A small buildings partition remains partial; a roads bbox cannot complete buildings coverage.",
+ "id": "P1-COV-001",
+ "observed": {
+ "fully_covered": true,
+ "matched_dataset_ids": [
+ "00000000-0000-4000-8000-000000000001"
+ ]
+ },
+ "reproduced": true,
+ "severity": "critical",
+ "source": "backend/app/services/coverage_registry_service.py:481-505"
+ },
+ {
+ "expected": "A 100 metre buffer is projected to a metric CRS and spans roughly hundreds of metres.",
+ "id": "P1-CRS-001",
+ "observed": {
+ "bounds_epsg4326": [
+ -95.0,
+ -49.0,
+ 105.0,
+ 151.0
+ ],
+ "longitude_span_degrees": 200.0
+ },
+ "reproduced": true,
+ "severity": "critical",
+ "source": "backend/app/services/vector_operations_service.py:179-203"
+ },
+ {
+ "expected": "Non-WGS84 input is transformed to EPSG:4326 or rejected before persistence.",
+ "id": "P1-CRS-002",
+ "observed": {
+ "stored_coordinates": [
+ 150000.0,
+ 210000.0
+ ],
+ "stored_srid": 4326
+ },
+ "reproduced": true,
+ "severity": "critical",
+ "source": "backend/app/services/vector_feature_service.py:271-299"
+ },
+ {
+ "expected": "Only server-attested source identities can produce authoritative operational coverage.",
+ "id": "P1-AUTH-001",
+ "observed": {
+ "caller_controlled_source_name": "grb",
+ "coverage_status": "operational",
+ "reported_authority": "authoritative"
+ },
+ "reproduced": true,
+ "severity": "critical",
+ "source": "backend/app/api/routes/datasets.py:142-163; backend/app/services/coverage_registry_service.py:463-559"
+ },
+ {
+ "expected": "Validation scope is bound to immutable geometry/source/checksum evidence.",
+ "id": "P1-AI-001",
+ "observed": {
+ "accepted": true,
+ "area_name": "Mol validation bypass",
+ "geometry_bounds": [
+ -75.0,
+ 35.0,
+ -74.9,
+ 35.1
+ ]
+ },
+ "reproduced": true,
+ "severity": "critical",
+ "source": "backend/app/services/detection_service.py:223-232"
+ },
+ {
+ "expected": "Renaming an Area cannot change its legal coverage-zone identity.",
+ "id": "P1-COV-002",
+ "observed": {
+ "canonical": {
+ "outside": false,
+ "zones": [
+ "flanders"
+ ]
+ },
+ "renamed_same_geometry": {
+ "outside": true,
+ "zones": []
+ }
+ },
+ "reproduced": true,
+ "severity": "high",
+ "source": "backend/app/services/coverage_registry_service.py:56-65,425-447"
+ },
+ {
+ "expected": "PATCH /areas/{area_id} either validates and applies geometry or rejects the field.",
+ "id": "P1-API-001",
+ "observed": {
+ "geometry_silently_ignored": true,
+ "parsed_payload": {
+ "crs": null,
+ "name": "Renamed"
+ }
+ },
+ "reproduced": true,
+ "severity": "high",
+ "source": "backend/app/schemas/area.py:15-17; backend/app/services/area_service.py:154-171"
+ }
+ ],
+ "purpose": "Read-only deterministic reproductions of Phase-1 contract violations.",
+ "schema_version": 1,
+ "summary": {
+ "all_reproduced": true,
+ "reproduced": 7,
+ "total": 7
+ }
+}
diff --git a/artifacts/evidence/accuracy/P1/frontend-build.txt b/artifacts/evidence/accuracy/P1/frontend-build.txt
index 3dec540d..93f27f37 100644
--- a/artifacts/evidence/accuracy/P1/frontend-build.txt
+++ b/artifacts/evidence/accuracy/P1/frontend-build.txt
@@ -1,31 +1,31 @@
-command=npm run build
-exit_code=0
-captured_at=2026-08-01T18:34:50.3212385+02:00
-
-
-> geointel-frontend@1.0.0 build
-> tsc -b && vite build
-
-[36mvite v7.3.6 [32mbuilding client environment for production...[36m[39m
-transforming...
-[32m✓[39m 1896 modules transformed.
-rendering chunks...
-computing gzip size...
-[2mdist/[22m[32mindex.html [39m[1m[2m 0.98 kB[22m[1m[22m[2m │ gzip: 0.49 kB[22m
-[2mdist/[22m[32massets/manrope-latin-500-normal-BYYD-dBL.woff2 [39m[1m[2m 14.04 kB[22m[1m[22m
-[2mdist/[22m[32massets/manrope-latin-600-normal-4f0koTD-.woff2 [39m[1m[2m 14.17 kB[22m[1m[22m
-[2mdist/[22m[32massets/manrope-latin-700-normal-BZp_XxE4.woff2 [39m[1m[2m 14.21 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-600-normal-Fru-LXNs.woff2 [39m[1m[2m 14.59 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-400-normal-8Rpg0ruU.woff2 [39m[1m[2m 14.63 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-500-normal-NlrCPXnF.woff2 [39m[1m[2m 14.66 kB[22m[1m[22m
-[2mdist/[22m[32massets/manrope-latin-500-normal-DMZssgOp.woff [39m[1m[2m 18.24 kB[22m[1m[22m
-[2mdist/[22m[32massets/manrope-latin-600-normal-BqgrALkZ.woff [39m[1m[2m 18.38 kB[22m[1m[22m
-[2mdist/[22m[32massets/manrope-latin-700-normal-DGRFkw-m.woff [39m[1m[2m 18.41 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-400-normal-SBbinRkI.woff [39m[1m[2m 18.49 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-500-normal-vCxiVFAq.woff [39m[1m[2m 18.52 kB[22m[1m[22m
-[2mdist/[22m[32massets/public-sans-latin-600-normal-BR59oU-I.woff [39m[1m[2m 18.56 kB[22m[1m[22m
-[2mdist/[22m[35massets/index-BNS8Tp4f.css [39m[1m[2m426.59 kB[22m[1m[22m[2m │ gzip: 69.40 kB[22m
-[2mdist/[22m[36massets/vendor-CrqJdhs-.js [39m[1m[2m140.80 kB[22m[1m[22m[2m │ gzip: 45.27 kB[22m
-[2mdist/[22m[36massets/index-DR8RUeAl.js [39m[1m[2m457.16 kB[22m[1m[22m[2m │ gzip: 119.71 kB[22m
-[2mdist/[22m[36massets/maplibre-DEBTaTl_.js [39m[1m[2m802.71 kB[22m[1m[22m[2m │ gzip: 217.71 kB[22m
-[32m✓ built in 9.80s[39m
+command=npm run build
+exit_code=0
+captured_at=2026-08-01T18:34:50.3212385+02:00
+
+
+> geointel-frontend@1.0.0 build
+> tsc -b && vite build
+
+[36mvite v7.3.6 [32mbuilding client environment for production...[36m[39m
+transforming...
+[32m✓[39m 1896 modules transformed.
+rendering chunks...
+computing gzip size...
+[2mdist/[22m[32mindex.html [39m[1m[2m 0.98 kB[22m[1m[22m[2m │ gzip: 0.49 kB[22m
+[2mdist/[22m[32massets/manrope-latin-500-normal-BYYD-dBL.woff2 [39m[1m[2m 14.04 kB[22m[1m[22m
+[2mdist/[22m[32massets/manrope-latin-600-normal-4f0koTD-.woff2 [39m[1m[2m 14.17 kB[22m[1m[22m
+[2mdist/[22m[32massets/manrope-latin-700-normal-BZp_XxE4.woff2 [39m[1m[2m 14.21 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-600-normal-Fru-LXNs.woff2 [39m[1m[2m 14.59 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-400-normal-8Rpg0ruU.woff2 [39m[1m[2m 14.63 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-500-normal-NlrCPXnF.woff2 [39m[1m[2m 14.66 kB[22m[1m[22m
+[2mdist/[22m[32massets/manrope-latin-500-normal-DMZssgOp.woff [39m[1m[2m 18.24 kB[22m[1m[22m
+[2mdist/[22m[32massets/manrope-latin-600-normal-BqgrALkZ.woff [39m[1m[2m 18.38 kB[22m[1m[22m
+[2mdist/[22m[32massets/manrope-latin-700-normal-DGRFkw-m.woff [39m[1m[2m 18.41 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-400-normal-SBbinRkI.woff [39m[1m[2m 18.49 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-500-normal-vCxiVFAq.woff [39m[1m[2m 18.52 kB[22m[1m[22m
+[2mdist/[22m[32massets/public-sans-latin-600-normal-BR59oU-I.woff [39m[1m[2m 18.56 kB[22m[1m[22m
+[2mdist/[22m[35massets/index-BNS8Tp4f.css [39m[1m[2m426.59 kB[22m[1m[22m[2m │ gzip: 69.40 kB[22m
+[2mdist/[22m[36massets/vendor-CrqJdhs-.js [39m[1m[2m140.80 kB[22m[1m[22m[2m │ gzip: 45.27 kB[22m
+[2mdist/[22m[36massets/index-DR8RUeAl.js [39m[1m[2m457.16 kB[22m[1m[22m[2m │ gzip: 119.71 kB[22m
+[2mdist/[22m[36massets/maplibre-DEBTaTl_.js [39m[1m[2m802.71 kB[22m[1m[22m[2m │ gzip: 217.71 kB[22m
+[32m✓ built in 9.80s[39m
diff --git a/artifacts/evidence/accuracy/P1/frontend-lint.txt b/artifacts/evidence/accuracy/P1/frontend-lint.txt
index a56abc94..523ad0cc 100644
--- a/artifacts/evidence/accuracy/P1/frontend-lint.txt
+++ b/artifacts/evidence/accuracy/P1/frontend-lint.txt
@@ -1,12 +1,12 @@
-command=npm run lint
-exit_code=1
-captured_at=2026-08-01T18:36:26.6162306+02:00
-
-npm error Missing script: "lint"
-npm error
-npm error Did you mean this?
-npm error npm link # Symlink a package folder
-npm error
-npm error To see a list of scripts, run:
-npm error npm run
-npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_36_25_353Z-debug-0.log
+command=npm run lint
+exit_code=1
+captured_at=2026-08-01T18:36:26.6162306+02:00
+
+npm error Missing script: "lint"
+npm error
+npm error Did you mean this?
+npm error npm link # Symlink a package folder
+npm error
+npm error To see a list of scripts, run:
+npm error npm run
+npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_36_25_353Z-debug-0.log
diff --git a/artifacts/evidence/accuracy/P1/frontend-typecheck.txt b/artifacts/evidence/accuracy/P1/frontend-typecheck.txt
index a4cdea08..fa691209 100644
--- a/artifacts/evidence/accuracy/P1/frontend-typecheck.txt
+++ b/artifacts/evidence/accuracy/P1/frontend-typecheck.txt
@@ -1,8 +1,8 @@
-command=npm run typecheck
-exit_code=0
-captured_at=2026-08-01T18:34:27.3623155+02:00
-
-
-> geointel-frontend@1.0.0 typecheck
-> tsc -p tsconfig.json --noEmit
-
+command=npm run typecheck
+exit_code=0
+captured_at=2026-08-01T18:34:27.3623155+02:00
+
+
+> geointel-frontend@1.0.0 typecheck
+> tsc -p tsconfig.json --noEmit
+
diff --git a/artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt b/artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt
index e545e134..81768fe4 100644
--- a/artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt
+++ b/artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt
@@ -1,35 +1,35 @@
-command=npm run test:unit
-exit_code=0
-captured_at=2026-08-01T18:35:24.4298867+02:00
-
-
-> geointel-frontend@1.0.0 test:unit
-> vitest run
-
-
-[1m[46m RUN [49m[22m [36mv3.2.6 [39m[90mC:/Projects/geointel/frontend[39m
-
- [32m✓[39m src/lib/datasetCapabilities.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
- [32m✓[39m src/lib/performanceBudget.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 41[2mms[22m[39m
- [32m✓[39m src/components/map/mapWorkspaceUtils.test.ts [2m([22m[2m14 tests[22m[2m)[22m[32m 36[2mms[22m[39m
- [32m✓[39m src/hooks/useMapThemeSelectionInsights.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 43[2mms[22m[39m
- [32m✓[39m src/hooks/useCoverageResolver.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[32m 47[2mms[22m[39m
- [32m✓[39m src/hooks/useTemporalComparison.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 36[2mms[22m[39m
- [32m✓[39m src/components/WorkbenchStatusStrip.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 151[2mms[22m[39m
- [32m✓[39m src/hooks/useWorkbenchBootstrap.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 60[2mms[22m[39m
- [32m✓[39m src/components/map/LiveAnalysisJourney.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 59[2mms[22m[39m
- [32m✓[39m src/components/overview/ProjectAtlasIllustration.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 267[2mms[22m[39m
- [32m✓[39m src/components/models/ModelSelector.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 342[2mms[22m[39m
- [32m✓[39m src/components/detection/AiPipelineIllustration.test.tsx [2m([22m[2m1 test[22m[2m)[22m[32m 296[2mms[22m[39m
- [32m✓[39m src/components/auth/LandingProjectStory.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 332[2mms[22m[39m
- [32m✓[39m src/components/map/MunicipalitySearch.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 483[2mms[22m[39m
- [33m[2m✓[22m[39m MunicipalitySearch[2m > [22msearches the official municipality catalog and activates a result [33m 468[2mms[22m[39m
- [32m✓[39m src/components/auth/LandingPage.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[33m 825[2mms[22m[39m
- [33m[2m✓[22m[39m LandingPage[2m > [22mpresents the professionalised landing page and submits the operator login [33m 471[2mms[22m[39m
- [32m✓[39m src/lib/bathymetryRaster.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
-
-[2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
-[2m Tests [22m [1m[32m51 passed[39m[22m[90m (51)[39m
-[2m Start at [22m 18:35:16
-[2m Duration [22m 7.37s[2m (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s)[22m
-
+command=npm run test:unit
+exit_code=0
+captured_at=2026-08-01T18:35:24.4298867+02:00
+
+
+> geointel-frontend@1.0.0 test:unit
+> vitest run
+
+
+[1m[46m RUN [49m[22m [36mv3.2.6 [39m[90mC:/Projects/geointel/frontend[39m
+
+ [32m✓[39m src/lib/datasetCapabilities.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
+ [32m✓[39m src/lib/performanceBudget.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 41[2mms[22m[39m
+ [32m✓[39m src/components/map/mapWorkspaceUtils.test.ts [2m([22m[2m14 tests[22m[2m)[22m[32m 36[2mms[22m[39m
+ [32m✓[39m src/hooks/useMapThemeSelectionInsights.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 43[2mms[22m[39m
+ [32m✓[39m src/hooks/useCoverageResolver.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[32m 47[2mms[22m[39m
+ [32m✓[39m src/hooks/useTemporalComparison.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 36[2mms[22m[39m
+ [32m✓[39m src/components/WorkbenchStatusStrip.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 151[2mms[22m[39m
+ [32m✓[39m src/hooks/useWorkbenchBootstrap.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 60[2mms[22m[39m
+ [32m✓[39m src/components/map/LiveAnalysisJourney.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 59[2mms[22m[39m
+ [32m✓[39m src/components/overview/ProjectAtlasIllustration.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 267[2mms[22m[39m
+ [32m✓[39m src/components/models/ModelSelector.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 342[2mms[22m[39m
+ [32m✓[39m src/components/detection/AiPipelineIllustration.test.tsx [2m([22m[2m1 test[22m[2m)[22m[32m 296[2mms[22m[39m
+ [32m✓[39m src/components/auth/LandingProjectStory.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 332[2mms[22m[39m
+ [32m✓[39m src/components/map/MunicipalitySearch.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 483[2mms[22m[39m
+ [33m[2m✓[22m[39m MunicipalitySearch[2m > [22msearches the official municipality catalog and activates a result [33m 468[2mms[22m[39m
+ [32m✓[39m src/components/auth/LandingPage.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[33m 825[2mms[22m[39m
+ [33m[2m✓[22m[39m LandingPage[2m > [22mpresents the professionalised landing page and submits the operator login [33m 471[2mms[22m[39m
+ [32m✓[39m src/lib/bathymetryRaster.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
+
+[2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
+[2m Tests [22m [1m[32m51 passed[39m[22m[90m (51)[39m
+[2m Start at [22m 18:35:16
+[2m Duration [22m 7.37s[2m (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s)[22m
+
diff --git a/artifacts/evidence/accuracy/P1/frontend-vitest.txt b/artifacts/evidence/accuracy/P1/frontend-vitest.txt
index 5e442b7d..8c753fea 100644
--- a/artifacts/evidence/accuracy/P1/frontend-vitest.txt
+++ b/artifacts/evidence/accuracy/P1/frontend-vitest.txt
@@ -1,9 +1,9 @@
-command=npm test -- --run
-exit_code=1
-captured_at=2026-08-01T18:34:11.9904224+02:00
-
-npm error Missing script: "test"
-npm error
-npm error To see a list of scripts, run:
-npm error npm run
-npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_34_11_785Z-debug-0.log
+command=npm test -- --run
+exit_code=1
+captured_at=2026-08-01T18:34:11.9904224+02:00
+
+npm error Missing script: "test"
+npm error
+npm error To see a list of scripts, run:
+npm error npm run
+npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_34_11_785Z-debug-0.log
diff --git a/artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json b/artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json
index fb815acd..212e9f25 100644
--- a/artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json
+++ b/artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json
@@ -1,11 +1,11 @@
-{
- "schema_version": 1,
- "command": "python scripts/run_golden_qa_benchmark.py --json",
- "run_1_exit_code": 0,
- "run_2_exit_code": 0,
- "run_1_sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc",
- "run_2_sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49",
- "byte_identical": false,
- "semantic_results_equal": true,
- "interpretation": "Metric values are stable, but UUID4-backed run identity makes retained JSON byte-nondeterministic."
-}
+{
+ "schema_version": 1,
+ "command": "python scripts/run_golden_qa_benchmark.py --json",
+ "run_1_exit_code": 0,
+ "run_2_exit_code": 0,
+ "run_1_sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc",
+ "run_2_sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49",
+ "byte_identical": false,
+ "semantic_results_equal": true,
+ "interpretation": "Metric values are stable, but UUID4-backed run identity makes retained JSON byte-nondeterministic."
+}
diff --git a/artifacts/evidence/accuracy/P1/golden-qa-run-1.json b/artifacts/evidence/accuracy/P1/golden-qa-run-1.json
index 32df93ab..40780ba9 100644
--- a/artifacts/evidence/accuracy/P1/golden-qa-run-1.json
+++ b/artifacts/evidence/accuracy/P1/golden-qa-run-1.json
@@ -1,177 +1,177 @@
-{
- "benchmark_id": "golden-buildings-partial-match-v1",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings.geojson",
- "reference": "fixtures/golden/reference_buildings.geojson"
- },
- "metrics": {
- "f1": 0.5,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": 0.8339768339652592,
- "precision": 0.5,
- "recall": 0.5
- },
- "persistence": {
- "commit_count": 4,
- "metric_count": 24,
- "metric_keys": [
- "f1",
- "false_negative_count",
- "false_positive_count",
- "mean_iou",
- "precision",
- "recall"
- ],
- "quality_check_count": 4
- },
- "scenario_count": 4,
- "scenarios": [
- {
- "benchmark_id": "golden-buildings-partial-match-v1",
- "description": "Two reference building polygons and two candidate building polygons: one candidate matches ref-1, one candidate is a false positive, and ref-2 is a false negative.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings.geojson",
- "reference": "fixtures/golden/reference_buildings.geojson"
- },
- "metrics": {
- "f1": 0.5,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": 0.8339768339652592,
- "precision": 0.5,
- "recall": 0.5
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "5fe92da9-2d8d-46a4-9992-2de89e3cf511",
- "result_counts": {
- "candidate_feature_count": 2,
- "matches": 1,
- "reference_feature_count": 2
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-perfect-match-v1",
- "description": "One candidate building polygon exactly matches one reference polygon.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
- "reference": "fixtures/golden/reference_buildings_perfect.geojson"
- },
- "metrics": {
- "f1": 1.0,
- "false_negative_count": 0,
- "false_positive_count": 0,
- "mean_iou": 1.0,
- "precision": 1.0,
- "recall": 1.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "7b8c1444-31e6-4780-92cb-f2060f4a4048",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 1,
- "reference_feature_count": 1
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-no-overlap-v1",
- "description": "One candidate polygon and one reference polygon do not overlap.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
- "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
- },
- "metrics": {
- "f1": null,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": null,
- "precision": 0.0,
- "recall": 0.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "1ffb1817-b237-4ca8-aad7-ff3312ac7e03",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 0,
- "reference_feature_count": 1
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-multipolygon-match-v1",
- "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
- "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
- },
- "metrics": {
- "f1": 1.0,
- "false_negative_count": 0,
- "false_positive_count": 0,
- "mean_iou": 1.0,
- "precision": 1.0,
- "recall": 1.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "60e6a321-2aaf-467b-9281-f30dd4179333",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 1,
- "reference_feature_count": 1
- },
- "status": "passed"
- }
- ],
- "status": "passed",
- "version": 1
-}
+{
+ "benchmark_id": "golden-buildings-partial-match-v1",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings.geojson",
+ "reference": "fixtures/golden/reference_buildings.geojson"
+ },
+ "metrics": {
+ "f1": 0.5,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": 0.8339768339652592,
+ "precision": 0.5,
+ "recall": 0.5
+ },
+ "persistence": {
+ "commit_count": 4,
+ "metric_count": 24,
+ "metric_keys": [
+ "f1",
+ "false_negative_count",
+ "false_positive_count",
+ "mean_iou",
+ "precision",
+ "recall"
+ ],
+ "quality_check_count": 4
+ },
+ "scenario_count": 4,
+ "scenarios": [
+ {
+ "benchmark_id": "golden-buildings-partial-match-v1",
+ "description": "Two reference building polygons and two candidate building polygons: one candidate matches ref-1, one candidate is a false positive, and ref-2 is a false negative.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings.geojson",
+ "reference": "fixtures/golden/reference_buildings.geojson"
+ },
+ "metrics": {
+ "f1": 0.5,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": 0.8339768339652592,
+ "precision": 0.5,
+ "recall": 0.5
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "5fe92da9-2d8d-46a4-9992-2de89e3cf511",
+ "result_counts": {
+ "candidate_feature_count": 2,
+ "matches": 1,
+ "reference_feature_count": 2
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-perfect-match-v1",
+ "description": "One candidate building polygon exactly matches one reference polygon.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
+ "reference": "fixtures/golden/reference_buildings_perfect.geojson"
+ },
+ "metrics": {
+ "f1": 1.0,
+ "false_negative_count": 0,
+ "false_positive_count": 0,
+ "mean_iou": 1.0,
+ "precision": 1.0,
+ "recall": 1.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "7b8c1444-31e6-4780-92cb-f2060f4a4048",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 1,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-no-overlap-v1",
+ "description": "One candidate polygon and one reference polygon do not overlap.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
+ "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
+ },
+ "metrics": {
+ "f1": null,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": null,
+ "precision": 0.0,
+ "recall": 0.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "1ffb1817-b237-4ca8-aad7-ff3312ac7e03",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 0,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-multipolygon-match-v1",
+ "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
+ "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
+ },
+ "metrics": {
+ "f1": 1.0,
+ "false_negative_count": 0,
+ "false_positive_count": 0,
+ "mean_iou": 1.0,
+ "precision": 1.0,
+ "recall": 1.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "60e6a321-2aaf-467b-9281-f30dd4179333",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 1,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ }
+ ],
+ "status": "passed",
+ "version": 1
+}
diff --git a/artifacts/evidence/accuracy/P1/golden-qa-run-2.json b/artifacts/evidence/accuracy/P1/golden-qa-run-2.json
index ac4d319f..cd794e48 100644
--- a/artifacts/evidence/accuracy/P1/golden-qa-run-2.json
+++ b/artifacts/evidence/accuracy/P1/golden-qa-run-2.json
@@ -1,177 +1,177 @@
-{
- "benchmark_id": "golden-buildings-partial-match-v1",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings.geojson",
- "reference": "fixtures/golden/reference_buildings.geojson"
- },
- "metrics": {
- "f1": 0.5,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": 0.8339768339652592,
- "precision": 0.5,
- "recall": 0.5
- },
- "persistence": {
- "commit_count": 4,
- "metric_count": 24,
- "metric_keys": [
- "f1",
- "false_negative_count",
- "false_positive_count",
- "mean_iou",
- "precision",
- "recall"
- ],
- "quality_check_count": 4
- },
- "scenario_count": 4,
- "scenarios": [
- {
- "benchmark_id": "golden-buildings-partial-match-v1",
- "description": "Two reference building polygons and two candidate building polygons: one candidate matches ref-1, one candidate is a false positive, and ref-2 is a false negative.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings.geojson",
- "reference": "fixtures/golden/reference_buildings.geojson"
- },
- "metrics": {
- "f1": 0.5,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": 0.8339768339652592,
- "precision": 0.5,
- "recall": 0.5
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "8d030591-a701-46ee-ae59-7f529db053d3",
- "result_counts": {
- "candidate_feature_count": 2,
- "matches": 1,
- "reference_feature_count": 2
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-perfect-match-v1",
- "description": "One candidate building polygon exactly matches one reference polygon.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
- "reference": "fixtures/golden/reference_buildings_perfect.geojson"
- },
- "metrics": {
- "f1": 1.0,
- "false_negative_count": 0,
- "false_positive_count": 0,
- "mean_iou": 1.0,
- "precision": 1.0,
- "recall": 1.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "bc99f243-ee42-40bf-ad71-22da29e5278f",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 1,
- "reference_feature_count": 1
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-no-overlap-v1",
- "description": "One candidate polygon and one reference polygon do not overlap.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
- "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
- },
- "metrics": {
- "f1": null,
- "false_negative_count": 1,
- "false_positive_count": 1,
- "mean_iou": null,
- "precision": 0.0,
- "recall": 0.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "b12249f0-24e3-4bbf-837a-e4a962d1bca9",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 0,
- "reference_feature_count": 1
- },
- "status": "passed"
- },
- {
- "benchmark_id": "golden-buildings-multipolygon-match-v1",
- "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
- "fixtures": {
- "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
- "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
- },
- "metrics": {
- "f1": 1.0,
- "false_negative_count": 0,
- "false_positive_count": 0,
- "mean_iou": 1.0,
- "precision": 1.0,
- "recall": 1.0
- },
- "persistence": {
- "commit_count": 1,
- "metric_count": 6,
- "metric_keys": [
- "precision",
- "recall",
- "f1",
- "mean_iou",
- "false_positive_count",
- "false_negative_count"
- ],
- "quality_check_count": 1
- },
- "quality_check_id": "4dabce04-4c65-4dac-807d-9f9cbaa8c72f",
- "result_counts": {
- "candidate_feature_count": 1,
- "matches": 1,
- "reference_feature_count": 1
- },
- "status": "passed"
- }
- ],
- "status": "passed",
- "version": 1
-}
+{
+ "benchmark_id": "golden-buildings-partial-match-v1",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings.geojson",
+ "reference": "fixtures/golden/reference_buildings.geojson"
+ },
+ "metrics": {
+ "f1": 0.5,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": 0.8339768339652592,
+ "precision": 0.5,
+ "recall": 0.5
+ },
+ "persistence": {
+ "commit_count": 4,
+ "metric_count": 24,
+ "metric_keys": [
+ "f1",
+ "false_negative_count",
+ "false_positive_count",
+ "mean_iou",
+ "precision",
+ "recall"
+ ],
+ "quality_check_count": 4
+ },
+ "scenario_count": 4,
+ "scenarios": [
+ {
+ "benchmark_id": "golden-buildings-partial-match-v1",
+ "description": "Two reference building polygons and two candidate building polygons: one candidate matches ref-1, one candidate is a false positive, and ref-2 is a false negative.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings.geojson",
+ "reference": "fixtures/golden/reference_buildings.geojson"
+ },
+ "metrics": {
+ "f1": 0.5,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": 0.8339768339652592,
+ "precision": 0.5,
+ "recall": 0.5
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "8d030591-a701-46ee-ae59-7f529db053d3",
+ "result_counts": {
+ "candidate_feature_count": 2,
+ "matches": 1,
+ "reference_feature_count": 2
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-perfect-match-v1",
+ "description": "One candidate building polygon exactly matches one reference polygon.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
+ "reference": "fixtures/golden/reference_buildings_perfect.geojson"
+ },
+ "metrics": {
+ "f1": 1.0,
+ "false_negative_count": 0,
+ "false_positive_count": 0,
+ "mean_iou": 1.0,
+ "precision": 1.0,
+ "recall": 1.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "bc99f243-ee42-40bf-ad71-22da29e5278f",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 1,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-no-overlap-v1",
+ "description": "One candidate polygon and one reference polygon do not overlap.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
+ "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
+ },
+ "metrics": {
+ "f1": null,
+ "false_negative_count": 1,
+ "false_positive_count": 1,
+ "mean_iou": null,
+ "precision": 0.0,
+ "recall": 0.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "b12249f0-24e3-4bbf-837a-e4a962d1bca9",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 0,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ },
+ {
+ "benchmark_id": "golden-buildings-multipolygon-match-v1",
+ "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
+ "fixtures": {
+ "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
+ "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
+ },
+ "metrics": {
+ "f1": 1.0,
+ "false_negative_count": 0,
+ "false_positive_count": 0,
+ "mean_iou": 1.0,
+ "precision": 1.0,
+ "recall": 1.0
+ },
+ "persistence": {
+ "commit_count": 1,
+ "metric_count": 6,
+ "metric_keys": [
+ "precision",
+ "recall",
+ "f1",
+ "mean_iou",
+ "false_positive_count",
+ "false_negative_count"
+ ],
+ "quality_check_count": 1
+ },
+ "quality_check_id": "4dabce04-4c65-4dac-807d-9f9cbaa8c72f",
+ "result_counts": {
+ "candidate_feature_count": 1,
+ "matches": 1,
+ "reference_feature_count": 1
+ },
+ "status": "passed"
+ }
+ ],
+ "status": "passed",
+ "version": 1
+}
diff --git a/artifacts/evidence/accuracy/P1/local-artifact-inventory.json b/artifacts/evidence/accuracy/P1/local-artifact-inventory.json
index bc64e20a..8f65d2d3 100644
--- a/artifacts/evidence/accuracy/P1/local-artifact-inventory.json
+++ b/artifacts/evidence/accuracy/P1/local-artifact-inventory.json
@@ -1,1774 +1,1774 @@
-{
- "file_count": 193,
- "limitations": [
- "Ignored Tower corpora and mounted model volumes can be absent locally.",
- "Large/non-evidence files are inventoried without a SHA-256 above the configured ceiling.",
- "Near-duplicate imagery and semantic label quality need dedicated corpus checks."
- ],
- "model_checkpoint_count": 0,
- "records": [
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:11.549082+00:00",
- "path": "models/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.523871+00:00",
- "path": "datasets/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.564000+00:00",
- "path": "datasets/cache/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.548962+00:00",
- "path": "datasets/processed/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.536906+00:00",
- "path": "datasets/raw/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.437926+00:00",
- "path": "data/browser-verify.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-14T16:28:34.004597+00:00",
- "path": "data/browser-verify.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-14T16:30:17.138871+00:00",
- "path": "data/browser-verify.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 123632,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.402154+00:00",
- "path": "data/codex-sidebar-qa.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T22:26:54.332153+00:00",
- "path": "data/codex-sidebar-qa.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T22:44:05.422648+00:00",
- "path": "data/codex-sidebar-qa.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 309032,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.384087+00:00",
- "path": "data/dockdeck.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T13:46:28.737625+00:00",
- "path": "data/dockdeck.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T13:46:28.744782+00:00",
- "path": "data/dockdeck.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 712792,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.493640+00:00",
- "path": "data/e2e-canon-v1.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 61440,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T17:35:13.089621+00:00",
- "path": "data/e2e-canon-v1.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T17:35:57.202346+00:00",
- "path": "data/e2e-canon-v1.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4124152,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.475055+00:00",
- "path": "data/e2e.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T21:08:50.683889+00:00",
- "path": "data/e2e.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T21:09:35.239150+00:00",
- "path": "data/e2e.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 3576192,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.417840+00:00",
- "path": "data/visual-audit.db",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T03:24:26.872751+00:00",
- "path": "data/visual-audit.db-shm",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T03:26:52.155235+00:00",
- "path": "data/visual-audit.db-wal",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 173072,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.509818+00:00",
- "path": "data/visual-followup.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T04:19:08.358677+00:00",
- "path": "data/visual-followup.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T04:19:21.860026+00:00",
- "path": "data/visual-followup.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 234872,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.455087+00:00",
- "path": "data/visual-stitch-direct.db",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T21:46:21.949946+00:00",
- "path": "data/visual-stitch-direct.db-shm",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-21T22:01:31.963127+00:00",
- "path": "data/visual-stitch-direct.db-wal",
- "role": "database_runtime_state",
- "sha256": null,
- "size_bytes": 354352,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:04.366988+00:00",
- "path": "data/wallpaper-editor-audit.db",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 4096,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T13:47:13.057912+00:00",
- "path": "data/wallpaper-editor-audit.db-shm",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 32768,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-22T13:51:26.297974+00:00",
- "path": "data/wallpaper-editor-audit.db-wal",
- "role": "evaluation_or_audit",
- "sha256": null,
- "size_bytes": 185432,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:15.346052+00:00",
- "path": "storage/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.962897+00:00",
- "path": "storage/derived/README.md",
- "role": "other",
- "sha256": "79be20f7855efa75fe27d904f2d813a521a9d09ef8d9b99bad0acff19a19231a",
- "size_bytes": 123,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.502196+00:00",
- "path": "storage/exports/README.md",
- "role": "other",
- "sha256": "c99259b0babc95018f432a532a7b90bd9df2b250ddfe1cb4d478333d80565b84",
- "size_bytes": 123,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:15.993907+00:00",
- "path": "storage/masks/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.980424+00:00",
- "path": "storage/masks/README.md",
- "role": "other",
- "sha256": "d69a1273b9efa0944614880d76e2816528f8ad338c8abad2064554073ba748f4",
- "size_bytes": 121,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.372758+00:00",
- "path": "storage/models/README.md",
- "role": "other",
- "sha256": "32638170f80f32bd90c542a22b3c3c50404ce96b63d633659893bd6df0353381",
- "size_bytes": 122,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.360716+00:00",
- "path": "storage/originals/README.md",
- "role": "other",
- "sha256": "d0d71e64b9ad70322bf3c19ebecd879f8906ff351695a03e8ac4339fac03006f",
- "size_bytes": 125,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:16.515633+00:00",
- "path": "storage/reports/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:15.397973+00:00",
- "path": "storage/tiles/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.644454+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/manifest.json",
- "role": "manifest",
- "sha256": "0bb9a4d9bc0838bb8bdb8c22c102f7730ab96a6c8152ed7bf92d78d1923f50ba",
- "size_bytes": 8664,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.521395+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0000.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.523396+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0001.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.525396+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0002.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.526396+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0003.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.527395+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0004.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.529393+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0005.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.530394+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0006.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.531394+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0007.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.532395+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0008.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.533397+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0009.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.534397+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0010.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.534397+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0011.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.535398+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0012.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.536394+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0013.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.536394+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0014.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:45:08.537394+00:00",
- "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0015.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.447369+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/manifest.json",
- "role": "manifest",
- "sha256": "d0ec133a20f3fb265b91e74a3419f9bc32efd38b14dfd3c76c58cbf6c4f7010e",
- "size_bytes": 8664,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.655715+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0000.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.465061+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0001.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.499375+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0002.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.431027+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0003.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.414870+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0004.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.640681+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0005.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.548598+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0006.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.530919+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0007.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.515308+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0008.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.561992+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0009.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.608789+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0010.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.624404+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0011.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.579067+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0012.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.482714+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0013.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.593495+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0014.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.671803+00:00",
- "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0015.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.714756+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/manifest.json",
- "role": "manifest",
- "sha256": "f662e36e6f360f962517a316163715323b3f9f9bcf0beba619d671f082b8fe4f",
- "size_bytes": 8664,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.929154+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0000.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.729897+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0001.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.759978+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0002.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.702056+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0003.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.687685+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0004.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.913115+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0005.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.808155+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0006.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.792214+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0007.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.774932+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0008.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.824338+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0009.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.875843+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0010.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.896961+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0011.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.839896+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0012.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.744928+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0013.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.858698+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0014.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.947840+00:00",
- "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0015.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.988429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/manifest.json",
- "role": "manifest",
- "sha256": "e4cd24c2b2a3bfc6fc984a41a1c40602aa4da694bc71eaca60c8ee97b0f9ae24",
- "size_bytes": 8664,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.971433+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0000.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.972431+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0001.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.973430+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0002.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.975429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0003.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.976430+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0004.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.977431+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0005.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.978433+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0006.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.979429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0007.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.980432+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0008.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.980432+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0009.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.981429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0010.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.982429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0011.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.983429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0012.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.983429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0013.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.984430+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0014.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:23.985429+00:00",
- "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0015.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.888999+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/manifest.json",
- "role": "manifest",
- "sha256": "1c77f4dad5012775822a2fde3ecb67b0da24dbfc1608a41c8b229833cb1d41e0",
- "size_bytes": 8664,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.856002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0000.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.857004+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0001.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.858000+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0002.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.860002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0003.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.861001+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0004.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.863002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0005.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.864002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0006.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.864999+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0007.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.866999+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0008.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.868002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0009.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.869000+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0010.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.871004+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0011.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.872000+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0012.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.873002+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0013.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.875001+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0014.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:01:30.876004+00:00",
- "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0015.tif",
- "role": "raster",
- "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
- "size_bytes": 4,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:15.384915+00:00",
- "path": "storage/tiles/README.md",
- "role": "other",
- "sha256": "40e7aff2e0acf9bc9538ba5d14e18301749c2be043a10ef9e2f37b7aaad7b222",
- "size_bytes": 121,
- "tracked": true
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:27:16.007015+00:00",
- "path": "storage/uploads/.gitkeep",
- "role": "other",
- "sha256": null,
- "size_bytes": 0,
- "tracked": true
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.341528+00:00",
- "path": "storage/uploads/11728f6a-eb5a-4b0d-93fa-67ad72c42de1/raster/44c082f5-8a91-4c8b-896a-1d04dee96f23/44c082f5-8a91-4c8b-896a-1d04dee96f23_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.144066+00:00",
- "path": "storage/uploads/176f3d22-cc4b-4289-91bd-2188d94b5f88/raster/f8f4c138-09f5-436d-b928-17d39ba4ad78/f8f4c138-09f5-436d-b928-17d39ba4ad78_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.048725+00:00",
- "path": "storage/uploads/267e7728-3375-4dab-ac08-ca926e2ed0af/raster/75dcd36c-ad7d-48e4-ab75-5815741cba52/75dcd36c-ad7d-48e4-ab75-5815741cba52_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.085122+00:00",
- "path": "storage/uploads/279517c3-2aa0-4400-a9df-2b13304a372d/raster/fec4ecd1-50b2-4f69-88e7-1aa9050b1449/fec4ecd1-50b2-4f69-88e7-1aa9050b1449_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.383826+00:00",
- "path": "storage/uploads/2c299dfe-d595-4d98-ace2-4535edc4e334/raster/4a12678b-dfa2-4733-84c3-3a3ed7c0e4fc/4a12678b-dfa2-4733-84c3-3a3ed7c0e4fc_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.360312+00:00",
- "path": "storage/uploads/2ec38b76-39e2-4599-9140-02f73b86fd9c/raster/647c28f3-d4ea-492f-8d78-721dd4f310b9/647c28f3-d4ea-492f-8d78-721dd4f310b9_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.224168+00:00",
- "path": "storage/uploads/2edf5b13-3cdd-4076-a867-4c9a769efde3/raster/5a22fbb7-0ae1-455f-9c35-897513329474/5a22fbb7-0ae1-455f-9c35-897513329474_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.244732+00:00",
- "path": "storage/uploads/38c66d6d-21e7-41d0-b128-5e6c4de44fd1/raster/64993e00-638e-4f70-805f-7d70af76639e/64993e00-638e-4f70-805f-7d70af76639e_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.264448+00:00",
- "path": "storage/uploads/56ca45b4-f5ce-463b-aa1e-28b3dfe710aa/raster/94818d6a-0967-41b5-9e0b-fa1ec9eec375/94818d6a-0967-41b5-9e0b-fa1ec9eec375_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.404602+00:00",
- "path": "storage/uploads/6abbf506-a386-4451-8cd9-d595bc995d51/raster/76b6fcf4-29d4-4906-8687-a46bfe16be63/76b6fcf4-29d4-4906-8687-a46bfe16be63_dhmvii_terrain_5m_25afc05778f0.tif",
- "role": "raster",
- "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
- "size_bytes": 594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:47:20.216635+00:00",
- "path": "storage/uploads/81f3e3be-b697-4be8-8687-0f7e2ecde66c/raster/20ac78ed-ac11-4c8d-8e3d-e12e63b1168e/20ac78ed-ac11-4c8d-8e3d-e12e63b1168e_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:03:57.364699+00:00",
- "path": "storage/uploads/841e1743-ac27-47fb-8bdb-3534174318b7/raster/9966c6ec-84bc-4ff2-95c9-38ca1e044100/9966c6ec-84bc-4ff2-95c9-38ca1e044100_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.166400+00:00",
- "path": "storage/uploads/8435a148-926b-4893-bca4-f14088ff9e91/raster/efd5b6d3-8b04-4604-b5b4-a655692ebdf7/efd5b6d3-8b04-4604-b5b4-a655692ebdf7_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.066941+00:00",
- "path": "storage/uploads/846f386f-7de5-408e-97ca-a959ea77b85a/raster/de196775-a18a-443f-8dd8-b4711d833718/de196775-a18a-443f-8dd8-b4711d833718_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:03:56.588237+00:00",
- "path": "storage/uploads/84c06c15-1e81-4868-b0d9-463ebfcfd6f8/raster/0588f638-ab05-4bf5-afdc-180865daaac0/0588f638-ab05-4bf5-afdc-180865daaac0_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:03:57.817405+00:00",
- "path": "storage/uploads/85848647-9de9-4301-af8c-5a60172592c2/raster/a872343d-99d1-44d4-b902-ea51164f0f43/a872343d-99d1-44d4-b902-ea51164f0f43_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.205956+00:00",
- "path": "storage/uploads/863ecd80-0460-4616-be17-254b3490da0c/raster/0e3ccea6-778a-497b-b06f-32f9a7e057ff/0e3ccea6-778a-497b-b06f-32f9a7e057ff_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.106413+00:00",
- "path": "storage/uploads/8b82b43a-f930-4b32-bc8e-3d4b97b414b5/raster/4f6ec145-964f-4319-ae2c-8e608ab6b67c/4f6ec145-964f-4319-ae2c-8e608ab6b67c_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.303147+00:00",
- "path": "storage/uploads/8ff71c9c-7c29-41ce-90e9-40a9bfda2d83/raster/02078e14-257a-4f33-8daf-118ce484750d/02078e14-257a-4f33-8daf-118ce484750d_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.284002+00:00",
- "path": "storage/uploads/959b29e4-73e3-4547-932d-92b9e1bf2765/raster/384af674-fe5d-450a-b97a-eac04a262d1c/384af674-fe5d-450a-b97a-eac04a262d1c_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.424891+00:00",
- "path": "storage/uploads/96cc3f03-7561-483d-8ea8-3d929df367bc/raster/900b6852-f0e5-4be7-8306-9e04e3702be0/900b6852-f0e5-4be7-8306-9e04e3702be0_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:03:56.892553+00:00",
- "path": "storage/uploads/ba0af3d9-0da5-4c0e-be2c-a73506984e1f/raster/af25ec42-9f70-4b0b-b806-fe3470c7eccd/af25ec42-9f70-4b0b-b806-fe3470c7eccd_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.321580+00:00",
- "path": "storage/uploads/ba76feb5-73df-4c44-be81-565bc3032771/raster/92e1873c-3d7c-4a1c-948b-0f3142c82d6e/92e1873c-3d7c-4a1c-948b-0f3142c82d6e_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:04:00.126350+00:00",
- "path": "storage/uploads/bf96b94e-01aa-4912-9286-75a318cfc2ab/raster/12441c43-80db-43d6-bebf-8e4ff2207338/12441c43-80db-43d6-bebf-8e4ff2207338_dhmvii_terrain_5m_fc9d87c14310.tif",
- "role": "raster",
- "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
- "size_bytes": 594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.466121+00:00",
- "path": "storage/uploads/c7b8d026-525a-4c20-a542-1e032a023beb/raster/bdc6890b-3239-4dba-aa9e-24da48c55b05/bdc6890b-3239-4dba-aa9e-24da48c55b05_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.484926+00:00",
- "path": "storage/uploads/c9c03052-367d-48a1-8701-9631c06577e9/raster/cc1533a4-cad2-449a-91f4-e4b50ec85735/cc1533a4-cad2-449a-91f4-e4b50ec85735_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:47:18.915448+00:00",
- "path": "storage/uploads/dc9c3675-9b75-45f1-ab6f-f3763975e82a/raster/a8e1eb42-29a6-4223-8597-f59a67fc1241/a8e1eb42-29a6-4223-8597-f59a67fc1241_orthofoto_wallonia_latest_55037acc9066.tif",
- "role": "raster",
- "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
- "size_bytes": 6653,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:47:19.240823+00:00",
- "path": "storage/uploads/e0b846df-079e-4795-aaae-e78e49d9bb5f/raster/abf358fe-3e27-40ab-9db1-83282b139627/abf358fe-3e27-40ab-9db1-83282b139627_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:47:19.666934+00:00",
- "path": "storage/uploads/eddb4c16-b8ab-4a58-a8b1-2562876b23dc/raster/6539c8d0-5829-47be-ab07-723f820c6d9e/6539c8d0-5829-47be-ab07-723f820c6d9e_orthofoto_most_recent_f86fd02984f0.tif",
- "role": "raster",
- "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
- "size_bytes": 6594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.126051+00:00",
- "path": "storage/uploads/f08f59f9-1057-4c64-b08d-dc831a0d4f47/raster/167e9992-0c2a-4883-866e-292640442470/167e9992-0c2a-4883-866e-292640442470_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.026144+00:00",
- "path": "storage/uploads/f0f5dcaf-b7a1-47bb-9e44-29cf2346b624/raster/81794c04-99f0-453e-9121-04501db1e234/81794c04-99f0-453e-9121-04501db1e234_orthofoto_2020_a593e2070e60.tif",
- "role": "raster",
- "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
- "size_bytes": 6597,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.445694+00:00",
- "path": "storage/uploads/f519c785-4d88-4974-9d64-d178b535ec14/raster/625af5b7-5d50-47c9-854f-8bb9a12ad1e9/625af5b7-5d50-47c9-854f-8bb9a12ad1e9_orthofoto_brussels_latest_11e481d05ce6.tif",
- "role": "raster",
- "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
- "size_bytes": 6582,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:27:16.186336+00:00",
- "path": "storage/uploads/f7e7ba0c-e490-46c8-8467-28c9176ede55/raster/771bf37d-424a-4e56-98a5-35657f52674c/771bf37d-424a-4e56-98a5-35657f52674c_dhmvii_terrain_5m_9cde89f97e71.tif",
- "role": "raster",
- "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
- "size_bytes": 594,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:47:22.261648+00:00",
- "path": "storage/uploads/fead1267-e2f8-4e25-af69-9333665e87e7/raster/4c2100cd-b167-4494-bfd4-78a378d3423c/4c2100cd-b167-4494-bfd4-78a378d3423c_dhmvii_terrain_5m_a193c984774e.tif",
- "role": "raster",
- "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
- "size_bytes": 594,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T15:38:29.280053+00:00",
- "path": "artifacts/codex-review/v31/contact_sheet_001.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 7734648,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-29T15:38:29.455096+00:00",
- "path": "artifacts/codex-review/v31/qa.json",
- "role": "other",
- "sha256": "bd4c01b4a90105668d9a2ff5cdbcb158663f7220b644dddc0ca8145abe50592a",
- "size_bytes": 49344,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T15:06:14.828659+00:00",
- "path": "artifacts/codex-review/v33-flanders/candidate_error_contact_sheet.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3745720,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T15:06:23.345602+00:00",
- "path": "artifacts/codex-review/v33-flanders/genk.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3321910,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T15:06:25.258215+00:00",
- "path": "artifacts/codex-review/v33-flanders/lokeren.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3108021,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T15:06:26.655416+00:00",
- "path": "artifacts/codex-review/v33-flanders/ostend.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3745720,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:02:54.256518+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence.geojson",
- "role": "vector",
- "sha256": "b333c6dab3a9d3a836294139c03892e28946213865992cd1209e4094723c36c3",
- "size_bytes": 4287,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T13:02:53.527460+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_requests.tsv",
- "role": "other",
- "sha256": null,
- "size_bytes": 53,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T13:02:54.508233+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_review.html",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3890,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:02:54.392749+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_summary.json",
- "role": "other",
- "sha256": "bb51fc6a18807972a2e5e9c601b60d01809ab57bc5142fd43e75dbdcc71cba4a",
- "size_bytes": 1436,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:02:53.782524+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/threshold_0p15_qc-low_evidence_response.json",
- "role": "other",
- "sha256": "eaed204fc22b2dbbf88d52f4e0a235cac1cb669808147a2b4aceb543c6683c58",
- "size_bytes": 1022,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:02:53.926885+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/threshold_0p35_qc-high_evidence_response.json",
- "role": "other",
- "sha256": "933652de4fa1a791cb987686c19b3cadb8d4d690f20ff19d8084045725a4cd9e",
- "size_bytes": 1027,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T13:02:52.411352+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/mock-bin/curl",
- "role": "other",
- "sha256": null,
- "size_bytes": 2407,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T13:02:52.369782+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T130251Z/summary/detection-calibration-summary.json",
- "role": "other",
- "sha256": "fc0c46b6b36f31fd8f7ff2215f05091b3821b4352e0931eedc7c40254fbd39da",
- "size_bytes": 683,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:43.279887+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence.geojson",
- "role": "vector",
- "sha256": "b333c6dab3a9d3a836294139c03892e28946213865992cd1209e4094723c36c3",
- "size_bytes": 4287,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T15:46:43.068066+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_requests.tsv",
- "role": "other",
- "sha256": null,
- "size_bytes": 53,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T15:46:43.292882+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_review.html",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 3890,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:43.285880+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_summary.json",
- "role": "other",
- "sha256": "a867a0780e31297be42ecbcb7a7383df2ee7990d2becb4b0c98cd28f6aa953af",
- "size_bytes": 1436,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:43.136995+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/threshold_0p15_qc-low_evidence_response.json",
- "role": "other",
- "sha256": "eaed204fc22b2dbbf88d52f4e0a235cac1cb669808147a2b4aceb543c6683c58",
- "size_bytes": 1022,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:43.194780+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/threshold_0p35_qc-high_evidence_response.json",
- "role": "other",
- "sha256": "933652de4fa1a791cb987686c19b3cadb8d4d690f20ff19d8084045725a4cd9e",
- "size_bytes": 1027,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-08-01T15:46:42.784552+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/mock-bin/curl",
- "role": "other",
- "sha256": null,
- "size_bytes": 2407,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-08-01T15:46:42.769552+00:00",
- "path": "artifacts/detection-calibration-smoke/20260801T154642Z/summary/detection-calibration-summary.json",
- "role": "other",
- "sha256": "fc0c46b6b36f31fd8f7ff2215f05091b3821b4352e0931eedc7c40254fbd39da",
- "size_bytes": 683,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:26:55.722947+00:00",
- "path": "artifacts/model-review/building-be-v1-candidate/corpus-spec.json",
- "role": "other",
- "sha256": "17ab579718aab59375a72c8d16bb0c99eb86d09f0b57bb5a818dc69da579c9c7",
- "size_bytes": 4377,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:26:55.371353+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-background.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 4678004,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:26:55.710836+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-cal.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 5221347,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:26:55.639850+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-contact.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 17317742,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:26:55.435818+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-test.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 4499487,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-27T21:26:55.307701+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/contact_sheet_001.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 7844374,
- "tracked": false
- },
- {
- "hash_omission_reason": null,
- "modified_at": "2026-07-27T21:26:55.205724+00:00",
- "path": "artifacts/model-review/building-be-v1-pilot/corpus-spec.json",
- "role": "other",
- "sha256": "0eb2c59f5b0f3592316419bac27759f0072447fce910f2550248487bbbc62733",
- "size_bytes": 841,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-29T18:20:42.486710+00:00",
- "path": "artifacts/v42-review/contact_sheet_001.png",
- "role": "visual_review",
- "sha256": null,
- "size_bytes": 9249471,
- "tracked": false
- },
- {
- "hash_omission_reason": "suffix_or_size_limit",
- "modified_at": "2026-07-28T09:05:57.994252+00:00",
- "path": "output/pdf/geointel-case-study.pdf",
- "role": "other",
- "sha256": null,
- "size_bytes": 3896143,
- "tracked": true
- }
- ],
- "role_counts": {
- "database_runtime_state": 21,
- "evaluation_or_audit": 6,
- "manifest": 5,
- "other": 32,
- "raster": 114,
- "vector": 2,
- "visual_review": 13
- },
- "root_counts": {
- "artifacts": 30,
- "data": 27,
- "datasets": 4,
- "models": 1,
- "output": 1,
- "storage": 130
- },
- "roots": [
- "models",
- "datasets",
- "data",
- "storage",
- "artifacts",
- "output"
- ],
- "total_size_bytes": 84874287
-}
+{
+ "file_count": 193,
+ "limitations": [
+ "Ignored Tower corpora and mounted model volumes can be absent locally.",
+ "Large/non-evidence files are inventoried without a SHA-256 above the configured ceiling.",
+ "Near-duplicate imagery and semantic label quality need dedicated corpus checks."
+ ],
+ "model_checkpoint_count": 0,
+ "records": [
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:11.549082+00:00",
+ "path": "models/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.523871+00:00",
+ "path": "datasets/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.564000+00:00",
+ "path": "datasets/cache/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.548962+00:00",
+ "path": "datasets/processed/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.536906+00:00",
+ "path": "datasets/raw/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.437926+00:00",
+ "path": "data/browser-verify.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-14T16:28:34.004597+00:00",
+ "path": "data/browser-verify.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-14T16:30:17.138871+00:00",
+ "path": "data/browser-verify.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 123632,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.402154+00:00",
+ "path": "data/codex-sidebar-qa.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T22:26:54.332153+00:00",
+ "path": "data/codex-sidebar-qa.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T22:44:05.422648+00:00",
+ "path": "data/codex-sidebar-qa.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 309032,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.384087+00:00",
+ "path": "data/dockdeck.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T13:46:28.737625+00:00",
+ "path": "data/dockdeck.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T13:46:28.744782+00:00",
+ "path": "data/dockdeck.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 712792,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.493640+00:00",
+ "path": "data/e2e-canon-v1.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 61440,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T17:35:13.089621+00:00",
+ "path": "data/e2e-canon-v1.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T17:35:57.202346+00:00",
+ "path": "data/e2e-canon-v1.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4124152,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.475055+00:00",
+ "path": "data/e2e.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T21:08:50.683889+00:00",
+ "path": "data/e2e.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T21:09:35.239150+00:00",
+ "path": "data/e2e.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 3576192,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.417840+00:00",
+ "path": "data/visual-audit.db",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T03:24:26.872751+00:00",
+ "path": "data/visual-audit.db-shm",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T03:26:52.155235+00:00",
+ "path": "data/visual-audit.db-wal",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 173072,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.509818+00:00",
+ "path": "data/visual-followup.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T04:19:08.358677+00:00",
+ "path": "data/visual-followup.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T04:19:21.860026+00:00",
+ "path": "data/visual-followup.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 234872,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.455087+00:00",
+ "path": "data/visual-stitch-direct.db",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T21:46:21.949946+00:00",
+ "path": "data/visual-stitch-direct.db-shm",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-21T22:01:31.963127+00:00",
+ "path": "data/visual-stitch-direct.db-wal",
+ "role": "database_runtime_state",
+ "sha256": null,
+ "size_bytes": 354352,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:04.366988+00:00",
+ "path": "data/wallpaper-editor-audit.db",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 4096,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T13:47:13.057912+00:00",
+ "path": "data/wallpaper-editor-audit.db-shm",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 32768,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-22T13:51:26.297974+00:00",
+ "path": "data/wallpaper-editor-audit.db-wal",
+ "role": "evaluation_or_audit",
+ "sha256": null,
+ "size_bytes": 185432,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:15.346052+00:00",
+ "path": "storage/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.962897+00:00",
+ "path": "storage/derived/README.md",
+ "role": "other",
+ "sha256": "79be20f7855efa75fe27d904f2d813a521a9d09ef8d9b99bad0acff19a19231a",
+ "size_bytes": 123,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.502196+00:00",
+ "path": "storage/exports/README.md",
+ "role": "other",
+ "sha256": "c99259b0babc95018f432a532a7b90bd9df2b250ddfe1cb4d478333d80565b84",
+ "size_bytes": 123,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:15.993907+00:00",
+ "path": "storage/masks/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.980424+00:00",
+ "path": "storage/masks/README.md",
+ "role": "other",
+ "sha256": "d69a1273b9efa0944614880d76e2816528f8ad338c8abad2064554073ba748f4",
+ "size_bytes": 121,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.372758+00:00",
+ "path": "storage/models/README.md",
+ "role": "other",
+ "sha256": "32638170f80f32bd90c542a22b3c3c50404ce96b63d633659893bd6df0353381",
+ "size_bytes": 122,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.360716+00:00",
+ "path": "storage/originals/README.md",
+ "role": "other",
+ "sha256": "d0d71e64b9ad70322bf3c19ebecd879f8906ff351695a03e8ac4339fac03006f",
+ "size_bytes": 125,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:16.515633+00:00",
+ "path": "storage/reports/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:15.397973+00:00",
+ "path": "storage/tiles/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.644454+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/manifest.json",
+ "role": "manifest",
+ "sha256": "0bb9a4d9bc0838bb8bdb8c22c102f7730ab96a6c8152ed7bf92d78d1923f50ba",
+ "size_bytes": 8664,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.521395+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0000.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.523396+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0001.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.525396+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0002.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.526396+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0003.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.527395+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0004.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.529393+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0005.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.530394+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0006.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.531394+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0007.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.532395+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0008.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.533397+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0009.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.534397+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0010.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.534397+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0011.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.535398+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0012.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.536394+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0013.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.536394+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0014.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:45:08.537394+00:00",
+ "path": "storage/tiles/277180a4-cd74-42ed-a231-0d194b3fca9f/0f96a4f7-6b24-4969-9564-abbde30b5a51/9199f079-42fc-48cc-86ff-d1072f801932/tile_0015.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.447369+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/manifest.json",
+ "role": "manifest",
+ "sha256": "d0ec133a20f3fb265b91e74a3419f9bc32efd38b14dfd3c76c58cbf6c4f7010e",
+ "size_bytes": 8664,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.655715+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0000.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.465061+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0001.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.499375+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0002.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.431027+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0003.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.414870+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0004.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.640681+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0005.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.548598+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0006.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.530919+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0007.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.515308+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0008.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.561992+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0009.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.608789+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0010.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.624404+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0011.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.579067+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0012.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.482714+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0013.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.593495+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0014.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.671803+00:00",
+ "path": "storage/tiles/7175ae58-2b09-4fab-83e1-5d95e2969d35/07738ebe-2c5e-4d6c-960d-1c03f216a3a0/7529e658-b42a-47cb-a23c-d9d350b5d8c4/tile_0015.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.714756+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/manifest.json",
+ "role": "manifest",
+ "sha256": "f662e36e6f360f962517a316163715323b3f9f9bcf0beba619d671f082b8fe4f",
+ "size_bytes": 8664,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.929154+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0000.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.729897+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0001.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.759978+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0002.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.702056+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0003.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.687685+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0004.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.913115+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0005.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.808155+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0006.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.792214+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0007.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.774932+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0008.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.824338+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0009.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.875843+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0010.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.896961+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0011.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.839896+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0012.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.744928+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0013.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.858698+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0014.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.947840+00:00",
+ "path": "storage/tiles/a7a94d0b-9b27-49bd-9e44-97b0b75677ad/e2a3f62a-76f0-4611-81a3-d2ca948cda75/6e53d525-f603-4eb3-8bf7-05da59832013/tile_0015.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.988429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/manifest.json",
+ "role": "manifest",
+ "sha256": "e4cd24c2b2a3bfc6fc984a41a1c40602aa4da694bc71eaca60c8ee97b0f9ae24",
+ "size_bytes": 8664,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.971433+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0000.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.972431+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0001.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.973430+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0002.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.975429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0003.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.976430+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0004.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.977431+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0005.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.978433+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0006.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.979429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0007.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.980432+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0008.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.980432+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0009.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.981429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0010.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.982429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0011.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.983429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0012.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.983429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0013.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.984430+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0014.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:23.985429+00:00",
+ "path": "storage/tiles/b9a1e970-d028-4b71-9ff1-709e416d4424/c0fc6968-9c5b-499f-a095-0fc91a18501d/3edda109-2f4f-4913-b242-2b08d33841dc/tile_0015.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.888999+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/manifest.json",
+ "role": "manifest",
+ "sha256": "1c77f4dad5012775822a2fde3ecb67b0da24dbfc1608a41c8b229833cb1d41e0",
+ "size_bytes": 8664,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.856002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0000.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.857004+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0001.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.858000+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0002.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.860002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0003.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.861001+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0004.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.863002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0005.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.864002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0006.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.864999+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0007.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.866999+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0008.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.868002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0009.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.869000+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0010.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.871004+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0011.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.872000+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0012.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.873002+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0013.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.875001+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0014.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:01:30.876004+00:00",
+ "path": "storage/tiles/df217a4e-7f2e-4989-880e-30fb9a7ec645/f6848732-1f78-41ba-967c-11a577112b17/5e0d5f61-e7fb-4d4a-ae96-84b9060554d6/tile_0015.tif",
+ "role": "raster",
+ "sha256": "8b668b8994aa845107399994593d0ca831520be5257f005351a0ec13e97a39be",
+ "size_bytes": 4,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:15.384915+00:00",
+ "path": "storage/tiles/README.md",
+ "role": "other",
+ "sha256": "40e7aff2e0acf9bc9538ba5d14e18301749c2be043a10ef9e2f37b7aaad7b222",
+ "size_bytes": 121,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:27:16.007015+00:00",
+ "path": "storage/uploads/.gitkeep",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 0,
+ "tracked": true
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.341528+00:00",
+ "path": "storage/uploads/11728f6a-eb5a-4b0d-93fa-67ad72c42de1/raster/44c082f5-8a91-4c8b-896a-1d04dee96f23/44c082f5-8a91-4c8b-896a-1d04dee96f23_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.144066+00:00",
+ "path": "storage/uploads/176f3d22-cc4b-4289-91bd-2188d94b5f88/raster/f8f4c138-09f5-436d-b928-17d39ba4ad78/f8f4c138-09f5-436d-b928-17d39ba4ad78_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.048725+00:00",
+ "path": "storage/uploads/267e7728-3375-4dab-ac08-ca926e2ed0af/raster/75dcd36c-ad7d-48e4-ab75-5815741cba52/75dcd36c-ad7d-48e4-ab75-5815741cba52_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.085122+00:00",
+ "path": "storage/uploads/279517c3-2aa0-4400-a9df-2b13304a372d/raster/fec4ecd1-50b2-4f69-88e7-1aa9050b1449/fec4ecd1-50b2-4f69-88e7-1aa9050b1449_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.383826+00:00",
+ "path": "storage/uploads/2c299dfe-d595-4d98-ace2-4535edc4e334/raster/4a12678b-dfa2-4733-84c3-3a3ed7c0e4fc/4a12678b-dfa2-4733-84c3-3a3ed7c0e4fc_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.360312+00:00",
+ "path": "storage/uploads/2ec38b76-39e2-4599-9140-02f73b86fd9c/raster/647c28f3-d4ea-492f-8d78-721dd4f310b9/647c28f3-d4ea-492f-8d78-721dd4f310b9_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.224168+00:00",
+ "path": "storage/uploads/2edf5b13-3cdd-4076-a867-4c9a769efde3/raster/5a22fbb7-0ae1-455f-9c35-897513329474/5a22fbb7-0ae1-455f-9c35-897513329474_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.244732+00:00",
+ "path": "storage/uploads/38c66d6d-21e7-41d0-b128-5e6c4de44fd1/raster/64993e00-638e-4f70-805f-7d70af76639e/64993e00-638e-4f70-805f-7d70af76639e_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.264448+00:00",
+ "path": "storage/uploads/56ca45b4-f5ce-463b-aa1e-28b3dfe710aa/raster/94818d6a-0967-41b5-9e0b-fa1ec9eec375/94818d6a-0967-41b5-9e0b-fa1ec9eec375_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.404602+00:00",
+ "path": "storage/uploads/6abbf506-a386-4451-8cd9-d595bc995d51/raster/76b6fcf4-29d4-4906-8687-a46bfe16be63/76b6fcf4-29d4-4906-8687-a46bfe16be63_dhmvii_terrain_5m_25afc05778f0.tif",
+ "role": "raster",
+ "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
+ "size_bytes": 594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:47:20.216635+00:00",
+ "path": "storage/uploads/81f3e3be-b697-4be8-8687-0f7e2ecde66c/raster/20ac78ed-ac11-4c8d-8e3d-e12e63b1168e/20ac78ed-ac11-4c8d-8e3d-e12e63b1168e_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:03:57.364699+00:00",
+ "path": "storage/uploads/841e1743-ac27-47fb-8bdb-3534174318b7/raster/9966c6ec-84bc-4ff2-95c9-38ca1e044100/9966c6ec-84bc-4ff2-95c9-38ca1e044100_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.166400+00:00",
+ "path": "storage/uploads/8435a148-926b-4893-bca4-f14088ff9e91/raster/efd5b6d3-8b04-4604-b5b4-a655692ebdf7/efd5b6d3-8b04-4604-b5b4-a655692ebdf7_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.066941+00:00",
+ "path": "storage/uploads/846f386f-7de5-408e-97ca-a959ea77b85a/raster/de196775-a18a-443f-8dd8-b4711d833718/de196775-a18a-443f-8dd8-b4711d833718_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:03:56.588237+00:00",
+ "path": "storage/uploads/84c06c15-1e81-4868-b0d9-463ebfcfd6f8/raster/0588f638-ab05-4bf5-afdc-180865daaac0/0588f638-ab05-4bf5-afdc-180865daaac0_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:03:57.817405+00:00",
+ "path": "storage/uploads/85848647-9de9-4301-af8c-5a60172592c2/raster/a872343d-99d1-44d4-b902-ea51164f0f43/a872343d-99d1-44d4-b902-ea51164f0f43_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.205956+00:00",
+ "path": "storage/uploads/863ecd80-0460-4616-be17-254b3490da0c/raster/0e3ccea6-778a-497b-b06f-32f9a7e057ff/0e3ccea6-778a-497b-b06f-32f9a7e057ff_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.106413+00:00",
+ "path": "storage/uploads/8b82b43a-f930-4b32-bc8e-3d4b97b414b5/raster/4f6ec145-964f-4319-ae2c-8e608ab6b67c/4f6ec145-964f-4319-ae2c-8e608ab6b67c_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.303147+00:00",
+ "path": "storage/uploads/8ff71c9c-7c29-41ce-90e9-40a9bfda2d83/raster/02078e14-257a-4f33-8daf-118ce484750d/02078e14-257a-4f33-8daf-118ce484750d_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.284002+00:00",
+ "path": "storage/uploads/959b29e4-73e3-4547-932d-92b9e1bf2765/raster/384af674-fe5d-450a-b97a-eac04a262d1c/384af674-fe5d-450a-b97a-eac04a262d1c_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.424891+00:00",
+ "path": "storage/uploads/96cc3f03-7561-483d-8ea8-3d929df367bc/raster/900b6852-f0e5-4be7-8306-9e04e3702be0/900b6852-f0e5-4be7-8306-9e04e3702be0_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:03:56.892553+00:00",
+ "path": "storage/uploads/ba0af3d9-0da5-4c0e-be2c-a73506984e1f/raster/af25ec42-9f70-4b0b-b806-fe3470c7eccd/af25ec42-9f70-4b0b-b806-fe3470c7eccd_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.321580+00:00",
+ "path": "storage/uploads/ba76feb5-73df-4c44-be81-565bc3032771/raster/92e1873c-3d7c-4a1c-948b-0f3142c82d6e/92e1873c-3d7c-4a1c-948b-0f3142c82d6e_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:04:00.126350+00:00",
+ "path": "storage/uploads/bf96b94e-01aa-4912-9286-75a318cfc2ab/raster/12441c43-80db-43d6-bebf-8e4ff2207338/12441c43-80db-43d6-bebf-8e4ff2207338_dhmvii_terrain_5m_fc9d87c14310.tif",
+ "role": "raster",
+ "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
+ "size_bytes": 594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.466121+00:00",
+ "path": "storage/uploads/c7b8d026-525a-4c20-a542-1e032a023beb/raster/bdc6890b-3239-4dba-aa9e-24da48c55b05/bdc6890b-3239-4dba-aa9e-24da48c55b05_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.484926+00:00",
+ "path": "storage/uploads/c9c03052-367d-48a1-8701-9631c06577e9/raster/cc1533a4-cad2-449a-91f4-e4b50ec85735/cc1533a4-cad2-449a-91f4-e4b50ec85735_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:47:18.915448+00:00",
+ "path": "storage/uploads/dc9c3675-9b75-45f1-ab6f-f3763975e82a/raster/a8e1eb42-29a6-4223-8597-f59a67fc1241/a8e1eb42-29a6-4223-8597-f59a67fc1241_orthofoto_wallonia_latest_55037acc9066.tif",
+ "role": "raster",
+ "sha256": "1bdb757fbea0a5bb4d6beeff8b2674b2a18636f6084bb6dc0be47947713c9abe",
+ "size_bytes": 6653,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:47:19.240823+00:00",
+ "path": "storage/uploads/e0b846df-079e-4795-aaae-e78e49d9bb5f/raster/abf358fe-3e27-40ab-9db1-83282b139627/abf358fe-3e27-40ab-9db1-83282b139627_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:47:19.666934+00:00",
+ "path": "storage/uploads/eddb4c16-b8ab-4a58-a8b1-2562876b23dc/raster/6539c8d0-5829-47be-ab07-723f820c6d9e/6539c8d0-5829-47be-ab07-723f820c6d9e_orthofoto_most_recent_f86fd02984f0.tif",
+ "role": "raster",
+ "sha256": "8498d0b9823d6b4f6d8b338e62c10b10e76fdd5e5b58cd3d0a16256eb527c5ff",
+ "size_bytes": 6594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.126051+00:00",
+ "path": "storage/uploads/f08f59f9-1057-4c64-b08d-dc831a0d4f47/raster/167e9992-0c2a-4883-866e-292640442470/167e9992-0c2a-4883-866e-292640442470_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.026144+00:00",
+ "path": "storage/uploads/f0f5dcaf-b7a1-47bb-9e44-29cf2346b624/raster/81794c04-99f0-453e-9121-04501db1e234/81794c04-99f0-453e-9121-04501db1e234_orthofoto_2020_a593e2070e60.tif",
+ "role": "raster",
+ "sha256": "b5ec8c63c5bec5c754995b148bdcc44b40c63a034e2fe333e7d78fe9ac255abb",
+ "size_bytes": 6597,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.445694+00:00",
+ "path": "storage/uploads/f519c785-4d88-4974-9d64-d178b535ec14/raster/625af5b7-5d50-47c9-854f-8bb9a12ad1e9/625af5b7-5d50-47c9-854f-8bb9a12ad1e9_orthofoto_brussels_latest_11e481d05ce6.tif",
+ "role": "raster",
+ "sha256": "4d3e35cd4dfe0834262ab2f55707f088d55409188952b75d34ad2d1b9588b19f",
+ "size_bytes": 6582,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:27:16.186336+00:00",
+ "path": "storage/uploads/f7e7ba0c-e490-46c8-8467-28c9176ede55/raster/771bf37d-424a-4e56-98a5-35657f52674c/771bf37d-424a-4e56-98a5-35657f52674c_dhmvii_terrain_5m_9cde89f97e71.tif",
+ "role": "raster",
+ "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
+ "size_bytes": 594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:47:22.261648+00:00",
+ "path": "storage/uploads/fead1267-e2f8-4e25-af69-9333665e87e7/raster/4c2100cd-b167-4494-bfd4-78a378d3423c/4c2100cd-b167-4494-bfd4-78a378d3423c_dhmvii_terrain_5m_a193c984774e.tif",
+ "role": "raster",
+ "sha256": "7cd6465f34b9d27859fc137bdb1d037d65effc9ac1c05889cc537dddd126fbd0",
+ "size_bytes": 594,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T15:38:29.280053+00:00",
+ "path": "artifacts/codex-review/v31/contact_sheet_001.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 7734648,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-29T15:38:29.455096+00:00",
+ "path": "artifacts/codex-review/v31/qa.json",
+ "role": "other",
+ "sha256": "bd4c01b4a90105668d9a2ff5cdbcb158663f7220b644dddc0ca8145abe50592a",
+ "size_bytes": 49344,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T15:06:14.828659+00:00",
+ "path": "artifacts/codex-review/v33-flanders/candidate_error_contact_sheet.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3745720,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T15:06:23.345602+00:00",
+ "path": "artifacts/codex-review/v33-flanders/genk.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3321910,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T15:06:25.258215+00:00",
+ "path": "artifacts/codex-review/v33-flanders/lokeren.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3108021,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T15:06:26.655416+00:00",
+ "path": "artifacts/codex-review/v33-flanders/ostend.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3745720,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:02:54.256518+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence.geojson",
+ "role": "vector",
+ "sha256": "b333c6dab3a9d3a836294139c03892e28946213865992cd1209e4094723c36c3",
+ "size_bytes": 4287,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T13:02:53.527460+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_requests.tsv",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 53,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T13:02:54.508233+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_review.html",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3890,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:02:54.392749+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/calibration_evidence_summary.json",
+ "role": "other",
+ "sha256": "bb51fc6a18807972a2e5e9c601b60d01809ab57bc5142fd43e75dbdcc71cba4a",
+ "size_bytes": 1436,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:02:53.782524+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/threshold_0p15_qc-low_evidence_response.json",
+ "role": "other",
+ "sha256": "eaed204fc22b2dbbf88d52f4e0a235cac1cb669808147a2b4aceb543c6683c58",
+ "size_bytes": 1022,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:02:53.926885+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/evidence/threshold_0p35_qc-high_evidence_response.json",
+ "role": "other",
+ "sha256": "933652de4fa1a791cb987686c19b3cadb8d4d690f20ff19d8084045725a4cd9e",
+ "size_bytes": 1027,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T13:02:52.411352+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/mock-bin/curl",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 2407,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T13:02:52.369782+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T130251Z/summary/detection-calibration-summary.json",
+ "role": "other",
+ "sha256": "fc0c46b6b36f31fd8f7ff2215f05091b3821b4352e0931eedc7c40254fbd39da",
+ "size_bytes": 683,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:43.279887+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence.geojson",
+ "role": "vector",
+ "sha256": "b333c6dab3a9d3a836294139c03892e28946213865992cd1209e4094723c36c3",
+ "size_bytes": 4287,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T15:46:43.068066+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_requests.tsv",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 53,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T15:46:43.292882+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_review.html",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 3890,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:43.285880+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/calibration_evidence_summary.json",
+ "role": "other",
+ "sha256": "a867a0780e31297be42ecbcb7a7383df2ee7990d2becb4b0c98cd28f6aa953af",
+ "size_bytes": 1436,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:43.136995+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/threshold_0p15_qc-low_evidence_response.json",
+ "role": "other",
+ "sha256": "eaed204fc22b2dbbf88d52f4e0a235cac1cb669808147a2b4aceb543c6683c58",
+ "size_bytes": 1022,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:43.194780+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/evidence/threshold_0p35_qc-high_evidence_response.json",
+ "role": "other",
+ "sha256": "933652de4fa1a791cb987686c19b3cadb8d4d690f20ff19d8084045725a4cd9e",
+ "size_bytes": 1027,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-08-01T15:46:42.784552+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/mock-bin/curl",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 2407,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-08-01T15:46:42.769552+00:00",
+ "path": "artifacts/detection-calibration-smoke/20260801T154642Z/summary/detection-calibration-summary.json",
+ "role": "other",
+ "sha256": "fc0c46b6b36f31fd8f7ff2215f05091b3821b4352e0931eedc7c40254fbd39da",
+ "size_bytes": 683,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:26:55.722947+00:00",
+ "path": "artifacts/model-review/building-be-v1-candidate/corpus-spec.json",
+ "role": "other",
+ "sha256": "17ab579718aab59375a72c8d16bb0c99eb86d09f0b57bb5a818dc69da579c9c7",
+ "size_bytes": 4377,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:26:55.371353+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-background.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 4678004,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:26:55.710836+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-cal.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 5221347,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:26:55.639850+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-contact.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 17317742,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:26:55.435818+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/building-be-v2-test.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 4499487,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-27T21:26:55.307701+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/contact_sheet_001.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 7844374,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": null,
+ "modified_at": "2026-07-27T21:26:55.205724+00:00",
+ "path": "artifacts/model-review/building-be-v1-pilot/corpus-spec.json",
+ "role": "other",
+ "sha256": "0eb2c59f5b0f3592316419bac27759f0072447fce910f2550248487bbbc62733",
+ "size_bytes": 841,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-29T18:20:42.486710+00:00",
+ "path": "artifacts/v42-review/contact_sheet_001.png",
+ "role": "visual_review",
+ "sha256": null,
+ "size_bytes": 9249471,
+ "tracked": false
+ },
+ {
+ "hash_omission_reason": "suffix_or_size_limit",
+ "modified_at": "2026-07-28T09:05:57.994252+00:00",
+ "path": "output/pdf/geointel-case-study.pdf",
+ "role": "other",
+ "sha256": null,
+ "size_bytes": 3896143,
+ "tracked": true
+ }
+ ],
+ "role_counts": {
+ "database_runtime_state": 21,
+ "evaluation_or_audit": 6,
+ "manifest": 5,
+ "other": 32,
+ "raster": 114,
+ "vector": 2,
+ "visual_review": 13
+ },
+ "root_counts": {
+ "artifacts": 30,
+ "data": 27,
+ "datasets": 4,
+ "models": 1,
+ "output": 1,
+ "storage": 130
+ },
+ "roots": [
+ "models",
+ "datasets",
+ "data",
+ "storage",
+ "artifacts",
+ "output"
+ ],
+ "total_size_bytes": 84874287
+}
diff --git a/artifacts/evidence/accuracy/P1/openapi-contract-audit.txt b/artifacts/evidence/accuracy/P1/openapi-contract-audit.txt
index 1622cc90..6b8f8479 100644
--- a/artifacts/evidence/accuracy/P1/openapi-contract-audit.txt
+++ b/artifacts/evidence/accuracy/P1/openapi-contract-audit.txt
@@ -1,5 +1,5 @@
-command=python scripts/audit_api_contracts.py
-exit_code=0
-captured_at=2026-08-01T18:37:24.4984309+02:00
-
-API contract audit OK: 147 implemented routes match docs; 10 explicit non-envelope endpoints tracked.
+command=python scripts/audit_api_contracts.py
+exit_code=0
+captured_at=2026-08-01T18:37:24.4984309+02:00
+
+API contract audit OK: 147 implemented routes match docs; 10 explicit non-envelope endpoints tracked.
diff --git a/artifacts/evidence/accuracy/P1/phase1-baseline-summary.json b/artifacts/evidence/accuracy/P1/phase1-baseline-summary.json
index 945c439b..7a78581b 100644
--- a/artifacts/evidence/accuracy/P1/phase1-baseline-summary.json
+++ b/artifacts/evidence/accuracy/P1/phase1-baseline-summary.json
@@ -1,36 +1,36 @@
-{
- "baseline_scope": [
- "tracked repository state",
- "static code/test/migration inventory",
- "tracked mirror comparison",
- "local artifact inventory",
- "mock/fixture/placeholder/fallback triage signals"
- ],
- "finding_count": 2,
- "findings": [
- {
- "evidence": {
- "paired_different_file_count": 68,
- "tracked_mirror_file_count": 1153
- },
- "id": "P1-REPO-001",
- "severity": "high",
- "title": "Tracked nested repository mirror creates ambiguous source state"
- },
- {
- "id": "P1-ML-LOCAL-001",
- "interpretation": "Production model truth must be verified on the mounted Tower volume.",
- "severity": "info",
- "title": "No local checkpoint is available in the repository checkout"
- }
- ],
- "generated_at": "2026-08-01T15:53:53.482303+00:00",
- "schema_version": 1,
- "separate_required_evidence": [
- "Tower database/storage audit",
- "Tower CUDA/model preflight and representative inference",
- "corpus leakage/duplicate/label/time review",
- "independent human visual review"
- ],
- "status": "findings_present"
-}
+{
+ "baseline_scope": [
+ "tracked repository state",
+ "static code/test/migration inventory",
+ "tracked mirror comparison",
+ "local artifact inventory",
+ "mock/fixture/placeholder/fallback triage signals"
+ ],
+ "finding_count": 2,
+ "findings": [
+ {
+ "evidence": {
+ "paired_different_file_count": 68,
+ "tracked_mirror_file_count": 1153
+ },
+ "id": "P1-REPO-001",
+ "severity": "high",
+ "title": "Tracked nested repository mirror creates ambiguous source state"
+ },
+ {
+ "id": "P1-ML-LOCAL-001",
+ "interpretation": "Production model truth must be verified on the mounted Tower volume.",
+ "severity": "info",
+ "title": "No local checkpoint is available in the repository checkout"
+ }
+ ],
+ "generated_at": "2026-08-01T15:53:53.482303+00:00",
+ "schema_version": 1,
+ "separate_required_evidence": [
+ "Tower database/storage audit",
+ "Tower CUDA/model preflight and representative inference",
+ "corpus leakage/duplicate/label/time review",
+ "independent human visual review"
+ ],
+ "status": "findings_present"
+}
diff --git a/artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt b/artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt
index a642971a..c125d88f 100644
--- a/artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt
+++ b/artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt
@@ -1,6 +1,6 @@
-command=python -m pytest tests/test_accuracy_phase1_baseline.py -q -p no:cacheprovider
-exit_code=0
-captured_at=2026-08-01T18:33:32.0526074+02:00
-
-.... [100%]
-4 passed in 1.24s
+command=python -m pytest tests/test_accuracy_phase1_baseline.py -q -p no:cacheprovider
+exit_code=0
+captured_at=2026-08-01T18:33:32.0526074+02:00
+
+.... [100%]
+4 passed in 1.24s
diff --git a/artifacts/evidence/accuracy/P1/repository-inventory.json b/artifacts/evidence/accuracy/P1/repository-inventory.json
index 718e914a..6ef21f18 100644
--- a/artifacts/evidence/accuracy/P1/repository-inventory.json
+++ b/artifacts/evidence/accuracy/P1/repository-inventory.json
@@ -1,651 +1,651 @@
-{
- "code": {
- "api_route_decorator_count": 148,
- "frontend_test_file_count": 16,
- "groups": {
- "backend": {
- "file_count": 129,
- "line_count": 32583
- },
- "backend_tests": {
- "file_count": 235,
- "line_count": 36067
- },
- "frontend": {
- "file_count": 112,
- "line_count": 23534
- },
- "frontend_e2e": {
- "file_count": 2,
- "line_count": 734
- },
- "migrations": {
- "file_count": 11,
- "line_count": 610
- },
- "root_tests": {
- "file_count": 7,
- "line_count": 261
- },
- "scripts": {
- "file_count": 158,
- "line_count": 43180
- }
- },
- "pytest_test_function_count": 1182
- },
- "generated_at": "2026-08-01T15:53:27.980241+00:00",
- "git": {
- "branch": "codex/geointel-accuracy-program",
- "head": "0c019bb22f816db1e4b7a68379bcad08924d9a21",
- "status_porcelain": [
- " M .gitignore",
- "?? .codex-artifacts/",
- "?? scripts/run_accuracy_phase1_baseline.py"
- ],
- "top_level_tracked_counts": {
- ".codex-input": 109,
- ".dockerignore": 1,
- ".env.example": 1,
- ".gitattributes": 1,
- ".gitea": 1,
- ".github": 4,
- ".gitignore": 1,
- ".gitkeep": 1,
- ".playwright-mcp": 1,
- "AGENTS.md": 1,
- "CHANGELOG.md": 1,
- "CODEX_START.md": 1,
- "M10_UPDATE_MANIFEST.txt": 1,
- "M11_UPDATE_MANIFEST.txt": 1,
- "M12_UPDATE_MANIFEST.txt": 1,
- "M13_UPDATE_MANIFEST.txt": 1,
- "M14_UPDATE_MANIFEST.txt": 1,
- "M5_UPDATE_MANIFEST.txt": 1,
- "M9_UPDATE_MANIFEST.txt": 1,
- "Makefile": 1,
- "README.md": 1,
- "RELEASE_NOTES": 8,
- "VERSION": 1,
- "adr": 7,
- "backend": 406,
- "checklists": 2,
- "contracts": 7,
- "data": 27,
- "datasets": 4,
- "demo": 7,
- "deploy": 13,
- "docker-compose.unraid.yml": 1,
- "docker-compose.yml": 1,
- "docs": 263,
- "exports": 1,
- "fixtures": 12,
- "frontend": 154,
- "geointel": 1153,
- "knowledge": 6,
- "models": 1,
- "output": 1,
- "prompts": 57,
- "release": 1,
- "rfc": 5,
- "scripts": 167,
- "security": 1,
- "skills": 7,
- "storage": 11,
- "test-results": 4,
- "tests": 21,
- "tickets": 14
- },
- "tracked_file_count": 2495
- },
- "migrations": {
- "count": 11,
- "heads_from_static_chain": [
- "202607260001"
- ],
- "missing_revision_identifiers": 0,
- "records": [
- {
- "down_revision": null,
- "path": "backend/alembic/versions/202601110001_initial.py",
- "revision": "202601110001"
- },
- {
- "down_revision": "202601110001",
- "path": "backend/alembic/versions/202601120001_dataset_storage_metadata.py",
- "revision": "202601120001"
- },
- {
- "down_revision": "202601120001",
- "path": "backend/alembic/versions/20260611212435_add_jobs_table.py",
- "revision": "20260611212435"
- },
- {
- "down_revision": "20260611212435",
- "path": "backend/alembic/versions/202606120001_add_dataset_reference_metadata.py",
- "revision": "202606120001"
- },
- {
- "down_revision": "202606120001",
- "path": "backend/alembic/versions/202606120700_sprint7a_persistence_foundation.py",
- "revision": "202606120700"
- },
- {
- "down_revision": "202606120700",
- "path": "backend/alembic/versions/202606120800_sprint8_detection_foundation.py",
- "revision": "202606120800"
- },
- {
- "down_revision": "202606120800",
- "path": "backend/alembic/versions/202606120900_sprint9_segmentation_foundation.py",
- "revision": "202606120900"
- },
- {
- "down_revision": "202606120900",
- "path": "backend/alembic/versions/202607140001_temporal_dataset_foundation.py",
- "revision": "202607140001"
- },
- {
- "down_revision": "202607140001",
- "path": "backend/alembic/versions/202607150001_detection_reviews.py",
- "revision": "202607150001"
- },
- {
- "down_revision": "202607150001",
- "path": "backend/alembic/versions/202607160001_vector_feature_municipality_index.py",
- "revision": "202607160001"
- },
- {
- "down_revision": "202607160001",
- "path": "backend/alembic/versions/202607260001_aoi_operations.py",
- "revision": "202607260001"
- }
- ]
- },
- "repo_root": "C:\\Projects\\geointel",
- "schema_version": 1,
- "tracked_mirror": {
- "different_files": [
- {
- "mirror_sha256": "74a27de50351950c6fa64cea9761f20f88f94500afaa5b0a83d750e260d07139",
- "mirror_size_bytes": 261,
- "path": ".dockerignore",
- "root_sha256": "d6ef949ac81b034249bf8907a47d7fba1265e3cde0abd679a0884f321a57143a",
- "root_size_bytes": 1059
- },
- {
- "mirror_sha256": "68b3c2a8c7cbf56c16ab809af1a40f88aa4bf97f7071f004fe9651ae69952cff",
- "mirror_size_bytes": 6558,
- "path": ".env.example",
- "root_sha256": "53c822e80b04bcc752eb41c5020a2f57345df4c7b7af53054cb6df6320b631da",
- "root_size_bytes": 6657
- },
- {
- "mirror_sha256": "6c6952d6e5fd0f763216617e3bd1ea9e5dbc91174a001a9293dcd54e49b552e7",
- "mirror_size_bytes": 893,
- "path": ".gitignore",
- "root_sha256": "cc7a9c3ee59df1f72789b7e24d195bfce53854fb5be89ba1fd90afb7b9ef41df",
- "root_size_bytes": 1166
- },
- {
- "mirror_sha256": "077058b5c46d1f4069be44cd21deaddce669cf31f04f8ec8f0d2d6d57302be28",
- "mirror_size_bytes": 253593,
- "path": "CHANGELOG.md",
- "root_sha256": "a46d9ca5f69ce5d806d76b30c156d5801fea0158c696004ceb83e0a2fa0548d7",
- "root_size_bytes": 253841
- },
- {
- "mirror_sha256": "b7ad2801709886035ae9b57130d4fb1808d4ee0520fee346bb8553fea7444340",
- "mirror_size_bytes": 9662,
- "path": "README.md",
- "root_sha256": "9834f00b7439b49e6b9b976c1c12a6f94d30231ea10ecb69e7fe48029471bce1",
- "root_size_bytes": 9504
- },
- {
- "mirror_sha256": "fac098f49a784c2c7faff0dec7ab50f7dc9ffe3decdc48d05596d3fb72e7ecff",
- "mirror_size_bytes": 21710,
- "path": "backend/app/core/config.py",
- "root_sha256": "6ac8dce2fcc32a9b47ca7d6bd9355ec5257476a90be7ea10052ff7b6e545cbaa",
- "root_size_bytes": 21547
- },
- {
- "mirror_sha256": "3f8282014fbc66059a7147aee9672a285227c1b5fc596cdc45edff4493ab4246",
- "mirror_size_bytes": 15395,
- "path": "backend/app/main.py",
- "root_sha256": "27947e7b7762ca2226d9710a8438ff0b484cd142d3dbc51d76114d0447362634",
- "root_size_bytes": 18001
- },
- {
- "mirror_sha256": "f6a21cbc3d644d6cee922c8ddfe9ab41e35e9749cfcef2fc77095047fcb53a5e",
- "mirror_size_bytes": 7546,
- "path": "backend/tests/test_auth.py",
- "root_sha256": "df31b406424b96884be1c7427e46a6caad78b6535a5c19924f4a12674ff0dcbf",
- "root_size_bytes": 9638
- },
- {
- "mirror_sha256": "860adf4f218de693856d52e2a31683754e218391643230623f3f02c61a663e40",
- "mirror_size_bytes": 4313,
- "path": "backend/tests/test_belgium_training_loop.py",
- "root_sha256": "f77121b687ecd3fef50782a47a39fb361c3829fbf610fe3937b15c7d06d1fbc2",
- "root_size_bytes": 10919
- },
- {
- "mirror_sha256": "c89fd7a641b2969c72b96fedd1aff23f6c88eec56bfdd3581184365b86c6f0c1",
- "mirror_size_bytes": 1344,
- "path": "backend/tests/test_belgium_training_portfolio.py",
- "root_sha256": "b93152cdf4c5894dbc614529fe9823bb6472fc45cebe24be8ad9cf900d5e98c9",
- "root_size_bytes": 2021
- },
- {
- "mirror_sha256": "8a40fd3f5daa010b203639c5114ff4c080294eb82316a2c3a06aac500cdd2c2e",
- "mirror_size_bytes": 7556,
- "path": "backend/tests/test_building_label_normalization.py",
- "root_sha256": "6236040626f8ab770a1495052fa5c6f25739cef3a2d1d04d7cc3e232e3839421",
- "root_size_bytes": 10317
- },
- {
- "mirror_sha256": "9912c38ef5e24efc7048945dc9e7035c904f504972b56d3b6081561e42b07943",
- "mirror_size_bytes": 20311,
- "path": "backend/tests/test_docker_runtime_config.py",
- "root_sha256": "1e6aea61938d9bb90707d724a186312a4a7475b15b891d69555b52187590b057",
- "root_size_bytes": 20315
- },
- {
- "mirror_sha256": "a91d378320b20ebe1ae5223d2049445802de81df26e86378e2ad33a032a9c643",
- "mirror_size_bytes": 4827,
- "path": "backend/tests/test_failure_driven_yolo_sampling.py",
- "root_sha256": "c4343f42509189ea867b7cf285473b2e1687e55c5238fa7022b44edae06eec37",
- "root_size_bytes": 16948
- },
- {
- "mirror_sha256": "3cf7c2979234bfcb6095630d586731e8b9f2053fbced328c5820997db1bd2fdf",
- "mirror_size_bytes": 4973,
- "path": "backend/tests/test_rc6_supply_chain.py",
- "root_sha256": "d4f0e29bc3a5820b378ffa904052bc0d56c3ccd2133b8406cebadad9ad702d59",
- "root_size_bytes": 4973
- },
- {
- "mirror_sha256": "a175e97aaa2adfc28a37ab175040fd3c4e1c37bf0e28d733564ffd30bc689600",
- "mirror_size_bytes": 1016,
- "path": "backend/tests/test_sam_roof_label_refinement.py",
- "root_sha256": "c4fbab6d9ab2e94ee3014a46979e8489471b7eb375aaccbd7f2ae204c6b6f647",
- "root_size_bytes": 1473
- },
- {
- "mirror_sha256": "fc301f89b6c149d7b012bac3d2942902e74794d84fa18090e5485f1f7102f823",
- "mirror_size_bytes": 12548,
- "path": "backend/tests/test_sprint130_operator_yolo_tile_dataset.py",
- "root_sha256": "ae3caa4d74a5e7ba4db3628ce5dd403b20fc08e37c522a7b85e657d75e11a1b6",
- "root_size_bytes": 12941
- },
- {
- "mirror_sha256": "c6b3f5a1f283c7940140734d35bbc44ec31c6eaadb6363abcb6fcdad4a97f176",
- "mirror_size_bytes": 10437,
- "path": "backend/tests/test_sprint31_unraid_template.py",
- "root_sha256": "cf5f0eaf93510a7ebf70386691513275d0cca69b59d6a86b35d6ba486aa35f21",
- "root_size_bytes": 10611
- },
- {
- "mirror_sha256": "a8fff182a2968b2dae2c561bd23ebc6732b5d3a45fe886641ca9538550a126ce",
- "mirror_size_bytes": 12232,
- "path": "deploy/unraid/Dockerfile.all-in-one",
- "root_sha256": "b30d16b8ac28acef25961674e1cacdb067bd43e3925adcb68a605f0a505eed80",
- "root_size_bytes": 12326
- },
- {
- "mirror_sha256": "cb4f487125c750137420f71b1b31309f596693186dc7e8b0d3f6a49afb69a6b9",
- "mirror_size_bytes": 13687,
- "path": "deploy/unraid/README.md",
- "root_sha256": "8c72e0aa8448f83db73fbf3862280f414d4d31056ee5e8b2176c4356d996c38c",
- "root_size_bytes": 13866
- },
- {
- "mirror_sha256": "9851cb85ae5904b1def720055037ee1dbe3a405b767e76b0cf5c592a84afed7f",
- "mirror_size_bytes": 5541,
- "path": "deploy/unraid/deploy-release.sh",
- "root_sha256": "21c358def5773975e0bfb37a1b2be441b616291a3f62944862abed7d799d3611",
- "root_size_bytes": 7885
- },
- {
- "mirror_sha256": "041d1cfc5d184a93650d650487db9b86d52a80d2ef4ee5fd7528d0ef4ba76459",
- "mirror_size_bytes": 40243,
- "path": "deploy/unraid/geointel-unraid-template.xml",
- "root_sha256": "4d3da0654a308ed938ec745087e6484b710444a08ca5a54304f17934bba8a21f",
- "root_size_bytes": 40252
- },
- {
- "mirror_sha256": "d6ac993c9c08972a521b58136cb2029b89df34c67eb76818d1eeb631d42d3149",
- "mirror_size_bytes": 7839,
- "path": "deploy/unraid/geointel.env.example",
- "root_sha256": "85d7f899827fd17debc1d8cffbe672337b470e5f18c390e587b5341d12c485d5",
- "root_size_bytes": 8329
- },
- {
- "mirror_sha256": "4839b5fd2ddd4d0c2e35b3dee6ae04d1f12ecf17cfe3a07a32d5accca64915b1",
- "mirror_size_bytes": 23318,
- "path": "deploy/unraid/run-dockerman-container.sh",
- "root_sha256": "b5a348f0cd96eb09e81239d1fcbd5ad1395451c1371f0ef3af40446f027a0d2b",
- "root_size_bytes": 23483
- },
- {
- "mirror_sha256": "e5def10ebc15cf796fdbc3de3583fe6b8a761fb90e91ac61300ea363b5503d75",
- "mirror_size_bytes": 10203,
- "path": "docker-compose.unraid.yml",
- "root_sha256": "30d4a6d809306e6ce8cdf5d9cbc5e0f510612db32a9398100e45e09d439f3d25",
- "root_size_bytes": 10202
- },
- {
- "mirror_sha256": "a9071fd2a61c8cfe9a43aed4a378770939d2ae3b35888c433356e017cb8aec48",
- "mirror_size_bytes": 11887,
- "path": "docker-compose.yml",
- "root_sha256": "7e4f93a2ec69548a94556e06d71623e652e23acc311ca24cd56fefd7cda8fcd3",
- "root_size_bytes": 11886
- },
- {
- "mirror_sha256": "427a484990ade76e85d9d7cbba2835095ea4ca08a1b3b9836193ce9835f77231",
- "mirror_size_bytes": 101810,
- "path": "docs/API_CONTRACTS.md",
- "root_sha256": "305db12f3f44fe6287f7b48543df5b4e461e3c22b54fa40f2e900470b9258ae7",
- "root_size_bytes": 102260
- },
- {
- "mirror_sha256": "694f87467374352486c9f134d08a432d94ec15fb3c85d9dbbc69f47a57fc8407",
- "mirror_size_bytes": 6732,
- "path": "docs/BELGIUM_BUILDING_TRAINING_LOOP.md",
- "root_sha256": "39b5032a6d7983fd816440ddcf6fb79d3c4be822145e954aeb3c7f46c2f82701",
- "root_size_bytes": 11239
- },
- {
- "mirror_sha256": "665e8f21c3988909d4428ccc736479111f6118d6c470827f9399d53857f4a204",
- "mirror_size_bytes": 818967,
- "path": "docs/CODEX_EXECUTION_LOG.md",
- "root_sha256": "a91e4c95d30e26eb075f7977ed25f435685f45d54fb889d085274273ef782451",
- "root_size_bytes": 858488
- },
- {
- "mirror_sha256": "e7b135e9550a79472be7ae4974bc699811b4ca4a257f6fcc1ae7ced1781c9e68",
- "mirror_size_bytes": 2785,
- "path": "docs/DEPENDENCY_POLICY.md",
- "root_sha256": "3c2fd4680091c642c4429b5ec68a0d403aaf3cce44c7712c368fc0fbb61ad5c5",
- "root_size_bytes": 2987
- },
- {
- "mirror_sha256": "1cc29d86c7acdf76ebe62782e9aa66ae1dc179f6e6e017d80b6df21217feb05a",
- "mirror_size_bytes": 9480,
- "path": "docs/PROJECT_PROFESSIONALIZATION_AUDIT_2026-07-27.md",
- "root_sha256": "836de43d4c81bdc5748b44a50848226d434dffb05a26fc2813e4abe318d1e537",
- "root_size_bytes": 9597
- },
- {
- "mirror_sha256": "c052edad0eff3e6042642d3e33e75bb5ea718baa49cc562cc4566aa3a3308441",
- "mirror_size_bytes": 66244,
- "path": "docs/TODO.md",
- "root_sha256": "76834351437c69ef63838c6f802e73b844eb0e8c774b3709016b4b8de43ac239",
- "root_size_bytes": 75459
- },
- {
- "mirror_sha256": "70d5fccd4be3f5568b8d022a76aafcd30806366090d3c841e72fd3e80fa7b2cb",
- "mirror_size_bytes": 59353,
- "path": "frontend/src/App.tsx",
- "root_sha256": "05c367d0f321d7f5787825943cd61c07e85742a017567436dd80eaf1d9d60746",
- "root_size_bytes": 59689
- },
- {
- "mirror_sha256": "e6a15ffc9a95c57a2c9710822385e0d7fdf48115b2109cca2ba1533d494a9f7f",
- "mirror_size_bytes": 21860,
- "path": "frontend/src/components/GeoMap.tsx",
- "root_sha256": "64a2fe78846f51c9227ed5927dff9f7b9df4ee3ce04a17cf0d18b4d1595a149f",
- "root_size_bytes": 22935
- },
- {
- "mirror_sha256": "c5202c44be3154ce2cb395681c65d3bde3866603cdbf6f7da8c30a77969e6471",
- "mirror_size_bytes": 6371,
- "path": "frontend/src/components/assistant/GeoAssistantPanel.tsx",
- "root_sha256": "250d8781246a3e7d218699de38c80a9816cf1718fbea8d45b46b1a58bd91768a",
- "root_size_bytes": 7963
- },
- {
- "mirror_sha256": "ab91189c74d1af534334855957f308e48846f1184c4862017c2472c29b687724",
- "mirror_size_bytes": 16246,
- "path": "frontend/src/components/auth/LandingPage.tsx",
- "root_sha256": "dbd1f3df060c62c7340d711db24d0f17444406923a5c05dd32fc56fdeba9fc85",
- "root_size_bytes": 16489
- },
- {
- "mirror_sha256": "a41b9221ba39f1e1f6e07a12e800eaa94ee877a38d550cb48bdb5617dccb85c8",
- "mirror_size_bytes": 50857,
- "path": "frontend/src/components/detection/DetectionLab.tsx",
- "root_sha256": "366e65b6d0aabb50da8b18a9e7c9769ddc03de5f841c367eb8db8b1b54efa171",
- "root_size_bytes": 51643
- },
- {
- "mirror_sha256": "c5a1595e2799d848852f8891856323faa4863f8c1bfcbfbc7f5e6b64cee4d2ed",
- "mirror_size_bytes": 175335,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "root_sha256": "6f57d1ea8201cd97e228a9b562173457a98caf0231b7439b71abdd1a1bef43aa",
- "root_size_bytes": 175688
- },
- {
- "mirror_sha256": "012608ad5ea891bcaeb920c279720aa8f6091a0c6d8735dcf9e33210301a5c84",
- "mirror_size_bytes": 7614,
- "path": "frontend/src/components/overview/OverviewWorkspace.tsx",
- "root_sha256": "4b091b6c3fd4d3a7065604a92267521d549abe8217de2d899fe37405d941d1ce",
- "root_size_bytes": 10080
- },
- {
- "mirror_sha256": "80898f659302de06b50d66d2a54b99c4262f13f574eaaad95a2c6d75c0081d36",
- "mirror_size_bytes": 19502,
- "path": "frontend/src/components/segmentation/SegmentationLab.tsx",
- "root_sha256": "5e4ee646bc6e998d0dc83b0dfc76e055ef39981024b7d00efdafe7cdef9a2dae",
- "root_size_bytes": 19571
- },
- {
- "mirror_sha256": "00a189596cd8752d24392707288d9b557c411738bb860f19c0983db39dd9cd1c",
- "mirror_size_bytes": 2657,
- "path": "frontend/src/components/shell/WorkbenchNavigation.tsx",
- "root_sha256": "2216e8a6158b314ee0ab1661e7ff34dadcb4a5f2917f0f88ce4cc895cfda76e7",
- "root_size_bytes": 2616
- },
- {
- "mirror_sha256": "ef09733b1ba174c9f02dd84eb9e5e1cee87ce3bcfbaf7d5f09c9a16f967ec784",
- "mirror_size_bytes": 4153,
- "path": "frontend/src/hooks/useDemoWorkflow.ts",
- "root_sha256": "15d1b3db25b941285b2ab3460ca4b886e382062550e8a9d2377a62c9fe09a06c",
- "root_size_bytes": 4076
- },
- {
- "mirror_sha256": "074f3e0dc7f94c39899b3c456bbde3c78f9fdd26cbf5664b7af3ad7a048eee58",
- "mirror_size_bytes": 23013,
- "path": "frontend/src/hooks/useDetectionWorkflow.ts",
- "root_sha256": "6a75f632a4b66fdb43c78e4a77b71c21566813b94af07ec49bb9fc9658c438ff",
- "root_size_bytes": 23097
- },
- {
- "mirror_sha256": "a3f4b018086b86364db6adfac28633d6a4d8feaca4f873fabc82bfb45c650a20",
- "mirror_size_bytes": 7570,
- "path": "frontend/src/hooks/useExportWorkflow.ts",
- "root_sha256": "a04b02ea9604ba294f94e2df8a289fdf45f4e014bef2721d1270b28239bff36c",
- "root_size_bytes": 7818
- },
- {
- "mirror_sha256": "05fd1dea79a335a6607a5994bbd39bd83b5c215a352abb2747a02ec1dda0d2fb",
- "mirror_size_bytes": 3695,
- "path": "frontend/src/hooks/useGeoAssistant.ts",
- "root_sha256": "af8d707c8639dca1fe2df735e965c36d74b2696057f82f318ac7dff78564107e",
- "root_size_bytes": 4771
- },
- {
- "mirror_sha256": "b38fda4b32212a3bf12b89183d23c3dadeceb104ae40952bf539785f565273ea",
- "mirror_size_bytes": 3463,
- "path": "frontend/src/hooks/useMapSelectionQa.ts",
- "root_sha256": "0785c198d3860ed330538bbb56ba4745262c3b32fab099164f1ab2d8421526fc",
- "root_size_bytes": 3482
- },
- {
- "mirror_sha256": "75efa3a406a5cfe400a209eadc23317086b4742068599fa492b6f20c075a0a9e",
- "mirror_size_bytes": 4923,
- "path": "frontend/src/hooks/useQualityWorkflow.ts",
- "root_sha256": "662377348c1cfaa462955792166d5752a25056c38d3ce8375799ae46a5c4df11",
- "root_size_bytes": 4942
- },
- {
- "mirror_sha256": "52cf7dd8fae31ec2bcc0f1dbec124319c389bd2c45dea5c6f6aad5b9960a43d5",
- "mirror_size_bytes": 9426,
- "path": "frontend/src/hooks/useSegmentationWorkflow.ts",
- "root_sha256": "1864807b63ecaf778df7f53218fa06a6f30a3fa40e39830e32aad81e9cbedbb4",
- "root_size_bytes": 9491
- },
- {
- "mirror_sha256": "153296d88e9549a9227adc552c614ccbe931658e0174061313ad819e7ff9136b",
- "mirror_size_bytes": 3528,
- "path": "frontend/src/hooks/useWorkbenchBootstrap.test.tsx",
- "root_sha256": "150d755f5f6dbb70404a410eee4ab447a36ce86c90c65ed3528afdd9a2cb1fc2",
- "root_size_bytes": 3565
- },
- {
- "mirror_sha256": "9c19508fd628f004f095e9f29cfaec608c91282dc0b42bb6a96f2fa36da64142",
- "mirror_size_bytes": 3084,
- "path": "frontend/src/hooks/useWorkbenchBootstrap.ts",
- "root_sha256": "86646f79ac20672fe1ba04b8d97c899b8dbad37b53b94a03b9778035fda3a953",
- "root_size_bytes": 2946
- },
- {
- "mirror_sha256": "7441e17e4c9bee54847317fcde7d4520c2c96bc5c78a0c9ceaac7a63cf81186c",
- "mirror_size_bytes": 2536,
- "path": "frontend/src/services/api/detection.ts",
- "root_sha256": "a56da21fb640431b49b1a77530d4b993d1852b9a4adf2811c0f800a9b0a9288b",
- "root_size_bytes": 2682
- },
- {
- "mirror_sha256": "287165ff54e427b30ec574ed995213ad02e7e94220874c8064a57cf6facc417a",
- "mirror_size_bytes": 1804,
- "path": "frontend/src/services/api/exports.ts",
- "root_sha256": "7f9f1da4694143d1c3a768950fb13b894d89f0c37b9cf6160362d1db55c939a3",
- "root_size_bytes": 2253
- },
- {
- "mirror_sha256": "11637de6de25f2830f600d01c4a1a45dedfcdc75ffa9121a218d7e5c7f857d64",
- "mirror_size_bytes": 1725,
- "path": "frontend/src/services/api/qa.ts",
- "root_sha256": "fa3fcfd0a9e0e123bf2b821ae2b2a0d98062eaaae15a0a49dd13f3caed9bfb3c",
- "root_size_bytes": 1788
- },
- {
- "mirror_sha256": "24be3bf6499337864ae2d99fac6409c908b473926e7b31bb61624e2f2563e0ae",
- "mirror_size_bytes": 2178,
- "path": "frontend/src/services/api/segmentation.ts",
- "root_sha256": "f4666f07aea007513a915e30f2c487b54e7eb5f3da171f8aac634c09a60558b2",
- "root_size_bytes": 2324
- },
- {
- "mirror_sha256": "a2aba5359ff65b328a9c01ed966ed29e235bf7020083a086c6815978229a4c6f",
- "mirror_size_bytes": 137520,
- "path": "frontend/src/styles/app.css",
- "root_sha256": "bacced4a7ef1a8253ed4cf6999140230d434f8efcf8654691bbafb1595a7bb44",
- "root_size_bytes": 137816
- },
- {
- "mirror_sha256": "f60090c6ea5046cb8db4bb3e72105baf4b5e4e1aceeae7bee08619d237859c60",
- "mirror_size_bytes": 34362,
- "path": "frontend/src/styles/landing.css",
- "root_sha256": "a21b6568d9a9394cd513107b1b3e2ea616b5e8ea117107264607dcefdcbe74a8",
- "root_size_bytes": 34383
- },
- {
- "mirror_sha256": "ef6c5e988a0558cf5f25a158bcbf968b5a23fa0f2256ea802ffc29776f773dbf",
- "mirror_size_bytes": 4935,
- "path": "scripts/assess_belgium_building_training_iteration.py",
- "root_sha256": "3eb022330efd838bac23f4af1d6b70f3f589f8133797a22a25c20b8a0f9a27ef",
- "root_size_bytes": 4954
- },
- {
- "mirror_sha256": "b50620a8b8d179d2d91a129db50609939f8f28ee272bd5380bca9a11bc6518d4",
- "mirror_size_bytes": 7110,
- "path": "scripts/build_failure_driven_yolo_sampling.py",
- "root_sha256": "35d662a838b78873b6298145f722bc41b38aa96af47be5e4e9f01f96e98422e6",
- "root_size_bytes": 15234
- },
- {
- "mirror_sha256": "22e8c202b49fc3c31fbc3c74fae79855474e3c9fbb9c61710dbbbda7626ba787",
- "mirror_size_bytes": 2986,
- "path": "scripts/build_regional_yolo_dataset.py",
- "root_sha256": "c28f677ff81f94b4a7d0337cec26995b646c2d576da9a0079fb9007e78b5edf8",
- "root_size_bytes": 6874
- },
- {
- "mirror_sha256": "d0f859e810839fc34585f0f65877808bef952452b87c78b236450a1b3107ba4a",
- "mirror_size_bytes": 2652,
- "path": "scripts/deploy_tower.ps1",
- "root_sha256": "5470e5a7ef9ca513e29050d9cc3bc5cff32395420c4c78ae4685302a75cb5196",
- "root_size_bytes": 2967
- },
- {
- "mirror_sha256": "ccef16aaf01ec16a297eec423f993afa705f45dd052919b005a231f087ff7469",
- "mirror_size_bytes": 1471,
- "path": "scripts/deploy_tower.sh",
- "root_sha256": "77e04343e60bd1ef3846a459f8c4b70c0cd539f1900fb8c24fb3964b7062d785",
- "root_size_bytes": 1925
- },
- {
- "mirror_sha256": "c96d6c3bb70a59256870bbbf464e5b5ba1c599e24c38a5c0b8ff19d57fff5930",
- "mirror_size_bytes": 15603,
- "path": "scripts/evaluate_belgium_building_candidate.py",
- "root_sha256": "640312d1de91362b7b906f7e468e9ebf09c80958d11c8cda5e3b1663b85fafde",
- "root_size_bytes": 17832
- },
- {
- "mirror_sha256": "96fe2345e35eeceb5b11c15760b61a33070a2ab2602d623af5cb99b20f37270e",
- "mirror_size_bytes": 28472,
- "path": "scripts/export_operator_yolo_tile_dataset.py",
- "root_sha256": "5e84eae418c5f855bc8bff10f9967a331df40c7736d93ea2ed0905f59fab04a5",
- "root_size_bytes": 29051
- },
- {
- "mirror_sha256": "91275894803fb0913c0786bedd8ff1e3ac46d0e52c28edb2ecd7e4c4f1698cf1",
- "mirror_size_bytes": 13510,
- "path": "scripts/normalize_belgium_building_labels.py",
- "root_sha256": "e231f6e34585531c162807b67fa24721455a56af66fab5b1d72835a8f46db774",
- "root_size_bytes": 14792
- },
- {
- "mirror_sha256": "ba0b5fa26c01c739e74d8791bf17db7159159aceaac79d485cc4e8d61d2c6bba",
- "mirror_size_bytes": 17734,
- "path": "scripts/provision_belgium_building_training_portfolio.py",
- "root_sha256": "17da30d3ea480b4d0d86d5c2a454264202cb02443e4dbef9c082342ccfca08ca",
- "root_size_bytes": 26891
- },
- {
- "mirror_sha256": "5deb04f2563cb30028a34dcd7d5b275855822076495e5d36560ab6674a2a86a2",
- "mirror_size_bytes": 8777,
- "path": "scripts/refine_yolo_labels_with_sam.py",
- "root_sha256": "472985d75d8800e5e15634477bf9f7fcd01ecbf5c67985e25d3ca0872a8dc603",
- "root_size_bytes": 11442
- },
- {
- "mirror_sha256": "5820d017710dae0b4ae518e2db22d8cbab6b72e708be0e7f9c68a9f631f5e6ef",
- "mirror_size_bytes": 16456,
- "path": "scripts/render_operator_yolo_label_qa_contact_sheets.py",
- "root_sha256": "e1a16e5ab2d0b0d50144ac49d7805eb9a1814cc31471c19d109cfa83a295d243",
- "root_size_bytes": 17322
- },
- {
- "mirror_sha256": "06a7f7ba3c067de259c8fce62d3949979fb9296d1665f14a4e6f41039dadc9ae",
- "mirror_size_bytes": 9516,
- "path": "scripts/rotate_belgium_building_holdouts.py",
- "root_sha256": "e0d35afe7c719715b19d7a6b7be75ae64d2c2c65e006cfc798eea3bbf18bedf9",
- "root_size_bytes": 9920
- },
- {
- "mirror_sha256": "2d3677e57c3089fe8a9b9f1d999589d4d938b94b193f24adcfc15f343287df35",
- "mirror_size_bytes": 12958,
- "path": "scripts/run_belgium_building_training_loop.py",
- "root_sha256": "2ec1d535fc7bf41b6278acf7132eff7b91a081067590f2a6949b4a92781d8f3a",
- "root_size_bytes": 20572
- }
- ],
- "paired_different_file_count": 68,
- "paired_identical_file_count": 1085,
- "risk": "The tracked geointel/ repository mirror can create ambiguous imports, stale tests and local/deployment drift; Docker excludes it but local tools may not.",
- "tracked_mirror_file_count": 1153
- }
-}
+{
+ "code": {
+ "api_route_decorator_count": 148,
+ "frontend_test_file_count": 16,
+ "groups": {
+ "backend": {
+ "file_count": 129,
+ "line_count": 32583
+ },
+ "backend_tests": {
+ "file_count": 235,
+ "line_count": 36067
+ },
+ "frontend": {
+ "file_count": 112,
+ "line_count": 23534
+ },
+ "frontend_e2e": {
+ "file_count": 2,
+ "line_count": 734
+ },
+ "migrations": {
+ "file_count": 11,
+ "line_count": 610
+ },
+ "root_tests": {
+ "file_count": 7,
+ "line_count": 261
+ },
+ "scripts": {
+ "file_count": 158,
+ "line_count": 43180
+ }
+ },
+ "pytest_test_function_count": 1182
+ },
+ "generated_at": "2026-08-01T15:53:27.980241+00:00",
+ "git": {
+ "branch": "codex/geointel-accuracy-program",
+ "head": "0c019bb22f816db1e4b7a68379bcad08924d9a21",
+ "status_porcelain": [
+ " M .gitignore",
+ "?? .codex-artifacts/",
+ "?? scripts/run_accuracy_phase1_baseline.py"
+ ],
+ "top_level_tracked_counts": {
+ ".codex-input": 109,
+ ".dockerignore": 1,
+ ".env.example": 1,
+ ".gitattributes": 1,
+ ".gitea": 1,
+ ".github": 4,
+ ".gitignore": 1,
+ ".gitkeep": 1,
+ ".playwright-mcp": 1,
+ "AGENTS.md": 1,
+ "CHANGELOG.md": 1,
+ "CODEX_START.md": 1,
+ "M10_UPDATE_MANIFEST.txt": 1,
+ "M11_UPDATE_MANIFEST.txt": 1,
+ "M12_UPDATE_MANIFEST.txt": 1,
+ "M13_UPDATE_MANIFEST.txt": 1,
+ "M14_UPDATE_MANIFEST.txt": 1,
+ "M5_UPDATE_MANIFEST.txt": 1,
+ "M9_UPDATE_MANIFEST.txt": 1,
+ "Makefile": 1,
+ "README.md": 1,
+ "RELEASE_NOTES": 8,
+ "VERSION": 1,
+ "adr": 7,
+ "backend": 406,
+ "checklists": 2,
+ "contracts": 7,
+ "data": 27,
+ "datasets": 4,
+ "demo": 7,
+ "deploy": 13,
+ "docker-compose.unraid.yml": 1,
+ "docker-compose.yml": 1,
+ "docs": 263,
+ "exports": 1,
+ "fixtures": 12,
+ "frontend": 154,
+ "geointel": 1153,
+ "knowledge": 6,
+ "models": 1,
+ "output": 1,
+ "prompts": 57,
+ "release": 1,
+ "rfc": 5,
+ "scripts": 167,
+ "security": 1,
+ "skills": 7,
+ "storage": 11,
+ "test-results": 4,
+ "tests": 21,
+ "tickets": 14
+ },
+ "tracked_file_count": 2495
+ },
+ "migrations": {
+ "count": 11,
+ "heads_from_static_chain": [
+ "202607260001"
+ ],
+ "missing_revision_identifiers": 0,
+ "records": [
+ {
+ "down_revision": null,
+ "path": "backend/alembic/versions/202601110001_initial.py",
+ "revision": "202601110001"
+ },
+ {
+ "down_revision": "202601110001",
+ "path": "backend/alembic/versions/202601120001_dataset_storage_metadata.py",
+ "revision": "202601120001"
+ },
+ {
+ "down_revision": "202601120001",
+ "path": "backend/alembic/versions/20260611212435_add_jobs_table.py",
+ "revision": "20260611212435"
+ },
+ {
+ "down_revision": "20260611212435",
+ "path": "backend/alembic/versions/202606120001_add_dataset_reference_metadata.py",
+ "revision": "202606120001"
+ },
+ {
+ "down_revision": "202606120001",
+ "path": "backend/alembic/versions/202606120700_sprint7a_persistence_foundation.py",
+ "revision": "202606120700"
+ },
+ {
+ "down_revision": "202606120700",
+ "path": "backend/alembic/versions/202606120800_sprint8_detection_foundation.py",
+ "revision": "202606120800"
+ },
+ {
+ "down_revision": "202606120800",
+ "path": "backend/alembic/versions/202606120900_sprint9_segmentation_foundation.py",
+ "revision": "202606120900"
+ },
+ {
+ "down_revision": "202606120900",
+ "path": "backend/alembic/versions/202607140001_temporal_dataset_foundation.py",
+ "revision": "202607140001"
+ },
+ {
+ "down_revision": "202607140001",
+ "path": "backend/alembic/versions/202607150001_detection_reviews.py",
+ "revision": "202607150001"
+ },
+ {
+ "down_revision": "202607150001",
+ "path": "backend/alembic/versions/202607160001_vector_feature_municipality_index.py",
+ "revision": "202607160001"
+ },
+ {
+ "down_revision": "202607160001",
+ "path": "backend/alembic/versions/202607260001_aoi_operations.py",
+ "revision": "202607260001"
+ }
+ ]
+ },
+ "repo_root": "C:\\Projects\\geointel",
+ "schema_version": 1,
+ "tracked_mirror": {
+ "different_files": [
+ {
+ "mirror_sha256": "74a27de50351950c6fa64cea9761f20f88f94500afaa5b0a83d750e260d07139",
+ "mirror_size_bytes": 261,
+ "path": ".dockerignore",
+ "root_sha256": "d6ef949ac81b034249bf8907a47d7fba1265e3cde0abd679a0884f321a57143a",
+ "root_size_bytes": 1059
+ },
+ {
+ "mirror_sha256": "68b3c2a8c7cbf56c16ab809af1a40f88aa4bf97f7071f004fe9651ae69952cff",
+ "mirror_size_bytes": 6558,
+ "path": ".env.example",
+ "root_sha256": "53c822e80b04bcc752eb41c5020a2f57345df4c7b7af53054cb6df6320b631da",
+ "root_size_bytes": 6657
+ },
+ {
+ "mirror_sha256": "6c6952d6e5fd0f763216617e3bd1ea9e5dbc91174a001a9293dcd54e49b552e7",
+ "mirror_size_bytes": 893,
+ "path": ".gitignore",
+ "root_sha256": "cc7a9c3ee59df1f72789b7e24d195bfce53854fb5be89ba1fd90afb7b9ef41df",
+ "root_size_bytes": 1166
+ },
+ {
+ "mirror_sha256": "077058b5c46d1f4069be44cd21deaddce669cf31f04f8ec8f0d2d6d57302be28",
+ "mirror_size_bytes": 253593,
+ "path": "CHANGELOG.md",
+ "root_sha256": "a46d9ca5f69ce5d806d76b30c156d5801fea0158c696004ceb83e0a2fa0548d7",
+ "root_size_bytes": 253841
+ },
+ {
+ "mirror_sha256": "b7ad2801709886035ae9b57130d4fb1808d4ee0520fee346bb8553fea7444340",
+ "mirror_size_bytes": 9662,
+ "path": "README.md",
+ "root_sha256": "9834f00b7439b49e6b9b976c1c12a6f94d30231ea10ecb69e7fe48029471bce1",
+ "root_size_bytes": 9504
+ },
+ {
+ "mirror_sha256": "fac098f49a784c2c7faff0dec7ab50f7dc9ffe3decdc48d05596d3fb72e7ecff",
+ "mirror_size_bytes": 21710,
+ "path": "backend/app/core/config.py",
+ "root_sha256": "6ac8dce2fcc32a9b47ca7d6bd9355ec5257476a90be7ea10052ff7b6e545cbaa",
+ "root_size_bytes": 21547
+ },
+ {
+ "mirror_sha256": "3f8282014fbc66059a7147aee9672a285227c1b5fc596cdc45edff4493ab4246",
+ "mirror_size_bytes": 15395,
+ "path": "backend/app/main.py",
+ "root_sha256": "27947e7b7762ca2226d9710a8438ff0b484cd142d3dbc51d76114d0447362634",
+ "root_size_bytes": 18001
+ },
+ {
+ "mirror_sha256": "f6a21cbc3d644d6cee922c8ddfe9ab41e35e9749cfcef2fc77095047fcb53a5e",
+ "mirror_size_bytes": 7546,
+ "path": "backend/tests/test_auth.py",
+ "root_sha256": "df31b406424b96884be1c7427e46a6caad78b6535a5c19924f4a12674ff0dcbf",
+ "root_size_bytes": 9638
+ },
+ {
+ "mirror_sha256": "860adf4f218de693856d52e2a31683754e218391643230623f3f02c61a663e40",
+ "mirror_size_bytes": 4313,
+ "path": "backend/tests/test_belgium_training_loop.py",
+ "root_sha256": "f77121b687ecd3fef50782a47a39fb361c3829fbf610fe3937b15c7d06d1fbc2",
+ "root_size_bytes": 10919
+ },
+ {
+ "mirror_sha256": "c89fd7a641b2969c72b96fedd1aff23f6c88eec56bfdd3581184365b86c6f0c1",
+ "mirror_size_bytes": 1344,
+ "path": "backend/tests/test_belgium_training_portfolio.py",
+ "root_sha256": "b93152cdf4c5894dbc614529fe9823bb6472fc45cebe24be8ad9cf900d5e98c9",
+ "root_size_bytes": 2021
+ },
+ {
+ "mirror_sha256": "8a40fd3f5daa010b203639c5114ff4c080294eb82316a2c3a06aac500cdd2c2e",
+ "mirror_size_bytes": 7556,
+ "path": "backend/tests/test_building_label_normalization.py",
+ "root_sha256": "6236040626f8ab770a1495052fa5c6f25739cef3a2d1d04d7cc3e232e3839421",
+ "root_size_bytes": 10317
+ },
+ {
+ "mirror_sha256": "9912c38ef5e24efc7048945dc9e7035c904f504972b56d3b6081561e42b07943",
+ "mirror_size_bytes": 20311,
+ "path": "backend/tests/test_docker_runtime_config.py",
+ "root_sha256": "1e6aea61938d9bb90707d724a186312a4a7475b15b891d69555b52187590b057",
+ "root_size_bytes": 20315
+ },
+ {
+ "mirror_sha256": "a91d378320b20ebe1ae5223d2049445802de81df26e86378e2ad33a032a9c643",
+ "mirror_size_bytes": 4827,
+ "path": "backend/tests/test_failure_driven_yolo_sampling.py",
+ "root_sha256": "c4343f42509189ea867b7cf285473b2e1687e55c5238fa7022b44edae06eec37",
+ "root_size_bytes": 16948
+ },
+ {
+ "mirror_sha256": "3cf7c2979234bfcb6095630d586731e8b9f2053fbced328c5820997db1bd2fdf",
+ "mirror_size_bytes": 4973,
+ "path": "backend/tests/test_rc6_supply_chain.py",
+ "root_sha256": "d4f0e29bc3a5820b378ffa904052bc0d56c3ccd2133b8406cebadad9ad702d59",
+ "root_size_bytes": 4973
+ },
+ {
+ "mirror_sha256": "a175e97aaa2adfc28a37ab175040fd3c4e1c37bf0e28d733564ffd30bc689600",
+ "mirror_size_bytes": 1016,
+ "path": "backend/tests/test_sam_roof_label_refinement.py",
+ "root_sha256": "c4fbab6d9ab2e94ee3014a46979e8489471b7eb375aaccbd7f2ae204c6b6f647",
+ "root_size_bytes": 1473
+ },
+ {
+ "mirror_sha256": "fc301f89b6c149d7b012bac3d2942902e74794d84fa18090e5485f1f7102f823",
+ "mirror_size_bytes": 12548,
+ "path": "backend/tests/test_sprint130_operator_yolo_tile_dataset.py",
+ "root_sha256": "ae3caa4d74a5e7ba4db3628ce5dd403b20fc08e37c522a7b85e657d75e11a1b6",
+ "root_size_bytes": 12941
+ },
+ {
+ "mirror_sha256": "c6b3f5a1f283c7940140734d35bbc44ec31c6eaadb6363abcb6fcdad4a97f176",
+ "mirror_size_bytes": 10437,
+ "path": "backend/tests/test_sprint31_unraid_template.py",
+ "root_sha256": "cf5f0eaf93510a7ebf70386691513275d0cca69b59d6a86b35d6ba486aa35f21",
+ "root_size_bytes": 10611
+ },
+ {
+ "mirror_sha256": "a8fff182a2968b2dae2c561bd23ebc6732b5d3a45fe886641ca9538550a126ce",
+ "mirror_size_bytes": 12232,
+ "path": "deploy/unraid/Dockerfile.all-in-one",
+ "root_sha256": "b30d16b8ac28acef25961674e1cacdb067bd43e3925adcb68a605f0a505eed80",
+ "root_size_bytes": 12326
+ },
+ {
+ "mirror_sha256": "cb4f487125c750137420f71b1b31309f596693186dc7e8b0d3f6a49afb69a6b9",
+ "mirror_size_bytes": 13687,
+ "path": "deploy/unraid/README.md",
+ "root_sha256": "8c72e0aa8448f83db73fbf3862280f414d4d31056ee5e8b2176c4356d996c38c",
+ "root_size_bytes": 13866
+ },
+ {
+ "mirror_sha256": "9851cb85ae5904b1def720055037ee1dbe3a405b767e76b0cf5c592a84afed7f",
+ "mirror_size_bytes": 5541,
+ "path": "deploy/unraid/deploy-release.sh",
+ "root_sha256": "21c358def5773975e0bfb37a1b2be441b616291a3f62944862abed7d799d3611",
+ "root_size_bytes": 7885
+ },
+ {
+ "mirror_sha256": "041d1cfc5d184a93650d650487db9b86d52a80d2ef4ee5fd7528d0ef4ba76459",
+ "mirror_size_bytes": 40243,
+ "path": "deploy/unraid/geointel-unraid-template.xml",
+ "root_sha256": "4d3da0654a308ed938ec745087e6484b710444a08ca5a54304f17934bba8a21f",
+ "root_size_bytes": 40252
+ },
+ {
+ "mirror_sha256": "d6ac993c9c08972a521b58136cb2029b89df34c67eb76818d1eeb631d42d3149",
+ "mirror_size_bytes": 7839,
+ "path": "deploy/unraid/geointel.env.example",
+ "root_sha256": "85d7f899827fd17debc1d8cffbe672337b470e5f18c390e587b5341d12c485d5",
+ "root_size_bytes": 8329
+ },
+ {
+ "mirror_sha256": "4839b5fd2ddd4d0c2e35b3dee6ae04d1f12ecf17cfe3a07a32d5accca64915b1",
+ "mirror_size_bytes": 23318,
+ "path": "deploy/unraid/run-dockerman-container.sh",
+ "root_sha256": "b5a348f0cd96eb09e81239d1fcbd5ad1395451c1371f0ef3af40446f027a0d2b",
+ "root_size_bytes": 23483
+ },
+ {
+ "mirror_sha256": "e5def10ebc15cf796fdbc3de3583fe6b8a761fb90e91ac61300ea363b5503d75",
+ "mirror_size_bytes": 10203,
+ "path": "docker-compose.unraid.yml",
+ "root_sha256": "30d4a6d809306e6ce8cdf5d9cbc5e0f510612db32a9398100e45e09d439f3d25",
+ "root_size_bytes": 10202
+ },
+ {
+ "mirror_sha256": "a9071fd2a61c8cfe9a43aed4a378770939d2ae3b35888c433356e017cb8aec48",
+ "mirror_size_bytes": 11887,
+ "path": "docker-compose.yml",
+ "root_sha256": "7e4f93a2ec69548a94556e06d71623e652e23acc311ca24cd56fefd7cda8fcd3",
+ "root_size_bytes": 11886
+ },
+ {
+ "mirror_sha256": "427a484990ade76e85d9d7cbba2835095ea4ca08a1b3b9836193ce9835f77231",
+ "mirror_size_bytes": 101810,
+ "path": "docs/API_CONTRACTS.md",
+ "root_sha256": "305db12f3f44fe6287f7b48543df5b4e461e3c22b54fa40f2e900470b9258ae7",
+ "root_size_bytes": 102260
+ },
+ {
+ "mirror_sha256": "694f87467374352486c9f134d08a432d94ec15fb3c85d9dbbc69f47a57fc8407",
+ "mirror_size_bytes": 6732,
+ "path": "docs/BELGIUM_BUILDING_TRAINING_LOOP.md",
+ "root_sha256": "39b5032a6d7983fd816440ddcf6fb79d3c4be822145e954aeb3c7f46c2f82701",
+ "root_size_bytes": 11239
+ },
+ {
+ "mirror_sha256": "665e8f21c3988909d4428ccc736479111f6118d6c470827f9399d53857f4a204",
+ "mirror_size_bytes": 818967,
+ "path": "docs/CODEX_EXECUTION_LOG.md",
+ "root_sha256": "a91e4c95d30e26eb075f7977ed25f435685f45d54fb889d085274273ef782451",
+ "root_size_bytes": 858488
+ },
+ {
+ "mirror_sha256": "e7b135e9550a79472be7ae4974bc699811b4ca4a257f6fcc1ae7ced1781c9e68",
+ "mirror_size_bytes": 2785,
+ "path": "docs/DEPENDENCY_POLICY.md",
+ "root_sha256": "3c2fd4680091c642c4429b5ec68a0d403aaf3cce44c7712c368fc0fbb61ad5c5",
+ "root_size_bytes": 2987
+ },
+ {
+ "mirror_sha256": "1cc29d86c7acdf76ebe62782e9aa66ae1dc179f6e6e017d80b6df21217feb05a",
+ "mirror_size_bytes": 9480,
+ "path": "docs/PROJECT_PROFESSIONALIZATION_AUDIT_2026-07-27.md",
+ "root_sha256": "836de43d4c81bdc5748b44a50848226d434dffb05a26fc2813e4abe318d1e537",
+ "root_size_bytes": 9597
+ },
+ {
+ "mirror_sha256": "c052edad0eff3e6042642d3e33e75bb5ea718baa49cc562cc4566aa3a3308441",
+ "mirror_size_bytes": 66244,
+ "path": "docs/TODO.md",
+ "root_sha256": "76834351437c69ef63838c6f802e73b844eb0e8c774b3709016b4b8de43ac239",
+ "root_size_bytes": 75459
+ },
+ {
+ "mirror_sha256": "70d5fccd4be3f5568b8d022a76aafcd30806366090d3c841e72fd3e80fa7b2cb",
+ "mirror_size_bytes": 59353,
+ "path": "frontend/src/App.tsx",
+ "root_sha256": "05c367d0f321d7f5787825943cd61c07e85742a017567436dd80eaf1d9d60746",
+ "root_size_bytes": 59689
+ },
+ {
+ "mirror_sha256": "e6a15ffc9a95c57a2c9710822385e0d7fdf48115b2109cca2ba1533d494a9f7f",
+ "mirror_size_bytes": 21860,
+ "path": "frontend/src/components/GeoMap.tsx",
+ "root_sha256": "64a2fe78846f51c9227ed5927dff9f7b9df4ee3ce04a17cf0d18b4d1595a149f",
+ "root_size_bytes": 22935
+ },
+ {
+ "mirror_sha256": "c5202c44be3154ce2cb395681c65d3bde3866603cdbf6f7da8c30a77969e6471",
+ "mirror_size_bytes": 6371,
+ "path": "frontend/src/components/assistant/GeoAssistantPanel.tsx",
+ "root_sha256": "250d8781246a3e7d218699de38c80a9816cf1718fbea8d45b46b1a58bd91768a",
+ "root_size_bytes": 7963
+ },
+ {
+ "mirror_sha256": "ab91189c74d1af534334855957f308e48846f1184c4862017c2472c29b687724",
+ "mirror_size_bytes": 16246,
+ "path": "frontend/src/components/auth/LandingPage.tsx",
+ "root_sha256": "dbd1f3df060c62c7340d711db24d0f17444406923a5c05dd32fc56fdeba9fc85",
+ "root_size_bytes": 16489
+ },
+ {
+ "mirror_sha256": "a41b9221ba39f1e1f6e07a12e800eaa94ee877a38d550cb48bdb5617dccb85c8",
+ "mirror_size_bytes": 50857,
+ "path": "frontend/src/components/detection/DetectionLab.tsx",
+ "root_sha256": "366e65b6d0aabb50da8b18a9e7c9769ddc03de5f841c367eb8db8b1b54efa171",
+ "root_size_bytes": 51643
+ },
+ {
+ "mirror_sha256": "c5a1595e2799d848852f8891856323faa4863f8c1bfcbfbc7f5e6b64cee4d2ed",
+ "mirror_size_bytes": 175335,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "root_sha256": "6f57d1ea8201cd97e228a9b562173457a98caf0231b7439b71abdd1a1bef43aa",
+ "root_size_bytes": 175688
+ },
+ {
+ "mirror_sha256": "012608ad5ea891bcaeb920c279720aa8f6091a0c6d8735dcf9e33210301a5c84",
+ "mirror_size_bytes": 7614,
+ "path": "frontend/src/components/overview/OverviewWorkspace.tsx",
+ "root_sha256": "4b091b6c3fd4d3a7065604a92267521d549abe8217de2d899fe37405d941d1ce",
+ "root_size_bytes": 10080
+ },
+ {
+ "mirror_sha256": "80898f659302de06b50d66d2a54b99c4262f13f574eaaad95a2c6d75c0081d36",
+ "mirror_size_bytes": 19502,
+ "path": "frontend/src/components/segmentation/SegmentationLab.tsx",
+ "root_sha256": "5e4ee646bc6e998d0dc83b0dfc76e055ef39981024b7d00efdafe7cdef9a2dae",
+ "root_size_bytes": 19571
+ },
+ {
+ "mirror_sha256": "00a189596cd8752d24392707288d9b557c411738bb860f19c0983db39dd9cd1c",
+ "mirror_size_bytes": 2657,
+ "path": "frontend/src/components/shell/WorkbenchNavigation.tsx",
+ "root_sha256": "2216e8a6158b314ee0ab1661e7ff34dadcb4a5f2917f0f88ce4cc895cfda76e7",
+ "root_size_bytes": 2616
+ },
+ {
+ "mirror_sha256": "ef09733b1ba174c9f02dd84eb9e5e1cee87ce3bcfbaf7d5f09c9a16f967ec784",
+ "mirror_size_bytes": 4153,
+ "path": "frontend/src/hooks/useDemoWorkflow.ts",
+ "root_sha256": "15d1b3db25b941285b2ab3460ca4b886e382062550e8a9d2377a62c9fe09a06c",
+ "root_size_bytes": 4076
+ },
+ {
+ "mirror_sha256": "074f3e0dc7f94c39899b3c456bbde3c78f9fdd26cbf5664b7af3ad7a048eee58",
+ "mirror_size_bytes": 23013,
+ "path": "frontend/src/hooks/useDetectionWorkflow.ts",
+ "root_sha256": "6a75f632a4b66fdb43c78e4a77b71c21566813b94af07ec49bb9fc9658c438ff",
+ "root_size_bytes": 23097
+ },
+ {
+ "mirror_sha256": "a3f4b018086b86364db6adfac28633d6a4d8feaca4f873fabc82bfb45c650a20",
+ "mirror_size_bytes": 7570,
+ "path": "frontend/src/hooks/useExportWorkflow.ts",
+ "root_sha256": "a04b02ea9604ba294f94e2df8a289fdf45f4e014bef2721d1270b28239bff36c",
+ "root_size_bytes": 7818
+ },
+ {
+ "mirror_sha256": "05fd1dea79a335a6607a5994bbd39bd83b5c215a352abb2747a02ec1dda0d2fb",
+ "mirror_size_bytes": 3695,
+ "path": "frontend/src/hooks/useGeoAssistant.ts",
+ "root_sha256": "af8d707c8639dca1fe2df735e965c36d74b2696057f82f318ac7dff78564107e",
+ "root_size_bytes": 4771
+ },
+ {
+ "mirror_sha256": "b38fda4b32212a3bf12b89183d23c3dadeceb104ae40952bf539785f565273ea",
+ "mirror_size_bytes": 3463,
+ "path": "frontend/src/hooks/useMapSelectionQa.ts",
+ "root_sha256": "0785c198d3860ed330538bbb56ba4745262c3b32fab099164f1ab2d8421526fc",
+ "root_size_bytes": 3482
+ },
+ {
+ "mirror_sha256": "75efa3a406a5cfe400a209eadc23317086b4742068599fa492b6f20c075a0a9e",
+ "mirror_size_bytes": 4923,
+ "path": "frontend/src/hooks/useQualityWorkflow.ts",
+ "root_sha256": "662377348c1cfaa462955792166d5752a25056c38d3ce8375799ae46a5c4df11",
+ "root_size_bytes": 4942
+ },
+ {
+ "mirror_sha256": "52cf7dd8fae31ec2bcc0f1dbec124319c389bd2c45dea5c6f6aad5b9960a43d5",
+ "mirror_size_bytes": 9426,
+ "path": "frontend/src/hooks/useSegmentationWorkflow.ts",
+ "root_sha256": "1864807b63ecaf778df7f53218fa06a6f30a3fa40e39830e32aad81e9cbedbb4",
+ "root_size_bytes": 9491
+ },
+ {
+ "mirror_sha256": "153296d88e9549a9227adc552c614ccbe931658e0174061313ad819e7ff9136b",
+ "mirror_size_bytes": 3528,
+ "path": "frontend/src/hooks/useWorkbenchBootstrap.test.tsx",
+ "root_sha256": "150d755f5f6dbb70404a410eee4ab447a36ce86c90c65ed3528afdd9a2cb1fc2",
+ "root_size_bytes": 3565
+ },
+ {
+ "mirror_sha256": "9c19508fd628f004f095e9f29cfaec608c91282dc0b42bb6a96f2fa36da64142",
+ "mirror_size_bytes": 3084,
+ "path": "frontend/src/hooks/useWorkbenchBootstrap.ts",
+ "root_sha256": "86646f79ac20672fe1ba04b8d97c899b8dbad37b53b94a03b9778035fda3a953",
+ "root_size_bytes": 2946
+ },
+ {
+ "mirror_sha256": "7441e17e4c9bee54847317fcde7d4520c2c96bc5c78a0c9ceaac7a63cf81186c",
+ "mirror_size_bytes": 2536,
+ "path": "frontend/src/services/api/detection.ts",
+ "root_sha256": "a56da21fb640431b49b1a77530d4b993d1852b9a4adf2811c0f800a9b0a9288b",
+ "root_size_bytes": 2682
+ },
+ {
+ "mirror_sha256": "287165ff54e427b30ec574ed995213ad02e7e94220874c8064a57cf6facc417a",
+ "mirror_size_bytes": 1804,
+ "path": "frontend/src/services/api/exports.ts",
+ "root_sha256": "7f9f1da4694143d1c3a768950fb13b894d89f0c37b9cf6160362d1db55c939a3",
+ "root_size_bytes": 2253
+ },
+ {
+ "mirror_sha256": "11637de6de25f2830f600d01c4a1a45dedfcdc75ffa9121a218d7e5c7f857d64",
+ "mirror_size_bytes": 1725,
+ "path": "frontend/src/services/api/qa.ts",
+ "root_sha256": "fa3fcfd0a9e0e123bf2b821ae2b2a0d98062eaaae15a0a49dd13f3caed9bfb3c",
+ "root_size_bytes": 1788
+ },
+ {
+ "mirror_sha256": "24be3bf6499337864ae2d99fac6409c908b473926e7b31bb61624e2f2563e0ae",
+ "mirror_size_bytes": 2178,
+ "path": "frontend/src/services/api/segmentation.ts",
+ "root_sha256": "f4666f07aea007513a915e30f2c487b54e7eb5f3da171f8aac634c09a60558b2",
+ "root_size_bytes": 2324
+ },
+ {
+ "mirror_sha256": "a2aba5359ff65b328a9c01ed966ed29e235bf7020083a086c6815978229a4c6f",
+ "mirror_size_bytes": 137520,
+ "path": "frontend/src/styles/app.css",
+ "root_sha256": "bacced4a7ef1a8253ed4cf6999140230d434f8efcf8654691bbafb1595a7bb44",
+ "root_size_bytes": 137816
+ },
+ {
+ "mirror_sha256": "f60090c6ea5046cb8db4bb3e72105baf4b5e4e1aceeae7bee08619d237859c60",
+ "mirror_size_bytes": 34362,
+ "path": "frontend/src/styles/landing.css",
+ "root_sha256": "a21b6568d9a9394cd513107b1b3e2ea616b5e8ea117107264607dcefdcbe74a8",
+ "root_size_bytes": 34383
+ },
+ {
+ "mirror_sha256": "ef6c5e988a0558cf5f25a158bcbf968b5a23fa0f2256ea802ffc29776f773dbf",
+ "mirror_size_bytes": 4935,
+ "path": "scripts/assess_belgium_building_training_iteration.py",
+ "root_sha256": "3eb022330efd838bac23f4af1d6b70f3f589f8133797a22a25c20b8a0f9a27ef",
+ "root_size_bytes": 4954
+ },
+ {
+ "mirror_sha256": "b50620a8b8d179d2d91a129db50609939f8f28ee272bd5380bca9a11bc6518d4",
+ "mirror_size_bytes": 7110,
+ "path": "scripts/build_failure_driven_yolo_sampling.py",
+ "root_sha256": "35d662a838b78873b6298145f722bc41b38aa96af47be5e4e9f01f96e98422e6",
+ "root_size_bytes": 15234
+ },
+ {
+ "mirror_sha256": "22e8c202b49fc3c31fbc3c74fae79855474e3c9fbb9c61710dbbbda7626ba787",
+ "mirror_size_bytes": 2986,
+ "path": "scripts/build_regional_yolo_dataset.py",
+ "root_sha256": "c28f677ff81f94b4a7d0337cec26995b646c2d576da9a0079fb9007e78b5edf8",
+ "root_size_bytes": 6874
+ },
+ {
+ "mirror_sha256": "d0f859e810839fc34585f0f65877808bef952452b87c78b236450a1b3107ba4a",
+ "mirror_size_bytes": 2652,
+ "path": "scripts/deploy_tower.ps1",
+ "root_sha256": "5470e5a7ef9ca513e29050d9cc3bc5cff32395420c4c78ae4685302a75cb5196",
+ "root_size_bytes": 2967
+ },
+ {
+ "mirror_sha256": "ccef16aaf01ec16a297eec423f993afa705f45dd052919b005a231f087ff7469",
+ "mirror_size_bytes": 1471,
+ "path": "scripts/deploy_tower.sh",
+ "root_sha256": "77e04343e60bd1ef3846a459f8c4b70c0cd539f1900fb8c24fb3964b7062d785",
+ "root_size_bytes": 1925
+ },
+ {
+ "mirror_sha256": "c96d6c3bb70a59256870bbbf464e5b5ba1c599e24c38a5c0b8ff19d57fff5930",
+ "mirror_size_bytes": 15603,
+ "path": "scripts/evaluate_belgium_building_candidate.py",
+ "root_sha256": "640312d1de91362b7b906f7e468e9ebf09c80958d11c8cda5e3b1663b85fafde",
+ "root_size_bytes": 17832
+ },
+ {
+ "mirror_sha256": "96fe2345e35eeceb5b11c15760b61a33070a2ab2602d623af5cb99b20f37270e",
+ "mirror_size_bytes": 28472,
+ "path": "scripts/export_operator_yolo_tile_dataset.py",
+ "root_sha256": "5e84eae418c5f855bc8bff10f9967a331df40c7736d93ea2ed0905f59fab04a5",
+ "root_size_bytes": 29051
+ },
+ {
+ "mirror_sha256": "91275894803fb0913c0786bedd8ff1e3ac46d0e52c28edb2ecd7e4c4f1698cf1",
+ "mirror_size_bytes": 13510,
+ "path": "scripts/normalize_belgium_building_labels.py",
+ "root_sha256": "e231f6e34585531c162807b67fa24721455a56af66fab5b1d72835a8f46db774",
+ "root_size_bytes": 14792
+ },
+ {
+ "mirror_sha256": "ba0b5fa26c01c739e74d8791bf17db7159159aceaac79d485cc4e8d61d2c6bba",
+ "mirror_size_bytes": 17734,
+ "path": "scripts/provision_belgium_building_training_portfolio.py",
+ "root_sha256": "17da30d3ea480b4d0d86d5c2a454264202cb02443e4dbef9c082342ccfca08ca",
+ "root_size_bytes": 26891
+ },
+ {
+ "mirror_sha256": "5deb04f2563cb30028a34dcd7d5b275855822076495e5d36560ab6674a2a86a2",
+ "mirror_size_bytes": 8777,
+ "path": "scripts/refine_yolo_labels_with_sam.py",
+ "root_sha256": "472985d75d8800e5e15634477bf9f7fcd01ecbf5c67985e25d3ca0872a8dc603",
+ "root_size_bytes": 11442
+ },
+ {
+ "mirror_sha256": "5820d017710dae0b4ae518e2db22d8cbab6b72e708be0e7f9c68a9f631f5e6ef",
+ "mirror_size_bytes": 16456,
+ "path": "scripts/render_operator_yolo_label_qa_contact_sheets.py",
+ "root_sha256": "e1a16e5ab2d0b0d50144ac49d7805eb9a1814cc31471c19d109cfa83a295d243",
+ "root_size_bytes": 17322
+ },
+ {
+ "mirror_sha256": "06a7f7ba3c067de259c8fce62d3949979fb9296d1665f14a4e6f41039dadc9ae",
+ "mirror_size_bytes": 9516,
+ "path": "scripts/rotate_belgium_building_holdouts.py",
+ "root_sha256": "e0d35afe7c719715b19d7a6b7be75ae64d2c2c65e006cfc798eea3bbf18bedf9",
+ "root_size_bytes": 9920
+ },
+ {
+ "mirror_sha256": "2d3677e57c3089fe8a9b9f1d999589d4d938b94b193f24adcfc15f343287df35",
+ "mirror_size_bytes": 12958,
+ "path": "scripts/run_belgium_building_training_loop.py",
+ "root_sha256": "2ec1d535fc7bf41b6278acf7132eff7b91a081067590f2a6949b4a92781d8f3a",
+ "root_size_bytes": 20572
+ }
+ ],
+ "paired_different_file_count": 68,
+ "paired_identical_file_count": 1085,
+ "risk": "The tracked geointel/ repository mirror can create ambiguous imports, stale tests and local/deployment drift; Docker excludes it but local tools may not.",
+ "tracked_mirror_file_count": 1153
+ }
+}
diff --git a/artifacts/evidence/accuracy/P1/repository-ruff-baseline.json b/artifacts/evidence/accuracy/P1/repository-ruff-baseline.json
index c464b1a9..b9136dfc 100644
--- a/artifacts/evidence/accuracy/P1/repository-ruff-baseline.json
+++ b/artifacts/evidence/accuracy/P1/repository-ruff-baseline.json
@@ -1,2226 +1,2226 @@
-[
- {
- "cell": null,
- "code": "F403",
- "end_location": {
- "column": 25,
- "row": 1
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\models.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 1
- },
- "message": "`from app.models import *` used; unable to detect undefined names",
- "noqa_row": 1,
- "url": "https://docs.astral.sh/ruff/rules/undefined-local-with-import-star"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 27,
- "row": 101
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
- "fix": null,
- "location": {
- "column": 5,
- "row": 101
- },
- "message": "`.bathymetry.BathymetryRasterMetric` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
- "noqa_row": 101,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 37,
- "row": 102
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
- "fix": null,
- "location": {
- "column": 5,
- "row": 102
- },
- "message": "`.bathymetry.BathymetryRasterSelectionRequest` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
- "noqa_row": 102,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 38,
- "row": 103
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
- "fix": null,
- "location": {
- "column": 5,
- "row": 103
- },
- "message": "`.bathymetry.BathymetryRasterSelectionResponse` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
- "noqa_row": 103,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 37,
- "row": 104
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
- "fix": null,
- "location": {
- "column": 5,
- "row": 104
- },
- "message": "`.bathymetry.BathymetryRasterSelectionSummary` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
- "noqa_row": 104,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 56
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_executor.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 56
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 56,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 38,
- "row": 210
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 37,
- "row": 210
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 210,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 66,
- "row": 210
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 65,
- "row": 210
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 210,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 96,
- "row": 210
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 95,
- "row": 210
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 210,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 38,
- "row": 211
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 37,
- "row": 211
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 211,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 212
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 212
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 212,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 46,
- "row": 212
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 45,
- "row": 212
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 212,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 59,
- "row": 212
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 58,
- "row": 212
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 212,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 48,
- "row": 220
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 47,
- "row": 220
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 220,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 67,
- "row": 220
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 66,
- "row": 220
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 220,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 80,
- "row": 220
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 79,
- "row": 220
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 220,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 64,
- "row": 230
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 63,
- "row": 230
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 230,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 96,
- "row": 230
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 95,
- "row": 230
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 230,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 231
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 231
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 231,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 40,
- "row": 231
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 39,
- "row": 231
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 231,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 43,
- "row": 237
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 42,
- "row": 237
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 237,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 240
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 240
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 240,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 40,
- "row": 240
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 39,
- "row": 240
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 240,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 56,
- "row": 245
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 55,
- "row": 245
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 245,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 42,
- "row": 272
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 41,
- "row": 272
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 272,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 71,
- "row": 272
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 70,
- "row": 272
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 272,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 120,
- "row": 274
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 119,
- "row": 274
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 274,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 276
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 276
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 276,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "F841",
- "end_location": {
- "column": 17,
- "row": 253
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\demo_workflow_service.py",
- "fix": {
- "applicability": "unsafe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 20,
- "row": 253
- },
- "location": {
- "column": 9,
- "row": 253
- }
- }
- ],
- "message": "Remove assignment to unused variable `rasterio`"
- },
- "location": {
- "column": 9,
- "row": 253
- },
- "message": "Local variable `rasterio` is assigned to but never used",
- "noqa_row": 253,
- "url": "https://docs.astral.sh/ruff/rules/unused-variable"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 23,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\detection_review_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 5
- },
- "location": {
- "column": 1,
- "row": 4
- }
- }
- ],
- "message": "Remove unused import: `typing.Any`"
- },
- "location": {
- "column": 20,
- "row": 4
- },
- "message": "`typing.Any` imported but unused",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 35,
- "row": 14
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\qa_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 15
- },
- "location": {
- "column": 1,
- "row": 14
- }
- }
- ],
- "message": "Remove unused import: `shapely.geometry.shape`"
- },
- "location": {
- "column": 30,
- "row": 14
- },
- "message": "`shapely.geometry.shape` imported but unused",
- "noqa_row": 14,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 28,
- "row": 409
- },
- "filename": "C:\\Projects\\geointel\\backend\\app\\services\\thematic_raster_acquisition_service.py",
- "fix": null,
- "location": {
- "column": 20,
- "row": 409
- },
- "message": "`rasterio` imported but unused; consider using `importlib.util.find_spec` to test for availability",
- "noqa_row": 409,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 41,
- "row": 17
- },
- "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 17
- },
- "message": "Module level import not at top of file",
- "noqa_row": 17,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 40,
- "row": 18
- },
- "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 18
- },
- "message": "Module level import not at top of file",
- "noqa_row": 18,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 39,
- "row": 19
- },
- "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 19
- },
- "message": "Module level import not at top of file",
- "noqa_row": 19,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 77,
- "row": 20
- },
- "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 20
- },
- "message": "Module level import not at top of file",
- "noqa_row": 20,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "F841",
- "end_location": {
- "column": 11,
- "row": 189
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_auth.py",
- "fix": {
- "applicability": "unsafe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 14,
- "row": 189
- },
- "location": {
- "column": 5,
- "row": 189
- }
- }
- ],
- "message": "Remove assignment to unused variable `client`"
- },
- "location": {
- "column": 5,
- "row": 189
- },
- "message": "Local variable `client` is assigned to but never used",
- "noqa_row": 189,
- "url": "https://docs.astral.sh/ruff/rules/unused-variable"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 34,
- "row": 5
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_qa_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 6
- },
- "location": {
- "column": 1,
- "row": 5
- }
- }
- ],
- "message": "Remove unused import: `types.SimpleNamespace`"
- },
- "location": {
- "column": 19,
- "row": 5
- },
- "message": "`types.SimpleNamespace` imported but unused",
- "noqa_row": 5,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 28,
- "row": 8
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_qa_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from app.models import Dataset",
- "end_location": {
- "column": 37,
- "row": 8
- },
- "location": {
- "column": 1,
- "row": 8
- }
- }
- ],
- "message": "Remove unused import: `app.models.Area`"
- },
- "location": {
- "column": 24,
- "row": 8
- },
- "message": "`app.models.Area` imported but unused",
- "noqa_row": 8,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 29,
- "row": 3
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_raster_operations_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from types import SimpleNamespace",
- "end_location": {
- "column": 46,
- "row": 3
- },
- "location": {
- "column": 1,
- "row": 3
- }
- }
- ],
- "message": "Remove unused import: `types.ModuleType`"
- },
- "location": {
- "column": 19,
- "row": 3
- },
- "message": "`types.ModuleType` imported but unused",
- "noqa_row": 3,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 46,
- "row": 10
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint108_map_selection_derived_dataset.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from app.models import Dataset",
- "end_location": {
- "column": 46,
- "row": 10
- },
- "location": {
- "column": 1,
- "row": 10
- }
- }
- ],
- "message": "Remove unused import: `app.models.VectorFeature`"
- },
- "location": {
- "column": 33,
- "row": 10
- },
- "message": "`app.models.VectorFeature` imported but unused",
- "noqa_row": 10,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 12,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint205_agricultural_parcel_history.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 5
- },
- "location": {
- "column": 1,
- "row": 4
- }
- }
- ],
- "message": "Remove unused import: `json`"
- },
- "location": {
- "column": 8,
- "row": 4
- },
- "message": "`json` imported but unused",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F811",
- "end_location": {
- "column": 13,
- "row": 79
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint205_agricultural_parcel_history.py",
- "fix": null,
- "location": {
- "column": 9,
- "row": 79
- },
- "message": "Redefinition of unused `json` from line 4",
- "noqa_row": 79,
- "url": "https://docs.astral.sh/ruff/rules/redefined-while-unused"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 16,
- "row": 10
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint213_thematic_rasters.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 11
- },
- "location": {
- "column": 1,
- "row": 10
- }
- }
- ],
- "message": "Remove unused import: `rasterio`"
- },
- "location": {
- "column": 8,
- "row": 10
- },
- "message": "`rasterio` imported but unused",
- "noqa_row": 10,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 34,
- "row": 5
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint233_operational_completion.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 6
- },
- "location": {
- "column": 1,
- "row": 5
- }
- }
- ],
- "message": "Remove unused import: `types.SimpleNamespace`"
- },
- "location": {
- "column": 19,
- "row": 5
- },
- "message": "`types.SimpleNamespace` imported but unused",
- "noqa_row": 5,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 12,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint236_bathymetry_expansion.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 5
- },
- "location": {
- "column": 1,
- "row": 4
- }
- }
- ],
- "message": "Remove unused import: `json`"
- },
- "location": {
- "column": 8,
- "row": 4
- },
- "message": "`json` imported but unused",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F811",
- "end_location": {
- "column": 13,
- "row": 59
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint236_bathymetry_expansion.py",
- "fix": null,
- "location": {
- "column": 9,
- "row": 59
- },
- "message": "Redefinition of unused `json` from line 4",
- "noqa_row": 59,
- "url": "https://docs.astral.sh/ruff/rules/redefined-while-unused"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 10,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint241_spw_bathymetry_raster.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 5
- },
- "location": {
- "column": 1,
- "row": 4
- }
- }
- ],
- "message": "Remove unused import: `io`"
- },
- "location": {
- "column": 8,
- "row": 4
- },
- "message": "`io` imported but unused",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 34,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\backend\\tests\\test_vector_operations_service.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 5
- },
- "location": {
- "column": 1,
- "row": 4
- }
- }
- ],
- "message": "Remove unused import: `types.SimpleNamespace`"
- },
- "location": {
- "column": 19,
- "row": 4
- },
- "message": "`types.SimpleNamespace` imported but unused",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 40,
- "row": 20
- },
- "filename": "C:\\Projects\\geointel\\scripts\\archive_technical_projects.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 20
- },
- "message": "Module level import not at top of file",
- "noqa_row": 20,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 31,
- "row": 21
- },
- "filename": "C:\\Projects\\geointel\\scripts\\archive_technical_projects.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 21
- },
- "message": "Module level import not at top of file",
- "noqa_row": 21,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 41,
- "row": 23
- },
- "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 23
- },
- "message": "Module level import not at top of file",
- "noqa_row": 23,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 40,
- "row": 24
- },
- "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 24
- },
- "message": "Module level import not at top of file",
- "noqa_row": 24,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 28,
- "row": 25
- },
- "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 25
- },
- "message": "Module level import not at top of file",
- "noqa_row": 25,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 107,
- "row": 27
- },
- "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 27
- },
- "message": "Module level import not at top of file",
- "noqa_row": 27,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 69,
- "row": 20
- },
- "filename": "C:\\Projects\\geointel\\scripts\\build_building_proposal_classifier_dataset.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 20
- },
- "message": "Module level import not at top of file",
- "noqa_row": 20,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 127
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 127
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 127,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 30,
- "row": 137
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 29,
- "row": 137
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 137,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 30,
- "row": 138
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 29,
- "row": 138
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 138,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 55,
- "row": 138
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 54,
- "row": 138
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 138,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 29,
- "row": 139
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 28,
- "row": 139
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 139,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 55,
- "row": 139
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 54,
- "row": 139
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 139,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 41,
- "row": 146
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 40,
- "row": 146
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 146,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 25,
- "row": 157
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 24,
- "row": 157
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 157,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 26,
- "row": 158
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 25,
- "row": 158
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 158,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 51,
- "row": 158
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 50,
- "row": 158
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 158,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 159
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 159
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 159,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 53,
- "row": 159
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 52,
- "row": 159
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 159,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 41,
- "row": 160
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 40,
- "row": 160
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 160,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 61,
- "row": 160
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 60,
- "row": 160
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 160,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 43,
- "row": 169
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 42,
- "row": 169
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 169,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 62,
- "row": 169
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 61,
- "row": 169
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 169,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 45,
- "row": 172
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 44,
- "row": 172
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 172,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 30,
- "row": 173
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 29,
- "row": 173
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 173,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 55,
- "row": 173
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 54,
- "row": 173
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 173,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 31,
- "row": 174
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 30,
- "row": 174
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 174,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 57,
- "row": 174
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 56,
- "row": 174
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 174,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 45,
- "row": 175
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 44,
- "row": 175
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 175,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 67,
- "row": 175
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 66,
- "row": 175
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 175,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 50,
- "row": 176
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 49,
- "row": 176
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 176,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 182
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 182
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 182,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 80,
- "row": 193
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 79,
- "row": 193
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 193,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 61,
- "row": 194
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 60,
- "row": 194
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 194,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 86,
- "row": 194
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 85,
- "row": 194
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 194,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 77,
- "row": 195
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 76,
- "row": 195
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 195,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 99,
- "row": 195
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 98,
- "row": 195
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 195,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 28,
- "row": 196
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 27,
- "row": 196
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 196,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 29,
- "row": 199
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 28,
- "row": 199
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 199,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 41,
- "row": 206
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 40,
- "row": 206
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 206,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 26,
- "row": 207
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 25,
- "row": 207
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 207,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 51,
- "row": 207
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 50,
- "row": 207
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 207,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 208
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 208
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 208,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 53,
- "row": 208
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 52,
- "row": 208
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 208,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 41,
- "row": 209
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 40,
- "row": 209
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 209,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 62,
- "row": 209
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 61,
- "row": 209
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 209,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 45,
- "row": 219
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 44,
- "row": 219
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 219,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 30,
- "row": 220
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 29,
- "row": 220
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 220,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 56,
- "row": 220
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 55,
- "row": 220
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 220,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 27,
- "row": 222
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 26,
- "row": 222
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 222,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 53,
- "row": 222
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 52,
- "row": 222
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 222,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 41,
- "row": 223
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 40,
- "row": 223
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 223,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "E702",
- "end_location": {
- "column": 61,
- "row": 223
- },
- "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
- "fix": null,
- "location": {
- "column": 60,
- "row": 223
- },
- "message": "Multiple statements on one line (semicolon)",
- "noqa_row": 223,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 18,
- "row": 46
- },
- "filename": "C:\\Projects\\geointel\\scripts\\provision_regional_grb_context.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from provision_regional_grb_buildings import (\n DEFAULT_API_URL,\n DEFAULT_MAX_FEATURES_PER_MEMBER,\n DEFAULT_MAX_TOTAL_FEATURES,\n DEFAULT_OUTPUT_ROOT,\n DEFAULT_PAGE_LIMIT,\n DEFAULT_SCOPE_KEY,\n GEOJSON_CRS,\n GRB_ATTRIBUTION,\n bounds_overlap,\n build_member_geometries,\n build_source_session,\n ensure_backend_path,\n list_paginated_items,\n next_page_url,\n observed_at,\n reusable_manifest,\n safe_slug,\n sha256_file,\n utc_now,\n write_json_atomic,\n)",
- "end_location": {
- "column": 2,
- "row": 52
- },
- "location": {
- "column": 1,
- "row": 30
- }
- }
- ],
- "message": "Remove unused import: `provision_regional_grb_buildings.response_data`"
- },
- "location": {
- "column": 5,
- "row": 46
- },
- "message": "`provision_regional_grb_buildings.response_data` imported but unused",
- "noqa_row": 46,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 35,
- "row": 26
- },
- "filename": "C:\\Projects\\geointel\\scripts\\provision_waterinfo_station_history.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from shapely.geometry import shape",
- "end_location": {
- "column": 51,
- "row": 26
- },
- "location": {
- "column": 1,
- "row": 26
- }
- }
- ],
- "message": "Remove unused import"
- },
- "location": {
- "column": 30,
- "row": 26
- },
- "message": "`shapely.geometry.Point` imported but unused",
- "noqa_row": 26,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 44,
- "row": 26
- },
- "filename": "C:\\Projects\\geointel\\scripts\\provision_waterinfo_station_history.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from shapely.geometry import shape",
- "end_location": {
- "column": 51,
- "row": 26
- },
- "location": {
- "column": 1,
- "row": 26
- }
- }
- ],
- "message": "Remove unused import"
- },
- "location": {
- "column": 37,
- "row": 26
- },
- "message": "`shapely.geometry.mapping` imported but unused",
- "noqa_row": 26,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 23,
- "row": 14
- },
- "filename": "C:\\Projects\\geointel\\scripts\\refine_yolo_labels_with_sam.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "",
- "end_location": {
- "column": 1,
- "row": 15
- },
- "location": {
- "column": 1,
- "row": 14
- }
- }
- ],
- "message": "Remove unused import: `typing.Any`"
- },
- "location": {
- "column": 20,
- "row": 14
- },
- "message": "`typing.Any` imported but unused",
- "noqa_row": 14,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 28,
- "row": 15
- },
- "filename": "C:\\Projects\\geointel\\scripts\\run_golden_qa_benchmark.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from app.models import Dataset, Metric, QualityCheck",
- "end_location": {
- "column": 59,
- "row": 15
- },
- "location": {
- "column": 1,
- "row": 15
- }
- }
- ],
- "message": "Remove unused import: `app.models.Area`"
- },
- "location": {
- "column": 24,
- "row": 15
- },
- "message": "`app.models.Area` imported but unused",
- "noqa_row": 15,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 40,
- "row": 11
- },
- "filename": "C:\\Projects\\geointel\\scripts\\seed_demo_workflow.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 11
- },
- "message": "Module level import not at top of file",
- "noqa_row": 11,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E402",
- "end_location": {
- "column": 67,
- "row": 12
- },
- "filename": "C:\\Projects\\geointel\\scripts\\seed_demo_workflow.py",
- "fix": null,
- "location": {
- "column": 1,
- "row": 12
- },
- "message": "Module level import not at top of file",
- "noqa_row": 12,
- "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
- },
- {
- "cell": null,
- "code": "E701",
- "end_location": {
- "column": 12,
- "row": 4
- },
- "filename": "C:\\Projects\\geointel\\scripts\\smoke_contracts.py",
- "fix": null,
- "location": {
- "column": 11,
- "row": 4
- },
- "message": "Multiple statements on one line (colon)",
- "noqa_row": 4,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon"
- },
- {
- "cell": null,
- "code": "E701",
- "end_location": {
- "column": 12,
- "row": 5
- },
- "filename": "C:\\Projects\\geointel\\scripts\\smoke_docs.py",
- "fix": null,
- "location": {
- "column": 11,
- "row": 5
- },
- "message": "Multiple statements on one line (colon)",
- "noqa_row": 5,
- "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon"
- },
- {
- "cell": null,
- "code": "F401",
- "end_location": {
- "column": 49,
- "row": 136
- },
- "filename": "C:\\Projects\\geointel\\scripts\\train_building_proposal_filter.py",
- "fix": {
- "applicability": "safe",
- "edits": [
- {
- "content": "from torchvision import datasets",
- "end_location": {
- "column": 49,
- "row": 136
- },
- "location": {
- "column": 5,
- "row": 136
- }
- }
- ],
- "message": "Remove unused import: `torchvision.transforms`"
- },
- "location": {
- "column": 39,
- "row": 136
- },
- "message": "`torchvision.transforms` imported but unused",
- "noqa_row": 136,
- "url": "https://docs.astral.sh/ruff/rules/unused-import"
- }
-]
+[
+ {
+ "cell": null,
+ "code": "F403",
+ "end_location": {
+ "column": 25,
+ "row": 1
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\models.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 1
+ },
+ "message": "`from app.models import *` used; unable to detect undefined names",
+ "noqa_row": 1,
+ "url": "https://docs.astral.sh/ruff/rules/undefined-local-with-import-star"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 27,
+ "row": 101
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
+ "fix": null,
+ "location": {
+ "column": 5,
+ "row": 101
+ },
+ "message": "`.bathymetry.BathymetryRasterMetric` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
+ "noqa_row": 101,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 37,
+ "row": 102
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
+ "fix": null,
+ "location": {
+ "column": 5,
+ "row": 102
+ },
+ "message": "`.bathymetry.BathymetryRasterSelectionRequest` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
+ "noqa_row": 102,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 38,
+ "row": 103
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
+ "fix": null,
+ "location": {
+ "column": 5,
+ "row": 103
+ },
+ "message": "`.bathymetry.BathymetryRasterSelectionResponse` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
+ "noqa_row": 103,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 37,
+ "row": 104
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\schemas\\__init__.py",
+ "fix": null,
+ "location": {
+ "column": 5,
+ "row": 104
+ },
+ "message": "`.bathymetry.BathymetryRasterSelectionSummary` imported but unused; consider removing, adding to `__all__`, or using a redundant alias",
+ "noqa_row": 104,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 56
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_executor.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 56
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 56,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 38,
+ "row": 210
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 37,
+ "row": 210
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 210,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 66,
+ "row": 210
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 65,
+ "row": 210
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 210,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 96,
+ "row": 210
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 95,
+ "row": 210
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 210,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 38,
+ "row": 211
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 37,
+ "row": 211
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 211,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 212
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 212
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 212,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 46,
+ "row": 212
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 45,
+ "row": 212
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 212,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 59,
+ "row": 212
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 58,
+ "row": 212
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 212,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 48,
+ "row": 220
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 47,
+ "row": 220
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 220,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 67,
+ "row": 220
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 66,
+ "row": 220
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 220,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 80,
+ "row": 220
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 79,
+ "row": 220
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 220,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 64,
+ "row": 230
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 63,
+ "row": 230
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 230,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 96,
+ "row": 230
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 95,
+ "row": 230
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 230,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 231
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 231
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 231,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 40,
+ "row": 231
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 39,
+ "row": 231
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 231,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 43,
+ "row": 237
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 42,
+ "row": 237
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 237,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 240
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 240
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 240,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 40,
+ "row": 240
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 39,
+ "row": 240
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 240,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 56,
+ "row": 245
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 55,
+ "row": 245
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 245,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 42,
+ "row": 272
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 41,
+ "row": 272
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 272,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 71,
+ "row": 272
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 70,
+ "row": 272
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 272,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 120,
+ "row": 274
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 119,
+ "row": 274
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 274,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 276
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\aoi_operation_service.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 276
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 276,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "F841",
+ "end_location": {
+ "column": 17,
+ "row": 253
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\demo_workflow_service.py",
+ "fix": {
+ "applicability": "unsafe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 20,
+ "row": 253
+ },
+ "location": {
+ "column": 9,
+ "row": 253
+ }
+ }
+ ],
+ "message": "Remove assignment to unused variable `rasterio`"
+ },
+ "location": {
+ "column": 9,
+ "row": 253
+ },
+ "message": "Local variable `rasterio` is assigned to but never used",
+ "noqa_row": 253,
+ "url": "https://docs.astral.sh/ruff/rules/unused-variable"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 23,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\detection_review_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 5
+ },
+ "location": {
+ "column": 1,
+ "row": 4
+ }
+ }
+ ],
+ "message": "Remove unused import: `typing.Any`"
+ },
+ "location": {
+ "column": 20,
+ "row": 4
+ },
+ "message": "`typing.Any` imported but unused",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 35,
+ "row": 14
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\qa_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 15
+ },
+ "location": {
+ "column": 1,
+ "row": 14
+ }
+ }
+ ],
+ "message": "Remove unused import: `shapely.geometry.shape`"
+ },
+ "location": {
+ "column": 30,
+ "row": 14
+ },
+ "message": "`shapely.geometry.shape` imported but unused",
+ "noqa_row": 14,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 28,
+ "row": 409
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\app\\services\\thematic_raster_acquisition_service.py",
+ "fix": null,
+ "location": {
+ "column": 20,
+ "row": 409
+ },
+ "message": "`rasterio` imported but unused; consider using `importlib.util.find_spec` to test for availability",
+ "noqa_row": 409,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 41,
+ "row": 17
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 17
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 17,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 40,
+ "row": 18
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 18
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 18,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 39,
+ "row": 19
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 19
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 19,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 77,
+ "row": 20
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\scripts\\cleanup_demo_artifacts.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 20
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 20,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "F841",
+ "end_location": {
+ "column": 11,
+ "row": 189
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_auth.py",
+ "fix": {
+ "applicability": "unsafe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 14,
+ "row": 189
+ },
+ "location": {
+ "column": 5,
+ "row": 189
+ }
+ }
+ ],
+ "message": "Remove assignment to unused variable `client`"
+ },
+ "location": {
+ "column": 5,
+ "row": 189
+ },
+ "message": "Local variable `client` is assigned to but never used",
+ "noqa_row": 189,
+ "url": "https://docs.astral.sh/ruff/rules/unused-variable"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 34,
+ "row": 5
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_qa_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 6
+ },
+ "location": {
+ "column": 1,
+ "row": 5
+ }
+ }
+ ],
+ "message": "Remove unused import: `types.SimpleNamespace`"
+ },
+ "location": {
+ "column": 19,
+ "row": 5
+ },
+ "message": "`types.SimpleNamespace` imported but unused",
+ "noqa_row": 5,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 28,
+ "row": 8
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_qa_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from app.models import Dataset",
+ "end_location": {
+ "column": 37,
+ "row": 8
+ },
+ "location": {
+ "column": 1,
+ "row": 8
+ }
+ }
+ ],
+ "message": "Remove unused import: `app.models.Area`"
+ },
+ "location": {
+ "column": 24,
+ "row": 8
+ },
+ "message": "`app.models.Area` imported but unused",
+ "noqa_row": 8,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 29,
+ "row": 3
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_raster_operations_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from types import SimpleNamespace",
+ "end_location": {
+ "column": 46,
+ "row": 3
+ },
+ "location": {
+ "column": 1,
+ "row": 3
+ }
+ }
+ ],
+ "message": "Remove unused import: `types.ModuleType`"
+ },
+ "location": {
+ "column": 19,
+ "row": 3
+ },
+ "message": "`types.ModuleType` imported but unused",
+ "noqa_row": 3,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 46,
+ "row": 10
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint108_map_selection_derived_dataset.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from app.models import Dataset",
+ "end_location": {
+ "column": 46,
+ "row": 10
+ },
+ "location": {
+ "column": 1,
+ "row": 10
+ }
+ }
+ ],
+ "message": "Remove unused import: `app.models.VectorFeature`"
+ },
+ "location": {
+ "column": 33,
+ "row": 10
+ },
+ "message": "`app.models.VectorFeature` imported but unused",
+ "noqa_row": 10,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 12,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint205_agricultural_parcel_history.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 5
+ },
+ "location": {
+ "column": 1,
+ "row": 4
+ }
+ }
+ ],
+ "message": "Remove unused import: `json`"
+ },
+ "location": {
+ "column": 8,
+ "row": 4
+ },
+ "message": "`json` imported but unused",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F811",
+ "end_location": {
+ "column": 13,
+ "row": 79
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint205_agricultural_parcel_history.py",
+ "fix": null,
+ "location": {
+ "column": 9,
+ "row": 79
+ },
+ "message": "Redefinition of unused `json` from line 4",
+ "noqa_row": 79,
+ "url": "https://docs.astral.sh/ruff/rules/redefined-while-unused"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 16,
+ "row": 10
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint213_thematic_rasters.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 11
+ },
+ "location": {
+ "column": 1,
+ "row": 10
+ }
+ }
+ ],
+ "message": "Remove unused import: `rasterio`"
+ },
+ "location": {
+ "column": 8,
+ "row": 10
+ },
+ "message": "`rasterio` imported but unused",
+ "noqa_row": 10,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 34,
+ "row": 5
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint233_operational_completion.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 6
+ },
+ "location": {
+ "column": 1,
+ "row": 5
+ }
+ }
+ ],
+ "message": "Remove unused import: `types.SimpleNamespace`"
+ },
+ "location": {
+ "column": 19,
+ "row": 5
+ },
+ "message": "`types.SimpleNamespace` imported but unused",
+ "noqa_row": 5,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 12,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint236_bathymetry_expansion.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 5
+ },
+ "location": {
+ "column": 1,
+ "row": 4
+ }
+ }
+ ],
+ "message": "Remove unused import: `json`"
+ },
+ "location": {
+ "column": 8,
+ "row": 4
+ },
+ "message": "`json` imported but unused",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F811",
+ "end_location": {
+ "column": 13,
+ "row": 59
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint236_bathymetry_expansion.py",
+ "fix": null,
+ "location": {
+ "column": 9,
+ "row": 59
+ },
+ "message": "Redefinition of unused `json` from line 4",
+ "noqa_row": 59,
+ "url": "https://docs.astral.sh/ruff/rules/redefined-while-unused"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 10,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_sprint241_spw_bathymetry_raster.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 5
+ },
+ "location": {
+ "column": 1,
+ "row": 4
+ }
+ }
+ ],
+ "message": "Remove unused import: `io`"
+ },
+ "location": {
+ "column": 8,
+ "row": 4
+ },
+ "message": "`io` imported but unused",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 34,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\backend\\tests\\test_vector_operations_service.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 5
+ },
+ "location": {
+ "column": 1,
+ "row": 4
+ }
+ }
+ ],
+ "message": "Remove unused import: `types.SimpleNamespace`"
+ },
+ "location": {
+ "column": 19,
+ "row": 4
+ },
+ "message": "`types.SimpleNamespace` imported but unused",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 40,
+ "row": 20
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\archive_technical_projects.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 20
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 20,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 31,
+ "row": 21
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\archive_technical_projects.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 21
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 21,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 41,
+ "row": 23
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 23
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 23,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 40,
+ "row": 24
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 24
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 24,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 28,
+ "row": 25
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 25
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 25,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 107,
+ "row": 27
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\audit_data_operations.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 27
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 27,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 69,
+ "row": 20
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\build_building_proposal_classifier_dataset.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 20
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 20,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 127
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 127
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 127,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 30,
+ "row": 137
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 29,
+ "row": 137
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 137,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 30,
+ "row": 138
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 29,
+ "row": 138
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 138,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 55,
+ "row": 138
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 54,
+ "row": 138
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 138,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 29,
+ "row": 139
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 28,
+ "row": 139
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 139,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 55,
+ "row": 139
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 54,
+ "row": 139
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 139,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 41,
+ "row": 146
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 40,
+ "row": 146
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 146,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 25,
+ "row": 157
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 24,
+ "row": 157
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 157,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 26,
+ "row": 158
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 25,
+ "row": 158
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 158,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 51,
+ "row": 158
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 50,
+ "row": 158
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 158,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 159
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 159
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 159,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 53,
+ "row": 159
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 52,
+ "row": 159
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 159,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 41,
+ "row": 160
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 40,
+ "row": 160
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 160,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 61,
+ "row": 160
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 60,
+ "row": 160
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 160,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 43,
+ "row": 169
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 42,
+ "row": 169
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 169,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 62,
+ "row": 169
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 61,
+ "row": 169
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 169,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 45,
+ "row": 172
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 44,
+ "row": 172
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 172,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 30,
+ "row": 173
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 29,
+ "row": 173
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 173,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 55,
+ "row": 173
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 54,
+ "row": 173
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 173,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 31,
+ "row": 174
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 30,
+ "row": 174
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 174,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 57,
+ "row": 174
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 56,
+ "row": 174
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 174,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 45,
+ "row": 175
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 44,
+ "row": 175
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 175,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 67,
+ "row": 175
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 66,
+ "row": 175
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 175,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 50,
+ "row": 176
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 49,
+ "row": 176
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 176,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 182
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 182
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 182,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 80,
+ "row": 193
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 79,
+ "row": 193
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 193,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 61,
+ "row": 194
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 60,
+ "row": 194
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 194,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 86,
+ "row": 194
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 85,
+ "row": 194
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 194,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 77,
+ "row": 195
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 76,
+ "row": 195
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 195,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 99,
+ "row": 195
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 98,
+ "row": 195
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 195,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 28,
+ "row": 196
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 27,
+ "row": 196
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 196,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 29,
+ "row": 199
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 28,
+ "row": 199
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 199,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 41,
+ "row": 206
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 40,
+ "row": 206
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 206,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 26,
+ "row": 207
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 25,
+ "row": 207
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 207,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 51,
+ "row": 207
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 50,
+ "row": 207
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 207,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 208
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 208
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 208,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 53,
+ "row": 208
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 52,
+ "row": 208
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 208,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 41,
+ "row": 209
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 40,
+ "row": 209
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 209,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 62,
+ "row": 209
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 61,
+ "row": 209
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 209,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 45,
+ "row": 219
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 44,
+ "row": 219
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 219,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 30,
+ "row": 220
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 29,
+ "row": 220
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 220,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 56,
+ "row": 220
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 55,
+ "row": 220
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 220,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 27,
+ "row": 222
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 26,
+ "row": 222
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 222,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 53,
+ "row": 222
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 52,
+ "row": 222
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 222,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 41,
+ "row": 223
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 40,
+ "row": 223
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 223,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "E702",
+ "end_location": {
+ "column": 61,
+ "row": 223
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\create_portfolio_case_study.py",
+ "fix": null,
+ "location": {
+ "column": 60,
+ "row": 223
+ },
+ "message": "Multiple statements on one line (semicolon)",
+ "noqa_row": 223,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-semicolon"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 18,
+ "row": 46
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\provision_regional_grb_context.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from provision_regional_grb_buildings import (\n DEFAULT_API_URL,\n DEFAULT_MAX_FEATURES_PER_MEMBER,\n DEFAULT_MAX_TOTAL_FEATURES,\n DEFAULT_OUTPUT_ROOT,\n DEFAULT_PAGE_LIMIT,\n DEFAULT_SCOPE_KEY,\n GEOJSON_CRS,\n GRB_ATTRIBUTION,\n bounds_overlap,\n build_member_geometries,\n build_source_session,\n ensure_backend_path,\n list_paginated_items,\n next_page_url,\n observed_at,\n reusable_manifest,\n safe_slug,\n sha256_file,\n utc_now,\n write_json_atomic,\n)",
+ "end_location": {
+ "column": 2,
+ "row": 52
+ },
+ "location": {
+ "column": 1,
+ "row": 30
+ }
+ }
+ ],
+ "message": "Remove unused import: `provision_regional_grb_buildings.response_data`"
+ },
+ "location": {
+ "column": 5,
+ "row": 46
+ },
+ "message": "`provision_regional_grb_buildings.response_data` imported but unused",
+ "noqa_row": 46,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 35,
+ "row": 26
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\provision_waterinfo_station_history.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from shapely.geometry import shape",
+ "end_location": {
+ "column": 51,
+ "row": 26
+ },
+ "location": {
+ "column": 1,
+ "row": 26
+ }
+ }
+ ],
+ "message": "Remove unused import"
+ },
+ "location": {
+ "column": 30,
+ "row": 26
+ },
+ "message": "`shapely.geometry.Point` imported but unused",
+ "noqa_row": 26,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 44,
+ "row": 26
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\provision_waterinfo_station_history.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from shapely.geometry import shape",
+ "end_location": {
+ "column": 51,
+ "row": 26
+ },
+ "location": {
+ "column": 1,
+ "row": 26
+ }
+ }
+ ],
+ "message": "Remove unused import"
+ },
+ "location": {
+ "column": 37,
+ "row": 26
+ },
+ "message": "`shapely.geometry.mapping` imported but unused",
+ "noqa_row": 26,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 23,
+ "row": 14
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\refine_yolo_labels_with_sam.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "",
+ "end_location": {
+ "column": 1,
+ "row": 15
+ },
+ "location": {
+ "column": 1,
+ "row": 14
+ }
+ }
+ ],
+ "message": "Remove unused import: `typing.Any`"
+ },
+ "location": {
+ "column": 20,
+ "row": 14
+ },
+ "message": "`typing.Any` imported but unused",
+ "noqa_row": 14,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 28,
+ "row": 15
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\run_golden_qa_benchmark.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from app.models import Dataset, Metric, QualityCheck",
+ "end_location": {
+ "column": 59,
+ "row": 15
+ },
+ "location": {
+ "column": 1,
+ "row": 15
+ }
+ }
+ ],
+ "message": "Remove unused import: `app.models.Area`"
+ },
+ "location": {
+ "column": 24,
+ "row": 15
+ },
+ "message": "`app.models.Area` imported but unused",
+ "noqa_row": 15,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 40,
+ "row": 11
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\seed_demo_workflow.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 11
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 11,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E402",
+ "end_location": {
+ "column": 67,
+ "row": 12
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\seed_demo_workflow.py",
+ "fix": null,
+ "location": {
+ "column": 1,
+ "row": 12
+ },
+ "message": "Module level import not at top of file",
+ "noqa_row": 12,
+ "url": "https://docs.astral.sh/ruff/rules/module-import-not-at-top-of-file"
+ },
+ {
+ "cell": null,
+ "code": "E701",
+ "end_location": {
+ "column": 12,
+ "row": 4
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\smoke_contracts.py",
+ "fix": null,
+ "location": {
+ "column": 11,
+ "row": 4
+ },
+ "message": "Multiple statements on one line (colon)",
+ "noqa_row": 4,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon"
+ },
+ {
+ "cell": null,
+ "code": "E701",
+ "end_location": {
+ "column": 12,
+ "row": 5
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\smoke_docs.py",
+ "fix": null,
+ "location": {
+ "column": 11,
+ "row": 5
+ },
+ "message": "Multiple statements on one line (colon)",
+ "noqa_row": 5,
+ "url": "https://docs.astral.sh/ruff/rules/multiple-statements-on-one-line-colon"
+ },
+ {
+ "cell": null,
+ "code": "F401",
+ "end_location": {
+ "column": 49,
+ "row": 136
+ },
+ "filename": "C:\\Projects\\geointel\\scripts\\train_building_proposal_filter.py",
+ "fix": {
+ "applicability": "safe",
+ "edits": [
+ {
+ "content": "from torchvision import datasets",
+ "end_location": {
+ "column": 49,
+ "row": 136
+ },
+ "location": {
+ "column": 5,
+ "row": 136
+ }
+ }
+ ],
+ "message": "Remove unused import: `torchvision.transforms`"
+ },
+ "location": {
+ "column": 39,
+ "row": 136
+ },
+ "message": "`torchvision.transforms` imported but unused",
+ "noqa_row": 136,
+ "url": "https://docs.astral.sh/ruff/rules/unused-import"
+ }
+]
diff --git a/artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt b/artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt
index 7f8ca6b2..b1466301 100644
--- a/artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt
+++ b/artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt
@@ -1,1088 +1,1088 @@
-command=python -m ruff check backend scripts tests
-exit_code=1
-captured_at=2026-08-01T18:34:08.5284079+02:00
-
-backend\app\models.py:1:1: F403 `from app.models import *` used; unable to detect undefined names
- |
-1 | from app.models import *
- | ^^^^^^^^^^^^^^^^^^^^^^^^ F403
- |
-
-backend\app\schemas\__init__.py:101:5: F401 `.bathymetry.BathymetryRasterMetric` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
- |
- 99 | BathymetryProfileAcquireRequest,
-100 | BathymetryProfileAcquisitionResult,
-101 | BathymetryRasterMetric,
- | ^^^^^^^^^^^^^^^^^^^^^^ F401
-102 | BathymetryRasterSelectionRequest,
-103 | BathymetryRasterSelectionResponse,
- |
- = help: Add unused import `BathymetryRasterMetric` to __all__
-
-backend\app\schemas\__init__.py:102:5: F401 `.bathymetry.BathymetryRasterSelectionRequest` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
- |
-100 | BathymetryProfileAcquisitionResult,
-101 | BathymetryRasterMetric,
-102 | BathymetryRasterSelectionRequest,
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
-103 | BathymetryRasterSelectionResponse,
-104 | BathymetryRasterSelectionSummary,
- |
- = help: Add unused import `BathymetryRasterSelectionRequest` to __all__
-
-backend\app\schemas\__init__.py:103:5: F401 `.bathymetry.BathymetryRasterSelectionResponse` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
- |
-101 | BathymetryRasterMetric,
-102 | BathymetryRasterSelectionRequest,
-103 | BathymetryRasterSelectionResponse,
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
-104 | BathymetryRasterSelectionSummary,
-105 | BathymetrySourceProbeRead,
- |
- = help: Add unused import `BathymetryRasterSelectionResponse` to __all__
-
-backend\app\schemas\__init__.py:104:5: F401 `.bathymetry.BathymetryRasterSelectionSummary` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
- |
-102 | BathymetryRasterSelectionRequest,
-103 | BathymetryRasterSelectionResponse,
-104 | BathymetryRasterSelectionSummary,
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
-105 | BathymetrySourceProbeRead,
-106 | BathymetrySourceRead,
- |
- = help: Add unused import `BathymetryRasterSelectionSummary` to __all__
-
-backend\app\services\aoi_operation_executor.py:56:26: E702 Multiple statements on one line (semicolon)
- |
-54 | partition = db.get(AoiOperationPartition, partition.id)
-55 | partition.child_job_id = child.id
-56 | db.add(partition); db.commit()
- | ^ E702
-57 | JobService.mark_running(db, child.id)
-58 | try:
- |
-
-backend\app\services\aoi_operation_service.py:210:37: E702 Multiple statements on one line (semicolon)
- |
-208 | return None
-209 | now = datetime.now(timezone.utc)
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
- | ^ E702
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- |
-
-backend\app\services\aoi_operation_service.py:210:65: E702 Multiple statements on one line (semicolon)
- |
-208 | return None
-209 | now = datetime.now(timezone.utc)
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
- | ^ E702
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- |
-
-backend\app\services\aoi_operation_service.py:210:95: E702 Multiple statements on one line (semicolon)
- |
-208 | return None
-209 | now = datetime.now(timezone.utc)
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
- | ^ E702
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- |
-
-backend\app\services\aoi_operation_service.py:211:37: E702 Multiple statements on one line (semicolon)
- |
-209 | now = datetime.now(timezone.utc)
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
- | ^ E702
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
-213 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:212:26: E702 Multiple statements on one line (semicolon)
- |
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- | ^ E702
-213 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:212:45: E702 Multiple statements on one line (semicolon)
- |
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- | ^ E702
-213 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:212:58: E702 Multiple statements on one line (semicolon)
- |
-210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
-211 | operation.status = "running"; operation.started_at = operation.started_at or now
-212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
- | ^ E702
-213 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:220:47: E702 Multiple statements on one line (semicolon)
- |
-218 | if partition.status != "running":
-219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
-220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
- | ^ E702
-221 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:220:66: E702 Multiple statements on one line (semicolon)
- |
-218 | if partition.status != "running":
-219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
-220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
- | ^ E702
-221 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:220:79: E702 Multiple statements on one line (semicolon)
- |
-218 | if partition.status != "running":
-219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
-220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
- | ^ E702
-221 | return partition
- |
-
-backend\app\services\aoi_operation_service.py:230:63: E702 Multiple statements on one line (semicolon)
- |
-228 | … if partition.status != "running":
-229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
-230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
- | ^ E702
-231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
-232 | … return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:230:95: E702 Multiple statements on one line (semicolon)
- |
-228 | … if partition.status != "running":
-229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
-230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
- | ^ E702
-231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
-232 | … return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:231:26: E702 Multiple statements on one line (semicolon)
- |
-229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
-230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
-231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
- | ^ E702
-232 | … return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:231:39: E702 Multiple statements on one line (semicolon)
- |
-229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
-230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
-231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
- | ^ E702
-232 | … return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:237:42: E702 Multiple statements on one line (semicolon)
- |
-235 | def fail(db, project_id: UUID, operation_id: UUID, partition_id: UUID, message: str, retryable: bool, details: dict):
-236 | partition = AoiOperationService._partition_row(db, project_id, operation_id, partition_id)
-237 | partition.error_message = message; partition.result_json = {"details": details}
- | ^ E702
-238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
-239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
- |
-
-backend\app\services\aoi_operation_service.py:240:26: E702 Multiple statements on one line (semicolon)
- |
-238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
-239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
-240 | db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
- | ^ E702
-241 | return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:240:39: E702 Multiple statements on one line (semicolon)
- |
-238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
-239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
-240 | db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
- | ^ E702
-241 | return AoiOperationService.read(db, project_id, operation_id)
- |
-
-backend\app\services\aoi_operation_service.py:245:55: E702 Multiple statements on one line (semicolon)
- |
-243 | @staticmethod
-244 | def _partition_row(db, project_id, operation_id, partition_id):
-245 | operation = db.get(AoiOperation, operation_id); partition = db.get(AoiOperationPartition, partition_id)
- | ^ E702
-246 | if operation is None or operation.project_id != project_id or partition is None or partition.operation_id != operation_id:
-247 | raise AppError(code="AOI_PARTITION_NOT_FOUND", message="AOI partition not found", status_code=404)
- |
-
-backend\app\services\aoi_operation_service.py:272:41: E702 Multiple statements on one line (semicolon)
- |
-270 | … now = datetime.now(timezone.utc)
-271 | … if statuses and all(status in {"success", "skipped"} for status in statuses):
-272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
- | ^ E702
-273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
-274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
- |
-
-backend\app\services\aoi_operation_service.py:272:70: E702 Multiple statements on one line (semicolon)
- |
-270 | … now = datetime.now(timezone.utc)
-271 | … if statuses and all(status in {"success", "skipped"} for status in statuses):
-272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
- | ^ E702
-273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
-274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
- |
-
-backend\app\services\aoi_operation_service.py:274:119: E702 Multiple statements on one line (semicolon)
- |
-272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
-273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
-274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
- | ^ E702
-275 | … operation.error_message = "One or more bounded source partitions failed; inspect partition evidence."
-276 | … db.add(operation); db.commit()
- |
-
-backend\app\services\aoi_operation_service.py:276:26: E702 Multiple statements on one line (semicolon)
- |
-274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
-275 | … operation.error_message = "One or more bounded source partitions failed; inspect partition evidence."
-276 | … db.add(operation); db.commit()
- | ^ E702
- |
-
-backend\app\services\demo_workflow_service.py:253:9: F841 Local variable `rasterio` is assigned to but never used
- |
-251 | def _create_demo_raster_bytes() -> bytes:
-252 | numpy = importlib.import_module("numpy")
-253 | rasterio = importlib.import_module("rasterio")
- | ^^^^^^^^ F841
-254 | rasterio_io = importlib.import_module("rasterio.io")
-255 | rasterio_transform = importlib.import_module("rasterio.transform")
- |
- = help: Remove assignment to unused variable `rasterio`
-
-backend\app\services\detection_review_service.py:4:20: F401 [*] `typing.Any` imported but unused
- |
-3 | from collections import Counter
-4 | from typing import Any
- | ^^^ F401
-5 | from uuid import UUID
- |
- = help: Remove unused import: `typing.Any`
-
-backend\app\services\qa_service.py:14:30: F401 [*] `shapely.geometry.shape` imported but unused
- |
-12 | from shapely.ops import unary_union
-13 | from shapely.validation import make_valid
-14 | from shapely.geometry import shape
- | ^^^^^ F401
-15 | from app.core.errors import AppError
-16 | from app.models import Area, Dataset
- |
- = help: Remove unused import: `shapely.geometry.shape`
-
-backend\app\services\thematic_raster_acquisition_service.py:409:20: F401 `rasterio` imported but unused; consider using `importlib.util.find_spec` to test for availability
- |
-407 | return coverages[0]
-408 | try:
-409 | import rasterio
- | ^^^^^^^^ F401
-410 | from rasterio.io import MemoryFile
-411 | from rasterio.merge import merge
- |
- = help: Remove unused import: `rasterio`
-
-backend\scripts\cleanup_demo_artifacts.py:17:1: E402 Module level import not at top of file
- |
-15 | sys.path.insert(0, str(SCRIPTS_ROOT))
-16 |
-17 | from app.core.config import get_settings
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-18 | from app.db.session import SessionLocal
-19 | from app.models import Export, Project
- |
-
-backend\scripts\cleanup_demo_artifacts.py:18:1: E402 Module level import not at top of file
- |
-17 | from app.core.config import get_settings
-18 | from app.db.session import SessionLocal
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-19 | from app.models import Export, Project
-20 | from release_backup_guard import require_confirmation, verify_current_backup
- |
-
-backend\scripts\cleanup_demo_artifacts.py:19:1: E402 Module level import not at top of file
- |
-17 | from app.core.config import get_settings
-18 | from app.db.session import SessionLocal
-19 | from app.models import Export, Project
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-20 | from release_backup_guard import require_confirmation, verify_current_backup
- |
-
-backend\scripts\cleanup_demo_artifacts.py:20:1: E402 Module level import not at top of file
- |
-18 | from app.db.session import SessionLocal
-19 | from app.models import Export, Project
-20 | from release_backup_guard import require_confirmation, verify_current_backup
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
- |
-
-backend\tests\test_auth.py:189:5: F841 Local variable `client` is assigned to but never used
- |
-188 | def test_guest_session_tokens_fail_closed_without_a_project_scope(monkeypatch) -> None:
-189 | client = auth_client(monkeypatch, guest_access=True)
- | ^^^^^^ F841
-190 | settings = get_settings()
- |
- = help: Remove assignment to unused variable `client`
-
-backend\tests\test_qa_service.py:5:19: F401 [*] `types.SimpleNamespace` imported but unused
- |
-3 | import json
-4 | from pathlib import Path
-5 | from types import SimpleNamespace
- | ^^^^^^^^^^^^^^^ F401
-6 | from uuid import uuid4
- |
- = help: Remove unused import: `types.SimpleNamespace`
-
-backend\tests\test_qa_service.py:8:24: F401 [*] `app.models.Area` imported but unused
- |
-6 | from uuid import uuid4
-7 |
-8 | from app.models import Area, Dataset
- | ^^^^ F401
-9 | from app.services.qa_service import QaService
- |
- = help: Remove unused import: `app.models.Area`
-
-backend\tests\test_raster_operations_service.py:3:19: F401 [*] `types.ModuleType` imported but unused
- |
-1 | from __future__ import annotations
-2 |
-3 | from types import ModuleType, SimpleNamespace
- | ^^^^^^^^^^ F401
-4 | from uuid import uuid4
-5 | from pathlib import Path
- |
- = help: Remove unused import: `types.ModuleType`
-
-backend\tests\test_sprint108_map_selection_derived_dataset.py:10:33: F401 [*] `app.models.VectorFeature` imported but unused
- |
- 9 | from app.main import app
-10 | from app.models import Dataset, VectorFeature
- | ^^^^^^^^^^^^^ F401
-11 | from app.schemas.dataset import DatasetCreateResponse
-12 | from app.services.storage_service import StorageService
- |
- = help: Remove unused import: `app.models.VectorFeature`
-
-backend\tests\test_sprint205_agricultural_parcel_history.py:4:8: F401 [*] `json` imported but unused
- |
-3 | import importlib.util
-4 | import json
- | ^^^^ F401
-5 | import sys
-6 | import zipfile
- |
- = help: Remove unused import: `json`
-
-backend\tests\test_sprint205_agricultural_parcel_history.py:79:9: F811 Redefinition of unused `json` from line 4
- |
-77 | self.data = data
-78 |
-79 | def json(self):
- | ^^^^ F811
-80 | return {"data": self.data}
- |
- = help: Remove definition: `json`
-
-backend\tests\test_sprint213_thematic_rasters.py:10:8: F401 [*] `rasterio` imported but unused
- |
- 8 | import numpy as np
- 9 | import pytest
-10 | import rasterio
- | ^^^^^^^^ F401
-11 | from fastapi.testclient import TestClient
-12 | from pyproj import Transformer
- |
- = help: Remove unused import: `rasterio`
-
-backend\tests\test_sprint233_operational_completion.py:5:19: F401 [*] `types.SimpleNamespace` imported but unused
- |
-3 | import json
-4 | from pathlib import Path
-5 | from types import SimpleNamespace
- | ^^^^^^^^^^^^^^^ F401
-6 | from uuid import uuid4
- |
- = help: Remove unused import: `types.SimpleNamespace`
-
-backend\tests\test_sprint236_bathymetry_expansion.py:4:8: F401 [*] `json` imported but unused
- |
-3 | from datetime import UTC, datetime
-4 | import json
- | ^^^^ F401
-5 | from pathlib import Path
-6 | import ssl
- |
- = help: Remove unused import: `json`
-
-backend\tests\test_sprint236_bathymetry_expansion.py:59:9: F811 Redefinition of unused `json` from line 4
- |
-57 | return None
-58 |
-59 | def json(self):
- | ^^^^ F811
-60 | return self.payload
- |
- = help: Remove definition: `json`
-
-backend\tests\test_sprint241_spw_bathymetry_raster.py:4:8: F401 [*] `io` imported but unused
- |
-3 | import importlib.util
-4 | import io
- | ^^ F401
-5 | from pathlib import Path
-6 | import sys
- |
- = help: Remove unused import: `io`
-
-backend\tests\test_vector_operations_service.py:4:19: F401 [*] `types.SimpleNamespace` imported but unused
- |
-3 | from pathlib import Path
-4 | from types import SimpleNamespace
- | ^^^^^^^^^^^^^^^ F401
-5 | from uuid import UUID, uuid4
- |
- = help: Remove unused import: `types.SimpleNamespace`
-
-scripts\archive_technical_projects.py:20:1: E402 Module level import not at top of file
- |
-18 | sys.path.insert(0, str(BACKEND_ROOT))
-19 |
-20 | from app.db.session import SessionLocal
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-21 | from app.models import Project
- |
-
-scripts\archive_technical_projects.py:21:1: E402 Module level import not at top of file
- |
-20 | from app.db.session import SessionLocal
-21 | from app.models import Project
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
- |
-
-scripts\audit_data_operations.py:23:1: E402 Module level import not at top of file
- |
-21 | sys.path.insert(0, str(BACKEND_ROOT))
-22 |
-23 | from app.core.config import get_settings
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-24 | from app.db.session import SessionLocal
-25 | from sqlalchemy import func
- |
-
-scripts\audit_data_operations.py:24:1: E402 Module level import not at top of file
- |
-23 | from app.core.config import get_settings
-24 | from app.db.session import SessionLocal
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-25 | from sqlalchemy import func
- |
-
-scripts\audit_data_operations.py:25:1: E402 Module level import not at top of file
- |
-23 | from app.core.config import get_settings
-24 | from app.db.session import SessionLocal
-25 | from sqlalchemy import func
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-26 |
-27 | from app.models import AnalysisRun, Dataset, DatasetVersion, Detection, Export, Job, Project, Segmentation
- |
-
-scripts\audit_data_operations.py:27:1: E402 Module level import not at top of file
- |
-25 | from sqlalchemy import func
-26 |
-27 | from app.models import AnalysisRun, Dataset, DatasetVersion, Detection, Export, Job, Project, Segmentation
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
- |
-
-scripts\build_building_proposal_classifier_dataset.py:20:1: E402 Module level import not at top of file
- |
-18 | sys.path.insert(0, str(SCRIPT_DIR))
-19 |
-20 | from evaluate_belgium_building_candidate import iou, read_references
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
- |
-
-scripts\create_portfolio_case_study.py:127:26: E702 Multiple statements on one line (semicolon)
- |
-126 | def draw_challenge(c: canvas.Canvas) -> None:
-127 | c.setFillColor(white); c.rect(0, 0, W, H, fill=1, stroke=0)
- | ^ E702
-128 | title(c, "01 / Productvraag", "Niet alleen zien, maar kunnen verdedigen")
-129 | y = paragraph(c, "Geoportalen tonen vaak lagen en losse metingen. GeoIntel maakt van bron, gebied, analyse en bewijs één operatio…
- |
-
-scripts\create_portfolio_case_study.py:137:29: E702 Multiple statements on one line (semicolon)
- |
-135 | for index, (num, head, body) in enumerate(cards):
-136 | cy = y - 42 - index * 78
-137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
- | ^ E702
-138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
-139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
- |
-
-scripts\create_portfolio_case_study.py:138:29: E702 Multiple statements on one line (semicolon)
- |
-136 | cy = y - 42 - index * 78
-137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
-138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
- | ^ E702
-139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
-140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
- |
-
-scripts\create_portfolio_case_study.py:138:54: E702 Multiple statements on one line (semicolon)
- |
-136 | cy = y - 42 - index * 78
-137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
-138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
- | ^ E702
-139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
-140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
- |
-
-scripts\create_portfolio_case_study.py:139:28: E702 Multiple statements on one line (semicolon)
- |
-137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
-138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
-139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
- | ^ E702
-140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
-141 | image_cover(c, ASSETS / "geointel-landing-hero.png", 410, 53, 385, 415)
- |
-
-scripts\create_portfolio_case_study.py:139:54: E702 Multiple statements on one line (semicolon)
- |
-137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
-138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
-139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
- | ^ E702
-140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
-141 | image_cover(c, ASSETS / "geointel-landing-hero.png", 410, 53, 385, 415)
- |
-
-scripts\create_portfolio_case_study.py:146:40: E702 Multiple statements on one line (semicolon)
- |
-145 | def draw_experience(c: canvas.Canvas) -> None:
-146 | c.setFillColor(HexColor("#f5faf8")); c.rect(0, 0, W, H, fill=1, stroke=0)
- | ^ E702
-147 | title(c, "02 / Experience design", "De kaart blijft het werkblad", "Rustige hiërarchie, zichtbare herkomst en bewijs op het momen…
-148 | image_cover(c, ASSETS / "geointel-workbench-map.png", 42, 73, 485, 360)
- |
-
-scripts\create_portfolio_case_study.py:157:24: E702 Multiple statements on one line (semicolon)
- |
-156 | def draw_ai(c: canvas.Canvas) -> None:
-157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
- | ^ E702
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
- |
-
-scripts\create_portfolio_case_study.py:158:25: E702 Multiple statements on one line (semicolon)
- |
-156 | def draw_ai(c: canvas.Canvas) -> None:
-157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
- | ^ E702
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
- |
-
-scripts\create_portfolio_case_study.py:158:50: E702 Multiple statements on one line (semicolon)
- |
-156 | def draw_ai(c: canvas.Canvas) -> None:
-157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
- | ^ E702
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
- |
-
-scripts\create_portfolio_case_study.py:159:26: E702 Multiple statements on one line (semicolon)
- |
-157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
- | ^ E702
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
-161 | stages = [
- |
-
-scripts\create_portfolio_case_study.py:159:52: E702 Multiple statements on one line (semicolon)
- |
-157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
- | ^ E702
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
-161 | stages = [
- |
-
-scripts\create_portfolio_case_study.py:160:40: E702 Multiple statements on one line (semicolon)
- |
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
- | ^ E702
-161 | stages = [
-162 | ("01", "Orthofoto", "CRS + dekking"),
- |
-
-scripts\create_portfolio_case_study.py:160:60: E702 Multiple statements on one line (semicolon)
- |
-158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
-159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
-160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
- | ^ E702
-161 | stages = [
-162 | ("01", "Orthofoto", "CRS + dekking"),
- |
-
-scripts\create_portfolio_case_study.py:169:42: E702 Multiple statements on one line (semicolon)
- |
-167 | ]
-168 | x0, gap, bw = 42, 13, 139
-169 | c.setStrokeColor(HexColor("#4bb99f")); c.setLineWidth(2); c.line(95, 285, 746, 285)
- | ^ E702
-170 | for i, (num, head, body) in enumerate(stages):
-171 | x = x0 + i * (bw + gap)
- |
-
-scripts\create_portfolio_case_study.py:169:61: E702 Multiple statements on one line (semicolon)
- |
-167 | ]
-168 | x0, gap, bw = 42, 13, 139
-169 | c.setStrokeColor(HexColor("#4bb99f")); c.setLineWidth(2); c.line(95, 285, 746, 285)
- | ^ E702
-170 | for i, (num, head, body) in enumerate(stages):
-171 | x = x0 + i * (bw + gap)
- |
-
-scripts\create_portfolio_case_study.py:172:44: E702 Multiple statements on one line (semicolon)
- |
-170 | for i, (num, head, body) in enumerate(stages):
-171 | x = x0 + i * (bw + gap)
-172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
- | ^ E702
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
- |
-
-scripts\create_portfolio_case_study.py:173:29: E702 Multiple statements on one line (semicolon)
- |
-171 | x = x0 + i * (bw + gap)
-172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
- | ^ E702
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
- |
-
-scripts\create_portfolio_case_study.py:173:54: E702 Multiple statements on one line (semicolon)
- |
-171 | x = x0 + i * (bw + gap)
-172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
- | ^ E702
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
- |
-
-scripts\create_portfolio_case_study.py:174:30: E702 Multiple statements on one line (semicolon)
- |
-172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
- | ^ E702
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
-176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
- |
-
-scripts\create_portfolio_case_study.py:174:56: E702 Multiple statements on one line (semicolon)
- |
-172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
- | ^ E702
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
-176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
- |
-
-scripts\create_portfolio_case_study.py:175:44: E702 Multiple statements on one line (semicolon)
- |
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
- | ^ E702
-176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
-177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
- |
-
-scripts\create_portfolio_case_study.py:175:66: E702 Multiple statements on one line (semicolon)
- |
-173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
- | ^ E702
-176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
-177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
- |
-
-scripts\create_portfolio_case_study.py:176:49: E702 Multiple statements on one line (semicolon)
- |
-174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
-175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
-176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
- | ^ E702
-177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
-178 | footer(c, 4)
- |
-
-scripts\create_portfolio_case_study.py:182:26: E702 Multiple statements on one line (semicolon)
- |
-181 | def draw_architecture(c: canvas.Canvas) -> None:
-182 | c.setFillColor(white); c.rect(0, 0, W, H, fill=1, stroke=0)
- | ^ E702
-183 | title(c, "04 / Architectuur", "Eén keten, expliciete verantwoordelijkheden")
-184 | nodes = [
- |
-
-scripts\create_portfolio_case_study.py:193:79: E702 Multiple statements on one line (semicolon)
- |
-191 | ]
-192 | for x, y, w, h, head, body in nodes:
-193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
- | ^ E702
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
- |
-
-scripts\create_portfolio_case_study.py:194:60: E702 Multiple statements on one line (semicolon)
- |
-192 | for x, y, w, h, head, body in nodes:
-193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
- | ^ E702
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
-196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
- |
-
-scripts\create_portfolio_case_study.py:194:85: E702 Multiple statements on one line (semicolon)
- |
-192 | for x, y, w, h, head, body in nodes:
-193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
- | ^ E702
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
-196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
- |
-
-scripts\create_portfolio_case_study.py:195:76: E702 Multiple statements on one line (semicolon)
- |
-193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
- | ^ E702
-196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
-197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
- |
-
-scripts\create_portfolio_case_study.py:195:98: E702 Multiple statements on one line (semicolon)
- |
-193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
- | ^ E702
-196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
-197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
- |
-
-scripts\create_portfolio_case_study.py:196:27: E702 Multiple statements on one line (semicolon)
- |
-194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
-195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
-196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
- | ^ E702
-197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
-198 | for (x1,y1),(x2,y2) in arrows:
- |
-
-scripts\create_portfolio_case_study.py:199:28: E702 Multiple statements on one line (semicolon)
- |
-197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
-198 | for (x1,y1),(x2,y2) in arrows:
-199 | c.line(x1,y1,x2,y2); c.circle(x2,y2,2.5,fill=1,stroke=0)
- | ^ E702
-200 | paragraph(c, "PostGIS bewaart querybare geometrie en lifecycle-records. Grote raster-, mask- en modelbestanden blijven versioned …
-201 | footer(c, 5)
- |
-
-scripts\create_portfolio_case_study.py:206:40: E702 Multiple statements on one line (semicolon)
- |
-204 | def draw_outcomes(c: canvas.Canvas) -> None:
-205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
-206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
- | ^ E702
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
- |
-
-scripts\create_portfolio_case_study.py:207:25: E702 Multiple statements on one line (semicolon)
- |
-205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
-206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
- | ^ E702
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
- |
-
-scripts\create_portfolio_case_study.py:207:50: E702 Multiple statements on one line (semicolon)
- |
-205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
-206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
- | ^ E702
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
- |
-
-scripts\create_portfolio_case_study.py:208:26: E702 Multiple statements on one line (semicolon)
- |
-206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
- | ^ E702
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
-210 | outcomes = [
- |
-
-scripts\create_portfolio_case_study.py:208:52: E702 Multiple statements on one line (semicolon)
- |
-206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
- | ^ E702
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
-210 | outcomes = [
- |
-
-scripts\create_portfolio_case_study.py:209:40: E702 Multiple statements on one line (semicolon)
- |
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
- | ^ E702
-210 | outcomes = [
-211 | ("Map-first", "De gebruiker blijft in dezelfde ruimtelijke context."),
- |
-
-scripts\create_portfolio_case_study.py:209:61: E702 Multiple statements on one line (semicolon)
- |
-207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
-208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
-209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
- | ^ E702
-210 | outcomes = [
-211 | ("Map-first", "De gebruiker blijft in dezelfde ruimtelijke context."),
- |
-
-scripts\create_portfolio_case_study.py:219:44: E702 Multiple statements on one line (semicolon)
- |
-217 | x = 42 + (i % 2) * 375
-218 | y = 330 - (i // 2) * 105
-219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
- | ^ E702
-220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
- |
-
-scripts\create_portfolio_case_study.py:220:29: E702 Multiple statements on one line (semicolon)
- |
-218 | y = 330 - (i // 2) * 105
-219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
-220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
- | ^ E702
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
- |
-
-scripts\create_portfolio_case_study.py:220:55: E702 Multiple statements on one line (semicolon)
- |
-218 | y = 330 - (i // 2) * 105
-219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
-220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
- | ^ E702
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
- |
-
-scripts\create_portfolio_case_study.py:222:26: E702 Multiple statements on one line (semicolon)
- |
-220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
- | ^ E702
-223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
- |
-
-scripts\create_portfolio_case_study.py:222:52: E702 Multiple statements on one line (semicolon)
- |
-220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
- | ^ E702
-223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
- |
-
-scripts\create_portfolio_case_study.py:223:40: E702 Multiple statements on one line (semicolon)
- |
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
-223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
- | ^ E702
- |
-
-scripts\create_portfolio_case_study.py:223:60: E702 Multiple statements on one line (semicolon)
- |
-221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
-222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
-223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
- | ^ E702
- |
-
-scripts\provision_regional_grb_context.py:46:5: F401 [*] `provision_regional_grb_buildings.response_data` imported but unused
- |
-44 | next_page_url,
-45 | observed_at,
-46 | response_data,
- | ^^^^^^^^^^^^^ F401
-47 | reusable_manifest,
-48 | safe_slug,
- |
- = help: Remove unused import: `provision_regional_grb_buildings.response_data`
-
-scripts\provision_waterinfo_station_history.py:26:30: F401 [*] `shapely.geometry.Point` imported but unused
- |
-24 | import requests
-25 | from requests.adapters import HTTPAdapter
-26 | from shapely.geometry import Point, mapping, shape
- | ^^^^^ F401
-27 | from urllib3.util.retry import Retry
- |
- = help: Remove unused import
-
-scripts\provision_waterinfo_station_history.py:26:37: F401 [*] `shapely.geometry.mapping` imported but unused
- |
-24 | import requests
-25 | from requests.adapters import HTTPAdapter
-26 | from shapely.geometry import Point, mapping, shape
- | ^^^^^^^ F401
-27 | from urllib3.util.retry import Retry
- |
- = help: Remove unused import
-
-scripts\refine_yolo_labels_with_sam.py:14:20: F401 [*] `typing.Any` imported but unused
- |
-12 | import shutil
-13 | from pathlib import Path
-14 | from typing import Any
- | ^^^ F401
- |
- = help: Remove unused import: `typing.Any`
-
-scripts\run_golden_qa_benchmark.py:15:24: F401 [*] `app.models.Area` imported but unused
- |
-13 | sys.path.insert(0, str(BACKEND_ROOT))
-14 |
-15 | from app.models import Area, Dataset, Metric, QualityCheck # noqa: E402
- | ^^^^ F401
-16 | from app.services.qa_service import QaService # noqa: E402
-17 | from app.services.quality_service import QualityService # noqa: E402
- |
- = help: Remove unused import: `app.models.Area`
-
-scripts\seed_demo_workflow.py:11:1: E402 Module level import not at top of file
- |
- 9 | sys.path.insert(0, str(ROOT / "backend"))
-10 |
-11 | from app.db.session import SessionLocal
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
-12 | from app.services.demo_workflow_service import DemoWorkflowService
- |
-
-scripts\seed_demo_workflow.py:12:1: E402 Module level import not at top of file
- |
-11 | from app.db.session import SessionLocal
-12 | from app.services.demo_workflow_service import DemoWorkflowService
- | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
- |
-
-scripts\smoke_contracts.py:4:11: E701 Multiple statements on one line (colon)
- |
-2 | ROOT = Path(__file__).resolve().parents[1]
-3 | missing=[d for d in ["contracts/api","contracts/database","contracts/events"] if not (ROOT/d).exists()]
-4 | if missing: raise SystemExit("Missing contract directories: "+", ".join(missing))
- | ^ E701
-5 | print("Contracts smoke OK")
- |
-
-scripts\smoke_docs.py:5:11: E701 Multiple statements on one line (colon)
- |
-3 | required_docs = ["docs/M5_OPERATIONAL_READINESS.md","docs/BUILD_GOVERNANCE.md","docs/CI_CD_SPECIFICATION.md","docs/HEALTHCHECK_CONTRACT…
-4 | missing=[p for p in required_docs if not (ROOT/p).exists()]
-5 | if missing: raise SystemExit("Missing docs:\n"+"\n".join(missing))
- | ^ E701
-6 | print("Documentation smoke OK")
- |
-
-scripts\train_building_proposal_filter.py:136:39: F401 [*] `torchvision.transforms` imported but unused
- |
-134 | from torch import nn
-135 | from torch.utils.data import DataLoader
-136 | from torchvision import datasets, transforms
- | ^^^^^^^^^^ F401
-137 | from torchvision.models import ResNet18_Weights, resnet18
-138 | from ultralytics import YOLO
- |
- = help: Remove unused import: `torchvision.transforms`
-
-Found 112 errors.
-[*] 18 fixable with the `--fix` option (2 hidden fixes can be enabled with the `--unsafe-fixes` option).
+command=python -m ruff check backend scripts tests
+exit_code=1
+captured_at=2026-08-01T18:34:08.5284079+02:00
+
+backend\app\models.py:1:1: F403 `from app.models import *` used; unable to detect undefined names
+ |
+1 | from app.models import *
+ | ^^^^^^^^^^^^^^^^^^^^^^^^ F403
+ |
+
+backend\app\schemas\__init__.py:101:5: F401 `.bathymetry.BathymetryRasterMetric` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
+ |
+ 99 | BathymetryProfileAcquireRequest,
+100 | BathymetryProfileAcquisitionResult,
+101 | BathymetryRasterMetric,
+ | ^^^^^^^^^^^^^^^^^^^^^^ F401
+102 | BathymetryRasterSelectionRequest,
+103 | BathymetryRasterSelectionResponse,
+ |
+ = help: Add unused import `BathymetryRasterMetric` to __all__
+
+backend\app\schemas\__init__.py:102:5: F401 `.bathymetry.BathymetryRasterSelectionRequest` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
+ |
+100 | BathymetryProfileAcquisitionResult,
+101 | BathymetryRasterMetric,
+102 | BathymetryRasterSelectionRequest,
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
+103 | BathymetryRasterSelectionResponse,
+104 | BathymetryRasterSelectionSummary,
+ |
+ = help: Add unused import `BathymetryRasterSelectionRequest` to __all__
+
+backend\app\schemas\__init__.py:103:5: F401 `.bathymetry.BathymetryRasterSelectionResponse` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
+ |
+101 | BathymetryRasterMetric,
+102 | BathymetryRasterSelectionRequest,
+103 | BathymetryRasterSelectionResponse,
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
+104 | BathymetryRasterSelectionSummary,
+105 | BathymetrySourceProbeRead,
+ |
+ = help: Add unused import `BathymetryRasterSelectionResponse` to __all__
+
+backend\app\schemas\__init__.py:104:5: F401 `.bathymetry.BathymetryRasterSelectionSummary` imported but unused; consider removing, adding to `__all__`, or using a redundant alias
+ |
+102 | BathymetryRasterSelectionRequest,
+103 | BathymetryRasterSelectionResponse,
+104 | BathymetryRasterSelectionSummary,
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ F401
+105 | BathymetrySourceProbeRead,
+106 | BathymetrySourceRead,
+ |
+ = help: Add unused import `BathymetryRasterSelectionSummary` to __all__
+
+backend\app\services\aoi_operation_executor.py:56:26: E702 Multiple statements on one line (semicolon)
+ |
+54 | partition = db.get(AoiOperationPartition, partition.id)
+55 | partition.child_job_id = child.id
+56 | db.add(partition); db.commit()
+ | ^ E702
+57 | JobService.mark_running(db, child.id)
+58 | try:
+ |
+
+backend\app\services\aoi_operation_service.py:210:37: E702 Multiple statements on one line (semicolon)
+ |
+208 | return None
+209 | now = datetime.now(timezone.utc)
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+ | ^ E702
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ |
+
+backend\app\services\aoi_operation_service.py:210:65: E702 Multiple statements on one line (semicolon)
+ |
+208 | return None
+209 | now = datetime.now(timezone.utc)
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+ | ^ E702
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ |
+
+backend\app\services\aoi_operation_service.py:210:95: E702 Multiple statements on one line (semicolon)
+ |
+208 | return None
+209 | now = datetime.now(timezone.utc)
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+ | ^ E702
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ |
+
+backend\app\services\aoi_operation_service.py:211:37: E702 Multiple statements on one line (semicolon)
+ |
+209 | now = datetime.now(timezone.utc)
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+ | ^ E702
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+213 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:212:26: E702 Multiple statements on one line (semicolon)
+ |
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ | ^ E702
+213 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:212:45: E702 Multiple statements on one line (semicolon)
+ |
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ | ^ E702
+213 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:212:58: E702 Multiple statements on one line (semicolon)
+ |
+210 | partition.status = "running"; partition.started_at = now; partition.attempt_count += 1; partition.error_message = None
+211 | operation.status = "running"; operation.started_at = operation.started_at or now
+212 | db.add(partition); db.add(operation); db.commit(); db.refresh(partition)
+ | ^ E702
+213 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:220:47: E702 Multiple statements on one line (semicolon)
+ |
+218 | if partition.status != "running":
+219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
+220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
+ | ^ E702
+221 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:220:66: E702 Multiple statements on one line (semicolon)
+ |
+218 | if partition.status != "running":
+219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
+220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
+ | ^ E702
+221 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:220:79: E702 Multiple statements on one line (semicolon)
+ |
+218 | if partition.status != "running":
+219 | raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can be checkpointed", status_code=409)
+220 | partition.checkpoint_json = checkpoint; db.add(partition); db.commit(); db.refresh(partition)
+ | ^ E702
+221 | return partition
+ |
+
+backend\app\services\aoi_operation_service.py:230:63: E702 Multiple statements on one line (semicolon)
+ |
+228 | … if partition.status != "running":
+229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
+230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
+ | ^ E702
+231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+232 | … return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:230:95: E702 Multiple statements on one line (semicolon)
+ |
+228 | … if partition.status != "running":
+229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
+230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
+ | ^ E702
+231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+232 | … return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:231:26: E702 Multiple statements on one line (semicolon)
+ |
+229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
+230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
+231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+ | ^ E702
+232 | … return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:231:39: E702 Multiple statements on one line (semicolon)
+ |
+229 | … raise AppError(code="AOI_PARTITION_NOT_RUNNING", message="Only a running partition can complete", status_code=409)
+230 | … partition.status = "skipped" if skipped else "success"; partition.result_json = result; partition.finished_at = datetime.now(ti…
+231 | … db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+ | ^ E702
+232 | … return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:237:42: E702 Multiple statements on one line (semicolon)
+ |
+235 | def fail(db, project_id: UUID, operation_id: UUID, partition_id: UUID, message: str, retryable: bool, details: dict):
+236 | partition = AoiOperationService._partition_row(db, project_id, operation_id, partition_id)
+237 | partition.error_message = message; partition.result_json = {"details": details}
+ | ^ E702
+238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
+239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
+ |
+
+backend\app\services\aoi_operation_service.py:240:26: E702 Multiple statements on one line (semicolon)
+ |
+238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
+239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
+240 | db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+ | ^ E702
+241 | return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:240:39: E702 Multiple statements on one line (semicolon)
+ |
+238 | partition.status = "queued" if retryable and partition.attempt_count < partition.max_attempts else "failed"
+239 | partition.finished_at = None if partition.status == "queued" else datetime.now(timezone.utc)
+240 | db.add(partition); db.commit(); AoiOperationService._refresh_parent(db, operation_id)
+ | ^ E702
+241 | return AoiOperationService.read(db, project_id, operation_id)
+ |
+
+backend\app\services\aoi_operation_service.py:245:55: E702 Multiple statements on one line (semicolon)
+ |
+243 | @staticmethod
+244 | def _partition_row(db, project_id, operation_id, partition_id):
+245 | operation = db.get(AoiOperation, operation_id); partition = db.get(AoiOperationPartition, partition_id)
+ | ^ E702
+246 | if operation is None or operation.project_id != project_id or partition is None or partition.operation_id != operation_id:
+247 | raise AppError(code="AOI_PARTITION_NOT_FOUND", message="AOI partition not found", status_code=404)
+ |
+
+backend\app\services\aoi_operation_service.py:272:41: E702 Multiple statements on one line (semicolon)
+ |
+270 | … now = datetime.now(timezone.utc)
+271 | … if statuses and all(status in {"success", "skipped"} for status in statuses):
+272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
+ | ^ E702
+273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
+274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
+ |
+
+backend\app\services\aoi_operation_service.py:272:70: E702 Multiple statements on one line (semicolon)
+ |
+270 | … now = datetime.now(timezone.utc)
+271 | … if statuses and all(status in {"success", "skipped"} for status in statuses):
+272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
+ | ^ E702
+273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
+274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
+ |
+
+backend\app\services\aoi_operation_service.py:274:119: E702 Multiple statements on one line (semicolon)
+ |
+272 | … operation.status = "success"; operation.finished_at = now; operation.error_message = None
+273 | … elif "failed" in statuses and not any(status in {"queued", "running"} for status in statuses):
+274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
+ | ^ E702
+275 | … operation.error_message = "One or more bounded source partitions failed; inspect partition evidence."
+276 | … db.add(operation); db.commit()
+ |
+
+backend\app\services\aoi_operation_service.py:276:26: E702 Multiple statements on one line (semicolon)
+ |
+274 | … operation.status = "partial" if any(status in {"success", "skipped"} for status in statuses) else "failed"; operation.finis…
+275 | … operation.error_message = "One or more bounded source partitions failed; inspect partition evidence."
+276 | … db.add(operation); db.commit()
+ | ^ E702
+ |
+
+backend\app\services\demo_workflow_service.py:253:9: F841 Local variable `rasterio` is assigned to but never used
+ |
+251 | def _create_demo_raster_bytes() -> bytes:
+252 | numpy = importlib.import_module("numpy")
+253 | rasterio = importlib.import_module("rasterio")
+ | ^^^^^^^^ F841
+254 | rasterio_io = importlib.import_module("rasterio.io")
+255 | rasterio_transform = importlib.import_module("rasterio.transform")
+ |
+ = help: Remove assignment to unused variable `rasterio`
+
+backend\app\services\detection_review_service.py:4:20: F401 [*] `typing.Any` imported but unused
+ |
+3 | from collections import Counter
+4 | from typing import Any
+ | ^^^ F401
+5 | from uuid import UUID
+ |
+ = help: Remove unused import: `typing.Any`
+
+backend\app\services\qa_service.py:14:30: F401 [*] `shapely.geometry.shape` imported but unused
+ |
+12 | from shapely.ops import unary_union
+13 | from shapely.validation import make_valid
+14 | from shapely.geometry import shape
+ | ^^^^^ F401
+15 | from app.core.errors import AppError
+16 | from app.models import Area, Dataset
+ |
+ = help: Remove unused import: `shapely.geometry.shape`
+
+backend\app\services\thematic_raster_acquisition_service.py:409:20: F401 `rasterio` imported but unused; consider using `importlib.util.find_spec` to test for availability
+ |
+407 | return coverages[0]
+408 | try:
+409 | import rasterio
+ | ^^^^^^^^ F401
+410 | from rasterio.io import MemoryFile
+411 | from rasterio.merge import merge
+ |
+ = help: Remove unused import: `rasterio`
+
+backend\scripts\cleanup_demo_artifacts.py:17:1: E402 Module level import not at top of file
+ |
+15 | sys.path.insert(0, str(SCRIPTS_ROOT))
+16 |
+17 | from app.core.config import get_settings
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+18 | from app.db.session import SessionLocal
+19 | from app.models import Export, Project
+ |
+
+backend\scripts\cleanup_demo_artifacts.py:18:1: E402 Module level import not at top of file
+ |
+17 | from app.core.config import get_settings
+18 | from app.db.session import SessionLocal
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+19 | from app.models import Export, Project
+20 | from release_backup_guard import require_confirmation, verify_current_backup
+ |
+
+backend\scripts\cleanup_demo_artifacts.py:19:1: E402 Module level import not at top of file
+ |
+17 | from app.core.config import get_settings
+18 | from app.db.session import SessionLocal
+19 | from app.models import Export, Project
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+20 | from release_backup_guard import require_confirmation, verify_current_backup
+ |
+
+backend\scripts\cleanup_demo_artifacts.py:20:1: E402 Module level import not at top of file
+ |
+18 | from app.db.session import SessionLocal
+19 | from app.models import Export, Project
+20 | from release_backup_guard import require_confirmation, verify_current_backup
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+ |
+
+backend\tests\test_auth.py:189:5: F841 Local variable `client` is assigned to but never used
+ |
+188 | def test_guest_session_tokens_fail_closed_without_a_project_scope(monkeypatch) -> None:
+189 | client = auth_client(monkeypatch, guest_access=True)
+ | ^^^^^^ F841
+190 | settings = get_settings()
+ |
+ = help: Remove assignment to unused variable `client`
+
+backend\tests\test_qa_service.py:5:19: F401 [*] `types.SimpleNamespace` imported but unused
+ |
+3 | import json
+4 | from pathlib import Path
+5 | from types import SimpleNamespace
+ | ^^^^^^^^^^^^^^^ F401
+6 | from uuid import uuid4
+ |
+ = help: Remove unused import: `types.SimpleNamespace`
+
+backend\tests\test_qa_service.py:8:24: F401 [*] `app.models.Area` imported but unused
+ |
+6 | from uuid import uuid4
+7 |
+8 | from app.models import Area, Dataset
+ | ^^^^ F401
+9 | from app.services.qa_service import QaService
+ |
+ = help: Remove unused import: `app.models.Area`
+
+backend\tests\test_raster_operations_service.py:3:19: F401 [*] `types.ModuleType` imported but unused
+ |
+1 | from __future__ import annotations
+2 |
+3 | from types import ModuleType, SimpleNamespace
+ | ^^^^^^^^^^ F401
+4 | from uuid import uuid4
+5 | from pathlib import Path
+ |
+ = help: Remove unused import: `types.ModuleType`
+
+backend\tests\test_sprint108_map_selection_derived_dataset.py:10:33: F401 [*] `app.models.VectorFeature` imported but unused
+ |
+ 9 | from app.main import app
+10 | from app.models import Dataset, VectorFeature
+ | ^^^^^^^^^^^^^ F401
+11 | from app.schemas.dataset import DatasetCreateResponse
+12 | from app.services.storage_service import StorageService
+ |
+ = help: Remove unused import: `app.models.VectorFeature`
+
+backend\tests\test_sprint205_agricultural_parcel_history.py:4:8: F401 [*] `json` imported but unused
+ |
+3 | import importlib.util
+4 | import json
+ | ^^^^ F401
+5 | import sys
+6 | import zipfile
+ |
+ = help: Remove unused import: `json`
+
+backend\tests\test_sprint205_agricultural_parcel_history.py:79:9: F811 Redefinition of unused `json` from line 4
+ |
+77 | self.data = data
+78 |
+79 | def json(self):
+ | ^^^^ F811
+80 | return {"data": self.data}
+ |
+ = help: Remove definition: `json`
+
+backend\tests\test_sprint213_thematic_rasters.py:10:8: F401 [*] `rasterio` imported but unused
+ |
+ 8 | import numpy as np
+ 9 | import pytest
+10 | import rasterio
+ | ^^^^^^^^ F401
+11 | from fastapi.testclient import TestClient
+12 | from pyproj import Transformer
+ |
+ = help: Remove unused import: `rasterio`
+
+backend\tests\test_sprint233_operational_completion.py:5:19: F401 [*] `types.SimpleNamespace` imported but unused
+ |
+3 | import json
+4 | from pathlib import Path
+5 | from types import SimpleNamespace
+ | ^^^^^^^^^^^^^^^ F401
+6 | from uuid import uuid4
+ |
+ = help: Remove unused import: `types.SimpleNamespace`
+
+backend\tests\test_sprint236_bathymetry_expansion.py:4:8: F401 [*] `json` imported but unused
+ |
+3 | from datetime import UTC, datetime
+4 | import json
+ | ^^^^ F401
+5 | from pathlib import Path
+6 | import ssl
+ |
+ = help: Remove unused import: `json`
+
+backend\tests\test_sprint236_bathymetry_expansion.py:59:9: F811 Redefinition of unused `json` from line 4
+ |
+57 | return None
+58 |
+59 | def json(self):
+ | ^^^^ F811
+60 | return self.payload
+ |
+ = help: Remove definition: `json`
+
+backend\tests\test_sprint241_spw_bathymetry_raster.py:4:8: F401 [*] `io` imported but unused
+ |
+3 | import importlib.util
+4 | import io
+ | ^^ F401
+5 | from pathlib import Path
+6 | import sys
+ |
+ = help: Remove unused import: `io`
+
+backend\tests\test_vector_operations_service.py:4:19: F401 [*] `types.SimpleNamespace` imported but unused
+ |
+3 | from pathlib import Path
+4 | from types import SimpleNamespace
+ | ^^^^^^^^^^^^^^^ F401
+5 | from uuid import UUID, uuid4
+ |
+ = help: Remove unused import: `types.SimpleNamespace`
+
+scripts\archive_technical_projects.py:20:1: E402 Module level import not at top of file
+ |
+18 | sys.path.insert(0, str(BACKEND_ROOT))
+19 |
+20 | from app.db.session import SessionLocal
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+21 | from app.models import Project
+ |
+
+scripts\archive_technical_projects.py:21:1: E402 Module level import not at top of file
+ |
+20 | from app.db.session import SessionLocal
+21 | from app.models import Project
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+ |
+
+scripts\audit_data_operations.py:23:1: E402 Module level import not at top of file
+ |
+21 | sys.path.insert(0, str(BACKEND_ROOT))
+22 |
+23 | from app.core.config import get_settings
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+24 | from app.db.session import SessionLocal
+25 | from sqlalchemy import func
+ |
+
+scripts\audit_data_operations.py:24:1: E402 Module level import not at top of file
+ |
+23 | from app.core.config import get_settings
+24 | from app.db.session import SessionLocal
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+25 | from sqlalchemy import func
+ |
+
+scripts\audit_data_operations.py:25:1: E402 Module level import not at top of file
+ |
+23 | from app.core.config import get_settings
+24 | from app.db.session import SessionLocal
+25 | from sqlalchemy import func
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+26 |
+27 | from app.models import AnalysisRun, Dataset, DatasetVersion, Detection, Export, Job, Project, Segmentation
+ |
+
+scripts\audit_data_operations.py:27:1: E402 Module level import not at top of file
+ |
+25 | from sqlalchemy import func
+26 |
+27 | from app.models import AnalysisRun, Dataset, DatasetVersion, Detection, Export, Job, Project, Segmentation
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+ |
+
+scripts\build_building_proposal_classifier_dataset.py:20:1: E402 Module level import not at top of file
+ |
+18 | sys.path.insert(0, str(SCRIPT_DIR))
+19 |
+20 | from evaluate_belgium_building_candidate import iou, read_references
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+ |
+
+scripts\create_portfolio_case_study.py:127:26: E702 Multiple statements on one line (semicolon)
+ |
+126 | def draw_challenge(c: canvas.Canvas) -> None:
+127 | c.setFillColor(white); c.rect(0, 0, W, H, fill=1, stroke=0)
+ | ^ E702
+128 | title(c, "01 / Productvraag", "Niet alleen zien, maar kunnen verdedigen")
+129 | y = paragraph(c, "Geoportalen tonen vaak lagen en losse metingen. GeoIntel maakt van bron, gebied, analyse en bewijs één operatio…
+ |
+
+scripts\create_portfolio_case_study.py:137:29: E702 Multiple statements on one line (semicolon)
+ |
+135 | for index, (num, head, body) in enumerate(cards):
+136 | cy = y - 42 - index * 78
+137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
+ | ^ E702
+138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
+139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
+ |
+
+scripts\create_portfolio_case_study.py:138:29: E702 Multiple statements on one line (semicolon)
+ |
+136 | cy = y - 42 - index * 78
+137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
+138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
+ | ^ E702
+139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
+140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
+ |
+
+scripts\create_portfolio_case_study.py:138:54: E702 Multiple statements on one line (semicolon)
+ |
+136 | cy = y - 42 - index * 78
+137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
+138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
+ | ^ E702
+139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
+140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
+ |
+
+scripts\create_portfolio_case_study.py:139:28: E702 Multiple statements on one line (semicolon)
+ |
+137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
+138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
+139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
+ | ^ E702
+140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
+141 | image_cover(c, ASSETS / "geointel-landing-hero.png", 410, 53, 385, 415)
+ |
+
+scripts\create_portfolio_case_study.py:139:54: E702 Multiple statements on one line (semicolon)
+ |
+137 | c.setFillColor(PALE); c.roundRect(42, cy - 54, 330, 64, 10, fill=1, stroke=0)
+138 | c.setFillColor(TEAL); c.setFont(FONT_BOLD, 8); c.drawString(56, cy - 6, num)
+139 | c.setFillColor(INK); c.setFont(FONT_BOLD, 11); c.drawString(86, cy - 7, head)
+ | ^ E702
+140 | paragraph(c, body, 86, cy - 18, 266, 8.2, MUTED, 12)
+141 | image_cover(c, ASSETS / "geointel-landing-hero.png", 410, 53, 385, 415)
+ |
+
+scripts\create_portfolio_case_study.py:146:40: E702 Multiple statements on one line (semicolon)
+ |
+145 | def draw_experience(c: canvas.Canvas) -> None:
+146 | c.setFillColor(HexColor("#f5faf8")); c.rect(0, 0, W, H, fill=1, stroke=0)
+ | ^ E702
+147 | title(c, "02 / Experience design", "De kaart blijft het werkblad", "Rustige hiërarchie, zichtbare herkomst en bewijs op het momen…
+148 | image_cover(c, ASSETS / "geointel-workbench-map.png", 42, 73, 485, 360)
+ |
+
+scripts\create_portfolio_case_study.py:157:24: E702 Multiple statements on one line (semicolon)
+ |
+156 | def draw_ai(c: canvas.Canvas) -> None:
+157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
+ | ^ E702
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+ |
+
+scripts\create_portfolio_case_study.py:158:25: E702 Multiple statements on one line (semicolon)
+ |
+156 | def draw_ai(c: canvas.Canvas) -> None:
+157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+ | ^ E702
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+ |
+
+scripts\create_portfolio_case_study.py:158:50: E702 Multiple statements on one line (semicolon)
+ |
+156 | def draw_ai(c: canvas.Canvas) -> None:
+157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+ | ^ E702
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+ |
+
+scripts\create_portfolio_case_study.py:159:26: E702 Multiple statements on one line (semicolon)
+ |
+157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+ | ^ E702
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+161 | stages = [
+ |
+
+scripts\create_portfolio_case_study.py:159:52: E702 Multiple statements on one line (semicolon)
+ |
+157 | c.setFillColor(INK); c.rect(0, 0, W, H, fill=1, stroke=0)
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+ | ^ E702
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+161 | stages = [
+ |
+
+scripts\create_portfolio_case_study.py:160:40: E702 Multiple statements on one line (semicolon)
+ |
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+ | ^ E702
+161 | stages = [
+162 | ("01", "Orthofoto", "CRS + dekking"),
+ |
+
+scripts\create_portfolio_case_study.py:160:60: E702 Multiple statements on one line (semicolon)
+ |
+158 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "03 / PYTORCH + NVIDIA")
+159 | c.setFillColor(white); c.setFont(FONT_BOLD, 25); c.drawString(42, H - 78, "Van bronpixel naar gecontroleerde detectie")
+160 | c.setFillColor(HexColor("#b8d4cd")); c.setFont(FONT, 9); c.drawString(42, H - 99, "Elke schakel bewaart de context die nodig is o…
+ | ^ E702
+161 | stages = [
+162 | ("01", "Orthofoto", "CRS + dekking"),
+ |
+
+scripts\create_portfolio_case_study.py:169:42: E702 Multiple statements on one line (semicolon)
+ |
+167 | ]
+168 | x0, gap, bw = 42, 13, 139
+169 | c.setStrokeColor(HexColor("#4bb99f")); c.setLineWidth(2); c.line(95, 285, 746, 285)
+ | ^ E702
+170 | for i, (num, head, body) in enumerate(stages):
+171 | x = x0 + i * (bw + gap)
+ |
+
+scripts\create_portfolio_case_study.py:169:61: E702 Multiple statements on one line (semicolon)
+ |
+167 | ]
+168 | x0, gap, bw = 42, 13, 139
+169 | c.setStrokeColor(HexColor("#4bb99f")); c.setLineWidth(2); c.line(95, 285, 746, 285)
+ | ^ E702
+170 | for i, (num, head, body) in enumerate(stages):
+171 | x = x0 + i * (bw + gap)
+ |
+
+scripts\create_portfolio_case_study.py:172:44: E702 Multiple statements on one line (semicolon)
+ |
+170 | for i, (num, head, body) in enumerate(stages):
+171 | x = x0 + i * (bw + gap)
+172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
+ | ^ E702
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+ |
+
+scripts\create_portfolio_case_study.py:173:29: E702 Multiple statements on one line (semicolon)
+ |
+171 | x = x0 + i * (bw + gap)
+172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+ | ^ E702
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+ |
+
+scripts\create_portfolio_case_study.py:173:54: E702 Multiple statements on one line (semicolon)
+ |
+171 | x = x0 + i * (bw + gap)
+172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+ | ^ E702
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+ |
+
+scripts\create_portfolio_case_study.py:174:30: E702 Multiple statements on one line (semicolon)
+ |
+172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+ | ^ E702
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
+ |
+
+scripts\create_portfolio_case_study.py:174:56: E702 Multiple statements on one line (semicolon)
+ |
+172 | c.setFillColor(HexColor("#12443d")); c.roundRect(x, 205, bw, 160, 12, fill=1, stroke=0)
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+ | ^ E702
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
+ |
+
+scripts\create_portfolio_case_study.py:175:44: E702 Multiple statements on one line (semicolon)
+ |
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+ | ^ E702
+176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
+177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
+ |
+
+scripts\create_portfolio_case_study.py:175:66: E702 Multiple statements on one line (semicolon)
+ |
+173 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(x + 14, 340, num)
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+ | ^ E702
+176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
+177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
+ |
+
+scripts\create_portfolio_case_study.py:176:49: E702 Multiple statements on one line (semicolon)
+ |
+174 | c.setFillColor(white); c.setFont(FONT_BOLD, 10); c.drawString(x + 14, 295, head)
+175 | c.setFillColor(HexColor("#9fc9bf")); c.setFont(FONT, 7.4); c.drawString(x + 14, 275, body)
+176 | c.setFillColor(MINT if i < 3 else AMBER); c.circle(x + bw / 2, 230, 6, fill=1, stroke=0)
+ | ^ E702
+177 | paragraph(c, "Fail-closed runtime: wanneer CUDA vereist maar niet beschikbaar is, of wanneer een lokaal model ontbreekt, toont Ge…
+178 | footer(c, 4)
+ |
+
+scripts\create_portfolio_case_study.py:182:26: E702 Multiple statements on one line (semicolon)
+ |
+181 | def draw_architecture(c: canvas.Canvas) -> None:
+182 | c.setFillColor(white); c.rect(0, 0, W, H, fill=1, stroke=0)
+ | ^ E702
+183 | title(c, "04 / Architectuur", "Eén keten, expliciete verantwoordelijkheden")
+184 | nodes = [
+ |
+
+scripts\create_portfolio_case_study.py:193:79: E702 Multiple statements on one line (semicolon)
+ |
+191 | ]
+192 | for x, y, w, h, head, body in nodes:
+193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
+ | ^ E702
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+ |
+
+scripts\create_portfolio_case_study.py:194:60: E702 Multiple statements on one line (semicolon)
+ |
+192 | for x, y, w, h, head, body in nodes:
+193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+ | ^ E702
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
+ |
+
+scripts\create_portfolio_case_study.py:194:85: E702 Multiple statements on one line (semicolon)
+ |
+192 | for x, y, w, h, head, body in nodes:
+193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+ | ^ E702
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
+ |
+
+scripts\create_portfolio_case_study.py:195:76: E702 Multiple statements on one line (semicolon)
+ |
+193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+ | ^ E702
+196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
+197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
+ |
+
+scripts\create_portfolio_case_study.py:195:98: E702 Multiple statements on one line (semicolon)
+ |
+193 | c.setFillColor(PALE if "PyTorch" not in head else HexColor("#0d5047")); c.roundRect(x, y, w, h, 10, fill=1, stroke=0)
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+ | ^ E702
+196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
+197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
+ |
+
+scripts\create_portfolio_case_study.py:196:27: E702 Multiple statements on one line (semicolon)
+ |
+194 | c.setFillColor(white if "PyTorch" in head else INK); c.setFont(FONT_BOLD, 9); c.drawString(x + 12, y + 39, head)
+195 | c.setFillColor(HexColor("#b9d8d0") if "PyTorch" in head else MUTED); c.setFont(FONT, 7.2); c.drawString(x + 12, y + 21, body)
+196 | c.setStrokeColor(TEAL); c.setLineWidth(1.5)
+ | ^ E702
+197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
+198 | for (x1,y1),(x2,y2) in arrows:
+ |
+
+scripts\create_portfolio_case_study.py:199:28: E702 Multiple statements on one line (semicolon)
+ |
+197 | arrows = [((185,303),(220,303)),((350,303),(385,388)),((350,303),(385,218)),((535,388),(645,336)),((535,218),(570,303)),((645,270…
+198 | for (x1,y1),(x2,y2) in arrows:
+199 | c.line(x1,y1,x2,y2); c.circle(x2,y2,2.5,fill=1,stroke=0)
+ | ^ E702
+200 | paragraph(c, "PostGIS bewaart querybare geometrie en lifecycle-records. Grote raster-, mask- en modelbestanden blijven versioned …
+201 | footer(c, 5)
+ |
+
+scripts\create_portfolio_case_study.py:206:40: E702 Multiple statements on one line (semicolon)
+ |
+204 | def draw_outcomes(c: canvas.Canvas) -> None:
+205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
+206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
+ | ^ E702
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+ |
+
+scripts\create_portfolio_case_study.py:207:25: E702 Multiple statements on one line (semicolon)
+ |
+205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
+206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+ | ^ E702
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+ |
+
+scripts\create_portfolio_case_study.py:207:50: E702 Multiple statements on one line (semicolon)
+ |
+205 | image_cover(c, PUBLIC / "geointel-dark-case-study-cover.png", 0, 0, W, H)
+206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+ | ^ E702
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+ |
+
+scripts\create_portfolio_case_study.py:208:26: E702 Multiple statements on one line (semicolon)
+ |
+206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+ | ^ E702
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+210 | outcomes = [
+ |
+
+scripts\create_portfolio_case_study.py:208:52: E702 Multiple statements on one line (semicolon)
+ |
+206 | c.setFillColor(HexColor("#041d19")); c.rect(0, 0, W, H, fill=1, stroke=0)
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+ | ^ E702
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+210 | outcomes = [
+ |
+
+scripts\create_portfolio_case_study.py:209:40: E702 Multiple statements on one line (semicolon)
+ |
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+ | ^ E702
+210 | outcomes = [
+211 | ("Map-first", "De gebruiker blijft in dezelfde ruimtelijke context."),
+ |
+
+scripts\create_portfolio_case_study.py:209:61: E702 Multiple statements on one line (semicolon)
+ |
+207 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 8); c.drawString(42, H - 44, "05 / RESULTAAT")
+208 | c.setFillColor(white); c.setFont(FONT_BOLD, 27); c.drawString(42, H - 82, "Een professionele GeoAI-workbench")
+209 | c.setFillColor(HexColor("#c0dad4")); c.setFont(FONT, 10); c.drawString(42, H - 104, "Nationaal/maritiem van scope, lokaal control…
+ | ^ E702
+210 | outcomes = [
+211 | ("Map-first", "De gebruiker blijft in dezelfde ruimtelijke context."),
+ |
+
+scripts\create_portfolio_case_study.py:219:44: E702 Multiple statements on one line (semicolon)
+ |
+217 | x = 42 + (i % 2) * 375
+218 | y = 330 - (i // 2) * 105
+219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
+ | ^ E702
+220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+ |
+
+scripts\create_portfolio_case_study.py:220:29: E702 Multiple statements on one line (semicolon)
+ |
+218 | y = 330 - (i // 2) * 105
+219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
+220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
+ | ^ E702
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+ |
+
+scripts\create_portfolio_case_study.py:220:55: E702 Multiple statements on one line (semicolon)
+ |
+218 | y = 330 - (i // 2) * 105
+219 | c.setFillColor(HexColor("#123f38")); c.roundRect(x, y, 350, 78, 11, fill=1, stroke=0)
+220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
+ | ^ E702
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+ |
+
+scripts\create_portfolio_case_study.py:222:26: E702 Multiple statements on one line (semicolon)
+ |
+220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+ | ^ E702
+223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
+ |
+
+scripts\create_portfolio_case_study.py:222:52: E702 Multiple statements on one line (semicolon)
+ |
+220 | c.setFillColor(MINT); c.setFont(FONT_BOLD, 11); c.drawString(x + 16, y + 48, head)
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+ | ^ E702
+223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
+ |
+
+scripts\create_portfolio_case_study.py:223:40: E702 Multiple statements on one line (semicolon)
+ |
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
+ | ^ E702
+ |
+
+scripts\create_portfolio_case_study.py:223:60: E702 Multiple statements on one line (semicolon)
+ |
+221 | paragraph(c, body, x + 16, y + 38, 316, 8, HexColor("#b8d2cc"), 12)
+222 | c.setFillColor(white); c.setFont(FONT_BOLD, 11); c.drawString(42, 58, "GeoIntel · Jens / ITWorx.tech")
+223 | c.setFillColor(HexColor("#8fb9af")); c.setFont(FONT, 8); c.drawString(42, 42, "Belgium and the Belgian North Sea · v1.0.0")
+ | ^ E702
+ |
+
+scripts\provision_regional_grb_context.py:46:5: F401 [*] `provision_regional_grb_buildings.response_data` imported but unused
+ |
+44 | next_page_url,
+45 | observed_at,
+46 | response_data,
+ | ^^^^^^^^^^^^^ F401
+47 | reusable_manifest,
+48 | safe_slug,
+ |
+ = help: Remove unused import: `provision_regional_grb_buildings.response_data`
+
+scripts\provision_waterinfo_station_history.py:26:30: F401 [*] `shapely.geometry.Point` imported but unused
+ |
+24 | import requests
+25 | from requests.adapters import HTTPAdapter
+26 | from shapely.geometry import Point, mapping, shape
+ | ^^^^^ F401
+27 | from urllib3.util.retry import Retry
+ |
+ = help: Remove unused import
+
+scripts\provision_waterinfo_station_history.py:26:37: F401 [*] `shapely.geometry.mapping` imported but unused
+ |
+24 | import requests
+25 | from requests.adapters import HTTPAdapter
+26 | from shapely.geometry import Point, mapping, shape
+ | ^^^^^^^ F401
+27 | from urllib3.util.retry import Retry
+ |
+ = help: Remove unused import
+
+scripts\refine_yolo_labels_with_sam.py:14:20: F401 [*] `typing.Any` imported but unused
+ |
+12 | import shutil
+13 | from pathlib import Path
+14 | from typing import Any
+ | ^^^ F401
+ |
+ = help: Remove unused import: `typing.Any`
+
+scripts\run_golden_qa_benchmark.py:15:24: F401 [*] `app.models.Area` imported but unused
+ |
+13 | sys.path.insert(0, str(BACKEND_ROOT))
+14 |
+15 | from app.models import Area, Dataset, Metric, QualityCheck # noqa: E402
+ | ^^^^ F401
+16 | from app.services.qa_service import QaService # noqa: E402
+17 | from app.services.quality_service import QualityService # noqa: E402
+ |
+ = help: Remove unused import: `app.models.Area`
+
+scripts\seed_demo_workflow.py:11:1: E402 Module level import not at top of file
+ |
+ 9 | sys.path.insert(0, str(ROOT / "backend"))
+10 |
+11 | from app.db.session import SessionLocal
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+12 | from app.services.demo_workflow_service import DemoWorkflowService
+ |
+
+scripts\seed_demo_workflow.py:12:1: E402 Module level import not at top of file
+ |
+11 | from app.db.session import SessionLocal
+12 | from app.services.demo_workflow_service import DemoWorkflowService
+ | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ E402
+ |
+
+scripts\smoke_contracts.py:4:11: E701 Multiple statements on one line (colon)
+ |
+2 | ROOT = Path(__file__).resolve().parents[1]
+3 | missing=[d for d in ["contracts/api","contracts/database","contracts/events"] if not (ROOT/d).exists()]
+4 | if missing: raise SystemExit("Missing contract directories: "+", ".join(missing))
+ | ^ E701
+5 | print("Contracts smoke OK")
+ |
+
+scripts\smoke_docs.py:5:11: E701 Multiple statements on one line (colon)
+ |
+3 | required_docs = ["docs/M5_OPERATIONAL_READINESS.md","docs/BUILD_GOVERNANCE.md","docs/CI_CD_SPECIFICATION.md","docs/HEALTHCHECK_CONTRACT…
+4 | missing=[p for p in required_docs if not (ROOT/p).exists()]
+5 | if missing: raise SystemExit("Missing docs:\n"+"\n".join(missing))
+ | ^ E701
+6 | print("Documentation smoke OK")
+ |
+
+scripts\train_building_proposal_filter.py:136:39: F401 [*] `torchvision.transforms` imported but unused
+ |
+134 | from torch import nn
+135 | from torch.utils.data import DataLoader
+136 | from torchvision import datasets, transforms
+ | ^^^^^^^^^^ F401
+137 | from torchvision.models import ResNet18_Weights, resnet18
+138 | from ultralytics import YOLO
+ |
+ = help: Remove unused import: `torchvision.transforms`
+
+Found 112 errors.
+[*] 18 fixable with the `--fix` option (2 hidden fixes can be enabled with the `--unsafe-fixes` option).
diff --git a/artifacts/evidence/accuracy/P1/static-risk-signals.json b/artifacts/evidence/accuracy/P1/static-risk-signals.json
index 64e55092..afe84396 100644
--- a/artifacts/evidence/accuracy/P1/static-risk-signals.json
+++ b/artifacts/evidence/accuracy/P1/static-risk-signals.json
@@ -1,663 +1,663 @@
-{
- "counts": {
- "fallback": 27,
- "fixture": 94,
- "heuristic": 1,
- "mock": 31,
- "not_configured": 24,
- "placeholder": 39,
- "todo": 2
- },
- "examples": {
- "fallback": [
- {
- "line": 1046,
- "path": "backend/app/services/export_service.py",
- "text": "def _filename(name: str | None, fallback: str, suffix: str) -> str:"
- },
- {
- "line": 1047,
- "path": "backend/app/services/export_service.py",
- "text": "raw_name = name or fallback"
- },
- {
- "line": 1050,
- "path": "backend/app/services/export_service.py",
- "text": "cleaned = fallback"
- },
- {
- "line": 29,
- "path": "backend/app/services/mdk_bathymetry_acquisition_service.py",
- "text": "No depth values are ever synthesized, no insecure TLS fallback exists and the"
- },
- {
- "line": 173,
- "path": "backend/app/services/mdk_bathymetry_probe_service.py",
- "text": "message=\"MDK WCS TLS certificate validation failed; insecure fallback is prohibited.\","
- },
- {
- "line": 186,
- "path": "backend/app/services/mdk_bathymetry_probe_service.py",
- "text": "\"MDK WCS TLS certificate validation failed; insecure fallback is prohibited.\""
- },
- {
- "line": 440,
- "path": "backend/app/services/raster_operations_service.py",
- "text": "# best effort fallback; keep computed dimensions."
- },
- {
- "line": 19,
- "path": "backend/app/services/raster_service.py",
- "text": "except Exception as exc: # pragma: no cover - exercised via API-level fallback tests"
- },
- {
- "line": 26,
- "path": "backend/app/services/storage_service.py",
- "text": "fallback = \"upload\""
- },
- {
- "line": 28,
- "path": "backend/app/services/storage_service.py",
- "text": "return fallback"
- },
- {
- "line": 37,
- "path": "backend/app/services/storage_service.py",
- "text": "return cleaned or fallback"
- },
- {
- "line": 76,
- "path": "frontend/src/hooks/useGeoAssistant.ts",
- "text": "const fallback = result.default_model && result.items.some((model) => model.name === result.default_model)"
- },
- {
- "line": 79,
- "path": "frontend/src/hooks/useGeoAssistant.ts",
- "text": "setDefaultModel(fallback)"
- },
- {
- "line": 9,
- "path": "frontend/src/lib/authError.ts",
- "text": "export function formatAuthError(error: unknown, fallback: string): string {"
- },
- {
- "line": 10,
- "path": "frontend/src/lib/authError.ts",
- "text": "if (!(error instanceof Error)) return fallback"
- },
- {
- "line": 21,
- "path": "frontend/src/lib/authError.ts",
- "text": "return fallback"
- },
- {
- "line": 24,
- "path": "frontend/src/lib/authError.ts",
- "text": "return error.message || fallback"
- },
- {
- "line": 1,
- "path": "frontend/src/lib/formatError.ts",
- "text": "export function formatError(error: unknown, fallback: string): string {"
- },
- {
- "line": 6,
- "path": "frontend/src/lib/formatError.ts",
- "text": "return fallback"
- },
- {
- "line": 501,
- "path": "scripts/provision_belgium_north_sea_scope.py",
- "text": "def _max_admin_modification(payloads: dict[str, dict[str, Any]], fallback: str) -> str:"
- },
- {
- "line": 507,
- "path": "scripts/provision_belgium_north_sea_scope.py",
- "text": "value = max(values) if values else fallback"
- },
- {
- "line": 111,
- "path": "scripts/refine_yolo_labels_with_sam.py",
- "text": "parser.add_argument(\"--fallback-policy\", choices=(\"retain\", \"drop\"), default=\"retain\")"
- },
- {
- "line": 42,
- "path": "scripts/run_accuracy_phase1_baseline.py",
- "text": "\"fallback\": re.compile(r\"\\b(?:fallback|fall back)\\b\", re.IGNORECASE),"
- },
- {
- "line": 347,
- "path": "scripts/run_accuracy_phase1_baseline.py",
- "text": "\"mock/fixture/placeholder/fallback triage signals\","
- },
- {
- "line": 52,
- "path": "scripts/run_golden_qa_benchmark.py",
- "text": "# Backwards-compatible fallback for older checkouts and local smoke scripts."
- }
- ],
- "fixture": [
- {
- "line": 3,
- "path": "backend/app/providers/__init__.py",
- "text": "from app.providers import base, fixture, grb, manual, osm, registry"
- },
- {
- "line": 5,
- "path": "backend/app/providers/__init__.py",
- "text": "__all__ = [\"base\", \"fixture\", \"grb\", \"manual\", \"osm\", \"registry\"]"
- },
- {
- "line": 9,
- "path": "backend/app/providers/fixture.py",
- "text": "provider_name=\"fixture\","
- },
- {
- "line": 10,
- "path": "backend/app/providers/fixture.py",
- "text": "display_name=\"Fixture data\","
- },
- {
- "line": 11,
- "path": "backend/app/providers/fixture.py",
- "text": "authority_level=\"fixture\","
- },
- {
- "line": 14,
- "path": "backend/app/providers/fixture.py",
- "text": "supported_query_modes=[\"fixture\"],"
- },
- {
- "line": 15,
- "path": "backend/app/providers/fixture.py",
- "text": "fetch_signature=\"tests/fixtures and demo fixture upload flow\","
- },
- {
- "line": 16,
- "path": "backend/app/providers/fixture.py",
- "text": "limitation_message=\"Fixture provider represents local test/demo fixtures only.\","
- },
- {
- "line": 7,
- "path": "backend/app/providers/registry.py",
- "text": "from app.providers.fixture import FixtureProvider"
- },
- {
- "line": 37,
- "path": "backend/app/providers/registry.py",
- "text": "\"fixture\": FixtureProvider(),"
- },
- {
- "line": 112,
- "path": "backend/app/providers/registry.py",
- "text": "provider_name=\"fixture\","
- },
- {
- "line": 114,
- "path": "backend/app/providers/registry.py",
- "text": "message=\"Fixture provider data must use checked-in demo/test fixture flows.\","
- },
- {
- "line": 122,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": ".filter(Dataset.source_name == \"fixture\")"
- },
- {
- "line": 129,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": ".filter(Dataset.source_name == \"fixture\")"
- },
- {
- "line": 148,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": ".filter(Dataset.source_name == \"fixture\")"
- },
- {
- "line": 213,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "source=\"fixture\","
- },
- {
- "line": 218,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "\"fixture\": True,"
- },
- {
- "line": 298,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "source=\"fixture\","
- },
- {
- "line": 300,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "source_name=\"fixture\","
- },
- {
- "line": 303,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "\"fixture\": True,"
- },
- {
- "line": 423,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": ".filter(Dataset.source_name == \"fixture\")"
- },
- {
- "line": 430,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": ".filter(Dataset.source_name == \"fixture\")"
- },
- {
- "line": 472,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "description=\"Offline fixture workflow: reference buildings, predicted buildings and persisted QA metrics.\","
- },
- {
- "line": 497,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "source_name=\"fixture\","
- },
- {
- "line": 509,
- "path": "backend/app/services/demo_workflow_service.py",
- "text": "source_name=\"fixture\","
- }
- ],
- "heuristic": [
- {
- "line": 39,
- "path": "scripts/run_accuracy_phase1_baseline.py",
- "text": "\"heuristic\": re.compile(r\"\\bheuristic(?:s)?\\b\", re.IGNORECASE),"
- }
- ],
- "mock": [
- {
- "line": 7,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mock('../../services/api/auth', () => ({"
- },
- {
- "line": 34,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mocked(login).mockReset()"
- },
- {
- "line": 35,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mocked(loginAsGuest).mockReset()"
- },
- {
- "line": 42,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mocked(login).mockResolvedValue(operatorSession)"
- },
- {
- "line": 57,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mocked(loginAsGuest).mockResolvedValue(guestSession)"
- },
- {
- "line": 75,
- "path": "frontend/src/components/auth/LandingPage.test.tsx",
- "text": "vi.mocked(login).mockRejectedValue(new Error('Gebruikersnaam of wachtwoord is onjuist.'))"
- },
- {
- "line": 8,
- "path": "frontend/src/components/map/MunicipalitySearch.test.tsx",
- "text": "vi.mock('../../services/api/areas', () => ({"
- },
- {
- "line": 14,
- "path": "frontend/src/components/map/MunicipalitySearch.test.tsx",
- "text": "vi.mocked(areasApi.searchMunicipalities).mockResolvedValue({"
- },
- {
- "line": 5,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "const mocks = vi.hoisted(() => ({"
- },
- {
- "line": 9,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "vi.mock('../services/api', () => ({"
- },
- {
- "line": 11,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "resolveCoverage: mocks.resolveCoverage,"
- },
- {
- "line": 35,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "mocks.resolveCoverage.mockResolvedValue(coverageResult)"
- },
- {
- "line": 51,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "expect(mocks.resolveCoverage).not.toHaveBeenCalled()"
- },
- {
- "line": 58,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "expect(mocks.resolveCoverage).not.toHaveBeenCalled()"
- },
- {
- "line": 64,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "expect(mocks.resolveCoverage).toHaveBeenCalledWith({"
- },
- {
- "line": 89,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "mocks.resolveCoverage.mockRejectedValueOnce(new Error('provider unavailable'))"
- },
- {
- "line": 102,
- "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
- "text": "mocks.resolveCoverage.mockImplementationOnce("
- },
- {
- "line": 5,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "const mocks = vi.hoisted(() => ({"
- },
- {
- "line": 9,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "vi.mock('../services/api/temporal', () => ({"
- },
- {
- "line": 11,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "compare: mocks.compare,"
- },
- {
- "line": 34,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "expect(mocks.compare).not.toHaveBeenCalled()"
- },
- {
- "line": 43,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "expect(mocks.compare).not.toHaveBeenCalled()"
- },
- {
- "line": 53,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "mocks.compare.mockResolvedValueOnce(comparison)"
- },
- {
- "line": 64,
- "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
- "text": "expect(mocks.compare).toHaveBeenCalledWith('project-1', {"
- },
- {
- "line": 37,
- "path": "scripts/run_accuracy_phase1_baseline.py",
- "text": "\"mock\": re.compile(r\"\\bmock(?:ed|ing|s)?\\b\", re.IGNORECASE),"
- }
- ],
- "not_configured": [
- {
- "line": 166,
- "path": "backend/app/api/routes/external.py",
- "text": "status=response.get(\"status\", \"not_configured\"),"
- },
- {
- "line": 149,
- "path": "backend/app/api/routes/health.py",
- "text": "yolo_status = configured_yolo.status if configured_yolo else \"not_configured\""
- },
- {
- "line": 79,
- "path": "backend/app/providers/base.py",
- "text": "status=\"configured\" if self.is_configured else \"not_configured\","
- },
- {
- "line": 94,
- "path": "backend/app/providers/base.py",
- "text": "\"status\": \"not_configured\","
- },
- {
- "line": 96,
- "path": "backend/app/providers/registry.py",
- "text": "status=\"not_configured\","
- },
- {
- "line": 9,
- "path": "backend/app/schemas/coverage.py",
- "text": "CoverageStatus = Literal[\"operational\", \"partial\", \"not_configured\", \"unsupported\"]"
- },
- {
- "line": 53,
- "path": "backend/app/services/coverage_registry_service.py",
- "text": "STATUS_ORDER = (\"unsupported\", \"not_configured\", \"partial\", \"operational\")"
- },
- {
- "line": 340,
- "path": "backend/app/services/coverage_registry_service.py",
- "text": "integration_status=\"not_configured\","
- },
- {
- "line": 572,
- "path": "backend/app/services/coverage_registry_service.py",
- "text": "\"not_configured\""
- },
- {
- "line": 266,
- "path": "backend/app/services/geo_assistant_service.py",
- "text": "status=\"not_configured\","
- },
- {
- "line": 42,
- "path": "backend/app/services/model_registry_service.py",
- "text": "status=\"not_configured\","
- },
- {
- "line": 98,
- "path": "backend/app/services/model_registry_service.py",
- "text": "status=\"not_configured\","
- },
- {
- "line": 127,
- "path": "backend/app/services/model_registry_service.py",
- "text": "status = \"not_configured\""
- },
- {
- "line": 169,
- "path": "backend/app/services/model_registry_service.py",
- "text": "status = \"not_configured\""
- },
- {
- "line": 211,
- "path": "backend/app/services/model_registry_service.py",
- "text": "status = \"not_configured\""
- },
- {
- "line": 36,
- "path": "backend/app/services/yolo_preflight_service.py",
- "text": "\"status\": \"not_configured\","
- },
- {
- "line": 40,
- "path": "frontend/src/components/detection/DetectionModelManagement.tsx",
- "text": "if (value === 'not_configured') return 'niet geconfigureerd'"
- },
- {
- "line": 295,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "text": "not_configured: 'Niet gekoppeld',"
- },
- {
- "line": 1050,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "text": "{ operational: 0, partial: 0, not_configured: 0, unsupported: 0 },"
- },
- {
- "line": 1051,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "text": ") ?? { operational: 0, partial: 0, not_configured: 0, unsupported: 0 },"
- },
- {
- "line": 3365,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "text": "{coverageCounts.not_configured} niet gekoppeld"
- },
- {
- "line": 6,
- "path": "frontend/src/components/models/modelOptions.ts",
- "text": "const configured = model.configured && model.status !== 'not_configured'"
- },
- {
- "line": 1072,
- "path": "frontend/src/types.ts",
- "text": "export type CoverageStatus = 'operational' | 'partial' | 'not_configured' | 'unsupported'"
- },
- {
- "line": 40,
- "path": "scripts/run_accuracy_phase1_baseline.py",
- "text": "\"not_configured\": re.compile(r\"\\bnot_configured\\b\", re.IGNORECASE),"
- }
- ],
- "placeholder": [
- {
- "line": 36,
- "path": "backend/app/services/model_registry_service.py",
- "text": "model_id=\"yolo-placeholder\","
- },
- {
- "line": 37,
- "path": "backend/app/services/model_registry_service.py",
- "text": "display_name=\"YOLO detector placeholder\","
- },
- {
- "line": 92,
- "path": "backend/app/services/model_registry_service.py",
- "text": "model_id=\"segmentation-placeholder\","
- },
- {
- "line": 93,
- "path": "backend/app/services/model_registry_service.py",
- "text": "display_name=\"Segmentation placeholder\","
- },
- {
- "line": 94,
- "path": "backend/app/services/model_registry_service.py",
- "text": "framework=\"placeholder\","
- },
- {
- "line": 99,
- "path": "backend/app/services/model_registry_service.py",
- "text": "limitation_message=\"Segmentation inference is not configured for this placeholder; no model is downloaded or executed.\","
- },
- {
- "line": 187,
- "path": "frontend/src/components/assistant/GeoAssistantPanel.tsx",
- "text": "placeholder=\"Bijvoorbeeld: hoeveel bos verdween er sinds 2013?\""
- },
- {
- "line": 246,
- "path": "frontend/src/components/datasets/DatasetPanel.tsx",
- "text": "placeholder=\"bijvoorbeeld eigen luchtbeeld\""
- },
- {
- "line": 306,
- "path": "frontend/src/components/datasets/DatasetPanel.tsx",
- "text": "placeholder=\"Naam, bron, gemeente of type\""
- },
- {
- "line": 276,
- "path": "frontend/src/components/datasets/RasterControls.tsx",
- "text": "placeholder=\"EPSG:31370\""
- },
- {
- "line": 345,
- "path": "frontend/src/components/datasets/RasterControls.tsx",
- "text": "placeholder=\"optioneel\""
- },
- {
- "line": 44,
- "path": "frontend/src/components/detection/DetectionLab.tsx",
- "text": "if (modelName === 'yolo-placeholder') return 'Niet-geconfigureerd gebouwmodel'"
- },
- {
- "line": 516,
- "path": "frontend/src/components/detection/DetectionLab.tsx",
- "text": "placeholder=\"Pad naar de aangemaakte beeldtegels\""
- },
- {
- "line": 583,
- "path": "frontend/src/components/detection/DetectionLab.tsx",
- "text": "placeholder=\"0.50 0.25 0.15\""
- },
- {
- "line": 715,
- "path": "frontend/src/components/detection/DetectionLab.tsx",
- "text": "placeholder=\"bijvoorbeeld gebouw\""
- },
- {
- "line": 28,
- "path": "frontend/src/components/detection/DetectionModelManagement.tsx",
- "text": "if (model.model_id === 'yolo-placeholder') return 'Gebouwmodel nog niet geconfigureerd'"
- },
- {
- "line": 402,
- "path": "frontend/src/components/exports/ExportCenter.tsx",
- "text": "placeholder=\"Type, id of pad\""
- },
- {
- "line": 2312,
- "path": "frontend/src/components/map/MapWorkspace.tsx",
- "text": "placeholder=\"Zoek thema’s\""
- },
- {
- "line": 82,
- "path": "frontend/src/components/map/MunicipalitySearch.tsx",
- "text": "placeholder=\"Gemeentenaam of NIS-code\""
- },
- {
- "line": 98,
- "path": "frontend/src/components/project/AreaPanel.tsx",
- "text": "placeholder=\"Naam van het gebied\""
- },
- {
- "line": 106,
- "path": "frontend/src/components/project/AreaPanel.tsx",
- "text": "placeholder=\"EPSG:4326\""
- },
- {
- "line": 142,
- "path": "frontend/src/components/project/AreaPanel.tsx",
- "text": "placeholder=\"Bijvoorbeeld Brussel, Namen of Noordzee\""
- },
- {
- "line": 119,
- "path": "frontend/src/components/project/ProjectPanel.tsx",
- "text": "placeholder=\"Naam van de werkruimte\""
- },
- {
- "line": 127,
- "path": "frontend/src/components/project/ProjectPanel.tsx",
- "text": "placeholder=\"Korte beschrijving\""
- },
- {
- "line": 135,
- "path": "frontend/src/components/project/ProjectPanel.tsx",
- "text": "placeholder=\"Regio\""
- }
- ],
- "todo": [
- {
- "line": 23,
- "path": "scripts/codex_pass_end_check.sh",
- "text": "\"TODO: implement later\\|placeholder only\\|fake completed\" \\"
- },
- {
- "line": 6,
- "path": "scripts/contract_drift_grep.sh",
- "text": "if grep -R \"TODO: decide\\|TBD\\|placeholder only\\|fake real\" -n docs contracts backend frontend prompts 2>/dev/null; then"
- }
- ]
- },
- "interpretation": "Triage signals only; production impact requires a traced contract/runtime path."
-}
+{
+ "counts": {
+ "fallback": 27,
+ "fixture": 94,
+ "heuristic": 1,
+ "mock": 31,
+ "not_configured": 24,
+ "placeholder": 39,
+ "todo": 2
+ },
+ "examples": {
+ "fallback": [
+ {
+ "line": 1046,
+ "path": "backend/app/services/export_service.py",
+ "text": "def _filename(name: str | None, fallback: str, suffix: str) -> str:"
+ },
+ {
+ "line": 1047,
+ "path": "backend/app/services/export_service.py",
+ "text": "raw_name = name or fallback"
+ },
+ {
+ "line": 1050,
+ "path": "backend/app/services/export_service.py",
+ "text": "cleaned = fallback"
+ },
+ {
+ "line": 29,
+ "path": "backend/app/services/mdk_bathymetry_acquisition_service.py",
+ "text": "No depth values are ever synthesized, no insecure TLS fallback exists and the"
+ },
+ {
+ "line": 173,
+ "path": "backend/app/services/mdk_bathymetry_probe_service.py",
+ "text": "message=\"MDK WCS TLS certificate validation failed; insecure fallback is prohibited.\","
+ },
+ {
+ "line": 186,
+ "path": "backend/app/services/mdk_bathymetry_probe_service.py",
+ "text": "\"MDK WCS TLS certificate validation failed; insecure fallback is prohibited.\""
+ },
+ {
+ "line": 440,
+ "path": "backend/app/services/raster_operations_service.py",
+ "text": "# best effort fallback; keep computed dimensions."
+ },
+ {
+ "line": 19,
+ "path": "backend/app/services/raster_service.py",
+ "text": "except Exception as exc: # pragma: no cover - exercised via API-level fallback tests"
+ },
+ {
+ "line": 26,
+ "path": "backend/app/services/storage_service.py",
+ "text": "fallback = \"upload\""
+ },
+ {
+ "line": 28,
+ "path": "backend/app/services/storage_service.py",
+ "text": "return fallback"
+ },
+ {
+ "line": 37,
+ "path": "backend/app/services/storage_service.py",
+ "text": "return cleaned or fallback"
+ },
+ {
+ "line": 76,
+ "path": "frontend/src/hooks/useGeoAssistant.ts",
+ "text": "const fallback = result.default_model && result.items.some((model) => model.name === result.default_model)"
+ },
+ {
+ "line": 79,
+ "path": "frontend/src/hooks/useGeoAssistant.ts",
+ "text": "setDefaultModel(fallback)"
+ },
+ {
+ "line": 9,
+ "path": "frontend/src/lib/authError.ts",
+ "text": "export function formatAuthError(error: unknown, fallback: string): string {"
+ },
+ {
+ "line": 10,
+ "path": "frontend/src/lib/authError.ts",
+ "text": "if (!(error instanceof Error)) return fallback"
+ },
+ {
+ "line": 21,
+ "path": "frontend/src/lib/authError.ts",
+ "text": "return fallback"
+ },
+ {
+ "line": 24,
+ "path": "frontend/src/lib/authError.ts",
+ "text": "return error.message || fallback"
+ },
+ {
+ "line": 1,
+ "path": "frontend/src/lib/formatError.ts",
+ "text": "export function formatError(error: unknown, fallback: string): string {"
+ },
+ {
+ "line": 6,
+ "path": "frontend/src/lib/formatError.ts",
+ "text": "return fallback"
+ },
+ {
+ "line": 501,
+ "path": "scripts/provision_belgium_north_sea_scope.py",
+ "text": "def _max_admin_modification(payloads: dict[str, dict[str, Any]], fallback: str) -> str:"
+ },
+ {
+ "line": 507,
+ "path": "scripts/provision_belgium_north_sea_scope.py",
+ "text": "value = max(values) if values else fallback"
+ },
+ {
+ "line": 111,
+ "path": "scripts/refine_yolo_labels_with_sam.py",
+ "text": "parser.add_argument(\"--fallback-policy\", choices=(\"retain\", \"drop\"), default=\"retain\")"
+ },
+ {
+ "line": 42,
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "text": "\"fallback\": re.compile(r\"\\b(?:fallback|fall back)\\b\", re.IGNORECASE),"
+ },
+ {
+ "line": 347,
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "text": "\"mock/fixture/placeholder/fallback triage signals\","
+ },
+ {
+ "line": 52,
+ "path": "scripts/run_golden_qa_benchmark.py",
+ "text": "# Backwards-compatible fallback for older checkouts and local smoke scripts."
+ }
+ ],
+ "fixture": [
+ {
+ "line": 3,
+ "path": "backend/app/providers/__init__.py",
+ "text": "from app.providers import base, fixture, grb, manual, osm, registry"
+ },
+ {
+ "line": 5,
+ "path": "backend/app/providers/__init__.py",
+ "text": "__all__ = [\"base\", \"fixture\", \"grb\", \"manual\", \"osm\", \"registry\"]"
+ },
+ {
+ "line": 9,
+ "path": "backend/app/providers/fixture.py",
+ "text": "provider_name=\"fixture\","
+ },
+ {
+ "line": 10,
+ "path": "backend/app/providers/fixture.py",
+ "text": "display_name=\"Fixture data\","
+ },
+ {
+ "line": 11,
+ "path": "backend/app/providers/fixture.py",
+ "text": "authority_level=\"fixture\","
+ },
+ {
+ "line": 14,
+ "path": "backend/app/providers/fixture.py",
+ "text": "supported_query_modes=[\"fixture\"],"
+ },
+ {
+ "line": 15,
+ "path": "backend/app/providers/fixture.py",
+ "text": "fetch_signature=\"tests/fixtures and demo fixture upload flow\","
+ },
+ {
+ "line": 16,
+ "path": "backend/app/providers/fixture.py",
+ "text": "limitation_message=\"Fixture provider represents local test/demo fixtures only.\","
+ },
+ {
+ "line": 7,
+ "path": "backend/app/providers/registry.py",
+ "text": "from app.providers.fixture import FixtureProvider"
+ },
+ {
+ "line": 37,
+ "path": "backend/app/providers/registry.py",
+ "text": "\"fixture\": FixtureProvider(),"
+ },
+ {
+ "line": 112,
+ "path": "backend/app/providers/registry.py",
+ "text": "provider_name=\"fixture\","
+ },
+ {
+ "line": 114,
+ "path": "backend/app/providers/registry.py",
+ "text": "message=\"Fixture provider data must use checked-in demo/test fixture flows.\","
+ },
+ {
+ "line": 122,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": ".filter(Dataset.source_name == \"fixture\")"
+ },
+ {
+ "line": 129,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": ".filter(Dataset.source_name == \"fixture\")"
+ },
+ {
+ "line": 148,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": ".filter(Dataset.source_name == \"fixture\")"
+ },
+ {
+ "line": 213,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "source=\"fixture\","
+ },
+ {
+ "line": 218,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "\"fixture\": True,"
+ },
+ {
+ "line": 298,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "source=\"fixture\","
+ },
+ {
+ "line": 300,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "source_name=\"fixture\","
+ },
+ {
+ "line": 303,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "\"fixture\": True,"
+ },
+ {
+ "line": 423,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": ".filter(Dataset.source_name == \"fixture\")"
+ },
+ {
+ "line": 430,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": ".filter(Dataset.source_name == \"fixture\")"
+ },
+ {
+ "line": 472,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "description=\"Offline fixture workflow: reference buildings, predicted buildings and persisted QA metrics.\","
+ },
+ {
+ "line": 497,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "source_name=\"fixture\","
+ },
+ {
+ "line": 509,
+ "path": "backend/app/services/demo_workflow_service.py",
+ "text": "source_name=\"fixture\","
+ }
+ ],
+ "heuristic": [
+ {
+ "line": 39,
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "text": "\"heuristic\": re.compile(r\"\\bheuristic(?:s)?\\b\", re.IGNORECASE),"
+ }
+ ],
+ "mock": [
+ {
+ "line": 7,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mock('../../services/api/auth', () => ({"
+ },
+ {
+ "line": 34,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mocked(login).mockReset()"
+ },
+ {
+ "line": 35,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mocked(loginAsGuest).mockReset()"
+ },
+ {
+ "line": 42,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mocked(login).mockResolvedValue(operatorSession)"
+ },
+ {
+ "line": 57,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mocked(loginAsGuest).mockResolvedValue(guestSession)"
+ },
+ {
+ "line": 75,
+ "path": "frontend/src/components/auth/LandingPage.test.tsx",
+ "text": "vi.mocked(login).mockRejectedValue(new Error('Gebruikersnaam of wachtwoord is onjuist.'))"
+ },
+ {
+ "line": 8,
+ "path": "frontend/src/components/map/MunicipalitySearch.test.tsx",
+ "text": "vi.mock('../../services/api/areas', () => ({"
+ },
+ {
+ "line": 14,
+ "path": "frontend/src/components/map/MunicipalitySearch.test.tsx",
+ "text": "vi.mocked(areasApi.searchMunicipalities).mockResolvedValue({"
+ },
+ {
+ "line": 5,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "const mocks = vi.hoisted(() => ({"
+ },
+ {
+ "line": 9,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "vi.mock('../services/api', () => ({"
+ },
+ {
+ "line": 11,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "resolveCoverage: mocks.resolveCoverage,"
+ },
+ {
+ "line": 35,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "mocks.resolveCoverage.mockResolvedValue(coverageResult)"
+ },
+ {
+ "line": 51,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "expect(mocks.resolveCoverage).not.toHaveBeenCalled()"
+ },
+ {
+ "line": 58,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "expect(mocks.resolveCoverage).not.toHaveBeenCalled()"
+ },
+ {
+ "line": 64,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "expect(mocks.resolveCoverage).toHaveBeenCalledWith({"
+ },
+ {
+ "line": 89,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "mocks.resolveCoverage.mockRejectedValueOnce(new Error('provider unavailable'))"
+ },
+ {
+ "line": 102,
+ "path": "frontend/src/hooks/useCoverageResolver.test.tsx",
+ "text": "mocks.resolveCoverage.mockImplementationOnce("
+ },
+ {
+ "line": 5,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "const mocks = vi.hoisted(() => ({"
+ },
+ {
+ "line": 9,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "vi.mock('../services/api/temporal', () => ({"
+ },
+ {
+ "line": 11,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "compare: mocks.compare,"
+ },
+ {
+ "line": 34,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "expect(mocks.compare).not.toHaveBeenCalled()"
+ },
+ {
+ "line": 43,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "expect(mocks.compare).not.toHaveBeenCalled()"
+ },
+ {
+ "line": 53,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "mocks.compare.mockResolvedValueOnce(comparison)"
+ },
+ {
+ "line": 64,
+ "path": "frontend/src/hooks/useTemporalComparison.test.tsx",
+ "text": "expect(mocks.compare).toHaveBeenCalledWith('project-1', {"
+ },
+ {
+ "line": 37,
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "text": "\"mock\": re.compile(r\"\\bmock(?:ed|ing|s)?\\b\", re.IGNORECASE),"
+ }
+ ],
+ "not_configured": [
+ {
+ "line": 166,
+ "path": "backend/app/api/routes/external.py",
+ "text": "status=response.get(\"status\", \"not_configured\"),"
+ },
+ {
+ "line": 149,
+ "path": "backend/app/api/routes/health.py",
+ "text": "yolo_status = configured_yolo.status if configured_yolo else \"not_configured\""
+ },
+ {
+ "line": 79,
+ "path": "backend/app/providers/base.py",
+ "text": "status=\"configured\" if self.is_configured else \"not_configured\","
+ },
+ {
+ "line": 94,
+ "path": "backend/app/providers/base.py",
+ "text": "\"status\": \"not_configured\","
+ },
+ {
+ "line": 96,
+ "path": "backend/app/providers/registry.py",
+ "text": "status=\"not_configured\","
+ },
+ {
+ "line": 9,
+ "path": "backend/app/schemas/coverage.py",
+ "text": "CoverageStatus = Literal[\"operational\", \"partial\", \"not_configured\", \"unsupported\"]"
+ },
+ {
+ "line": 53,
+ "path": "backend/app/services/coverage_registry_service.py",
+ "text": "STATUS_ORDER = (\"unsupported\", \"not_configured\", \"partial\", \"operational\")"
+ },
+ {
+ "line": 340,
+ "path": "backend/app/services/coverage_registry_service.py",
+ "text": "integration_status=\"not_configured\","
+ },
+ {
+ "line": 572,
+ "path": "backend/app/services/coverage_registry_service.py",
+ "text": "\"not_configured\""
+ },
+ {
+ "line": 266,
+ "path": "backend/app/services/geo_assistant_service.py",
+ "text": "status=\"not_configured\","
+ },
+ {
+ "line": 42,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "status=\"not_configured\","
+ },
+ {
+ "line": 98,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "status=\"not_configured\","
+ },
+ {
+ "line": 127,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "status = \"not_configured\""
+ },
+ {
+ "line": 169,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "status = \"not_configured\""
+ },
+ {
+ "line": 211,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "status = \"not_configured\""
+ },
+ {
+ "line": 36,
+ "path": "backend/app/services/yolo_preflight_service.py",
+ "text": "\"status\": \"not_configured\","
+ },
+ {
+ "line": 40,
+ "path": "frontend/src/components/detection/DetectionModelManagement.tsx",
+ "text": "if (value === 'not_configured') return 'niet geconfigureerd'"
+ },
+ {
+ "line": 295,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "text": "not_configured: 'Niet gekoppeld',"
+ },
+ {
+ "line": 1050,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "text": "{ operational: 0, partial: 0, not_configured: 0, unsupported: 0 },"
+ },
+ {
+ "line": 1051,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "text": ") ?? { operational: 0, partial: 0, not_configured: 0, unsupported: 0 },"
+ },
+ {
+ "line": 3365,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "text": "{coverageCounts.not_configured} niet gekoppeld"
+ },
+ {
+ "line": 6,
+ "path": "frontend/src/components/models/modelOptions.ts",
+ "text": "const configured = model.configured && model.status !== 'not_configured'"
+ },
+ {
+ "line": 1072,
+ "path": "frontend/src/types.ts",
+ "text": "export type CoverageStatus = 'operational' | 'partial' | 'not_configured' | 'unsupported'"
+ },
+ {
+ "line": 40,
+ "path": "scripts/run_accuracy_phase1_baseline.py",
+ "text": "\"not_configured\": re.compile(r\"\\bnot_configured\\b\", re.IGNORECASE),"
+ }
+ ],
+ "placeholder": [
+ {
+ "line": 36,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "model_id=\"yolo-placeholder\","
+ },
+ {
+ "line": 37,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "display_name=\"YOLO detector placeholder\","
+ },
+ {
+ "line": 92,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "model_id=\"segmentation-placeholder\","
+ },
+ {
+ "line": 93,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "display_name=\"Segmentation placeholder\","
+ },
+ {
+ "line": 94,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "framework=\"placeholder\","
+ },
+ {
+ "line": 99,
+ "path": "backend/app/services/model_registry_service.py",
+ "text": "limitation_message=\"Segmentation inference is not configured for this placeholder; no model is downloaded or executed.\","
+ },
+ {
+ "line": 187,
+ "path": "frontend/src/components/assistant/GeoAssistantPanel.tsx",
+ "text": "placeholder=\"Bijvoorbeeld: hoeveel bos verdween er sinds 2013?\""
+ },
+ {
+ "line": 246,
+ "path": "frontend/src/components/datasets/DatasetPanel.tsx",
+ "text": "placeholder=\"bijvoorbeeld eigen luchtbeeld\""
+ },
+ {
+ "line": 306,
+ "path": "frontend/src/components/datasets/DatasetPanel.tsx",
+ "text": "placeholder=\"Naam, bron, gemeente of type\""
+ },
+ {
+ "line": 276,
+ "path": "frontend/src/components/datasets/RasterControls.tsx",
+ "text": "placeholder=\"EPSG:31370\""
+ },
+ {
+ "line": 345,
+ "path": "frontend/src/components/datasets/RasterControls.tsx",
+ "text": "placeholder=\"optioneel\""
+ },
+ {
+ "line": 44,
+ "path": "frontend/src/components/detection/DetectionLab.tsx",
+ "text": "if (modelName === 'yolo-placeholder') return 'Niet-geconfigureerd gebouwmodel'"
+ },
+ {
+ "line": 516,
+ "path": "frontend/src/components/detection/DetectionLab.tsx",
+ "text": "placeholder=\"Pad naar de aangemaakte beeldtegels\""
+ },
+ {
+ "line": 583,
+ "path": "frontend/src/components/detection/DetectionLab.tsx",
+ "text": "placeholder=\"0.50 0.25 0.15\""
+ },
+ {
+ "line": 715,
+ "path": "frontend/src/components/detection/DetectionLab.tsx",
+ "text": "placeholder=\"bijvoorbeeld gebouw\""
+ },
+ {
+ "line": 28,
+ "path": "frontend/src/components/detection/DetectionModelManagement.tsx",
+ "text": "if (model.model_id === 'yolo-placeholder') return 'Gebouwmodel nog niet geconfigureerd'"
+ },
+ {
+ "line": 402,
+ "path": "frontend/src/components/exports/ExportCenter.tsx",
+ "text": "placeholder=\"Type, id of pad\""
+ },
+ {
+ "line": 2312,
+ "path": "frontend/src/components/map/MapWorkspace.tsx",
+ "text": "placeholder=\"Zoek thema’s\""
+ },
+ {
+ "line": 82,
+ "path": "frontend/src/components/map/MunicipalitySearch.tsx",
+ "text": "placeholder=\"Gemeentenaam of NIS-code\""
+ },
+ {
+ "line": 98,
+ "path": "frontend/src/components/project/AreaPanel.tsx",
+ "text": "placeholder=\"Naam van het gebied\""
+ },
+ {
+ "line": 106,
+ "path": "frontend/src/components/project/AreaPanel.tsx",
+ "text": "placeholder=\"EPSG:4326\""
+ },
+ {
+ "line": 142,
+ "path": "frontend/src/components/project/AreaPanel.tsx",
+ "text": "placeholder=\"Bijvoorbeeld Brussel, Namen of Noordzee\""
+ },
+ {
+ "line": 119,
+ "path": "frontend/src/components/project/ProjectPanel.tsx",
+ "text": "placeholder=\"Naam van de werkruimte\""
+ },
+ {
+ "line": 127,
+ "path": "frontend/src/components/project/ProjectPanel.tsx",
+ "text": "placeholder=\"Korte beschrijving\""
+ },
+ {
+ "line": 135,
+ "path": "frontend/src/components/project/ProjectPanel.tsx",
+ "text": "placeholder=\"Regio\""
+ }
+ ],
+ "todo": [
+ {
+ "line": 23,
+ "path": "scripts/codex_pass_end_check.sh",
+ "text": "\"TODO: implement later\\|placeholder only\\|fake completed\" \\"
+ },
+ {
+ "line": 6,
+ "path": "scripts/contract_drift_grep.sh",
+ "text": "if grep -R \"TODO: decide\\|TBD\\|placeholder only\\|fake real\" -n docs contracts backend frontend prompts 2>/dev/null; then"
+ }
+ ]
+ },
+ "interpretation": "Triage signals only; production impact requires a traced contract/runtime path."
+}
diff --git a/artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json b/artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json
index ea17c047..396035ce 100644
--- a/artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json
+++ b/artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json
@@ -1,215 +1,215 @@
-{
- "captured_at": "2026-08-01T18:13:54.6553+02:00",
- "claim_boundary": "One production-adapter inference completed on one existing tile. No accuracy, calibration, geographic-generalization, or release claim follows from this smoke.",
- "configuration": {
- "confidence": 0.5,
- "deterministic_algorithms": true,
- "device": "cuda:0",
- "image_size": 640,
- "max_detections": 1000,
- "seed": 20260801
- },
- "input": {
- "manifest_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/manifest.json",
- "manifest_sha256": "6ab8a96bf2a1405e224932afb90255311a09bbeaed4e9a2fdcdf8b1bc2230abd",
- "raster": {
- "available": true,
- "bounds": [
- 193277.53584918313,
- 205708.27443503588,
- 193777.53584918313,
- 206208.27443503588
- ],
- "count": 3,
- "crs": "EPSG:31370",
- "dtypes": [
- "uint8",
- "uint8",
- "uint8"
- ],
- "height": 512,
- "nodata": null,
- "transform": [
- 0.9765625,
- 0.0,
- 193277.53584918313,
- 0.0,
- -0.9765625,
- 206208.27443503588,
- 0.0,
- 0.0,
- 1.0
- ],
- "width": 512
- },
- "tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif",
- "tile_sha256": "134a9e86850c92c577c73bc6ee57a9df7d4c1c513ae6450263e800b6dd47b6ee",
- "tile_size_bytes": 669227
- },
- "model": {
- "path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
- "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
- "size_bytes": 22516074
- },
- "output": {
- "class_counts": {
- "building": 17
- },
- "confidence": {
- "maximum": 0.8144345879554749,
- "mean": 0.5594814244438621,
- "minimum": 0.5008771419525146
- },
- "count": 17,
- "sample": [
- {
- "bbox": [
- 125.5418930053711,
- 157.9995880126953,
- 187.2771453857422,
- 232.72903442382812
- ],
- "class_name": "building",
- "confidence": 0.8144345879554749,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 38.20725631713867,
- 487.8446350097656,
- 56.458614349365234,
- 510.8298034667969
- ],
- "class_name": "building",
- "confidence": 0.6531882286071777,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 177.36990356445312,
- 229.9929656982422,
- 248.5861053466797,
- 267.96173095703125
- ],
- "class_name": "building",
- "confidence": 0.6213690638542175,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 367.4935607910156,
- 474.3263244628906,
- 407.673828125,
- 498.2358093261719
- ],
- "class_name": "building",
- "confidence": 0.6148342490196228,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 435.2783203125,
- 131.2145233154297,
- 453.61016845703125,
- 166.76919555664062
- ],
- "class_name": "building",
- "confidence": 0.5637134313583374,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 407.32525634765625,
- 317.380126953125,
- 416.885009765625,
- 326.8919982910156
- ],
- "class_name": "building",
- "confidence": 0.547556459903717,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 395.66558837890625,
- 356.8952331542969,
- 413.51416015625,
- 377.1672668457031
- ],
- "class_name": "building",
- "confidence": 0.5378748774528503,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 394.0309143066406,
- 143.1604461669922,
- 408.4023132324219,
- 167.8805389404297
- ],
- "class_name": "building",
- "confidence": 0.5360639095306396,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 125.3250503540039,
- 56.1500358581543,
- 157.87998962402344,
- 68.70291900634766
- ],
- "class_name": "building",
- "confidence": 0.5342658162117004,
- "properties": {
- "class_id": 0
- }
- },
- {
- "bbox": [
- 213.7998504638672,
- 77.86518859863281,
- 230.8061065673828,
- 90.1888198852539
- ],
- "class_name": "building",
- "confidence": 0.5319290161132812,
- "properties": {
- "class_id": 0
- }
- }
- ]
- },
- "read_only": true,
- "runtime": {
- "cuda_available": true,
- "cuda_device_index": 0,
- "cuda_device_name": "NVIDIA GeForce RTX 4080 SUPER",
- "cuda_peak_memory_bytes": 82307072,
- "cuda_runtime": "12.8",
- "python": "3.11.2 (main, May 12 2026, 05:17:27) [GCC 12.2.0]",
- "torch": "2.11.0+cu128",
- "ultralytics": "8.4.99"
- },
- "schema_version": 1,
- "status": "passed",
- "timing_seconds": {
- "inference": 0.8836944859940559,
- "model_load": 0.48524460900807753,
- "total": 1.3689390950021334
- }
-}
+{
+ "captured_at": "2026-08-01T18:13:54.6553+02:00",
+ "claim_boundary": "One production-adapter inference completed on one existing tile. No accuracy, calibration, geographic-generalization, or release claim follows from this smoke.",
+ "configuration": {
+ "confidence": 0.5,
+ "deterministic_algorithms": true,
+ "device": "cuda:0",
+ "image_size": 640,
+ "max_detections": 1000,
+ "seed": 20260801
+ },
+ "input": {
+ "manifest_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/manifest.json",
+ "manifest_sha256": "6ab8a96bf2a1405e224932afb90255311a09bbeaed4e9a2fdcdf8b1bc2230abd",
+ "raster": {
+ "available": true,
+ "bounds": [
+ 193277.53584918313,
+ 205708.27443503588,
+ 193777.53584918313,
+ 206208.27443503588
+ ],
+ "count": 3,
+ "crs": "EPSG:31370",
+ "dtypes": [
+ "uint8",
+ "uint8",
+ "uint8"
+ ],
+ "height": 512,
+ "nodata": null,
+ "transform": [
+ 0.9765625,
+ 0.0,
+ 193277.53584918313,
+ 0.0,
+ -0.9765625,
+ 206208.27443503588,
+ 0.0,
+ 0.0,
+ 1.0
+ ],
+ "width": 512
+ },
+ "tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif",
+ "tile_sha256": "134a9e86850c92c577c73bc6ee57a9df7d4c1c513ae6450263e800b6dd47b6ee",
+ "tile_size_bytes": 669227
+ },
+ "model": {
+ "path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
+ "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
+ "size_bytes": 22516074
+ },
+ "output": {
+ "class_counts": {
+ "building": 17
+ },
+ "confidence": {
+ "maximum": 0.8144345879554749,
+ "mean": 0.5594814244438621,
+ "minimum": 0.5008771419525146
+ },
+ "count": 17,
+ "sample": [
+ {
+ "bbox": [
+ 125.5418930053711,
+ 157.9995880126953,
+ 187.2771453857422,
+ 232.72903442382812
+ ],
+ "class_name": "building",
+ "confidence": 0.8144345879554749,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 38.20725631713867,
+ 487.8446350097656,
+ 56.458614349365234,
+ 510.8298034667969
+ ],
+ "class_name": "building",
+ "confidence": 0.6531882286071777,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 177.36990356445312,
+ 229.9929656982422,
+ 248.5861053466797,
+ 267.96173095703125
+ ],
+ "class_name": "building",
+ "confidence": 0.6213690638542175,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 367.4935607910156,
+ 474.3263244628906,
+ 407.673828125,
+ 498.2358093261719
+ ],
+ "class_name": "building",
+ "confidence": 0.6148342490196228,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 435.2783203125,
+ 131.2145233154297,
+ 453.61016845703125,
+ 166.76919555664062
+ ],
+ "class_name": "building",
+ "confidence": 0.5637134313583374,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 407.32525634765625,
+ 317.380126953125,
+ 416.885009765625,
+ 326.8919982910156
+ ],
+ "class_name": "building",
+ "confidence": 0.547556459903717,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 395.66558837890625,
+ 356.8952331542969,
+ 413.51416015625,
+ 377.1672668457031
+ ],
+ "class_name": "building",
+ "confidence": 0.5378748774528503,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 394.0309143066406,
+ 143.1604461669922,
+ 408.4023132324219,
+ 167.8805389404297
+ ],
+ "class_name": "building",
+ "confidence": 0.5360639095306396,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 125.3250503540039,
+ 56.1500358581543,
+ 157.87998962402344,
+ 68.70291900634766
+ ],
+ "class_name": "building",
+ "confidence": 0.5342658162117004,
+ "properties": {
+ "class_id": 0
+ }
+ },
+ {
+ "bbox": [
+ 213.7998504638672,
+ 77.86518859863281,
+ 230.8061065673828,
+ 90.1888198852539
+ ],
+ "class_name": "building",
+ "confidence": 0.5319290161132812,
+ "properties": {
+ "class_id": 0
+ }
+ }
+ ]
+ },
+ "read_only": true,
+ "runtime": {
+ "cuda_available": true,
+ "cuda_device_index": 0,
+ "cuda_device_name": "NVIDIA GeForce RTX 4080 SUPER",
+ "cuda_peak_memory_bytes": 82307072,
+ "cuda_runtime": "12.8",
+ "python": "3.11.2 (main, May 12 2026, 05:17:27) [GCC 12.2.0]",
+ "torch": "2.11.0+cu128",
+ "ultralytics": "8.4.99"
+ },
+ "schema_version": 1,
+ "status": "passed",
+ "timing_seconds": {
+ "inference": 0.8836944859940559,
+ "model_load": 0.48524460900807753,
+ "total": 1.3689390950021334
+ }
+}
diff --git a/artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json b/artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json
index 4aa3b95f..c54a9427 100644
--- a/artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json
+++ b/artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json
@@ -1,25 +1,25 @@
-{
- "schema_version": 1,
- "captured_at": "2026-08-01T18:46:19.288288+02:00",
- "read_only": true,
- "artifacts": [
- {
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt",
- "exists": true,
- "size_bytes": 456136473,
- "sha256": "889ee5b3bfe722803542d15a53a51a716872cf0e8516da5e8291e0a2605adbdb"
- },
- {
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt",
- "exists": true,
- "size_bytes": 456136985,
- "sha256": "08d12061f017c45c123c824ffa043bc07794beef251c903299eb1e0954636c8b"
- },
- {
- "path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
- "exists": true,
- "size_bytes": 153659,
- "sha256": "da0d4648ee2365ab949f1b00518ddba0a17cb722a41cb228525b4d2e7657ce36"
- }
- ]
-}
+{
+ "schema_version": 1,
+ "captured_at": "2026-08-01T18:46:19.288288+02:00",
+ "read_only": true,
+ "artifacts": [
+ {
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt",
+ "exists": true,
+ "size_bytes": 456136473,
+ "sha256": "889ee5b3bfe722803542d15a53a51a716872cf0e8516da5e8291e0a2605adbdb"
+ },
+ {
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt",
+ "exists": true,
+ "size_bytes": 456136985,
+ "sha256": "08d12061f017c45c123c824ffa043bc07794beef251c903299eb1e0954636c8b"
+ },
+ {
+ "path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
+ "exists": true,
+ "size_bytes": 153659,
+ "sha256": "da0d4648ee2365ab949f1b00518ddba0a17cb722a41cb228525b4d2e7657ce36"
+ }
+ ]
+}
diff --git a/artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json b/artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json
index 976a0063..aaea34bf 100644
--- a/artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json
+++ b/artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json
@@ -1,1733 +1,1733 @@
-{
- "captured_at": "2026-08-01T18:27:33.32384+02:00",
- "global_claim_boundary": "Inventory and historical calibration evidence do not prove human label acceptance, strict split independence, calibration, protected-test performance, national validity or release readiness.",
- "inventory": {
- "model_assets": [
- {
- "modified_at": "2026-07-26T17:22:21.398902+02:00",
- "path": "/app/models/geointel-building-cuda-contract-smoke-36aa317.pt",
- "sha256": "2df6b4fe341687e1460aa3eed3b77483aa08aa6e629bd2c3ee427a1a7610719c",
- "size_bytes": 22512298
- },
- {
- "modified_at": "2026-07-07T21:31:55.766037+02:00",
- "path": "/app/models/geointel-building-yolov8n-expanded160e50.pt",
- "sha256": "bf6a5e8d25a62d784ee53764ea11d7ce89c4e7aeeac7588010e497b8d7dafb2b",
- "size_bytes": 6204266
- },
- {
- "modified_at": "2026-07-07T05:28:06.179443+02:00",
- "path": "/app/models/geointel-building-yolov8n-fontseed-smoke.pt",
- "sha256": "f9f8a3719ce7cc887b673de8e905017713cd4b79523b414fdb45a429073bded9",
- "size_bytes": 6224106
- },
- {
- "modified_at": "2026-07-07T22:49:56.903136+02:00",
- "path": "/app/models/geointel-building-yolov8n-hardneg160r8e40.pt",
- "sha256": "7a77bd9f68e4c3927ffc8a8cd978a81067b02f42cffe77ada5334b5f8dbb6b50",
- "size_bytes": 6202986
- },
- {
- "modified_at": "2026-07-07T05:26:13.895721+02:00",
- "path": "/app/models/geointel-building-yolov8n-noplots-smoke.pt",
- "sha256": "c42c334601dc35037043d10577dd59b443f19f951022ceb2b22e077436a03921",
- "size_bytes": 6224106
- },
- {
- "modified_at": "2026-07-07T05:28:31.709151+02:00",
- "path": "/app/models/geointel-building-yolov8n-operator8.pt",
- "sha256": "071d64c89a8fd28f915f7a5a553e2d164942721292693a1612c725284c6e2e1e",
- "size_bytes": 6225002
- },
- {
- "modified_at": "2026-07-07T05:23:57.43427+02:00",
- "path": "/app/models/geointel-building-yolov8n-smoke.pt",
- "sha256": "df6e201f5f7850c22e712c88594b3e74688164030b61636c160f380c5b3dc78d",
- "size_bytes": 6225002
- },
- {
- "modified_at": "2026-07-07T21:06:37.871347+02:00",
- "path": "/app/models/geointel-building-yolov8n-tile30.pt",
- "sha256": "b9e228202500d7c85836d12a72e320f4f2f0cef24cbb1b5bf7fa78a6778390af",
- "size_bytes": 6201642
- },
- {
- "modified_at": "2026-07-09T18:37:43.626349+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024bg512r3e50.pt",
- "sha256": "e0980572aac90e7efc514608eb16d7de5bfbf27a4bbec04e7bc1bc8c02f9601f",
- "size_bytes": 22499370
- },
- {
- "modified_at": "2026-07-09T16:26:49.94361+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024clean512e50.pt",
- "sha256": "7cfadb684dd56623d2e35ebd65593211d3051908c87121bef438b231d3e47cce",
- "size_bytes": 22499434
- },
- {
- "modified_at": "2026-07-11T16:33:15.386987+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024cleanpx12vis035e50.pt",
- "sha256": "4863b27717cb7fd3126ccf86a988b3c1863b5fb9271cf35370ca2473b9ed10f4",
- "size_bytes": 22499434
- },
- {
- "modified_at": "2026-07-12T22:44:53.466144+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024cleanpx12vis035lowvar512e50.pt",
- "sha256": "75345767b51cc66692a9d2c2cd6577b7feecaf5971c8762365e8b610b9dfde8e",
- "size_bytes": 22499498
- },
- {
- "modified_at": "2026-07-13T00:53:49.29811+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024expandedminpx4vis035e50.pt",
- "sha256": "a8a79cf5b0bdc19a0245acc322cf77232c335e222bd5f3c00a17d5f29402c196",
- "size_bytes": 22499498
- },
- {
- "modified_at": "2026-07-09T13:58:25.883963+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi1024visible025e50.pt",
- "sha256": "0db27c5dbb3398425de6e132037b0f1af3ab059d5344a02f2c93f475c8a5cd87",
- "size_bytes": 22499434
- },
- {
- "modified_at": "2026-07-09T04:10:36.621019+02:00",
- "path": "/app/models/geointel-building-yolov8s-aoi512e80.pt",
- "sha256": "b796284a13358498c296fa41270dd234a81718a76cdafe62490a5206bb86ac5b",
- "size_bytes": 22503210
- },
- {
- "modified_at": "2026-07-08T01:55:09.411345+02:00",
- "path": "/app/models/geointel-building-yolov8s-hardneg160r4e50.pt",
- "sha256": "9bf71ad4742048ac77f07060b677bacd9757b8d310497fcada334d543e320d19",
- "size_bytes": 22473194
- },
- {
- "modified_at": "2026-07-08T18:17:43.325235+02:00",
- "path": "/app/models/geointel-building-yolov8s-hardneg160r8e12partial.pt",
- "sha256": "0246202cddc47eb994a0afc9ee10d56b72298bd1cdc0b72b75e12b28e2202330",
- "size_bytes": 89500259
- },
- {
- "modified_at": "2026-07-08T21:45:15.269244+02:00",
- "path": "/app/models/geointel-building-yolov8s-hardneg160r8e60.pt",
- "sha256": "d7daea04bd51a54a06944f0d4bf1961fe453dceb1fb34ef51daa73f6901fca81",
- "size_bytes": 22519786
- },
- {
- "modified_at": "2026-07-15T05:11:29.338793+02:00",
- "path": "/app/models/geointel-building-yolov8s-reviewedexp6-minpx3-img640-ft20.pt",
- "sha256": "038f1f97a6afd534f29e1f392a730a58207b928ca01e31ab8d8fed6106705820",
- "size_bytes": 22514794
- },
- {
- "modified_at": "2026-07-13T11:25:56.632878+02:00",
- "path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
- "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
- "size_bytes": 22516074
- },
- {
- "modified_at": "2026-07-09T03:38:33.050826+02:00",
- "path": "/app/models/geointel-building-yolov8s-uniquehardneg160e50.pt",
- "sha256": "c4e480273d3da5fc27532cd8bdc3fa7786582e06848ea11b56714ab8cb1750b3",
- "size_bytes": 22467562
- },
- {
- "modified_at": "2026-07-07T23:04:31.664335+02:00",
- "path": "/app/models/yolo-remote-sensing-photovoltaic-v8l-detect-1000.pt",
- "sha256": "242ff4ab889569278f0eb9fcd22eb2c4bf2a52e48d05d89cc7cfa7941165d203",
- "size_bytes": 87771322
- },
- {
- "modified_at": "2026-07-06T20:35:44.350011+02:00",
- "path": "/app/models/yolov8n-building-segmentation.pt",
- "sha256": "152d6a9c5c76c9f2fd2fd5cc167efaed7c8c02e31002b15415899710f1d71f98",
- "size_bytes": 6744002
- },
- {
- "modified_at": "2026-07-06T20:19:17.886218+02:00",
- "path": "/app/models/yolov8n.pt",
- "sha256": "f59b3d833e2ff32e194b5bb8e08d211dc7c5bdf144b90d2c8412c47ccfc83b36",
- "size_bytes": 6549796
- },
- {
- "modified_at": "2026-07-07T04:58:55.817325+02:00",
- "path": "/app/models/yolov8s-building-segmentation.pt",
- "sha256": "a27af31654c6a4edbdc85581c33d93c13986b5919de7de410f8d85d801b3bb34",
- "size_bytes": 23814274
- },
- {
- "modified_at": "2026-07-08T01:30:18.507298+02:00",
- "path": "/app/models/yolov8s.pt",
- "sha256": "1f47a78bf100391c2a140b7ac73a1caae18c32779be7d310658112f7ac9aa78a",
- "size_bytes": 22588772
- }
- ],
- "newest_training_checkpoints": [
- {
- "modified_at": "2026-07-30T02:47:14.279185+02:00",
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136985
- },
- {
- "modified_at": "2026-07-30T02:44:07.837211+02:00",
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136473
- },
- {
- "modified_at": "2026-07-30T02:41:13.160107+02:00",
- "path": "/app/storage/training/building-be-v60-v58-flanders-transfer-r1/runs/flanders/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136601
- },
- {
- "modified_at": "2026-07-30T02:37:38.254437+02:00",
- "path": "/app/storage/training/building-be-v60-v58-flanders-transfer-r1/runs/flanders/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136345
- },
- {
- "modified_at": "2026-07-30T02:34:42.763337+02:00",
- "path": "/app/storage/training/building-be-v59-v56-flanders-clean-r1/runs/flanders/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T02:34:42.390342+02:00",
- "path": "/app/storage/training/building-be-v59-v56-flanders-clean-r1/runs/flanders/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T02:22:43.58418+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
- "sha256": null,
- "size_bytes": 456138073
- },
- {
- "modified_at": "2026-07-30T02:22:43.177185+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/last.pt",
- "sha256": null,
- "size_bytes": 456138073
- },
- {
- "modified_at": "2026-07-30T02:14:43.080429+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-008/candidate.pt",
- "sha256": null,
- "size_bytes": 456137049
- },
- {
- "modified_at": "2026-07-30T02:09:42.288708+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-004/candidate.pt",
- "sha256": null,
- "size_bytes": 456136665
- },
- {
- "modified_at": "2026-07-30T02:03:02.695056+02:00",
- "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/runs/expert/weights/best.pt",
- "sha256": null,
- "size_bytes": 114380313
- },
- {
- "modified_at": "2026-07-30T02:03:02.398059+02:00",
- "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/runs/expert/weights/last.pt",
- "sha256": null,
- "size_bytes": 114380313
- },
- {
- "modified_at": "2026-07-30T01:47:27.699208+02:00",
- "path": "/app/storage/training/building-be-v54-v51-flanders-proposal-classifier-r1/proposal-classifier.torchscript.pt",
- "sha256": null,
- "size_bytes": 44844023
- },
- {
- "modified_at": "2026-07-30T01:42:20.332536+02:00",
- "path": "/app/storage/training/building-be-v54-v51-flanders-proposal-classifier-r1/best-state.pt",
- "sha256": null,
- "size_bytes": 44787723
- },
- {
- "modified_at": "2026-07-30T01:34:56.511369+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/runs/expert-stable/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136729
- },
- {
- "modified_at": "2026-07-30T01:34:25.695706+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-003/candidate.pt",
- "sha256": null,
- "size_bytes": 456136601
- },
- {
- "modified_at": "2026-07-30T01:32:29.981969+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-001/candidate.pt",
- "sha256": null,
- "size_bytes": 456136345
- },
- {
- "modified_at": "2026-07-30T01:31:42.656486+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/runs/expert-stable/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136345
- },
- {
- "modified_at": "2026-07-30T01:29:21.721023+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r1/runs/expert/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136345
- },
- {
- "modified_at": "2026-07-30T01:29:21.509025+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r1/runs/expert/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136345
- },
- {
- "modified_at": "2026-07-30T01:21:55.753889+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/runs/iteration-002/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136921
- },
- {
- "modified_at": "2026-07-30T01:21:39.47707+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-004/candidate.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T01:19:59.51318+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/runs/iteration-002/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T01:14:55.770552+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-001/candidate.pt",
- "sha256": null,
- "size_bytes": 456136409
- },
- {
- "modified_at": "2026-07-30T00:54:43.639023+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/runs/iteration-002/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T00:52:59.162188+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/preview-iteration-002-epoch-003/candidate.pt",
- "sha256": null,
- "size_bytes": 456136665
- },
- {
- "modified_at": "2026-07-30T00:52:26.001558+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/runs/iteration-002/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136665
- },
- {
- "modified_at": "2026-07-30T00:37:25.645619+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/runs/iteration-002/weights/last.pt",
- "sha256": null,
- "size_bytes": 456136793
- },
- {
- "modified_at": "2026-07-30T00:36:17.51638+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/preview-iteration-002-epoch-003/candidate.pt",
- "sha256": null,
- "size_bytes": 456136665
- },
- {
- "modified_at": "2026-07-30T00:35:11.872109+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/runs/iteration-002/weights/best.pt",
- "sha256": null,
- "size_bytes": 456136665
- }
- ],
- "newest_training_json_reports": [
- {
- "modified_at": "2026-07-30T03:19:23.269073+02:00",
- "path": "/app/storage/training/building-be-v63-source640-aarschot-label-sheet-r1/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 3593
- },
- {
- "modified_at": "2026-07-30T03:16:06.985227+02:00",
- "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/oostkamp/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 12093
- },
- {
- "modified_at": "2026-07-30T03:16:04.557254+02:00",
- "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/beveren/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 11939
- },
- {
- "modified_at": "2026-07-30T03:16:02.240279+02:00",
- "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/aarschot/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 11931
- },
- {
- "modified_at": "2026-07-30T02:51:03.010696+02:00",
- "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/ostend/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 11740
- },
- {
- "modified_at": "2026-07-30T02:51:00.73172+02:00",
- "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/lokeren/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 11771
- },
- {
- "modified_at": "2026-07-30T02:50:58.479745+02:00",
- "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/genk/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 11719
- },
- {
- "modified_at": "2026-07-30T02:48:43.83121+02:00",
- "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/flanders-summary.json",
- "sha256": null,
- "size_bytes": 0
- },
- {
- "modified_at": "2026-07-30T02:48:19.325477+02:00",
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/preview-epoch-006/calibration-routed.json",
- "sha256": null,
- "size_bytes": 45013
- },
- {
- "modified_at": "2026-07-30T02:41:49.391714+02:00",
- "path": "/app/storage/training/building-be-v61-v56-flanders-balanced-dataset-r1/regional-dataset.json",
- "sha256": null,
- "size_bytes": 5035
- },
- {
- "modified_at": "2026-07-30T02:41:49.390714+02:00",
- "path": "/app/storage/training/building-be-v61-v56-flanders-balanced-dataset-r1/regional-dataset-evidence.json",
- "sha256": null,
- "size_bytes": 5035
- },
- {
- "modified_at": "2026-07-30T02:39:42.277093+02:00",
- "path": "/app/storage/training/building-be-v56-calibration-label-sheets-r1/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 98284
- },
- {
- "modified_at": "2026-07-30T02:24:34.422968+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-015/calibration.json",
- "sha256": null,
- "size_bytes": 44731
- },
- {
- "modified_at": "2026-07-30T02:15:10.957125+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-008/calibration.json",
- "sha256": null,
- "size_bytes": 34010
- },
- {
- "modified_at": "2026-07-30T02:09:58.356533+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-004/calibration.json",
- "sha256": null,
- "size_bytes": 30346
- },
- {
- "modified_at": "2026-07-30T02:03:24.196822+02:00",
- "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/calibration.json",
- "sha256": null,
- "size_bytes": 28272
- },
- {
- "modified_at": "2026-07-30T02:01:39.51296+02:00",
- "path": "/app/storage/training/building-be-v57-v56-flanders-hard-negative-dataset-r1/regional-dataset.json",
- "sha256": null,
- "size_bytes": 5338
- },
- {
- "modified_at": "2026-07-30T02:01:39.51296+02:00",
- "path": "/app/storage/training/building-be-v57-v56-flanders-hard-negative-dataset-r1/regional-dataset-evidence.json",
- "sha256": null,
- "size_bytes": 5338
- },
- {
- "modified_at": "2026-07-30T02:01:39.412961+02:00",
- "path": "/app/storage/training/building-be-v56-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 23487
- },
- {
- "modified_at": "2026-07-30T02:01:16.576209+02:00",
- "path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
- "sha256": null,
- "size_bytes": 153659
- },
- {
- "modified_at": "2026-07-30T02:01:12.442254+02:00",
- "path": "/app/storage/training/building-be-v56-corpus-audit-r1/belgium-building-corpus-audit.json",
- "sha256": null,
- "size_bytes": 54716
- },
- {
- "modified_at": "2026-07-30T01:49:42.022753+02:00",
- "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.95.json",
- "sha256": null,
- "size_bytes": 23439
- },
- {
- "modified_at": "2026-07-30T01:49:16.790026+02:00",
- "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.85.json",
- "sha256": null,
- "size_bytes": 24843
- },
- {
- "modified_at": "2026-07-30T01:48:52.876285+02:00",
- "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.70.json",
- "sha256": null,
- "size_bytes": 28317
- },
- {
- "modified_at": "2026-07-30T01:48:29.234542+02:00",
- "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.50.json",
- "sha256": null,
- "size_bytes": 28456
- },
- {
- "modified_at": "2026-07-30T01:48:05.717797+02:00",
- "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.30.json",
- "sha256": null,
- "size_bytes": 28435
- },
- {
- "modified_at": "2026-07-30T01:40:12.677918+02:00",
- "path": "/app/storage/training/building-be-v54-v51-flanders-proposals-r1/proposal-dataset-evidence.json",
- "sha256": null,
- "size_bytes": 3569
- },
- {
- "modified_at": "2026-07-30T01:35:28.553019+02:00",
- "path": "/app/storage/training/building-be-v54-v51-ostend-error-review-r1/candidate_error_contact_sheet.json",
- "sha256": null,
- "size_bytes": 7473
- },
- {
- "modified_at": "2026-07-30T01:34:36.033593+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-003/calibration.json",
- "sha256": null,
- "size_bytes": 28402
- },
- {
- "modified_at": "2026-07-30T01:32:39.768862+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-001/calibration.json",
- "sha256": null,
- "size_bytes": 28403
- },
- {
- "modified_at": "2026-07-30T01:27:51.995001+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r2/regional-dataset.json",
- "sha256": null,
- "size_bytes": 4335
- },
- {
- "modified_at": "2026-07-30T01:27:51.995001+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r2/regional-dataset-evidence.json",
- "sha256": null,
- "size_bytes": 4335
- },
- {
- "modified_at": "2026-07-30T01:27:36.608169+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r1/regional-dataset.json",
- "sha256": null,
- "size_bytes": 4317
- },
- {
- "modified_at": "2026-07-30T01:27:36.608169+02:00",
- "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r1/regional-dataset-evidence.json",
- "sha256": null,
- "size_bytes": 4317
- },
- {
- "modified_at": "2026-07-30T01:21:49.742956+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-004/calibration.json",
- "sha256": null,
- "size_bytes": 28090
- },
- {
- "modified_at": "2026-07-30T01:15:06.72743+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-001/calibration.json",
- "sha256": null,
- "size_bytes": 28304
- },
- {
- "modified_at": "2026-07-30T01:11:35.222777+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/training-loop-state.json",
- "sha256": null,
- "size_bytes": 2826
- },
- {
- "modified_at": "2026-07-30T01:11:35.211777+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 3291
- },
- {
- "modified_at": "2026-07-30T01:11:31.448819+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/assessment.json",
- "sha256": null,
- "size_bytes": 3924
- },
- {
- "modified_at": "2026-07-30T01:11:29.909836+02:00",
- "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/calibration.json",
- "sha256": null,
- "size_bytes": 28301
- },
- {
- "modified_at": "2026-07-30T01:10:20.111611+02:00",
- "path": "/app/storage/training/building-be-v51-rotated-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
- "sha256": null,
- "size_bytes": 142078
- },
- {
- "modified_at": "2026-07-30T01:09:48.252964+02:00",
- "path": "/app/storage/training/building-be-v51-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
- "sha256": null,
- "size_bytes": 165342
- },
- {
- "modified_at": "2026-07-30T01:09:43.397018+02:00",
- "path": "/app/storage/training/building-be-v51-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 23157
- },
- {
- "modified_at": "2026-07-30T01:09:18.628293+02:00",
- "path": "/app/storage/training/building-be-v51-corpus-audit-r1/belgium-building-corpus-audit.json",
- "sha256": null,
- "size_bytes": 50928
- },
- {
- "modified_at": "2026-07-30T01:01:52.771238+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-1.00.json",
- "sha256": null,
- "size_bytes": 28119
- },
- {
- "modified_at": "2026-07-30T01:01:43.263343+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.95.json",
- "sha256": null,
- "size_bytes": 28189
- },
- {
- "modified_at": "2026-07-30T01:01:34.397442+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.90.json",
- "sha256": null,
- "size_bytes": 28210
- },
- {
- "modified_at": "2026-07-30T01:01:25.270544+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.85.json",
- "sha256": null,
- "size_bytes": 28252
- },
- {
- "modified_at": "2026-07-30T01:01:16.170645+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.80.json",
- "sha256": null,
- "size_bytes": 28244
- },
- {
- "modified_at": "2026-07-30T01:01:07.024748+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.75.json",
- "sha256": null,
- "size_bytes": 28283
- },
- {
- "modified_at": "2026-07-30T01:00:57.429855+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.70.json",
- "sha256": null,
- "size_bytes": 28192
- },
- {
- "modified_at": "2026-07-30T01:00:48.453955+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.65.json",
- "sha256": null,
- "size_bytes": 28258
- },
- {
- "modified_at": "2026-07-30T01:00:39.524054+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-1.00.json",
- "sha256": null,
- "size_bytes": 28229
- },
- {
- "modified_at": "2026-07-30T01:00:31.056149+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.95.json",
- "sha256": null,
- "size_bytes": 28240
- },
- {
- "modified_at": "2026-07-30T01:00:22.481244+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.90.json",
- "sha256": null,
- "size_bytes": 28258
- },
- {
- "modified_at": "2026-07-30T01:00:13.746342+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.85.json",
- "sha256": null,
- "size_bytes": 28179
- },
- {
- "modified_at": "2026-07-30T01:00:04.90544+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.80.json",
- "sha256": null,
- "size_bytes": 28242
- },
- {
- "modified_at": "2026-07-30T00:59:56.060539+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.75.json",
- "sha256": null,
- "size_bytes": 28285
- },
- {
- "modified_at": "2026-07-30T00:59:47.290637+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.70.json",
- "sha256": null,
- "size_bytes": 28293
- },
- {
- "modified_at": "2026-07-30T00:59:38.583734+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.65.json",
- "sha256": null,
- "size_bytes": 28273
- },
- {
- "modified_at": "2026-07-30T00:55:43.311357+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/error-review/candidate_error_contact_sheet.json",
- "sha256": null,
- "size_bytes": 17563
- },
- {
- "modified_at": "2026-07-30T00:55:20.237615+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/supervisor-state.json",
- "sha256": null,
- "size_bytes": 152
- },
- {
- "modified_at": "2026-07-30T00:54:56.403881+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/preview-iteration-002-epoch-003/calibration.json",
- "sha256": null,
- "size_bytes": 28227
- },
- {
- "modified_at": "2026-07-30T00:45:36.326123+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/training-loop-state.json",
- "sha256": null,
- "size_bytes": 2801
- },
- {
- "modified_at": "2026-07-30T00:45:36.316123+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 3279
- },
- {
- "modified_at": "2026-07-30T00:45:32.794162+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/assessment.json",
- "sha256": null,
- "size_bytes": 3920
- },
- {
- "modified_at": "2026-07-30T00:45:31.968172+02:00",
- "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/calibration.json",
- "sha256": null,
- "size_bytes": 28119
- },
- {
- "modified_at": "2026-07-30T00:44:32.073842+02:00",
- "path": "/app/storage/training/building-be-v50-spread-sampling-r2/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 3206
- },
- {
- "modified_at": "2026-07-30T00:43:22.345623+02:00",
- "path": "/app/storage/training/building-be-v50-prioritized-sampling-r1/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 3216
- },
- {
- "modified_at": "2026-07-30T00:39:59.305898+02:00",
- "path": "/app/storage/training/building-be-v49-flanders-context-probe/epoch003.json",
- "sha256": null,
- "size_bytes": 27672
- },
- {
- "modified_at": "2026-07-30T00:39:50.705994+02:00",
- "path": "/app/storage/training/building-be-v49-flanders-context-probe/incumbent.json",
- "sha256": null,
- "size_bytes": 27822
- },
- {
- "modified_at": "2026-07-30T00:39:40.703106+02:00",
- "path": "/app/storage/training/building-be-v49-flanders-context-probe/summary.json",
- "sha256": null,
- "size_bytes": 157390
- },
- {
- "modified_at": "2026-07-30T00:38:48.179695+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/supervisor-state.json",
- "sha256": null,
- "size_bytes": 152
- },
- {
- "modified_at": "2026-07-30T00:38:26.885933+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/preview-iteration-002-epoch-003/calibration.json",
- "sha256": null,
- "size_bytes": 28128
- },
- {
- "modified_at": "2026-07-30T00:28:35.333514+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/training-loop-state.json",
- "sha256": null,
- "size_bytes": 2822
- },
- {
- "modified_at": "2026-07-30T00:28:35.323514+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 3246
- },
- {
- "modified_at": "2026-07-30T00:28:31.329558+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/assessment.json",
- "sha256": null,
- "size_bytes": 3920
- },
- {
- "modified_at": "2026-07-30T00:28:29.513578+02:00",
- "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/calibration.json",
- "sha256": null,
- "size_bytes": 28122
- },
- {
- "modified_at": "2026-07-30T00:26:23.26598+02:00",
- "path": "/app/storage/training/building-be-v48-v47-merged-loop-r1/supervisor-state.json",
- "sha256": null,
- "size_bytes": 147
- },
- {
- "modified_at": "2026-07-30T00:26:09.100137+02:00",
- "path": "/app/storage/training/building-be-v48-v47-merged-loop-r1/preview-epoch-006/calibration.json",
- "sha256": null,
- "size_bytes": 21260
- },
- {
- "modified_at": "2026-07-30T00:00:51.014968+02:00",
- "path": "/app/storage/training/building-be-v47-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
- "sha256": null,
- "size_bytes": 34321
- },
- {
- "modified_at": "2026-07-30T00:00:17.481339+02:00",
- "path": "/app/storage/training/building-be-v47-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
- "sha256": null,
- "size_bytes": 142078
- },
- {
- "modified_at": "2026-07-30T00:00:11.121409+02:00",
- "path": "/app/storage/training/building-be-v47-corpus-audit-r1/belgium-building-corpus-audit.json",
- "sha256": null,
- "size_bytes": 50943
- },
- {
- "modified_at": "2026-07-29T23:51:51.396916+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/calibration.json",
- "sha256": null,
- "size_bytes": 7550
- },
- {
- "modified_at": "2026-07-29T23:51:13.322331+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/yolo384/retile-evidence.json",
- "sha256": null,
- "size_bytes": 699
- },
- {
- "modified_at": "2026-07-29T23:51:13.321331+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/yolo384/yolo_tile_dataset_summary.json",
- "sha256": null,
- "size_bytes": 49493
- },
- {
- "modified_at": "2026-07-29T23:51:11.312353+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/yolo640/yolo_tile_dataset_summary.json",
- "sha256": null,
- "size_bytes": 10546
- },
- {
- "modified_at": "2026-07-29T23:51:09.632371+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/operator_samples_manifest.json",
- "sha256": null,
- "size_bytes": 3719
- },
- {
- "modified_at": "2026-07-29T23:46:44.747252+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/ostend-coastal-train/label-audit.json",
- "sha256": null,
- "size_bytes": 8551
- },
- {
- "modified_at": "2026-07-29T23:46:44.432256+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/lokeren-ribbon-train/label-audit.json",
- "sha256": null,
- "size_bytes": 91579
- },
- {
- "modified_at": "2026-07-29T23:46:43.902261+02:00",
- "path": "/app/storage/training/building-be-v47-merge-probe/genk-industry-train/label-audit.json",
- "sha256": null,
- "size_bytes": 48335
- },
- {
- "modified_at": "2026-07-29T23:43:13.953542+02:00",
- "path": "/app/storage/training/building-be-v46-v44-incumbent-loop-r1/supervisor-state.json",
- "sha256": null,
- "size_bytes": 147
- },
- {
- "modified_at": "2026-07-29T23:42:32.584991+02:00",
- "path": "/app/storage/training/building-be-v46-v44-incumbent-loop-r1/initial-flanders-error-review/candidate_error_contact_sheet.json",
- "sha256": null,
- "size_bytes": 17446
- },
- {
- "modified_at": "2026-07-29T23:31:57.073956+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/supervisor-state.json",
- "sha256": null,
- "size_bytes": 152
- },
- {
- "modified_at": "2026-07-29T23:31:28.822263+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/training-loop-state.json",
- "sha256": null,
- "size_bytes": 6162
- },
- {
- "modified_at": "2026-07-29T23:31:28.814263+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/failure-driven-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 2867
- },
- {
- "modified_at": "2026-07-29T23:31:24.775307+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/assessment.json",
- "sha256": null,
- "size_bytes": 3838
- },
- {
- "modified_at": "2026-07-29T23:31:23.681319+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/calibration.json",
- "sha256": null,
- "size_bytes": 21407
- },
- {
- "modified_at": "2026-07-29T23:10:43.824813+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-003/recall-balanced-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 2869
- },
- {
- "modified_at": "2026-07-29T23:07:06.556184+02:00",
- "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-003/failure-driven-training/failure-driven-sampling.json",
- "sha256": null,
- "size_bytes": 2816
- }
- ],
- "operator_manifest_count": 36,
- "operator_manifests": [
- {
- "modified_at": "2026-07-30T05:42:10.538949+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-roof-edge-trial-r1/operator_samples_manifest.json",
- "sha256": "fa8316838c68624abc762418fa8525dfd13c30ca392fcad8082c5c2f913706ed",
- "size_bytes": 3725
- },
- {
- "modified_at": "2026-07-30T05:36:08.694997+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-swapped-axis-trial-r1/operator_samples_manifest.json",
- "sha256": "b149f6fc2bd3a66137cc2f2b69ad7420a510cc0fb7807b664cf8b8f34e90f2f5",
- "size_bytes": 3748
- },
- {
- "modified_at": "2026-07-30T05:35:04.212719+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-live-imagery-trial-r1/operator_samples_manifest.json",
- "sha256": "05bf2b6a0a1de7cdb9f044d7dd31bb65bf0cd6f86d8032d0907a54eb1448019c",
- "size_bytes": 3748
- },
- {
- "modified_at": "2026-07-30T04:34:00.554016+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-main-building-r1/operator_samples_manifest.json",
- "sha256": "9faeb39865fe715c1d611f033ab29a7c969d3b7c1f049ba341bfdf9e8d8f52e3",
- "size_bytes": 3712
- },
- {
- "modified_at": "2026-07-30T04:32:11.684242+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-temporal-r1/operator_samples_manifest.json",
- "sha256": "d861da48aca40121e158e6ab243a6ccbe53e14d500a186af64b620f612935b07",
- "size_bytes": 3678
- },
- {
- "modified_at": "2026-07-30T04:16:07.295053+02:00",
- "path": "/app/storage/operator-data/building-be-v65-grb-main-building-calibration-candidates-r1/operator_samples_manifest.json",
- "sha256": "5b2752ce5fdb0edb4e603bb73aa6ea141251575cab466f40b21ef6906c26a55e",
- "size_bytes": 3843
- },
- {
- "modified_at": "2026-07-30T03:36:17.51792+02:00",
- "path": "/app/storage/operator-data/building-be-v64-temporal-cutoff-instance-roofs-r1/operator_samples_manifest.json",
- "sha256": "5a685901af39e2b1bab6e764774ebe1a5e2826653c7077fd70bb8d59d5b546dd",
- "size_bytes": 216541
- },
- {
- "modified_at": "2026-07-30T03:15:38.213543+02:00",
- "path": "/app/storage/operator-data/building-be-v63-calibration-remediation-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "77d7d3b9996bff416c8bc1a864a6c3727ad36d3fb55e08c9585a0210799cd782",
- "size_bytes": 225614
- },
- {
- "modified_at": "2026-07-30T03:04:10.717088+02:00",
- "path": "/app/storage/operator-data/building-be-v63-calibration-remediation-instance-roofs-r1/operator_samples_manifest.json",
- "sha256": "40583e1d703ba6167ffde4831f145994d6c05de21697c6d0d079d09ed22f5506",
- "size_bytes": 219480
- },
- {
- "modified_at": "2026-07-30T02:00:52.456471+02:00",
- "path": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "5a6f7e94d477bf185284d097f3afb7244c456ea8c6034b501f279bc30815b4bc",
- "size_bytes": 218220
- },
- {
- "modified_at": "2026-07-30T01:56:43.712173+02:00",
- "path": "/app/storage/operator-data/building-be-v56-hard-negative-instance-roofs-r1/operator_samples_manifest.json",
- "sha256": "27a9b09f184bb9a0cc4897f1cfab7f1e953af5715c1b97a5ec1a7b80a2d270f1",
- "size_bytes": 212185
- },
- {
- "modified_at": "2026-07-30T01:09:09.668392+02:00",
- "path": "/app/storage/operator-data/building-be-v51-instance-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "06d45c57def167465c5124224ff4b80a3af3085617bf0a56b412e9d5998013e6",
- "size_bytes": 201555
- },
- {
- "modified_at": "2026-07-30T01:04:36.297425+02:00",
- "path": "/app/storage/operator-data/building-be-v51-instance-roofs-20260730-r1/operator_samples_manifest.json",
- "sha256": "731960812a2e0a867353775d37aef7c251a0fcb4d2df19a8887ff4a368ca0914",
- "size_bytes": 195916
- },
- {
- "modified_at": "2026-07-29T23:58:47.599333+02:00",
- "path": "/app/storage/operator-data/building-be-v47-merged-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "71f721acf408fcfd1428f58af5cbfc3b2e58da5474c208c6fd59e7446fa1fec1",
- "size_bytes": 200878
- },
- {
- "modified_at": "2026-07-29T23:53:52.161599+02:00",
- "path": "/app/storage/operator-data/building-be-v47-merged-roofs-20260729-r1/operator_samples_manifest.json",
- "sha256": "8b2043bf36e9afc3060bdd7897c242def1ee3b69c1a6c766507162977dfe1b0e",
- "size_bytes": 195239
- },
- {
- "modified_at": "2026-07-29T22:16:32.716488+02:00",
- "path": "/app/storage/operator-data/building-be-v44-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "448bb3ec426a6af129f01d29732160f84b9936c9871a033de13a7d98b9d25112",
- "size_bytes": 199531
- },
- {
- "modified_at": "2026-07-29T22:16:31.788498+02:00",
- "path": "/app/storage/operator-data/building-be-v44-combined-source-20260729-r1/operator_samples_manifest.json",
- "sha256": "3450440b66892beb591b03f393ce09018d7d8844a604cc4a09f5f20043784a89",
- "size_bytes": 193902
- },
- {
- "modified_at": "2026-07-29T22:13:42.264353+02:00",
- "path": "/app/storage/operator-data/building-be-v44-expanded-20260729-r1/operator_samples_manifest.json",
- "sha256": "62fdb4adee46ff67a40636f30a22fc97b8c9bd14516cbe0a24ed0de2db56f4fb",
- "size_bytes": 14150
- },
- {
- "modified_at": "2026-07-29T20:18:14.968407+02:00",
- "path": "/app/storage/operator-data/building-be-v42-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "868496a9e3ad321ff8a8984fd808b235e1f2df1b949514e124459af154ac79fd",
- "size_bytes": 185111
- },
- {
- "modified_at": "2026-07-29T20:12:28.829147+02:00",
- "path": "/app/storage/operator-data/building-be-v42-expanded-20260729-r1/operator_samples_manifest.json",
- "sha256": "4e89202a7089d5b1c3a33cbdf0c23ccfec9867de5a823fb294dee4489a34c952",
- "size_bytes": 179871
- },
- {
- "modified_at": "2026-07-29T17:35:37.818326+02:00",
- "path": "/app/storage/operator-data/building-be-v31-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "c0e392759c286f710394bddb1fffc174d1efba64b16741f800c79a3dbef97f94",
- "size_bytes": 168207
- },
- {
- "modified_at": "2026-07-29T17:18:10.307936+02:00",
- "path": "/app/storage/operator-data/building-be-v31-expanded-20260729-r1/operator_samples_manifest.json",
- "sha256": "57632bc537a50e048ec5e07bee6f3c9743bf4adca5e29aff3138c4007e8363c8",
- "size_bytes": 163429
- },
- {
- "modified_at": "2026-07-27T10:47:22.624354+02:00",
- "path": "/app/storage/operator-data/building-be-v30-rotated-holdouts-r1/operator_samples_manifest.json",
- "sha256": "4f2eafd8893a33d2b106e8570c5279497446760580b2328937e486cb3cd6d1ed",
- "size_bytes": 146541
- },
- {
- "modified_at": "2026-07-27T05:58:22.556248+02:00",
- "path": "/app/storage/operator-data/building-be-v12-expanded-20260727-r1/operator_samples_manifest.json",
- "sha256": "67ec0ee06b63e92471159ca73f7cfe42be39d48a3d33cb24f64dde1a5aadb720",
- "size_bytes": 142357
- },
- {
- "modified_at": "2026-07-27T05:32:21.294332+02:00",
- "path": "/app/storage/operator-data/building-be-v10-compact-roofs-20260727-r1/operator_samples_manifest.json",
- "sha256": "b9d63b5a2a1de1148f16f2a4e017ca2ea6f105cdf82f6f09718ada4600b03503",
- "size_bytes": 104237
- },
- {
- "modified_at": "2026-07-27T05:08:05.435299+02:00",
- "path": "/app/storage/operator-data/building-be-v8-visible-roofs-20260727-r1/operator_samples_manifest.json",
- "sha256": "5c4d1d8d045968010b53a289305e7fee0c7c1ed86c03710a33e48d1efb28dc62",
- "size_bytes": 103996
- },
- {
- "modified_at": "2026-07-27T03:34:25.224643+02:00",
- "path": "/app/storage/operator-data/building-be-v7-targeted-20260727-r1/operator_samples_manifest.json",
- "sha256": "f4af25e289512a497a41fa5495399b0d226009639e1338dbd82d79caf0301dec",
- "size_bytes": 103151
- },
- {
- "modified_at": "2026-07-27T03:07:52.286944+02:00",
- "path": "/app/storage/operator-data/building-be-v6-temporal-20260727-r1/operator_samples_manifest.json",
- "sha256": "973828b453e6fbeb5c04aa567ddb615566d92825d8698654f5056d2997d382eb",
- "size_bytes": 85803
- },
- {
- "modified_at": "2026-07-27T03:00:56.864537+02:00",
- "path": "/app/storage/operator-data/building-be-v5-dated-20260727-r1/operator_samples_manifest.json",
- "sha256": "eade90d3ba22b426b72a300fcaa9a01f6eb1d18567c4a53413b72b8048f5f021",
- "size_bytes": 85350
- },
- {
- "modified_at": "2026-07-27T02:49:26.80417+02:00",
- "path": "/app/storage/operator-data/building-be-v4-dated-20260727-r1/operator_samples_manifest.json",
- "sha256": "32f0c969e3131da33497ebffb6782ddf1b58e83b8a46f929818c2140af867fd3",
- "size_bytes": 85350
- },
- {
- "modified_at": "2026-07-27T02:21:36.309681+02:00",
- "path": "/app/storage/operator-data/building-be-v3-20260727-r1/operator_samples_manifest.json",
- "sha256": "299212d1b3881330a6e3e936836d279435ab80c156a012121fe566ad0f3eae22",
- "size_bytes": 65822
- },
- {
- "modified_at": "2026-07-27T01:30:38.681558+02:00",
- "path": "/app/storage/operator-data/building-be-v2-20260727-r3/operator_samples_manifest.json",
- "sha256": "8a2ccd39642be30a58bd12b52b117ea4e2055437b2ed9d49e4022b47605e5f19",
- "size_bytes": 46079
- },
- {
- "modified_at": "2026-07-27T01:27:56.991352+02:00",
- "path": "/app/storage/operator-data/building-be-v2-20260727-r2/operator_samples_manifest.json",
- "sha256": "9473bb0f34a3e77da3d8045d253c8395f23107bed3609cc02a40f38705d1617b",
- "size_bytes": 39321
- },
- {
- "modified_at": "2026-07-27T01:27:30.455646+02:00",
- "path": "/app/storage/operator-data/building-be-v2-20260727-r1/operator_samples_manifest.json",
- "sha256": "50b079dcf30471db7370f8f056b7fa4fd6872f15709c531c473c883b060c9679",
- "size_bytes": 35270
- },
- {
- "modified_at": "2026-07-26T22:21:13.448858+02:00",
- "path": "/app/storage/operator-data/building-be-v1-candidate-20260726/operator_samples_manifest.json",
- "sha256": "0450ce782c35c5955e519fae489ffdbef6075d871adb0d196cc6a244571788fa",
- "size_bytes": 18956
- },
- {
- "modified_at": "2026-07-26T22:16:59.60574+02:00",
- "path": "/app/storage/operator-data/building-be-v1-pilot/operator_samples_manifest.json",
- "sha256": "f780294328c0e87ce7ebfdc41384bed9b97be302490e9a02aa4ba77e69fad093",
- "size_bytes": 2995
- }
- ],
- "training_checkpoint_bytes": 28512052142,
- "training_checkpoint_count": 229,
- "training_json_report_count": 424
- },
- "read_only": true,
- "schema_version": 1,
- "v56": {
- "corpus_audit": {
- "accepted_feature_count": 30662,
- "claim_boundary": "Automated status and an empty failure list do not substitute for human label acceptance.",
- "dataset_version": "building-be-v56-hard-negative-instance-roofs-r1",
- "decision_counts": {
- "accepted": 30662,
- "below_resolvable_pixel_size": 326,
- "created_after_imagery_period": 464
- },
- "failures": [],
- "input_feature_count": 31452,
- "manifest_immutable": true,
- "modified_at": "2026-07-30T02:01:12.442254+02:00",
- "path": "/app/storage/training/building-be-v56-corpus-audit-r1/belgium-building-corpus-audit.json",
- "review_complete": false,
- "review_queue_count": 180,
- "reviewed_sample_count": 0,
- "sample_count": 180,
- "sha256": "cbb9802aec1b780b306318fc172e470d29166574e9bf13d28e3107ae42f4d63c",
- "size_bytes": 54716,
- "spatial_leakage_status": "ok",
- "split_counts": {
- "brussels/background-test": 2,
- "brussels/calibration": 3,
- "brussels/test": 3,
- "brussels/train": 18,
- "brussels/val": 2,
- "flanders/background-test": 2,
- "flanders/calibration": 3,
- "flanders/test": 3,
- "flanders/train": 89,
- "flanders/val": 2,
- "wallonia/background-test": 2,
- "wallonia/calibration": 3,
- "wallonia/test": 3,
- "wallonia/train": 43,
- "wallonia/val": 2
- },
- "status": "needs_human_review",
- "temporal_unknown_sample_count": 0
- },
- "manifest": {
- "background_test_samples": [
- {
- "reference_feature_count": 0,
- "region": "flanders",
- "require_empty": true,
- "sample_slug": "kempen-forest-bg"
- },
- {
- "reference_feature_count": 0,
- "region": "flanders",
- "require_empty": true,
- "sample_slug": "antwerp-port-bg"
- },
- {
- "reference_feature_count": 0,
- "region": "wallonia",
- "require_empty": true,
- "sample_slug": "wallonia-rural-bg"
- },
- {
- "reference_feature_count": 2,
- "region": "wallonia",
- "require_empty": false,
- "sample_slug": "ardennes-forest-hard"
- },
- {
- "reference_feature_count": 107,
- "region": "brussels",
- "require_empty": false,
- "sample_slug": "sonian-forest-hard"
- },
- {
- "reference_feature_count": 141,
- "region": "brussels",
- "require_empty": false,
- "sample_slug": "bois-cambre-hard"
- }
- ],
- "context_counts": {
- "canal-hard-negative": 1,
- "canal-industry": 1,
- "coastal-park-hard-negative": 1,
- "coastal-parking-hard-negative": 1,
- "coastal-urban": 10,
- "dense-residential": 2,
- "dense-urban": 12,
- "detached-residential": 1,
- "dunes-negative": 3,
- "farmland-hard-negative": 4,
- "farmland-negative": 1,
- "forest-edge-residential": 1,
- "forest-hard-negative": 5,
- "forest-heath": 1,
- "forest-heath-negative": 1,
- "forest-negative": 3,
- "forest-town": 1,
- "heath-hard-negative": 1,
- "heath-negative": 1,
- "hilly-urban": 1,
- "historic-urban": 8,
- "industrial": 13,
- "industrial-hard-negative": 1,
- "industrial-valley": 1,
- "mixed-urban": 14,
- "open-rural": 1,
- "park-edge": 1,
- "park-hard-negative": 4,
- "park-road-hard-negative": 2,
- "parking-hard-negative": 3,
- "parking-industrial-hard-negative": 1,
- "port-hard-negative": 5,
- "quarry-hard-negative": 4,
- "rail-context": 1,
- "rail-hard-negative": 4,
- "regional-architecture": 6,
- "residential": 2,
- "residential-forest-edge": 1,
- "residential-park": 1,
- "ribbon-development": 15,
- "rural-farms": 1,
- "rural-town": 10,
- "small-city": 6,
- "suburban": 12,
- "tree-industrial": 2,
- "tree-ribbon-development": 2,
- "urban": 2,
- "urban-industrial": 2,
- "valley-town": 1,
- "valley-urban": 2
- },
- "cross_split_raster_dataset_id_duplicate_count": 0,
- "dataset_version": "building-be-v56-hard-negative-instance-roofs-r1",
- "exact_cross_split_raster_hash_duplicate_count": 0,
- "immutable": true,
- "modified_at": "2026-07-30T01:56:43.712173+02:00",
- "path": "/app/storage/operator-data/building-be-v56-hard-negative-instance-roofs-r1/operator_samples_manifest.json",
- "perceptual_duplicate_screen": {
- "algorithm": "64-bit difference hash over 9x8 grayscale resize",
- "claim_boundary": "This bounded perceptual screen is not semantic, instance-level or flight-strip deduplication and cannot establish split independence.",
- "cross_split_pair_count": 4833,
- "failures": [],
- "minimum_hamming_distance": 17,
- "pairs_at_or_below_4": [],
- "screened_raster_count": 180
- },
- "pure_empty_background_by_region": {
- "flanders": 2,
- "wallonia": 1
- },
- "pure_empty_background_count": 3,
- "region_split_counts": {
- "brussels/background-test": 2,
- "brussels/calibration": 3,
- "brussels/test": 3,
- "brussels/train": 18,
- "brussels/val": 2,
- "flanders/background-test": 2,
- "flanders/calibration": 3,
- "flanders/test": 3,
- "flanders/train": 89,
- "flanders/val": 2,
- "wallonia/background-test": 2,
- "wallonia/calibration": 3,
- "wallonia/test": 3,
- "wallonia/train": 43,
- "wallonia/val": 2
- },
- "sample_count": 180,
- "sample_role_counts": {
- "background_candidate": 48,
- "positive": 132
- },
- "schema_version": 1,
- "sha256": "27a9b09f184bb9a0cc4897f1cfab7f1e953af5715c1b97a5ec1a7b80a2d270f1",
- "size_bytes": 212185,
- "spatial_independence": {
- "available": true,
- "claim_boundary": "AOI bounding-box distance is a screening check only; it does not prove municipality, flight-strip, building-instance or imagery independence.",
- "closest_pairs": [
- {
- "distance_m": 95.72033647650719,
- "left_sample": "anderlecht-industry-train",
- "left_split": "train",
- "right_sample": "jette-test",
- "right_split": "test"
- },
- {
- "distance_m": 315.0533193495502,
- "left_sample": "brussels-rail-train-hard",
- "left_split": "train",
- "right_sample": "brussels-canal-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 539.229648376417,
- "left_sample": "woluwe-park-train-hard",
- "left_split": "train",
- "right_sample": "woluwe-val",
- "right_split": "val"
- },
- {
- "distance_m": 966.740421130726,
- "left_sample": "ixelles-dense-train",
- "left_split": "train",
- "right_sample": "brussels-park-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1153.2128511309188,
- "left_sample": "brussels-park-train-hard",
- "left_split": "train",
- "right_sample": "brussels-park-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1171.5995011516904,
- "left_sample": "brussels-canal-cal",
- "left_split": "calibration",
- "right_sample": "jette-test",
- "right_split": "test"
- },
- {
- "distance_m": 1189.94225545086,
- "left_sample": "brussels-rail-train-hard",
- "left_split": "train",
- "right_sample": "jette-test",
- "right_split": "test"
- },
- {
- "distance_m": 1394.9676480241287,
- "left_sample": "brussels-center-train",
- "left_split": "train",
- "right_sample": "brussels-rail-test",
- "right_split": "test"
- },
- {
- "distance_m": 1415.7291867613333,
- "left_sample": "molenbeek-val",
- "left_split": "val",
- "right_sample": "brussels-rail-test",
- "right_split": "test"
- },
- {
- "distance_m": 1435.0131761375885,
- "left_sample": "anderlecht-industry-train",
- "left_split": "train",
- "right_sample": "brussels-canal-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1436.5229671974064,
- "left_sample": "watermael-train",
- "left_split": "train",
- "right_sample": "brussels-park-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1505.6258954717393,
- "left_sample": "delta-rail-train-hard",
- "left_split": "train",
- "right_sample": "auderghem-test",
- "right_split": "test"
- },
- {
- "distance_m": 1506.5085196040245,
- "left_sample": "uccle-residential-train",
- "left_split": "train",
- "right_sample": "bois-cambre-hard",
- "right_split": "background-test"
- },
- {
- "distance_m": 1534.9616896812483,
- "left_sample": "ixelles-dense-train",
- "left_split": "train",
- "right_sample": "saint-gilles-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1535.045551331911,
- "left_sample": "brussels-canal-south-train-hard",
- "left_split": "train",
- "right_sample": "saint-gilles-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1535.2741745730666,
- "left_sample": "delta-rail-train-hard",
- "left_split": "train",
- "right_sample": "brussels-park-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1623.1790568355136,
- "left_sample": "laeken-mixed-train",
- "left_split": "train",
- "right_sample": "brussels-canal-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1623.2684811114318,
- "left_sample": "molenbeek-val",
- "left_split": "val",
- "right_sample": "brussels-canal-cal",
- "right_split": "calibration"
- },
- {
- "distance_m": 1623.6121947442375,
- "left_sample": "saint-gilles-cal",
- "left_split": "calibration",
- "right_sample": "brussels-rail-test",
- "right_split": "test"
- },
- {
- "distance_m": 1763.0906334393485,
- "left_sample": "brussels-center-train",
- "left_split": "train",
- "right_sample": "molenbeek-val",
- "right_split": "val"
- }
- ],
- "cross_split_pair_count": 4833,
- "crs": "EPSG:31370",
- "minimum_distance_m": 95.72033647650719,
- "pairs_below_2000_m": 24,
- "pairs_below_64_m": 0
- }
- }
- },
- "v58": {
- "calibration": {
- "claim_boundary": "This is calibration-split, tile-level bbox evidence; it is not a protected-test, unique-building or national release result.",
- "inference_imgsz": 640,
- "match_iou": 0.5,
- "model": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
- "modified_at": "2026-07-30T02:24:34.422968+02:00",
- "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-015/calibration.json",
- "sha256": "60538573a734d91107e25fb2a8a640ce45d90c482acfb65ed7110ff884f2f4c7",
- "size_bytes": 44731,
- "split": "val",
- "summary": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/calibration/yolo_tile_dataset_summary.json",
- "sweep_count": 13,
- "threshold_0_02": {
- "aggregate": {
- "f1": 0.24066744276290258,
- "false_negative": 1704,
- "false_positive": 17864,
- "precision": 0.14791318864774625,
- "recall": 0.6453694068678459,
- "true_positive": 3101
- },
- "pure_empty_false_positives": 0,
- "regions": {
- "brussels": {
- "f1": 0.42032204330927264,
- "false_negative": 332,
- "false_positive": 3844,
- "precision": 0.2825681224337439,
- "recall": 0.8201516793066089,
- "true_positive": 1514
- },
- "flanders": {
- "f1": 0.08040201005025126,
- "false_negative": 902,
- "false_positive": 1477,
- "precision": 0.06578115117014548,
- "recall": 0.10337972166998012,
- "true_positive": 104
- },
- "wallonia": {
- "f1": 0.18561862444458352,
- "false_negative": 470,
- "false_positive": 12543,
- "precision": 0.10573221160701554,
- "recall": 0.7593445980542755,
- "true_positive": 1483
- }
- },
- "threshold": 0.02
- },
- "threshold_0_15": {
- "aggregate": {
- "f1": 0.512905360688286,
- "false_negative": 2480,
- "false_positive": 1936,
- "precision": 0.5456465618399436,
- "recall": 0.4838709677419355,
- "true_positive": 2325
- },
- "pure_empty_false_positives": 0,
- "regions": {
- "brussels": {
- "f1": 0.6944444444444445,
- "false_negative": 496,
- "false_positive": 692,
- "precision": 0.6611165523996082,
- "recall": 0.7313109425785482,
- "true_positive": 1350
- },
- "flanders": {
- "f1": 0.0,
- "false_negative": 1006,
- "false_positive": 0,
- "precision": 1.0,
- "recall": 0.0,
- "true_positive": 0
- },
- "wallonia": {
- "f1": 0.4674017257909875,
- "false_negative": 978,
- "false_positive": 1244,
- "precision": 0.4393871113114015,
- "recall": 0.49923195084485406,
- "true_positive": 975
- }
- },
- "threshold": 0.15
- },
- "tile_count": 144
- }
- },
- "v62": {
- "calibration": {
- "claim_boundary": "This is calibration-split, tile-level bbox evidence; it is not a protected-test, unique-building or national release result.",
- "inference_imgsz": 640,
- "match_iou": 0.5,
- "model": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
- "modified_at": "2026-07-30T02:48:19.325477+02:00",
- "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/preview-epoch-006/calibration-routed.json",
- "sha256": "05d8c8f0ade55907e37668758ac225aeff60cbb45604de662944fa447f6d590f",
- "size_bytes": 45013,
- "split": "val",
- "summary": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/calibration/yolo_tile_dataset_summary.json",
- "sweep_count": 13,
- "threshold_0_02": {
- "aggregate": {
- "f1": 0.20828296965455817,
- "false_negative": 1531,
- "false_positive": 23359,
- "precision": 0.1229301993767131,
- "recall": 0.6813735691987512,
- "true_positive": 3274
- },
- "pure_empty_false_positives": 0,
- "regions": {
- "brussels": {
- "f1": 0.42032204330927264,
- "false_negative": 332,
- "false_positive": 3844,
- "precision": 0.2825681224337439,
- "recall": 0.8201516793066089,
- "true_positive": 1514
- },
- "flanders": {
- "f1": 0.06711084191399151,
- "false_negative": 729,
- "false_positive": 6972,
- "precision": 0.03821216719547524,
- "recall": 0.2753479125248509,
- "true_positive": 277
- },
- "wallonia": {
- "f1": 0.18561862444458352,
- "false_negative": 470,
- "false_positive": 12543,
- "precision": 0.10573221160701554,
- "recall": 0.7593445980542755,
- "true_positive": 1483
- }
- },
- "threshold": 0.02
- },
- "threshold_0_15": {
- "aggregate": {
- "f1": 0.512905360688286,
- "false_negative": 2480,
- "false_positive": 1936,
- "precision": 0.5456465618399436,
- "recall": 0.4838709677419355,
- "true_positive": 2325
- },
- "pure_empty_false_positives": 0,
- "regions": {
- "brussels": {
- "f1": 0.6944444444444445,
- "false_negative": 496,
- "false_positive": 692,
- "precision": 0.6611165523996082,
- "recall": 0.7313109425785482,
- "true_positive": 1350
- },
- "flanders": {
- "f1": 0.0,
- "false_negative": 1006,
- "false_positive": 0,
- "precision": 1.0,
- "recall": 0.0,
- "true_positive": 0
- },
- "wallonia": {
- "f1": 0.4674017257909875,
- "false_negative": 978,
- "false_positive": 1244,
- "precision": 0.4393871113114015,
- "recall": 0.49923195084485406,
- "true_positive": 975
- }
- },
- "threshold": 0.15
- },
- "tile_count": 144
- }
- },
- "v66": {
- "manifest": {
- "background_test_samples": [],
- "context_counts": {
- "detached-lowrise": 2,
- "rural-lowrise": 1
- },
- "cross_split_raster_dataset_id_duplicate_count": 0,
- "dataset_version": "building-be-v66-lowrise-temporal-r1",
- "exact_cross_split_raster_hash_duplicate_count": 0,
- "immutable": true,
- "modified_at": "2026-07-30T04:32:11.684242+02:00",
- "path": "/app/storage/operator-data/building-be-v66-lowrise-temporal-r1/operator_samples_manifest.json",
- "perceptual_duplicate_screen": {
- "algorithm": "64-bit difference hash over 9x8 grayscale resize",
- "claim_boundary": "This bounded perceptual screen is not semantic, instance-level or flight-strip deduplication and cannot establish split independence.",
- "cross_split_pair_count": 0,
- "failures": [],
- "minimum_hamming_distance": null,
- "pairs_at_or_below_4": [],
- "screened_raster_count": 3
- },
- "pure_empty_background_by_region": {},
- "pure_empty_background_count": 0,
- "region_split_counts": {
- "flanders/train": 3
- },
- "sample_count": 3,
- "sample_role_counts": {
- "positive": 3
- },
- "schema_version": 1,
- "sha256": "d861da48aca40121e158e6ab243a6ccbe53e14d500a186af64b620f612935b07",
- "size_bytes": 3678,
- "spatial_independence": {
- "available": true,
- "claim_boundary": "AOI bounding-box distance is a screening check only; it does not prove municipality, flight-strip, building-instance or imagery independence.",
- "closest_pairs": [],
- "cross_split_pair_count": 0,
- "crs": "EPSG:31370",
- "minimum_distance_m": null,
- "pairs_below_2000_m": 0,
- "pairs_below_64_m": 0
- }
- }
- }
-}
+{
+ "captured_at": "2026-08-01T18:27:33.32384+02:00",
+ "global_claim_boundary": "Inventory and historical calibration evidence do not prove human label acceptance, strict split independence, calibration, protected-test performance, national validity or release readiness.",
+ "inventory": {
+ "model_assets": [
+ {
+ "modified_at": "2026-07-26T17:22:21.398902+02:00",
+ "path": "/app/models/geointel-building-cuda-contract-smoke-36aa317.pt",
+ "sha256": "2df6b4fe341687e1460aa3eed3b77483aa08aa6e629bd2c3ee427a1a7610719c",
+ "size_bytes": 22512298
+ },
+ {
+ "modified_at": "2026-07-07T21:31:55.766037+02:00",
+ "path": "/app/models/geointel-building-yolov8n-expanded160e50.pt",
+ "sha256": "bf6a5e8d25a62d784ee53764ea11d7ce89c4e7aeeac7588010e497b8d7dafb2b",
+ "size_bytes": 6204266
+ },
+ {
+ "modified_at": "2026-07-07T05:28:06.179443+02:00",
+ "path": "/app/models/geointel-building-yolov8n-fontseed-smoke.pt",
+ "sha256": "f9f8a3719ce7cc887b673de8e905017713cd4b79523b414fdb45a429073bded9",
+ "size_bytes": 6224106
+ },
+ {
+ "modified_at": "2026-07-07T22:49:56.903136+02:00",
+ "path": "/app/models/geointel-building-yolov8n-hardneg160r8e40.pt",
+ "sha256": "7a77bd9f68e4c3927ffc8a8cd978a81067b02f42cffe77ada5334b5f8dbb6b50",
+ "size_bytes": 6202986
+ },
+ {
+ "modified_at": "2026-07-07T05:26:13.895721+02:00",
+ "path": "/app/models/geointel-building-yolov8n-noplots-smoke.pt",
+ "sha256": "c42c334601dc35037043d10577dd59b443f19f951022ceb2b22e077436a03921",
+ "size_bytes": 6224106
+ },
+ {
+ "modified_at": "2026-07-07T05:28:31.709151+02:00",
+ "path": "/app/models/geointel-building-yolov8n-operator8.pt",
+ "sha256": "071d64c89a8fd28f915f7a5a553e2d164942721292693a1612c725284c6e2e1e",
+ "size_bytes": 6225002
+ },
+ {
+ "modified_at": "2026-07-07T05:23:57.43427+02:00",
+ "path": "/app/models/geointel-building-yolov8n-smoke.pt",
+ "sha256": "df6e201f5f7850c22e712c88594b3e74688164030b61636c160f380c5b3dc78d",
+ "size_bytes": 6225002
+ },
+ {
+ "modified_at": "2026-07-07T21:06:37.871347+02:00",
+ "path": "/app/models/geointel-building-yolov8n-tile30.pt",
+ "sha256": "b9e228202500d7c85836d12a72e320f4f2f0cef24cbb1b5bf7fa78a6778390af",
+ "size_bytes": 6201642
+ },
+ {
+ "modified_at": "2026-07-09T18:37:43.626349+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024bg512r3e50.pt",
+ "sha256": "e0980572aac90e7efc514608eb16d7de5bfbf27a4bbec04e7bc1bc8c02f9601f",
+ "size_bytes": 22499370
+ },
+ {
+ "modified_at": "2026-07-09T16:26:49.94361+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024clean512e50.pt",
+ "sha256": "7cfadb684dd56623d2e35ebd65593211d3051908c87121bef438b231d3e47cce",
+ "size_bytes": 22499434
+ },
+ {
+ "modified_at": "2026-07-11T16:33:15.386987+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024cleanpx12vis035e50.pt",
+ "sha256": "4863b27717cb7fd3126ccf86a988b3c1863b5fb9271cf35370ca2473b9ed10f4",
+ "size_bytes": 22499434
+ },
+ {
+ "modified_at": "2026-07-12T22:44:53.466144+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024cleanpx12vis035lowvar512e50.pt",
+ "sha256": "75345767b51cc66692a9d2c2cd6577b7feecaf5971c8762365e8b610b9dfde8e",
+ "size_bytes": 22499498
+ },
+ {
+ "modified_at": "2026-07-13T00:53:49.29811+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024expandedminpx4vis035e50.pt",
+ "sha256": "a8a79cf5b0bdc19a0245acc322cf77232c335e222bd5f3c00a17d5f29402c196",
+ "size_bytes": 22499498
+ },
+ {
+ "modified_at": "2026-07-09T13:58:25.883963+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi1024visible025e50.pt",
+ "sha256": "0db27c5dbb3398425de6e132037b0f1af3ab059d5344a02f2c93f475c8a5cd87",
+ "size_bytes": 22499434
+ },
+ {
+ "modified_at": "2026-07-09T04:10:36.621019+02:00",
+ "path": "/app/models/geointel-building-yolov8s-aoi512e80.pt",
+ "sha256": "b796284a13358498c296fa41270dd234a81718a76cdafe62490a5206bb86ac5b",
+ "size_bytes": 22503210
+ },
+ {
+ "modified_at": "2026-07-08T01:55:09.411345+02:00",
+ "path": "/app/models/geointel-building-yolov8s-hardneg160r4e50.pt",
+ "sha256": "9bf71ad4742048ac77f07060b677bacd9757b8d310497fcada334d543e320d19",
+ "size_bytes": 22473194
+ },
+ {
+ "modified_at": "2026-07-08T18:17:43.325235+02:00",
+ "path": "/app/models/geointel-building-yolov8s-hardneg160r8e12partial.pt",
+ "sha256": "0246202cddc47eb994a0afc9ee10d56b72298bd1cdc0b72b75e12b28e2202330",
+ "size_bytes": 89500259
+ },
+ {
+ "modified_at": "2026-07-08T21:45:15.269244+02:00",
+ "path": "/app/models/geointel-building-yolov8s-hardneg160r8e60.pt",
+ "sha256": "d7daea04bd51a54a06944f0d4bf1961fe453dceb1fb34ef51daa73f6901fca81",
+ "size_bytes": 22519786
+ },
+ {
+ "modified_at": "2026-07-15T05:11:29.338793+02:00",
+ "path": "/app/models/geointel-building-yolov8s-reviewedexp6-minpx3-img640-ft20.pt",
+ "sha256": "038f1f97a6afd534f29e1f392a730a58207b928ca01e31ab8d8fed6106705820",
+ "size_bytes": 22514794
+ },
+ {
+ "modified_at": "2026-07-13T11:25:56.632878+02:00",
+ "path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
+ "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
+ "size_bytes": 22516074
+ },
+ {
+ "modified_at": "2026-07-09T03:38:33.050826+02:00",
+ "path": "/app/models/geointel-building-yolov8s-uniquehardneg160e50.pt",
+ "sha256": "c4e480273d3da5fc27532cd8bdc3fa7786582e06848ea11b56714ab8cb1750b3",
+ "size_bytes": 22467562
+ },
+ {
+ "modified_at": "2026-07-07T23:04:31.664335+02:00",
+ "path": "/app/models/yolo-remote-sensing-photovoltaic-v8l-detect-1000.pt",
+ "sha256": "242ff4ab889569278f0eb9fcd22eb2c4bf2a52e48d05d89cc7cfa7941165d203",
+ "size_bytes": 87771322
+ },
+ {
+ "modified_at": "2026-07-06T20:35:44.350011+02:00",
+ "path": "/app/models/yolov8n-building-segmentation.pt",
+ "sha256": "152d6a9c5c76c9f2fd2fd5cc167efaed7c8c02e31002b15415899710f1d71f98",
+ "size_bytes": 6744002
+ },
+ {
+ "modified_at": "2026-07-06T20:19:17.886218+02:00",
+ "path": "/app/models/yolov8n.pt",
+ "sha256": "f59b3d833e2ff32e194b5bb8e08d211dc7c5bdf144b90d2c8412c47ccfc83b36",
+ "size_bytes": 6549796
+ },
+ {
+ "modified_at": "2026-07-07T04:58:55.817325+02:00",
+ "path": "/app/models/yolov8s-building-segmentation.pt",
+ "sha256": "a27af31654c6a4edbdc85581c33d93c13986b5919de7de410f8d85d801b3bb34",
+ "size_bytes": 23814274
+ },
+ {
+ "modified_at": "2026-07-08T01:30:18.507298+02:00",
+ "path": "/app/models/yolov8s.pt",
+ "sha256": "1f47a78bf100391c2a140b7ac73a1caae18c32779be7d310658112f7ac9aa78a",
+ "size_bytes": 22588772
+ }
+ ],
+ "newest_training_checkpoints": [
+ {
+ "modified_at": "2026-07-30T02:47:14.279185+02:00",
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136985
+ },
+ {
+ "modified_at": "2026-07-30T02:44:07.837211+02:00",
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136473
+ },
+ {
+ "modified_at": "2026-07-30T02:41:13.160107+02:00",
+ "path": "/app/storage/training/building-be-v60-v58-flanders-transfer-r1/runs/flanders/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136601
+ },
+ {
+ "modified_at": "2026-07-30T02:37:38.254437+02:00",
+ "path": "/app/storage/training/building-be-v60-v58-flanders-transfer-r1/runs/flanders/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136345
+ },
+ {
+ "modified_at": "2026-07-30T02:34:42.763337+02:00",
+ "path": "/app/storage/training/building-be-v59-v56-flanders-clean-r1/runs/flanders/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T02:34:42.390342+02:00",
+ "path": "/app/storage/training/building-be-v59-v56-flanders-clean-r1/runs/flanders/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T02:22:43.58418+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456138073
+ },
+ {
+ "modified_at": "2026-07-30T02:22:43.177185+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456138073
+ },
+ {
+ "modified_at": "2026-07-30T02:14:43.080429+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-008/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456137049
+ },
+ {
+ "modified_at": "2026-07-30T02:09:42.288708+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-004/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136665
+ },
+ {
+ "modified_at": "2026-07-30T02:03:02.695056+02:00",
+ "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/runs/expert/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 114380313
+ },
+ {
+ "modified_at": "2026-07-30T02:03:02.398059+02:00",
+ "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/runs/expert/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 114380313
+ },
+ {
+ "modified_at": "2026-07-30T01:47:27.699208+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-flanders-proposal-classifier-r1/proposal-classifier.torchscript.pt",
+ "sha256": null,
+ "size_bytes": 44844023
+ },
+ {
+ "modified_at": "2026-07-30T01:42:20.332536+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-flanders-proposal-classifier-r1/best-state.pt",
+ "sha256": null,
+ "size_bytes": 44787723
+ },
+ {
+ "modified_at": "2026-07-30T01:34:56.511369+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/runs/expert-stable/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136729
+ },
+ {
+ "modified_at": "2026-07-30T01:34:25.695706+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-003/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136601
+ },
+ {
+ "modified_at": "2026-07-30T01:32:29.981969+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-001/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136345
+ },
+ {
+ "modified_at": "2026-07-30T01:31:42.656486+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/runs/expert-stable/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136345
+ },
+ {
+ "modified_at": "2026-07-30T01:29:21.721023+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r1/runs/expert/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136345
+ },
+ {
+ "modified_at": "2026-07-30T01:29:21.509025+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r1/runs/expert/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136345
+ },
+ {
+ "modified_at": "2026-07-30T01:21:55.753889+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/runs/iteration-002/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136921
+ },
+ {
+ "modified_at": "2026-07-30T01:21:39.47707+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-004/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T01:19:59.51318+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/runs/iteration-002/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T01:14:55.770552+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-001/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136409
+ },
+ {
+ "modified_at": "2026-07-30T00:54:43.639023+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/runs/iteration-002/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T00:52:59.162188+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/preview-iteration-002-epoch-003/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136665
+ },
+ {
+ "modified_at": "2026-07-30T00:52:26.001558+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/runs/iteration-002/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136665
+ },
+ {
+ "modified_at": "2026-07-30T00:37:25.645619+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/runs/iteration-002/weights/last.pt",
+ "sha256": null,
+ "size_bytes": 456136793
+ },
+ {
+ "modified_at": "2026-07-30T00:36:17.51638+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/preview-iteration-002-epoch-003/candidate.pt",
+ "sha256": null,
+ "size_bytes": 456136665
+ },
+ {
+ "modified_at": "2026-07-30T00:35:11.872109+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/runs/iteration-002/weights/best.pt",
+ "sha256": null,
+ "size_bytes": 456136665
+ }
+ ],
+ "newest_training_json_reports": [
+ {
+ "modified_at": "2026-07-30T03:19:23.269073+02:00",
+ "path": "/app/storage/training/building-be-v63-source640-aarschot-label-sheet-r1/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 3593
+ },
+ {
+ "modified_at": "2026-07-30T03:16:06.985227+02:00",
+ "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/oostkamp/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 12093
+ },
+ {
+ "modified_at": "2026-07-30T03:16:04.557254+02:00",
+ "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/beveren/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 11939
+ },
+ {
+ "modified_at": "2026-07-30T03:16:02.240279+02:00",
+ "path": "/app/storage/training/building-be-v63-new-flanders-calibration-label-sheets-r1/aarschot/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 11931
+ },
+ {
+ "modified_at": "2026-07-30T02:51:03.010696+02:00",
+ "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/ostend/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 11740
+ },
+ {
+ "modified_at": "2026-07-30T02:51:00.73172+02:00",
+ "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/lokeren/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 11771
+ },
+ {
+ "modified_at": "2026-07-30T02:50:58.479745+02:00",
+ "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/genk/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 11719
+ },
+ {
+ "modified_at": "2026-07-30T02:48:43.83121+02:00",
+ "path": "/app/storage/training/building-be-v56-flanders-calibration-label-sheets-r1/flanders-summary.json",
+ "sha256": null,
+ "size_bytes": 0
+ },
+ {
+ "modified_at": "2026-07-30T02:48:19.325477+02:00",
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/preview-epoch-006/calibration-routed.json",
+ "sha256": null,
+ "size_bytes": 45013
+ },
+ {
+ "modified_at": "2026-07-30T02:41:49.391714+02:00",
+ "path": "/app/storage/training/building-be-v61-v56-flanders-balanced-dataset-r1/regional-dataset.json",
+ "sha256": null,
+ "size_bytes": 5035
+ },
+ {
+ "modified_at": "2026-07-30T02:41:49.390714+02:00",
+ "path": "/app/storage/training/building-be-v61-v56-flanders-balanced-dataset-r1/regional-dataset-evidence.json",
+ "sha256": null,
+ "size_bytes": 5035
+ },
+ {
+ "modified_at": "2026-07-30T02:39:42.277093+02:00",
+ "path": "/app/storage/training/building-be-v56-calibration-label-sheets-r1/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 98284
+ },
+ {
+ "modified_at": "2026-07-30T02:24:34.422968+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-015/calibration.json",
+ "sha256": null,
+ "size_bytes": 44731
+ },
+ {
+ "modified_at": "2026-07-30T02:15:10.957125+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-008/calibration.json",
+ "sha256": null,
+ "size_bytes": 34010
+ },
+ {
+ "modified_at": "2026-07-30T02:09:58.356533+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-004/calibration.json",
+ "sha256": null,
+ "size_bytes": 30346
+ },
+ {
+ "modified_at": "2026-07-30T02:03:24.196822+02:00",
+ "path": "/app/storage/training/building-be-v57-v56-flanders-head-only-r1/calibration.json",
+ "sha256": null,
+ "size_bytes": 28272
+ },
+ {
+ "modified_at": "2026-07-30T02:01:39.51296+02:00",
+ "path": "/app/storage/training/building-be-v57-v56-flanders-hard-negative-dataset-r1/regional-dataset.json",
+ "sha256": null,
+ "size_bytes": 5338
+ },
+ {
+ "modified_at": "2026-07-30T02:01:39.51296+02:00",
+ "path": "/app/storage/training/building-be-v57-v56-flanders-hard-negative-dataset-r1/regional-dataset-evidence.json",
+ "sha256": null,
+ "size_bytes": 5338
+ },
+ {
+ "modified_at": "2026-07-30T02:01:39.412961+02:00",
+ "path": "/app/storage/training/building-be-v56-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 23487
+ },
+ {
+ "modified_at": "2026-07-30T02:01:16.576209+02:00",
+ "path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
+ "sha256": null,
+ "size_bytes": 153659
+ },
+ {
+ "modified_at": "2026-07-30T02:01:12.442254+02:00",
+ "path": "/app/storage/training/building-be-v56-corpus-audit-r1/belgium-building-corpus-audit.json",
+ "sha256": null,
+ "size_bytes": 54716
+ },
+ {
+ "modified_at": "2026-07-30T01:49:42.022753+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.95.json",
+ "sha256": null,
+ "size_bytes": 23439
+ },
+ {
+ "modified_at": "2026-07-30T01:49:16.790026+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.85.json",
+ "sha256": null,
+ "size_bytes": 24843
+ },
+ {
+ "modified_at": "2026-07-30T01:48:52.876285+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.70.json",
+ "sha256": null,
+ "size_bytes": 28317
+ },
+ {
+ "modified_at": "2026-07-30T01:48:29.234542+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.50.json",
+ "sha256": null,
+ "size_bytes": 28456
+ },
+ {
+ "modified_at": "2026-07-30T01:48:05.717797+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-proposal-calibration-sweep-r1/threshold-0.30.json",
+ "sha256": null,
+ "size_bytes": 28435
+ },
+ {
+ "modified_at": "2026-07-30T01:40:12.677918+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-flanders-proposals-r1/proposal-dataset-evidence.json",
+ "sha256": null,
+ "size_bytes": 3569
+ },
+ {
+ "modified_at": "2026-07-30T01:35:28.553019+02:00",
+ "path": "/app/storage/training/building-be-v54-v51-ostend-error-review-r1/candidate_error_contact_sheet.json",
+ "sha256": null,
+ "size_bytes": 7473
+ },
+ {
+ "modified_at": "2026-07-30T01:34:36.033593+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-003/calibration.json",
+ "sha256": null,
+ "size_bytes": 28402
+ },
+ {
+ "modified_at": "2026-07-30T01:32:39.768862+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-r2/preview-epoch-001/calibration.json",
+ "sha256": null,
+ "size_bytes": 28403
+ },
+ {
+ "modified_at": "2026-07-30T01:27:51.995001+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r2/regional-dataset.json",
+ "sha256": null,
+ "size_bytes": 4335
+ },
+ {
+ "modified_at": "2026-07-30T01:27:51.995001+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r2/regional-dataset-evidence.json",
+ "sha256": null,
+ "size_bytes": 4335
+ },
+ {
+ "modified_at": "2026-07-30T01:27:36.608169+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r1/regional-dataset.json",
+ "sha256": null,
+ "size_bytes": 4317
+ },
+ {
+ "modified_at": "2026-07-30T01:27:36.608169+02:00",
+ "path": "/app/storage/training/building-be-v53-v51-flanders-expert-dataset-r1/regional-dataset-evidence.json",
+ "sha256": null,
+ "size_bytes": 4317
+ },
+ {
+ "modified_at": "2026-07-30T01:21:49.742956+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-004/calibration.json",
+ "sha256": null,
+ "size_bytes": 28090
+ },
+ {
+ "modified_at": "2026-07-30T01:15:06.72743+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/preview-iteration-002-epoch-001/calibration.json",
+ "sha256": null,
+ "size_bytes": 28304
+ },
+ {
+ "modified_at": "2026-07-30T01:11:35.222777+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/training-loop-state.json",
+ "sha256": null,
+ "size_bytes": 2826
+ },
+ {
+ "modified_at": "2026-07-30T01:11:35.211777+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 3291
+ },
+ {
+ "modified_at": "2026-07-30T01:11:31.448819+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/assessment.json",
+ "sha256": null,
+ "size_bytes": 3924
+ },
+ {
+ "modified_at": "2026-07-30T01:11:29.909836+02:00",
+ "path": "/app/storage/training/building-be-v52-v51-instance-loop-r1/iteration-001/calibration.json",
+ "sha256": null,
+ "size_bytes": 28301
+ },
+ {
+ "modified_at": "2026-07-30T01:10:20.111611+02:00",
+ "path": "/app/storage/training/building-be-v51-rotated-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
+ "sha256": null,
+ "size_bytes": 142078
+ },
+ {
+ "modified_at": "2026-07-30T01:09:48.252964+02:00",
+ "path": "/app/storage/training/building-be-v51-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
+ "sha256": null,
+ "size_bytes": 165342
+ },
+ {
+ "modified_at": "2026-07-30T01:09:43.397018+02:00",
+ "path": "/app/storage/training/building-be-v51-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 23157
+ },
+ {
+ "modified_at": "2026-07-30T01:09:18.628293+02:00",
+ "path": "/app/storage/training/building-be-v51-corpus-audit-r1/belgium-building-corpus-audit.json",
+ "sha256": null,
+ "size_bytes": 50928
+ },
+ {
+ "modified_at": "2026-07-30T01:01:52.771238+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-1.00.json",
+ "sha256": null,
+ "size_bytes": 28119
+ },
+ {
+ "modified_at": "2026-07-30T01:01:43.263343+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.95.json",
+ "sha256": null,
+ "size_bytes": 28189
+ },
+ {
+ "modified_at": "2026-07-30T01:01:34.397442+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.90.json",
+ "sha256": null,
+ "size_bytes": 28210
+ },
+ {
+ "modified_at": "2026-07-30T01:01:25.270544+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.85.json",
+ "sha256": null,
+ "size_bytes": 28252
+ },
+ {
+ "modified_at": "2026-07-30T01:01:16.170645+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.80.json",
+ "sha256": null,
+ "size_bytes": 28244
+ },
+ {
+ "modified_at": "2026-07-30T01:01:07.024748+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.75.json",
+ "sha256": null,
+ "size_bytes": 28283
+ },
+ {
+ "modified_at": "2026-07-30T01:00:57.429855+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.70.json",
+ "sha256": null,
+ "size_bytes": 28192
+ },
+ {
+ "modified_at": "2026-07-30T01:00:48.453955+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/incumbent-scale-0.65.json",
+ "sha256": null,
+ "size_bytes": 28258
+ },
+ {
+ "modified_at": "2026-07-30T01:00:39.524054+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-1.00.json",
+ "sha256": null,
+ "size_bytes": 28229
+ },
+ {
+ "modified_at": "2026-07-30T01:00:31.056149+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.95.json",
+ "sha256": null,
+ "size_bytes": 28240
+ },
+ {
+ "modified_at": "2026-07-30T01:00:22.481244+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.90.json",
+ "sha256": null,
+ "size_bytes": 28258
+ },
+ {
+ "modified_at": "2026-07-30T01:00:13.746342+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.85.json",
+ "sha256": null,
+ "size_bytes": 28179
+ },
+ {
+ "modified_at": "2026-07-30T01:00:04.90544+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.80.json",
+ "sha256": null,
+ "size_bytes": 28242
+ },
+ {
+ "modified_at": "2026-07-30T00:59:56.060539+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.75.json",
+ "sha256": null,
+ "size_bytes": 28285
+ },
+ {
+ "modified_at": "2026-07-30T00:59:47.290637+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.70.json",
+ "sha256": null,
+ "size_bytes": 28293
+ },
+ {
+ "modified_at": "2026-07-30T00:59:38.583734+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/geometry-sweep/candidate-scale-0.65.json",
+ "sha256": null,
+ "size_bytes": 28273
+ },
+ {
+ "modified_at": "2026-07-30T00:55:43.311357+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/error-review/candidate_error_contact_sheet.json",
+ "sha256": null,
+ "size_bytes": 17563
+ },
+ {
+ "modified_at": "2026-07-30T00:55:20.237615+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/supervisor-state.json",
+ "sha256": null,
+ "size_bytes": 152
+ },
+ {
+ "modified_at": "2026-07-30T00:54:56.403881+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/preview-iteration-002-epoch-003/calibration.json",
+ "sha256": null,
+ "size_bytes": 28227
+ },
+ {
+ "modified_at": "2026-07-30T00:45:36.326123+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/training-loop-state.json",
+ "sha256": null,
+ "size_bytes": 2801
+ },
+ {
+ "modified_at": "2026-07-30T00:45:36.316123+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 3279
+ },
+ {
+ "modified_at": "2026-07-30T00:45:32.794162+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/assessment.json",
+ "sha256": null,
+ "size_bytes": 3920
+ },
+ {
+ "modified_at": "2026-07-30T00:45:31.968172+02:00",
+ "path": "/app/storage/training/building-be-v50-v47-spread-loop-r1/iteration-001/calibration.json",
+ "sha256": null,
+ "size_bytes": 28119
+ },
+ {
+ "modified_at": "2026-07-30T00:44:32.073842+02:00",
+ "path": "/app/storage/training/building-be-v50-spread-sampling-r2/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 3206
+ },
+ {
+ "modified_at": "2026-07-30T00:43:22.345623+02:00",
+ "path": "/app/storage/training/building-be-v50-prioritized-sampling-r1/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 3216
+ },
+ {
+ "modified_at": "2026-07-30T00:39:59.305898+02:00",
+ "path": "/app/storage/training/building-be-v49-flanders-context-probe/epoch003.json",
+ "sha256": null,
+ "size_bytes": 27672
+ },
+ {
+ "modified_at": "2026-07-30T00:39:50.705994+02:00",
+ "path": "/app/storage/training/building-be-v49-flanders-context-probe/incumbent.json",
+ "sha256": null,
+ "size_bytes": 27822
+ },
+ {
+ "modified_at": "2026-07-30T00:39:40.703106+02:00",
+ "path": "/app/storage/training/building-be-v49-flanders-context-probe/summary.json",
+ "sha256": null,
+ "size_bytes": 157390
+ },
+ {
+ "modified_at": "2026-07-30T00:38:48.179695+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/supervisor-state.json",
+ "sha256": null,
+ "size_bytes": 152
+ },
+ {
+ "modified_at": "2026-07-30T00:38:26.885933+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/preview-iteration-002-epoch-003/calibration.json",
+ "sha256": null,
+ "size_bytes": 28128
+ },
+ {
+ "modified_at": "2026-07-30T00:28:35.333514+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/training-loop-state.json",
+ "sha256": null,
+ "size_bytes": 2822
+ },
+ {
+ "modified_at": "2026-07-30T00:28:35.323514+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/failure-driven-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 3246
+ },
+ {
+ "modified_at": "2026-07-30T00:28:31.329558+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/assessment.json",
+ "sha256": null,
+ "size_bytes": 3920
+ },
+ {
+ "modified_at": "2026-07-30T00:28:29.513578+02:00",
+ "path": "/app/storage/training/building-be-v49-v47-incumbent-loop-r1/iteration-001/calibration.json",
+ "sha256": null,
+ "size_bytes": 28122
+ },
+ {
+ "modified_at": "2026-07-30T00:26:23.26598+02:00",
+ "path": "/app/storage/training/building-be-v48-v47-merged-loop-r1/supervisor-state.json",
+ "sha256": null,
+ "size_bytes": 147
+ },
+ {
+ "modified_at": "2026-07-30T00:26:09.100137+02:00",
+ "path": "/app/storage/training/building-be-v48-v47-merged-loop-r1/preview-epoch-006/calibration.json",
+ "sha256": null,
+ "size_bytes": 21260
+ },
+ {
+ "modified_at": "2026-07-30T00:00:51.014968+02:00",
+ "path": "/app/storage/training/building-be-v47-label-contact-sheets-r1/operator_yolo_label_qa_summary.json",
+ "sha256": null,
+ "size_bytes": 34321
+ },
+ {
+ "modified_at": "2026-07-30T00:00:17.481339+02:00",
+ "path": "/app/storage/training/building-be-v47-yolo-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
+ "sha256": null,
+ "size_bytes": 142078
+ },
+ {
+ "modified_at": "2026-07-30T00:00:11.121409+02:00",
+ "path": "/app/storage/training/building-be-v47-corpus-audit-r1/belgium-building-corpus-audit.json",
+ "sha256": null,
+ "size_bytes": 50943
+ },
+ {
+ "modified_at": "2026-07-29T23:51:51.396916+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/calibration.json",
+ "sha256": null,
+ "size_bytes": 7550
+ },
+ {
+ "modified_at": "2026-07-29T23:51:13.322331+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/yolo384/retile-evidence.json",
+ "sha256": null,
+ "size_bytes": 699
+ },
+ {
+ "modified_at": "2026-07-29T23:51:13.321331+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/yolo384/yolo_tile_dataset_summary.json",
+ "sha256": null,
+ "size_bytes": 49493
+ },
+ {
+ "modified_at": "2026-07-29T23:51:11.312353+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/yolo640/yolo_tile_dataset_summary.json",
+ "sha256": null,
+ "size_bytes": 10546
+ },
+ {
+ "modified_at": "2026-07-29T23:51:09.632371+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/operator_samples_manifest.json",
+ "sha256": null,
+ "size_bytes": 3719
+ },
+ {
+ "modified_at": "2026-07-29T23:46:44.747252+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/ostend-coastal-train/label-audit.json",
+ "sha256": null,
+ "size_bytes": 8551
+ },
+ {
+ "modified_at": "2026-07-29T23:46:44.432256+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/lokeren-ribbon-train/label-audit.json",
+ "sha256": null,
+ "size_bytes": 91579
+ },
+ {
+ "modified_at": "2026-07-29T23:46:43.902261+02:00",
+ "path": "/app/storage/training/building-be-v47-merge-probe/genk-industry-train/label-audit.json",
+ "sha256": null,
+ "size_bytes": 48335
+ },
+ {
+ "modified_at": "2026-07-29T23:43:13.953542+02:00",
+ "path": "/app/storage/training/building-be-v46-v44-incumbent-loop-r1/supervisor-state.json",
+ "sha256": null,
+ "size_bytes": 147
+ },
+ {
+ "modified_at": "2026-07-29T23:42:32.584991+02:00",
+ "path": "/app/storage/training/building-be-v46-v44-incumbent-loop-r1/initial-flanders-error-review/candidate_error_contact_sheet.json",
+ "sha256": null,
+ "size_bytes": 17446
+ },
+ {
+ "modified_at": "2026-07-29T23:31:57.073956+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/supervisor-state.json",
+ "sha256": null,
+ "size_bytes": 152
+ },
+ {
+ "modified_at": "2026-07-29T23:31:28.822263+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/training-loop-state.json",
+ "sha256": null,
+ "size_bytes": 6162
+ },
+ {
+ "modified_at": "2026-07-29T23:31:28.814263+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/failure-driven-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 2867
+ },
+ {
+ "modified_at": "2026-07-29T23:31:24.775307+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/assessment.json",
+ "sha256": null,
+ "size_bytes": 3838
+ },
+ {
+ "modified_at": "2026-07-29T23:31:23.681319+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-004/calibration.json",
+ "sha256": null,
+ "size_bytes": 21407
+ },
+ {
+ "modified_at": "2026-07-29T23:10:43.824813+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-003/recall-balanced-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 2869
+ },
+ {
+ "modified_at": "2026-07-29T23:07:06.556184+02:00",
+ "path": "/app/storage/training/building-be-v45-v44-closed-loop-r1/iteration-003/failure-driven-training/failure-driven-sampling.json",
+ "sha256": null,
+ "size_bytes": 2816
+ }
+ ],
+ "operator_manifest_count": 36,
+ "operator_manifests": [
+ {
+ "modified_at": "2026-07-30T05:42:10.538949+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-roof-edge-trial-r1/operator_samples_manifest.json",
+ "sha256": "fa8316838c68624abc762418fa8525dfd13c30ca392fcad8082c5c2f913706ed",
+ "size_bytes": 3725
+ },
+ {
+ "modified_at": "2026-07-30T05:36:08.694997+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-swapped-axis-trial-r1/operator_samples_manifest.json",
+ "sha256": "b149f6fc2bd3a66137cc2f2b69ad7420a510cc0fb7807b664cf8b8f34e90f2f5",
+ "size_bytes": 3748
+ },
+ {
+ "modified_at": "2026-07-30T05:35:04.212719+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-live-imagery-trial-r1/operator_samples_manifest.json",
+ "sha256": "05bf2b6a0a1de7cdb9f044d7dd31bb65bf0cd6f86d8032d0907a54eb1448019c",
+ "size_bytes": 3748
+ },
+ {
+ "modified_at": "2026-07-30T04:34:00.554016+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-main-building-r1/operator_samples_manifest.json",
+ "sha256": "9faeb39865fe715c1d611f033ab29a7c969d3b7c1f049ba341bfdf9e8d8f52e3",
+ "size_bytes": 3712
+ },
+ {
+ "modified_at": "2026-07-30T04:32:11.684242+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-temporal-r1/operator_samples_manifest.json",
+ "sha256": "d861da48aca40121e158e6ab243a6ccbe53e14d500a186af64b620f612935b07",
+ "size_bytes": 3678
+ },
+ {
+ "modified_at": "2026-07-30T04:16:07.295053+02:00",
+ "path": "/app/storage/operator-data/building-be-v65-grb-main-building-calibration-candidates-r1/operator_samples_manifest.json",
+ "sha256": "5b2752ce5fdb0edb4e603bb73aa6ea141251575cab466f40b21ef6906c26a55e",
+ "size_bytes": 3843
+ },
+ {
+ "modified_at": "2026-07-30T03:36:17.51792+02:00",
+ "path": "/app/storage/operator-data/building-be-v64-temporal-cutoff-instance-roofs-r1/operator_samples_manifest.json",
+ "sha256": "5a685901af39e2b1bab6e764774ebe1a5e2826653c7077fd70bb8d59d5b546dd",
+ "size_bytes": 216541
+ },
+ {
+ "modified_at": "2026-07-30T03:15:38.213543+02:00",
+ "path": "/app/storage/operator-data/building-be-v63-calibration-remediation-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "77d7d3b9996bff416c8bc1a864a6c3727ad36d3fb55e08c9585a0210799cd782",
+ "size_bytes": 225614
+ },
+ {
+ "modified_at": "2026-07-30T03:04:10.717088+02:00",
+ "path": "/app/storage/operator-data/building-be-v63-calibration-remediation-instance-roofs-r1/operator_samples_manifest.json",
+ "sha256": "40583e1d703ba6167ffde4831f145994d6c05de21697c6d0d079d09ed22f5506",
+ "size_bytes": 219480
+ },
+ {
+ "modified_at": "2026-07-30T02:00:52.456471+02:00",
+ "path": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "5a6f7e94d477bf185284d097f3afb7244c456ea8c6034b501f279bc30815b4bc",
+ "size_bytes": 218220
+ },
+ {
+ "modified_at": "2026-07-30T01:56:43.712173+02:00",
+ "path": "/app/storage/operator-data/building-be-v56-hard-negative-instance-roofs-r1/operator_samples_manifest.json",
+ "sha256": "27a9b09f184bb9a0cc4897f1cfab7f1e953af5715c1b97a5ec1a7b80a2d270f1",
+ "size_bytes": 212185
+ },
+ {
+ "modified_at": "2026-07-30T01:09:09.668392+02:00",
+ "path": "/app/storage/operator-data/building-be-v51-instance-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "06d45c57def167465c5124224ff4b80a3af3085617bf0a56b412e9d5998013e6",
+ "size_bytes": 201555
+ },
+ {
+ "modified_at": "2026-07-30T01:04:36.297425+02:00",
+ "path": "/app/storage/operator-data/building-be-v51-instance-roofs-20260730-r1/operator_samples_manifest.json",
+ "sha256": "731960812a2e0a867353775d37aef7c251a0fcb4d2df19a8887ff4a368ca0914",
+ "size_bytes": 195916
+ },
+ {
+ "modified_at": "2026-07-29T23:58:47.599333+02:00",
+ "path": "/app/storage/operator-data/building-be-v47-merged-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "71f721acf408fcfd1428f58af5cbfc3b2e58da5474c208c6fd59e7446fa1fec1",
+ "size_bytes": 200878
+ },
+ {
+ "modified_at": "2026-07-29T23:53:52.161599+02:00",
+ "path": "/app/storage/operator-data/building-be-v47-merged-roofs-20260729-r1/operator_samples_manifest.json",
+ "sha256": "8b2043bf36e9afc3060bdd7897c242def1ee3b69c1a6c766507162977dfe1b0e",
+ "size_bytes": 195239
+ },
+ {
+ "modified_at": "2026-07-29T22:16:32.716488+02:00",
+ "path": "/app/storage/operator-data/building-be-v44-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "448bb3ec426a6af129f01d29732160f84b9936c9871a033de13a7d98b9d25112",
+ "size_bytes": 199531
+ },
+ {
+ "modified_at": "2026-07-29T22:16:31.788498+02:00",
+ "path": "/app/storage/operator-data/building-be-v44-combined-source-20260729-r1/operator_samples_manifest.json",
+ "sha256": "3450440b66892beb591b03f393ce09018d7d8844a604cc4a09f5f20043784a89",
+ "size_bytes": 193902
+ },
+ {
+ "modified_at": "2026-07-29T22:13:42.264353+02:00",
+ "path": "/app/storage/operator-data/building-be-v44-expanded-20260729-r1/operator_samples_manifest.json",
+ "sha256": "62fdb4adee46ff67a40636f30a22fc97b8c9bd14516cbe0a24ed0de2db56f4fb",
+ "size_bytes": 14150
+ },
+ {
+ "modified_at": "2026-07-29T20:18:14.968407+02:00",
+ "path": "/app/storage/operator-data/building-be-v42-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "868496a9e3ad321ff8a8984fd808b235e1f2df1b949514e124459af154ac79fd",
+ "size_bytes": 185111
+ },
+ {
+ "modified_at": "2026-07-29T20:12:28.829147+02:00",
+ "path": "/app/storage/operator-data/building-be-v42-expanded-20260729-r1/operator_samples_manifest.json",
+ "sha256": "4e89202a7089d5b1c3a33cbdf0c23ccfec9867de5a823fb294dee4489a34c952",
+ "size_bytes": 179871
+ },
+ {
+ "modified_at": "2026-07-29T17:35:37.818326+02:00",
+ "path": "/app/storage/operator-data/building-be-v31-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "c0e392759c286f710394bddb1fffc174d1efba64b16741f800c79a3dbef97f94",
+ "size_bytes": 168207
+ },
+ {
+ "modified_at": "2026-07-29T17:18:10.307936+02:00",
+ "path": "/app/storage/operator-data/building-be-v31-expanded-20260729-r1/operator_samples_manifest.json",
+ "sha256": "57632bc537a50e048ec5e07bee6f3c9743bf4adca5e29aff3138c4007e8363c8",
+ "size_bytes": 163429
+ },
+ {
+ "modified_at": "2026-07-27T10:47:22.624354+02:00",
+ "path": "/app/storage/operator-data/building-be-v30-rotated-holdouts-r1/operator_samples_manifest.json",
+ "sha256": "4f2eafd8893a33d2b106e8570c5279497446760580b2328937e486cb3cd6d1ed",
+ "size_bytes": 146541
+ },
+ {
+ "modified_at": "2026-07-27T05:58:22.556248+02:00",
+ "path": "/app/storage/operator-data/building-be-v12-expanded-20260727-r1/operator_samples_manifest.json",
+ "sha256": "67ec0ee06b63e92471159ca73f7cfe42be39d48a3d33cb24f64dde1a5aadb720",
+ "size_bytes": 142357
+ },
+ {
+ "modified_at": "2026-07-27T05:32:21.294332+02:00",
+ "path": "/app/storage/operator-data/building-be-v10-compact-roofs-20260727-r1/operator_samples_manifest.json",
+ "sha256": "b9d63b5a2a1de1148f16f2a4e017ca2ea6f105cdf82f6f09718ada4600b03503",
+ "size_bytes": 104237
+ },
+ {
+ "modified_at": "2026-07-27T05:08:05.435299+02:00",
+ "path": "/app/storage/operator-data/building-be-v8-visible-roofs-20260727-r1/operator_samples_manifest.json",
+ "sha256": "5c4d1d8d045968010b53a289305e7fee0c7c1ed86c03710a33e48d1efb28dc62",
+ "size_bytes": 103996
+ },
+ {
+ "modified_at": "2026-07-27T03:34:25.224643+02:00",
+ "path": "/app/storage/operator-data/building-be-v7-targeted-20260727-r1/operator_samples_manifest.json",
+ "sha256": "f4af25e289512a497a41fa5495399b0d226009639e1338dbd82d79caf0301dec",
+ "size_bytes": 103151
+ },
+ {
+ "modified_at": "2026-07-27T03:07:52.286944+02:00",
+ "path": "/app/storage/operator-data/building-be-v6-temporal-20260727-r1/operator_samples_manifest.json",
+ "sha256": "973828b453e6fbeb5c04aa567ddb615566d92825d8698654f5056d2997d382eb",
+ "size_bytes": 85803
+ },
+ {
+ "modified_at": "2026-07-27T03:00:56.864537+02:00",
+ "path": "/app/storage/operator-data/building-be-v5-dated-20260727-r1/operator_samples_manifest.json",
+ "sha256": "eade90d3ba22b426b72a300fcaa9a01f6eb1d18567c4a53413b72b8048f5f021",
+ "size_bytes": 85350
+ },
+ {
+ "modified_at": "2026-07-27T02:49:26.80417+02:00",
+ "path": "/app/storage/operator-data/building-be-v4-dated-20260727-r1/operator_samples_manifest.json",
+ "sha256": "32f0c969e3131da33497ebffb6782ddf1b58e83b8a46f929818c2140af867fd3",
+ "size_bytes": 85350
+ },
+ {
+ "modified_at": "2026-07-27T02:21:36.309681+02:00",
+ "path": "/app/storage/operator-data/building-be-v3-20260727-r1/operator_samples_manifest.json",
+ "sha256": "299212d1b3881330a6e3e936836d279435ab80c156a012121fe566ad0f3eae22",
+ "size_bytes": 65822
+ },
+ {
+ "modified_at": "2026-07-27T01:30:38.681558+02:00",
+ "path": "/app/storage/operator-data/building-be-v2-20260727-r3/operator_samples_manifest.json",
+ "sha256": "8a2ccd39642be30a58bd12b52b117ea4e2055437b2ed9d49e4022b47605e5f19",
+ "size_bytes": 46079
+ },
+ {
+ "modified_at": "2026-07-27T01:27:56.991352+02:00",
+ "path": "/app/storage/operator-data/building-be-v2-20260727-r2/operator_samples_manifest.json",
+ "sha256": "9473bb0f34a3e77da3d8045d253c8395f23107bed3609cc02a40f38705d1617b",
+ "size_bytes": 39321
+ },
+ {
+ "modified_at": "2026-07-27T01:27:30.455646+02:00",
+ "path": "/app/storage/operator-data/building-be-v2-20260727-r1/operator_samples_manifest.json",
+ "sha256": "50b079dcf30471db7370f8f056b7fa4fd6872f15709c531c473c883b060c9679",
+ "size_bytes": 35270
+ },
+ {
+ "modified_at": "2026-07-26T22:21:13.448858+02:00",
+ "path": "/app/storage/operator-data/building-be-v1-candidate-20260726/operator_samples_manifest.json",
+ "sha256": "0450ce782c35c5955e519fae489ffdbef6075d871adb0d196cc6a244571788fa",
+ "size_bytes": 18956
+ },
+ {
+ "modified_at": "2026-07-26T22:16:59.60574+02:00",
+ "path": "/app/storage/operator-data/building-be-v1-pilot/operator_samples_manifest.json",
+ "sha256": "f780294328c0e87ce7ebfdc41384bed9b97be302490e9a02aa4ba77e69fad093",
+ "size_bytes": 2995
+ }
+ ],
+ "training_checkpoint_bytes": 28512052142,
+ "training_checkpoint_count": 229,
+ "training_json_report_count": 424
+ },
+ "read_only": true,
+ "schema_version": 1,
+ "v56": {
+ "corpus_audit": {
+ "accepted_feature_count": 30662,
+ "claim_boundary": "Automated status and an empty failure list do not substitute for human label acceptance.",
+ "dataset_version": "building-be-v56-hard-negative-instance-roofs-r1",
+ "decision_counts": {
+ "accepted": 30662,
+ "below_resolvable_pixel_size": 326,
+ "created_after_imagery_period": 464
+ },
+ "failures": [],
+ "input_feature_count": 31452,
+ "manifest_immutable": true,
+ "modified_at": "2026-07-30T02:01:12.442254+02:00",
+ "path": "/app/storage/training/building-be-v56-corpus-audit-r1/belgium-building-corpus-audit.json",
+ "review_complete": false,
+ "review_queue_count": 180,
+ "reviewed_sample_count": 0,
+ "sample_count": 180,
+ "sha256": "cbb9802aec1b780b306318fc172e470d29166574e9bf13d28e3107ae42f4d63c",
+ "size_bytes": 54716,
+ "spatial_leakage_status": "ok",
+ "split_counts": {
+ "brussels/background-test": 2,
+ "brussels/calibration": 3,
+ "brussels/test": 3,
+ "brussels/train": 18,
+ "brussels/val": 2,
+ "flanders/background-test": 2,
+ "flanders/calibration": 3,
+ "flanders/test": 3,
+ "flanders/train": 89,
+ "flanders/val": 2,
+ "wallonia/background-test": 2,
+ "wallonia/calibration": 3,
+ "wallonia/test": 3,
+ "wallonia/train": 43,
+ "wallonia/val": 2
+ },
+ "status": "needs_human_review",
+ "temporal_unknown_sample_count": 0
+ },
+ "manifest": {
+ "background_test_samples": [
+ {
+ "reference_feature_count": 0,
+ "region": "flanders",
+ "require_empty": true,
+ "sample_slug": "kempen-forest-bg"
+ },
+ {
+ "reference_feature_count": 0,
+ "region": "flanders",
+ "require_empty": true,
+ "sample_slug": "antwerp-port-bg"
+ },
+ {
+ "reference_feature_count": 0,
+ "region": "wallonia",
+ "require_empty": true,
+ "sample_slug": "wallonia-rural-bg"
+ },
+ {
+ "reference_feature_count": 2,
+ "region": "wallonia",
+ "require_empty": false,
+ "sample_slug": "ardennes-forest-hard"
+ },
+ {
+ "reference_feature_count": 107,
+ "region": "brussels",
+ "require_empty": false,
+ "sample_slug": "sonian-forest-hard"
+ },
+ {
+ "reference_feature_count": 141,
+ "region": "brussels",
+ "require_empty": false,
+ "sample_slug": "bois-cambre-hard"
+ }
+ ],
+ "context_counts": {
+ "canal-hard-negative": 1,
+ "canal-industry": 1,
+ "coastal-park-hard-negative": 1,
+ "coastal-parking-hard-negative": 1,
+ "coastal-urban": 10,
+ "dense-residential": 2,
+ "dense-urban": 12,
+ "detached-residential": 1,
+ "dunes-negative": 3,
+ "farmland-hard-negative": 4,
+ "farmland-negative": 1,
+ "forest-edge-residential": 1,
+ "forest-hard-negative": 5,
+ "forest-heath": 1,
+ "forest-heath-negative": 1,
+ "forest-negative": 3,
+ "forest-town": 1,
+ "heath-hard-negative": 1,
+ "heath-negative": 1,
+ "hilly-urban": 1,
+ "historic-urban": 8,
+ "industrial": 13,
+ "industrial-hard-negative": 1,
+ "industrial-valley": 1,
+ "mixed-urban": 14,
+ "open-rural": 1,
+ "park-edge": 1,
+ "park-hard-negative": 4,
+ "park-road-hard-negative": 2,
+ "parking-hard-negative": 3,
+ "parking-industrial-hard-negative": 1,
+ "port-hard-negative": 5,
+ "quarry-hard-negative": 4,
+ "rail-context": 1,
+ "rail-hard-negative": 4,
+ "regional-architecture": 6,
+ "residential": 2,
+ "residential-forest-edge": 1,
+ "residential-park": 1,
+ "ribbon-development": 15,
+ "rural-farms": 1,
+ "rural-town": 10,
+ "small-city": 6,
+ "suburban": 12,
+ "tree-industrial": 2,
+ "tree-ribbon-development": 2,
+ "urban": 2,
+ "urban-industrial": 2,
+ "valley-town": 1,
+ "valley-urban": 2
+ },
+ "cross_split_raster_dataset_id_duplicate_count": 0,
+ "dataset_version": "building-be-v56-hard-negative-instance-roofs-r1",
+ "exact_cross_split_raster_hash_duplicate_count": 0,
+ "immutable": true,
+ "modified_at": "2026-07-30T01:56:43.712173+02:00",
+ "path": "/app/storage/operator-data/building-be-v56-hard-negative-instance-roofs-r1/operator_samples_manifest.json",
+ "perceptual_duplicate_screen": {
+ "algorithm": "64-bit difference hash over 9x8 grayscale resize",
+ "claim_boundary": "This bounded perceptual screen is not semantic, instance-level or flight-strip deduplication and cannot establish split independence.",
+ "cross_split_pair_count": 4833,
+ "failures": [],
+ "minimum_hamming_distance": 17,
+ "pairs_at_or_below_4": [],
+ "screened_raster_count": 180
+ },
+ "pure_empty_background_by_region": {
+ "flanders": 2,
+ "wallonia": 1
+ },
+ "pure_empty_background_count": 3,
+ "region_split_counts": {
+ "brussels/background-test": 2,
+ "brussels/calibration": 3,
+ "brussels/test": 3,
+ "brussels/train": 18,
+ "brussels/val": 2,
+ "flanders/background-test": 2,
+ "flanders/calibration": 3,
+ "flanders/test": 3,
+ "flanders/train": 89,
+ "flanders/val": 2,
+ "wallonia/background-test": 2,
+ "wallonia/calibration": 3,
+ "wallonia/test": 3,
+ "wallonia/train": 43,
+ "wallonia/val": 2
+ },
+ "sample_count": 180,
+ "sample_role_counts": {
+ "background_candidate": 48,
+ "positive": 132
+ },
+ "schema_version": 1,
+ "sha256": "27a9b09f184bb9a0cc4897f1cfab7f1e953af5715c1b97a5ec1a7b80a2d270f1",
+ "size_bytes": 212185,
+ "spatial_independence": {
+ "available": true,
+ "claim_boundary": "AOI bounding-box distance is a screening check only; it does not prove municipality, flight-strip, building-instance or imagery independence.",
+ "closest_pairs": [
+ {
+ "distance_m": 95.72033647650719,
+ "left_sample": "anderlecht-industry-train",
+ "left_split": "train",
+ "right_sample": "jette-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 315.0533193495502,
+ "left_sample": "brussels-rail-train-hard",
+ "left_split": "train",
+ "right_sample": "brussels-canal-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 539.229648376417,
+ "left_sample": "woluwe-park-train-hard",
+ "left_split": "train",
+ "right_sample": "woluwe-val",
+ "right_split": "val"
+ },
+ {
+ "distance_m": 966.740421130726,
+ "left_sample": "ixelles-dense-train",
+ "left_split": "train",
+ "right_sample": "brussels-park-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1153.2128511309188,
+ "left_sample": "brussels-park-train-hard",
+ "left_split": "train",
+ "right_sample": "brussels-park-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1171.5995011516904,
+ "left_sample": "brussels-canal-cal",
+ "left_split": "calibration",
+ "right_sample": "jette-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1189.94225545086,
+ "left_sample": "brussels-rail-train-hard",
+ "left_split": "train",
+ "right_sample": "jette-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1394.9676480241287,
+ "left_sample": "brussels-center-train",
+ "left_split": "train",
+ "right_sample": "brussels-rail-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1415.7291867613333,
+ "left_sample": "molenbeek-val",
+ "left_split": "val",
+ "right_sample": "brussels-rail-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1435.0131761375885,
+ "left_sample": "anderlecht-industry-train",
+ "left_split": "train",
+ "right_sample": "brussels-canal-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1436.5229671974064,
+ "left_sample": "watermael-train",
+ "left_split": "train",
+ "right_sample": "brussels-park-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1505.6258954717393,
+ "left_sample": "delta-rail-train-hard",
+ "left_split": "train",
+ "right_sample": "auderghem-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1506.5085196040245,
+ "left_sample": "uccle-residential-train",
+ "left_split": "train",
+ "right_sample": "bois-cambre-hard",
+ "right_split": "background-test"
+ },
+ {
+ "distance_m": 1534.9616896812483,
+ "left_sample": "ixelles-dense-train",
+ "left_split": "train",
+ "right_sample": "saint-gilles-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1535.045551331911,
+ "left_sample": "brussels-canal-south-train-hard",
+ "left_split": "train",
+ "right_sample": "saint-gilles-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1535.2741745730666,
+ "left_sample": "delta-rail-train-hard",
+ "left_split": "train",
+ "right_sample": "brussels-park-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1623.1790568355136,
+ "left_sample": "laeken-mixed-train",
+ "left_split": "train",
+ "right_sample": "brussels-canal-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1623.2684811114318,
+ "left_sample": "molenbeek-val",
+ "left_split": "val",
+ "right_sample": "brussels-canal-cal",
+ "right_split": "calibration"
+ },
+ {
+ "distance_m": 1623.6121947442375,
+ "left_sample": "saint-gilles-cal",
+ "left_split": "calibration",
+ "right_sample": "brussels-rail-test",
+ "right_split": "test"
+ },
+ {
+ "distance_m": 1763.0906334393485,
+ "left_sample": "brussels-center-train",
+ "left_split": "train",
+ "right_sample": "molenbeek-val",
+ "right_split": "val"
+ }
+ ],
+ "cross_split_pair_count": 4833,
+ "crs": "EPSG:31370",
+ "minimum_distance_m": 95.72033647650719,
+ "pairs_below_2000_m": 24,
+ "pairs_below_64_m": 0
+ }
+ }
+ },
+ "v58": {
+ "calibration": {
+ "claim_boundary": "This is calibration-split, tile-level bbox evidence; it is not a protected-test, unique-building or national release result.",
+ "inference_imgsz": 640,
+ "match_iou": 0.5,
+ "model": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
+ "modified_at": "2026-07-30T02:24:34.422968+02:00",
+ "path": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/preview-epoch-015/calibration.json",
+ "sha256": "60538573a734d91107e25fb2a8a640ce45d90c482acfb65ed7110ff884f2f4c7",
+ "size_bytes": 44731,
+ "split": "val",
+ "summary": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/calibration/yolo_tile_dataset_summary.json",
+ "sweep_count": 13,
+ "threshold_0_02": {
+ "aggregate": {
+ "f1": 0.24066744276290258,
+ "false_negative": 1704,
+ "false_positive": 17864,
+ "precision": 0.14791318864774625,
+ "recall": 0.6453694068678459,
+ "true_positive": 3101
+ },
+ "pure_empty_false_positives": 0,
+ "regions": {
+ "brussels": {
+ "f1": 0.42032204330927264,
+ "false_negative": 332,
+ "false_positive": 3844,
+ "precision": 0.2825681224337439,
+ "recall": 0.8201516793066089,
+ "true_positive": 1514
+ },
+ "flanders": {
+ "f1": 0.08040201005025126,
+ "false_negative": 902,
+ "false_positive": 1477,
+ "precision": 0.06578115117014548,
+ "recall": 0.10337972166998012,
+ "true_positive": 104
+ },
+ "wallonia": {
+ "f1": 0.18561862444458352,
+ "false_negative": 470,
+ "false_positive": 12543,
+ "precision": 0.10573221160701554,
+ "recall": 0.7593445980542755,
+ "true_positive": 1483
+ }
+ },
+ "threshold": 0.02
+ },
+ "threshold_0_15": {
+ "aggregate": {
+ "f1": 0.512905360688286,
+ "false_negative": 2480,
+ "false_positive": 1936,
+ "precision": 0.5456465618399436,
+ "recall": 0.4838709677419355,
+ "true_positive": 2325
+ },
+ "pure_empty_false_positives": 0,
+ "regions": {
+ "brussels": {
+ "f1": 0.6944444444444445,
+ "false_negative": 496,
+ "false_positive": 692,
+ "precision": 0.6611165523996082,
+ "recall": 0.7313109425785482,
+ "true_positive": 1350
+ },
+ "flanders": {
+ "f1": 0.0,
+ "false_negative": 1006,
+ "false_positive": 0,
+ "precision": 1.0,
+ "recall": 0.0,
+ "true_positive": 0
+ },
+ "wallonia": {
+ "f1": 0.4674017257909875,
+ "false_negative": 978,
+ "false_positive": 1244,
+ "precision": 0.4393871113114015,
+ "recall": 0.49923195084485406,
+ "true_positive": 975
+ }
+ },
+ "threshold": 0.15
+ },
+ "tile_count": 144
+ }
+ },
+ "v62": {
+ "calibration": {
+ "claim_boundary": "This is calibration-split, tile-level bbox evidence; it is not a protected-test, unique-building or national release result.",
+ "inference_imgsz": 640,
+ "match_iou": 0.5,
+ "model": "/app/storage/training/building-be-v58-v56-clean-pretrained-r1/runs/national/weights/best.pt",
+ "modified_at": "2026-07-30T02:48:19.325477+02:00",
+ "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/preview-epoch-006/calibration-routed.json",
+ "sha256": "05d8c8f0ade55907e37668758ac225aeff60cbb45604de662944fa447f6d590f",
+ "size_bytes": 45013,
+ "split": "val",
+ "summary": "/app/storage/operator-data/building-be-v56-hard-negative-rotated-holdouts-r1/calibration/yolo_tile_dataset_summary.json",
+ "sweep_count": 13,
+ "threshold_0_02": {
+ "aggregate": {
+ "f1": 0.20828296965455817,
+ "false_negative": 1531,
+ "false_positive": 23359,
+ "precision": 0.1229301993767131,
+ "recall": 0.6813735691987512,
+ "true_positive": 3274
+ },
+ "pure_empty_false_positives": 0,
+ "regions": {
+ "brussels": {
+ "f1": 0.42032204330927264,
+ "false_negative": 332,
+ "false_positive": 3844,
+ "precision": 0.2825681224337439,
+ "recall": 0.8201516793066089,
+ "true_positive": 1514
+ },
+ "flanders": {
+ "f1": 0.06711084191399151,
+ "false_negative": 729,
+ "false_positive": 6972,
+ "precision": 0.03821216719547524,
+ "recall": 0.2753479125248509,
+ "true_positive": 277
+ },
+ "wallonia": {
+ "f1": 0.18561862444458352,
+ "false_negative": 470,
+ "false_positive": 12543,
+ "precision": 0.10573221160701554,
+ "recall": 0.7593445980542755,
+ "true_positive": 1483
+ }
+ },
+ "threshold": 0.02
+ },
+ "threshold_0_15": {
+ "aggregate": {
+ "f1": 0.512905360688286,
+ "false_negative": 2480,
+ "false_positive": 1936,
+ "precision": 0.5456465618399436,
+ "recall": 0.4838709677419355,
+ "true_positive": 2325
+ },
+ "pure_empty_false_positives": 0,
+ "regions": {
+ "brussels": {
+ "f1": 0.6944444444444445,
+ "false_negative": 496,
+ "false_positive": 692,
+ "precision": 0.6611165523996082,
+ "recall": 0.7313109425785482,
+ "true_positive": 1350
+ },
+ "flanders": {
+ "f1": 0.0,
+ "false_negative": 1006,
+ "false_positive": 0,
+ "precision": 1.0,
+ "recall": 0.0,
+ "true_positive": 0
+ },
+ "wallonia": {
+ "f1": 0.4674017257909875,
+ "false_negative": 978,
+ "false_positive": 1244,
+ "precision": 0.4393871113114015,
+ "recall": 0.49923195084485406,
+ "true_positive": 975
+ }
+ },
+ "threshold": 0.15
+ },
+ "tile_count": 144
+ }
+ },
+ "v66": {
+ "manifest": {
+ "background_test_samples": [],
+ "context_counts": {
+ "detached-lowrise": 2,
+ "rural-lowrise": 1
+ },
+ "cross_split_raster_dataset_id_duplicate_count": 0,
+ "dataset_version": "building-be-v66-lowrise-temporal-r1",
+ "exact_cross_split_raster_hash_duplicate_count": 0,
+ "immutable": true,
+ "modified_at": "2026-07-30T04:32:11.684242+02:00",
+ "path": "/app/storage/operator-data/building-be-v66-lowrise-temporal-r1/operator_samples_manifest.json",
+ "perceptual_duplicate_screen": {
+ "algorithm": "64-bit difference hash over 9x8 grayscale resize",
+ "claim_boundary": "This bounded perceptual screen is not semantic, instance-level or flight-strip deduplication and cannot establish split independence.",
+ "cross_split_pair_count": 0,
+ "failures": [],
+ "minimum_hamming_distance": null,
+ "pairs_at_or_below_4": [],
+ "screened_raster_count": 3
+ },
+ "pure_empty_background_by_region": {},
+ "pure_empty_background_count": 0,
+ "region_split_counts": {
+ "flanders/train": 3
+ },
+ "sample_count": 3,
+ "sample_role_counts": {
+ "positive": 3
+ },
+ "schema_version": 1,
+ "sha256": "d861da48aca40121e158e6ab243a6ccbe53e14d500a186af64b620f612935b07",
+ "size_bytes": 3678,
+ "spatial_independence": {
+ "available": true,
+ "claim_boundary": "AOI bounding-box distance is a screening check only; it does not prove municipality, flight-strip, building-instance or imagery independence.",
+ "closest_pairs": [],
+ "cross_split_pair_count": 0,
+ "crs": "EPSG:31370",
+ "minimum_distance_m": null,
+ "pairs_below_2000_m": 0,
+ "pairs_below_64_m": 0
+ }
+ }
+ }
+}
diff --git a/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json b/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json
index 6ef7b408..d3d5f206 100644
--- a/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json
+++ b/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json
@@ -1,503 +1,503 @@
-{
- "active_model": {
- "classes": "building",
- "configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
- "device": "cuda:0",
- "exists": true,
- "model_id": "yolo-configured",
- "model_version": "",
- "require_cuda": "true",
- "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
- "size_bytes": 22516074,
- "validated_area_names": "Mol,Kempen",
- "validation_scope_enforced": "true"
- },
- "database": {
- "analysis_statuses": [
- {
- "count": 2,
- "status": "failed"
- },
- {
- "count": 1144,
- "status": "success"
- }
- ],
- "confidence_integrity": [
- {
- "detections_outside_unit_interval": 0,
- "segmentations_outside_unit_interval": 0
- }
- ],
- "dataset_lineage_gaps": [
- {
- "missing_checksum": 0,
- "missing_crs": 0,
- "missing_imported_at": 0,
- "missing_observed_at": 2377,
- "missing_provenance_metadata": 0,
- "missing_source_metadata": 0,
- "missing_source_version": 1761,
- "total": 3377
- }
- ],
- "dataset_statuses": [
- {
- "count": 3377,
- "status": "ready"
- }
- ],
- "dataset_version_gaps": [
- {
- "missing_checksum": 0,
- "missing_provenance_metadata": 0,
- "missing_source_metadata": 0,
- "missing_storage_path": 0,
- "total": 1671
- }
- ],
- "geometry_integrity": {
- "areas": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 387,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "detections": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 4,
- "populated": 299233,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "segmentations": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 0,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "vector_features": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 6689447,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- }
- },
- "job_statuses": [
- {
- "count": 135,
- "status": "failed"
- },
- {
- "count": 4325,
- "status": "success"
- }
- ],
- "metric_nulls": [
- {
- "metric_key": "f1",
- "null_values": 58,
- "total": 697
- },
- {
- "metric_key": "false_negative_count",
- "null_values": 0,
- "total": 697
- },
- {
- "metric_key": "false_positive_count",
- "null_values": 0,
- "total": 697
- },
- {
- "metric_key": "mean_iou",
- "null_values": 90,
- "total": 697
- },
- {
- "metric_key": "precision",
- "null_values": 58,
- "total": 697
- },
- {
- "metric_key": "recall",
- "null_values": 1,
- "total": 697
- }
- ],
- "migration_heads": [
- "202607260001"
- ],
- "model_run_summary": [
- {
- "analysis_type": "detection",
- "count": 1144,
- "model_name": "yolo-configured",
- "model_version": "",
- "status": "success"
- },
- {
- "analysis_type": "detection",
- "count": 2,
- "model_name": "yolo-configured",
- "model_version": "",
- "status": "failed"
- }
- ],
- "outside_domain_detection_records": [
- {
- "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
- "analysis_status": "success",
- "analysis_type": "detection",
- "bbox_json": {
- "x_max": 376.3067321777344,
- "x_min": 256.26025390625,
- "y_max": 273.9410705566406,
- "y_min": 157.967041015625
- },
- "class_name": "building",
- "confidence": 0.6873681545257568,
- "created_at": "2026-07-06 23:58:50.968501+00:00",
- "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
- "dataset_name": "geel_orthophoto_wms_512.tif",
- "dataset_source_name": "manual",
- "detection_id": "18f27c89-3793-429c-8fc4-41f8801a9c31",
- "max_x": 193645.02289232545,
- "max_y": 206054.00974654406,
- "min_x": 193527.79000338845,
- "min_y": 205940.75385832042,
- "model_name": "yolo-configured",
- "model_version": "",
- "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
- "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
- },
- {
- "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
- "analysis_status": "success",
- "analysis_type": "detection",
- "bbox_json": {
- "x_max": 353.90289306640625,
- "x_min": 252.73110961914062,
- "y_max": 352.81695556640625,
- "y_min": 319.88580322265625
- },
- "class_name": "building",
- "confidence": 0.5060421824455261,
- "created_at": "2026-07-06 23:58:50.968501+00:00",
- "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
- "dataset_name": "geel_orthophoto_wms_512.tif",
- "dataset_source_name": "manual",
- "detection_id": "2d6aed95-d8b0-488b-87dd-59b242bf2426",
- "max_x": 193623.1441431933,
- "max_y": 205895.88595532626,
- "min_x": 193524.34357342057,
- "min_y": 205863.72662686557,
- "model_name": "yolo-configured",
- "model_version": "",
- "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
- "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
- },
- {
- "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
- "analysis_status": "success",
- "analysis_type": "detection",
- "bbox_json": {
- "x_max": 508.56524658203125,
- "x_min": 330.76678466796875,
- "y_max": 511.4638671875,
- "y_min": 380.63653564453125
- },
- "class_name": "building",
- "confidence": 0.581618070602417,
- "created_at": "2026-07-06 23:58:50.968501+00:00",
- "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
- "dataset_name": "geel_orthophoto_wms_512.tif",
- "dataset_source_name": "manual",
- "detection_id": "6e9eadb8-a3c5-4f12-b5ef-d00c00571428",
- "max_x": 193774.1815977984,
- "max_y": 205836.55906819552,
- "min_x": 193600.55028733544,
- "min_y": 205708.7980022356,
- "model_name": "yolo-configured",
- "model_version": "",
- "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
- "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
- },
- {
- "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
- "analysis_status": "success",
- "analysis_type": "detection",
- "bbox_json": {
- "x_max": 54.1800422668457,
- "x_min": 0.481353759765625,
- "y_max": 511.86688232421875,
- "y_min": 456.6719665527344
- },
- "class_name": "building",
- "confidence": 0.5783078670501709,
- "created_at": "2026-07-06 23:58:50.968501+00:00",
- "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
- "dataset_name": "geel_orthophoto_wms_512.tif",
- "dataset_source_name": "manual",
- "detection_id": "bec4f3af-5ca2-4a38-a547-21aeb19a70fd",
- "max_x": 193330.44604670934,
- "max_y": 205762.30571769923,
- "min_x": 193278.00592121415,
- "min_y": 205708.40443276614,
- "model_name": "yolo-configured",
- "model_version": "",
- "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
- "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
- }
- ],
- "postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)",
- "source_summary": [
- {
- "count": 1751,
- "reference_count": 660,
- "source_name": "manual",
- "status": "ready"
- },
- {
- "count": 339,
- "reference_count": 0,
- "source_name": "vmm_flood_hazard",
- "status": "ready"
- },
- {
- "count": 273,
- "reference_count": 273,
- "source_name": "vmm_vha_bathymetry_profiles",
- "status": "ready"
- },
- {
- "count": 210,
- "reference_count": 0,
- "source_name": "department_omgeving_thematic_raster",
- "status": "ready"
- },
- {
- "count": 179,
- "reference_count": 179,
- "source_name": "grb",
- "status": "ready"
- },
- {
- "count": 168,
- "reference_count": 0,
- "source_name": "digitaal_vlaanderen_orthophoto",
- "status": "ready"
- },
- {
- "count": 107,
- "reference_count": 0,
- "source_name": "spw_orthophoto",
- "status": "ready"
- },
- {
- "count": 68,
- "reference_count": 68,
- "source_name": "spw_picc",
- "status": "ready"
- },
- {
- "count": 60,
- "reference_count": 0,
- "source_name": "digitaal_vlaanderen_dhmv",
- "status": "ready"
- },
- {
- "count": 36,
- "reference_count": 36,
- "source_name": "urbis",
- "status": "ready"
- },
- {
- "count": 26,
- "reference_count": 0,
- "source_name": "urbis_orthophoto",
- "status": "ready"
- },
- {
- "count": 26,
- "reference_count": 26,
- "source_name": "waterinfo",
- "status": "ready"
- },
- {
- "count": 25,
- "reference_count": 25,
- "source_name": "department_omgeving_land_use",
- "status": "ready"
- },
- {
- "count": 21,
- "reference_count": 21,
- "source_name": "historical_landuse",
- "status": "ready"
- },
- {
- "count": 18,
- "reference_count": 18,
- "source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels",
- "status": "ready"
- },
- {
- "count": 15,
- "reference_count": 15,
- "source_name": "statbel",
- "status": "ready"
- },
- {
- "count": 13,
- "reference_count": 13,
- "source_name": "dov_soil_map",
- "status": "ready"
- },
- {
- "count": 12,
- "reference_count": 12,
- "source_name": "inbo_bwk_natura2000",
- "status": "ready"
- },
- {
- "count": 7,
- "reference_count": 0,
- "source_name": "spw_walous_land_cover",
- "status": "ready"
- },
- {
- "count": 6,
- "reference_count": 0,
- "source_name": "vrbg",
- "status": "ready"
- },
- {
- "count": 5,
- "reference_count": 1,
- "source_name": "fixture",
- "status": "ready"
- },
- {
- "count": 4,
- "reference_count": 4,
- "source_name": "ngi_adminvector",
- "status": "ready"
- },
- {
- "count": 3,
- "reference_count": 0,
- "source_name": "map_selection",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "digitaal_vlaanderen_buildings_addresses_register",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "rbins_marine_reporting_units",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "rbins_msp_2026",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 0,
- "source_name": "spw_bathymetry",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 0,
- "source_name": "spw_terrain",
- "status": "ready"
- }
- ],
- "table_counts": {
- "analysis_runs": 1146,
- "aoi_operation_partitions": 61,
- "aoi_operations": 4,
- "areas": 387,
- "dataset_versions": 1671,
- "datasets": 3377,
- "detection_reviews": 0,
- "detections": 299233,
- "exports": 768,
- "jobs": 4460,
- "metrics": 4182,
- "projects": 1097,
- "quality_checks": 697,
- "segmentations": 0,
- "vector_features": 6689447
- },
- "version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit"
- },
- "generated_at": "2026-08-01T16:06:01.768127+00:00",
- "mode": "read_only",
- "runtime": {
- "cuda": {
- "available": true,
- "device_count": 1,
- "device_names": [
- "NVIDIA GeForce RTX 4080 SUPER"
- ],
- "runtime_version": "12.8"
- },
- "packages": {
- "fastapi": "0.139.2",
- "geoalchemy2": "0.20.0",
- "geointel-backend": "0.1.0",
- "geopandas": "1.1.4",
- "pyproj": "3.7.2",
- "rasterio": "1.4.4",
- "shapely": "2.1.2",
- "sqlalchemy": "2.0.51",
- "torch": "2.11.0+cu128",
- "torchvision": "0.26.0+cu128",
- "ultralytics": "8.4.99"
- },
- "platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36",
- "python": "3.11.2"
- },
- "schema_version": 1,
- "statement_timeout_ms": 30000,
- "storage_references": {
- "checked_count": 5816,
- "missing_count": 0,
- "missing_records": [],
- "records_truncated": false,
- "scope": "direct datasets, dataset_versions and exports storage_path columns"
- },
- "storage_root": "/app/storage"
-}
+{
+ "active_model": {
+ "classes": "building",
+ "configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
+ "device": "cuda:0",
+ "exists": true,
+ "model_id": "yolo-configured",
+ "model_version": "",
+ "require_cuda": "true",
+ "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
+ "size_bytes": 22516074,
+ "validated_area_names": "Mol,Kempen",
+ "validation_scope_enforced": "true"
+ },
+ "database": {
+ "analysis_statuses": [
+ {
+ "count": 2,
+ "status": "failed"
+ },
+ {
+ "count": 1144,
+ "status": "success"
+ }
+ ],
+ "confidence_integrity": [
+ {
+ "detections_outside_unit_interval": 0,
+ "segmentations_outside_unit_interval": 0
+ }
+ ],
+ "dataset_lineage_gaps": [
+ {
+ "missing_checksum": 0,
+ "missing_crs": 0,
+ "missing_imported_at": 0,
+ "missing_observed_at": 2377,
+ "missing_provenance_metadata": 0,
+ "missing_source_metadata": 0,
+ "missing_source_version": 1761,
+ "total": 3377
+ }
+ ],
+ "dataset_statuses": [
+ {
+ "count": 3377,
+ "status": "ready"
+ }
+ ],
+ "dataset_version_gaps": [
+ {
+ "missing_checksum": 0,
+ "missing_provenance_metadata": 0,
+ "missing_source_metadata": 0,
+ "missing_storage_path": 0,
+ "total": 1671
+ }
+ ],
+ "geometry_integrity": {
+ "areas": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 387,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "detections": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 4,
+ "populated": 299233,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "segmentations": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 0,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "vector_features": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 6689447,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ }
+ },
+ "job_statuses": [
+ {
+ "count": 135,
+ "status": "failed"
+ },
+ {
+ "count": 4325,
+ "status": "success"
+ }
+ ],
+ "metric_nulls": [
+ {
+ "metric_key": "f1",
+ "null_values": 58,
+ "total": 697
+ },
+ {
+ "metric_key": "false_negative_count",
+ "null_values": 0,
+ "total": 697
+ },
+ {
+ "metric_key": "false_positive_count",
+ "null_values": 0,
+ "total": 697
+ },
+ {
+ "metric_key": "mean_iou",
+ "null_values": 90,
+ "total": 697
+ },
+ {
+ "metric_key": "precision",
+ "null_values": 58,
+ "total": 697
+ },
+ {
+ "metric_key": "recall",
+ "null_values": 1,
+ "total": 697
+ }
+ ],
+ "migration_heads": [
+ "202607260001"
+ ],
+ "model_run_summary": [
+ {
+ "analysis_type": "detection",
+ "count": 1144,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "status": "success"
+ },
+ {
+ "analysis_type": "detection",
+ "count": 2,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "status": "failed"
+ }
+ ],
+ "outside_domain_detection_records": [
+ {
+ "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
+ "analysis_status": "success",
+ "analysis_type": "detection",
+ "bbox_json": {
+ "x_max": 376.3067321777344,
+ "x_min": 256.26025390625,
+ "y_max": 273.9410705566406,
+ "y_min": 157.967041015625
+ },
+ "class_name": "building",
+ "confidence": 0.6873681545257568,
+ "created_at": "2026-07-06 23:58:50.968501+00:00",
+ "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
+ "dataset_name": "geel_orthophoto_wms_512.tif",
+ "dataset_source_name": "manual",
+ "detection_id": "18f27c89-3793-429c-8fc4-41f8801a9c31",
+ "max_x": 193645.02289232545,
+ "max_y": 206054.00974654406,
+ "min_x": 193527.79000338845,
+ "min_y": 205940.75385832042,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
+ "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
+ },
+ {
+ "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
+ "analysis_status": "success",
+ "analysis_type": "detection",
+ "bbox_json": {
+ "x_max": 353.90289306640625,
+ "x_min": 252.73110961914062,
+ "y_max": 352.81695556640625,
+ "y_min": 319.88580322265625
+ },
+ "class_name": "building",
+ "confidence": 0.5060421824455261,
+ "created_at": "2026-07-06 23:58:50.968501+00:00",
+ "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
+ "dataset_name": "geel_orthophoto_wms_512.tif",
+ "dataset_source_name": "manual",
+ "detection_id": "2d6aed95-d8b0-488b-87dd-59b242bf2426",
+ "max_x": 193623.1441431933,
+ "max_y": 205895.88595532626,
+ "min_x": 193524.34357342057,
+ "min_y": 205863.72662686557,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
+ "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
+ },
+ {
+ "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
+ "analysis_status": "success",
+ "analysis_type": "detection",
+ "bbox_json": {
+ "x_max": 508.56524658203125,
+ "x_min": 330.76678466796875,
+ "y_max": 511.4638671875,
+ "y_min": 380.63653564453125
+ },
+ "class_name": "building",
+ "confidence": 0.581618070602417,
+ "created_at": "2026-07-06 23:58:50.968501+00:00",
+ "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
+ "dataset_name": "geel_orthophoto_wms_512.tif",
+ "dataset_source_name": "manual",
+ "detection_id": "6e9eadb8-a3c5-4f12-b5ef-d00c00571428",
+ "max_x": 193774.1815977984,
+ "max_y": 205836.55906819552,
+ "min_x": 193600.55028733544,
+ "min_y": 205708.7980022356,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
+ "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
+ },
+ {
+ "analysis_run_id": "7ba34274-411d-45e3-8f54-c37baec598b1",
+ "analysis_status": "success",
+ "analysis_type": "detection",
+ "bbox_json": {
+ "x_max": 54.1800422668457,
+ "x_min": 0.481353759765625,
+ "y_max": 511.86688232421875,
+ "y_min": 456.6719665527344
+ },
+ "class_name": "building",
+ "confidence": 0.5783078670501709,
+ "created_at": "2026-07-06 23:58:50.968501+00:00",
+ "dataset_id": "ae0ff76d-70c0-404f-b777-54d14517179a",
+ "dataset_name": "geel_orthophoto_wms_512.tif",
+ "dataset_source_name": "manual",
+ "detection_id": "bec4f3af-5ca2-4a38-a547-21aeb19a70fd",
+ "max_x": 193330.44604670934,
+ "max_y": 205762.30571769923,
+ "min_x": 193278.00592121415,
+ "min_y": 205708.40443276614,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "project_name": "GeoIntel Real Data Validation 20260706T235847Z",
+ "source_tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif"
+ }
+ ],
+ "postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)",
+ "source_summary": [
+ {
+ "count": 1751,
+ "reference_count": 660,
+ "source_name": "manual",
+ "status": "ready"
+ },
+ {
+ "count": 339,
+ "reference_count": 0,
+ "source_name": "vmm_flood_hazard",
+ "status": "ready"
+ },
+ {
+ "count": 273,
+ "reference_count": 273,
+ "source_name": "vmm_vha_bathymetry_profiles",
+ "status": "ready"
+ },
+ {
+ "count": 210,
+ "reference_count": 0,
+ "source_name": "department_omgeving_thematic_raster",
+ "status": "ready"
+ },
+ {
+ "count": 179,
+ "reference_count": 179,
+ "source_name": "grb",
+ "status": "ready"
+ },
+ {
+ "count": 168,
+ "reference_count": 0,
+ "source_name": "digitaal_vlaanderen_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 107,
+ "reference_count": 0,
+ "source_name": "spw_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 68,
+ "reference_count": 68,
+ "source_name": "spw_picc",
+ "status": "ready"
+ },
+ {
+ "count": 60,
+ "reference_count": 0,
+ "source_name": "digitaal_vlaanderen_dhmv",
+ "status": "ready"
+ },
+ {
+ "count": 36,
+ "reference_count": 36,
+ "source_name": "urbis",
+ "status": "ready"
+ },
+ {
+ "count": 26,
+ "reference_count": 0,
+ "source_name": "urbis_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 26,
+ "reference_count": 26,
+ "source_name": "waterinfo",
+ "status": "ready"
+ },
+ {
+ "count": 25,
+ "reference_count": 25,
+ "source_name": "department_omgeving_land_use",
+ "status": "ready"
+ },
+ {
+ "count": 21,
+ "reference_count": 21,
+ "source_name": "historical_landuse",
+ "status": "ready"
+ },
+ {
+ "count": 18,
+ "reference_count": 18,
+ "source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels",
+ "status": "ready"
+ },
+ {
+ "count": 15,
+ "reference_count": 15,
+ "source_name": "statbel",
+ "status": "ready"
+ },
+ {
+ "count": 13,
+ "reference_count": 13,
+ "source_name": "dov_soil_map",
+ "status": "ready"
+ },
+ {
+ "count": 12,
+ "reference_count": 12,
+ "source_name": "inbo_bwk_natura2000",
+ "status": "ready"
+ },
+ {
+ "count": 7,
+ "reference_count": 0,
+ "source_name": "spw_walous_land_cover",
+ "status": "ready"
+ },
+ {
+ "count": 6,
+ "reference_count": 0,
+ "source_name": "vrbg",
+ "status": "ready"
+ },
+ {
+ "count": 5,
+ "reference_count": 1,
+ "source_name": "fixture",
+ "status": "ready"
+ },
+ {
+ "count": 4,
+ "reference_count": 4,
+ "source_name": "ngi_adminvector",
+ "status": "ready"
+ },
+ {
+ "count": 3,
+ "reference_count": 0,
+ "source_name": "map_selection",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "digitaal_vlaanderen_buildings_addresses_register",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "rbins_marine_reporting_units",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "rbins_msp_2026",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 0,
+ "source_name": "spw_bathymetry",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 0,
+ "source_name": "spw_terrain",
+ "status": "ready"
+ }
+ ],
+ "table_counts": {
+ "analysis_runs": 1146,
+ "aoi_operation_partitions": 61,
+ "aoi_operations": 4,
+ "areas": 387,
+ "dataset_versions": 1671,
+ "datasets": 3377,
+ "detection_reviews": 0,
+ "detections": 299233,
+ "exports": 768,
+ "jobs": 4460,
+ "metrics": 4182,
+ "projects": 1097,
+ "quality_checks": 697,
+ "segmentations": 0,
+ "vector_features": 6689447
+ },
+ "version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit"
+ },
+ "generated_at": "2026-08-01T16:06:01.768127+00:00",
+ "mode": "read_only",
+ "runtime": {
+ "cuda": {
+ "available": true,
+ "device_count": 1,
+ "device_names": [
+ "NVIDIA GeForce RTX 4080 SUPER"
+ ],
+ "runtime_version": "12.8"
+ },
+ "packages": {
+ "fastapi": "0.139.2",
+ "geoalchemy2": "0.20.0",
+ "geointel-backend": "0.1.0",
+ "geopandas": "1.1.4",
+ "pyproj": "3.7.2",
+ "rasterio": "1.4.4",
+ "shapely": "2.1.2",
+ "sqlalchemy": "2.0.51",
+ "torch": "2.11.0+cu128",
+ "torchvision": "0.26.0+cu128",
+ "ultralytics": "8.4.99"
+ },
+ "platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36",
+ "python": "3.11.2"
+ },
+ "schema_version": 1,
+ "statement_timeout_ms": 30000,
+ "storage_references": {
+ "checked_count": 5816,
+ "missing_count": 0,
+ "missing_records": [],
+ "records_truncated": false,
+ "scope": "direct datasets, dataset_versions and exports storage_path columns"
+ },
+ "storage_root": "/app/storage"
+}
diff --git a/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json b/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json
index 268789a8..835b2158 100644
--- a/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json
+++ b/artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json
@@ -1,397 +1,397 @@
-{
- "active_model": {
- "classes": "building",
- "configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
- "device": "cuda:0",
- "exists": true,
- "model_id": "yolo-configured",
- "model_version": "",
- "require_cuda": "true",
- "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
- "size_bytes": 22516074,
- "validated_area_names": "Mol,Kempen",
- "validation_scope_enforced": "true"
- },
- "database": {
- "analysis_statuses": [
- {
- "count": 2,
- "status": "failed"
- },
- {
- "count": 1144,
- "status": "success"
- }
- ],
- "confidence_integrity": [
- {
- "detections_outside_unit_interval": 0,
- "segmentations_outside_unit_interval": 0
- }
- ],
- "dataset_lineage_gaps": [
- {
- "missing_checksum": 0,
- "missing_crs": 0,
- "missing_imported_at": 0,
- "missing_observed_at": 2377,
- "missing_provenance_metadata": 0,
- "missing_source_metadata": 0,
- "missing_source_version": 1761,
- "total": 3377
- }
- ],
- "dataset_statuses": [
- {
- "count": 3377,
- "status": "ready"
- }
- ],
- "dataset_version_gaps": [
- {
- "missing_checksum": 0,
- "missing_provenance_metadata": 0,
- "missing_source_metadata": 0,
- "missing_storage_path": 0,
- "total": 1671
- }
- ],
- "geometry_integrity": {
- "areas": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 387,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "detections": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 4,
- "populated": 299233,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "segmentations": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 0,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- },
- "vector_features": {
- "rows": [
- {
- "empty": 0,
- "invalid": 0,
- "outside_epsg4326_domain": 0,
- "populated": 6689447,
- "wrong_srid": 0
- }
- ],
- "status": "ok"
- }
- },
- "job_statuses": [
- {
- "count": 135,
- "status": "failed"
- },
- {
- "count": 4325,
- "status": "success"
- }
- ],
- "metric_nulls": [
- {
- "metric_key": "f1",
- "null_values": 58,
- "total": 697
- },
- {
- "metric_key": "false_negative_count",
- "null_values": 0,
- "total": 697
- },
- {
- "metric_key": "false_positive_count",
- "null_values": 0,
- "total": 697
- },
- {
- "metric_key": "mean_iou",
- "null_values": 90,
- "total": 697
- },
- {
- "metric_key": "precision",
- "null_values": 58,
- "total": 697
- },
- {
- "metric_key": "recall",
- "null_values": 1,
- "total": 697
- }
- ],
- "migration_heads": [
- "202607260001"
- ],
- "model_run_summary": [
- {
- "analysis_type": "detection",
- "count": 1144,
- "model_name": "yolo-configured",
- "model_version": "",
- "status": "success"
- },
- {
- "analysis_type": "detection",
- "count": 2,
- "model_name": "yolo-configured",
- "model_version": "",
- "status": "failed"
- }
- ],
- "postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)",
- "source_summary": [
- {
- "count": 1751,
- "reference_count": 660,
- "source_name": "manual",
- "status": "ready"
- },
- {
- "count": 339,
- "reference_count": 0,
- "source_name": "vmm_flood_hazard",
- "status": "ready"
- },
- {
- "count": 273,
- "reference_count": 273,
- "source_name": "vmm_vha_bathymetry_profiles",
- "status": "ready"
- },
- {
- "count": 210,
- "reference_count": 0,
- "source_name": "department_omgeving_thematic_raster",
- "status": "ready"
- },
- {
- "count": 179,
- "reference_count": 179,
- "source_name": "grb",
- "status": "ready"
- },
- {
- "count": 168,
- "reference_count": 0,
- "source_name": "digitaal_vlaanderen_orthophoto",
- "status": "ready"
- },
- {
- "count": 107,
- "reference_count": 0,
- "source_name": "spw_orthophoto",
- "status": "ready"
- },
- {
- "count": 68,
- "reference_count": 68,
- "source_name": "spw_picc",
- "status": "ready"
- },
- {
- "count": 60,
- "reference_count": 0,
- "source_name": "digitaal_vlaanderen_dhmv",
- "status": "ready"
- },
- {
- "count": 36,
- "reference_count": 36,
- "source_name": "urbis",
- "status": "ready"
- },
- {
- "count": 26,
- "reference_count": 0,
- "source_name": "urbis_orthophoto",
- "status": "ready"
- },
- {
- "count": 26,
- "reference_count": 26,
- "source_name": "waterinfo",
- "status": "ready"
- },
- {
- "count": 25,
- "reference_count": 25,
- "source_name": "department_omgeving_land_use",
- "status": "ready"
- },
- {
- "count": 21,
- "reference_count": 21,
- "source_name": "historical_landuse",
- "status": "ready"
- },
- {
- "count": 18,
- "reference_count": 18,
- "source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels",
- "status": "ready"
- },
- {
- "count": 15,
- "reference_count": 15,
- "source_name": "statbel",
- "status": "ready"
- },
- {
- "count": 13,
- "reference_count": 13,
- "source_name": "dov_soil_map",
- "status": "ready"
- },
- {
- "count": 12,
- "reference_count": 12,
- "source_name": "inbo_bwk_natura2000",
- "status": "ready"
- },
- {
- "count": 7,
- "reference_count": 0,
- "source_name": "spw_walous_land_cover",
- "status": "ready"
- },
- {
- "count": 6,
- "reference_count": 0,
- "source_name": "vrbg",
- "status": "ready"
- },
- {
- "count": 5,
- "reference_count": 1,
- "source_name": "fixture",
- "status": "ready"
- },
- {
- "count": 4,
- "reference_count": 4,
- "source_name": "ngi_adminvector",
- "status": "ready"
- },
- {
- "count": 3,
- "reference_count": 0,
- "source_name": "map_selection",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "digitaal_vlaanderen_buildings_addresses_register",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "rbins_marine_reporting_units",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 1,
- "source_name": "rbins_msp_2026",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 0,
- "source_name": "spw_bathymetry",
- "status": "ready"
- },
- {
- "count": 1,
- "reference_count": 0,
- "source_name": "spw_terrain",
- "status": "ready"
- }
- ],
- "table_counts": {
- "analysis_runs": 1146,
- "aoi_operation_partitions": 61,
- "aoi_operations": 4,
- "areas": 387,
- "dataset_versions": 1671,
- "datasets": 3377,
- "detection_reviews": 0,
- "detections": 299233,
- "exports": 768,
- "jobs": 4460,
- "metrics": 4182,
- "projects": 1097,
- "quality_checks": 697,
- "segmentations": 0,
- "vector_features": 6689447
- },
- "version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit"
- },
- "generated_at": "2026-08-01T16:03:11.003029+00:00",
- "mode": "read_only",
- "runtime": {
- "cuda": {
- "available": true,
- "device_count": 1,
- "device_names": [
- "NVIDIA GeForce RTX 4080 SUPER"
- ],
- "runtime_version": "12.8"
- },
- "packages": {
- "fastapi": "0.139.2",
- "geoalchemy2": "0.20.0",
- "geointel-backend": "0.1.0",
- "geopandas": "1.1.4",
- "pyproj": "3.7.2",
- "rasterio": "1.4.4",
- "shapely": "2.1.2",
- "sqlalchemy": "2.0.51",
- "torch": "2.11.0+cu128",
- "torchvision": "0.26.0+cu128",
- "ultralytics": "8.4.99"
- },
- "platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36",
- "python": "3.11.2"
- },
- "schema_version": 1,
- "statement_timeout_ms": 30000,
- "storage_references": {
- "checked_count": 5816,
- "missing_count": 0,
- "missing_records": [],
- "records_truncated": false,
- "scope": "direct datasets, dataset_versions and exports storage_path columns"
- },
- "storage_root": "/app/storage"
-}
+{
+ "active_model": {
+ "classes": "building",
+ "configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
+ "device": "cuda:0",
+ "exists": true,
+ "model_id": "yolo-configured",
+ "model_version": "",
+ "require_cuda": "true",
+ "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
+ "size_bytes": 22516074,
+ "validated_area_names": "Mol,Kempen",
+ "validation_scope_enforced": "true"
+ },
+ "database": {
+ "analysis_statuses": [
+ {
+ "count": 2,
+ "status": "failed"
+ },
+ {
+ "count": 1144,
+ "status": "success"
+ }
+ ],
+ "confidence_integrity": [
+ {
+ "detections_outside_unit_interval": 0,
+ "segmentations_outside_unit_interval": 0
+ }
+ ],
+ "dataset_lineage_gaps": [
+ {
+ "missing_checksum": 0,
+ "missing_crs": 0,
+ "missing_imported_at": 0,
+ "missing_observed_at": 2377,
+ "missing_provenance_metadata": 0,
+ "missing_source_metadata": 0,
+ "missing_source_version": 1761,
+ "total": 3377
+ }
+ ],
+ "dataset_statuses": [
+ {
+ "count": 3377,
+ "status": "ready"
+ }
+ ],
+ "dataset_version_gaps": [
+ {
+ "missing_checksum": 0,
+ "missing_provenance_metadata": 0,
+ "missing_source_metadata": 0,
+ "missing_storage_path": 0,
+ "total": 1671
+ }
+ ],
+ "geometry_integrity": {
+ "areas": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 387,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "detections": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 4,
+ "populated": 299233,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "segmentations": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 0,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ },
+ "vector_features": {
+ "rows": [
+ {
+ "empty": 0,
+ "invalid": 0,
+ "outside_epsg4326_domain": 0,
+ "populated": 6689447,
+ "wrong_srid": 0
+ }
+ ],
+ "status": "ok"
+ }
+ },
+ "job_statuses": [
+ {
+ "count": 135,
+ "status": "failed"
+ },
+ {
+ "count": 4325,
+ "status": "success"
+ }
+ ],
+ "metric_nulls": [
+ {
+ "metric_key": "f1",
+ "null_values": 58,
+ "total": 697
+ },
+ {
+ "metric_key": "false_negative_count",
+ "null_values": 0,
+ "total": 697
+ },
+ {
+ "metric_key": "false_positive_count",
+ "null_values": 0,
+ "total": 697
+ },
+ {
+ "metric_key": "mean_iou",
+ "null_values": 90,
+ "total": 697
+ },
+ {
+ "metric_key": "precision",
+ "null_values": 58,
+ "total": 697
+ },
+ {
+ "metric_key": "recall",
+ "null_values": 1,
+ "total": 697
+ }
+ ],
+ "migration_heads": [
+ "202607260001"
+ ],
+ "model_run_summary": [
+ {
+ "analysis_type": "detection",
+ "count": 1144,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "status": "success"
+ },
+ {
+ "analysis_type": "detection",
+ "count": 2,
+ "model_name": "yolo-configured",
+ "model_version": "",
+ "status": "failed"
+ }
+ ],
+ "postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)",
+ "source_summary": [
+ {
+ "count": 1751,
+ "reference_count": 660,
+ "source_name": "manual",
+ "status": "ready"
+ },
+ {
+ "count": 339,
+ "reference_count": 0,
+ "source_name": "vmm_flood_hazard",
+ "status": "ready"
+ },
+ {
+ "count": 273,
+ "reference_count": 273,
+ "source_name": "vmm_vha_bathymetry_profiles",
+ "status": "ready"
+ },
+ {
+ "count": 210,
+ "reference_count": 0,
+ "source_name": "department_omgeving_thematic_raster",
+ "status": "ready"
+ },
+ {
+ "count": 179,
+ "reference_count": 179,
+ "source_name": "grb",
+ "status": "ready"
+ },
+ {
+ "count": 168,
+ "reference_count": 0,
+ "source_name": "digitaal_vlaanderen_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 107,
+ "reference_count": 0,
+ "source_name": "spw_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 68,
+ "reference_count": 68,
+ "source_name": "spw_picc",
+ "status": "ready"
+ },
+ {
+ "count": 60,
+ "reference_count": 0,
+ "source_name": "digitaal_vlaanderen_dhmv",
+ "status": "ready"
+ },
+ {
+ "count": 36,
+ "reference_count": 36,
+ "source_name": "urbis",
+ "status": "ready"
+ },
+ {
+ "count": 26,
+ "reference_count": 0,
+ "source_name": "urbis_orthophoto",
+ "status": "ready"
+ },
+ {
+ "count": 26,
+ "reference_count": 26,
+ "source_name": "waterinfo",
+ "status": "ready"
+ },
+ {
+ "count": 25,
+ "reference_count": 25,
+ "source_name": "department_omgeving_land_use",
+ "status": "ready"
+ },
+ {
+ "count": 21,
+ "reference_count": 21,
+ "source_name": "historical_landuse",
+ "status": "ready"
+ },
+ {
+ "count": 18,
+ "reference_count": 18,
+ "source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels",
+ "status": "ready"
+ },
+ {
+ "count": 15,
+ "reference_count": 15,
+ "source_name": "statbel",
+ "status": "ready"
+ },
+ {
+ "count": 13,
+ "reference_count": 13,
+ "source_name": "dov_soil_map",
+ "status": "ready"
+ },
+ {
+ "count": 12,
+ "reference_count": 12,
+ "source_name": "inbo_bwk_natura2000",
+ "status": "ready"
+ },
+ {
+ "count": 7,
+ "reference_count": 0,
+ "source_name": "spw_walous_land_cover",
+ "status": "ready"
+ },
+ {
+ "count": 6,
+ "reference_count": 0,
+ "source_name": "vrbg",
+ "status": "ready"
+ },
+ {
+ "count": 5,
+ "reference_count": 1,
+ "source_name": "fixture",
+ "status": "ready"
+ },
+ {
+ "count": 4,
+ "reference_count": 4,
+ "source_name": "ngi_adminvector",
+ "status": "ready"
+ },
+ {
+ "count": 3,
+ "reference_count": 0,
+ "source_name": "map_selection",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "digitaal_vlaanderen_buildings_addresses_register",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "rbins_marine_reporting_units",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 1,
+ "source_name": "rbins_msp_2026",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 0,
+ "source_name": "spw_bathymetry",
+ "status": "ready"
+ },
+ {
+ "count": 1,
+ "reference_count": 0,
+ "source_name": "spw_terrain",
+ "status": "ready"
+ }
+ ],
+ "table_counts": {
+ "analysis_runs": 1146,
+ "aoi_operation_partitions": 61,
+ "aoi_operations": 4,
+ "areas": 387,
+ "dataset_versions": 1671,
+ "datasets": 3377,
+ "detection_reviews": 0,
+ "detections": 299233,
+ "exports": 768,
+ "jobs": 4460,
+ "metrics": 4182,
+ "projects": 1097,
+ "quality_checks": 697,
+ "segmentations": 0,
+ "vector_features": 6689447
+ },
+ "version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit"
+ },
+ "generated_at": "2026-08-01T16:03:11.003029+00:00",
+ "mode": "read_only",
+ "runtime": {
+ "cuda": {
+ "available": true,
+ "device_count": 1,
+ "device_names": [
+ "NVIDIA GeForce RTX 4080 SUPER"
+ ],
+ "runtime_version": "12.8"
+ },
+ "packages": {
+ "fastapi": "0.139.2",
+ "geoalchemy2": "0.20.0",
+ "geointel-backend": "0.1.0",
+ "geopandas": "1.1.4",
+ "pyproj": "3.7.2",
+ "rasterio": "1.4.4",
+ "shapely": "2.1.2",
+ "sqlalchemy": "2.0.51",
+ "torch": "2.11.0+cu128",
+ "torchvision": "0.26.0+cu128",
+ "ultralytics": "8.4.99"
+ },
+ "platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36",
+ "python": "3.11.2"
+ },
+ "schema_version": 1,
+ "statement_timeout_ms": 30000,
+ "storage_references": {
+ "checked_count": 5816,
+ "missing_count": 0,
+ "missing_records": [],
+ "records_truncated": false,
+ "scope": "direct datasets, dataset_versions and exports storage_path columns"
+ },
+ "storage_root": "/app/storage"
+}