core: Policy, Pflege-Agent (HITL), Healer, Lifecycle-Pipeline, Graduierung + Konfiguration

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 00:43:26 +02:00
co-authored by Claude Opus 5.5
parent f79e2a8556
commit f2da893f71
28 changed files with 2179 additions and 10 deletions
+43
View File
@@ -176,3 +176,46 @@ class FakeChat:
@pytest.fixture
def fake_chat() -> FakeChat:
return FakeChat()
class Clock:
def __init__(self, t: float | None = None):
import time
self.t = time.time() if t is None else t
def __call__(self) -> float:
return self.t
def advance(self, seconds: float) -> None:
self.t += seconds
@pytest.fixture
def clock() -> Clock:
return Clock()
@pytest.fixture
def make_system(tmp_path, skills_dir, fake_chat, clock):
import yaml
from knaster.embeddings import HashingEmbedder
from knaster.healer.drivers import DryRunDriver
from knaster.lifecycle import LoggingJobRunner
from knaster.settings import REPO_ROOT, Settings
from knaster.system import build_system
def make(**overrides):
site = tmp_path / "site"
site.mkdir(exist_ok=True)
(site / "registry.yaml").write_text(yaml.safe_dump(REGISTRY))
settings = Settings(db_url="sqlite://", site_dir=site, skills_dir=skills_dir,
config_dir=overrides.pop("config_dir", REPO_ROOT / "config"),
api_token=overrides.pop("api_token", "secret"))
kw = dict(embedder=HashingEmbedder(), chat=fake_chat, jobs=LoggingJobRunner(), notifier=DryRunDriver(),
clock=clock)
kw.update(overrides)
return build_system(settings, **kw)
return make