diff --git a/tools/check-freshness.py b/tools/check-freshness.py index 8291ea7..98b5428 100644 --- a/tools/check-freshness.py +++ b/tools/check-freshness.py @@ -45,6 +45,24 @@ change and cannot speak to now. Re-running is what produces current evidence; this only refuses to let old evidence pose as it. """ + +# NO-SELF-TEST: controlled by tools/test_check_freshness.py, which the CI glob gates and which +# passes on main — 28 controls, counted by AST (ast.Call to `check`), measured +# 2026-09-06 at origin/main by `python3 tools/test_check_freshness.py` exit 0 in the gating job. ⛔ This is a DECLARATION of where the control lives, +# not a claim that none exists — tools/README.md records two control conventions in +# one directory (`--self-test` and `test_*.py`). +# +# ⚠ WHY THIS TOOL HAS NO `--self-test`: a completedAt boundary is pure arithmetic, so the controls drive classify() with +# synthetic instants and need no forge. +# ⛔ THIS DECLARATION DOES NOT CHANGE THE GATE'S VERDICT, AND SAYING SO IS THE POINT. +# This tool takes REQUIRED ARGUMENTS, so it reaches the cannot-invoke-bare branch at +# gate-selftests.sh:272, which returns before `DECLARES_NONE` is consulted at :340. +# Measured 2026-09-06, two-poled: with this line present and with it renamed, the gate +# emits IDENTICAL BYTES and this tool REMAINS UNESTABLISHED. +# ⇒ So: an external control EXISTS and is gated; the gate cannot SEE it. Those are +# two different facts and a reader must not infer the second from the first. +# The mismatch — the gate names this line as the remedy on a path that ignores it — +# is nForma-AI/nForma-NEXT#603, not this file's to fix. import argparse, json, subprocess, sys from datetime import datetime, timezone diff --git a/tools/gh-complete.py b/tools/gh-complete.py index e8b8b51..4bfc1f6 100644 --- a/tools/gh-complete.py +++ b/tools/gh-complete.py @@ -32,6 +32,18 @@ Exit: 0 complete, JSON on stdout · 1 TRUNCATED — the reading is a prefix 2 established nothing (call failed, or the shape is not a counted list) """ + +# NO-SELF-TEST: controlled by tools/test_gh_complete.py, which the CI glob gates and which +# passes on main — 18 controls, counted by AST (ast.Call to `check`), measured +# 2026-09-06 at origin/main by `python3 tools/test_gh_complete.py` exit 0 in the gating job. ⛔ This is a DECLARATION of where the control lives, +# not a claim that none exists — tools/README.md records two control conventions in +# one directory (`--self-test` and `test_*.py`). +# +# ⚠ WHY THIS TOOL HAS NO `--self-test`: it FORWARDS its flags to `gh`, so a `--self-test` argv would be handed to gh and +# come back as gh's usage block — an argv surface it cannot own. +# ⇒ MEASURED EFFECT: before this line the gate reported UNESTABLISHED; with it the +# gate reports `declared NO self-test`. This tool reaches the flag-REJECTED branch, +# where the declaration IS consulted (gate-selftests.sh:340). Measured 2026-09-06. import json import re import subprocess diff --git a/tools/job-log.py b/tools/job-log.py index 4796ff4..c025f56 100644 --- a/tools/job-log.py +++ b/tools/job-log.py @@ -47,6 +47,24 @@ so is a genuinely short job log, and picking a threshold invents a boundary the data does not have. The timestamp is a property of the format, not of the length. """ + +# NO-SELF-TEST: controlled by tools/test_job_log.py, which the CI glob gates and which +# passes on main — 46 controls, counted by AST (ast.Call to `check`), measured +# 2026-09-06 at origin/main by `python3 tools/test_job_log.py` exit 0 in the gating job. ⛔ This is a DECLARATION of where the control lives, +# not a claim that none exists — tools/README.md records two control conventions in +# one directory (`--self-test` and `test_*.py`). +# +# ⚠ WHY THIS TOOL HAS NO `--self-test`: its subject is a log BODY, so the controls feed it real captured bytes rather than +# reaching a runner. +# ⛔ THIS DECLARATION DOES NOT CHANGE THE GATE'S VERDICT, AND SAYING SO IS THE POINT. +# This tool takes REQUIRED ARGUMENTS, so it reaches the cannot-invoke-bare branch at +# gate-selftests.sh:272, which returns before `DECLARES_NONE` is consulted at :340. +# Measured 2026-09-06, two-poled: with this line present and with it renamed, the gate +# emits IDENTICAL BYTES and this tool REMAINS UNESTABLISHED. +# ⇒ So: an external control EXISTS and is gated; the gate cannot SEE it. Those are +# two different facts and a reader must not infer the second from the first. +# The mismatch — the gate names this line as the remedy on a path that ignores it — +# is nForma-AI/nForma-NEXT#603, not this file's to fix. import argparse, json, os, re, subprocess, sys, types _here = os.path.dirname(os.path.abspath(__file__))