Skip to content

The half the locator was silent on was one wrong assumption - #2912

Merged
gHashTag merged 3 commits into
masterfrom
semicolon-module-split
Aug 29, 2026
Merged

The half the locator was silent on was one wrong assumption#2912
gHashTag merged 3 commits into
masterfrom
semicolon-module-split

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

tri unparsed locate confirmed 37 answers and refuted 37 — exactly half.
That line sat at the bottom of four consecutive iteration reports, and each time
I picked one of the other options.

The cause

split_module assumed a braced module. A file declaring

module config-load;

— the semicolon form — has no wrapper at all. The scan for "the first line that
opens a brace at depth 1"
found the first struct, and everything after that
struct's closing brace became the tail. Every truncated prefix then had a
large orphan chunk glued onto it and failed for the chunk's own reasons, so the
bisection landed on the first item and causality refuted it.

Found with the base rate, not without it

The hunch — "the tail is too long" — was available immediately: 32 of the 37
refuted cases had a tail over 10 lines. On its own that is worth nothing; long
tails might simply be common.

tail > 10 lines tail = 1 line
refuted 32 4
confirmed 4 33

A one-line tail is a real braced module's closing brace, and it lands almost
entirely in the confirmed column. That is the finding, and it cost one more
measurement than the hunch did.

Result

before after
located AND causally confirmed 37 60
... the item ALONE reproduces 37 60
candidate REFUTED by causality 37 14
nothing claimed 9 9

The 14 that remain are correct refusals

They point at lines 5–11 — the first item in the file. Those are specs
opening with algorithm NAME {, a construct the parser does not implement, so
the first prefix already fails and there is nothing to bisect.

Refusing is right: "unsupported from its first declaration" is a different
claim from "this item causes the failure", and only the second is what the
command promises.

Controls

control expected got
module NAME; → body starts after it, no tail (2, 4) (2, 4)
module m { … } → still splits at the brace (1, 2) (1, 2)
file with no module → whole file is the body (0, 2) (0, 2)
every confirmed answer reproduces alone 60 of 60 60

24 unit tests in unparsed.rs.

Gates, run locally

specs generate 0 · specs parse 0 · conflict markers 0 · seals fresh 0 ·
types ratchet 0 · skill check 0 · unparsed probe 0 · unparsed locate 0 ·
cargo test -p tri 0 · rustfmt --check cli/tri/src/unparsed.rs 0.

bootstrap/src/compiler.rs is untouched, so FROZEN_HASH does not move.

Refs #2864

`tri unparsed locate` confirmed 37 answers and refuted 37 -- exactly half. That
line sat at the bottom of four consecutive reports and I kept picking one of
the other options.

`split_module` assumed a BRACED module. A file declaring `module NAME;` -- the
semicolon form -- has no wrapper, so the scan for "the first line that opens a
brace at depth 1" found the first `struct`, and everything after that struct's
closing brace became the tail. Every truncated prefix then had a large orphan
chunk glued onto it and failed for the chunk's own reasons, so the bisection
landed on the first item and causality refuted it.

Found with the base rate rather than without it. The hunch -- "the tail is too
long" -- was available immediately, and on its own worth nothing:

              tail > 10 lines   tail = 1 line
    refuted        32                4
    confirmed       4               33

A one-line tail is a real braced module's closing brace, and it lands almost
entirely in the confirmed column. That is the finding, and it cost one more
measurement than the hunch did.

  located AND causally confirmed   37 -> 60
  ... the item ALONE reproduces          60
  candidate REFUTED by causality   37 -> 14

The 14 that remain point at lines 5 to 11 -- the FIRST item in the file. Those
are specs opening with `algorithm NAME {`, which the parser does not implement,
so the first prefix already fails and there is nothing to bisect. Refusing is
correct: "unsupported from its first declaration" is a different claim from
"this item causes the failure", and only the second is what the command
promises.

`bootstrap/src/compiler.rs` untouched; FROZEN_HASH does not move.

Refs #2864

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-29 22:49:08 UTC

Summary

Status Count
Total Open PRs 11
PRs with Failing Checks 7
PRs with All Checks Green 4
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=82e020cf95b2 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

claude added 2 commits August 30, 2026 06:08
# Conflicts:
#	.claude/skills/ci-gates/SKILL.md
# Conflicts:
#	.claude/skills/ci-gates/SKILL.md
@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-29 23:17:49 UTC

Summary

Status Count
Total Open PRs 8
PRs with Failing Checks 7
PRs with All Checks Green 1
READY 0
FAILING 7
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=82e020cf95b2 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@gHashTag
gHashTag merged commit 5b08505 into master Aug 29, 2026
27 checks passed
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.

2 participants