The distributed worker pool stacks on exactly two open pull requests, in this order: PR 14 supplies the broker-only SCM boundary the mediators route through and the hermes-scm-boundary-v2 ConfigMap they mount, and PR 15 supplies the cli_lane_* decomposition -- including canonical_run_id and the eligibility predicate on claim_ready -- that the coordinator depends on. Neither can be dropped without breaking a fixed P0 boundary, so both are carried here as prerequisites and this branch must not merge before them. PR 16 (agent image release lane) and PR 19 (full-handoff acceptance harness) are NOT prerequisites and are deliberately absent, so reviewing this branch no longer means approving them. PR 14 and PR 15 conflict with each other in nine paths. Each is resolved to the resolution already reviewed on this branch at 4d4cf1bd.
62 lines
1.6 KiB
Python
62 lines
1.6 KiB
Python
"""Shared paths and loaders for Hermes chat capability contracts."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import base64
|
|
import importlib.util
|
|
import json
|
|
import sqlite3
|
|
import sys
|
|
import time
|
|
import tomllib
|
|
from pathlib import Path
|
|
from types import ModuleType, SimpleNamespace
|
|
import pytest
|
|
|
|
import yaml
|
|
|
|
ROOT = Path(__file__).parents[2]
|
|
HERMES = ROOT / "services" / "hermes"
|
|
VAULT = ROOT / "services" / "vault"
|
|
|
|
def _documents(path: Path) -> list[dict]:
|
|
return [doc for doc in yaml.safe_load_all(path.read_text()) if doc]
|
|
|
|
def _load_broker_module(name: str, filename: str, monkeypatch):
|
|
"""Load one broker with its mounted routing-catalog dependency."""
|
|
catalog_path = HERMES / "scripts" / "routing_catalog.py"
|
|
catalog_spec = importlib.util.spec_from_file_location(
|
|
"routing_catalog", catalog_path
|
|
)
|
|
assert catalog_spec and catalog_spec.loader
|
|
catalog = importlib.util.module_from_spec(catalog_spec)
|
|
catalog_spec.loader.exec_module(catalog)
|
|
monkeypatch.setitem(sys.modules, "routing_catalog", catalog)
|
|
monkeypatch.setitem(sys.modules, "httpx", SimpleNamespace())
|
|
|
|
broker_path = HERMES / "scripts" / filename
|
|
spec = importlib.util.spec_from_file_location(name, broker_path)
|
|
assert spec and spec.loader
|
|
module = importlib.util.module_from_spec(spec)
|
|
spec.loader.exec_module(module)
|
|
return module
|
|
__all__ = (
|
|
"HERMES",
|
|
"ModuleType",
|
|
"Path",
|
|
"ROOT",
|
|
"SimpleNamespace",
|
|
"VAULT",
|
|
"_documents",
|
|
"_load_broker_module",
|
|
"base64",
|
|
"importlib",
|
|
"json",
|
|
"pytest",
|
|
"sqlite3",
|
|
"sys",
|
|
"time",
|
|
"tomllib",
|
|
"yaml",
|
|
)
|