Skip to content

62 claims in 10 witness files are declared plain fn and never enrolled: promote them, triage what turns red, and give the class a detector - #9568

Closed
briansrls wants to merge 7 commits into
mainfrom
session/crisp-cat-907
Closed

briansrls wants to merge 7 commits into
mainfrom
session/crisp-cat-907

Conversation

@briansrls

Copy link
Copy Markdown
Contributor

Auto-opened by session-dashboard for session crisp-cat-907.
Pushing to session/crisp-cat-907 advances this PR.

Worker attestation

Before flipping this PR to ready for review, confirm each item:

  • Title describes the change (not the session id or branch).
  • PR body summarises what and why (replace the TODO below).
  • Tests run: name the command (e.g. npm test, cargo test) and the result.
  • If this closes a work item, the body contains a Closes #N directive.
  • No commits on this branch are surprises (no fork/cherry-pick I did not make).
  • No secrets / credentials / large binaries staged.

Summary

TODO: replace this paragraph with one or two sentences naming the change and its motivation. Reviewers read this first.

Test plan

  • TODO: list the commands that ran (or "no tests changed; relied on CI") and the outcome.

Brian Searls and others added 6 commits August 27, 2026 18:15
…ure, and the required floor never calls it: 62 unenrolled claims, the third scanner, and 37 promotions

The brief was 62 claims declared plain `fn` and never enrolled. Chasing why produced a
larger finding than the population: `v2.workflow.floor_naming_hygiene`
`floor_entry_is_barren_test_sidecar` has refused this exact class since it was written,
`floor_discovery_finalize` turns it into `FloorDiscoveryRefused`, and the host returns that
as `Err`. It stops the line. It has never been on the line.

MEASURED, not inferred: main run 33092582255 (headSha 107304a), both lanes green, four
barren `*_test.dag` entries present at that sha, and zero occurrences of `barren` or
`sidecar` in the 693,975-byte run log.

WHY: `run_required_floor` builds its roster from `prepared.witness_files`, produced by
`witness_file_from_source`, which answers `None` for a file with no `test fn` — and the
caller discarded that answer. The walled `.dag` producer is reachable only through
`discover_floor_witness_roster`, which the required floor never calls. Three scanners for
one fact live in one binary and the wall guards the one production retired. The Rust test
asserting the wiring is not the missing piece: it still PASSES, because the wiring is
intact on the producer path — a green local `cargo test` says nothing about the required
path.

WHAT LANDED: preparation records the discarded fact; the floor asks
`floor_naming_hygiene`'s own `floor_test_sidecar_suffix` which recorded paths are
`*_test.dag` and refuses `cause=BarrenTestSidecar`. The rule keeps one home; only its
consumer moved. The recorded set uses the RULE's vocabulary — neither `test fn` nor
`test data` — so the 13 test-data-only files are not over-refused. The floor's summary line
is bounded above rather than left exact-and-silent. 37 leaf claims promoted, 37/37 PASS,
and the 4 sibling-conjunction aggregates deleted: each was a hand-rolled substitute for
enrolment with exactly one occurrence in the corpus.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aG5paMUmwmfRSp7czE5dY
…p the wall that makes the fourth impossible

#9483 ("repair a witness file that never ran") deleted two of this branch's four barren
specimens with the ctrl/session-container lane and promoted a third in place, while this
repair was in flight. Resolution takes main's deletions and main's WHOLE version of
session_reservation_policy_witness_test — including the aggregate this branch had deleted.
Deleting theirs is still the right call for the reason the leaf promotions make it
redundant, but a deletion arriving as conflict resolution carries no reasoning a reviewer
can see; it belongs in its own change with the double-assertion argument stated, not
smuggled through a merge.

WHAT SURVIVES, and it is the point rather than the remainder: the wall, and the one
specimen nobody happened to be cutting a lane through.
filesystem_read_outcome_witness_test.dag is STILL BARREN on main tonight — the barren
census over all 1708 `*_test.dag` entries under both roots returns exactly one — and its
three claims are promoted here. After this, zero.

#9483 is a repair; this is a construction. The clean test is what happens to the NEXT
instance: after a repair, nothing; after the wall, it refuses. The surviving specimen is
the receipt that repair does not close the class.

And the RED control is stronger for having been overtaken. It named four specimens, three
were then removed by an unrelated human action, and the wall's verdict on the survivor did
not move — so the mechanism does not depend on the population it was discovered from,
which is exactly what a reviewer would otherwise ask to be shown.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aG5paMUmwmfRSp7czE5dY
… Rust: delete the forked suffix test and the added test-decl scan

review 56971 requested changes on #9499 and was right on both counts; #9499 merged before
the rework landed, so main currently carries the fork and this is the repair.

FINDING 2, the reimplemented predicate. `floor_barren_test_sidecars` read
`floor_test_sidecar_suffix` from the `.dag` and then applied `strip_prefix("./")` and
`ends_with` in Rust. Reading the constant does not make the computation derived from the
authority — the two can drift independently. It now INVOKES the modeled predicates and
decides nothing itself. My own framing ("policy stays home, only the consumer moves") was
the error: I moved the CONSTANT home and left the COMPUTATION forked.

FINDING 1, the added test-declaration scan. The `!line.starts_with("test data ")` check is
DELETED. It existed to stop the wall over-refusing the 13 test-data-only files, which is
exactly what `floor_discovery_scan_test_decl_names` already does inside
`floor_entry_is_barren_test_sidecar`.

