Files
wyndham-ARR/.project-docs/50-evidence/topics/2026-07-30-monthly-publication-live-acceptance.md
2026-07-31 15:11:42 +08:00

90 lines
5.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Evidence Topic: Monthly publication live acceptance
## Metadata
- Date: 2026-07-30
- Status: Active
- Scope: migration 012, dedicated worker, controlled `booking_test`, local monthly artifacts and ARR2 loopback Web
- Confidence: Fact
- Source: migration rollback probes, automated tests, read-only PostgreSQL queries, workbook reopen inspection and live Web API/download checks
- Last verified: 2026-07-30
- Stale trigger: migration/report schema, formula layout, output storage, worker acknowledgement or Web download behavior changes
## Question
Does a successful daily commit now produce a durable, visible and downloadable monthly report with the correct
ARRIVAL watermark and `TOTAL PRICE` formulas?
## Evidence
### Migration and publication state
- `database/012_monthly_report_publication.sql` was executed inside an uncommitted up/down probe, then in a synthetic
active-publication probe, and both left no objects/data after rollback.
- A privacy-minimized pre-migration checkpoint was created at
`runtime/backups/booking_test_pre_012_20260730T151922+0800/manifest.json`; its SHA-256 is
`230206eb074fd5877132744eb592b3dc6cd6638d12a3dd4d71a8101a9bd2998e`.
- Migration 012 was then applied to `booking_test`. It adds three metadata-only `reporting` tables and permits controlled
`local` monthly artifacts; 008011 were not edited or replayed.
- Current read-only state is 2 Finance daily versions, 120 active facts, one active monthly run, one local
`monthly_xlsx`, one local `result_json`, and two published daily-commit events.
### ARRIVAL derivation and idempotency
- Event 3 referenced daily version 2 with retained `ARRIVAL=2026-07-27`; event 9 referenced daily version 4 with retained
`ARRIVAL=2026-07-21`.
- The worker looked up those facts by `daily_version_id`, ignored payload dates/filenames, and selected the July scope.
- Both events resolved to report ID 1/version 1 with `as_of_date=2026-07-27`, exactly the maximum `ARRIVAL` in the
current 120-row monthly snapshot. The second event reused the published snapshot instead of creating a duplicate.
- Both events became `published` after one attempt and only after the report and its two artifacts were registered.
### Workbook and Web
- The active report contains 120 rows across five worksheets: LIANTAI-GROUP 26, LIANTAI-FIT 25, QBD 55,
DY-AI-Easy-KB 0 and FENGRUN 14.
- Reopening the real workbook found exactly 120 formulas, all in the `TOTAL PRICE` data cells and all equal to the
expected row-relative `=R[row]*C[row]*G[row]`; there were zero missing, mismatched or unauthorized formulas.
- The workbook is 20,741 bytes with SHA-256
`a43cdac3f6d97f6b73f635d0f386cffd0ad8b6416e8f92a7b6afc2f79f1e8635`.
- `/api/monthly-runs?month=2026-07` returns the active database report. `/api/download/monthly?report_id=1` returned
bytes matching the registered size and hash.
- The primary page no longer contains month, cutoff or manual-generate controls and explains the max-ARRIVAL policy.
- The final full discovery passed 291 tests in 108.2 seconds with 7 explained environment/fixture skips and no
failures or errors; this included real monthly XLSX generation/reopen coverage using the configured builder runtime.
### Later live versions and automatic page discovery
- Two later user uploads advanced the live publication history to V03 active and V02/V01 superseded. All four
daily-commit events are published.
- V03 contains 308 rows across six channels. Its persisted `as_of_date` and max current fact `ARRIVAL` are both
2026-07-27.
- An independent reopen of V03 found exactly 308 expected `TOTAL PRICE` formulas and zero bad formulas. The file is
40,635 bytes with SHA-256 `494fb78283f68cb7bffce2501b3531613c494d148a56a7ccc8d2aabe46b1e29c`, matching its registered artifact.
- The monthly page was changed to remove its refresh button and poll only while visible/active. Browser inspection
rendered V03/V02/V01 with download links and `自动更新 · 4 秒`; Web access logs showed repeated
`/api/monthly-runs` reads at the intended cadence without a click or reload.
- A subsequent 07-23 upload committed daily version 7 with 109 retained rows and advanced publication to V04 active
with 417 rows. All five daily-commit events are published; V03/V02/V01 remain superseded history.
### Data-quality caveat discovered after publication
- A later read-only Channel BI reconciliation proved that Finance version 2 in every July snapshot is the database
acceptance run `mvp-v1-fixture-20260727`, sourced from `synthetic.xml` with provider `local_fixture`.
- Publication, lineage, formula and download mechanics remain verified, but V01/V02/V03/V04 are not clean business-data
acceptance artifacts: the fixture adds one row and makes 2026-07-27 the maximum included ARRIVAL.
- See [Channel BI post-update data contamination](2026-07-30-channel-bi-post-update-data-contamination.md) for the
measured impact and repair boundary.
## Finding
The original publication-identity discrepancy is resolved in the controlled local runtime: monthly success now means a persisted report
identity with registered, hash-checked downloadable bytes. The “更新至” label is based on the latest included
`ARRIVAL`, formulas are present and verified, automatic dispatch is performed by a separate durable worker, and the
open monthly page discovers the published version without manual refresh. Current July business values remain subject
to the fixture-contamination caveat above until controlled repair and republication.
## Remaining Boundary
The workstation already runs Web and worker separately. Production Compose packaging must still provide the required
Node/artifact-tool runtime and shared output volume before enabling an equivalent managed worker service.