YachtMemory - StayProcessingService v1 ======================================== Purpose ------- First manual orchestration layer above the frozen processing components. Flow in APPLY mode: StayProcessingWriter::planForVessel() -> StayProcessingWriter::apply() -> StayProcessingSelector::selectDueEnrichment() -> StayProcessingEnrichmentWorker::runDue() DRY RUN mode: - builds the real reconciliation plan - reads due enrichment work - DOES NOT call StayProcessingWriter::apply() - DOES NOT invoke the worker - therefore performs no DB writes No SQL migration. No systemd. No stay_processing_runs table. No geography/classification worker. No portal start/stop. Install ------- unzip -o YachtMemory_StayProcessingService_v1.zip Syntax: php -l src/services/StayProcessingService.php php -l shared_dashboard/scripts/run_stay_processing.php php -l shared_dashboard/scripts/verify_stay_processing_service.php First validation - READ ONLY: php shared_dashboard/scripts/verify_stay_processing_service.php Expected on the currently reconciled Silent Sea baseline: plan_insert: 0 plan_update: 0 all plan rows UNCHANGED due_enrichment_before_worker: 0 worker_invoked: NO RESULT: OK DB writes: NONE Manual runner - DRY RUN: php shared_dashboard/scripts/run_stay_processing.php --vessel-id=1 --dry-run Do NOT run APPLY mode until the DRY RUN result has been reviewed: php shared_dashboard/scripts/run_stay_processing.php --vessel-id=1