# 2026-08-05 Daily PRICE_UNMATCHED diagnosis

## Metadata

- Date: 2026-08-06
- Status: Latest frozen review awaits explicit employee retry after deployed technical repair
- Scope: Daily job `arrjob-f1cd01f5fddd458cbdafada0ec7dd14d`, rejected Finance version 28
- Confidence: Fact for the hash-matched local replay and checked-in reference; production rule-set binary identity remains unproven because the supplied trace omits `rule_set_sha256`
- Source: operator-supplied ARR trace, hash-matched `0805.XML`, deterministic processor 3.0.0 replay, structured failure result, fixed price-reference workbook
- Last verified: 2026-08-06
- Stale trigger: a successful run-67 retry, a price/rule deployment, or a fresh processing job for business date 2026-08-05

## Question

Why did the deployed 2026-08-05 Opera XML daily job fail with `PRICE_UNMATCHED`, and do the reported 151 validation-failed rows represent separate bad source records?

## Evidence

- The server trace reports source size 948,683 bytes, rejected version 28 and outcomes `199 source = 46 excluded + 151 validation_failed + 2 price_unmatched`, with no duplicates or retained output.
- The read-only Desktop XML has the exact logged size and SHA-256. An isolated replay with checked-in processor 3.0.0 exits 2 and creates only `result.json`, `structured-result.json` and `异常清单.xlsx`.
- The two actionable errors are:
  - `reservation[2]`: Lian Tai + `LBLT` + Opera amount `0`; zero-night stay.
  - `reservation[64]`: Lian Tai + `GRP1` + Opera amount `1150`; one-night stay.
- Every one of the 151 `validation_failed` records carries `BATCH_NOT_VALIDATED`; 150 also carry `PRICE_REFERENCE_MATCHED`, and one carries the approved `ZERO_PRICE_EXCEPTION`. They are atomic batch fallout, not 151 independent field/date errors.
- Read-only artifact-tool inspection of `arr-opera-daily-ingest/references/价格对照.xlsx` shows Lian Tai `GRP1` mappings only at Sheet1 rows 23–28 for Opera amounts `900/1200/1300/1400/1800/2400`, and Lian Tai `LBLT` mappings at rows 40/42/43 for `900/1400/2400`. Neither exact target exists.
- Both checked-in price-reference workbooks are byte-identical at SHA-256 `123d1d1ea0e28ce481a63dfdbe4bd22b5e6069c585a8cbde4194376ed18fb0d6` and have not changed since commit `a701de9` (2026-07-29).
- The local replay rule-set SHA is `c41257208324a43e711de13ec9776a5e6486db334757f152531bf8292a2018eb`. The server trace exposes only processor version 3.0.0, so exact production rule-set hash comparison is not available from that trace alone.

## Finding

The deterministic processor correctly failed under the current frozen rules because two exact normalized price keys are absent. Numeric formatting and trailing rate-code spaces are not the cause. The `总价` values cannot be inferred safely from neighboring mappings, and zero nights do not bypass price-key validation under the current approved rule.

## Impact

- The deployed v4 workflow created review cases instead of another rejected Finance version. Latest run 67 has a frozen
  GRP1/LBLT manifest of `200/0` and remains retryable `generation_failed` after two repaired infrastructure defects;
  it still has no Finance version or run outbox event. Run 66 separately retains `2300/0`, and run 65 remains unset.
- The values apply only to their own task and do not change the fixed reference table. No automatic retry or re-upload
  is safe because a successful final replay is the Finance/monthly commit boundary.
- Keep rejected version 28 as immutable failure history. Only an explicitly authorized successful final replay may
  activate Finance facts and trigger monthly processing.

## Open Items

- Refresh/login, open latest run 67, confirm its frozen `LBLT=0` and `GRP1=200` values are intended, then invoke its
  retry once. Do not select run 66 accidentally because its frozen GRP1 value differs.
- After success, verify 153 retained rows, two `manual_review` rows, one active Finance version and exactly one new
  daily-commit/monthly event.
