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.
