Resolute — programme activity

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-15 23:00:05 UTC (2026-08-15 19:00:05 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.

1 · Sale sites

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.

Saratoga — Fasig-Tipton, 2026 — ABBI.023

Hips
226
across 2 sessions · recorded 2026-08-12
Reachable now
HTTP 200 165 bytes
HTTP GET, 20s timeout, from the Mac Studio at the measurement time

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

Keeneland — September 2026 — ABBI.027

Hips
4,635
across 12 sessions · recorded 2026-08-12
Reachable now
HTTP 200 4,970 bytes
HTTP GET, 20s timeout, from the Mac Studio at the measurement time
Parity gap outstanding
11
features Saratoga has that Keeneland does not

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

The parity gap — 11 features Keeneland lacks that Saratoga has

#FeatureState
1Conformation moduleAbsent entirely — not a stub. The event schema has no slot for it: KINDS = ('vet','buy','out').
2PhotosAbsent; no <img> anywhere. Keeneland's feed media fields are 0% populated today.
3VideoAbsent; zero hits across the whole tree.
4Notes / comments with autosaveProtocol-ready but UI-absent: the server accepts note[:280], the client's mark() never sends one, and there is no textarea and no autosave.
5Prospect tickAbsent; only Vet list and Short list.
6Purchased tabAbsent — no ownership %, no partners, no shipper, no dates.
7Vet / repository panelAbsent; 'Vet list' is a tick, not a repository. No radiographs, no scope, no vet findings fields.
8Consignor filterDead code: honoured in applyView() but there is no control in the DOM.
9Broodmare-sire filterAbsent — a column and a search term only.
10Per-hip URL / pageAbsent; drawer only, and the hash does not change.
11Per-person chips, removal-with-reason, the 40-entry audit trail, the twin public/team build, the sub-tabbed vet listAll 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.

2 · Data warehouse

Total rows
54,152,461
122 base tables in RESOLUTE_MIND.RACING_DATA
Empty tables
8
base tables holding exactly 0 rows
TableRowsWhat it is
PEDIGREE_LINKS40,701,853Sire/dam edges. The single largest object in the estate.
STARTERS1,609,270One row per runner per race. LAST_RACE_DATE is 0.0000% populated.
HORSES1,190,432The horse dimension. FOAL_DATE is populated on 3 rows.
DIM_HORSE1,153,270The reconciled horse dimension built by the identity lane.
SPEED_FIGURES958,063Multi-source figures. 14,027 rows are dated in the future and 1,393 have a NULL race date.
PRODUCE_RECORDS812,606Mare produce records. FOAL_GRADE is 100% NULL and was rejected as a source.
PAST_PERFORMANCES672,686Past-performance lines — a two-year window only.
SALE_ENTRIES488,349Auction lots. The comparables backbone of both sale sites.
COVERINGS437,998Coverings. COVERING_DATE is empty; only COVERING_YEAR is usable.
WORKOUTS367,860Published workouts.
RACE_RESULTS205,211Result rows.
RACES152,692Race header rows.
NARC_RATINGS85,430North American Rating Committee ratings.
SCRAPER_LOG26,285The 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.

The gaps — base tables holding exactly zero rows

Empty tableWhat its emptiness costs
EQUIPMENT_CODESEquipment codes cannot be decoded.
HORSE_REGISTRYSuperseded by HORSES / DIM_HORSE.
NICK_RATINGS_INTLThe international nick lane never landed.
OWNERSOwnership joins return nothing, although STARTERS.OWNER_ID exists.
P360_MATING_RESULTSThe Pedigrees360 mating lane never landed, although its sibling P360 tables did — and matings are what Resolute's own breeding decisions turn on.
POINTS_OF_CALLNo running lines exist at all. Pace analysis is impossible.
RACE_FRACTIONALSNo sectional times exist at all. Pace analysis is impossible.
RESOLUTE_SALESResolute'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.

3 · Extraction fleet

How status is decided on this page, and why it differs from the old dashboard. A lane's status here is rows written over a window. It is never the age of the last run that reported OK. The dashboard at :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.

External lanes producing
4 / 20
wrote ≥1 row in the last 24 h
External lanes dead
14
0 rows written in 7 days
External rows collected
4,366
last 24 h · 181.9 rows/hour
Derived rows
736,542
last 24 h · computed from data already held, not collected

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.

External collection lanes

LaneStatusRuns 24hRows written 24hRuns 7dRows written 7dFetched 7dErrors 7dDays since last productive run
allbreed-pedigreeDEAD950671025,4983,40824
brisnetDEAD000000never
equibase_chartsDEAD00000027
equibase_resultsDEAD00000029
equibase_workout_scraperDEAD00000029
hkjcDEAD107063011
pedigreequeryDEAD0014808,8388,83810
pedigreequery-pod@3ba95bcad588DEAD00000029
pedigreequery-pod@dff74ceec122DEAD00000029
pedigrees360DEAD10707734
racelensDEAD00000028
ragozinDEAD000000never
sl-race-scraperDEAD00000048
thorographDEAD000000never
jbisSTALLED1071088401
narcSTALLED960672604,0121303
equinedgePRODUCING73,6643820,31186700
racingpostPRODUCING149073,24533300
hrn-resultsPRODUCING120971,3017000
horse_newsPRODUCING432892,42000

Derived / internal lanes

LaneStatusRuns 24hRows written 24hRuns 7dRows written 7dFetched 7dErrors 7dDays since last productive run
daily-freshness-auditDEAD10704911never
dedupDEAD001000never
derived-produceDEAD10700010
derived-inbreedingPRODUCING1379,61472,657,298000
identity.reconcilePRODUCING48239,7463361,673,4781,675,43200
derived-nicks-structurePRODUCING1117,1627820,134000
completeness-audit-refreshPRODUCING1207140000

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.

4 · Freshness

How old the newest row is, per source, for the two data classes the sale sites and the analytics depend on.

Races — days stale by source

SourceRowsNewest rowDays stale
horseracingnation.com1,3452026-08-141
racingpost.com37,5662026-08-141
jbis.or.jp242026-08-132
racing.hkjc.com14,6672026-07-1531
netkeiba.com11,0522026-07-1036
drf.com52,0522026-07-0937
sportinglife.com24,8772026-07-0838
equibase.com4,9242026-07-0838
open-pmu-api3,7602026-07-0541
sportinglife1,2292026-06-2848
HRN2752026-06-2848
timeform.com6162026-05-1493
eprochasson/horserace_data3051995-02-2211,497

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.

Sales — days stale by source

SourceRowsNewest rowDays stale
keeneland.com298,6672026-04-24113
inglis.com.au4,3772026-03-01167
arqana.com1,5692026-01-01226
goffs.com2,6992026-01-01226
tattersalls.com92,8992025-10-01318
fasigtipton.com73,0202024-11-04649
obssales.com11,5332024-03-01897
capethoroughbredsales.com3,5852022-02-011,656

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.

5 · What remains

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 documentOpen itemsWhat is counted
Data Extraction Completion List
Data-Extraction-Completion-List.html
21numbered 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
23 + 11numbered 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
n/aa 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.

Open defects — filed, none fixed

BugSeverityWhat it is
BUG-20260812-0012P2 / HIGHThe 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-0013P2 / HIGHRESOLUTE_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-0014P3 / MEDIUMA 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-0017P1 / CRITICALThe 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.