The sole generator of systems.db moves to tooling/domains/ledger/ and is now `reach ledger import`. economy_import/ keeps its name (Rust comments in server/src cite it); the entrypoint becomes service.py; schema_version.py moves with the importer, which is where the version is defined. The stamp survived the move, which is the thing that had to hold: - generated_brands.toml is byte-identical (sha256 e748531…) before and after - `reach check systems-db-stamp` reported STALE after the move (the registry saw it) and OK after the regen - the dry-run carries every count and warning of the baseline transcript, and exit 2 — imported and stamped, coverage gate unmet — still reaches the caller through @command `make regen-db` survives as a one-line delegate, per D-263's muscle-memory clause: about fifty files name it, including the headers of generated wiki TOMLs and the remedies the push gate prints. `make economy-db` is retired; it ran `reach generate brands` before the import, which the import already does as its first step. economy_import.errors is reconciled as DOMAINS.md asked. ImportAborted stays as internal rollback control flow and never reaches a caller; the service converts it to a ReachError carrying the remedy. regenerate_brands caught cargo_binary's ReachError, printed it and raised ImportAborted, dropping the remedy. It runs before the import transaction opens, so there is nothing to roll back — it now propagates. Both sys.path bootstraps are gone; they existed only because the directory was hyphenated. The step labels ran [1/10]…[10/13]…[17/19]; one 24-step counter now drives the event phase and progress. Stale pointers fixed on the way: MIGRATION_SQL has lived in economy_import/migration.py since T-1067, but the asset-pipeline rule, DEVOPS and the schema comments still sent readers to import_economics.py; the rule and DEVOPS also still named the check scripts T-1281 retired. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
40 lines
1.6 KiB
Python
40 lines
1.6 KiB
Python
"""Meta-table generator stamp (#855, #856).
|
|
|
|
Records the source-SHA of the generator that produced the DB so the pre-push
|
|
hook (`reach check systems-db-stamp`) can detect stale snapshots. The source
|
|
set comes from tooling/generator_sources.py — the single shared registry.
|
|
"""
|
|
|
|
import sqlite3
|
|
from pathlib import Path
|
|
|
|
from tooling.generator_sources import file_sha1
|
|
from tooling.domains.ledger.schema_version import SCHEMA_VERSION
|
|
|
|
from .paths import SCHEMA_SQL
|
|
|
|
|
|
def write_stamp(conn: sqlite3.Connection, generator_name: str, *source_files: Path) -> None:
|
|
"""Upsert a row in the meta table recording this generator's current source SHA.
|
|
|
|
Called after every successful non-dry-run commit. Idempotent: running
|
|
twice on the same sources writes the same sha with an updated timestamp.
|
|
|
|
Only one stamp is written by this package: ``import_economics``, whose source
|
|
set includes the Rust binary it invokes (see IMPORT_ECONOMICS_SOURCES in
|
|
tooling/generator_sources.py). generate_brands does NOT write a stamp
|
|
of its own — it's a subroutine of import_economics, not an independent DB
|
|
writer (PR #136 review T2/H3).
|
|
|
|
The meta table is created by the MIGRATION_SQL block in migration.py; this
|
|
function assumes it exists (caller must run migrations first).
|
|
"""
|
|
schema_sha = file_sha1(SCHEMA_SQL)
|
|
generator_sha = file_sha1(*source_files)
|
|
conn.execute(
|
|
"""INSERT OR REPLACE INTO meta
|
|
(generator_name, schema_version, schema_sha, generator_sha, generated_at)
|
|
VALUES (?, ?, ?, ?, datetime('now'))""",
|
|
(generator_name, SCHEMA_VERSION, schema_sha, generator_sha),
|
|
)
|