Skip to content
PROTOTYPE — MOCK DATAFigures are generated fixtures derived from the registry. Not ACF actuals.
Menu (13)

Appraisal — daily decision report

FAILING
Appraisal / Underwriting · production · 1 dataset
FOUR CLASSES, FOUR POLICIES — “HANDLE FAILED” IS NOT ONE SETTING
Transport — the push never arrived
client retries ×5, backoff to 15 min

We answer 503 with Retry-After. The idempotency key is what makes a retry safe rather than a double count.

Schema — the payload is the wrong shape
Reject the whole batch

Default. 365 valid rows out of 412 produce a figure nobody can reconcile against the source count.

Content — shape fine, values implausible
Quarantine + alert the data owner

Default. Same plausibility range the manual entry form already enforces.

Absence — nothing arrived
Mark not reported + alert

The only answer that does not invent a number. The tile goes to not_reported, which is a state, not a value.

NOT ON THE MENU

Zero-fill. It is not an unchosen option, it is an absent one. A silent zero on a board screen is the exact failure this platform exists to prevent.

ESCALATION LADDER, AND THE BREAKER AT THE END OF IT
  1. 1st failure or missdata_owner
  2. 2nd consecutivedata_owner, metric_owner
  3. 3rd consecutivedata_owner, metric_owner, division GM

Circuit breaker: 5 consecutive rejected pushes, or 3 consecutive missed windows, suspends the project. A feed that is failing repeatedly is producing noise — the failure state has to be louder than the data. Resuming requires a human and a note.

FAILURE INSPECTOR · 400 schema_invalid
rcp-9b22-20260916 · period 2026-09-16 · 388 rows read, 0 accepted · producer appraisal-export/2.1.0 · key k-2026-07-01-01

Policy applied: reject_batch. The same structural fault, a week earlier and unfixed. Two rejections is the point at which the metric owner is notified as well as the data owner — one failure is an accident, two is a change nobody told us about.

schema_invalid × 38type_invalid × 2enum_invalid × 1

One structural fault repeated down a file is what a real rejection looks like — not 47 different problems. Fixing the first line fixes 38 of them.

Row-level errors in the rejected batch
YOUR ROWMETRICCOLUMNVALUECODEMESSAGE
2AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
2AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
2AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
5AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
8AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
11AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
14AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
17AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
20AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
23AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
26AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
29AP-01decline_sub_reasonINCOME_UNVERIFIEDschema_invalidunknown column `decline_sub_reason` — dataset v1 declares 5 columns, the file has 6
Showing 12 of 41. Row numbers are the department's own file rows, not batch record offsets — “row 47 of your file” is actionable, “record 47 of the batch” is not. That single choice is most of the difference on evaluation question I4.