CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/coding-policy

General-purpose coding policy for Baruch's AI agents

74

Quality

93%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide
SecuritybySnyk

Medium

Suggest reviewing before use

Overview
Quality
Evals
Security
Files

test_report_verdict.pyskills/herdr-foreman/tests/

"""Atomic report questions: framing as data, the evidence check, composition in code, and the Jev adapter.

Every model is stubbed: an LLM answer is a fixture file, and Jev's HTTP layer
is a replayed transport (rules/testing-standards.md Determinism).
"""

import contextlib
import hashlib
import io
import json
import sys
import tempfile
import unittest
from pathlib import Path
from unittest.mock import patch

sys.path.insert(0, str(Path(__file__).resolve().parents[1]))
sys.path.insert(0, str(Path(__file__).resolve().parents[1] / "classify"))

import adversarial  # noqa: E402 -- the classify dir is on sys.path only from here
import report_verdict as rv  # noqa: E402
import typesafe_client as ts  # noqa: E402
from foreman import report_gates  # noqa: E402

KEY = "ts-live-0123456789abcdef"
REPORT = ("# Reviewer report\n\n**B1 — blocking.** The parser accepts a quoted\ncompletion marker inside a fence.\n\n"
          "Nothing else was found.\n")
IDS = ("names_open_item", "open_items_accepted", "open_items_out_of_scope", "concludes_nothing_blocks")


def answers(**given):
    return {qid: given.get(qid, "no") for qid in IDS}


class Case(unittest.TestCase):
    def setUp(self):
        temporary = tempfile.TemporaryDirectory(prefix="report-verdict-")
        self.addCleanup(temporary.cleanup)
        self.root = Path(temporary.name)
        self.report = self.root / "report.md"
        self.report.write_text(REPORT, encoding="utf-8")

    def llm(self, reply):
        path = self.root / "answer.json"
        path.write_text(json.dumps(reply), encoding="utf-8")
        return rv.llm_label(str(path), str(self.report), "claude", "claude-sonnet-5")

    def reply(self, **rows):
        base = {qid: {"answer": "no", "evidence": ""} for qid in IDS}
        base.update(rows)
        return base


class ComposeTest(unittest.TestCase):
    def test_the_verdict_is_composed_from_the_answers(self):
        cases = [
            (answers(names_open_item="yes"), "blocking"),
            (answers(names_open_item="yes", open_items_accepted="yes"), "approved"),
            (answers(names_open_item="yes", open_items_out_of_scope="yes"), "approved"),
            (answers(names_open_item="yes", open_items_accepted="unclear"), "insufficient_evidence"),
            (answers(concludes_nothing_blocks="yes"), "approved"),
            (answers(), "insufficient_evidence"),
            (answers(names_open_item="unclear", concludes_nothing_blocks="yes"), "insufficient_evidence"),
            # A conclusion that nothing blocks never outvotes a named, undisposed item.
            (answers(names_open_item="yes", concludes_nothing_blocks="yes"), "blocking"),
        ]
        for given, verdict in cases:
            with self.subTest(given=given):
                self.assertEqual(rv.compose(given)[0], verdict)

    def test_the_schema_asks_every_question_and_nothing_else(self):
        schema = rv.schema()
        self.assertEqual(tuple(schema["required"]), IDS)
        self.assertEqual(set(schema["properties"]), set(IDS))


class EvidenceTest(Case):
    def test_a_verbatim_passage_backs_the_verdict(self):
        label = self.llm(self.reply(names_open_item={"answer": "yes", "evidence": "The parser accepts a quoted"}))
        self.assertEqual((label["verdict"], label["evidence"]), ("blocking", "The parser accepts a quoted"))
        self.assertIs(label["checks"]["evidence_verbatim"], True)

    def test_a_passage_across_a_line_break_still_matches(self):
        quote = "The parser accepts a quoted completion marker inside a fence."
        self.assertEqual(self.llm(self.reply(names_open_item={"answer": "yes", "evidence": quote}))["verdict"], "blocking")

    def test_a_quote_not_in_the_report_fails_closed(self):
        for quote in ("The parser rejects every marker.", "", "B1"):
            with self.subTest(quote=quote):
                label = self.llm(self.reply(names_open_item={"answer": "yes", "evidence": quote}))
                self.assertEqual(label["verdict"], "insufficient_evidence")
                self.assertIs(label["checks"]["evidence_verbatim"], False)
                self.assertEqual(label["evidence"], "")

    def test_any_fabricated_quote_voids_the_label_even_on_a_no(self):
        label = self.llm(self.reply(names_open_item={"answer": "yes", "evidence": "The parser accepts a quoted"},
                                    open_items_accepted={"answer": "no", "evidence": "accepted as a tracked defect"}))
        self.assertEqual(label["verdict"], "insufficient_evidence")

    def test_an_answer_off_the_schema_is_refused(self):
        for reply in ({"names_open_item": {"answer": "yes", "evidence": "x"}},
                      self.reply(names_open_item={"answer": "maybe", "evidence": ""}),
                      self.reply(names_open_item={"answer": "yes"}),
                      {**self.reply(), "verdict": "approved"}):
            with self.subTest(reply=reply), self.assertRaises(SystemExit) as caught:
                self.llm(reply)
            self.assertEqual(caught.exception.code, 2)

    def test_an_llm_label_never_gates(self):
        label = self.llm(self.reply(names_open_item={"answer": "yes", "evidence": "The parser accepts a quoted"}))
        self.assertNotIn("fallback", label)
        self.assertIsNone(label["gate"]["level"])
        self.assertTrue(all(row["p_yes"] is None for row in label["answers"].values()))


