harvester/
Data ingestion layer. Maps on-disk dataset trees into RunDirectory records the engine can consume.
DumpIngestor— wrapscore.discovery.DatasetScanner+RunDiscovery+DumpReader. Accepts datasets laid out asTLS{version}/{scenario}/{library}/{run_dir}/.SidecarParser— reads.json(dict root) and.meta(key=value) sidecars. Filenames starting withkeylogortimingare skipped (they are parsed by dedicated readers).MetadataStore— in-memory record list; materializes an eagerpolars.DataFrameon demand (noLazyFrame) and flattens scalar sidecar fields intometa_*columns.
Filename conventions recognized:
Dump:
^(\d{8}_\d{6}_\d+)_(pre|post)_(.+)\.(dump|msl)$— timestamp, phase prefix, phase name.Run dir:
^(.+?)_run_(\d+)_(\d+)$— library, protocol version, run number.Keylog:
keylog.csv(configurable via--keylog-filename).
PhaseNormalizer canonicalizes phase names across libraries with different conventions.