YachtMemory - Stay Processing Phase 1C.1e-b1 Test 2
=======================================================
This package is the second validation step for b1.

It contains:
- complete replacement src/services/StayProcessingWriter.php
- pure logic test shared_dashboard/scripts/test_stay_processing_state_machine_b1.php

No SQL and no DB writes.

Change from b1 v1:
The Enrichment-cycle reconciliation has been extracted into the deterministic
public method StayProcessingWriter::reconcileEnrichmentCycle(). planForVessel()
uses exactly this same method.

The test covers:
A current COMPLETE
B PENDING + current result
C same-cycle PROCESSING
D same-cycle RETRY
E same-cycle FAILED
F COMPLETE + stale result
G new revision after COMPLETE
H new revision after RETRY
I new revision after FAILED

Commands:
  unzip -o YachtMemory_StayProcessing_Phase1C1e_b1_Test2_v1.zip
  php -l src/services/StayProcessingWriter.php
  php -l shared_dashboard/scripts/test_stay_processing_state_machine_b1.php

  php shared_dashboard/scripts/test_stay_processing_state_machine_b1.php

Expected:
  CASES=9 PASS=9 FAIL=0
  DB writes: NONE
  RESULT: OK

After that, rerun the real reconciliation DRY RUN from b1:
  php shared_dashboard/scripts/test_stay_processing_reconcile_b1.php

Expected unchanged control baseline:
  INSERT=0 UPDATE=0 UNCHANGED=36 TOTAL=36
  DB writes: NONE
