Repository navigation
Conversation
Proof profile (new / modified Lean files)Statement changes✅ No statements changed — all 1 tracked declaration across 1 modified file kept their type; only proofs / definition bodies changed. Statements are compared textually against the merge base (comments and whitespace ignored; Compile cost of modified files — base → headHeartbeats: 0 → 0 (+0, —). Declarations: 0 → 0. Per-file wall sum: 0.7 s → 0.8 s (+13.7%). Wall clock is measured under parallel load and is noisy; heartbeats are deterministic and are the regression signal. Files: 1 compared — 0 cheaper, 0 costlier, 1 within noise (threshold: |Δ heartbeats| ≥ 1,000 and ≥ 1%). Measurement errors: 1 base-side / 1 head-side file(s), marked ⚠; their heartbeat counts are partial. Both sides are elaborated against the merge-base build of the pool — sound when only proofs and definition bodies change; a file whose statements changed may fail there and is flagged ⚠. Heartbeats come from Mathlib's
Advisory only — never blocks merge. Full log uploaded as the |
Vilin97
left a comment
There was a problem hiding this comment.
Reviewed f7e0dbc3d904410e145e075e1b3508466331e798 under the refactor rubric. The current one-line change removes definition-body exposure from LeanPool.Basic while retaining the public hello declaration and its signature. The change is consistent with the stated API goal; I found no actionable defect in this increment.
This review covers the committed Basic.lean change only. The PR body describes a pool-wide migration that is still in progress, so it should remain a draft until that implementation is finished and the final head has passed the full build, linters, and quality checks. Current full-pool CI is still running.
🤖 LLM review — refactor (
|
| Aspect | Value |
|---|---|
| Scope | module exposure/API refactor |
| Introduces tech debt | 🛑 yes |
| Maintainability | 🛑 regressed |
| Brittleness | 🛑 more_brittle |
| Risk | 🟡 medium |
The selective interfaces improve some dependencies, but remaining public API gaps need fixing before merge.
Findings (2)
- reusability-lost —
LeanPool/RungeKuttaOrderConditions/ButcherOrder.lean:29
The public butcherCheck and gaussCheck macros still explicitly unfold Phi, gamma, order, the tableaux, and related definitions, whose bodies this change hides. An importing-module test using the exact tree definitions passes with the original exposure and fails after removal: decide +kernel gets stuck on order leaf, and simp only rejects gamma and its dependencies. Restoring targeted exposure makes the test pass. Preserve exposure for the checkers’ computational dependencies and verify both macros from a separate importing module; certificates inside this file do not exercise that boundary. - reusability-lost —
LeanPool/PointwiseBirkhoff/Main.lean:19
Removing exposure hides invCondexp without providing an equation identifying it with μ[φ | invariants f]. Both main Birkhoff theorems conclude convergence to this wrapper, so ordinary importing callers can no longer unfold it to obtain the conditional-expectation conclusion or apply Mathlib’s conditional-expectation lemmas. This follows Lean’s module visibility rules. Expose invCondexp individually or export its defining equality, then check the conditional-expectation formulation from an importing module.
Tokens: 1,753,751 in / 9,513 out · Tier: codex-subscription · Effort: xhigh · Billing: Codex subscription quota (no API credits) · Estimated cost: $35.7885 (Standard API equivalent; uncached input) (long-context rate)
Automated review against .github/REFACTOR_REVIEW_RULES.md. Disagree? Reply on the PR; rules can be updated in a PR of their own.
request_changes is an ask, not a close: of the reviewer's past request_changes verdicts, 39% were merged after a human looked. Read the findings before acting on the verdict.
Changes requested by automated reviewReviewed head The exposure cleanup breaks the exported Runge–Kutta proof API. A separate module importing Acceptance condition: expose the definitions intentionally used by the public macros, or rewrite the macros against public equation lemmas, and verify both The large exposure delta was audited file by file with a reproducible inventory; the remaining proof/API edits were inspected separately. The finding is a reproduced client failure, not an objection to the diff's size. |
Changes requested by automated reviewReviewed exact head The exported Runge–Kutta checker API still fails from an importing module. After compiling Acceptance condition: give the public checkers access to the intended computational definitions (targeted exposure or public equations), export the required tactic implementation, and make both separate-module examples pass. Obtain all build shards and the unchanged aggregate lint/quality/trust gates at the resulting head. The current build is pending; the preceding head's nine failed shards are historical, not proof that these new repairs fail. The complete follow-up was partitioned into 454 mechanically compared attribute/ |
Changes requested by automated reviewReviewed exact head The refactor still breaks imported definition visibility. The completed predecessor run on the unchanged affected sources reports failures in ClassificationOfSurfaces/Moise/LocallyFiniteFaceExtension, BooleanMultiplication/N4/SevenGate, MarkovProcess/DenseTime/Trajectory and HardSphereNBC/HardSphereGeometry, among the grouped failures in run 36430792945. The latest two Nikodym batches (13 files, then 9 files) only add targeted Acceptance condition: Repair each failing dependency boundary with the needed exposed definitions or public lemmas, remove ineffective exposure attributes reported as warnings, and pass every build shard and unchanged repository gates. Preserve the valid exposure repairs already made. Prior complete source/dependency/source-attribution audits were reconciled against this head using full diffs, source/card/configuration equality where applicable, and the changed proofs. Fresh pending checks are not represented as green. Formal self-review is unavailable to the PR-author account. |
Changes requested by automated reviewReviewed exact repaired head The current public reduction API still breaks downstream consumers. The earlier no-new-failure checkpoint is superseded by this head’s completed shard 01, which has 69 Lean compiler diagnostics. Acceptance condition: restore the remaining selective exposure or public equation/constructor bridges in the affected RegtsSevenster closure, preserve exported computations and theorem contracts, and pass every build shard plus the unchanged warning, lint, quality and trust gates. Preserve the valid repairs already made. Neither draft status nor the diff’s size is a blocker or reason for a maintainer label. Additional completed shards at this same reviewed head corroborate the same API defect: shard 02 cannot eliminate |
|
Auto-rebase stopped: this PR conflicts with |
Independent review — changes requested at
|
|
Auto-rebase stopped: this PR conflicts with |
This draft removes blanket
@[expose] public sectionexports across Lean Pool. It keeps ordinarypublic sectiondeclarations and adds individual@[expose]attributes where imported clients require a definition's body. The main module-system migration merged separately in #517.The scope remains the full module migration: preserve all projects, mathematical statements, assumptions and intended APIs; review the individual exposure edits and any narrowly scoped proof repairs; reconcile accepted changes on Main through the review owner's integration process. No project removal, theorem weakening, warning suppression, waiver or gate change is proposed.
Draft — do not merge yet. Published and locally validated source remain distinct. The published PR head is
4e51cbbfd4a1b908ffbd333044bcda2df9697870. Earlier full-pool attempts used local H523823d12e542bef70447bd5a801ef3c0b717db54b; the current local, unpublished checkpoint in the dated observation below is Source70ec202b6ce0c4e64cf2d0f0cb9d956631e92b4021.Main was verified as
15542c175fbeeb83666dc46fc20c4f18f0783e12at the 2026-10-20, 08:40:02 UTC publication. The same immutable SHA inherits Root's 07:36 UTC primary metadata comparison against2aaa7220788257635be774b855528c4f0be6f3bd: twenty Git-object observations established identical object types and IDs for all ten protected compiler/dependency, gate and review paths. Other intervening Main content was not inspected or integrated with Source70. Final integration with moving Main remains with the review owner.Saved H52 structure checks covered 14,216 Lean files, with zero missing module declarations and zero blanket-exposure sections. These structural checks do not establish compilation or final-gate acceptance. The later reviewed exposure repairs preserve all other statement, assumption, definition-body, proof, import, option and header bytes.
Retained N45/N59 Brill compilation passes at H52, including their recorded Row04/Row06 coverage, remain valid within their named scope. The earlier Regts/Stafford incremental batch passed using replayed artifacts and supplies no fresh-compilation credit; the separate Carlson Relations qualification freshly compiled and passed. Interrupted H52 full-pool attempts and later targeted runs retain their original outcomes, logs and caches. None is relabeled a completed full-pool build.
Retained earlier local history. Source53–68 supplied scoped passing targets while later EllipticPDE project runs still failed. Original outcomes, byte-preservation reviews, logs and caches remain retained, with the default 200,000-heartbeat limit, proofs, options and gates preserved. Source60's 600-second coordination stop occurred before its remaining targets; its separate continuation remains separate evidence.
Dated validation observation — 2026-10-20, 09:14:21 UTC. The current local, unpublished source is Source70
ec202b6ce0c4e64cf2d0f0cb9d956631e92b4021, saved at 18:18:25 UTC. Its two individual exposures in GrothendieckVanishing/CohomologyAPI add 20 bytes; independent preservation and actual commit/map reviews matched the exact change. All other statement, type, hypothesis, definition-body, proof, import, option and header bytes remain unchanged.Source69's EllipticPDE target 64108 passed at 16:50:28 UTC (project 0, outer 0, no guard stop), with 13 fresh
Builtrecords. That scoped pass remains separate from full-pool acceptance.Source69’s full
LeanPoolattempt 78968 remains an output-guarded failure: outer exit 1, target exit −15, no normal terminal. Its 1,095 freshBuiltrecords remain progress only. Its closed written log retained ten CohomologyAPI source-error headers, including the original 200,000-heartbeat timeout; unwritten stdout may have remained undrained. The old failure and separate operational Source release are not relabeled successes.On Source70, attempt 75079 completed
LeanPool.GrothendieckVanishingat 18:31:26 UTC, with project exit 0, outer exit 0 and no guard stop. Its independently reviewed closed log contains 13 freshBuiltrecords, including CohomologyAPI in 230 seconds and the project root in 3.0 seconds, without error, warning or crash markers. The ten earlier source-error headers cleared with the original heartbeat limit and options unchanged. This establishes the named retained-cache project result; it does not isolate which exposure caused the improvement or establish a full-pool pass.Three later full-
LeanPoolattempts stopped at their output-growth guards:Builtrecords in its closed written log.Builtrecords in its 59,450-byte closed written log.Builtrecords in its 50,225-byte closed written log.Subsequent independent review — 19:52:43 UTC. Reviews of all three entire written logs found no error, warning, heartbeat-timeout or crash markers in these written logs, including after ANSI removal. These observations cover written EOF only: stdout may not have fully drained, so unwritten output remains unknown. The missing normal terminals prevent complete compiler-capture or peak-resource claims. Per-run
Builtcounts are retained progress, not unique-module totals, completion percentages or full-pool acceptance.Before/after Source70 checks matched all 14,216 files against the same map, with clean tracked source. Empty groups and Source release were recorded separately; release supplies no build acceptance.
Closed continuation — 21:59:29 UTC. Attempt 23766 stopped at its finite 7,200-second target timeout:
LeanPoolexit −15, outer exit 0, withfullpool_build_passedandall_targets_passedboth false. Its independently reviewed 145,865-byte closed written log contains 1,116 freshBuiltrecords and 28 replay records, with zero findings across all fourteen raw/ANSI diagnostic scans. These are written progress records, not unique-module totals, completion percentages or a full-pool pass; unwritten stdout is not established complete.For 23766, both Source70 before/after checks matched 14,216 files / 271,053,191 bytes against the same map with clean tracked source. The owned group was empty and normal Source release was independently verified. All 512 captured compiler samples matched the pinned executable and final
-j1flags; these bounded samples do not establish continuous or universal compiler telemetry.Closed continuation — 2026-10-20, 00:09:43 UTC. Attempt 54848 stopped at its finite 7,200-second target timeout:
LeanPoolexit −15, outer exit 0, withfullpool_build_passedandall_targets_passedboth false. Its independently reviewed 116,398-byte closed written log contains 708 freshBuiltrecords and 38 replay records, with zero findings across all fourteen raw/ANSI diagnostic scans. Written EOF does not prove unwritten stdout complete; these records establish no global unique-module total, graph percentage or full-pool acceptance.For 54848, both Source70 checks matched 14,216 files / 271,053,191 bytes against the same map with clean tracked source. Normal Source release and an empty owned group were independently verified at 00:14:06 UTC. The recorded RSS maximum was 14,777,171,968 bytes, with at most two recorded compiler processes and 512 pinned final-flag samples; the samples supply no continuous or universal telemetry claim.
Closed project continuation — 2026-10-20, 02:25:02 UTC. Attempt 59420 reached normal CLOSED after its finite 7,200-second target timeout:
LeanPool.MovingSofaexit −15, outer exit 0, with project and full-pool results both false. Root’s whole-written-log scan covered 2,365 bytes at stable EOF/SHA, recording 24 freshBuiltrecords, zero replay records, zero findings across its ten broad raw/ANSI diagnostic scans, and no partial written tail. The independent fourteen-pattern closed review completed at 02:28:06 UTC, finding zero markers across all fourteen raw/ANSI scans and independently verifying the normal Source release and empty owned group. Written EOF does not prove unwritten stdout complete; these records establish no global unique-module count, graph percentage or acceptance. Both Source70 checks matched 14,216 files / 271,053,191 bytes with clean tracked source. The terminal recorded a maximum RSS of 19,341,033,472 bytes, at most two compiler processes and 26 pinned final-flag compiler samples; these bounded observations do not establish continuous or universal telemetry.Project pass — 2026-10-20, 03:17:29 UTC. Attempt 85718 completed the sole target
LeanPool.MovingSofain normal CLOSED, with target exit 0, no stop reason and outer exit 0. Root’s whole-written-log scan covered 1,549 bytes at stable EOF/SHA, recording 16 freshBuiltrecords, zero replay records, zero findings across its ten broad raw/ANSI diagnostic scans, and no partial written tail; the root module built in 3.2 seconds. The independent fourteen-pattern closed review completed at 03:21:49 UTC, finding zero markers across all fourteen raw/ANSI scans and verifying the exact Source70 checks, normal release and empty owned group. Both Source70 checks matched 14,216 files / 271,053,191 bytes with clean tracked source, and Root verified normal guards, Source release and an empty owned group. The terminal recorded a maximum RSS of 12,833,685,504 bytes, at most two compiler processes and 16 pinned final-flag compiler samples; these bounded observations do not establish continuous or universal telemetry. Written EOF does not prove unwritten stdout complete; these records establish no global unique-module count or graph percentage. This is project C0 only; it supplies no full-pool, gate, current-Main, CI, final-review or merge acceptance.Full-pool guarded stop and subsequent release. Attempt 20650 remains an output-guarded failure, recorded GUARDED_STOP at 04:06:57 UTC:
LeanPooltarget exit −15, outer exit 1, with no normal terminal and no full-pool acceptance. Its independently reviewed 127,878-byte entire closed written log contains 577 freshBuiltrecords and 41 replay records, with zero markers across all fourteen raw/ANSI diagnostic scans and no partial written tail. These are written progress records, not global unique-module totals, graph percentages or completion; unwritten stdout may have remained undrained. The missing normal terminal prevents complete compiler-capture or peak-resource claims. Both Source70 attestations matched 14,216 files / 271,053,191 bytes against the same map. Root’s 04:12:35 UTC snapshot recorded clean tracked source and an empty owned group. The separate operational Source release completed at 04:24:44 UTC, and the independent negative closed-and-released review completed at 04:27:04 UTC. Release supplies no build acceptance.Full-pool guarded stop — 2026-10-20, 05:45:44 UTC snapshot. Attempt 9170 was recorded GUARDED_STOP at 05:35:09 UTC under its output-growth guard:
LeanPooltarget exit −15, outer exit 1, with no normal terminal and no full-pool acceptance. Its independently reviewed 125,134-byte entire closed written log contains 535 freshBuiltrecords and 50 replay records, with zero findings across all fourteen raw/ANSI diagnostic scans. These are written progress records, not global unique-module totals, graph percentages or completion; written EOF does not establish that unwritten stdout fully drained. The missing normal terminal prevents complete compiler-capture or peak-resource claims. Both Source70 attestations matched 14,216 files / 271,053,191 bytes against the same map. Root’s separate operational release at 05:44:18 UTC recorded clean tracked source, an empty owned group and Source availability restored through a negative CLOSED ledger; the original guarded runtime and ledger remain immutable. This operational release supplies no build acceptance. Source70 remains unpublished and the cache is retained. At this dated snapshot, a possible 15.875 GiB cumulative-stage continuation remains prospective, with no actual adoption or successor invocation credited. All six actual post-build gates remain unexecuted; full-pool, kernel, current-Main, hosted-CI, final-review and merge acceptance remain pending.Latest full-pool guarded stop — 2026-10-20, 06:33:26 UTC snapshot. Attempt 59598 was recorded GUARDED_STOP at 06:10:00 UTC under its output-growth guard:
LeanPooltarget exit −15, outer exit 1, with no normal terminal and no full-pool acceptance. Its independently reviewed 88,441-byte entire closed written log contains 117 freshBuiltrecords and 51 replay records, with zero findings across all fourteen raw/ANSI diagnostic scans and no partial written tail. These are written progress records, not global unique-module totals, graph percentages or completion; written EOF does not establish that unwritten stdout fully drained. The missing normal terminal prevents complete compiler-capture or peak-resource claims. Both Source70 attestations matched 14,216 files / 271,053,191 bytes against the same map. Root's separate operational release completed at 06:17:34 UTC, and the independent negative closed-and-released review completed at 06:21:53 UTC, verifying clean tracked source, an empty owned group and Source availability restored through a negative CLOSED ledger. The original guarded runtime and ledger remain immutable. Release supplies no build acceptance; Source70 remains unpublished and the cache is retained.A separate operational qualification committed the 34 GiB disk / 15.5 GiB cumulative stage selection at 04:36:04 UTC, on the same 18,693,206,016-byte baseline within the original 16 GiB reservation, with no increment or new reservation origin. Any continuation remains on the same unpublished Source70 and retained cache, under the finite 7,200-second target bound, actual compiler
-j1, at most two compiler processes and unchanged source guards. The prospectively qualified disk envelope is 34 GiB, with 15.5 GiB cumulative stage growth from the same baseline, superseding the earlier operational disk ceiling. RAM remains capped at 25 GiB. No cleanup, baseline reset, refund or new reservation origin is credited.Attempt 59598 used the later 15.875 GiB cumulative stage / 34 GiB disk selection on that same baseline within the original 16 GiB reservation, without an increment or new reservation origin. At the 06:33:26 UTC checkpoint, the next B preparation remains prospective and unadopted: it would separately register a 2 GiB increment, bringing the retained reservation to 18 GiB, and select a 17.75 GiB cumulative stage / 36 GiB disk envelope with the aggregate minimum-free requirement increased from 73,668,755,456 to 75,816,239,104 bytes. No B adoption or successor invocation is credited by this dated snapshot. RAM remains capped at 25 GiB, with the original 2 GiB margin, address space remains 22 GiB, and the at-most-two-compiler, final-flag, finite-target, heavy-lock, Source, proof and gate safeguards remain unchanged. This preparation supplies no full-pool, post-build-gate, kernel, current-Main, hosted-CI, final-review or merge acceptance.
Current registered continuation — 2026-10-20, 07:33:08 UTC snapshot. B was actually registered at 06:37:11 UTC, adding 2 GiB to the original 16 GiB reservation for 18 GiB retained in total. The current selection is 17.75 GiB cumulative stage / 36 GiB disk, on the same 18,693,206,016-byte baseline, with no new reservation origin, baseline reset, refund or cleanup credited. The earlier 06:33:26 UTC prospective-B paragraph records its historical snapshot. Actual retained-cache attempt 91674 has been BUILDING since 06:45:45 UTC, on the same unpublished Source70, with the sole target
LeanPooland the finite 7,200-second target bound; the final compiler-j1, at-most-two-compiler, 25 GiB RAM plus 2 GiB margin, 22 GiB address-space, heavy-lock, Source, proof and gate safeguards remain unchanged. Root's reviewed active written prefix at 07:33:08 UTC covers 124,733 bytes, 1,646 complete lines, 533 freshBuiltrecords and 51 replay records, with no partial written tail and zero findings across all fourteen raw/ANSI diagnostic scans. This is a live prefix, not final written EOF or proof that unwritten stdout is complete; the records supply no global unique-module count, percentage, graph completion or acceptance. The 07:32:57 UTC bounded sample recorded 2,832 seconds elapsed, 9,672,978,432 bytes RSS, two compiler processes and 37,206,790,144 allocated bytes, below the selected 37,752,123,392-byte allocation stop. These are dated samples, not continuous or peak-resource observations. No normal terminal, full-pool result or post-build-gate acceptance is credited by this snapshot.2026-10-20, 08:22:25 UTC update. Prior B18 full-pool attempt 91674 was recorded as guarded at 07:49:50.608421 UTC for output growth cap: outer exit 1, target exit −15, and no normal terminal. Its complete written 144,464-byte log contained 762 fresh Built and 51 Replayed records across 1,875 complete lines, with no partial tail and zero matches in all fourteen canonical diagnostic categories, both raw and ANSI-stripped. The two source attestations matched 14,216 files / 271,053,191 bytes exactly. Root released the source at 07:53 UTC, and the independent negative closed-and-released review passed; this supplied no full-pool or post-gate acceptance. The next reservation was actually registered at 08:02:14 UTC: original 16 GiB + B's 2 GiB + C's 1 GiB = 19 GiB, with a selected 18.75 GiB stage and 37 GiB disk envelope from the same growth basis, without a new reservation origin, baseline reset, refund or cleanup credit. Retained-cache full-pool attempt 57779 has been BUILDING since 08:09:52.963409 UTC, on unchanged, unpublished Source70
ec202b6ce0c4e64cf2d0f0cb9d956631e92b4021. The finite 7,200-second bound, final-j1, at most two compiler processes, RSS + 2 GiB < 25 GiB, 22 GiB address-space bound, heavy lock, source/proof safeguards and gates remain intact. Root's 08:22:25 UTC active-prefix observation covered 89,162 written bytes / 1,229 complete lines, no partial tail, 116 fresh Built / 51 Replayed records, and zero matches in all fourteen raw and ANSI-stripped diagnostic categories. These dynamic records describe a partial written prefix; they establish no final EOF, unwritten-output completeness, global unique count, completion percentage, graph completion, full-pool pass or post-gate, CI, Main-integration, review or merge acceptance.2026-10-20, 09:14:21 UTC update. C19 full-pool attempt 57779 was recorded as guarded at 08:41:35.585432 UTC for output growth cap: outer exit 1, target exit −15, and no normal terminal. Its complete written 111,324-byte log contained 376 fresh Built / 51 Replayed records across 1,493 complete lines, no partial tail, and zero matches in all fourteen canonical diagnostic categories, both raw and ANSI-stripped. Both source attestations matched 14,216 files / 271,053,191 bytes exactly. Root's separate source-release invocation succeeded, and Storage's independent negative closed-and-released review passed at 08:54:16.916399 UTC; no full-pool or post-gate credit follows. The next reservation was actually registered at 08:56:51 UTC: original 16 GiB + B's 2 GiB + C's 1 GiB + D's 1 GiB = 20 GiB, selecting a 19.5 GiB stage with strict allocation stop 39,631,171,584 bytes and a 37.125 GiB disk envelope, from the same growth basis and within the original 25 GiB net-output scope, without a new reservation origin, baseline reset, refund, cleanup credit or cache deletion. Retained-cache full-pool attempt 7557 has been BUILDING since 09:09:24.357406 UTC on unchanged, unpublished Source70
ec202b6ce0c4e64cf2d0f0cb9d956631e92b4021. The finite 7,200-second bound, final-j1, at most two compiler processes, RSS + 2 GiB < 25 GiB, 22 GiB address-space bound, heavy lock, source/proof safeguards and gates remain intact. Root's 09:14:21.889113 UTC active-prefix observation covered 83,470 written bytes / 1,173 complete lines, no partial tail, 55 fresh Built / 52 Replayed records, and zero matches in all fourteen raw and ANSI-stripped diagnostic categories. This partial written prefix establishes no final EOF, unwritten-output completeness, global unique count, completion percentage, graph completion, full-pool pass or post-gate, CI, Main-integration, final-review or merge acceptance.All six post-build gates remain pending and unexecuted. Their current static preparation is inert, with no actual execution plan or gate credit. Execution still requires successful current-source full-pool closure, independent closed review, warning-free written output and fresh source/resource bindings. Final published-head CI and independent final review remain required.
Source58 also restored three legacy product-instance names as public aliases to canonical Mathlib structures, without adding duplicate instance-search registrations. Historical registration/reducibility behavior and compatibility with every external client are not claimed identical.
The twelve-file RemovalExtremalStability source proposal from earlier Main
374a940b17712eab49f6dfc0bbe754b8ff55e76bremains unapplied and uncompiled. Its static preservation review and prepared runner do not supply latest-Main integration or kernel acceptance; full-pool/post-build prerequisites and reviewer integration remain pending.The published head's observed CI still fails in Lean Action CI run 37186446631. Those historical diagnostics do not determine the later unpublished local outcomes. Fresh hosted CI must validate the final published head.
Before this PR can leave draft status and merge, the final integrated source must:
LeanPoolbuild.Targeted local successes or static reviews supply no full-pool, final quality, hosted-CI or merge acceptance. This PR remains draft while those requirements are pending.