Every workstream on one page: what is built, what is running, what it is producing right now, and what is still to be executed. For Chelsea, Caroline and John DeReamer.
Measured 2026-08-24 17:14:28 UTC (2026-08-24 13:14:28 EDT). This page is static: it shows the state at that instant and does not update itself. It is regenerated at 07:00 and 19:00 America/New_York.
Warehouse scope for every Snowflake figure on this page: account MLA96789, user RESOLUTE_ADMIN, role RESOLUTE_ADMIN, warehouse RESOLUTE_AI_WH, database RESOLUTE_MIND.RACING_DATA.
3 measurement(s) failed on this build. Each failed figure reads ERROR in place, and the reason is in that cell's tooltip and in the footer. A failed measurement is never shown as a zero.
The two sale-day field-sheet applications. Reachability was probed by HTTP GET from the Mac Studio at build time; everything else in this section was measured on 2026-08-12 and is carried forward.
URL: https://abbi-m1-bigscreen.tailfb6577.ts.net:8443/ — Tailscale funnel :8443 -> 127.0.0.1:8787 (team build, served at path /FxEINNCkHa/)
Hosting: Mac Studio, supervised by a bare `while true` shell loop, not a LaunchAgent
Built and working
Still to be executed
URL: https://v200-webapp-kee27-fieldsheet.pages.dev/ — Cloudflare Pages, so reading survives the Mac; live ticking still posts to the Mac over Tailscale
Hosting: Cloudflare Pages `v200-webapp-kee27-fieldsheet` + two LaunchAgents on the Mac
Built and working
Still to be executed
| # | Feature | State |
|---|---|---|
| 1 | Conformation module | Absent entirely — not a stub. The event schema has no slot for it: KINDS = ('vet','buy','out'). |
| 2 | Photos | Absent; no <img> anywhere. Keeneland's feed media fields are 0% populated today. |
| 3 | Video | Absent; zero hits across the whole tree. |
| 4 | Notes / comments with autosave | Protocol-ready but UI-absent: the server accepts note[:280], the client's mark() never sends one, and there is no textarea and no autosave. |
| 5 | Prospect tick | Absent; only Vet list and Short list. |
| 6 | Purchased tab | Absent — no ownership %, no partners, no shipper, no dates. |
| 7 | Vet / repository panel | Absent; 'Vet list' is a tick, not a repository. No radiographs, no scope, no vet findings fields. |
| 8 | Consignor filter | Dead code: honoured in applyView() but there is no control in the DOM. |
| 9 | Broodmare-sire filter | Absent — a column and a search term only. |
| 10 | Per-hip URL / page | Absent; drawer only, and the hash does not change. |
| 11 | Per-person chips, removal-with-reason, the 40-entry audit trail, the twin public/team build, the sub-tabbed vet list | All absent. |
Scope: enumerated by reading both source trees on 2026-08-12; each entry was confirmed by a grep of the Keeneland tree that returned no implementing code. Not re-measured on this build.
| Table | Rows | What it is |
|---|---|---|
PEDIGREE_LINKS | 40,705,303 | Sire/dam edges. The single largest object in the estate. |
STARTERS | 1,609,270 | One row per runner per race. LAST_RACE_DATE is 0.0000% populated. |
HORSES | 1,190,436 | The horse dimension. FOAL_DATE is populated on 3 rows. |
DIM_HORSE | 1,153,274 | The reconciled horse dimension built by the identity lane. |
SPEED_FIGURES | 982,450 | Multi-source figures. 14,027 rows are dated in the future and 1,393 have a NULL race date. |
PRODUCE_RECORDS | 812,675 | Mare produce records. FOAL_GRADE is 100% NULL and was rejected as a source. |
PAST_PERFORMANCES | 672,686 | Past-performance lines — a two-year window only. |
SALE_ENTRIES | 488,349 | Auction lots. The comparables backbone of both sale sites. |
COVERINGS | 437,998 | Coverings. COVERING_DATE is empty; only COVERING_YEAR is usable. |
WORKOUTS | 367,860 | Published workouts. |
RACE_RESULTS | 211,818 | Result rows. |
RACES | 153,633 | Race header rows. |
NARC_RATINGS | 85,472 | North American Rating Committee ratings. |
SCRAPER_LOG | 32,467 | The extraction fleet's own audit log — the source for section 3 of this page. |
Scope: RESOLUTE_MIND.RACING_DATA. Every figure is a real SELECT COUNT(*) executed at the measurement time above — not the SHOW TABLES / INFORMATION_SCHEMA estimate. The total covers all 122 base tables in the schema, not only the rows listed here.
| Empty table | What its emptiness costs |
|---|---|
EQUIPMENT_CODES | Equipment codes cannot be decoded. |
HORSE_REGISTRY | Superseded by HORSES / DIM_HORSE. |
NICK_RATINGS_INTL | The international nick lane never landed. |
OWNERS | Ownership joins return nothing, although STARTERS.OWNER_ID exists. |
P360_MATING_RESULTS | The Pedigrees360 mating lane never landed, although its sibling P360 tables did — and matings are what Resolute's own breeding decisions turn on. |
POINTS_OF_CALL | No running lines exist at all. Pace analysis is impossible. |
RACE_FRACTIONALS | No sectional times exist at all. Pace analysis is impossible. |
RESOLUTE_SALES | Resolute's OWN sales records are absent. |
Scope: the same query as above. A table appears here only if its real count is exactly 0. An empty table is a measured fact; it is not the same thing as a table that failed to be measured, which would read ERROR.
| Lane | Status | Reason | Who unlocks it |
|---|---|---|---|
pedigreequery | BLOCKED | needs PX-solver key (CAPTCHA bypass service) | Architect unlock, not an engineering task |
pedigrees360 | BLOCKED | needs paid-figure-data subscription credentials | Architect unlock, not an engineering task |
Scope: fleet headcount and the two credential-blocked lanes are recorded as of 2026-08-24, source pm-state.json. Live per-lane row counts for every non-blocked lane are the table below, measured at the top-of-page timestamp.
:3005 measures last-OK age, which is why it shows dead lanes as green — allbreed-pedigree has been logging STATUS='OK' | fetched 38 | written 0 | errors 5 around the clock since it last wrote a row. That is BUG-20260812-0014. On this page a lane that ran and wrote nothing is DEAD, and its run count is printed next to its zero so the shape of the failure is visible.PRODUCING = wrote at least one row in the last 24 h. STALLED = wrote rows within 7 days but nothing in the last 24 h. DEAD = wrote nothing at all in 7 days, however many times it ran.
Collected and derived are reported separately on purpose: the derived lanes manufacture hundreds of thousands of rows a day out of data the warehouse already holds, and adding the two together hides a collection failure completely.
| Lane | Status | Runs 24h | Rows written 24h | Runs 7d | Rows written 7d | Fetched 7d | Errors 7d | Days since last productive run |
|---|---|---|---|---|---|---|---|---|
brisnet | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | never |
equibase_charts | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | 36 |
equibase_results | DEAD | 0 | 0 | 106 | 0 | 4,231 | 4,231 | 38 |
equibase_workout_scraper | DEAD | 0 | 0 | 48 | 0 | 1,905 | 1,905 | 38 |
hkjc | DEAD | 108 | 0 | 572 | 0 | 6,840 | 0 | 20 |
pedigreequery-pod@3ba95bcad588 | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | 38 |
pedigreequery-pod@dff74ceec122 | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | 38 |
pedigrees360 | DEAD | 1 | 0 | 8 | 0 | 8 | 8 | 43 |
racelens | DEAD | 0 | 0 | 414 | 0 | 0 | 0 | 37 |
ragozin | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | never |
sl-race-scraper | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | 57 |
thorograph | DEAD | 0 | 0 | 0 | 0 | 0 | 0 | never |
allbreed-pedigree | STALLED | 96 | 0 | 673 | 3,394 | 26,092 | 1,890 | 2 |
pedigreequery | STALLED | 480 | 0 | 2,657 | 59 | 159,420 | 159,418 | 5 |
narc | STALLED | 96 | 0 | 673 | 42 | 4,018 | 140 | 1 |
equinedge | PRODUCING | 5 | 2,195 | 152 | 24,387 | 3,715 | 4 | 0 |
racingpost | PRODUCING | 1 | 475 | 8 | 3,951 | 425 | 0 | 0 |
hrn-results | PRODUCING | 1 | 314 | 8 | 1,502 | 80 | 0 | 0 |
jbis | PRODUCING | 1 | 47 | 8 | 47 | 96 | 0 | 0 |
horse_news | PRODUCING | 4 | 2 | 29 | 10 | 2,610 | 0 | 0 |
| Lane | Status | Runs 24h | Rows written 24h | Runs 7d | Rows written 7d | Fetched 7d | Errors 7d | Days since last productive run |
|---|---|---|---|---|---|---|---|---|
daily-freshness-audit | DEAD | 1 | 0 | 8 | 0 | 56 | 17 | never |
dedup | DEAD | 0 | 0 | 2 | 0 | 0 | 0 | never |
derived-produce | STALLED | 1 | 0 | 7 | 69 | 0 | 0 | 2 |
derived-inbreeding | PRODUCING | 1 | 379,621 | 7 | 2,657,321 | 0 | 0 | 0 |
identity.reconcile | PRODUCING | 48 | 234,040 | 337 | 1,678,760 | 1,680,436 | 0 | 0 |
derived-nicks-structure | PRODUCING | 1 | 117,241 | 7 | 820,431 | 0 | 0 | 0 |
completeness-audit-refresh | PRODUCING | 1 | 20 | 8 | 160 | 0 | 0 | 0 |
Scope: RESOLUTE_MIND.RACING_DATA.SCRAPER_LOG, one row per run. The 24 h and 7 d columns are SUM(RECORDS_WRITTEN) and COUNT(*) over RUN_STARTED_AT within that window. “Days since last productive run” is DATEDIFF from MAX(RUN_COMPLETED_AT) WHERE RECORDS_WRITTEN > 0 over ALL TIME, so it is not capped by the window; a lane with no productive run anywhere in the log reads never. Nothing in this table reads the STATUS column.
How old the newest row is, per source, for the two data classes the sale sites and the analytics depend on.
| Source | Rows | Newest row | Days stale |
|---|---|---|---|
horseracingnation.com | 1,795 | 2026-08-23 | 1 |
jbis.or.jp | 30 | 2026-08-23 | 1 |
racingpost.com | 38,051 | 2026-08-23 | 1 |
racing.hkjc.com | 14,667 | 2026-07-15 | 40 |
netkeiba.com | 11,052 | 2026-07-10 | 45 |
drf.com | 52,052 | 2026-07-09 | 46 |
equibase.com | 4,924 | 2026-07-08 | 47 |
sportinglife.com | 24,877 | 2026-07-08 | 47 |
open-pmu-api | 3,760 | 2026-07-05 | 50 |
sportinglife | 1,229 | 2026-06-28 | 57 |
HRN | 275 | 2026-06-28 | 57 |
timeform.com | 616 | 2026-05-14 | 102 |
eprochasson/horserace_data | 305 | 1995-02-22 | 11,506 |
Scope: RESOLUTE_MIND.RACING_DATA.RACES, grouped by SOURCE_SITE. Days stale is DATEDIFF(day, MAX(RACE_DATE), CURRENT_DATE()) at the measurement time above. Note the two duplicated source spellings (sportinglife vs sportinglife.com, HRN vs horseracingnation.com): they fragment any GROUP BY, including this one, and are listed here exactly as they appear in the column rather than merged.
| Source | Rows | Newest row | Days stale |
|---|---|---|---|
keeneland.com | 298,667 | 2026-04-24 | 122 |
inglis.com.au | 4,377 | 2026-03-01 | 176 |
goffs.com | 2,699 | 2026-01-01 | 235 |
arqana.com | 1,569 | 2026-01-01 | 235 |
tattersalls.com | 92,899 | 2025-10-01 | 327 |
fasigtipton.com | 73,020 | 2024-11-04 | 658 |
obssales.com | 11,533 | 2024-03-01 | 906 |
capethoroughbredsales.com | 3,585 | 2022-02-01 | 1,665 |
Scope: RESOLUTE_MIND.RACING_DATA.SALE_ENTRIES, grouped by SOURCE_SITE. Days stale is DATEDIFF(day, MAX(SALE_DATE), CURRENT_DATE()) at the measurement time above. This is the most degraded lane in the warehouse, and it is the table the Keeneland September comparables are built on.
The work still to be executed, counted from the three companion documents that sit alongside this dashboard, plus the defects filed and not yet fixed.
| Companion document | Open items | What is counted |
|---|---|---|
| Data Extraction Completion List Data-Extraction-Completion-List.html source document not readable on this build — the count shown is cached from 2026-08-18 | 21 | numbered work items (X1-Xn), in four blocks: Restoration, the licensing decision, genuine new coverage, and quality fixes |
| Keeneland Sale Site Completion List Keeneland-Completion-List.html source document not readable on this build — the count shown is cached from 2026-08-18 | 23 + 11 | numbered work items (K1-Kn), in four tiers: Preservation, the conformation module, availability, and parity features; plus 11 recorded risks (R1-Rn), carried rather than resolved |
| Continuous Data Refresh — Research Decision Continuous-Refresh-Research-Decision.html source document not readable on this build — the count shown is cached from 2026-08-18 | n/a | a decision document — it carries no numbered work items. The open decision it holds: obtain the negotiated commercial licence price, between the two measured anchors of ~$3,000/yr (TrackMaster retail) and ~$60,000/yr (the Equibase per-file equivalent) |
Scope: these counts are parsed out of the companion documents themselves at build time, from /private/tmp/claude-501/-Users-abbiadmin/276e123c-6e99-46e3-a2c1-01644f8e81a5/scratchpad, by counting distinct item identifiers. They are not transcribed by hand and so cannot drift from the lists. If a document is unreadable the last successful count is shown with its date and marked stale; if there has never been one the cell reads ERROR.
| Bug | Severity | What it is |
|---|---|---|
BUG-20260812-0012 | P2 / HIGH | The collection controller has been inert for 24 days. Every guard in monitor/racing_monitor.py — proxy recovery, bandwidth, duplicate recovery, silent-stall detection, the staleness sweep, alerting and paging — runs only in the else-branch that requires all six docker containers up. The 2026-07-19 Azure migration put worker and flaresolverr behind a compose profile, so they are permanently absent and the loop takes the missing: branch every 300s forever. Last healthy pass 2026-07-18T23:31:17. |
BUG-20260812-0013 | P2 / HIGH | RESOLUTE_SCRAPEDO_KEY is absent from the live Azure worker. The four Equibase-family lanes fetch exclusively via scrapedo_get, and scrape.do is the only method proven to clear PerimeterX. With the key absent the code logs 'RESOLUTE_SCRAPEDO_KEY not set' and writes nothing. RESOLUTE_RESIDENTIAL_PROXY is also absent, disabling the IPRoyal metered-escalation path. |
BUG-20260812-0014 | P3 / MEDIUM | A dead lane reads green. Both health consumers — the old dashboard's status column and check_all_scrapers — measure the AGE OF THE LAST OK RUN, never rows produced. THIS DASHBOARD IS BUILT AGAINST THAT DEFECT: every status in section 3 is rows-written-over-window. |
BUG-20260812-0017 | P1 / CRITICAL | The Saratoga generator source root is a Claude Code session scratchpad under /private/tmp, 502 files, no .git anywhere, supervised by a bare `while true` loop rather than a LaunchAgent. /private/tmp is subject to OS temp reaping; if either scratchpad is reaped the sheet cannot be rebuilt and the conformation module source is lost outright. |
Scope: the four defects filed against the Resolute programme and open as of 2026-08-12. Recorded, not re-measured on this build.
Feature-by-feature parity against the Saratoga build (section 1 above lists all 11 parity gaps in full; this checklist is the PM tracking view of the same work, plus items Saratoga does not have either). DATA-BLOCKED means no engineering unblocks it — the item needs data that will not exist until the sale itself runs.
| Status | Item | Note |
|---|---|---|
| DONE | Value rank renamed | was a trap — price rank, not value |
| DONE | localStorage Safari Private fix | |
| DONE | Pass control 'out' button wired | |
| TODO | Comments surface | zero comment UI exists |
| TODO | Mare NARC ratings | available for 1,935 identity-corroborated dams |
| TODO | Read tile with merit percentile | |
| TODO | Broodmare sire and consignor filters | applyView already honours f.consignor — control not added to shell |
| TODO | Per-person selection | Saratoga filters to 10 named people |
| TODO | Ticked-by sort fix | key 'mk' not carried by index rows |
| TODO | Conformation module port | from Saratoga dev build |
| DATA-BLOCKED | Vet layer | no vendor vetting for Sept 2026 yet |
| DATA-BLOCKED | Market per-hip | sale hasn't run |
| DATA-BLOCKED | Purchases tab | nothing bought yet |
| DATA-BLOCKED | Live sale-day results feed |
Scope: recorded 2026-08-24, last updated 2026-08-24 via pm-state.json. This is a tracked checklist, not a live measurement — it changes when the work changes, not on every build.
Every open action across the programme, one owner and one due date each. Edited directly in pm-state.json alongside this generator, so ownership and status can change without a code deploy.
| Item | Owner | Status | Due |
|---|---|---|---|
| PX-solver key for pedigreequery | Architect | BLOCKED | TBD |
| Paid-figure-data credentials for pedigrees360 | Architect | BLOCKED | TBD |
| Keeneland site feature parity | ABBI | IN PROGRESS | 2026-09-10 |
| Data completeness audit | ABBI | IN PROGRESS | 2026-09-01 |
| Conformation module port | ABBI | TODO | 2026-09-10 |
| Email team for status | ABBI | DONE | 2026-08-24 |
Scope: 6 item(s), source pm-state.json, as of 2026-08-24. Two items are Architect unlocks (a credential only he holds), not engineering tasks — they cannot be closed by building anything.
Days remaining, counted from this build's measurement time to Keeneland September 2026 (Sept 14–26).
Preparation window 2026-08-01 → 2026-09-14 — 52.3% elapsed
Scope: dates are fixed calendar constants in this generator (Keeneland September 2026-09-14–2026-09-26, milestone due dates matching section 7); days-remaining is computed live at each build against the measurement timestamp above. The preparation-window bar's start date (2026-08-01) is a display anchor for the bar's width, not a recorded project-kickoff date.