Nexum / Nexum-Expanded /runtime /tests /test_engineering_workflows.py
Wl6adams's picture
Organize private Nexum release into Lite, Universal, and Expanded profiles
9a70a84
Raw
History Blame Contribute Delete
17.2 kB
from __future__ import annotations
import hashlib
import json
import os
import subprocess
import sys
from pathlib import Path
import pytest
import nexum_runtime.executor as executor_module
from nexum_runtime.executor import execute_tool_call, list_tools
from nexum_runtime.tooling.artifacts import ArtifactStore
from nexum_runtime.tooling.contracts import ToolCall
from nexum_runtime.tooling.engineering import (
DisclosureStore,
EvidenceBundleStore,
PatchStore,
ReproductionStore,
TriageStore,
)
from nexum_runtime.tooling.security import ApprovalStore
from nexum_runtime.tooling.transactions import TransactionStore
def _successful_run(
_command: str, _cwd: str, _timeout_s: float
) -> tuple[bool, str, str, int]:
return True, "stable output\n", "", 0
def _triage_with_evidence(
workspace: Path, *, session_id: str = "engineering-session"
) -> str:
reproduction, _stdout, _stderr = ReproductionStore(workspace).run(
command="inspect state",
working_directory=".",
snapshot_paths=(),
timeout_s=0.0,
session_id=session_id,
run_command=_successful_run,
)
triage = TriageStore(workspace).create(
reproduction_ids=(reproduction.reproduction_id,),
observed_facts=("The contained run completed with stable output.",),
hypotheses=("The affected path may have stale state.",),
severity="moderate",
confidence=0.75,
next_actions=("Apply a guarded repair and verify it.",),
session_id=session_id,
)
return triage.triage_id
def test_reproduction_receipts_compare_any_number_and_are_session_scoped(
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
) -> None:
secret = "reproduction-secret-value"
monkeypatch.setenv("SERVICE_TOKEN", secret)
target = tmp_path / "state.txt"
target.write_text("stable\n", encoding="utf-8")
store = ReproductionStore(tmp_path)
def run_with_secret(
_command: str, _cwd: str, _timeout_s: float
) -> tuple[bool, str, str, int]:
return True, f"stable output {secret}\n", "", 0
first, first_stdout, _ = store.run(
command="inspect state",
working_directory=".",
snapshot_paths=("state.txt",),
timeout_s=0.0,
session_id="session-one",
run_command=run_with_secret,
)
second, second_stdout, _ = store.run(
command="inspect state",
working_directory=".",
snapshot_paths=("state.txt",),
timeout_s=0.0,
session_id="session-one",
run_command=run_with_secret,
)
comparison = store.compare(
(first.reproduction_id, second.reproduction_id),
session_id="session-one",
)
assert secret not in first_stdout
assert secret not in second_stdout
assert comparison["stable_outcome"] is True
assert comparison["same_before_state"] is True
assert comparison["same_after_state"] is True
with pytest.raises(PermissionError, match="does not belong"):
store.get(first.reproduction_id, session_id="session-two")
def test_triage_and_disclosure_preserve_evidence_without_private_output(
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
) -> None:
secret = "private-disclosure-value"
monkeypatch.setenv("PRIVATE_KEY", secret)
session_id = "disclosure-session"
reproduction, _stdout, _stderr = ReproductionStore(tmp_path).run(
command="inspect failure",
working_directory=".",
snapshot_paths=(),
timeout_s=0.0,
session_id=session_id,
run_command=lambda _command, _cwd, _timeout: (
False,
"",
f"failure {secret} at {tmp_path}",
2,
),
)
triage = TriageStore(tmp_path).create(
reproduction_ids=(reproduction.reproduction_id,),
observed_facts=(f"Failure observed at {tmp_path} with {secret}.",),
hypotheses=("Configuration may be inconsistent.",),
severity="high",
confidence=0.8,
next_actions=("Inspect the smallest affected surface.",),
session_id=session_id,
)
disclosure = DisclosureStore(tmp_path).create(
triage_id=triage.triage_id,
title="Contained failure",
summary=f"A failure was reproduced at {tmp_path}.",
impact="The affected operation does not complete.",
remediation="Apply a guarded repair and verify the exact resulting state.",
audience="coordinated",
patch_id="",
session_id=session_id,
)
_artifact, document = ArtifactStore(tmp_path).read(
disclosure.artifact_id,
session_id=session_id,
)
text = document.decode("utf-8")
assert disclosure.evidence_sha256 in text
assert reproduction.reproduction_id in text
assert "## Observed Facts" in text
assert "## Hypotheses" in text
assert secret not in text
assert str(tmp_path) not in text
assert "[WORKSPACE]" in text
assert "Raw command output" in text
def test_patch_workflow_verifies_commits_and_can_restore_committed_bytes(
tmp_path: Path,
) -> None:
session_id = "patch-session"
target = tmp_path / "value.txt"
target.write_text("before\n", encoding="utf-8")
triage_id = _triage_with_evidence(tmp_path, session_id=session_id)
store = PatchStore(tmp_path)
patch = store.begin(
triage_id=triage_id,
paths=("value.txt",),
session_id=session_id,
)
before_sha256 = hashlib.sha256(b"before\n").hexdigest()
applied, error = store.apply(
patch.patch_id,
(
{
"operation": "replace",
"path": "value.txt",
"expected_sha256": before_sha256,
"old_text": "before",
"new_text": "after",
},
),
session_id=session_id,
)
assert error == ""
assert applied.status == "applied"
assert target.read_text(encoding="utf-8") == "after\n"
def verify(
_command: str, _cwd: str, _timeout_s: float
) -> tuple[bool, str, str, int]:
assert target.read_text(encoding="utf-8") == "after\n"
return True, "verified\n", "", 0
verified, receipt, _stdout, _stderr = store.verify(
patch.patch_id,
command="verify repair",
working_directory=".",
timeout_s=0.0,
session_id=session_id,
run_command=verify,
)
assert verified.status == "verified"
assert receipt.reproduction_id in verified.verification_ids
committed = store.commit(patch.patch_id, session_id=session_id)
assert committed.status == "committed"
restored = store.rollback(patch.patch_id, session_id=session_id)
assert restored.status == "rolled_back"
assert target.read_text(encoding="utf-8") == "before\n"
def test_patch_application_is_all_or_nothing_on_stale_input(tmp_path: Path) -> None:
session_id = "atomic-patch-session"
first = tmp_path / "first.txt"
second = tmp_path / "second.txt"
first.write_text("first before\n", encoding="utf-8")
second.write_text("second before\n", encoding="utf-8")
triage_id = _triage_with_evidence(tmp_path, session_id=session_id)
store = PatchStore(tmp_path)
patch = store.begin(
triage_id=triage_id,
paths=("first.txt", "second.txt"),
session_id=session_id,
)
failed, error = store.apply(
patch.patch_id,
(
{
"operation": "replace",
"path": "first.txt",
"expected_sha256": hashlib.sha256(b"first before\n").hexdigest(),
"old_text": "first before",
"new_text": "first after",
},
{
"operation": "replace",
"path": "second.txt",
"expected_sha256": "0" * 64,
"old_text": "second before",
"new_text": "second after",
},
),
session_id=session_id,
)
assert failed.status == "rolled_back"
assert "ExpectedHashMismatch" in error
assert first.read_text(encoding="utf-8") == "first before\n"
assert second.read_text(encoding="utf-8") == "second before\n"
def test_executor_treats_observed_nonzero_reproduction_as_valid_evidence(
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
) -> None:
secret = "executor-secret-value"
monkeypatch.setenv("API_KEY", secret)
monkeypatch.setattr(
executor_module,
"_run_command",
lambda _command, _cwd, _timeout: (
False,
f"reproduced {secret}\n",
"",
7,
),
)
result = execute_tool_call(
ToolCall(
name="ReproductionRun",
args={
"command": f"run --credential {secret}",
"snapshot_paths": [],
},
raw="",
call_id="reproduction-call",
),
cwd=str(tmp_path),
session_id="executor-session",
)
payload = json.loads(result.output)
assert result.ok is True
assert result.exit_code == 7
assert payload["record"]["command_ok"] is False
assert secret not in result.output
assert secret not in json.dumps(result.args)
assert "[REDACTED]" in json.dumps(result.args)
names = {row["name"] for row in list_tools()}
assert {
"ReproductionRun",
"ReproductionCompare",
"TriageCreate",
"TriageUpdate",
"TriageStatus",
"DisclosureCreate",
"DisclosureStatus",
"EvidenceBundleCreate",
"EvidenceBundleStatus",
"PatchBegin",
"PatchApply",
"PatchVerify",
"PatchCommit",
"PatchRollback",
} <= names
def test_triage_update_and_disclosure_status_tools(tmp_path: Path) -> None:
session_id = "triage-update-session"
first = _triage_with_evidence(tmp_path, session_id=session_id)
second_reproduction, _stdout, _stderr = ReproductionStore(tmp_path).run(
command="inspect second state",
working_directory=".",
snapshot_paths=(),
timeout_s=0.0,
session_id=session_id,
run_command=lambda _command, _cwd, _timeout: (False, "", "still failing", 3),
)
update = execute_tool_call(
ToolCall(
name="TriageUpdate",
args={
"triage_id": first,
"reproduction_ids": [second_reproduction.reproduction_id],
"observed_facts": ["Second contained run still fails."],
"hypotheses": ["Repair candidate did not touch the failing path."],
"severity": "high",
"confidence": 0.9,
"next_actions": ["Try the smaller patch path first."],
},
raw="",
call_id="triage-update-call",
),
cwd=str(tmp_path),
session_id=session_id,
)
assert update.ok is True
updated = json.loads(update.output)
assert updated["severity"] == "high"
assert second_reproduction.reproduction_id in updated["reproduction_ids"]
assert "Second contained run still fails." in updated["observed_facts"]
disclosure = DisclosureStore(tmp_path).create(
triage_id=first,
title="Updated triage disclosure",
summary="Updated evidence is available.",
impact="The contained operation still fails.",
remediation="Use the next verified patch path.",
audience="maintainer",
patch_id="",
session_id=session_id,
)
status = execute_tool_call(
ToolCall(
name="DisclosureStatus",
args={"disclosure_id": disclosure.disclosure_id},
raw="",
call_id="disclosure-status-call",
),
cwd=str(tmp_path),
session_id=session_id,
)
assert status.ok is True
assert json.loads(status.output)["artifact_id"] == disclosure.artifact_id
def test_evidence_bundle_packages_sanitized_engineering_receipts(
tmp_path: Path, monkeypatch: pytest.MonkeyPatch
) -> None:
session_id = "evidence-bundle-session"
secret = "bundle-secret-value"
monkeypatch.setenv("BUNDLE_TOKEN", secret)
target = tmp_path / "app.txt"
target.write_text("before\n", encoding="utf-8")
reproduction, _stdout, _stderr = ReproductionStore(tmp_path).run(
command=f"inspect --token {secret}",
working_directory=".",
snapshot_paths=("app.txt",),
timeout_s=0.0,
session_id=session_id,
run_command=lambda _command, _cwd, _timeout: (
False,
f"observed {secret} at {tmp_path}",
"",
2,
),
)
triage = TriageStore(tmp_path).create(
reproduction_ids=(reproduction.reproduction_id,),
observed_facts=(f"Failure reproduced at {tmp_path} with {secret}.",),
hypotheses=("The current value is stale.",),
severity="moderate",
confidence=0.7,
next_actions=("Apply a verified patch.",),
session_id=session_id,
)
patch = PatchStore(tmp_path).begin(
triage_id=triage.triage_id,
paths=("app.txt",),
session_id=session_id,
)
disclosure = DisclosureStore(tmp_path).create(
triage_id=triage.triage_id,
title="Maintainer handoff",
summary=f"Contained failure at {tmp_path}",
impact="The selected operation fails.",
remediation="Verify the smallest repair path.",
audience="maintainer",
patch_id="",
session_id=session_id,
)
bundle = EvidenceBundleStore(tmp_path).create(
title=f"Handoff {tmp_path}",
reproduction_ids=(reproduction.reproduction_id,),
triage_ids=(triage.triage_id,),
disclosure_ids=(disclosure.disclosure_id,),
patch_ids=(patch.patch_id,),
session_id=session_id,
)
_artifact, document = ArtifactStore(tmp_path).read(
bundle.artifact_id,
session_id=session_id,
)
text = document.decode("utf-8")
assert bundle.bundle_id.startswith("evb_")
assert bundle.evidence_sha256 in text
assert reproduction.reproduction_id in text
assert triage.triage_id in text
assert disclosure.disclosure_id in text
assert patch.patch_id in text
assert secret not in text
assert str(tmp_path) not in text
assert "Raw command output" in text
status = execute_tool_call(
ToolCall(
name="EvidenceBundleStatus",
args={"bundle_id": bundle.bundle_id},
raw="",
call_id="bundle-status-call",
),
cwd=str(tmp_path),
session_id=session_id,
)
assert status.ok is True
assert json.loads(status.output)["artifact_id"] == bundle.artifact_id
cross_session = execute_tool_call(
ToolCall(
name="EvidenceBundleStatus",
args={"bundle_id": bundle.bundle_id},
raw="",
call_id="bundle-status-cross-session-call",
),
cwd=str(tmp_path),
session_id="other-session",
)
assert cross_session.ok is False
assert "does not belong to this session" in cross_session.error
def test_cli_can_resume_one_exact_approved_tool_action(tmp_path: Path) -> None:
target = tmp_path / "value.txt"
target.write_text("before", encoding="utf-8")
transaction = TransactionStore(tmp_path).begin(
("value.txt",), session_id="cli-approval-session"
)
target.write_text("after", encoding="utf-8")
current_sha256 = hashlib.sha256(b"after").hexdigest()
tool_text = (
"TransactionRollback("
f"transaction_id='{transaction.transaction_id}', "
f"expected_current={{'value.txt':'{current_sha256}'}})"
)
source_root = Path(__file__).resolve().parents[1] / "src"
environment = os.environ.copy()
environment["PYTHONPATH"] = os.pathsep.join(
[str(source_root), environment.get("PYTHONPATH", "")]
).rstrip(os.pathsep)
command = [
sys.executable,
"-m",
"nexum_runtime.cli",
"tools",
"execute",
tool_text,
"--workspace",
str(tmp_path),
"--session-id",
"cli-approval-session",
"--call-id",
"rollback-call",
]
requested = subprocess.run(
command,
text=True,
capture_output=True,
check=False,
env=environment,
)
requested_payload = json.loads(requested.stdout)
approval_id = requested_payload["results"][0]["approval_id"]
assert requested.returncode == 1
assert requested_payload["results"][0]["status"] == "input_required"
ApprovalStore(tmp_path).decide(
approval_id,
approved=True,
session_id="cli-approval-session",
)
resumed = subprocess.run(
[*command, "--approval-id", approval_id],
text=True,
capture_output=True,
check=False,
env=environment,
)
resumed_payload = json.loads(resumed.stdout)
assert resumed.returncode == 0
assert resumed_payload["results"][0]["ok"] is True
assert target.read_text(encoding="utf-8") == "before"