Skip to content

Commit 6baaec6

Browse files
committed
T1.15 fix 1b docs: the ratchet's approval rule, as built and in the round's history
Refs: T1.19 Signed-off-by: Adi Wadaskar <awadaskar@nvidia.com>
1 parent c3ac5af commit 6baaec6

3 files changed

Lines changed: 4 additions & 4 deletions

File tree

‎docs/design/rust-core/phase-1/as-built.md‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -355,14 +355,14 @@ Clean-container wheel smoke (E75, under E16).
355355

356356
The coverage check and the local gate's modes (E77; T1.19 merged in, E53(b), H26), each claim with its mechanism.
357357

358-
- `scripts/rust_core/coverage.py --check --checkpoint REV` reads the candidate (`--rev`, `HEAD`) from git through `ratchet.py`'s `Tree`, so nothing uncommitted counts: both scope manifests, validated against `scope.schema.json` (a failure is `schema:`), and every case under `contract/cases` (`read_cases`; a file missing, not JSON, nested past 64 levels (`MAX_DEPTH`, walked without recursion after parsing, so Python 3.14, whose parser reads 100,000 levels, refuses it as earlier versions do; the schema too, read once), without a case ID or status, with `paths`, `routes` or `cells` not lists of IDs, or a second case of one ID is `read:`, and the rules that need the corpus do not run). Rules 1 to 3 per manifest (`rule_1`, `rule_2_3`). Rule 4 (`rule_4`): each path and route a case names is a path of the Python manifest and each cell a cell of it; each case ID a manifest lists is a case; a committed `cases` list is empty or exactly the generated one (`generated`: the acceptance cases naming the path or cell, by ID; Java's empty). Rule 5 (`rule_5`): every S0 path of the Python manifest (`ACTIVE`) has an acceptance case; a manifest with no S0 path fails rather than passing empty. Rule 8 (`rule_8`), against the manifests at `--checkpoint` (a checkpoint without a manifest is a read failure; one without decisions.md authorizes nothing, rule 8 still running): a path or cell removed, a path moved to a later slice or a cell turned `unknown` fails unless a row of the checkpoint's decisions.md names the ID in backticks and its status, the last column, is the owner's approval (`owner_approved`: "approved by owner" and a date at its start, then nothing, a parenthesis or a note after "; " or ", ", no note withdrawing or qualifying it: not approved, rejected, revoked, withdrawn, superseded, to confirm; from fix round 1, `tests/test_contract_coverage_approval.py`). Exit 0, 1 on any problem, 2 on usage (`--checkpoint` is required). On this repository: 76 cases read, both S0 paths covered (9 acceptance cases for `query.validate/accept/any`, 12 for `query.validate/refuse/any`).
358+
- `scripts/rust_core/coverage.py --check --checkpoint REV` reads the candidate (`--rev`, `HEAD`) from git through `ratchet.py`'s `Tree`, so nothing uncommitted counts: both scope manifests, validated against `scope.schema.json` (a failure is `schema:`), and every case under `contract/cases` (`read_cases`; a file missing, not JSON, nested past 64 levels (`MAX_DEPTH`, walked without recursion after parsing, so Python 3.14, whose parser reads 100,000 levels, refuses it as earlier versions do; the schema too, read once), without a case ID or status, with `paths`, `routes` or `cells` not lists of IDs, or a second case of one ID is `read:`, and the rules that need the corpus do not run). Rules 1 to 3 per manifest (`rule_1`, `rule_2_3`). Rule 4 (`rule_4`): each path and route a case names is a path of the Python manifest and each cell a cell of it; each case ID a manifest lists is a case; a committed `cases` list is empty or exactly the generated one (`generated`: the acceptance cases naming the path or cell, by ID; Java's empty). Rule 5 (`rule_5`): every S0 path of the Python manifest (`ACTIVE`) has an acceptance case; a manifest with no S0 path fails rather than passing empty. Rule 8 (`rule_8`), against the manifests at `--checkpoint` (a checkpoint without a manifest is a read failure; one without decisions.md authorizes nothing, rule 8 still running): a path or cell removed, a path moved to a later slice or a cell turned `unknown` fails unless a row of the checkpoint's decisions.md names the ID in backticks and its status, the last column, is the owner's approval (`owner_approved`: "approved by owner" and a date at its start, then nothing, a parenthesis or a note after "; " or ", ", no note withdrawing or qualifying it: not approved, rejected, revoked, withdrawn, superseded, to confirm; `ratchet.owner_approved`, which the ratchet's relaxations read alike; from fix round 1, `tests/test_contract_coverage_approval.py` and `tests/test_contract_ratchet_approval.py`). Exit 0, 1 on any problem, 2 on usage (`--checkpoint` is required). On this repository: 76 cases read, both S0 paths covered (9 acceptance cases for `query.validate/accept/any`, 12 for `query.validate/refuse/any`).
359359
- The gate's `coverage` check runs the checkpoint's `coverage.py --check --repo <candidate> --rev <candidate> --checkpoint <checkpoint>` (gate.sh), so CI's `rust-test` and `contract-python` gates run it from this package's landing; this package's own candidate is judged by 8c06176's harness, which has none, and `tests/test_contract_coverage.py` runs it on the repository in CI's `engine` job.
360360
- `gate.sh --only CHECK` (observations, ratchet, compare, l0 or coverage; anything else, or with `--locked`, or `l0` with `--no-l0`, exits 2): `want` runs the named check alone; under `--only`, `prepare` makes the observations inside the check that needs them, and `--only compare` takes the effective expectations from `ratchet.py effective`, with no ratchet check; the summary lists the one check and the last line says `--only CHECK: one check, not the gate`.
361361
- `gate.sh --locked 1a|1b`: the default checks (the observations step always), then `runners` (the observations cover python-core, python-old and rust-host, read from each line's `identity.runner`), `l1` (`cargo test --workspace --locked` on the candidate), and for 1a `seeded` (pytest over `SEEDED`, then `selftest.py --no-clippy`) and `wheel-smoke` (the checkpoint's `wheel_smoke.py --container` in both lanes on `--wheel` and `--test-ops-wheel`, failing without them), for 1b `inventory` (the inventory's 40 cases, exactly, and `base.adventureworks` are acceptance cases; today 41 of 41 are diagnostic, so it fails). The table: check 1 is runners, observations, ratchet, compare, coverage and l1; 2 seeded; 3 wheel-smoke; 4 runners, observations, ratchet, compare, l1 and inventory; 5 observations, ratchet, compare and inventory; 6 l0 and every step run, each once; a step not run counts as failed; `--only ratchet` with no observations says it judged the tree alone. The evidence, `gate/<sha>.json` under `--evidence` (default `sdm-gate-evidence` in the clone's git directory; a directory that resolves, every symbolic link in its existing part followed, inside the worktree and outside the clone's git directory exits 2; from fix round 1, `contract/tests/test_gate_evidence_paths.py`), holds per half the checkpoint, base, the cell the Python runners observed in, each check's result and steps, each step's result and `passed`; checks 1 and 4, whose reference comparisons `compare.py` gates only in `ref-pandas3` (H1), fail outside it, `reported, not gated` (fix round 1); a run of the other half adds its own; an evidence file it cannot read fails the run by name.
362362
- The modes are the checkpoint's: a candidate's `gate.sh` forwards them to its checkpoint's copy, so they run from this package's landing on; before it, the checkpoint's copy refuses them as unknown arguments.
363363
- Carries: `tests/test_wheel_smoke.py`'s sync of `EXPECTED` reads async tests and `Test` classes' methods (as `Class::method`) and holds a parametrized test to its literal parameter count (`_defined_tests`, held by its own test on a file of each shape); `installation.md` says the NumPy 1.23.5 runtimes' path is pending validation.
364364
- Bug fix (E49's depth probe): `compare.py`'s observation reader refuses a line nested past the parser, or past what the validator walks (Python 3.14 parses 100,000 levels), as a runner failure (`tests/test_contract_compare_depth.py`: 100,000 deep, as an array and an object, and 100,000 wide).
365-
- `SEEDED`, locked check 2's suite: `test_gate_controls.py`, `test_payload_and_result_rules.py`, `test_capture.py`, `test_result_vectors.py`, `test_materialize_route.py`, `test_route_proof_seeds.py`, `test_contract_ratchet.py`, `test_contract_register.py`, `test_contract_coverage.py`, `test_contract_coverage_approval.py`, `test_contract_compare_depth.py`; `test_gate_modes.py` and `test_gate_evidence_paths.py` run `gate.sh --locked` and stay out.
365+
- `SEEDED`, locked check 2's suite: `test_gate_controls.py`, `test_payload_and_result_rules.py`, `test_capture.py`, `test_result_vectors.py`, `test_materialize_route.py`, `test_route_proof_seeds.py`, `test_contract_ratchet.py`, `test_contract_ratchet_approval.py`, `test_contract_register.py`, `test_contract_coverage.py`, `test_contract_coverage_approval.py`, `test_contract_compare_depth.py`; `test_gate_modes.py` and `test_gate_evidence_paths.py` run `gate.sh --locked` and stay out.
366366
- The tests, by the test author (`T1.15 tests:` commits): `tests/test_contract_coverage.py` (`--check` on the repository and on temporary repositories: each rule seeded, the owner's row at the checkpoint and the candidate's own, the E49 depth, width and retyping probes); `contract/tests/test_gate_modes.py` (through the real `gate.sh` on a temporary repository whose landing holds this harness and stubs for `cargo`, the L0 scripts, `wheel_smoke.py` and the suite: `--only` for each check, `--locked 1a` passing on the stubs and failing each check on its seeded defect, `--locked 1b` failing on `inventory` alone, the evidence's shape, halves, default directory and refusal inside the worktree, and the post-landing state passing); `contract/tests/test_route_proof_seeds.py`.
367367

368368
The checks of T1.19's former exit, each with the seeded fault that fails it (file::test:line at this package's candidate):

0 commit comments

Comments
 (0)