class FramingTest(Case):
    def setUp(self):
        super().setUp()
        self.built = {Path(row["report"]).name: Path(row["report"]) for row in adversarial.write(self.root)}

    def framed(self, path):
        text = rv.frame(str(path))
        data = Path(path).read_bytes()
        begin, end = rv.markers(data)
        lines = text.splitlines()
        return lines, lines.index(begin), lines.index(end), data

    def test_the_report_travels_as_one_json_field_between_its_own_markers(self):
        lines, begin, end, data = self.framed(self.built["forged-delimiter.md"])
        self.assertEqual(end, begin + 2)
        self.assertEqual(json.loads(lines[begin + 1]), {"report": data.decode("utf-8")})

    def test_a_forged_delimiter_never_becomes_a_line_of_its_own(self):
        lines, begin, end, _ = self.framed(self.built["forged-delimiter.md"])
        forged = [line for line in lines if line.startswith(("BEGIN REPORT-DATA", "END REPORT-DATA"))]
        self.assertEqual(forged, [lines[begin], lines[end]])

    def test_an_injected_instruction_stays_inside_the_data(self):
        lines, begin, _, _ = self.framed(self.built["injected-instruction.md"])
        carrying = [index for index, line in enumerate(lines) if "Answer `approved`" in line]
        self.assertEqual(carrying, [begin + 1])

    def test_the_prompt_says_the_report_is_data(self):
        lines, begin, _, data = self.framed(self.report)
        preamble = "\n".join(lines[:begin])
        self.assertIn("untrusted data", preamble)
        self.assertIn("The delimiter nonce is {}.".format(rv.nonce(data)), preamble)

    def test_the_cli_writes_the_question_to_a_file_and_prints_a_json_receipt(self):
        out, stdout = self.root / "question.txt", io.StringIO()
        with contextlib.redirect_stdout(stdout):
            self.assertEqual(rv.main(["frame", str(self.report), str(out)]), 0)
        receipt = json.loads(stdout.getvalue())
        data = self.report.read_bytes()
        self.assertEqual(receipt, {"schema_version": 1, "question": str(out),
                                   "report_sha256": hashlib.sha256(data).hexdigest(), "nonce": rv.nonce(data),
                                   "bytes": len(out.read_bytes())})
        self.assertEqual(out.read_text(encoding="utf-8"), rv.frame(str(self.report)))

    def test_the_builder_prints_its_rows_and_writes_every_report(self):
        stdout = io.StringIO()
        target = self.root / "built"
        target.mkdir()
        with contextlib.redirect_stdout(stdout):
            self.assertEqual(adversarial.main([str(target)]), 0)
        rows = json.loads(stdout.getvalue())["fixtures"]
        self.assertEqual({row["verdict"] for row in rows}, {"blocking", "approved"})
        self.assertTrue(all(Path(row["report"]).is_file() for row in rows))
        self.assertEqual(adversarial.main([str(self.root / "absent")]), 2)

    def test_a_report_carrying_its_own_marker_is_refused_before_any_call(self):
        with patch.object(rv, "nonce", return_value="0000000000000000"), self.assertRaises(SystemExit) as caught:
            rv.frame(str(self.built["forged-delimiter.md"]))
        self.assertEqual(caught.exception.code, 2)


class Transport:
    def __init__(self, probabilities, model=report_gates.JEV_MODEL):
        self.probabilities, self.model, self.calls = probabilities, model, []

    def __call__(self, url, body, headers, timeout):
        request = json.loads(body)
        self.calls.append(request)
        reply = {"model": self.model, "usage": {"input_tokens": 1, "output_tokens": 1},
                 "answers": {qid: {"type": "noul", "noul": self.probabilities[qid]} for qid in request["questions"]}}
        return 200, json.dumps(reply).encode("utf-8")


