YachtMemory - Stay Processing Phase 1C.1e-b1 ================================================ Scope ----- Reconciliation only. No worker transitions are implemented yet. This package replaces: src/services/StayProcessingWriter.php and adds: shared_dashboard/scripts/test_stay_processing_reconcile_b1.php No SQL migration is included. Core rule --------- enrichment_input_revision is the identity of the current Enrichment processing cycle. If stays.revision changes relative to enrichment_input_revision: - start a new Enrichment cycle - enrichment_status = PENDING - enrichment_input_revision = current stays.revision - Enrichment attempt/retry metadata = 0/NULL - Classification = PENDING If input revision is unchanged: - PROCESSING / RETRY / FAILED are preserved - PENDING / COMPLETE are reconciled against the persisted Enrichment result: current result -> COMPLETE stale/missing result -> PENDING Geography remains preserved for existing rows. Important --------- Do not run StayWriter or StayEnrichmentWriter merely to create a test condition. The current validated database is the control baseline. Installation ------------ From /var/www/app.yachtmemory.net: unzip -o YachtMemory_StayProcessing_Phase1C1e_b1_v1.zip php -l src/services/StayProcessingWriter.php php -l shared_dashboard/scripts/test_stay_processing_reconcile_b1.php First test: DRY RUN ONLY ------------------------ php shared_dashboard/scripts/test_stay_processing_reconcile_b1.php Expected current baseline: INSERT=0 UPDATE=0 UNCHANGED=36 TOTAL=36 DB writes: NONE In particular Stay #36 should remain: stay revision 3 Enrichment result revision 3 Enrichment input revision 3 Enrichment COMPLETE Only after the dry run is reviewed should --apply be considered. On a completely unchanged baseline, applying is unnecessary because there are no planned writes.