# MODULE ACCEPTANCE CRITERIA This document defines when a module is considered done enough to move forward. ## Backend foundation Done when: - app imports without error; - health endpoint works; - config is environment-driven; - response envelope is used; - error shape is canonical; - backend smoke test exists. ## Database foundation Done when: - database connection is configured; - PostGIS is enabled or checked; - migrations exist; - core tables can be created; - geometry storage works; - tests or smoke checks exist. ## Project Manager Done when: - project create/list/read works; - invalid payloads return canonical errors; - frontend can display projects; - tests cover at least one create/list/read path. ## Area Manager Done when: - valid GeoJSON polygon can be stored; - invalid geometry is rejected; - bounds or area metadata is returned where practical; - geometry is stored in PostGIS; - frontend can display at least one area on the map. ## Dataset Manager Done when: - GeoJSON dataset can be registered/uploaded; - metadata is extracted; - metadata is persisted; - original file or reference is stored; - dataset state follows the state machine; - frontend can list datasets. ## Map Workbench Foundation Done when: - MapLibre renders; - fixture layer can be displayed; - layer loading state exists; - error state exists; - map controls do not break layout. ## Export baseline Done when: - at least one valid GeoJSON export path exists; - export file is stored or streamed consistently; - export metadata is recorded or returned; - invalid export requests fail gracefully. ## QA/QC skeleton Done when: - schema for reference and prediction layers is documented/implemented; - no live AI inference is required; - future QA engine can plug into analysis run structure; - fixture metrics can be validated if implemented.