Repository navigation
Conversation
Every infrastructure edit since the v4.35 bump restarted documentation analysis (~8 h for 31k modules) and exposition extraction (~3 h) from zero: their cache keys hashed `lakefile.toml`, the docs cursor hashed every source file plus helper scripts, and neither could restore across those changes. On main the analysis therefore never finished, and the site has not deployed since Oct 13. Docs: record completion per project, fingerprinted by the project's sources and Lake's compiled-module content hashes over its local import closure (Lake's setup inventories, so cross-project imports count). Unchanged projects are not sent to Lake again. Only toolchain, dependency, doc-gen and link-policy changes restart everything. Modules deleted from the pool are pruned from doc-gen's database (it cascades from `modules`) together with their markers. Import ordering is parsed only for projects with work left. Exposition: fingerprint compiled-module hashes instead of `lakefile.toml`, and let the extraction cache restore from any earlier generation; per-project fingerprints already decide validity. Missing inventories or compiled hashes fall back to the old, conservative behaviour. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A real doc-gen run showed Lake can compile a stale module while it analyzes it; the fingerprint taken at the start then never matches and rendering refuses the completed analysis. Hash each project's closure when its last module finishes instead. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Proof profile (new / modified Lean files)No added or modified Lean files under Advisory only — never blocks merge. |
|
Advisory cross-file review against Lean Pool's supervisory rubric. This is not by itself a significance, source-verification, or merge verdict. [Medium impact] The PR appears safe to merge; no blocking issue was found. SummaryThe PR keeps completed documentation and exposition work across routine pool changes.
No actionable new issues were found. No previous review threads were supplied. Reviews (2) · Last reviewed commit: "fix: fingerprint documentation companion..." · Reviewed by Greptile |
Vilin97
left a comment
There was a problem hiding this comment.
{
"summary": "Technical source review at 6082bc2: the per-project progress, dependency closures, deletion cleanup and completion checks are favorable after the repair. I fixed the fingerprints to include the contents and explicit presence/absence of public, server and private Lean artifacts; a missing cached hash streams the actual artifact, while a missing public artifact keeps the conservative configuration fallback. This closes the demonstrated stale-completion defect. Only four Python files changed in that repair. All 71 focused tests, the original companion-only stale-completion regression and Ruff checks passed; no Lean/doc-gen build or hosted performance claim is inferred. PR767 has two ordinary workflow merge conflicts requiring an explicit integration resolution. Current-head hosted checks and main qualification remain pending. PR770's three pre-existing workflow cache changes also need the separate direct authorization required by the repository rule; PR767's authorization covers PR767 only.",
"assessment": {
"scope": "Per-project documentation and exposition reuse, database pruning, cache fallbacks and regression coverage",
"introduces_tech_debt": false,
"maintainability": "improved",
"brittleness": "unchanged",
"risk": "medium",
"assessment_one_sentence": "Per-project reuse retains current-input and completion validation after the companion-artifact repair, with hosted validation and workflow authorization still independent."
},
"verdict": "approve",
"findings": []
}
Why
The docs site hasn't deployed since Oct 13, which is also why the Zulip announcer has posted nothing since (it defers every project whose docs pages 404). Every scheduled
docs-publishrun on main has failed since #659.Cold documentation analysis is ~8 h (31,178 modules at ~64/min on one runner) and cold exposition extraction is ~3 h. Both could only finish by carrying progress over between runs, and in practice they almost never did:
DocsStateandExpositioncache keys hashlakefile.toml(and the exposition fingerprints include it), with no fallback across a change. chore: bump Lean and Mathlib to v4.35.0 #689, Fix proof-length counter including unrelated declarations #712, Make every Lean warning a compile error (warningAsError, like Tau Ceti) #751 and fix(docs): build Tau Ceti before rendering and free docs runner disk #759 each wiped all progress between Nov 3 and Nov 6. Today's main run loggedCache not foundfor both.What changes
Docs (
documentation.py,docs-build.yml).olean.hashcontent hashes over its local import closure, read from Lake'ssetup.jsoninventories so cross-project imports such as Zeta32 → Zeta5Irrational count. Unchanged projects are never handed to Lake again.STATE_VERSIONconstant). The poollakefile.tomlis out of the checkpoint key, because options reach the docs only through compiled modules.modules. Theirdoc-datamarkers are removed too, so a module that comes back is analyzed again rather than trace-skipped.Exposition (
extract.py,docs-publish.yml,exposition-verify.yml)lakefile.toml.Exposition-v1-<os>-). The per-project fingerprints already decide what's valid.Missing inventories or compiled hashes fall back to the old, conservative behaviour: whole-pool or lakefile hashing.
No checks or gates change. The
exposition-verify.ymledit only adds a cache fallback.Verification
pytest: 860 passed. 4 tests (test_notice, 3×test_proof_profile) fail identically onorigin/mainon this machine. New tests cover per-project reuse, importers being re-run, option edits with and without compiled hashes, missing inventories, mid-batch compilation, and pruning with cascade.require_completeOK. DeletingAharoniKorman.Counterexamplepruned it from every table (foreign_key_checkandintegrity_checkclean, markers gone). Restoring it re-analyzed it (109 declarations back).ruff check,ruff format --check,actionlintclean.Expected effect
The first run after merge is cold once, because the cache key changed. After that, a daily run should only analyze projects touched since the previous run, plus their importers. Splitting the cold path across runners is a separate follow-up.
🤖 Generated with Claude Code