Skip to content

frontier caches each spec's gen hashes by content: 68 s -> 3 s (Closes #8739) - #8741

Merged
gHashTag merged 1 commit into
masterfrom
claude/hotreload-t1
Oct 10, 2026
Merged

gHashTag merged 1 commit into
masterfrom
claude/hotreload-t1

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closes #8739

This is H1 of #8737, hot reload everywhere t27 waits. t27c frontier regenerated all four backends of every spec on every walk to judge the toolchain part, which took 55-68 s over the corpus. It now takes those hashes from a content-addressed cache when nothing they depend on changed.

  • Spec: specs/verified/gen_hash_cache.t27.
    • gen_cache_use(found, outputs): use an entry only when it holds all four outputs.
    • gen_cache_store(ok, served): write only a fresh success, never a failure.
    • 2/2, 0 vacuous; sealed v2; t27b row.
  • The key: the spec's source plus its whole use closure, the t27c binary's bytes, and GEN_CACHE_VERSION. The closure is needed: changing a constant in reuse.t27 changes the Zig generated for seal_identity.t27, which imports it, because constants are inlined across imports.
  • Where: ~/.cache/t27/genhash/, outside the repository (1822 entries, 7.1 MB). Nothing a seal records changes.

Measured

  • t27c frontier --list is byte-identical across the old binary, the new one with a cold cache, and the new one with a warm cache.
  • A warm walk takes 3.0 s instead of 67.7 s.

Budget and census

  • service.rs +9 -3 and main.rs +4 (the module line), paid for by deleting the dead scripts/gen_w312.py.
  • Census "fetches", files read: 48 -> 49, because the new generated module is one more file in its scope. Re-blessed in the commit, with the reason in the message.

🤖 Generated with Claude Code

…#8739)

H1 of #8737. frontier regenerated all four backends of every spec on each
walk. specs/verified/gen_hash_cache.t27 decides when a cached entry is used
(found, all four outputs) and stored (a fresh success only); the key is the
spec plus its whole use closure (an imported constant changes the
importer's Zig), the t27c binary's bytes and GEN_CACHE_VERSION, under
~/.cache/t27/genhash. frontier --list is byte-identical with the old
binary, a cold cache and a warm one; a warm walk takes 3.0 s instead of
67.7 s. Paid for by deleting scripts/gen_w312.py.

Census: fetches "files read" 48 -> 49, because the new generated module
bootstrap/gen/rust/verified/gen_hash_cache.rs is one more file in its scope;
re-blessed with tri census pin --bless.

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

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-10 18:40:33 UTC

Summary

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

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

Seal Status

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

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.

H1: frontier caches each spec's gen hashes by content (55-68 s -> 3 s)

2 participants