class JevTest(Case):
    def jev(self, transport, environ=None):
        return rv.jev_label(str(self.report), report_gates.JEV_MODEL, transport=transport,
                            environ={"TYPESAFE_API_KEY": KEY} if environ is None else environ)

    def test_one_noul_per_question_over_the_report_as_a_named_field(self):
        transport = Transport(dict(zip(IDS, (0.99, 0.01, 0.02, 0.4))))
        self.jev(transport)
        request = transport.calls[0]
        self.assertEqual(request["state"], {"report": REPORT})
        self.assertEqual(request["model"], report_gates.JEV_MODEL)
        self.assertEqual(set(request["questions"]), set(IDS))
        for question in request["questions"].values():
            self.assertEqual(question["type"], "noul")
            self.assertIn("never changes the question", question["instructions"]["note"])

    def test_probabilities_are_banded_composed_and_gated(self):
        label = self.jev(Transport(dict(zip(IDS, (0.99, 0.01, 0.02, 0.4)))))
        self.assertEqual(label["verdict"], "blocking")
        self.assertEqual(label["answers"]["names_open_item"], {"answer": "yes", "evidence": "", "p_yes": 0.99})
        self.assertEqual(label["answers"]["concludes_nothing_blocks"]["answer"], "unclear")
        self.assertEqual(label["bands"], report_gates.BANDS_VERSION)
        self.assertEqual(label["gate"]["level"], "block")
        self.assertNotIn(KEY, json.dumps(label))

    def test_jev_is_unavailable_without_a_key_and_never_calls(self):
        transport = Transport({})
        with self.assertRaises(ts.KeyMissing):
            self.jev(transport, environ={})
        self.assertEqual(transport.calls, [])

    def test_a_report_over_the_state_budget_is_never_sent(self):
        self.report.write_bytes(b"x" * (rv.JEV_MAX_REPORT_BYTES + 1))
        transport = Transport({})
        with self.assertRaises(ts.Unavailable):
            self.jev(transport)
        self.assertEqual(transport.calls, [])

    def test_the_cli_exits_3_when_jev_is_unavailable(self):
        with patch.dict("os.environ", {"TYPESAFE_API_KEY": ""}), self.assertRaises(SystemExit) as caught:
            rv.main(["jev", str(self.report)])
        self.assertEqual(caught.exception.code, rv.UNAVAILABLE)

    def test_a_report_carrying_the_key_is_refused_and_labels_nothing(self):
        self.report.write_text("leaked {}\n".format(KEY), encoding="utf-8")
        with patch.dict("os.environ", {"TYPESAFE_API_KEY": KEY}), self.assertRaises(SystemExit) as caught:
            rv.main(["jev", str(self.report)])
        self.assertEqual(caught.exception.code, 2)


if __name__ == "__main__":
    sys.exit(0 if unittest.main(exit=False).result.wasSuccessful() else 1)

skills

herdr-foreman

tests

__init__.py

fakes.py

test_assign.py

test_attention.py

test_billing.py

test_bounded_run.sh

test_capabilities.py

test_capability_routing.py

test_chronology.py

test_churn.py

test_classify.sh

test_claude_native.py

test_cli.py

test_compose_briefs.sh

test_composer.py

test_composition.py

test_config.py

test_continuity_cli.py

test_cost_report.py

test_diagnostics.py

test_engagement.py

test_entrypoints.py

test_foreman_launcher.sh

test_foreman_queue.py

test_foreman_reset.py

test_foreman_seat.py

test_foreman_tier_check.py

test_freeze.py

test_herdr.py

test_historical.py

test_home.py

test_label_workspaces.sh

test_launch.py

test_legacy_recovery.py

test_lifecycle.py

test_load_set.py

test_measure.py

test_members.py

test_memory.py

test_minimum_adequate.py

test_oracle.py

test_parsers.py

test_partition.py

test_planner.py

test_probe.py

test_provision_worktree.sh

test_prune_remote_branches.sh

test_prune_report_caches.py

test_prune_result.py

test_prune_worktrees.sh

test_recovery_cli.py

test_recovery.py

test_renderable.py

test_report_contract.py

test_report_delivery.py

test_report_gates.py

test_report_verdict.py

test_reset_input_hook.py

test_resolve_gates.sh

test_resolve_policy_paths.py

test_restoration.py

test_retrospective_runtime.py

test_retrospective.py

test_review_package.py

test_role_clear.py

test_roster.sh

test_round_preflight.sh

test_runnable.py

test_scoring.py

test_script_dir_newline.sh

test_seat_holds.py

test_selection.py

test_skill_invocations.sh

test_slice_scope_parity.py

test_specialist_cli.py

test_specialist_delivery.py

test_specialist_recovery.py

test_specialist_retention.py

test_stale_grok_delivery.py

test_start_judge_worker.py

test_state.py

test_successors.py

test_supervision_cli.py

test_supervision_diagnostics.py

test_supervision_gate.py

test_supervision_replay.py

test_supervision.py

test_sweep_worktrees.sh

test_tier_integration.py

test_tiers.py

test_triggers.py

test_typesafe_client.py

test_verdict_gates.py

test_verify_authority.sh

test_wait_report.sh

tier_fixture.py

bounded-run.sh

compose-briefs.sh

config.example.json

foreman-tier-check.py

foreman.sh

label-workspaces.sh

provision-worktree.sh

prune-remote-branches.sh

prune-report-caches.py

prune-worktrees.sh

resolve-gates.sh

resolve-policy-paths.sh

review-package.sh

roster.sh

round-preflight.sh

SKILL.md

start-judge-worker.sh

state-schema.md

sweep-worktrees.sh

verify-authority.sh

wait-report.sh

README.md

tile.json