Peter Schafer

This site is being updated. The research model and the model portfolio are under revision, and pages showing positions and convictions are temporarily unavailable. They will return after September 30, 2026. Pages describing the method remain available.

Method

This page says how the research on this site is produced, in plain language. It is generated from the same records the rest of the site is generated from, so if the method changes here it is because the method changed.

Evidence comes from primary sources, cited

A claim about a company is made from that company’s own filings, read on disk, and it carries the citation with it — the accession number of the filing and the character offset where the sentence sits. A reader who wants to check a cell can go to the filing and find the words. Where a figure comes from somewhere other than a filing it is tagged as what it is: a market read, a computed value, an inference, a proposal, or a press or investor-relations statement. Nothing is asserted from memory, and a source that could not be fetched is recorded as unfetched rather than reconstructed.

The five documentary signatures, and their four states

Every layer of the constraint map is read for the same five tells — the things a supplier under real constraint tends to disclose.

Each one is recorded in one of four states, and the states are not opinions about the company — they are statements about the document:

A cell may also be marked weak, where the language points the right way without carrying the commitment.

How conviction is scored

Conviction is built from five judgments, not one: the thesis (is the argument sound), corroboration (do independent voices with a record support it), the fundamental picture from the filings, bottleneck exposure (is this name actually on the constrained layer), and a valuation ceiling. The factors do not average. Quality is bound by the weakest of them, so a single bad factor caps the name however strong the others are — a rule that exists to stop four good numbers from outvoting one disqualifying one. Conviction then determines how large a holding may be, through a fixed ladder applied identically to every name.

The factor values, the ladder and the resulting weights are not published. What is published is the shape of the reasoning and the direction of every change, with its date.

Calls are sealed before their outcome, and graded after

When a tracked voice makes a dated, checkable claim, it is written down with the test already attached: what would count as a hit, what would count as a miss, and what counts as silence if the source never speaks to it. Those three are fixed at sealing and never written afterwards, because a criterion written after the outcome is not a test. A claim with no grader and no earliest grade date is not sealed at all — it is recorded as awareness, and awareness corroborates nothing.

At this build the register holds 571 rows: 132 sealed and 396 awareness. 3 of them are resolved calls graded hit or miss; 10 carry a verdict that is still unresolved, and an unresolved call counts toward nothing; 1 carries a grade that was ruled invalid — graded on evidence that predated the claim — and is excluded from every count; 1 is a back-catalogue call whose outcome could already be read when it was written down, so it is recorded and excluded. That number is small on purpose: it is the honest state of a young record, and no hit rate is computed from it. Before any rate is computed, the sampling unit, the null it is tested against and the rule for when it may be looked at must be fixed in advance — see the calibration page.

Mistakes are recorded, not quietly fixed

When something published here turns out to be wrong, the correction is written into a record with the text before and the text after, and the page carries a note. Nothing is silently edited. The record holds 13 corrections and 44 updates at this build.

What this site does not claim

Generated at build from core/ladder.json, ledger/seal-register.json and ledger/corrections-record.json. Every count on this page is read from those records at build time; none is typed in.