Skip to content

Crate fan-out: aprender-contracts (24 commits/30d) dirties 47 of 85 crates; split build_helper out #5909

Open

Description

@noahgift

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.

Activity

  1. added this to the 0.72.0 milestone on Oct 22, 2026
  2. noahgift commented on Oct 22, 2026

    @noahgift
    MemberAuthor

    Tracked in #5510 (triage 2026-10-22).

  3. noahgift commented on Oct 22, 2026

    @noahgift
    MemberAuthor

    tracked in #5963

  4. noahgift commented on Oct 23, 2026

    @noahgift
    MemberAuthor

    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.

  5. modified the milestones: 0.72.0, build-system on Oct 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions