FormCrawler Changelog
Version 10 · Record seven harness/greyhound adapters, jurisdiction pages, uncapped full-day validation, integrity checks, and bounded limitations.
Historical versionFormCrawler Changelog
<!-- harness-greyhound-full-validation:start -->
2026-08-08 - Harness and greyhound jurisdictions and full-day validation
Added
- Implemented seven raw-acquisition adapters: Harness Racing Australia, HRNZ, Standardbred Canada, HVT harness, SNAI harness, Greyhound Racing Ireland, and Kincsem Park greyhound.
- Added one source-specific jurisdiction page for each adapter, including routes, commands, raw artifact and handoff structure, supplementary data, breeding/profile availability, limitations, and module history.
- Corrected the Kincsem catalogue entry from trotting to the official greyhound calendar, card, and result routes.
Full validation
- The complete suite passes 123 tests with
ResourceWarningtreated as an error. - Canada captured 14/14 current entry cards and 9/9 meetings from the selected results day; HVT captured a complete starter/result day through the approved proxy.
- SNAI captured 11/11 current cards and 3/3 selected-day results; Kincsem captured its year control and complete pre/post day; HRNZ captured 2/2 current fields and 8/8 published results.
- GRI captured all 29 published current cards and 9/9 selected-day results. One future 15-August card remained not-ready after a bounded recheck.
- HRA captured 25/26 current cards, but remained partial for a complete national results day: two bounded dates yielded 2/7 and 1/3 ready result pages.
- Every stored full-test artifact passed recomputed byte-length and SHA-256 checks plus metadata and FormParser handoff identity/URI validation.
Safety and limitations
- All requests used the shared 15-25-second host limiter, bounded retries, kill switch, and normal source readiness validation.
- HVT used the approved Racing and Sports public-GET proxy after the known direct challenge. No authentication, CAPTCHA, licensing boundary, or access control was bypassed.
- Listed but unpublished future pages remain retryable and are not classified as successful captures or transport failures. <!-- harness-greyhound-full-validation:end -->
2026-08-08 - Selangor completion review
Reviewed
- Re-reviewed
my_selangor_turf_clubbefore a complete-day live run. - Confirmed the dated whole-meeting racecard is the pre-race control and discovers exactly one same-date whole-meeting results target.
- Confirmed strict HTTPS host/path/query/date validation and separate readiness markers for racecards and results.
Verification gate
- Four focused Selangor tests passed.
- The complete 152-test suite passed with
ResourceWarningpromoted to an error. - Python compilation and
git diff --checkpassed. - No outstanding implementation issue blocks the complete pre-race/results day test.
Complete-day live result
- The unlimited 26 July 2026 Selangor run captured both the whole-meeting racecard and results on attempt 1 with no retry-wait or failed targets.
- The 805,712-byte pre-race artifact and 545,777-byte post-race artifact each contain all 12 race sections.
- Recomputed SHA-256 values match the queue and metadata, and both FormParser handoffs match their artifact, content, and metadata references.
2026-08-08 - Results-only acquisition and shared runtime behavior
Added
- Added repeatable
capture-date-range --page-typefiltering before discovered targets enter the queue. - Added
crawl_racing_australia_results.bat <start> <end> [limit]for full, bounded, discovery-only, and resumable results ranges. - Added
crawl_racing_australia_today.batfor all indexed Australian meeting lifecycle pages on the local date. - Added shared command-line status routines with
[HTTP],[PROXY],[DISCOVERY],[RANGE], and[QUEUE]transient states plus stable permanent summaries. - Added automatic Racing and Sports proxy fallback after a direct public GET receives
403or429; proxy-only mode remains available.
Safety and behavior
- Results-only filtering happens before queue insertion and creates no program, acceptance, gear, or scratching targets.
- Proxy fallback supports public GET only, limits both destination and gateway hosts, retains
racingandsports_proxyprovenance, and still applies source validation. - Failed or ineligible proxy fallback returns to the existing first-block pause, repeated-block hard stop, retry limits, and external kill switch.
Verification
- A bounded
2026-08-07Australian results run captured one weekly index, discovered five meetings, and queued five result targets only. - The 190,581-byte Coffs Harbour result returned HTTP 200 with zero retries and failures. SHA-256
b7062597bc8e307b20cd34ce9c987eba26c5bbe0b3a547939fa405e88726cb72and the FormParser handoff matched. - Automatic challenge-to-proxy behavior and default/forced transport selection have regression coverage.
- All 89 tests pass with
ResourceWarningpromoted to an error.
2026-08-08 - Country crawler documentation
Added
- Added
country-australia-racing-australiaand synchronized version 2 with the weekly homepage index, inclusive date-range workflow, range launcher, direct meeting seeds, five-page bundle, 75-test status, and live range verification. - Added
country-germany-deutscher-galoppand corrected its Unicode labels in version 2. - Added
country-chile-hipodromo-chileand corrected its accented source title in version 2. - Added
country-uruguay-maronasversion 1 for meeting XML, range calendar JSON, and exact horse-profile JSON workflows. - Added
country-argentina-stud-bookversion 1 for monthly calendar and complete meeting HTML capture.
Country-page standard
Every country page now records:
- program and adapter names, source ID, racing code, ISO code, and source module;
- key public pages and first-party endpoints;
- capture workflow and readiness rules;
- source response and artifact data structure;
- batch launcher and generic CLI examples;
- storage and FormParser handoff paths;
- limitations, recovery, and live verification;
- a reverse-chronological changelog for that specific country module.
Updated
- Updated
form-crawler-programsthrough version 3 as the index for all five country modules, current CLI commands, both Racing Australia launchers, artifact forms, storage, and Robert's proxy transport. - Updated
overviewthrough version 3 with the current five-country architecture, Racing Australia range command, 75-test status, and country-page references. - Documented Robert's Racing and Sports proxy contract and its public-GET boundary while retaining source validation and dual-host request limiting.
<!-- site-catalogue-changelog:start -->
2026-08-07 - Candidate racing-site catalogue
Added
- Added
documents\SITE_LINKS.mdas the local planning catalogue for Thoroughbred, Harness, and Greyhound candidate sources derived from the supplied workbook. - Added the supplied Denmark (
DEN) and Morocco URLs that were missing from the workbook inventory. - Proposed stable source IDs for planning and documented
source_idas the website, feed, or source-definition segment in<discipline-root>\<year>\<race_code>\<source_id>.
Documentation and verification
- Reformatted the catalogue as
Country: Site name (source_id)followed by an individual URL line. - Verified 67 named entries, 66 URL occurrences, and 57 unique URLs with no embedded
<br>tags or Markdown tables. - Updated
formcrawler/scraping-urls-listthrough version 4 while preserving the active Deutscher Galopp configuration and common request controls.
Scope boundary
- Candidate URLs are reference inventory, not approved crawl scope.
- Proposed source IDs remain subject to confirmation when adapter boundaries, allowed hosts and paths, capture behaviour, and tests are designed. <!-- site-catalogue-changelog:end -->
2026-08-07 - Initial German post-race acquisition workflow
Source commit: 816f590 - Add German post-race meeting acquisition workflow
Added
- Reusable Python acquisition package with shared models, HTTP retrieval, request policy, immutable storage, orchestration, and source-adapter registration.
- Deutscher Galopp adapter for individual race URLs and race-target discovery from supported calendar, meeting, and race pages.
- Complete-meeting capture starting from one race URL.
- Backend-neutral crawl-state interface.
- SQLite development adapter with target deduplication, discovery provenance, capture attempts, artifact history, retry scheduling, expiring leases, stale-worker protection, and queue summaries.
- CLI commands:
capture,discover,run-queue,capture-meeting, andqueue-status. - FormParser inbox handoffs using content and metadata URIs.
- Mandatory scraping safeguards: serialized same-host access, 10-second base delay, 5-15 seconds of jitter, retry/backoff limits, response-size enforcement, circuit breaking, shared local rate-limit state, and an external kill switch.
- External runtime-data ownership under
C:\Users\Robert\project-data. - Docker/EKS portability decision with replaceable storage, queue/state, and rate-limit adapters.
Data classification
- German Thoroughbred artifacts use racing jurisdiction code
GER. - ISO country metadata remains
DE. - Discipline is
Tand artifacts are stored beneatht-artifacts. - Runtime data and downloaded content are excluded from Git; only program source, tests, scripts, and documentation are versioned.
Verification
- All source modules compiled successfully.
- 14 unit tests passed.
- Live seed race
1364507discovered 9 meeting targets. - Queue result: 9 captured, 0 failed.
- All stored content hashes and FormParser URI references were verified.
- Eight live same-host request gaps fell between 15.949 and 24.660 seconds.
Known next work
- Add formal FormParser validation for the
1.0.0handoff and artifact contracts. - Define retention and repeated-snapshot content-deduplication behavior.
- Add conditional HTTP requests.
- Agree and implement scheduled calendar discovery.
- Implement shared cloud storage, queue/state, and rate-limit adapters before EKS deployment.
2026-08-08 - Thoroughbred source expansion
- Classified every supplied Thoroughbred source in
documents/SITE_LINKS.md, including supplementary data and breeding/horse-profile availability. - Added or completed 20 source adapters and repeatable date-range launchers across the wider source-research run.
- Live-validated Hungary, UAE, Bangalore and Hyderabad end to end, including immutable hashes, metadata and FormParser handoffs.
- Stopped Saudi JCSA after the requested three validation attempts and recorded the precise validator limitation.
- Published per-source status pages and
thoroughbred-source-research-2026-08; the complete suite passes 152 tests withResourceWarningpromoted to an error.