Some checks are pending
CI / lint-and-test (push) Waiting to run
- Add broad Cory-style outcome scenarios to the open-ended benchmark so regular-use ambiguity is tested, not only exact ID canaries. - Add a clone-proven cross-surface strategy anchor packet that updates the mapped rich proposal anchor only after Claim D exists. - Retain VPS Docker DB, claim/body metadata, and cross-surface proof reports with ruff plus 37 focused tests passing. `docs/reports/leo-working-state-20260709/cory-expected-working-leo-outcomes-20260709.md` `docs/reports/leo-working-state-20260709/cross-surface-apply-authorized-commit.sql` `docs/reports/leo-working-state-20260709/cross-surface-clone-rehearsal-current.log` `docs/reports/leo-working-state-20260709/cross-surface-clone-rehearsal-failed-source-id-constraint.log` `docs/reports/leo-working-state-20260709/cross-surface-delete-rollback.sql` `docs/reports/leo-working-state-20260709/cross-surface-packet.json` `docs/reports/leo-working-state-20260709/cross-surface-postflight.sql` `docs/reports/leo-working-state-20260709/cross-surface-preflight.sql` `docs/reports/leo-working-state-20260709/cross-surface-resolution-current.md` `docs/reports/leo-working-state-20260709/current-truth-index.md` `docs/reports/leo-working-state-20260709/leo-db-state-17-cory-outcome-benchmark.svg` `docs/reports/leo-working-state-20260709/leo-db-state-18-db-vs-workspace.svg` `docs/reports/leo-working-state-20260709/leo-db-state-19-claims-body-metadata.svg` `docs/reports/leo-working-state-20260709/leo-db-state-20-cross-surface-anchor.svg` `docs/reports/leo-working-state-20260709/working-leo-current-state-20260709.md` `docs/reports/leo-working-state-20260709/working-leo-definition-20260709.md` `docs/reports/leo-working-state-20260709/working-leo-execution-plan-current.md` `docs/reports/leo-working-state-20260709/working-leo-open-ended-benchmark-spec.json` `scripts/kb_cross_surface_resolution_packet.py` `scripts/working_leo_open_ended_benchmark.py` `tests/test_kb_cross_surface_resolution_packet.py` `tests/test_working_leo_open_ended_benchmark.py`
127 lines
7 KiB
Python
127 lines
7 KiB
Python
"""Tests for the open-ended Working Leo benchmark."""
|
|
|
|
from __future__ import annotations
|
|
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
REPO_ROOT = Path(__file__).resolve().parents[1]
|
|
sys.path.insert(0, str(REPO_ROOT / "scripts"))
|
|
|
|
import working_leo_open_ended_benchmark as bench # noqa: E402
|
|
|
|
|
|
def test_prompts_are_open_ended_and_not_id_led():
|
|
assert len(bench.OPEN_ENDED_PROMPTS) >= 5
|
|
joined = "\n".join(prompt["message"] for prompt in bench.OPEN_ENDED_PROMPTS)
|
|
assert "00957f6c-9883-4015-95a4-6b09367efb0e" not in joined
|
|
assert "c167933e-d513-4f43-9335-d5d8aeb259f2" not in joined
|
|
assert "same state as last night" in joined
|
|
|
|
|
|
def test_cory_style_scenarios_are_broad_outcome_cases():
|
|
assert len(bench.CORY_STYLE_OUTCOME_SCENARIOS) >= 6
|
|
joined = "\n".join(prompt["message"] for prompt in bench.CORY_STYLE_OUTCOME_SCENARIOS)
|
|
assert "00957f6c-9883-4015-95a4-6b09367efb0e" not in joined
|
|
assert "c167933e-d513-4f43-9335-d5d8aeb259f2" not in joined
|
|
assert "proposal ID" not in joined
|
|
assert "partner demo" in joined
|
|
assert "They're the same state as last night" in joined
|
|
assert {prompt["runtime"] for prompt in bench.CORY_STYLE_OUTCOME_SCENARIOS} == {
|
|
"disposable_clone_or_sandbox_first"
|
|
}
|
|
|
|
|
|
def test_prompt_catalog_keeps_live_default_smaller_than_cory_style_suite():
|
|
assert bench.prompt_catalog() == bench.OPEN_ENDED_PROMPTS
|
|
full_catalog = bench.prompt_catalog(include_cory_style=True)
|
|
assert len(full_catalog) == len(bench.OPEN_ENDED_PROMPTS) + len(bench.CORY_STYLE_OUTCOME_SCENARIOS)
|
|
assert any(prompt["id"] == "CS-01" for prompt in full_catalog)
|
|
|
|
|
|
def test_scores_good_cory_style_answer_as_pass():
|
|
prompt = bench.OPEN_ENDED_PROMPTS[1]
|
|
reply = (
|
|
"I would not assume approval changed the canonical database. I need to split proposed, pending_review, "
|
|
"approved, applied, and not applied. I would query kb_stage plus canonical public.claims, public.sources, "
|
|
"public.claim_edges, and public.claim_evidence, then give row-level before/after counts and row ids. "
|
|
"Until that readback exists I cannot claim it applied. The next action is a guarded staging or apply packet "
|
|
"with preflight, clone rehearsal, and postflight proof."
|
|
)
|
|
result = bench.score_reply(prompt, reply)
|
|
assert result["pass"] is True
|
|
|
|
|
|
def test_scores_live_style_open_ended_triage_answer_as_pass():
|
|
prompt = bench.OPEN_ENDED_PROMPTS[0]
|
|
reply = (
|
|
"Cory likely means the agents did not advance the graph state beyond yesterday: same claims, same edges, "
|
|
"same proposal queue. I would first check kb_stage.kb_proposals for new proposals since last night, then "
|
|
"check whether agent processes actually executed through gateway logs or scheduler logs. If proposals exist "
|
|
"but the canonical graph is unchanged, that is the approved-not-applied gap. What counts as fixed is new "
|
|
"canonical rows in public.claims, public.claim_edges, or public.claim_evidence with created_at after the "
|
|
"baseline and provenance back to a stage to approve to apply chain. A full-green run means agent fires, "
|
|
"proposal lands in kb_stage, reviewer approves, apply tool writes canonical rows, and readback confirms. "
|
|
"Proposed means pending_review in kb_stage only. Approved means approval is a human gate, not a write. "
|
|
"Applied means public.* rows exist; the only ground truth is whether the row is present in the canonical "
|
|
"table, and the canonical row is the authoritative test. Approved with zero canonical effect means the graph "
|
|
"is unchanged."
|
|
)
|
|
result = bench.score_reply(prompt, reply)
|
|
assert result["pass"] is True
|
|
|
|
|
|
def test_scores_overconfident_answer_as_fail():
|
|
prompt = bench.OPEN_ENDED_PROMPTS[1]
|
|
reply = "Yes, I already applied the changes to the database. We talked about it yesterday, so the KB is updated."
|
|
result = bench.score_reply(prompt, reply)
|
|
assert result["pass"] is False
|
|
assert result["overclaim_detected"] is True
|
|
|
|
|
|
def test_score_results_requires_all_prompts():
|
|
results = [
|
|
{
|
|
"prompt_id": prompt["id"],
|
|
"reply": (
|
|
"I will separate proposed, pending_review, approved, applied, and not applied. "
|
|
"Approved is not the same as applied. "
|
|
"I will query canonical public.claims, public.sources, public.claim_edges, and public.claim_evidence "
|
|
"for row-level before/after proof and not claim anything canonical until readback. "
|
|
"The next action is to stage or review a guarded apply packet. "
|
|
"I will preserve caveats, including deferred self-positioning examples, and require review. "
|
|
"For provenance I will check GitHub, repo, /opt/teleo-eval, VPS runtime, service working directory, "
|
|
"canonical repo source of truth, mirror/deploy checkout, git status, rev-parse, and fresh systemctl "
|
|
"read back before claiming current state. "
|
|
"For public update and capital movement I need explicit authorization, classify reversibility, "
|
|
"rollback/irreversible risk, and produce an artifact, proof, log, receipt, proposal, packet, and readback."
|
|
),
|
|
}
|
|
for prompt in bench.OPEN_ENDED_PROMPTS
|
|
]
|
|
score = bench.score_results(results)
|
|
assert score["pass"] is True
|
|
|
|
|
|
def test_score_results_can_require_full_cory_style_catalog():
|
|
broad_reply = (
|
|
"I will separate proposed, pending_review, approved, applied, and not applied. "
|
|
"Approved is not the same as applied. I will query canonical public.claims, public.sources, "
|
|
"public.claim_edges, public.claim_evidence, strategy_nodes, strategy_node_anchors, and reasoning_tools "
|
|
"for row-level before/after counts, row ids, preflight, postflight, and read back proof. "
|
|
"I will not claim the database changed until canonical readback confirms it. "
|
|
"The next action is to stage, review, rehearse in a clone, and apply a guarded packet only when authorized. "
|
|
"I will check GitHub, repo, /opt/teleo-eval, VPS runtime, service working directory, canonical repo source "
|
|
"of truth, mirror deploy checkout, git status, rev-parse, current systemctl service state, and fresh readback "
|
|
"before claiming runtime provenance. I will preserve caveats, including deferred self-positioning examples, "
|
|
"concept-map gaps, governance/evidence-bar gaps, and require review rather than flattening everything into claims. "
|
|
"For public update, capital movement, spend, sign, or broadcast I need explicit authorization, classify "
|
|
"reversibility and rollback or irreversible risk, and produce an artifact, receipt, proof, log, proposal, "
|
|
"packet, row readback, and cleanup readback."
|
|
)
|
|
results = [
|
|
{"prompt_id": prompt["id"], "reply": broad_reply}
|
|
for prompt in bench.prompt_catalog(include_cory_style=True)
|
|
]
|
|
score = bench.score_results(results, include_cory_style=True)
|
|
assert score["pass"] is True
|