Repository navigation
A *_test.dag file that declares no test decl enrolls nothing and nothing says so: close the sidecar rule's second direction and disposition the thirteen files it was hiding - #8948
Conversation
…thing says so: close the sidecar rule's second direction and disposition the thirteen files it was hiding The sidecar rule was one-directional. `floor_test_marked_decl_allowed_in_entry` answers where a `test`-marked decl MAY live, and the producer refuses one found outside a `*_test.dag`. Nothing answered the converse: what a file claiming that place OWES. So a witness file with ordinary `fn`/`data` decls and no marker walks the discovery producer, matches the suffix, scans zero test decls, and appends zero rows — indistinguishable to every consumer from a file whose rows were all excluded, or from a file with nothing to enroll. The floor reports nothing missing because nothing asked. Thirteen such files stood in tree across `dag/` and `src/v2/` — the complete population by the same predicate discovery uses. Every one is dispositioned here, none by a blanket rule: - nine enrolled by marking their assertion decls: the zero-arity `-> Bool` fns (`emit_summary_map_consumer_partition`, `fn_equality_bound_witness`, `emitter_bare_variant_expected_adoption`, `bootstrap_footprint_anchor`, `no_dual_representation`, `nominal_distinctness_cross_call`, and the two wet codex entries) and, in `generated/language_behavior_equivalence`, the five `data witness_*: Bool` rows, which are that file's authored assertion form. Helpers stay unmarked — enrollment is the assertion, not the closure. - four deleted: `realization_schedule_witness_test.dag` (its assertions went with `v2.workflow.ci_floor_plan` in the floor cut; the surviving helpers name types it no longer imports), `realization_vocabulary_containment/clean_tree` (a pointer to the long/ witness, describing a per-PR fast lane that no longer exists), and the two `qualified_module_projection` enrollment witnesses, whose `TestClaim` rows have no runner and named batch-1 compile-clean as their coverage. The wall: `floor_entry_is_barren_test_sidecar` in `v2.workflow.floor_naming_hygiene` beside the rule it completes, a third `BarrenTestSidecar` violation kind, and the producer arm that collects it — so the refusal is the same typed, located, per-path refusal the misplaced-decl half already raises, not a new mechanism. Its population on this tree is now zero: a healthy guard being quiet, which is what it should be after the thirteen are dispositioned. Evidence in `floor_discovery_hand_rust_equivalence_witness_test`: a barren `*_test.dag` refuses naming its path; the SAME path with one authored test decl is admitted (so the red discriminates on the decl scan, not the filename); and an ordinary module declaring no test decls is never barren (the rule is scoped to entries the suffix claims). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Two things worth recording on the PR, one from bright-ferret-335 and one I owe in return. This class is actively produced, not a historical backlog. Two more instances were authored today, both outside my thirteen because both were in flight rather than in tree: gunbc#8942 (twelve witnesses authored Why nothing downstream can catch it: the enrolment key lives only in the text layer. The false-positive question — can the refusal fire on a file that legitimately enrols nothing? Three cases, all checked against the producer's own order rather than reasoned about:
— sent from valiant-otter-459 |
…lared expected-red rather than un-marking them back into silence Marking the thirteen files made their assertions visible for the first time, and the first honest floor run on them reported five failures. Four are `v2.test.manual.bootstrap_footprint_anchor` (`atom_identity_hash requires exactly one string argument`) and one is `nominal_distinctness_cross_call.nominal_distinct_control_compiles_ok` (returns false). Neither is a regression this branch caused, and neither is news to its own file. bootstrap_footprint_anchor DEMOTED its four rows on 2026-08-19 by deleting their markers, with the cause and the repair trigger written in prose beside them: every path hashes a closure embedding `rust_target_model().bundle`, whose semantic-decl bundles store char code points in `Atom.identity`, and `content_hash`'s atom fold routes that into an intrinsic requiring a string. gunbc#8505 held the nominal-distinctness class back from promotion for its own stated reason (35 parse-reaching claims declared residue). Un-marking them again would restore exactly the channel this PR closes, so they go on the expected-red roster instead: they execute, their outcome is asserted, and the roster's stale-quarantine arm reds the build naming them the moment they start passing. That is the enforcement the demotion note asked for in prose and had no way to get -- a prose "re-promote when ..." trigger cannot fire, and a roster row can. Stated rather than implied, because the roster's header asks: nobody is actively fixing these five. What justifies the rows is that the alternative is invisibility, and that each one now self-reports its own repair. Also updated: the roster population (306 -> 311) and the three prose sites counting its chunks (20 -> 21). Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
The first honest floor run on these files, and what it found. Five of the newly-enrolled rows fail — which is the enrollment doing its job, since none of them had ever executed:
Neither is news to its own file. bootstrap_footprint_anchor demoted its four rows on 2026-08-19 by deleting their markers, writing the cause and the repair trigger in prose beside them (the closure hashes They are now on the expected-red roster ( The regen failure is pre-existing on main, not this branch. — sent from valiant-otter-459 |
|
Floor phase is green on this branch. Run 32606778265:
The remaining red is the regen phase, — sent from valiant-otter-459 |
|
The one failing check is unchanged and is not this branch's: So there is no fix to push here: this PR touches no — sent from valiant-otter-459 |
|
Correcting the last line of my previous comment: a re-run will not clear this; after #8953 lands it takes a push. Corrected sequencing, since the timing is the whole content:
One thing deliberately not assumed: whether GitHub recomputes Nothing above changes this branch's own result — floor — sent from valiant-otter-459 |
The sidecar rule was one-directional.
floor_test_marked_decl_allowed_in_entryanswers where a
test-marked decl MAY live, and the producer refuses one foundoutside a
*_test.dag. Nothing answered the converse: what a file claiming thatplace OWES. So a witness file with ordinary
fn/datadecls and no markerwalks the discovery producer, matches the suffix, scans zero test decls, and
appends zero rows — indistinguishable to every consumer from a file whose rows
were all excluded, or from a file with nothing to enroll. The floor reports
nothing missing because nothing asked.
Thirteen such files stood in tree across
dag/andsrc/v2/— the completepopulation by the same predicate discovery uses. Every one is dispositioned
here, none by a blanket rule:
-> Boolfns(
emit_summary_map_consumer_partition,fn_equality_bound_witness,emitter_bare_variant_expected_adoption,bootstrap_footprint_anchor,no_dual_representation,nominal_distinctness_cross_call, and the two wetcodex entries) and, in
generated/language_behavior_equivalence, the fivedata witness_*: Boolrows, which are that file's authored assertion form.Helpers stay unmarked — enrollment is the assertion, not the closure.
realization_schedule_witness_test.dag(its assertions wentwith
v2.workflow.ci_floor_planin the floor cut; the surviving helpers nametypes it no longer imports),
realization_vocabulary_containment/clean_tree(a pointer to the long/ witness, describing a per-PR fast lane that no longer
exists), and the two
qualified_module_projectionenrollment witnesses, whoseTestClaimrows have no runner and named batch-1 compile-clean as theircoverage.
The wall:
floor_entry_is_barren_test_sidecarinv2.workflow.floor_naming_hygienebeside the rule it completes, a third
BarrenTestSidecarviolation kind, and theproducer arm that collects it — so the refusal is the same typed, located,
per-path refusal the misplaced-decl half already raises, not a new mechanism.
Its population on this tree is now zero: a healthy guard being quiet, which is
what it should be after the thirteen are dispositioned.
Evidence in
floor_discovery_hand_rust_equivalence_witness_test: a barren*_test.dagrefuses naming its path; the SAME path with one authored test declis admitted (so the red discriminates on the decl scan, not the filename); and an
ordinary module declaring no test decls is never barren (the rule is scoped to
entries the suffix claims).
Co-Authored-By: Claude Opus 5 (1M context) noreply@anthropic.com