fix: patch the correct db path

This commit is contained in:
Richard Tang
2026-04-17 19:40:59 -07:00
parent 78fc62210a
commit 84a92af41b
+16 -4
View File
@@ -191,19 +191,28 @@ def ensure_progress_db(colony_dir: Path) -> Path:
def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int: def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int:
"""Inject ``input_data.db_path`` + ``input_data.colony_id`` into """Inject ``input_data.db_path`` + ``input_data.colony_id`` +
existing ``worker.json`` files in a colony directory. ``input_data.colony_data_dir`` into existing ``worker.json`` files
in a colony directory.
Runs on every ``ensure_progress_db`` call so colonies that were Runs on every ``ensure_progress_db`` call so colonies that were
forked before this feature landed get their worker spawn messages forked before this feature landed get their worker spawn messages
patched in place. Idempotent: if ``input_data`` already contains patched in place. Idempotent: if ``input_data`` already contains
the correct ``db_path``, the file is not rewritten. all three values, the file is not rewritten.
Returns the number of files that were actually modified (0 on Returns the number of files that were actually modified (0 on
the common case of already-patched colonies). the common case of already-patched colonies).
Why ``colony_data_dir``? ``db_path`` alone points agents at
``progress.db``; for anything else (custom SQLite stores, JSON
ledgers, scraped artefacts) they need the *directory* so they
stop creating state under ``~/.hive/skills/`` which holds skill
*definitions*, not runtime data. See
``_default_skills/colony-storage-paths/SKILL.md``.
""" """
colony_id = colony_dir.name colony_id = colony_dir.name
abs_db = str(db_path) abs_db = str(db_path)
abs_data_dir = str(db_path.parent)
patched = 0 patched = 0
for worker_cfg in colony_dir.glob("*.json"): for worker_cfg in colony_dir.glob("*.json"):
@@ -227,11 +236,13 @@ def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int:
if ( if (
input_data.get("db_path") == abs_db input_data.get("db_path") == abs_db
and input_data.get("colony_id") == colony_id and input_data.get("colony_id") == colony_id
and input_data.get("colony_data_dir") == abs_data_dir
): ):
continue # already patched continue # already patched
input_data["db_path"] = abs_db input_data["db_path"] = abs_db
input_data["colony_id"] = colony_id input_data["colony_id"] = colony_id
input_data["colony_data_dir"] = abs_data_dir
data["input_data"] = input_data data["input_data"] = input_data
try: try:
@@ -246,7 +257,8 @@ def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int:
if patched: if patched:
logger.info( logger.info(
"progress_db: patched %d worker config(s) in colony '%s' with db_path", "progress_db: patched %d worker config(s) in colony '%s' with "
"db_path + colony_data_dir",
patched, patched,
colony_id, colony_id,
) )