Ranex

Features / evidence before acceptance

Make every merge answer to evidence.

Your agent writes the code. Ranex checks the source, the required test results and the producer behind the evidence before a gate can pass.

Open-source kernel. Operator setup required. No model decides the verdict.

RECORDED RUN / LEITIR06 SEP 2026
Inspect the recorded run

PASS

Evidence matches the code.

The real tree-hashing tests ran. The gate accepted their evidence for this exact source.

ACTUAL KERNEL OUTPUT / EXIT 0
PASS  gate=landing  subject=sha256:241ef1ce8b52b030c9fb48867ee9a0a6ab21fccdc93a8517193a3a2f0ce55336

FAIL

Yesterday’s proof stops counting.

The source changed after the passing run. The gate refused the old evidence because its subject digest no longer matched.

ACTUAL KERNEL OUTPUT / EXIT 1
FAIL  gate=landing  rule=TREEHASH
      evidence bound to a different subject digest: tests-executed
      subject=sha256:0c14c1151c74d1724152789ca96e8cb329a17c5d7819a86f9e2a839cec6415e2

FAIL

The missing checks block acceptance.

A deliberately broken import stopped the tests from being collected. The gate named the missing test IDs and refused the run.

ACTUAL KERNEL OUTPUT / EXIT 1
FAIL  gate=landing  rule=TREEHASH
      tests-executed: missing test ID(s): tests/test_treehash.py::test_deterministic_across_invocations, tests/test_treehash.py::test_dirty_trailing_bits_base64_is_rejected_as_non_canonical, tests/test_treehash.py::test_empty_symlink_target_is_supported_by_record_format, tests/test_treehash.py::test_empty_tree_has_stable_digest, tests/test_treehash.py::test_empty_tree_is_full_scope, tests/test_treehash.py::test_fifo_or_special_file_is_rejected, tests/test_treehash.py::test_file_digest_map_excludes_only_the_root_manifest, tests/test_treehash.py::test_file_digest_map_is_deterministic_across_invocations, tests/test_treehash.py::test_file_digest_map_matches_contents_and_linknames, tests/test_treehash.py::test_file_digest_map_rejects_missing_directory, tests/test_treehash.py::test_file_digest_map_symlinked_directory_is_not_followed, tests/test_treehash.py::test_file_map_manifest_fields_helper, tests/test_treehash.py::test_full_coverage_digest_is_byte_identical_below_caps, tests/test_treehash.py::test_full_coverage_fields_pin_full_scope_above_caps, tests/test_treehash.py::test_full_coverage_fields_reject_missing_directory, tests/test_treehash.py::test_large_bytes_tree_sampled, tests/test_treehash.py::test_large_file_streamed_constant_memory, tests/test_treehash.py::test_legacy_full_digest_over_current_caps_verifies, tests/test_treehash.py::test_manifest_digest_fields_helper, tests/test_treehash.py::test_manifest_digest_fields_rejects_unknown_scope, tests/test_treehash.py::test_many_files_tree_sampled, tests/test_treehash.py::test_map_entry_points_wrap_unexpected_scan_failures, tests/test_treehash.py::test_missing_directory_raises, tests/test_treehash.py::test_nested_files_match_manual_spec, tests/test_treehash.py::test_non_utf8_filename_is_wrapped, tests/test_treehash.py::test_path_with_newline_is_rejected, tests/test_treehash.py::test_regular_file_swapped_to_symlink_between_lstat_and_open_is_rejected, tests/test_treehash.py::test_root_manifest_is_excluded, tests/test_treehash.py::test_sampled_rejects_full_verification, tests/test_treehash.py::test_sampled_selection_always_keeps_at_least_one_entry, tests/test_treehash.py::test_sampled_subset_is_deterministic_by_content, tests/test_treehash.py::test_sampled_verify_round_trip, tests/test_treehash.py::test_single_file_matches_manual_spec, tests/test_treehash.py::test_single_oversized_file_is_full, tests/test_treehash.py::test_small_tree_hashed_in_full, tests/test_treehash.py::test_sort_order_is_lexicographic_on_posix_paths, tests/test_treehash.py::test_subdir_named_manifest_is_included, tests/test_treehash.py::test_symlink_inside_tree_matches_extended_manual_format, tests/test_treehash.py::test_symlink_target_tampering_is_detected, tests/test_treehash.py::test_symlink_target_with_newline_is_rejected, tests/test_treehash.py::test_symlink_target_with_non_utf8_bytes_is_wrapped, tests/test_treehash.py::test_symlinked_directory_is_hashed_without_following_it, tests/test_treehash.py::test_unreadable_file_error_is_wrapped, tests/test_treehash.py::test_verify_accepts_clean_tree, tests/test_treehash.py::test_verify_detects_added_file, tests/test_treehash.py::test_verify_detects_byte_flip, tests/test_treehash.py::test_verify_detects_deleted_file, tests/test_treehash.py::test_verify_detects_truncation, tests/test_treehash.py::test_verify_file_digest_map_accepts_healthy_tree, tests/test_treehash.py::test_verify_file_digest_map_detects_added_and_deleted_files, tests/test_treehash.py::test_verify_file_digest_map_detects_corruption_naming_path, tests/test_treehash.py::test_verify_file_digest_map_detects_symlink_target_tampering, tests/test_treehash.py::test_verify_file_digest_map_detects_tampered_map_value, tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map0], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map10], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map11], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map1], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map2], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map3], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map4], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map5], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map6], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map7], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map8], tests/test_treehash.py::test_verify_file_digest_map_rejects_malformed_maps[bad_map9], tests/test_treehash.py::test_verify_file_digest_map_rejects_map_made_consistent_with_tampered_bytes, tests/test_treehash.py::test_verify_file_digest_map_rejects_missing_directory, tests/test_treehash.py::test_verify_file_digest_map_rejects_tampered_aggregate, tests/test_treehash.py::test_verify_file_digest_map_requires_algorithm_and_full_scope, tests/test_treehash.py::test_verify_file_digest_map_requires_an_anchored_aggregate, tests/test_treehash.py::test_verify_file_digest_map_wraps_unreadable_tree, tests/test_treehash.py::test_verify_rejects_malformed_base64, tests/test_treehash.py::test_verify_rejects_missing_prefix, tests/test_treehash.py::test_verify_rejects_non_canonical_base64, tests/test_treehash.py::test_verify_rejects_non_string, tests/test_treehash.py::test_verify_rejects_none, tests/test_treehash.py::test_verify_rejects_unknown_algorithm, tests/test_treehash.py::test_verify_rejects_unknown_scope_value, tests/test_treehash.py::test_verify_rejects_wrong_but_well_formed_digest
      subject=sha256:0c14c1151c74d1724152789ca96e8cb329a17c5d7819a86f9e2a839cec6415e2

PASS

New evidence earns a new verdict.

After the repair, the tests ran again and produced evidence for the new source. The gate accepted it.

ACTUAL KERNEL OUTPUT / EXIT 0
PASS  gate=landing  subject=sha256:e86e27e41635ccd79a791129b750d7460ec3c392dc36c8284444648dbd34c3e0

Replay the recorded steps above. This is retained evidence, not a live run. Open the full pilot record ↗

79Leitir tests in the recorded pilot
Tree-hashing module
2Arxic tests in the recorded pilot
Version-policy module
4Tests deliberately removed
Bare CI stayed green; Ranex refused
66%

The problem is familiar

Nearly right still leaves you doing the checking.

In Stack Overflow’s 2025 survey, 66% of respondents to the AI-frustrations question reported solutions that were almost right but still needed correction.

Source: 2025 Developer Survey, 31,476 responses to this question ↗

This survey describes frustration with AI tools. It did not evaluate Ranex.

What Ranex has actually demonstrated

A green run.
A missing reason to trust it.

These are recorded checks you can inspect. They cover specific failure modes: disappearing tests, evidence for an older version, and a run that never collected the required tests.

01 / Required test IDs

The tests disappeared.
CI still passed.

In a controlled transactional key-value task, 4 tests were removed. The remaining test command returned success. Ranex’s manifest-bound gate refused the result.

