Run the enumeration proofs even when only prose changed

118708f411b8 · AtlantisPleb · · parent eb488cdb7340

Run the enumeration proofs even when only prose changed

Precommit skips the test suite when every changed path is
documentation, the gate runs precommit as a stage, and the receipt
still records that stage as passed. Several suites are reachable only
through precommit, so a documentation-only commit could carry a green
receipt over a red enumeration — which is how a red operator-surface
proof reached main.

The enumeration proofs are their own thing now:
ops/ci/enumeration-proofs.sh runs the operator surface, transparency
surface, hosted-CI absence, work disclosure, network status,
deployment lane, capacity, and both token-vault suites. The gate runs
it as a required stage with its own receipt entry, and the
prose-only path in precommit runs it too, so the skip can no longer
skip a proof.

Built by a Devin child through the openagents coder's delegate tool.
85 enumeration tests green; the two failures in the full suite are the
pre-existing forge reds tracked as #237, unrelated to this change.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01GoYpb8FEmdxVErsv7ABCYi
Co-Authored-By
Claude Fable 5 <noreply@anthropic.com>

Deploy story

What this commit did to the running system — joined from the forge receipt chain, the part a commit page elsewhere cannot show.

pushed
by user · WAL seq 341 · 2026-08-25T05:31:47.676549Z

Changed files

  • added ops/ci/enumeration-proofs.sh
  • modified ops/ci/gate.sh
  • modified ops/dev/precommit.sh

Diff

3 files changed, +30 -1

ops/ci/enumeration-proofs.sh added +21

@@ -0,0 +1,21 @@

1
#!/usr/bin/env bash
2
#
3
# Run the enumeration proofs that must never be skipped by the Markdown-only
4
# precommit path.
5
set -euo pipefail
6
7
root=$(git rev-parse --show-toplevel)
8
cd "$root"
9
10
echo "enumeration-proofs: running the enumeration suites"
11
12
env MIX_ENV=test mix test --warnings-as-errors \
13
  test/openagents_web/operator_surface_test.exs \
14
  test/openagents_web/transparency_surface_test.exs \
15
  test/openagents/hosted_ci_absence_test.exs \
16
  test/openagents/transparency/work_disclosure_test.exs \
17
  test/openagents/network_status_test.exs \
18
  test/openagents/forge/deployment_lane_test.exs \
19
  test/openagents/capacity_test.exs \
20
  test/openagents/accounts/token_vault_test.exs \
21
  test/openagents/machines/token_vault_test.exs
ops/ci/gate.sh modified +3 -1

@@ -3,7 +3,7 @@ set -eu

3 3
4 4
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
5 5
repo_root=$(CDPATH= cd -- "$script_dir/../.." && pwd)
6
required_stages='compile production_compile precommit cluster javascript direct_transaction relup_topology relup version_chain interrupted_install rolling_replacement contracts staging_infra release_smoke'
6
required_stages='compile production_compile precommit enumeration_proofs cluster javascript direct_transaction relup_topology relup version_chain interrupted_install rolling_replacement contracts staging_infra release_smoke'
7 7
mode=${1:-run}
8 8
9 9
if [ "$(git -C "$repo_root" rev-parse --is-inside-work-tree 2>/dev/null || true)" != "true" ]; then

@@ -114,6 +114,7 @@ cd "$repo_root"

114 114
run_stage compile env MIX_ENV=test mix compile --warnings-as-errors
115 115
run_stage production_compile env MIX_ENV=prod mix compile --warnings-as-errors
116 116
run_stage precommit env MIX_ENV=test mix precommit
117
run_stage enumeration_proofs env MIX_ENV=test sh ops/ci/enumeration-proofs.sh
117 118
run_stage cluster env MIX_ENV=test mix test --warnings-as-errors --only cluster
118 119
run_stage javascript env MIX_ENV=test npm --prefix assets test
119 120
run_stage direct_transaction env MIX_ENV=test mix test --warnings-as-errors \

@@ -172,6 +173,7 @@ cat >"$receipt_temp" <<EOF

172 173
    "compile": {"status": "passed", "duration_seconds": $compile_duration_seconds},
173 174
    "production_compile": {"status": "passed", "duration_seconds": $production_compile_duration_seconds},
174 175
    "precommit": {"status": "passed", "duration_seconds": $precommit_duration_seconds},
176
    "enumeration_proofs": {"status": "passed", "duration_seconds": $enumeration_proofs_duration_seconds},
175 177
    "cluster": {"status": "passed", "duration_seconds": $cluster_duration_seconds},
176 178
    "javascript": {"status": "passed", "duration_seconds": $javascript_duration_seconds},
177 179
    "direct_transaction": {"status": "passed", "duration_seconds": $direct_transaction_duration_seconds},
ops/dev/precommit.sh modified +6

@@ -36,6 +36,11 @@ prose() {

36 36
  mix cmd elixir ops/ci/docs-check.exs
37 37
}
38 38
39
enumeration_proofs() {
40
  echo "precommit: running enumeration proofs"
41
  sh ops/ci/enumeration-proofs.sh
42
}
43
39 44
sh ops/dev/install-push-guard.sh --ensure
40 45
41 46
# Everything this change touches: the working tree against HEAD, plus anything

@@ -79,3 +84,4 @@ EOF_PATHS

79 84
80 85
echo "precommit: prose only (${changed//$'\n'/, }) — running the checks that read prose."
81 86
prose
87
enumeration_proofs

This page updates live while a promote is in flight · changelog