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:
"""Inject ``input_data.db_path`` + ``input_data.colony_id`` into
existing ``worker.json`` files in a colony directory.
"""Inject ``input_data.db_path`` + ``input_data.colony_id`` +
``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
forked before this feature landed get their worker spawn messages
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
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
abs_db = str(db_path)
abs_data_dir = str(db_path.parent)
patched = 0
for worker_cfg in colony_dir.glob("*.json"):
@@ -227,11 +236,13 @@ def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int:
if (
input_data.get("db_path") == abs_db
and input_data.get("colony_id") == colony_id
and input_data.get("colony_data_dir") == abs_data_dir
):
continue # already patched
input_data["db_path"] = abs_db
input_data["colony_id"] = colony_id
input_data["colony_data_dir"] = abs_data_dir
data["input_data"] = input_data
try:
@@ -246,7 +257,8 @@ def _patch_worker_configs(colony_dir: Path, db_path: Path) -> int:
if patched:
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,
colony_id,
)