Skip to content

theory(sieve): C9 measured, t27b builds bit-identical, t27c carries git abbrev and CARGO_HOME (Closes #8148) - #8181

Merged
gHashTag merged 3 commits into
masterfrom
sieve/c9-repro-build
Oct 10, 2026
Merged

gHashTag merged 3 commits into
masterfrom
sieve/c9-repro-build

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 9, 2026 •

Copy link
Copy Markdown
Owner

Closes #8148
Refs #6488

What

Sieve cell C9 (reproducible builds, reproducible-builds.org/docs/definition) measured for t27c and t27b, with the rule and the measured hashes recorded as data and tests in specs/compiler/theory/reproducible.t27.

Runs

Commit be97577, rustc 1.99.0, cargo 1.99.0, x86_64 release. Seven builds on the two Railway labs, varying the build path, clock, user and HOME, TZ, locale, umask, SOURCE_DATE_EPOCH (set and unset), clone depth (partial, full, depth 1), CARGO_HOME and host.

binary sha256 builds
t27b 258950de2fa4a978a3c223cee4760b7912db8c022c4999d883bf9d4392a157cd all 7
t27b aarch64 b0917f8870d899911e19376b4f924d67a4b6b2a9a1bbdcbe327506f0812d9bd7 X, Y
t27c c661e5ecb47253034b7852eba12ef57749482164c008728850a3bfac42058feb A, B, D
t27c 477efb0f10d18854332970f60ff8c322e825259052a4ad9b1245501ee82b20e9 C (depth-1 clone)
t27c 5f3278089fdcdc7885fde7d930be27b14eb624ae0def81a2f4cfe3ea44c85cf0 E (other CARGO_HOME)
t27c ac69ce14528151a3d85516274a25a176b7cdad0629a9c7ed4f94782272400cd4 X, Y (t27b lab)
t27c, remapped 253be263e8c28ec9f6c4c659b9dbc979d42627a7799d915ec0d53366ab3809f6 F, G, Z (3 cache paths, 2 hosts)

Verdict

  • t27b C9: UNKNOWN to TRUE. All seven builds are bit-identical.
  • t27c C9: UNKNOWN to FALSE. Fix issue: t27c build is not reproducible: git short-sha length and CARGO_HOME path are baked into the binary (sieve C9) #8178. Two causes, each isolated by one pair of builds:
    1. bootstrap/build.rs bakes in git rev-parse --short HEAD. A depth-1 clone gives be97577, a full clone be9757784. With core.abbrev 9, the shallow clone gives back the full clone's hash.
    2. The absolute CARGO_HOME paths of 20 crates.io crates are embedded in panic locations, 115 occurrences in all. With --remap-path-prefix=$CARGO_HOME=/cargo, the binary is identical across both hosts and all three cache paths.
  • gen, gen-c and gen-rust: deterministic. Over the 2037-slot corpus, every slot's stdout, stderr and exit code agree across five runs and three distinct t27c binaries. As a negative control, the empty output of a failed clone was flagged on all 2037 slots.

Spec changes

Foreign lines: 0. The build.rs fix is foreign code and waits on #8178.

🤖 Generated with Claude Code

…it abbrev and CARGO_HOME (Closes #8148)

Seven builds of each binary at be97577 on the two Railway labs, varying
path, clock, user, HOME, TZ, locale, umask, SOURCE_DATE_EPOCH, clone depth,
CARGO_HOME and host. t27b: one sha256 (258950de...), C9 TRUE. t27c: four
binaries; causes are the build.rs short-sha length (7 in a depth-1 clone,
9 in a full one) and absolute CARGO_HOME registry paths in panic
locations. C9 FALSE, fix issue #8178. gen, gen-c and gen-rust are
identical over the 2037-slot corpus across five runs and three binaries.

The rule, the hashes and a cause model checked on all 21 build pairs live
in specs/compiler/theory/reproducible.t27 (10/10, 0 vacuous). sieve.t27
moves T738-T741, keeps the 17e01d2 rows, and is resealed (11/11).

Refs #6488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) October 9, 2026 11:53
This was referenced Oct 9, 2026
@github-actions

github-actions Bot commented Oct 9, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-09 13:04:11 UTC

Summary

Status Count
Total Open PRs 50
PRs with Failing Checks 48
PRs with All Checks Green 2
READY 0
FAILING 48
PENDING 0
NO CHECKS YET 0

These columns do not partition: 0 + 48 + 0 + 0 = 48, and there are 50 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=3c0ade9e73e4 != 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).

#8182 (C6/C7, Refs #7596) and this PR both moved sieve.t27 counts. The
merge keeps #8182's rows and adds the C9 measurement on top:

- t27c C9 FALSE (fix #8178), t27b C9 TRUE; the be97577 rows from #8182
  replace this branch's 17e01d2 rows (same data).
- T738: t27c FALSE 4 (C1, C4, C5, C9), t27b FALSE 1 (C1).
- T739: four filters fire, kills(C9) == {t27c}, subsumed_by(C6) == 5.
- T740: t27b TRUE 7, best 7.
- T741: five FALSE cells, C9 -> #8178; the C9 test now counts moves
  from be97577 (5 total: T752's three C6/C7 cells and the two C9 cells).
- test-report on the t27c lab with t27c built at 5ba4247 (bootstrap/
  unchanged since): sieve 12/12, reproducible 10/10, 0 vacuous each; both
  resealed (seal schema 2).

Master is the first parent so the pre-commit gates see this PR's diff.

Closes #8148
Refs #6488

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@gHashTag gHashTag reopened this Oct 10, 2026
@gHashTag gHashTag closed this Oct 10, 2026
@gHashTag gHashTag reopened this Oct 10, 2026
@gHashTag

Copy link
Copy Markdown
Owner Author

Master re-merged (merge commit d1ef7b8, master as first parent per repo convention; no force-push). Conflicts were the two theory seals vs the v2 re-mint (19a2327/1ab051fe8): the branch's seals are kept because they match the specs this tree carries (12/12 sieve, 10/10 reproducible). Verified on the t27c lab at d1ef7b8: both seals' gen_hash_c/rust/verilog/zig match what the compiler emits (no re-seal needed), test-report 12 pass / 0 fail / 0 vacuous (sieve) and 10 pass / 0 fail / 0 vacuous (reproducible). Specs are byte-identical to the branch versions; master touched neither theory spec since a1497b1, so #8182's C6/C7 values and the C9 rows both stand. own-language was red only through the stale PR base (e19b771, master at open time) counting master's own drift as this PR's diff; a close/reopen refreshed the base and it passes. Remaining reds are inherited from master and non-required: Corpus ratchet, t27b-native-ratchet, coverage fail on master's own head; spec-guards is red repo-wide today (79 stale seals from the gen-zig empty-array change, none of them this PR's). Required contexts validate, check-linked-issue, parse-ratchet, own-language: all green.

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.

sieve C9: build t27c and t27b twice from one commit and compare the binaries (reproducible builds)

1 participant