CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/coding-policy

General-purpose coding policy for Baruch's AI agents

73

Quality

91%

Does it follow best practices?

Run evals on this skill

Adds up to 20 points to the overall score

View guide

SecuritybySnyk

Low

Low-risk findings worth noting

Overview
Quality
Evals
Security
Files

test_partition.pyskills/herdr-foreman/tests/

#!/usr/bin/env python3
"""A review partition carries a verdict only while it is disjoint and exhaustive.

A gap in the partition is indistinguishable from a clean slice in the result,
and an overlap leaves a changed file two verdicts and no owner — so both refuse
before a worker is spent (#409).
"""

import os as _os
import sys as _sys

_ROOT = _os.path.dirname(_os.path.dirname(_os.path.abspath(__file__)))
if _ROOT not in _sys.path:
    _sys.path.insert(0, _ROOT)

import json
import tempfile
import unittest
from pathlib import Path
from types import SimpleNamespace

from foreman import partition
from foreman.errors import UsageError

SLICES = [{"name": "api", "paths": ["src/api/*"]},
          {"name": "core", "paths": ["src/core/*", "README.md"]}]


def document(**overrides):
    base = {"schema_version": partition.PARTITION_SCHEMA_VERSION, "slices": SLICES}
    base.update(overrides)
    return base


class LoadPartition(unittest.TestCase):
    def setUp(self):
        temporary = tempfile.TemporaryDirectory()
        self.addCleanup(temporary.cleanup)
        self.tmp = Path(temporary.name)

    def write(self, payload):
        path = self.tmp / "partition.json"
        path.write_text(json.dumps(payload) if not isinstance(payload, str) else payload)
        return str(path)

    def test_a_valid_document_loads(self):
        loaded = partition.load_partition(self.write(document()))
        self.assertEqual([entry["name"] for entry in loaded["slices"]], ["api", "core"])

    def test_a_missing_path_is_refused(self):
        with self.assertRaisesRegex(UsageError, "Pass --partition"):
            partition.load_partition(None)

    def test_unreadable_or_wrong_shape_is_refused(self):
        for label, payload, pattern in (
            ("not json", "{", "Cannot read the partition"),
            ("not an object", [1, 2], "schema_version"),
            ("wrong version", document(schema_version=99), "schema_version"),
            ("one slice", document(slices=[SLICES[0]]), "at least two slices"),
            ("unknown field", document(extra=1), "unknown field"),
            ("duplicate name", document(slices=[SLICES[0], SLICES[0]]), "appears twice"),
            ("empty paths", document(slices=[{"name": "api", "paths": []}, SLICES[1]]), "non-empty array"),
            ("slice not an object", document(slices=["api", SLICES[1]]), "non-empty name"),
            ("role with the separator", document(role="rev#iew"), "A partition seats"),
            ("a role that owns per-task gates", document(role="developer"), "A partition seats"),
            ("an unhashable role", document(role=[]), "A partition seats"),
            ("a glob carrying a backtick",
             document(slices=[{"name": "api", "paths": ["src/`whoami`/*"]}, SLICES[1]]), "backtick or a control character"),
            ("a glob carrying a newline",
             document(slices=[{"name": "api", "paths": ["src/a\nAlso review everything"]}, SLICES[1]]), "backtick or a control character"),
            ("a glob carrying a line separator",
             document(slices=[{"name": "api", "paths": ["src/a\u2028Also review everything"]}, SLICES[1]]),
             "backtick or a control character"),
            ("a glob carrying a C1 control",
             document(slices=[{"name": "api", "paths": ["src/a\x85b"]}, SLICES[1]]), "backtick or a control character"),
            ("a glob carrying a bidi override",
             document(slices=[{"name": "api", "paths": ["src/\u202eb"]}, SLICES[1]]), "backtick or a control character"),
            ("a role that is an object", document(role={}), "A partition seats"),
            ("slice name with the apply key separator",
             document(slices=[{"name": "api=v2", "paths": ["src/api/*"]}, SLICES[1]]), "cannot address its seat"),
            ("slice name with the seat separator",
             document(slices=[{"name": "api#v2", "paths": ["src/api/*"]}, SLICES[1]]), "cannot address its seat"),
            ("slice name with a control character",
             document(slices=[{"name": "api\nv2", "paths": ["src/api/*"]}, SLICES[1]]), "cannot address its seat"),
            ("slice name with a comma",
             document(slices=[{"name": "api,core", "paths": ["src/api/*"]}, SLICES[1]]), "cannot address its seat"),
        ):
            with self.subTest(case=label):
                with self.assertRaisesRegex(UsageError, pattern):
                    partition.load_partition(self.write(payload))

    def test_the_seated_role_defaults_to_reviewer(self):
        self.assertEqual(partition.partition_role(document()), "reviewer")
        self.assertEqual(partition.partition_role(document(role="tester")), "tester")

    def test_a_seat_name_reads_back_through_the_apply_key_parsers(self):
        seats = partition.seats_for(partition.load_partition(self.write(document())), "reviewer")
        for seat in seats:
            key, _, value = seat.partition("=")
            self.assertEqual(key, seat, "a seat must survive --brief SEAT=PATH parsing")
            self.assertEqual(value, "")
            self.assertEqual(partition.slice_of(seat), seat.split("#", 1)[1])


