How it works
From a board packet to a readiness tier
Each allocator gets one readiness tier. A tier is not a score or an opinion. It comes from the rules below, applied to approved signals. Every signal cites a public document and a page.
Find the plans
A registry of public plans and the pages where each one posts agendas, minutes and reports. A person approves it before any crawling.
Collect politely
GET-only, allowlisted hosts, robots.txt honored, 10 seconds between requests to a host, and a stop at any bot wall.
Extract signals
A language model reads each page and proposes signals, each with an exact quote. Contact details are scrubbed first.
Check every claim
The quote has to appear on the cited page. Dates come from the document. A lint rejects evaluative language.
Set the tier
Fixed rules turn approved signals into a tier. Only a person's approval lets a signal into an export.
Readiness rules config/readiness_rules.yaml
| Tier | Window | Signal types that set it | Meaning |
|---|---|---|---|
| DEPLOYING | 90 days | SEARCH_OPENED (manager only) SEARCH_SCHEDULED (manager only) RFP_ISSUED (manager only) FINALISTS_NAMED (manager only) MANDATE_AWARDED (manager only) |
A search or RFP is open (or scheduled on an agenda), finalists were named, or a mandate was awarded. |
| PREPARING | 180 days | MANDATE_AWARDED (manager only) COMMITMENT_MADE TARGET_ALLOCATION_CHANGED (increase only) IPS_AMENDED ASSET_LIABILITY_STUDY PACING_PLAN_ADOPTED CONSULTANT_CHANGED MANAGER_ON_WATCH MANAGER_TERMINATED |
A mandate awarded or a commitment made, target allocation raised, IPS amended, asset-liability or pacing study adopted, consultant changed, or an incumbent placed on watch or terminated. |
| WATCHING | — | none of the above | We fetched a new document in the last 120 days. No qualifying approved signal is in the window. |
| STALE | 120 days | coverage | No new document fetched for this allocator in 120 days. This shows where coverage is thin. It says nothing about the allocator. |
Tiers are checked top to bottom, and the first match wins. The window is counted back from today, using the date printed on the source (the meeting, notice or filing date). The date we fetched the document is never used.
Which plans appear on the main table
A plan is listed only when our coverage of it is good enough to read: at least 3 documents fetched, at least one dated in the last 6 months, and its investment consultant identified from a cited document (config/main_table.yaml). Plans below that bar are on Coverage gaps, with the reason. Each plan's page also has a coverage checklist: 18 months of agendas and minutes, plus the latest IPS, quarterly report, actuarial valuation, audited financials and 112.664 disclosure.
Auto-approval
A pending signal is auto-approved only if all four checks pass. (a) It is not a termination, watch-list change or redemption; those always go to a person. (b) It was read from a parsed table, or its quote matches the cited page word for word. (c) Its date was printed in the source as a meeting, report or filing date. (d) Its summary passes the language lint. Auto-approved signals set tiers, but they are never exported until a person approves them (config/auto_approval.yaml).
The Wall
No contact details anywhere
No model has an email, phone, address or social-profile field. People appear only by name and title, as the public documents print them.
Scrubber first
All text is scrubbed before it reaches the language model, the search index or any table. Contact-shaped text becomes [REDACTED-CONTACT].
No outbound capability
The crawler sends GET and HEAD requests only, to an allowlist of hosts. The system cannot send email or messages, and it cannot submit forms.
Tested every night
Wall tests sweep every stored text column. A canary packet full of fake contact details goes through the pipeline, and none of it may be stored.
What counts
- Only approved signals change a tier: approved by a person, or auto-approved under the four checks above. A new signal shows as pending review until it is approved or rejected.
- This public site shows approved signals only, and labels each one approved by a person or auto-approved. Pending and rejected signals are never shown here.
- A signal comes from one of two places. Either the extractor reads a fetched public document and quotes the page, or a person enters a fact from a manual-only source, with its URL and date.
- Summaries use factual verbs: reported, approved, voted, issued, awarded, terminated, placed on watch. A lint rejects evaluative words before anything is stored.
- The CSV export contains only signals a person has approved.