Unit-Test Batch History¶
Not yet in master
The batches below live on the stacked branches tests/batch1-utils … tests/batch33-coverage90
and are collected on fix/groupAD. None of them is merged into master yet.
Pending merge through open PRs #1067 (batches 1–10), #1083 (11–20), #1084 (21–30) and #1085 (31–33).
The hermetic unit layer was built in a Phase 0 (infrastructure) followed by 33
batches. Each batch targets one area of the codebase, adds tests, and pins every defect it finds
with xfail(strict=True) (see the Defect Register). Each batch branch is
created from the previous one.
Sources: the measurement log below line 1 of coverage_floor.txt (batches 1–20), the commit messages on
origin/master..fix/groupAD, and the per-branch commit lists (git log tests/batch(N-1)..tests/batchN).
Phases¶
| Phase | Batches | Dates (commits) | Outcome |
|---|---|---|---|
| Phase 0 – infrastructure | – | 2026-08-24 | mongomock seam, sys.modules stubs, isolation guards, coverage config, CI split. Baseline: 22% combined, floor 20 |
| Phase 1 | 1–9 | 2026-08-24 → 08-25 | 1,000 hermetic tests, floor 20 → 30, combined 22% → 32%, "48 defects" (per coverage_floor.txt; B1–B45 without B17 is 44 IDs) |
| Phase 2 ("phase 2 sweep") | 10–19 | 2026-08-25 | 1,370 tests, floor 30 → 37, combined 32% → 38%, function coverage 27% → 46.5%, defects through B78 |
| Function-by-function pass | 20–29 | 2026-08-30 → 09-02 | Local-only and not re-measured. Defects B79–B109. Several earlier findings retracted after checking against the pinned requirements.txt |
| Coverage push | 30–33 | 2026-09-03 → 09-07 | 5,600 passing tests, "unit coverage" 55.0% → ~90%, 223 new defects (B110–B332) |
The names "Phase 0", "phase 2 sweep" and the 1–9 / 10–19 boundaries come from coverage_floor.txt.
The labels for batches 20–29 and 30–33 are this page's own grouping.
Batches¶
Column notes:
- Coverage after is the combined line+branch figure from
coverage_floor.txtunless marked. For batches 30–33 it is the "unit coverage" from the commit subject. That metric is not defined in the commits and is not comparable with the combined figure (see the note on the unit-tests page). - Tests added is given only where a source states it. "Σ" marks a total across several batches.
- "—" means the source does not give a value.
| # | Branch | Scope | Tests added | Coverage after | Floor after | Defects |
|---|---|---|---|---|---|---|
| 0 | (on tests/batch1-utils) |
Infrastructure | — | 22% | 20 | P1–P8 |
| 1 | batch1-utils |
hera/utils: angles, query, Filter, _LazyModule, slurm, latex/bibtex, zip, unitHandler, JSON config, logging |
Σ 1–9: 1,000 | 28% | 26 | B1–B16 (B1–B4 in the batch plan only) |
| 2 | batch2-datalayer |
toolkit.py + datalayer: abstractToolkit datasources/documents, datahandler registry, Project config, ToolkitHome |
— | 28% | 26 | B18–B23 |
| 3 | batch3-gaussian |
simulations/gaussian: Sigma (Briggs 1973), Meteorology, MeshUtils |
— | 30% | 28 | B24–B30 |
| 4 | batch4-physics-utils |
evaporation, deposition, hydrodynamics, windProfile, simulations/utils |
— | 31% | 29 | B31–B35 |
| 5 | batch5-riskassessment |
riskassessment + presentation: toxic-load calculators, injury levels | — | 31% | 29 | B36–B39 |
| 6 | batch6-meteorology |
measurements/meteorology: seasonal classification, import surface |
— | 31% | 29 | B40–B41 |
| 7 | batch7-gis |
measurements/GIS: CRS conversion, land-cover roughness tables |
— | 31% | 29 | B42–B43 |
| 8 | batch8-experiment |
measurements/experiment: pydoc factory, orphaned TOA5 parser |
— | — | 29 | B44 |
| 9 | batch9-simulations |
openFoam, LSM, mlDL, WRF: LSM parameter preparation, stub layer end to end | (Σ 1,000) | 32% | 30 | B45 |
| 10 | batch10-pure-physics |
evaporation/deposition physics, opened up by the import fix 8eaa510a |
Σ 10–12: 82 | — | — | B46–B51 |
| 11 | batch11-openfoam |
OpenFOAM preprocessing objects | (Σ 82) | — | 30 | B52 |
| 12 | batch12-risk-pure |
riskassessment: protectionpolicy, riskAreas, riskToolkit | (Σ 82) | 33% | 31 | B53–B60 |
| 13 | batch13-openfoam-deep |
OFObject, OFList, preprocessOFObjects/utils.py |
28 | 34% | 32 | B61 |
| 14 | batch14-risk-agents |
riskassessment/agents: Agents, Calculator, Injury, InjuryLevel, thresholdGeoDataFrame |
Σ 14–19: 260 ¹ | 34% | 33 | B62–B66, B97 ² |
| 15 | batch15-openfoam-field |
OFField.py, the remaining five methods |
(Σ) | 35% (fn 40.1%) | 34 | B67–B68 |
| 16 | batch16-meteorology |
highfreqdata: abstractcalculator, meandatacalculator, turbulencestatistics, parsers | (Σ) | 37% (fn 43.1%) | 36 | B69–B73 |
| 17 | batch17-gis |
GIS, partial: stlFactory, TilesToolkit tile math, LandCoverToolkit (hill2stl tests later dropped) | (Σ) | 37% (fn 44.0%) | 36 | B74 |
| 18 | batch18-experiment |
experimentHome, experimentAnalysis, dataEngine | (Σ) | measured with 19 | 36 | B75–B77 |
| 19 | batch19-gaussian-gascloud |
gasCloud.py (deferred from batch 3) |
(Σ) | 38% (fn 46.5%) | 37 | B78 |
| 20 | batch20-gis-buildings |
GIS buildings/vector/demography morphology, Campbell TOB1 parser | 105 | not re-measured | 37 | B79–B82 |
| 21 | batch21-openfoam-toolkit |
OFToolkit filesystem/parsing helpers | Σ 20–29: ~507 ³ | — | 37 | B83 |
| 22 | batch22-openfoam-cli |
Foam_parser_FieldDescription, eulerian solver extension |
(Σ) | — | 37 | B84–B86 (retracted) |
| 23 | batch23-lsm-lagrangian |
Lagrangian particle-source generators, point-wise concentration | (Σ) | — | 37 | none |
| 24 | batch24-datalayer |
remaining DataHandler_* format handlers |
(Σ) | — | 37 | B87 |
| 25 | batch25-datalayer-project |
remaining datalayer/project.py query/save helpers |
(Σ) | — | 37 | B88 |
| 26 | batch26-experiment-parsers |
experiment/parsers.py, utils/data repository export, lowfreq presentationLayer |
(Σ) | — | 37 | B89–B91 |
| 27 | batch27-lsm |
LSMToolkit construction, templates, getTemplatesTable |
(Σ) | — | 37 | B92 |
| 28 | batch28-simulations-utils |
interpolations.py, FallingNonEvaporatingDroplets, utils/data/CLI.py helpers |
(Σ) | — | 37 | B93–B96 (B94 retracted) |
| 29 | batch29-datahandler-more |
30 commits: datahandler tif/npz/Class, LSM singleSimulation/template/sources, autocache, DropletCloud, OFToolkit VTK cache, hermesWorkflowToolkit names, OFLSMToolkit, highfreq parsers & HighFreqToolKit, risk CLI | (Σ) | "55.0%" ⁴ | 37 | B98–B109 |
| 30 | batch30-coverage60 |
windProfile toolkit, gaussian & experiment presentation, experiment parsers, Injury/InjuryFactory, droplet physics, hermesWorkflowToolkit DB lifecycle, GIS/experiment/simulations CLIs | 486 (1,877 → 2,363) | 62.4% ⁴ | 37 | B110–B141 (32) |
| 31 | batch31-coverage72 |
utils/data CLI + dataToolkit, openFoam CLI/toolkit/OFWorkflow, Lagrangian LSM toolkit, GIS raster landcover/topography, experiment.py with an argos v3.0.0 zip, buildings & basicplots presentation |
1,559 (1,863 → 3,422) ⁵ | 75.4% ⁴ | 37 | B142–B211 (70) |
| 32 | batch32-coverage82 |
50 new files, 170 reachable functions: experiment analysis/presentation, GIS vector/raster, physics/utils tail, ToolkitHome, datahandler, risk tail, LSM, gaussian, meteorology | 1,605 (3,422 → 5,027) | 83.4% ⁴ | 37 | B212–B309 (98) |
| 33 | batch33-coverage90 |
pvOpenFOAMBase.py, TilesToolkit, VTKPipeline, abstractLagrangianSolver.py |
573 (5,027 → 5,600) | ~90% ⁴ | 37 | B310–B332 (23) |
Footnotes
- Derived: 1,370 tests after batch 19 (
coverage_floor.txt), minus 1,000 after batch 9, minus 82 and 28. - B97 was found on 2026-09-01 (commit
636f7d1a) while retracting B65 in the batch 14 code. - Derived: 1,877 (start of batch 30, per its commit) minus 1,370. Approximate, because tests were also removed in this period (hill2stl and OFList coverage was dropped after those files were deleted upstream).
- "Unit coverage" as stated in the batch 30–33 commit subjects (batch 30's subject gives 55.0% as the starting value, which is used here for batch 29). The metric is not defined in the commits.
- Sources disagree: batch 30 ends at 2,363 tests, but batch 31 starts from 1,863. The 31 → 33 chain (3,422 → 5,027 → 5,600) is internally consistent and is the one used for current totals.
Follow-up commits on fix/groupAD¶
| Commit | What |
|---|---|
8eaa510a |
First production change: fixes a circular import in autocache.py, wrong-level from ..utils imports (B31), import-time side effects (hill2stl demo, a hard-coded path in highfreqdata/__main__.py), and test_no_invalid_escapes.py never failing (B26). The commit reports "704 passed, 0 failed" for the integration suite |
ea25d331, 636f7d1a, 3672df49, bcd299e0 |
Retractions after checking against the pinned requirements.txt: B53/B58/B60, B65, B84–B86, B94 |
5263ce30, 41d5ae2b |
Real placeholder classes for argos.experimentSetup.dataObjects and hermes.workflow in _stubs.py |
4c267d67 |
CI: install requirements-test.txt in the integration job too |
9bb0170e |
fix: B187 and B232. The commit reports 5,579 passed, 376 xfailed, 39 failed |
The other fix/group* branches, each fixing a few B-numbers on top of the batches, are listed in the
Defect Register.