Rename package, CLI, and deploy artifacts to rein-aharness (HARNESS-WP-0002-T02)

agent_harness -> rein_aharness (package + all imports), CLI command
agent-harness -> rein-aharness, Docker image tag, k8s namespace/labels/
names, Makefile targets, deploy script env var/paths. In-repo identity
strings (hub event source, metrics harness field, default assignee,
argparse prog name, commit author identity) updated to match.

Historical documents left untouched on purpose: docs/adr/ADR-001-agent-harness-architecture.md,
docs/architecture.md (dated v0.1 snapshot), workplans/HARNESS-WP-0001
(completed under the old name), and the SSH host alias
"forgejo-agent-harness" (external ~/.ssh/config entry, not owned here).

Verified: 47/47 tests pass, CLI runs correctly from a fresh venv,
`make image` builds and the resulting container runs correctly.

deploy/README.md gained an explicit rename cutover checklist for what
this session cannot safely do unattended -- moving the host-side
secrets dir and checkout on railiance01, and not deleting the old k8s
namespace until the new one is confirmed working. The actual live
cutover (running that checklist against the real Railiance deployment)
is not attempted here -- real production surgery on binky-control's
live automation, needs the operator present.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-07-26 14:22:18 +02:00
parent 08327a34a4
commit f6930ad115
41 changed files with 214 additions and 158 deletions

View file

@ -5,7 +5,7 @@ import subprocess
from datetime import date
from pathlib import Path
from agent_harness import brief_daily
from rein_aharness import brief_daily
def _git_repo(tmp_path: Path) -> Path:

View file

@ -7,7 +7,7 @@ from unittest.mock import MagicMock, patch
import pytest
from agent_harness.intake import (
from rein_aharness.intake import (
EmittedIssue,
IntakeConfig,
IssueCoreClient,
@ -16,7 +16,7 @@ from agent_harness.intake import (
poll_next,
resolve_target_repo,
)
from agent_harness.taskspec import TaskSpecError
from rein_aharness.taskspec import TaskSpecError
def _make_repo(tmp_path: Path, name: str = "binky-control") -> Path:
@ -110,7 +110,7 @@ def test_client_list_claim_close() -> None:
base_url="http://issue-core.test",
api_key="k",
require_labels=("automated",),
assignee="agent-harness",
assignee="rein-aharness",
)
client = IssueCoreClient(cfg)
@ -126,11 +126,11 @@ def test_client_list_claim_close() -> None:
"activity_definition_id": "binky-daily-rhythm",
}
]
claim_body = {**list_body[0], "state": "in_progress", "assignee": "agent-harness"}
claim_body = {**list_body[0], "state": "in_progress", "assignee": "rein-aharness"}
close_body = {**claim_body, "state": "closed"}
with patch("agent_harness.intake.httpx.get") as get_mock, patch(
"agent_harness.intake.httpx.patch"
with patch("rein_aharness.intake.httpx.get") as get_mock, patch(
"rein_aharness.intake.httpx.patch"
) as patch_mock:
get_resp = MagicMock()
get_resp.raise_for_status = MagicMock()

View file

@ -6,8 +6,8 @@ from pathlib import Path
import pytest
from agent_harness import mail_triage
from agent_harness.llm_connect_client import LLMConnectClient, LLMConnectError
from rein_aharness import mail_triage
from rein_aharness.llm_connect_client import LLMConnectClient, LLMConnectError
def _git_repo(tmp_path: Path) -> Path:
@ -166,7 +166,7 @@ def test_run_mail_triage_no_report(tmp_path: Path, monkeypatch) -> None:
def test_llm_connect_client_complete(monkeypatch) -> None:
import agent_harness.llm_connect_client as mod
import rein_aharness.llm_connect_client as mod
class FakeResp:
def raise_for_status(self) -> None:
@ -190,6 +190,6 @@ def test_llm_connect_client_complete(monkeypatch) -> None:
def test_get_client_requires_env(monkeypatch) -> None:
monkeypatch.delenv("LLM_CONNECT_URL", raising=False)
with pytest.raises(LLMConnectError, match="LLM_CONNECT_URL"):
from agent_harness.llm_connect_client import get_llm_connect_client
from rein_aharness.llm_connect_client import get_llm_connect_client
get_llm_connect_client()

View file

@ -5,7 +5,7 @@ from pathlib import Path
import pytest
from agent_harness import mailscan
from rein_aharness import mailscan
class FakeCompleted:

View file

@ -5,8 +5,8 @@ from pathlib import Path
import pytest
import yaml
from agent_harness.cli import main
from agent_harness.manifest import (
from rein_aharness.cli import main
from rein_aharness.manifest import (
HARNESS_MAJOR,
ManifestError,
load_manifest,
@ -14,7 +14,7 @@ from agent_harness.manifest import (
resolve_run_policy,
validate_manifest,
)
from agent_harness.profiles import UnknownToolProfileError, get_profile, list_profiles
from rein_aharness.profiles import UnknownToolProfileError, get_profile, list_profiles
def _write_manifest(tmp_path: Path, data: dict) -> Path:

View file

@ -3,7 +3,7 @@ from __future__ import annotations
import json
from pathlib import Path
from agent_harness.metrics import record_execution, regenerate_summary
from rein_aharness.metrics import record_execution, regenerate_summary
def test_record_execution_writes_jsonl_and_summary(tmp_path: Path) -> None:
@ -25,7 +25,7 @@ def test_record_execution_writes_jsonl_and_summary(tmp_path: Path) -> None:
assert rec["agent"] == "coach"
assert rec["success"] is True
assert rec["tokens"] == 100
assert rec["harness"] == "agent-harness"
assert rec["harness"] == "rein-aharness"
assert rec["metadata"]["task_title"] == "hello"
summary = json.loads(

View file

@ -7,9 +7,9 @@ from pathlib import Path
import pytest
import yaml
from agent_harness.manifest import HARNESS_MAJOR
from agent_harness.runner import RunResult, run_task
from agent_harness.taskspec import TaskSpec, TaskSpecError
from rein_aharness.manifest import HARNESS_MAJOR
from rein_aharness.runner import RunResult, run_task
from rein_aharness.taskspec import TaskSpec, TaskSpecError
def _make_repo(tmp_path: Path) -> Path:

View file

@ -3,7 +3,7 @@ from __future__ import annotations
import subprocess
from pathlib import Path
from agent_harness.smoke import run_smoke
from rein_aharness.smoke import run_smoke
def _make_repo(tmp_path: Path) -> Path: