Historical Changelog
Version 1 · Created a reverse-chronological project history from the repository changelog, handover corrections, validation evidence and Git baseline.
Historical versionChangelog
This page consolidates the repository's historical changelog, handover corrections, validation notes, and Git baseline. Entries are in reverse chronological order. Dates are absolute.
2026-08-08 - Repository and knowledge-base baseline
Added
- Established the canonical private GitHub repository at RQDG/Gary-Breeding-Project.
- Initialised branch
mainand pushed baseline commit114d269(Initial commit: port breeding report tooling). - Created the QDG KB project
gary-breeding-projectwith overview, historical changelog, and report-output documentation.
Changed
- Expanded
.gitignoreto exclude credentials, environment overrides, Python/Node caches, build outputs, editor files, generated report files, validation directories, SQL dumps, and logs. - Removed generated report and validation artifacts from the initial Git history before its first push.
- Preserved tests, source, renderer fixtures, matrix CSVs, schema/reference documents, and original golden PDFs in Git.
Verification
- Workstream A: 24 selected tests passed; one live integration test deselected.
- Workstream B: 30 selected tests passed; two live integration tests deselected.
- Node syntax checks passed for
renderer/render.jsandrenderer/lib/chromosome.js. - Remote
mainand localmainboth resolve to114d269fa5788c4cacc4773b67996c1ae5fcaed9.
Known metadata issue
The living documentation and package version do not currently agree: CHANGELOG.md says 0.5.2, HANDOVER.md says 0.5.1, and breeding_report_v3.__version__ says 0.4.1. Treat the dated changelog and repository commit as authoritative until version metadata is reconciled.
2026-08-05 - Group B and Group C reports completed
Added
Six remaining report builders were ported from the legacy TrotBetAdmin PDFController.cs:
sire_progeny/ New Sire Breakdownorder_of_foal_report/ Order of Foal Statsdamsire_timeform_statssire_forensic_reportdam_sire_report/ Individual DamSire Statisticsbs_breeding_report/ Bloodstock Dam
Other additions:
MySqlQueryRunner.call_multi()for ordered multi-result-set queries.ReportModel.tablesandReportModel.extrafor non-pedigree table reports.BSParentandReportModel.bs_parents.breeding_report_v3/bsparent.py, porting the legacyFillBSParentpath.- CLI
params_onlydispatch for multi-ID reports. - An
id_paramoverride so the DamSire report can reuse--sire-idwhile treating it asdamSireId. - Generic table and Bloodstock Dam renderer functions.
validate_group_bc_against_odin.bat.
Changed
- The JSON shared-reference guard now supports both
RSParentandBSParent. - The PDF conversion path tries
sofficefirst on Windows andlibreofficefirst elsewhere.
Validation status
All six builders passed fake-runner wiring and serialisation checks, and the renderer passed syntax checks. They have not yet been executed end-to-end against live rs data. The generated DOCX files therefore still require SQL and visual review.
The Sire Forensic validation script currently assumes foal year 2021 and the date range 2022-01-01 through 2026-02-01. These parameters need business confirmation.
2026-08-05 - Group A validation and four confirmed fixes
Fixed
build_seasonal_stats()now forwardsstats_beforeinstead of always using live data.- The renderer now parses date-only ISO values by their year/month/day components, preventing an AEST/UTC one-day rollback.
- Sire Report V2 now renders the Seasonal Stats section that was already present in its JSON.
- The sire description is composed from age, colour, and parent type, matching the legacy Razor view rather than reading a non-existent
Descriptionproperty.
Verification
A live rerun confirmed:
- Foal date renders as
06 Sep 2015. - Last race date renders as
02 Nov 2019. - Description renders as
11yo BR Stallion; the age difference from an older golden is live source-data drift. - Sire Report V2 includes Seasonal Stats and the
Allcolumn. - Standalone Seasonal Stats includes only 23/24, 24/25, and 25/26 under the cutoff.
- The three season values match between the two reports.
Operational finding
A stale breeding_report_v3/__pycache__ initially caused old behavior to run after source files were updated. Clearing the cache resolved the mismatch.
2026-08-04 - Shared QDB connection with explicit RS reads
Changed
- Both Python packages now default to
C:\Users\Robert\projects_config\db.json. - The active connection may open QDB while legacy report queries use explicitly qualified
rs.*tables. - Remaining unqualified sibling-query references were corrected.
- Configuration precedence and schema-qualification tests were added.
Verification
Live application execution confirmed active database qdb, visibility of both qdb and rs, access to sire 93686, and successful sibling-query execution.
2026-07-03 - Sire Report V2 and Seasonal Stats
Added
build_sire_report_v2()build_seasonal_stats()- CLI report entries
sire_report_v2andseasonal_stats - Sire/dam overview rendering
- Race record and strike-rate rendering
- Stake win/place table
- 100+ Timeform progeny tables split by sex
- Progeny-by-age rendering
- Dynamic seasonal-stat tables
- R&S disclaimer block
- Renderer dispatch by
report_type
Verification
Both report types were initially exercised with synthetic JSON and checked by extracting text from the generated Word document XML. The subsequent live validation and fixes are recorded in the 2026-08-05 entry.
2026-06-27 - Phase 4 renderer
Added
- Programmatic DOCX renderer using the Node
docxlibrary. - Foal Index header and total-score presentation.
- Pedigree Score table with criteria groups and Matrix Model Value section.
- Four-generation XX Chromosome Pathway grid.
- Australian sire and broodmare-sire ranking tables.
- Golden-derived
renderer/sample_report.json. - Optional LibreOffice headless PDF conversion.
- Renderer usage documentation and output exclusions.
Verification
The sample report rendered successfully and was visually checked against the Foal Index golden. Content matched the score, chromosome, and ranking sections. Pagination remained approximately four pages versus the legacy three.
2026-06-27 - Phase 2 orchestration, scoring and JSON contract
Added
fmt.pyfor C#-compatible numeric, percentage, rounding, and text formatting.siblings.pyfor sibling and sales data.rankings.pyfor Australian sire and broodmare-sire rankings.matrix.pyfor the four matrix CSVs and band matching.scoring.pyfor sire/dam-line criteria, stake and peak calculations, and catalogue statistics.orchestrator.pyfor full pedigree assembly, cross positions, matrix values, rankings, chromosome map, flags, criteria groups, and lot data.serialize.pyand the V3 CLI.
Verified values
- BRUTAL sire scoring block matched the golden criterion values.
- Matrix values matched the golden: Peak 167.37 / band 162.11 and Median 159.65 / band 169.42.
- Ranked sire and broodmare positions matched the golden behavior.
- KISS MOON racing-foal sibling records matched the golden.
- Sales-only sibling totals were documented as live-data dependent.
2026-06-27 - Phase 1 full pedigree path
Added
- MySQL runner compatible with the legacy multi-statement query behavior.
parent_builder.py, portingFillRSParentV3, basic parent details, race information, seasonal statistics, medians, and helper formatting.- Sire and dam construction entry points.
- SQL-dump development harness.
- Parent-builder unit and live integration tests.
Live validation
Using statsBefore=2026-02-01, the implementation was checked for:
- BRUTAL (sire 93686)
- KISS MOON (dam 531529)
- MALIBU MOON (dam sire 16790)
- the BRUTAL/MALIBU MOON cross
- KISS THE DEVIL (grand-dam 170769)
- DEVIL'S NELL (third dam 152911)
Race records, Timeform medians, progeny counts, stake data, cross performance, and top progeny matched the corresponding reference sections, subject to documented live sales-data drift.
2026-06-26 - Project foundation
Workstream A
- Analysed the 3,675-line legacy
BreedingController.csread path. - Built the modular
breeding_reportpackage. - Ported six meeting QA endpoints.
- Added 22 original unit tests plus an opt-in live integration test.
- Added configuration, architecture, query, and module documentation.
Scope correction
The actual Foal Index and Bloodstock reports were found to come from TrotBetAdmin PDFController.cs, not BreedingController.cs. This established a separate V3 report workstream.
Workstream B Phase 0
- Traced the full report call graph.
- Ported
RSParent, criteria, statistics, lot, and report-envelope models. - Added
PedigreeInput. - Copied the four matrix model CSV files.
- Established BRUTAL x KISS MOON as the canonical golden case.
- Added the first six V3 tests.
- Confirmed server runtime, legacy
rsdata source, JSON-to-DOCX-to-PDF pipeline, and explicit pedigree-ID inputs.
Historical corrections retained
- There is no
master/directory in the Gary Breeding repository. - The legacy source used for report-port verification is in the sibling
Global Assests\SourceCode\AdminPanel\TrotBetAdmintree. - Earlier notes that described the Node renderer and phases 1-4 as unwritten are superseded by later dated entries.
- The canonical golden total has appeared as both 985/990 in early planning and 935/920 in the later renderer fixture. Full live reconciliation remains the authority needed to close that discrepancy.