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 GeoIntel logo\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 GeoIntel logo\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 - -vite v7.3.6 building client environment for production... -transforming... -✓ 1896 modules transformed. -rendering chunks... -computing gzip size... -dist/index.html  0.98 kB │ gzip: 0.49 kB -dist/assets/manrope-latin-500-normal-BYYD-dBL.woff2  14.04 kB -dist/assets/manrope-latin-600-normal-4f0koTD-.woff2  14.17 kB -dist/assets/manrope-latin-700-normal-BZp_XxE4.woff2  14.21 kB -dist/assets/public-sans-latin-600-normal-Fru-LXNs.woff2  14.59 kB -dist/assets/public-sans-latin-400-normal-8Rpg0ruU.woff2  14.63 kB -dist/assets/public-sans-latin-500-normal-NlrCPXnF.woff2  14.66 kB -dist/assets/manrope-latin-500-normal-DMZssgOp.woff  18.24 kB -dist/assets/manrope-latin-600-normal-BqgrALkZ.woff  18.38 kB -dist/assets/manrope-latin-700-normal-DGRFkw-m.woff  18.41 kB -dist/assets/public-sans-latin-400-normal-SBbinRkI.woff  18.49 kB -dist/assets/public-sans-latin-500-normal-vCxiVFAq.woff  18.52 kB -dist/assets/public-sans-latin-600-normal-BR59oU-I.woff  18.56 kB -dist/assets/index-BNS8Tp4f.css 426.59 kB │ gzip: 69.40 kB -dist/assets/vendor-CrqJdhs-.js 140.80 kB │ gzip: 45.27 kB -dist/assets/index-DR8RUeAl.js 457.16 kB │ gzip: 119.71 kB -dist/assets/maplibre-DEBTaTl_.js 802.71 kB │ gzip: 217.71 kB -✓ built in 9.80s +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 + +vite v7.3.6 building client environment for production... +transforming... +✓ 1896 modules transformed. +rendering chunks... +computing gzip size... +dist/index.html  0.98 kB │ gzip: 0.49 kB +dist/assets/manrope-latin-500-normal-BYYD-dBL.woff2  14.04 kB +dist/assets/manrope-latin-600-normal-4f0koTD-.woff2  14.17 kB +dist/assets/manrope-latin-700-normal-BZp_XxE4.woff2  14.21 kB +dist/assets/public-sans-latin-600-normal-Fru-LXNs.woff2  14.59 kB +dist/assets/public-sans-latin-400-normal-8Rpg0ruU.woff2  14.63 kB +dist/assets/public-sans-latin-500-normal-NlrCPXnF.woff2  14.66 kB +dist/assets/manrope-latin-500-normal-DMZssgOp.woff  18.24 kB +dist/assets/manrope-latin-600-normal-BqgrALkZ.woff  18.38 kB +dist/assets/manrope-latin-700-normal-DGRFkw-m.woff  18.41 kB +dist/assets/public-sans-latin-400-normal-SBbinRkI.woff  18.49 kB +dist/assets/public-sans-latin-500-normal-vCxiVFAq.woff  18.52 kB +dist/assets/public-sans-latin-600-normal-BR59oU-I.woff  18.56 kB +dist/assets/index-BNS8Tp4f.css 426.59 kB │ gzip: 69.40 kB +dist/assets/vendor-CrqJdhs-.js 140.80 kB │ gzip: 45.27 kB +dist/assets/index-DR8RUeAl.js 457.16 kB │ gzip: 119.71 kB +dist/assets/maplibre-DEBTaTl_.js 802.71 kB │ gzip: 217.71 kB +✓ built in 9.80s 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 - - - RUN  v3.2.6 C:/Projects/geointel/frontend - - ✓ src/lib/datasetCapabilities.test.ts (2 tests) 5ms - ✓ src/lib/performanceBudget.test.ts (3 tests) 41ms - ✓ src/components/map/mapWorkspaceUtils.test.ts (14 tests) 36ms - ✓ src/hooks/useMapThemeSelectionInsights.test.ts (2 tests) 43ms - ✓ src/hooks/useCoverageResolver.test.tsx (4 tests) 47ms - ✓ src/hooks/useTemporalComparison.test.tsx (3 tests) 36ms - ✓ src/components/WorkbenchStatusStrip.test.tsx (2 tests) 151ms - ✓ src/hooks/useWorkbenchBootstrap.test.tsx (3 tests) 60ms - ✓ src/components/map/LiveAnalysisJourney.test.tsx (3 tests) 59ms - ✓ src/components/overview/ProjectAtlasIllustration.test.tsx (2 tests) 267ms - ✓ src/components/models/ModelSelector.test.tsx (2 tests) 342ms - ✓ src/components/detection/AiPipelineIllustration.test.tsx (1 test) 296ms - ✓ src/components/auth/LandingProjectStory.test.tsx (2 tests) 332ms - ✓ src/components/map/MunicipalitySearch.test.tsx (2 tests) 483ms - ✓ MunicipalitySearch > searches the official municipality catalog and activates a result  468ms - ✓ src/components/auth/LandingPage.test.tsx (4 tests) 825ms - ✓ LandingPage > presents the professionalised landing page and submits the operator login  471ms - ✓ src/lib/bathymetryRaster.test.ts (2 tests) 3ms - - Test Files  16 passed (16) - Tests  51 passed (51) - Start at  18:35:16 - Duration  7.37s (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s) - +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 + + + RUN  v3.2.6 C:/Projects/geointel/frontend + + ✓ src/lib/datasetCapabilities.test.ts (2 tests) 5ms + ✓ src/lib/performanceBudget.test.ts (3 tests) 41ms + ✓ src/components/map/mapWorkspaceUtils.test.ts (14 tests) 36ms + ✓ src/hooks/useMapThemeSelectionInsights.test.ts (2 tests) 43ms + ✓ src/hooks/useCoverageResolver.test.tsx (4 tests) 47ms + ✓ src/hooks/useTemporalComparison.test.tsx (3 tests) 36ms + ✓ src/components/WorkbenchStatusStrip.test.tsx (2 tests) 151ms + ✓ src/hooks/useWorkbenchBootstrap.test.tsx (3 tests) 60ms + ✓ src/components/map/LiveAnalysisJourney.test.tsx (3 tests) 59ms + ✓ src/components/overview/ProjectAtlasIllustration.test.tsx (2 tests) 267ms + ✓ src/components/models/ModelSelector.test.tsx (2 tests) 342ms + ✓ src/components/detection/AiPipelineIllustration.test.tsx (1 test) 296ms + ✓ src/components/auth/LandingProjectStory.test.tsx (2 tests) 332ms + ✓ src/components/map/MunicipalitySearch.test.tsx (2 tests) 483ms + ✓ MunicipalitySearch > searches the official municipality catalog and activates a result  468ms + ✓ src/components/auth/LandingPage.test.tsx (4 tests) 825ms + ✓ LandingPage > presents the professionalised landing page and submits the operator login  471ms + ✓ src/lib/bathymetryRaster.test.ts (2 tests) 3ms + + Test Files  16 passed (16) + Tests  51 passed (51) + Start at  18:35:16 + Duration  7.37s (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s) + 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" +}