The count has not dropped sharply against the largest of the last 14 runs. Growth is never an alarm; only a real loss is.
SIGNAL 2 · REFUSALSROWS_REFUSED
6 rows
The sync refused to write these rows. They keep refusing until someone fixes the source cell.
NEEDS ATTENTION
Yes
Next run 09:30 daily
ROWS READ · LAST 14 RUNSThe expected row count is recorded for history and decides nothing
428
428
430
430
432
432
433
433
434
434
436
437
438
438
SHEET ROWS
FIELD
VALUE FOUND
WHY IT WAS REFUSED
12 – 17
Total (local currency)
' K '
present but not a number — refusing to write it as 0
TWO SIGNALS, DECIDED SEPARATELY
For a month one stale count kept the whole status on "warn" every day, and a real refusal hid underneath it. Each signal now has its own name and its own meaning, so one cannot mask the other.
WHO FIXES IT
Whoever maintains the source spreadsheet: rows 12–17 hold a placeholder where a number belongs. The platform cannot guess which number.
Spreadsheet import · optional, set per deployment. It is a live source someone maintains.
On a phone the screen is shown as a small layout preview. Open this page on a larger screen to read it, or read the points below.
What this screen shows
Row count and refused rows are decided and named separately.
Growth is never an alarm; only a real drop is.
A refused row names its field, its value and why it was refused.
Why it works this way
A stale expectation can keep a whole status on warning every day and hide a real data problem underneath. So each signal has its own name and its own meaning, and one cannot mask the other.
What exists today
The sync runs and reports today. The two-signal screen shown here is still being built.