The progress page is where MoatBrain makes its own claim checkable. The hard part is not the chart work — it is that the single most natural way to show someone they are improving is a number that goes up, and this page is not allowed one. Not a score, not a grade, not a percentile, not a strength. Growth has to read as accumulation and coverage, on the user's own data, or it does not ship.
Three directions below. They are not three skins — they answer three different questions, and the page can only lead with one. Same workspace, same fixture, same chrome, same rule bar, same exclusion panel: the only variable is the organising structure and the sentence that stands where a score would stand.
The 2×2 that om_calibration_quadrant already models — what you expected
against what you later recorded, with process on the emphasised axis because process is the
part you control. The fifth shipped value, insufficient_data, is held outside the
grid rather than hidden in it. Below that, your stated confidence plotted against your own
recorded outcomes.
Chronological, one decision at a time, exactly as the tagline says. Each entry carries what you recorded, what came back, and what you changed when it did — a say-do read you accepted, a disclosure diff that asked you to look again, a stop you wrote down. There is no denominator anywhere on the page, so there is nothing a reader can convert into a rating.
Companies down, layers of work across, plus which of the ten shipped risk categories you have ever reached for. The most immediately useful of the three, and the one I would not lead with. Its best idea is the dashed cell: a company you rejected or parked is drawn as a deliberate stop, never as a hole — because a grid of holes is a to-do list, and a to-do list here tells someone to do more research on more companies, which is activity, not judgement.
Lead with the Calibration Floor and put the Spine underneath it. Do not lead with the Map. The brief asks for the surface that makes the brand claim literal, and the claim is about getting better — only one of these three is about that. The Map is about work outstanding and the Spine about work done, and both are good sections of a page that the Floor should head.
The second reason is the one that matters more on a compliance-critical surface. The Floor is the only direction that cannot be collapsed into a rating without visibly losing information — averaging its four cells scores a favourable outcome from unsound work identically to an unfavourable outcome from sound work, which is the exact error the product exists to prevent. The other two rely on us choosing not to add a number. This one resists it.
The condition I would attach. The Floor is empty for months. Nine resolved records is what a genuinely active five-month workspace looks like, and a new user sees four zeroes on a page called Progress — the worst first impression this product could make. So the empty state is not polish here, it is part of the decision: if it is not designed as a real screen, lead with the Spine instead and let the Floor take over once there is something in it. I would rather that swap be planned than discovered.
Grounded on ownermind-api origin/develop before drawing anything. Each
of these moved a decision:
om_calibration_quadrant is a
process×outcome matrix with a fifth insufficient_data value. I did not have
to invent a way to show growth without a rating — the schema had already refused to
average one.above_recorded_expectations, near_recorded_expectations,
below_recorded_expectations. Not the market, not other users. The compliance
answer is in the product's own vocabulary, so the page uses it verbatim rather than
paraphrasing.om_flywheel_aggregates is a
shipped view returning a consensus value, a dispersion and an n across users. It
is the most tempting widget anyone could add to this page and it is exactly what the brief
forbids. That is why the exclusion panel names it on the surface rather than in a comment
— the next person to design here reads the page, not my CSS.om_calibration_records.source_refs
is constrained to a non-empty array, and an om_saydo_outcomes row graded
delivered, partial or missed cannot be written without a source document and a verbatim quote
of at least eight characters. So the page states those as facts about the record, not as
promises about our diligence.observedRatePct comes back null when a confidence bucket is empty.
Drawing that as 0%, or as a line passing smoothly through it, would invent a data point about
a person. It is drawn as an empty level that says so.Colour is where a rating leaks in first, so there is a rule and it is
testable: --pos, --neg and --warn are reserved for
verdicts about a company — a management team delivered or missed its own
commitment, a filing added or removed a disclosure. They are never applied to the user's own
record. Nothing you did is green and nothing you did is red. Your record gets the accent for
"you completed this" and neutral cream for everything else. Emphasis, not approval.
Every figure is a count of rows and says which rows. Each one carries a
data-count-of naming a table that exists on origin/develop today. A
figure that cannot name its table is a derived index, and an index is a rating with the
arithmetic hidden. The test suite reads the attribute rather than trusting the copy.
The word "grade" appears on these pages, deliberately.
om_saydo_grade is delivered, partial or missed — a verdict on an executive
team's own promise, and the sharpest thing the product knows. On a page titled Progress it is
also the single most dangerous word available, so every card that carries one names its subject
in its own body: it grades the executive team, not you. Suppressing the word would have been
easier and would have removed a real capability from the record.
There is no forty-five degree line on the calibration chart, which every calibration chart in the world has. Confidence here is an ordinal one to five from the user's own snapshot, and nothing in the product maps those steps onto probabilities. Drawing the diagonal would invent the standard and then measure the reader against it — a rating, hidden in a dotted line.
Every company here is invented. Two reasons, and both are specific to this surface. A real ticker on a page showing recorded risks next to a "ready for your own decision" badge reads as a view on that security. And a say-do card needs a verbatim quote from a named executive — writing one and attaching it to a real person is not a design shortcut, it is a fabricated statement. The workspace says it is fictional on every page.
The numbers are one object in fixture.js that computes its own totals,
so the three directions cannot quote the same workspace and disagree by one.
These are clickable HTML concepts on shipped tokens, for a pick. Whoever builds the
chosen direction owns the build; the parts I would hold as acceptance criteria rather than taste
are the colour rule, the data-count-of discipline, the null bucket, the absent
diagonal, and the named subject on every grade.