enzwa lab · sentinel · data validation workflow
Sentinel reads a spreadsheet, checks every row against rules you write, and reports what failed, where and why. Below is a twelve-row property register with seven problems in it. Two are blank cells, which anyone spots. The other five are invisible to reading.
A tool for checking a spreadsheet before anything gets built on top of it.
Every model, report and business case starts with a file somebody typed by hand. A duplicated row or a stale date is invisible to reading, and nothing downstream will ever tell you it was there.
Sentinel tests every row against a short list of rules you write, and reports what failed, where and why. The rules sit in one readable list, which is the part actually worth arguing about.
Nothing is marked. Every column is populated, every cell was typed by somebody, and the sheet has the shape of a finished thing. Read it and find the failures.
| # | ID | Asset | Status | Area (sqft) | Last Review |
|---|---|---|---|---|---|
| 1 | A-1041 | Kowloon East Tower | Active | 48200 | 2026-06-14 |
| 2 | A-1042 | Cyberport Annex | Active | 12850 | 2026-02-02 |
| 3 | A-1043 | Taikoo Place Unit 7 | Pending | 9400 | 2025-11-20 |
| 4 | A-1044 | Quarry Bay Store | Under review | 3120 | 2026-04-30 |
| 5 | A-1045 | Active | 22600 | 2026-01-15 | |
| 6 | A-1046 | Tsuen Wan Depot | Closed | 141000 | 2024-08-09 |
| 7 | A-1043 | Taikoo Place Unit 7 | Pending | 9400 | 2025-11-20 |
| 8 | A-1048 | Sha Tin Logistics | On Hold | 1240000 | 2026-05-11 |
| 9 | Aberdeen Marine Yard | Active | 6700 | 2026-03-22 | |
| 10 | A-1050 | Central Podium L3 | Active | n/a | 2026-07-01 |
| 11 | A-1051 | Fo Tan Workshop | Active | 4050 | 2026-05-27 |
| 12 | A-1052 | Wong Chuk Hang Lab | Active | 15300 | 2026-08-18 |
the same sheet appears three times on this page and is never edited
This is Sentinel’s shipped ruleset in the order it runs. It lives in one block at the top of a single file, and changing what gets flagged means editing this list. A rule names a column, a test and a severity.
| # | column | test | severity |
|---|---|---|---|
| 1 | ID | must not be blank | error |
| 2 | ID | must be unique | error |
| 3 | Asset | must not be blank | error |
| 4 | Status | must be one of: Active, Pending, Closed, On Hold | warn |
| 5 | Area (sqft) | must be ≥ 0 and ≤ 1000000 | error |
| 6 | Last Review | must be within 365 days | warn |
Seven rule types are available: required, range, allowedValues, unique, dateNotStale, regex and custom. Given no rules at all, Sentinel profiles the file instead and flags every blank cell in every column as a warning.
The same twelve-row grid, drawn once per rule, with only what that rule catches marked. Six rules, six sets of cells, and no cell is marked twice. A rule that goes unwritten finds nothing, and no other rule covers for it.
rows run top to bottom, columns left to right · swipe to see all six
The same sheet, with every rule run over it. Sentinel reports per cell: the row, the column, the severity, the rule and the reason.
| # | ID | Asset | Status | Area (sqft) | Last Review |
|---|---|---|---|---|---|
| 1 | A-1041 | Kowloon East Tower | Active | 48200 | 2026-06-14 |
| 2 | A-1042 | Cyberport Annex | Active | 12850 | 2026-02-02 |
| 3 | A-1043 | Taikoo Place Unit 7 | Pending | 9400 | 2025-11-20 |
| 4 | A-1044 | Quarry Bay Store | Under review | 3120 | 2026-04-30 |
| 5 | A-1045 | Active | 22600 | 2026-01-15 | |
| 6 | A-1046 | Tsuen Wan Depot | Closed | 141000 | 2024-08-09 |
| 7 | A-1043 | Taikoo Place Unit 7 | Pending | 9400 | 2025-11-20 |
| 8 | A-1048 | Sha Tin Logistics | On Hold | 1240000 | 2026-05-11 |
| 9 | Aberdeen Marine Yard | Active | 6700 | 2026-03-22 | |
| 10 | A-1050 | Central Podium L3 | Active | n/a | 2026-07-01 |
| 11 | A-1051 | Fo Tan Workshop | Active | 4050 | 2026-05-27 |
| 12 | A-1052 | Wong Chuk Hang Lab | Active | 15300 | 2026-08-18 |
| row | column | severity | rule | message |
|---|---|---|---|---|
| 4 | Status | warn | allowedValues | unexpected value "Under review" |
| 5 | Asset | error | required | blank |
| 6 | Last Review | warn | dateNotStale | 755 days old |
| 7 | ID | error | unique | duplicate of row 3 |
| 8 | Area (sqft) | error | range | above max 1000000 |
| 9 | ID | error | required | blank |
| 10 | Area (sqft) | error | range | not a number |
Of the seven, two are blank cells. A person scrolling this sheet finds those and stops. The duplicate identifier needs every row compared against every other, the stale review needs today’s date, the unexpected status needs the agreed vocabulary, and the area above the ceiling reads as a perfectly ordinary number.
Four of the six rules stop the file. Two let it through with a note. A blank identifier is an error, a status outside the agreed vocabulary is a warning, and a review 755 days old is a warning. Somebody decided that, and the list is where the decision is recorded.
Two people can agree on the rule and disagree on whether it stops the run. That argument is the governance, and it is worth having in front of a six-line table rather than after a quarter of reporting.
Every other tool in this lab reads a file like this one. A scenario engine will rank options on a portfolio holding a duplicated asset. A simulator will run a population with rows missing. The output arrives with the same confidence either way, and the only place to catch it is in front.
| # | what the market records | figure | source |
|---|---|---|---|
| 1 | Average annual cost of poor data quality to an organisation | US$12.9m | Gartner |
| 2 | AI projects expected to be abandoned through 2026 for want of AI-ready data | 60% | Gartner, Feb 2025 |
| 3 | Organisations lacking, or unsure of, the data-management practices AI needs | 63% | Gartner, Feb 2025 |
| 4 | Revenue an organisation may lose annually to data quality issues | 15 to 25% | MIT, widely cited |
Those four are sourced and each is recorded with its status in FACTS.md beside this page. Everything drawn above them is illustrative: the specimen is written to be validated, and the counts come from running Sentinel’s own six rules over it.
Sentinel is one self-contained file. Drop an xlsx, xls or csv on it and the report appears in the browser, or connect a folder once and it re-checks on a timer. It makes no network call with the file. The rules are the part worth arguing about, and there are six of them.
Open the validator →