Data Model: out-of-matrix disposition
Entities are configuration records, not runtime objects. "State" = the disposition lifecycle of each entry.
Out-of-matrix entry
no dir is simultaneously claimed by a module row.
promoted (moved into a row's test_dirs, removed from this list).
- Fields:
dirs: list[path](one or more test-bearing directories sharing a justification),reason: str. - Invariants: every
direxists and is test-bearing;reasonis a real decision (not a placeholder word); - States:
recorded-snapshot(reason is a deferral) →decided(reason names a covering gate) or
Module row
shard_count: int, optional test_dirs: list[path].
non-nested; shard_count ≥ 1; LPT skew over the module's measured durations ≤ 20%.
measured run), mint-row (new row for a population-(b) family with a source root).
- Fields:
module: str,roots: list[glob](path routing),cov_targets: list[str],tier, - Invariants: effective test dirs (
test_dirsor fallbacktests/<module>) are real and pairwise - Transitions:
add-test-dir(append a promoted dir),resize-shards(newshard_countfrom a fresh
Measured timing record (ci-shard-timings.json)
module_duration_seconds, excluded[], schema_version.
len(module_test_durations[m]) == module_test_count[m] == collected count; run_id is fresh (minted this mission) for every row whose shard_count changed.
- Fields:
run_id,command,module_test_durations{module→[float]},module_test_count{module→int}, - Invariants: for any promoted/expanded module
m,
Disposition (the decision unit)
3 → the name of the covering primary mirror or always-on gate.
- Enum:
promote-per-pr(1a),promote-nightly(1b),lift-invariant(2),sharpen-reason(3). - Required evidence: 1a/1b → a fresh
run_id+ LPT/skew/timeout check; 2 → the new architectural test;
Registry guard (test_module_shard_registry.py)
entries real, test_dirs non-nested.
- Role: the acceptance oracle. Green ⇔ every test-bearing dir claimed once or recorded once, skew ≤20%,
Population
- (a) secondary
tests/specify_cli/**trees (dual-tree class). - (b) no-per-PR-lane dirs (marker-reachability class).
Scrub group (tests/release/ci_retirement_scrub.json) — module-identity SSOT
roots/cov_targets are byte-verbatim from its scrub group. Minting a registry row requires a scrub group first.
- Fields:
group(== registry module name),roots,cov_targets,census_evidence. - Invariant (guard-enforced): registry module names == scrub group names (bijection); a promoted row's
Special tier (special_tiers.integration_tests_next)
gap the integration disposition must reconcile with (wire-up or nightly), not bypass.
- Fields:
job,roots(tests/integration/,tests/next/),parallel_mode, duration targets. - State: DECLARED but its
jobis currently unwired in.github/workflows/— a pre-existing honesty