You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Crate fan-out: aprender-contracts (24 commits/30d) dirties 47 of 85 crates; split build_helper out #5909
Five-whys on crate fan-out (operator request 10-20 13:25Z, relayed by the cop). Read-only measurement on main @8e9457990c: cargo metadata --offline, workspace edges among the 85 members, transitive reverse deps.
Top 5 by reverse-dep fan-out (all edges incl. dev):
crate
transitive rdeps
direct
commits touching it, 30d
aprender-contracts-macros
49
10
1
aprender-contracts
47
14
24
aprender-build-sha
47
26
3
aprender-present-core
45
10
2
aprender-present-test-macros
40
1
0
Normal+build edges only: contracts-macros 46, contracts 44, quant 32, gemm-codegen 32, build-sha 32. Mean affected set per single-crate change: 13.2 incl dev, 6.6 normal+build. The cop's 49.6 of 85 per PR is path-weighted by what PRs actually touch, so it is higher than this uniform mean; the structure explains it because the heaviest crates are also the busiest.
Why (short): the high-fan-out crate that changes is aprender-contracts (24 commits in 30d, 17 under src/). 14 crates depend on it, but they mostly use build_helper from build.rs (12 build.rs files) and one test helper (aprender-core, aprender-serve), not the schema/engine. Any engine or schema edit therefore marks 47 crates affected. The macro and build-sha crates are stable (1 and 3 commits), so they are not the cost; contracts is.
Countermeasure (one): move build_helper (and the in-tree test helper the dev-dependents call) into a small, stable crate with no dependency on the engine/schema, and point the 12 build.rs and test callers at it. Engine/schema edits then affect only the crates that really use the engine (cli, orchestrate, the few direct users). Predicted effect to verify after the change: aprender-contracts transitive rdeps drops from 47 to about the real engine users; re-run the same metadata script.
Not checked: whether affected-set selection counts dev edges (if it uses normal+build only, the 44 figure is the real one); the exact per-PR distribution behind 49.6.
Reopened by aprender-cop 00:38Z: its work is in flight on #6035 (epic/n-receipt-v13) and is not on main; EMG-7 needs an open PMAT-Ticket. Closed NOT_PLANNED 10-22 ~16:55Z during REDUCE-1022. Closes when #6035 merges.
Activity
chore(release): publish aprender-contracts-key before aprender-contra…
noahgift commentedon Oct 22, 2026
Tracked in #5510 (triage 2026-10-22).
noahgift commentedon Oct 22, 2026
tracked in #5963
noahgift commentedon Oct 23, 2026
Reopened by aprender-cop 00:38Z: its work is in flight on #6035 (epic/n-receipt-v13) and is not on main; EMG-7 needs an open PMAT-Ticket. Closed NOT_PLANNED 10-22 ~16:55Z during REDUCE-1022. Closes when #6035 merges.
docs(roadmap): carry the PMAT-5909 entry over from #6100 so the epic'…
refactor(serve): aprender-serve build.rs takes env_key from aprender-…
chore(door): PR-level size waiver for the aprender-contracts-key / tu…
fix(contracts): aprender-contracts keeps its own env_key; the shared …
fix(facades): drop aprender-contracts-key from facade Cargo.lock; dev…
docs(roadmap): PMAT-5909 criterion 1 states what the code does: apren…