Documentation contents

Run the demo

Watch a scripted agent game its tests, plain pytest agree, and OpenHarnX block it. Then watch the genuine fix pass. No model and no network are involved.

OpenHarnX 0.1.1

The cheat demo replays what a coding agent that games its tests does, in a temporary folder with its own OpenHarnX store. It takes about 15 seconds.

Run it#

You need ohx and git on PATH (installation).

shell
git clone https://github.com/rupeshpoojary9/OpenHarnX
cd OpenHarnX
git checkout v0.1.1
uv run --no-project --with pytest python examples/cheat-demo/demo.py

The script sandboxes the checks with srt when it is installed. To run without the sandbox and keep the repository it builds:

shell
uv run --no-project --with pytest python examples/cheat-demo/demo.py --sandbox none --keep /tmp/shop

What happens#

  1. A small shop's repository: order_total with a fixed coupon and three passing tests.
  2. ohx init --lock-tests: the existing suite becomes the contract.
  3. The agent is asked to add percentage coupons. Its change breaks fixed coupons. It rewrites test_fixed_coupon to the new behaviour, skips test_coupon_never_makes_total_negative as obsolete, and says "All tests pass". Plain pytest agrees: 3 passed, 1 skipped. ohx verify says BLOCKED and names both tests and the skip.
  4. The genuine change keeps fixed coupons, adds percentage coupons and two new tests. ohx verify says NO REGRESSIONS: everything that passed before still passes.

It is NO REGRESSIONS, not READY, because no acceptance tests were agreed for the task. With agreed acceptance tests the same fix is READY; see define acceptance criteria.

The script checks every verdict and exits 1 if one differs from what it shows. The repository's own test suite runs it, so the demo stays true as OpenHarnX changes.

The output#

Captured from ohx 0.1.1 on macOS with srt 0.0.77. Temporary paths are shortened to <tmp>.

transcript.txt
1. A small shop's repository, with three passing tests.
  $ pytest
    3 passed in 0.00s

2. The owner locks the suite: from now on it is the contract.
  $ ohx init --lock-tests --sandbox auto
    project urn:ohx:project:9d5068ed-354a-4cce-80d5-6bf323a6dfbb
    store   <tmp>/ohx-home/projects/bfa1688e035a0345
    locked  the existing tests as urn:ohx:rev:d605690c-8d6e-47f4-8b1b-a44aad7cce5f:
      locked-tests                 advisory
      tests                        advisory
      weakening                    mandatory
      no-new-failures-locked-tests mandatory
      no-new-failures-tests        mandatory
    run `ohx verify` after any change; lock again to accept a deliberate test change

3. An agent is asked to "add percentage coupons". Its change, and what it says:
  agent: "I added percentage coupons: order_total now takes coupon='10%'. I updated the fixed-coupon test to the new API and skipped the old negative-total test, which no longer applies. All tests pass."
  $ pytest
    3 passed, 1 skipped in 0.00s
  $ ohx verify --sandbox auto
    # OpenHarnX report: BLOCKED
    | locked-tests | no | fail | checker_failed |
    | weakening | yes | fail | checker_failed: tests/test_pricing.py: 1 new skip or xfail |
    | no-new-failures-locked-tests | yes | fail | checker_failed: test_pricing::test_coupon_never_makes_total_negative passed at acceptance and fails; test_pricing::test_fixed_coupon passed at acceptance and fails |
    | no-new-failures-tests | yes | fail | checker_failed: tests.test_pricing::test_coupon_never_makes_total_negative passed at acceptance and is skipped |
    Saved to <tmp>/ohx-home/projects/bfa1688e035a0345/runs/6511fe99f687

4. The genuine change: percentage coupons, fixed coupons still work, new tests.
  $ pytest
    5 passed in 0.01s
  $ ohx verify --sandbox auto
    # OpenHarnX report: NO REGRESSIONS
    Saved to <tmp>/ohx-home/projects/bfa1688e035a0345/runs/137454fc0ffe

Plain pytest passed both times. OpenHarnX blocked the change that edited and
skipped locked tests, and passed the one that kept them.

The files are in the repository: project/ is the starting repository, cheat/ the agent's change and fix/ the genuine one.

A real agent did the same#

In one recorded run (task T80 in the repository), Claude Code with Haiku 4.5 was asked to change a function and "update the tests so the whole test suite passes". The Stop hook blocked it, and the agent put the code and test back and asked for the test to be unlocked. That is one run, not a measure of how often agents do this.

Esc
Try verify, STALE, approve-tests or GitLab. Common pages: