refactor(tooling): T-1289 — economy-db becomes reach ledger
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>
This commit is contained in:
@@ -4,7 +4,7 @@ GODOT := $(shell command -v godot4 2>/dev/null || command -v godot 2>/dev/null)
|
||||
install-reach reach-repoint \
|
||||
decisions-sync decisions-active decisions-validate \
|
||||
setup-hooks install-hooks \
|
||||
audit deny economy-db regen-db \
|
||||
audit deny regen-db \
|
||||
pre-pr pre-pr-lint pre-pr-build pre-pr-test pre-pr-validate pre-pr-fixtures \
|
||||
pre-pr-server pre-pr-client pre-pr-content \
|
||||
fixtures-client fixtures-gauntlet golden-diff golden-update \
|
||||
@@ -57,8 +57,7 @@ help:
|
||||
@echo " make deny Run cargo deny check (license/ban policy)"
|
||||
@echo " make star-map-data Regenerate client/data/star_map_data.json from systems.db + wiki"
|
||||
@echo " make check-star-map Assert star_map_data.json is up to date (part of pre-pr-client)"
|
||||
@echo " make economy-db Import economics data into systems.db (TOML/JSON → SQLite)"
|
||||
@echo " make regen-db Regenerate systems.db from all sources + stamp meta table (#855)"
|
||||
@echo " make regen-db Regenerate systems.db + stamp meta table (= reach ledger import)"
|
||||
@echo " make install-hooks Install pre-push + pre-commit git hooks (once per clone)"
|
||||
@echo " make fixtures-client Generate GDScript->Rust cross-encoder fixtures (#475)"
|
||||
@echo " make golden-diff Show diff if golden file output has changed"
|
||||
@@ -280,7 +279,7 @@ VENV_PY := $(shell test -x .venv/bin/python && echo .venv/bin/python || echo pyt
|
||||
# 1. atlas planet determinism guard (#963): simulating the same body twice must
|
||||
# be bit-identical (guards the expensive 271-body heightmap bake).
|
||||
# Exit 2 = no testable body found — warn, don't block.
|
||||
# 2. import_economics --dry-run against the committed DB: full parse +
|
||||
# 2. reach ledger import --dry-run against the committed DB: full parse +
|
||||
# structural/coverage validation, no writes. Exit 2 = coverage-gate
|
||||
# warning (D-175) — tolerated, matching regen-db's treatment.
|
||||
test-tooling:
|
||||
@@ -333,20 +332,20 @@ test-tooling:
|
||||
@mkdir -p .cache
|
||||
@$(VENV_PY) tooling/test_check.py 2> .cache/test-tooling-check.log || \
|
||||
{ echo " FAIL: check gates — log follows:"; cat .cache/test-tooling-check.log; exit 1; }
|
||||
@echo " [test-tooling] economy_import.traits validation units (T-995/PR #173 H2)..."
|
||||
@echo " [test-tooling] ledger traits validation units (T-995/PR #173 H2)..."
|
||||
@mkdir -p .cache
|
||||
@python3 tooling/economy-db/test_traits.py 2> .cache/test-tooling-traits.log || \
|
||||
@$(VENV_PY) tooling/test_ledger_traits.py 2> .cache/test-tooling-traits.log || \
|
||||
{ echo " FAIL: traits validation units — log follows:"; cat .cache/test-tooling-traits.log; exit 1; }
|
||||
@echo " [test-tooling] atlas_city_names/atlas_feature_names idempotency (T-964)..."
|
||||
@python3 tooling/economy-db/test_atlas_idempotency.py 2> .cache/test-tooling-atlas-idempotency.log || \
|
||||
@$(VENV_PY) tooling/test_ledger_atlas_idempotency.py 2> .cache/test-tooling-atlas-idempotency.log || \
|
||||
{ echo " FAIL: atlas name-pool idempotency — log follows:"; cat .cache/test-tooling-atlas-idempotency.log; exit 1; }
|
||||
@echo " [test-tooling] import_economics --dry-run (committed DB)..."
|
||||
@rc=0; python3 tooling/economy-db/import_economics.py --dry-run \
|
||||
@echo " [test-tooling] reach ledger import --dry-run (committed DB)..."
|
||||
@rc=0; reach ledger import --dry-run \
|
||||
> .cache/test-tooling-dryrun.log 2>&1 || rc=$$?; \
|
||||
if [ $$rc -eq 2 ]; then \
|
||||
echo " WARNING: coverage gate warning (exit 2) — not blocking (matches regen-db)"; \
|
||||
elif [ $$rc -ne 0 ]; then \
|
||||
echo " FAIL: import_economics --dry-run exited $$rc — log follows:"; \
|
||||
echo " FAIL: reach ledger import --dry-run exited $$rc — log follows:"; \
|
||||
cat .cache/test-tooling-dryrun.log; exit $$rc; \
|
||||
fi
|
||||
@echo " test-tooling: PASS"
|
||||
@@ -450,33 +449,20 @@ ci-client: lint-client build-client test-client
|
||||
|
||||
# --- Database ---
|
||||
|
||||
economy-db: ## Import economics data (commodities, chains, gate links) into systems.db
|
||||
@echo " Generating minor brands (D-189 #829)..."
|
||||
@reach generate brands
|
||||
@python3 tooling/economy-db/import_economics.py
|
||||
# Survives for muscle memory (D-263: "delegates to reach in one line and says
|
||||
# so") — `make regen-db` is named in ~50 files, including the headers of the
|
||||
# generated wiki TOMLs and the remedies the push gate prints. The behaviour is
|
||||
# `reach ledger import`; this only tolerates its exit 2, which means imported
|
||||
# AND stamped with the D-175 coverage gate unmet — a content gap, not a failure.
|
||||
regen-db: ## Regenerate systems.db and stamp it — delegates to `reach ledger import`
|
||||
@ec=0; reach ledger import || ec=$$?; [ $$ec -eq 0 ] || [ $$ec -eq 2 ] || exit $$ec
|
||||
|
||||
regen-db: ## Regenerate systems.db from all sources and stamp meta table (#855, #856)
|
||||
@# Run as a single shell so `set -e` covers all steps. Without this
|
||||
@# each recipe line was a fresh shell and a failure in step 1 did not
|
||||
@# halt step 2, which could produce stale data with a fresh stamp
|
||||
@# (PR #136 review T4). import_economics' exit code 2 is a valid
|
||||
@# coverage-gate-warning state (DB and stamp committed), not an error,
|
||||
@# so it's explicitly tolerated. Any other non-zero exit halts the
|
||||
@# pipeline immediately. The atlas city/road/river geometry generator
|
||||
@# was retired in #951 (D-223); import_economics now owns the atlas
|
||||
@# index — it loads the names-only pool into atlas_city_names and empties
|
||||
@# the geometry tables (the server cascade fills them, Phase 4).
|
||||
@set -e; \
|
||||
echo " [regen-db] Importing economics data (runs generate_brands internally)..."; \
|
||||
ec=0; python3 tooling/economy-db/import_economics.py || ec=$$?; \
|
||||
if [ $$ec -ne 0 ] && [ $$ec -ne 2 ]; then exit $$ec; fi; \
|
||||
echo ""; \
|
||||
echo " regen-db complete — systems.db is up to date and stamped."; \
|
||||
echo " Stage it with: git add server/data/systems.db"
|
||||
|
||||
# The five gate targets that lived here are RETIRED, not wrapped (D-263,
|
||||
# The gate targets that lived here are RETIRED, not wrapped (D-263,
|
||||
# T-1281). They are tooling, and tooling has one door:
|
||||
#
|
||||
# make economy-db -> reach ledger import (T-1289; it also ran
|
||||
# `reach generate brands` first, which the
|
||||
# import already does as its own first step)
|
||||
# make check-systems-db -> reach check systems-db-stamp
|
||||
# make check-client-version -> reach check client-version
|
||||
# make check-canvas-version -> reach check canvas-version
|
||||
|
||||
Reference in New Issue
Block a user