audit: establish accuracy phase 1 baseline
This commit is contained in:
@@ -0,0 +1,5 @@
|
||||
command=python -m alembic heads
|
||||
exit_code=0
|
||||
captured_at=2026-08-01T18:37:24.0020021+02:00
|
||||
|
||||
202607260001 (head)
|
||||
@@ -0,0 +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;
|
||||
|
||||
@@ -0,0 +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 <module>
|
||||
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 ===============================
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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 </div>\n ))}\n </nav>\n <ItWorxSignature />\n </aside>\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<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: AssertionError
|
||||
_____________ test_map_first_explorer_is_the_default_product_flow _____________
|
||||
|
||||
def 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: 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.</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: 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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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<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: 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.</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: 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.</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: 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.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\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 = <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
|
||||
- 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)
|
||||
@@ -0,0 +1,266 @@
|
||||
# Phase 1 command and result ledger
|
||||
|
||||
Captured: 2026-08-01
|
||||
Audited repository baseline: `0c019bb22f816db1e4b7a68379bcad08924d9a21`
|
||||
Branch: `codex/geointel-accuracy-program`
|
||||
|
||||
This ledger records the commands and claim boundaries behind the retained
|
||||
evidence. JSON, JUnit, SQL and full text logs in this directory are the source
|
||||
of truth when this summary and a raw artifact differ.
|
||||
|
||||
## Repository and static inventory
|
||||
|
||||
```powershell
|
||||
python scripts/run_accuracy_phase1_baseline.py --output-dir artifacts/evidence/accuracy/P1
|
||||
```
|
||||
|
||||
Result: completed. The baseline found 2,495 tracked files, including a tracked
|
||||
`geointel/` mirror with 1,153 files; 68 paired files differ from root. No model
|
||||
checkpoint is tracked in the local checkout. The mirror is excluded by the root
|
||||
`.dockerignore`; the residual risk is source/import/maintenance ambiguity, not
|
||||
official all-in-one build-context inclusion.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `phase1-baseline-summary.json`
|
||||
- `repository-inventory.json`
|
||||
- `local-artifact-inventory.json`
|
||||
- `static-risk-signals.json`
|
||||
|
||||
## Deterministic contract reproductions
|
||||
|
||||
```powershell
|
||||
python scripts/reproduce_accuracy_phase1_findings.py
|
||||
```
|
||||
|
||||
Result: 7 of 7 expected violations reproduced. They cover cross-theme coverage
|
||||
contamination, metres-as-degrees buffering, Lambert-as-4326 persistence,
|
||||
caller-spoofed source authority, mutable-name model scope, mutable-name legal
|
||||
scope and silently ignored Area PATCH geometry.
|
||||
|
||||
Evidence: `forensic-reproductions.json`.
|
||||
|
||||
## Tower runtime, database and storage references
|
||||
|
||||
The collector was streamed into the running `geointel` container and executed
|
||||
with read-only SQL and a 30-second statement timeout:
|
||||
|
||||
```text
|
||||
docker exec -i geointel env PYTHONPATH=/app/backend python -
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
- Python 3.11.2, PyTorch 2.11.0+cu128, CUDA 12.8, Ultralytics 8.4.99;
|
||||
- NVIDIA GeForce RTX 4080 SUPER visible on `cuda:0`;
|
||||
- Alembic head `202607260001`;
|
||||
- 5,816 direct database storage references checked, 0 missing;
|
||||
- four Geel detections contain Lambert-domain coordinates while the geometry
|
||||
column reports SRID 4326;
|
||||
- no database or storage row was modified.
|
||||
|
||||
A broader recursive `audit_data_operations.py` storage scan was stopped by its
|
||||
244-second execution timeout and produced no retained result. It is not counted
|
||||
as a pass. The bounded, direct-reference collector above completed and is the
|
||||
only storage-completeness claim made here.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `tower-runtime-database-snapshot.json`
|
||||
- `tower-runtime-database-snapshot-detailed.json`
|
||||
|
||||
## Real GPU inference smoke
|
||||
|
||||
The read-only collector used the production `YoloDetectionAdapter`, the active
|
||||
model and one existing Geel tile:
|
||||
|
||||
```text
|
||||
python - --model-path /app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt \
|
||||
--tile-path /app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif \
|
||||
--manifest-path /app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/manifest.json \
|
||||
--confidence 0.5 --image-size 640 --max-detections 1000 --device cuda:0 --seed 20260801
|
||||
```
|
||||
|
||||
Result: passed; 17 raw building detections; 0.883694486 s synchronized
|
||||
inference; model SHA-256
|
||||
`a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1`.
|
||||
|
||||
Claim boundary: this proves one runtime execution. It does not prove that any
|
||||
box is correct, that confidence is calibrated, or that the model generalizes.
|
||||
|
||||
Evidence: `tower-gpu-inference-smoke.json`.
|
||||
|
||||
## ML/data-lineage inventory
|
||||
|
||||
The bounded collector read V56/V58/V62/V66 plus model, checkpoint, report and
|
||||
manifest metadata from the mounted Tower volume:
|
||||
|
||||
```text
|
||||
docker exec -i geointel python - --app-root /app
|
||||
```
|
||||
|
||||
Result:
|
||||
|
||||
- 26 model assets, 229 training checkpoints, 424 training JSON reports and
|
||||
36 operator manifests inventoried;
|
||||
- V56 has 180 AOIs and 0 completed human reviews;
|
||||
- three pure-empty background-test AOIs: Flanders 2, Wallonia 1, Brussels 0;
|
||||
- zero exact cross-split raster-hash duplicates;
|
||||
- bounded 64-bit dHash screen: 180 rasters, minimum Hamming distance 17,
|
||||
zero cross-split pairs at or below 4;
|
||||
- minimum cross-split AOI bbox distance 95.720336 m and 24 pairs below 2 km;
|
||||
- V58/V62 evidence is calibration-only; at threshold 0.15 aggregate F1 is
|
||||
0.512905 while Flanders recall and F1 are 0;
|
||||
- no protected-test, background-test promotion or national-release evidence.
|
||||
|
||||
Claim boundary: exact/dHash and bbox-distance screens do not establish
|
||||
municipality, flight-strip, instance, semantic or imagery-edition independence.
|
||||
|
||||
Evidence: `tower-ml-data-lineage-snapshot.json` and
|
||||
`tower-key-artifact-hashes.json` (V62 best/last checkpoints and V56 tile audit).
|
||||
|
||||
## Backend tests
|
||||
|
||||
### Full root-context suite
|
||||
|
||||
```powershell
|
||||
$env:PYTHONPATH='C:\Projects\geointel\backend;C:\Projects\geointel'
|
||||
python -m pytest backend/tests -q -p no:cacheprovider \
|
||||
-W error::DeprecationWarning \
|
||||
--junitxml=artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
|
||||
```
|
||||
|
||||
Result: exit 1; 1,180 passed and 17 failed in 70.63 seconds. The 17 failures are
|
||||
stale source/contract assertions, including expectations that conflict with the
|
||||
new explicit user-selected model flow. They remain release-blocking until
|
||||
replaced with reviewed behavior tests.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `backend-full-suite.txt`
|
||||
- `backend-full-suite.junit.xml`
|
||||
|
||||
### Actual backend CI working directory
|
||||
|
||||
```powershell
|
||||
cd backend
|
||||
python -m pytest -W error::DeprecationWarning
|
||||
```
|
||||
|
||||
Result: exit 2 during collection; 1,194 items collected plus one import error:
|
||||
|
||||
```text
|
||||
ModuleNotFoundError: No module named 'scripts.render_operator_polygon_label_qa'
|
||||
```
|
||||
|
||||
Evidence: `backend-ci-entrypoint.txt`.
|
||||
|
||||
### Phase 1 tooling
|
||||
|
||||
```powershell
|
||||
python -m pytest tests/test_accuracy_phase1_baseline.py -q -p no:cacheprovider
|
||||
```
|
||||
|
||||
Result: 4 passed.
|
||||
|
||||
Evidence: `phase1-tooling-tests.txt`.
|
||||
|
||||
## Lint
|
||||
|
||||
```powershell
|
||||
python -m ruff check scripts/collect_accuracy_phase1_inference_smoke.py \
|
||||
scripts/collect_accuracy_phase1_ml_lineage.py \
|
||||
scripts/collect_accuracy_phase1_runtime.py \
|
||||
scripts/reproduce_accuracy_phase1_findings.py \
|
||||
scripts/run_accuracy_phase1_baseline.py tests/test_accuracy_phase1_baseline.py
|
||||
```
|
||||
|
||||
Result: all new Phase 1 code passed.
|
||||
|
||||
```powershell
|
||||
python -m ruff check backend scripts tests
|
||||
```
|
||||
|
||||
Result: exit 1; 112 findings: E402 13, E701 2, E702 69, F401 23, F403 1,
|
||||
F811 2 and F841 2.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `repository-ruff-baseline.txt`
|
||||
- `repository-ruff-baseline.json`
|
||||
|
||||
## Frontend
|
||||
|
||||
```powershell
|
||||
cd frontend
|
||||
npm run test:unit
|
||||
npm run typecheck
|
||||
npm run build
|
||||
```
|
||||
|
||||
Results:
|
||||
|
||||
- Vitest: 16 files, 51 tests passed;
|
||||
- TypeScript typecheck: passed;
|
||||
- production build: passed, 1,896 modules transformed.
|
||||
|
||||
The attempted generic `npm test -- --run` failed because no `test` script
|
||||
exists; the configured command is `test:unit`. The test strategy also calls
|
||||
for lint, but `npm run lint` fails with `Missing script: "lint"`.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `frontend-vitest.txt` (failed non-existent generic command, retained)
|
||||
- `frontend-vitest-unit.txt` (correct configured command, passed)
|
||||
- `frontend-typecheck.txt`
|
||||
- `frontend-build.txt`
|
||||
- `frontend-lint.txt`
|
||||
|
||||
## API, migrations and golden QA
|
||||
|
||||
```powershell
|
||||
python scripts/audit_api_contracts.py
|
||||
```
|
||||
|
||||
Result: 147 implemented routes match documentation; 10 explicitly tracked
|
||||
non-envelope endpoints.
|
||||
|
||||
Evidence: `openapi-contract-audit.txt`.
|
||||
|
||||
```powershell
|
||||
cd backend
|
||||
python -m alembic heads
|
||||
python -m alembic upgrade head --sql
|
||||
```
|
||||
|
||||
Result: one head, `202607260001`; complete offline upgrade rendered 496 SQL/log
|
||||
lines. This is not a local live-PostGIS migration test.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `alembic-heads.txt`
|
||||
- `alembic-offline-upgrade.sql`
|
||||
|
||||
```powershell
|
||||
python scripts/run_golden_qa_benchmark.py --json
|
||||
```
|
||||
|
||||
Result: two runs have semantically identical metric results but different file
|
||||
hashes because run identities use UUID4.
|
||||
|
||||
Evidence:
|
||||
|
||||
- `golden-qa-run-1.json`
|
||||
- `golden-qa-run-2.json`
|
||||
- `golden-qa-reproducibility.json`
|
||||
|
||||
## Explicitly not executed as a success gate
|
||||
|
||||
- no protected test or background-test portfolio was opened;
|
||||
- no training, calibration fitting, checkpoint promotion or active-model change;
|
||||
- no label was accepted on behalf of a human reviewer;
|
||||
- no production database migration or data repair;
|
||||
- no dataset, checkpoint, cache, output or user-owned untracked file deleted,
|
||||
rewritten or moved;
|
||||
- no segmentation, SAM or solar asset was inferred to be production-ready from
|
||||
file presence.
|
||||
@@ -0,0 +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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
command=npm run build
|
||||
exit_code=0
|
||||
captured_at=2026-08-01T18:34:50.3212385+02:00
|
||||
|
||||
|
||||
> geointel-frontend@1.0.0 build
|
||||
> tsc -b && vite build
|
||||
|
||||
[36mvite v7.3.6 [32mbuilding client environment for production...[36m[39m
|
||||
transforming...
|
||||
[32m✓[39m 1896 modules transformed.
|
||||
rendering chunks...
|
||||
computing gzip size...
|
||||
[2mdist/[22m[32mindex.html [39m[1m[2m 0.98 kB[22m[1m[22m[2m │ gzip: 0.49 kB[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-500-normal-BYYD-dBL.woff2 [39m[1m[2m 14.04 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-600-normal-4f0koTD-.woff2 [39m[1m[2m 14.17 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-700-normal-BZp_XxE4.woff2 [39m[1m[2m 14.21 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-600-normal-Fru-LXNs.woff2 [39m[1m[2m 14.59 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-400-normal-8Rpg0ruU.woff2 [39m[1m[2m 14.63 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-500-normal-NlrCPXnF.woff2 [39m[1m[2m 14.66 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-500-normal-DMZssgOp.woff [39m[1m[2m 18.24 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-600-normal-BqgrALkZ.woff [39m[1m[2m 18.38 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/manrope-latin-700-normal-DGRFkw-m.woff [39m[1m[2m 18.41 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-400-normal-SBbinRkI.woff [39m[1m[2m 18.49 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-500-normal-vCxiVFAq.woff [39m[1m[2m 18.52 kB[22m[1m[22m
|
||||
[2mdist/[22m[32massets/public-sans-latin-600-normal-BR59oU-I.woff [39m[1m[2m 18.56 kB[22m[1m[22m
|
||||
[2mdist/[22m[35massets/index-BNS8Tp4f.css [39m[1m[2m426.59 kB[22m[1m[22m[2m │ gzip: 69.40 kB[22m
|
||||
[2mdist/[22m[36massets/vendor-CrqJdhs-.js [39m[1m[2m140.80 kB[22m[1m[22m[2m │ gzip: 45.27 kB[22m
|
||||
[2mdist/[22m[36massets/index-DR8RUeAl.js [39m[1m[2m457.16 kB[22m[1m[22m[2m │ gzip: 119.71 kB[22m
|
||||
[2mdist/[22m[36massets/maplibre-DEBTaTl_.js [39m[1m[2m802.71 kB[22m[1m[22m[2m │ gzip: 217.71 kB[22m
|
||||
[32m✓ built in 9.80s[39m
|
||||
@@ -0,0 +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
|
||||
@@ -0,0 +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
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
command=npm run test:unit
|
||||
exit_code=0
|
||||
captured_at=2026-08-01T18:35:24.4298867+02:00
|
||||
|
||||
|
||||
> geointel-frontend@1.0.0 test:unit
|
||||
> vitest run
|
||||
|
||||
|
||||
[1m[46m RUN [49m[22m [36mv3.2.6 [39m[90mC:/Projects/geointel/frontend[39m
|
||||
|
||||
[32m✓[39m src/lib/datasetCapabilities.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 5[2mms[22m[39m
|
||||
[32m✓[39m src/lib/performanceBudget.test.ts [2m([22m[2m3 tests[22m[2m)[22m[32m 41[2mms[22m[39m
|
||||
[32m✓[39m src/components/map/mapWorkspaceUtils.test.ts [2m([22m[2m14 tests[22m[2m)[22m[32m 36[2mms[22m[39m
|
||||
[32m✓[39m src/hooks/useMapThemeSelectionInsights.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 43[2mms[22m[39m
|
||||
[32m✓[39m src/hooks/useCoverageResolver.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[32m 47[2mms[22m[39m
|
||||
[32m✓[39m src/hooks/useTemporalComparison.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 36[2mms[22m[39m
|
||||
[32m✓[39m src/components/WorkbenchStatusStrip.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 151[2mms[22m[39m
|
||||
[32m✓[39m src/hooks/useWorkbenchBootstrap.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 60[2mms[22m[39m
|
||||
[32m✓[39m src/components/map/LiveAnalysisJourney.test.tsx [2m([22m[2m3 tests[22m[2m)[22m[32m 59[2mms[22m[39m
|
||||
[32m✓[39m src/components/overview/ProjectAtlasIllustration.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[32m 267[2mms[22m[39m
|
||||
[32m✓[39m src/components/models/ModelSelector.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 342[2mms[22m[39m
|
||||
[32m✓[39m src/components/detection/AiPipelineIllustration.test.tsx [2m([22m[2m1 test[22m[2m)[22m[32m 296[2mms[22m[39m
|
||||
[32m✓[39m src/components/auth/LandingProjectStory.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 332[2mms[22m[39m
|
||||
[32m✓[39m src/components/map/MunicipalitySearch.test.tsx [2m([22m[2m2 tests[22m[2m)[22m[33m 483[2mms[22m[39m
|
||||
[33m[2m✓[22m[39m MunicipalitySearch[2m > [22msearches the official municipality catalog and activates a result [33m 468[2mms[22m[39m
|
||||
[32m✓[39m src/components/auth/LandingPage.test.tsx [2m([22m[2m4 tests[22m[2m)[22m[33m 825[2mms[22m[39m
|
||||
[33m[2m✓[22m[39m LandingPage[2m > [22mpresents the professionalised landing page and submits the operator login [33m 471[2mms[22m[39m
|
||||
[32m✓[39m src/lib/bathymetryRaster.test.ts [2m([22m[2m2 tests[22m[2m)[22m[32m 3[2mms[22m[39m
|
||||
|
||||
[2m Test Files [22m [1m[32m16 passed[39m[22m[90m (16)[39m
|
||||
[2m Tests [22m [1m[32m51 passed[39m[22m[90m (51)[39m
|
||||
[2m Start at [22m 18:35:16
|
||||
[2m Duration [22m 7.37s[2m (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s)[22m
|
||||
|
||||
@@ -0,0 +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
|
||||
@@ -0,0 +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."
|
||||
}
|
||||
@@ -0,0 +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
|
||||
}
|
||||
@@ -0,0 +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
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +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.
|
||||
@@ -0,0 +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"
|
||||
}
|
||||
@@ -0,0 +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
|
||||
@@ -0,0 +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
|
||||
}
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -0,0 +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": "<span>{coverageCounts.not_configured} niet gekoppeld</span>"
|
||||
},
|
||||
{
|
||||
"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."
|
||||
}
|
||||
@@ -0,0 +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
|
||||
}
|
||||
}
|
||||
@@ -0,0 +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"
|
||||
}
|
||||
]
|
||||
}
|
||||
File diff suppressed because it is too large
Load Diff
@@ -0,0 +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"
|
||||
}
|
||||
@@ -0,0 +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"
|
||||
}
|
||||
Reference in New Issue
Block a user