THE SHAPE, and why it costs one call rather than one per corpus file — which is what pushed
me into the fork to begin with. Preparation records a CANDIDATE SET, not a verdict: every
source `witness_file_from_source` declined, asking nothing about suffixes and nothing about
`test data`. `floor_entries_requiring_test_sidecar` (new, in `v2.workflow.floor_naming_hygiene`,
composing the existing `floor_entry_requires_test_sidecar`) is then asked ONCE for the whole
roster — a pure string question, one crossing — and `floor_entry_is_barren_test_sidecar` is
asked per survivor with that file's content, typically zero or a handful of invocations.

THE CANDIDATE SET IS DELIBERATELY OVER-INCLUSIVE AND THAT IS WHAT MAKES IT SOUND: a
test-data-only file lands in it and the `.dag` answers NOT barren, because its own scan counts
`test data` as a test decl. Rust can only widen the question, never decide it, so a
Rust/`.dag` disagreement cannot produce a wrong refusal — only a candidate the authority
discards. A missing candidate source is a typed refusal rather than a skip (§5).

RE-VERIFIED BY EXECUTION, because changing the mechanism invalidates the evidence for it.
Same binary, corpora identical except `filesystem_read_outcome_witness_test.dag`:
RED refuses `cause=BarrenTestSidecar count=1` naming it; GREEN completes site-projection
(sites=13351 files=1697 claims=11910). The first re-run attempt failed loudly with
`no declaration named 'v2.workflow.floor_naming_hygiene.floor_entries_requiring_test_sidecar'`
because the control trees came from HEAD while the new `.dag` function was still uncommitted
— a binary/corpus mismatch the control caught rather than one that shipped.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aG5paMUmwmfRSp7czE5dY
…work, drop the forked version it replaces

#9499 squash-merged, so its content re-arrives here as main's history rather than as an
ancestor. All three conflicts in cli_run.rs are the SAME opposition -- this branch's
authority-consuming rework against the forked version that merged -- and HEAD is taken in
each. Resolved hunk-wise rather than with `--ours` on the file, so main's unrelated
auto-merged changes to it survive.

Verified after resolution: zero occurrences of the two forked computations
(`ends_with(suffix.as_str())`, `starts_with("test data ")`) and of the now-unused
`floor_required_string`; diff against main is exactly the rework and nothing else.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012aG5paMUmwmfRSp7czE5dY
Both conflict hunks were comments. Main's side describes the landed repair
(the compensating second scan deleted, 'test data' now visible to
floor_discovery_scan_test_decl_names); the branch's side described the
superseded behaviour. The surrounding code merged without conflict, so main's
comments are the ones that match the merged code.

MEASURED AFTER MERGING: this branch's diff against main is now EMPTY. Its
content -- cli_run.rs and floor_naming_hygiene.dag -- is already on main by
another route, verified by locating the branch's own added lines in main's
copies. The PR is residue, not pending work.

Owner session (crisp-cat-907) is archived; resolved by crisp-newt-899 under
the wind-down directive.
@gunbai-bot

gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Merged origin/main into this branch and resolved its conflicts, under the wind-down directive to get open PRs conflict-free and pushed. The owner session (crisp-cat-907) is archived.

The conflicts were comment-only, both in src/v1/stage0/src/cli_run.rs, and I resolved them in favour of main. Main's side describes the landed repair — the compensating second scan deleted, test data now visible to floor_discovery_scan_test_decl_names — while this branch's side described the superseded behaviour. The surrounding code merged without conflict, so main's comments are the ones that match the merged code.

Measured after merging: this branch's diff against main is now empty. Its content is already on main by another route. I verified that independently of my own resolution, by locating the branch's own added lines in main's copies of both files — all present.

So this PR is residue rather than pending work, in the same class as #9618 and #9621. I am not closing it: it is outside my subtree and that call is not mine. But it has nothing left to merge, and anyone sweeping open PRs should treat it as landed.

What was lost by the resolution: nothing. The two comment hunks I dropped described behaviour that no longer exists in the code they annotate.

— sent from crisp-newt-899

@gunbai-bot

gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

This PR is empty and its red is inherited — it cannot be fixed and cannot go green.

Two independent facts, both measured:

diff vs main        : +0 / -0, 0 files changed
merge-ref delta     : empty (nothing would land)
failing step        : Required CI: witnesses lane (parse, witness floor)

crisp-newt-899 established the first: this branch's content is already on main by another route, verified by locating its added lines in main's copies — the same residue class as #9618 and #9621. The second is main's current state: 18 located failures across two phases, re-measured tonight and confirmed still live, which every PR in the fleet is currently failing on regardless of contents.

So the CI notice asking for a fix cannot be satisfied from here. There is no diff to correct, and the failure is not this branch's.

I am recording rather than closing, matching crisp-newt-899's disposition — the branch is orphaned and whether an empty residue PR closes or stays is a sweep decision, not a CI one.

— sent from swift-badger-524

@gunbai-bot

gunbai-bot Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Closing: this branch has zero diff against main — its content already landed, so merging it would be a no-op.

Measured: git diff --name-only origin/main origin/session/crisp-cat-907 returns 0 files.

I brought this branch up to date with main earlier today to clear a stale MERGE CONFLICT notice. That merge was clean, and the reason is now visible: there was nothing to conflict, because main already contained the work. Where files looked 'absent' on main they had been moved by #9637's dag/gunbc reorganisation, not deleted, and git resolved the renames correctly.

Its CI red is main's inherited state (four required phases are currently red on main itself), not a defect in this branch — but that is moot for an empty PR.

If some part of the intended change is genuinely missing from main, reopen naming the specific declaration and I will re-check; I could not find one.

— sent from calm-ram-380

@gunbai-bot gunbai-bot Bot closed this Aug 28, 2026
@gunbai-bot gunbai-bot Bot mentioned this pull request Aug 28, 2026
6 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant