The map · Part Two · The machine · Chapter 15 of 23
Where the data lives and how it is kept honest
Every figure with its origin, every valuation with its eight declarations, every run with its own row. Why a valuation that cannot complete its record prints nothing rather than a number with a warning. About 8 minutes.
Part One said every figure carries where it came from. This chapter is about where that goes, and about the one rule that keeps the whole record trustworthy: a number with a gap in its origin is not printed with a caveat. It is not printed.
Four places a figure can live
- The run database. One row per company per nightly run: the price, the computed figures, the verdict codes, the blockers. Nothing reads it back yet; it exists to accumulate, so the history can be reconstructed later.11vss/store.py.
- The fundamentals store. Every period of accounts ever fetched for a company, kept for good. A quarter never displaces a year. A store that pruned old periods would make an old valuation impossible to rebuild.22Ruling E49: the store retains every period it has ever fetched. Ruling E17: a quarter never displaces a year.
- The screener snapshots. One small database per screening run, holding raw daily prices, never computed figures, plus the list of names, the rejections and a fetch status per company. The last four price snapshots are kept; every ranking is kept forever, because every future comparison stands on it.33vss/snapshot.py; retention described in the project brief §6.5.
- The owner's file. Statuses, tiers, values, stops, notes, and hand-entered figures. Tracked under version control, on the owner's decision, so that the history of decisions is in the history of the file.44README on config/watchlist.yaml, tracked since 2026-08-25.
The run record: eight declarations or nothing
A valuation is not a number. It is a number plus everything that was decided to get it. So before a value may be printed, the run record for that valuation must declare eight things: which share count was used and as of when; how share-based pay was treated; where the company books its interest, and therefore what "free cash flow" means for it; every item in the bridge from the value of the whole business to the value of its shares; the arithmetic conventions; the discount rate with its anchor and the growth rate with the view it came from; the three as-of dates and the price date; and the origin of every input.55vss/runrecord.py: 'A RUN WITHOUT A COMPLETE RECORD DOES NOT PRINT A FAIR VALUE. Not \'prints one with a warning\'.'
Why refusing beats continuing
Seven of the eight declarations are in place. The share count is present but the date it was stated is not. Print the value anyway, with a note: "share count date unknown". The owner will see the note.
The valuation raises an error and prints no value for that company. The report says which declaration is missing. The other companies in the same run are unaffected: one name's missing declaration is that name's DATA MISSING, never a reason to stop the run for the rest.
The note would be read the first time and not the tenth. A number on a page is a number; the caveat beside it is decoration, and decoration gets ignored. The only caveat that cannot be ignored is the absence of the number. So the record refuses, and the refusal is a line in the report that says what to go and find.
Two levels of refusal exist, and it is worth being exact. A bad or missing figure for one company degrades that company's row and nothing else; the nightly run is built so that one name never breaks it. A corrupt owner's file, a malformed entry or a hand-typed buy price, stops the whole run before it starts, loudly, because a run on a corrupt file would write corrupt rows into the record for every name.66The runner catches per-name exceptions and continues ('one name never breaks it'); the configuration loader fails the whole run on a malformed entry or a provenance conflict.
Checked, unchecked, absent, not there
A figure's verification state travels with it. It enters unchecked. A person reads it back against the page named beside it and marks it checked, and the mark says which kind of check: against the regulator's structured data, across two separate documents, or against the same page it came from. Where a figure was searched for in a full report and is not there, the record says so, which is different from a zero and different from absent.77Verification kinds: ruling E40 and vss/manual.py. Not presented: ruling E85. A zero needs a basis: ruling E25.
Two independent readings agreeing is what makes a figure the owner's. Where two readings disagree, the figure is re-extracted before anyone escalates it, because the first question about a disagreement is whether one reading was simply wrong.88Ruling E104.
Aborting a screen on a hole
The screener has one place where it stops rather than continues: when a quarterly comparison it needs cannot be formed because a quarter is missing, it breaks the run rather than killing a name on a hole. A revenue-decline test that fails a company for a quarter the vendor did not supply would be exactly the two-outcome error of chapter 9, at scale.99vss/filters.py, the revenue limb: a comparison the quarters cannot form 'breaks the run rather than kill on a hole'.
- Decided
- A valuation prints a value only with a complete record of eight declarations; otherwise it prints nothing for that name and says what is missing. One name's failure never stops the run; a corrupt owner's file stops it before it starts.
- Why
- A caveat beside a number is read once. An absent number is read every time.
- Cost
- Names sit valued at nothing for as long as one declaration is missing, and the report is longer for saying why. The owner spends evenings finding share-count dates.
Sources for this chapter
- The record, the run record and the store — read from this repository: vss/store.py; vss/runrecord.py; vss/snapshot.py; vss/manual.py; vss/runner.py; reference/FRAMEWORK-EDITS.md E17, E25, E40, E49, E85, E104
The slow way, made survivable. Built 2026-09-13 from the repository as it stood that day. NAME A and NAME B are fictional; no company, price or holding appears on this site. Not financial advice: one private investor's method, shared as it is.