Bare CI on the modified treeGREEN
Ranex gateFAIL
Read the actual refusal
FAIL  gate=landing  rule=TASK_TESTS
      tests-executed: missing test ID(s): test_txnkv.py::test_autocommit_without_transaction, test_txnkv.py::test_commit_keeps_changes, test_txnkv.py::test_commit_without_transaction_raises, test_txnkv.py::test_keys_reflects_transaction_state, test_txnkv.py::test_nested_commit_then_outer_rollback_undoes_everything, test_txnkv.py::test_nested_inner_rollback_leaves_outer_intact, test_txnkv.py::test_rollback_replays_multiple_writes_in_reverse, test_txnkv.py::test_rollback_restores_deleted_key, test_txnkv.py::test_rollback_restores_prior_value_and_absence
      subject=sha256:34bf5b5389e5e5fffefb6e11aef844e6040eb9b27d712322aea729ea4c06dac7

Artifact fingerprint: sha256:2009454190609e473a83cf7d9d8feccbcf3aa70591d52ffbc130a63b6b210c99

Inspect the fault-injection record ↗

Controlled fault injection, not an observed customer incident. The manifest freezes test IDs, not test bodies.

02 / Evidence bound to the source

The code changed.
The old pass stopped counting.

Both recorded repository pilots passed, changed source, and then asked the gate to reuse the old evidence. Both were refused. After repair and fresh observations, both passed again.

Leitir: stale-source checkFAIL
Arxic: stale-source checkFAIL

Read both repository records ↗

Demonstrates rejection of evidence for a different source digest in these runs. It does not establish that the tests cover every possible defect.

Real repositories / retained receipts

From passing tests
to a verified record.

On 6 September 2026, these pilots ran actual modules from Leitir and Arxic through Ranex. Each record includes commands, exit codes, source digests, failures and recovery. Both projects are maintained by Ranex’s founder; these are bounded pilot checks, not customer case studies.

Tree-hashing module / 79 tests

Leitir

Python tree-hashing tests ran under pytest. A deliberately broken import stopped collection; the gate refused the missing results.

Passing evidencePASS
Changed source, old evidenceFAIL
Failed test collectionFAIL
Fresh evidence after repairPASS

Read the full Leitir pilot receipt ↗

Scope and source fingerprint

Real Leitir treehash tests, default hermetic observation, fresh local identities; no live GitHub App publication or merge enforcement.

Upstream commit: bfcbcd83718ad1466ea9dd9d1d9ebb4915417517
Receipt SHA-256: 8bd120869b1bbdd4d2f2711ba7d635ff0877723f48c89e7acfd31a346ec32901

These records do not establish whole-repository coverage, live GitHub publication or merge enforcement.

Version-policy module / 2 tests

Arxic

JavaScript version-policy tests ran under Vitest with an explicit JUnit reporter binding. Failed collection was refused; a fresh run recovered.

Passing evidencePASS
Changed source, old evidenceFAIL
Failed test collectionFAIL
Fresh evidence after repairPASS

Read the full Arxic pilot receipt ↗

Scope and source fingerprint

Real Arxic version-policy tests, default hermetic observation, fresh local identities; no live GitHub App publication or merge enforcement.

Upstream commit: 2395041598cf2aab14da8708ac2b21dc08f40731
Receipt SHA-256: 471124a7e165da4130b8ac604856d16840ebac7b29708bc67cf0ebb934cfd8bb

These records do not establish whole-repository coverage, live GitHub publication or merge enforcement.

Features you can put to work

Give the reviewer
something to inspect.

Define the acceptance policy, run its bound checks, then inspect the verdict. The kernel is ordinary code you can read and run from a source checkout.

Signed evidence and a decision record

Evidence admission checks the signature against your committed producer keyring. The journal records decisions in a hash chain you can verify. Keep an independent journal head if you need to detect rollback.

Read the evidence and journal setup ↗

Use the result in your review workflow

The CLI can govern another repository through an explicit external-repository option. The GitHub App adapter publishes verified verdicts as a check; it does not evaluate the work itself.

Read the repository and GitHub guides ↗

Start with the evidence

Try it.
Keep the receipt.

Follow the source-run quickstart, then run the included demonstration against the pinned Six repository. If you are defining a task before choosing tools, start with the free acceptance brief.

Ranex checks admitted evidence against configured policy. It cannot make worker-controlled tests trustworthy or supply requirements you never defined. Strict-local confinement needs a qualified Linux host; external-harness delegation remains a prototype.