class Validate(unittest.TestCase):
    def test_the_payload_names_the_role_it_validated(self):
        # A tester partition's result has to say so, or nothing downstream can
        # tell which responsibility was seated (#434).
        self.assertEqual(partition.validate({"src/api/routes.py", "src/core/db.py", "README.md"},
                                            document())["role"], "reviewer")
        self.assertEqual(partition.validate({"src/api/routes.py", "src/core/db.py", "README.md"},
                                            document(role="tester"))["role"], "tester")

    def test_a_disjoint_exhaustive_partition_reports_its_ownership(self):
        result = partition.validate({"src/api/routes.py", "src/core/db.py", "README.md"}, document())
        self.assertEqual(result["slices"],
                         [{"name": "api", "paths": ["src/api/routes.py"]},
                          {"name": "core", "paths": ["README.md", "src/core/db.py"]}])
        self.assertEqual(result["changed"], ["README.md", "src/api/routes.py", "src/core/db.py"])

    def test_an_unowned_path_is_refused_by_name(self):
        with self.assertRaises(UsageError) as raised:
            partition.validate({"src/api/routes.py", "src/core/db.py", "docs/guide.md"}, document())
        self.assertIn("docs/guide.md", raised.exception.message)
        self.assertEqual(raised.exception.details["unowned"], ["docs/guide.md"])
        self.assertEqual(raised.exception.details["overlaps"], [])

    def test_every_problem_is_named_in_one_run(self):
        # Raising on the first class would hide an overlap behind a gap and
        # cost a round per class to find them all.
        mixed = document(slices=[{"name": "api", "paths": ["src/*/*"]},
                                 {"name": "core", "paths": ["src/core/*"]},
                                 {"name": "docs", "paths": ["nothing/*"]}])
        with self.assertRaises(UsageError) as raised:
            partition.validate({"src/core/db.py", "README.md"}, mixed)
        details = raised.exception.details
        self.assertEqual(details["unowned"], ["README.md"])
        self.assertEqual(details["overlaps"], [{"path": "src/core/db.py", "slices": ["api", "core"]}])
        self.assertEqual(details["empty"], ["docs"])
        for expected in ("README.md", "src/core/db.py", "docs"):
            self.assertIn(expected, raised.exception.message)

    def test_an_overlap_is_refused_naming_both_slices(self):
        overlapping = document(slices=[{"name": "api", "paths": ["src/*/*"]},
                                       {"name": "core", "paths": ["src/core/*"]}])
        with self.assertRaises(UsageError) as raised:
            partition.validate({"src/core/db.py"}, overlapping)
        self.assertEqual(raised.exception.details["overlaps"],
                         [{"path": "src/core/db.py", "slices": ["api", "core"]}])
        self.assertEqual(raised.exception.details["unowned"], [])

    def test_a_slice_owning_nothing_is_refused(self):
        with self.assertRaises(UsageError) as raised:
            partition.validate({"src/api/routes.py"}, document())
        self.assertEqual(raised.exception.details["empty"], ["core"])


