fix: patch the correct db path
This commit is contained in:
@@ -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,
|
||||||
)
|
)
|
||||||
|
|||||||
Reference in New Issue
Block a user