The Parquet tables are replaced by a single SQLite database,
store.sqlite, with schema.json as the version marker
(SCHEMA_VERSION = 2). A store written by 0.1.x is refused at construction
with SchemaMismatchError; see migration.
Records keep the same fields and IDs, and evaluation_id relationships are
preserved. Column types are declared per record field and encoded by explicit
codecs, so reads no longer depend on pandas type inference.
The database uses a rollback journal (journal_mode = DELETE, never WAL),
which keeps a store portable as one file. Copies are valid only from a
flushed, quiescent source.
Buffered metrics and conditions, the evaluation context manager, and its
rollback semantics are unchanged. Sync merges runs by updated_at and treats
evaluations, conditions, metrics, and artifacts as immutable records that
conflict on any difference.
research-tracker migrate, which upgrades a v1 Parquet store in place to
schema version 2, preserving every record and ID. It supports --dry-run and
--no-backup, keeps the old files under parquet-v1/, and refuses to run
against a store that is already on version 2.
The optional migrate extra, which installs pyarrow for reading the legacy
Parquet files. It is not a required dependency.
ExperimentStore.update_table for validated whole-table replacement, used by
the migration to bulk-load records.