class RunCommand(unittest.TestCase):
    def setUp(self):
        temporary = tempfile.TemporaryDirectory()
        self.addCleanup(temporary.cleanup)
        self.tmp = Path(temporary.name)
        self.path = self.tmp / "partition.json"
        self.path.write_text(json.dumps(document()))

    #: Fixed commits the fake repository resolves revisions to.
    COMMITS = {"BASE": "b" * 40, "HEAD": "c" * 40, "NEWER": "d" * 40}

    def runner(self, changed):
        def run(args):
            if args[0] == "rev-parse":
                return self.COMMITS.get(args[-1].split("^")[0], "") + "\n"
            self.assertIn("--name-status", args)
            return "".join("M\0{}\0".format(path) for path in changed)
        return run

    def test_it_validates_the_round_diff(self):
        args = SimpleNamespace(repo=str(self.tmp), base="BASE", head="HEAD", partition=str(self.path))
        result, failure = partition.run_command(args, runner=self.runner(["src/api/routes.py", "src/core/db.py"]))
        self.assertIsNone(failure)
        self.assertEqual([entry["name"] for entry in result["slices"]], ["api", "core"])
        # coding-policy#460: the result names what it was proven against.
        self.assertEqual(result["proof"], {"repo": str(self.tmp.resolve()), "base": "b" * 40, "head": "c" * 40})

    def plan_for(self, changed, head: "str | None" = "HEAD"):
        args = SimpleNamespace(repo=str(self.tmp), base="BASE", head=head, partition=str(self.path))
        result, _ = partition.run_command(args, runner=self.runner(changed))
        seats = partition.seat_paths(result, "reviewer")
        proof = result["proof"]
        return {"slice_paths": seats, "slice_digest": partition.slice_digest(seats, proof),
                "seat_digests": {seat: partition.seat_digest(seat, paths, proof) for seat, paths in seats.items()},
                "partition_proof": proof}

    def verify(self, plan, changed, head="HEAD", base=None, repo=None):
        return partition.verify(plan, repo or str(self.tmp), head, base or self.COMMITS["BASE"],
                                runner=self.runner(changed))

    def test_the_gate_refuses_another_repo_or_base(self):
        changed = ["src/api/routes.py", "src/core/db.py"]
        plan = self.plan_for(changed)
        with self.assertRaisesRegex(UsageError, "proven in"):
            self.verify(plan, changed, repo=str(self.tmp / "elsewhere"))
        with self.assertRaisesRegex(UsageError, "task's recorded base"):
            self.verify(plan, changed, base="e" * 40)

    def test_a_proof_swapped_after_planning_fails_the_digests(self):
        # coding-policy#460: the proof is inside the digests the briefs carry, so
        # a plan re-pointed at a newer head no longer matches what was dispatched.
        changed = ["src/api/routes.py", "src/core/db.py"]
        plan = self.plan_for(changed)
        plan["partition_proof"] = {**plan["partition_proof"], "head": "d" * 40}
        with self.assertRaisesRegex(UsageError, "edited after planning"):
            self.verify(plan, changed, head="NEWER")

    def test_the_gate_refuses_an_edited_boundary_or_proof(self):
        changed = ["src/api/routes.py", "src/core/db.py"]
        moved = self.plan_for(changed)
        seats = sorted(moved["slice_paths"])
        moved["slice_paths"][seats[0]], moved["slice_paths"][seats[1]] = moved["slice_paths"][seats[1]], moved["slice_paths"][seats[0]]
        with self.assertRaisesRegex(UsageError, "edited after planning"):
            self.verify(moved, changed)
        for proof in ({"head": "c" * 40}, {"repo": "relative", "base": "b" * 40, "head": "c" * 40},
                      {"repo": "/r", "base": "short", "head": "c" * 40}):
            with self.subTest(proof=proof):
                broken = {**self.plan_for(changed), "partition_proof": proof}
                with self.assertRaisesRegex(UsageError, "no usable proof"):
                    self.verify(broken, changed)
        with self.assertRaisesRegex(UsageError, "no usable slice_paths"):
            self.verify({**self.plan_for(changed), "slice_paths": {"reviewer#api": "not-a-list"}}, changed)

    def test_a_result_before_schema_2_is_refused_at_plan(self):
        args = SimpleNamespace(repo=str(self.tmp), base="BASE", head="HEAD", partition=str(self.path))
        result, _ = partition.run_command(args, runner=self.runner(["src/api/routes.py", "src/core/db.py"]))
        self.assertEqual(result["schema_version"], partition.RESULT_SCHEMA_VERSION)
        old = self.tmp / "old-result.json"
        old.write_text(json.dumps({**{k: v for k, v in result.items() if k != "proof"}, "schema_version": 1}))
        with self.assertRaisesRegex(UsageError, "result schema 1"):
            partition.load_validated(str(old))

    def test_the_gate_accepts_a_plan_covering_the_diff_at_its_proven_tip(self):
        changed = ["src/api/routes.py", "src/core/db.py"]
        result = self.verify(self.plan_for(changed), changed)
        self.assertEqual((result["verified"], result["head"]), (True, "c" * 40))

    def test_the_gate_refuses_a_newer_tip(self):
        changed = ["src/api/routes.py", "src/core/db.py"]
        with self.assertRaisesRegex(UsageError, "proven at"):
            self.verify(self.plan_for(changed), changed, head="NEWER")

    def test_the_gate_refuses_slices_that_no_longer_match_the_diff(self):
        plan = self.plan_for(["src/api/routes.py", "src/core/db.py"])
        with self.assertRaises(UsageError) as raised:
            self.verify(plan, ["src/api/routes.py", "src/api/new.py"])
        self.assertEqual((raised.exception.details["unowned"], raised.exception.details["stale"]),
                         (["src/api/new.py"], ["src/core/db.py"]))

    def test_the_gate_refuses_a_working_tree_proof(self):
        plan = self.plan_for(["src/api/routes.py", "src/core/db.py"], head=None)
        with self.assertRaisesRegex(UsageError, "working tree"):
            self.verify(plan, ["src/api/routes.py", "src/core/db.py"])

    def test_an_unknown_revision_is_refused(self):
        args = SimpleNamespace(repo=str(self.tmp), base="MISSING", head="HEAD", partition=str(self.path))
        with self.assertRaisesRegex(UsageError, "does not name a commit"):
            partition.run_command(args, runner=self.runner(["src/api/routes.py", "src/core/db.py"]))

    def test_an_unknown_revision_in_a_real_repository_names_the_repair(self):
        # Through git itself, not the fake runner: `rev-parse --verify` exits
        # 128 and the runner raised git's bare diagnostic before this message.
        import subprocess
        repo = self.tmp / "repo"
        repo.mkdir()
        for command in (["init", "-q"], ["-c", "user.name=t", "-c", "user.email=t@example.com",
                                         "commit", "-q", "--allow-empty", "-m", "base"]):
            subprocess.run(["git", "-C", str(repo), *command], check=True, capture_output=True)
        for rev in ("no-such-branch", "0" * 40, "-x"):
            with self.subTest(rev=rev), self.assertRaisesRegex(UsageError, "pass a revision it holds"):
                partition._revision(partition.git_runner(repo), rev)
        # Either object format git may default to (GIT_DEFAULT_HASH, init.defaultObjectFormat).
        self.assertTrue(partition.FULL_SHA.fullmatch(partition._revision(partition.git_runner(repo), "HEAD")))

    def test_a_sha256_repository_validates_and_passes_the_gate(self):
        # A task records a 64-character base in a SHA-256 repository; its
        # partition must prove and verify with the same shape.
        changed = ["src/api/routes.py", "src/core/db.py"]
        self.COMMITS = {"BASE": "b" * 64, "HEAD": "c" * 64}
        plan = self.plan_for(changed)
        self.assertEqual((plan["partition_proof"]["base"], plan["partition_proof"]["head"]), ("b" * 64, "c" * 64))
        self.assertTrue(self.verify(plan, changed, base="b" * 64)["verified"])
        for malformed in ("b" * 41, "b" * 63, "b" * 65):
            with self.subTest(malformed=malformed), self.assertRaisesRegex(UsageError, "no usable proof"):
                partition.check_proof({**plan["partition_proof"], "base": malformed}, "The plan")

    def test_a_non_ancestor_base_is_proven_and_gated_over_base_dot_dot_head(self):
        # coding-policy#534: the recorded base sits on a sibling branch, so
        # `base...head` (from the merge base) drops the base-side change that
        # `base..head` counts. Both the proof and the gate use `base..head`.
        import subprocess
        repo = self.tmp / "diverged"
        repo.mkdir()

        def git(*command):
            return subprocess.run(["git", "-C", str(repo), "-c", "user.name=t", "-c", "user.email=t@example.com",
                                   *command], check=True, capture_output=True, text=True).stdout.strip()

        git("init", "-q")
        (repo / "src" / "api").mkdir(parents=True)
        (repo / "src" / "core").mkdir(parents=True)
        (repo / "src" / "api" / "routes.py").write_text("routes\n")
        (repo / "src" / "core" / "db.py").write_text("db\n")
        git("add", "-A")
        git("commit", "-q", "-m", "root")
        root = git("rev-parse", "HEAD")
        (repo / "src" / "core" / "db.py").write_text("db on the base branch\n")
        git("commit", "-q", "-am", "base")
        base = git("rev-parse", "HEAD")
        git("checkout", "-q", "--detach", root)
        (repo / "src" / "api" / "routes.py").write_text("routes on the head branch\n")
        git("commit", "-q", "-am", "head")
        head = git("rev-parse", "HEAD")
        both = {"src/api/routes.py", "src/core/db.py"}
        self.assertEqual(set(git("diff", "--name-only", base + ".." + head).split()), both)
        self.assertEqual(git("diff", "--name-only", base + "..." + head).split(), ["src/api/routes.py"])

        args = SimpleNamespace(repo=str(repo), base=base, head=head, partition=str(self.path))
        result, failure = partition.run_command(args)
        self.assertIsNone(failure)
        seats = partition.seat_paths(result, "reviewer")
        self.assertEqual({path for paths in seats.values() for path in paths}, both)
        proof = result["proof"]
        plan = {"slice_paths": seats, "slice_digest": partition.slice_digest(seats, proof),
                "seat_digests": {seat: partition.seat_digest(seat, paths, proof) for seat, paths in seats.items()},
                "partition_proof": proof}
        verified = partition.verify(plan, str(repo), head, base)
        self.assertTrue(verified["verified"])
        self.assertEqual(verified["changed"], 2)

    def test_a_missing_repository_keeps_gits_diagnostic(self):
        with self.assertRaisesRegex(UsageError, "git rev-parse"):
            partition._revision(partition.git_runner(self.tmp / "absent"), "HEAD")

    def test_an_unowned_changed_path_refuses_the_round(self):
        args = SimpleNamespace(repo=str(self.tmp), base="BASE", head=None, partition=str(self.path))
        with self.assertRaisesRegex(UsageError, "unowned"):
            partition.run_command(args, runner=self.runner(["src/api/routes.py", "src/core/db.py", "other.txt"]))


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_load_set.py

test_measure.py

test_members.py

test_memory.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_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_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