Methodology · m4 · effective 2026-10-10
How Evidaxis measures momentum
Three axes. One gate: any two converge. Methodology m4 keeps development velocity, citation momentum, and direct-dependents momentum. Axis 3 counts only a system's own packages. The gate is unchanged: at least two axes must be present and rising. No threshold changed from m3.
Axis 1: Development velocity
The OLS slope of log(1 + weekly commits) over the trailing 26 weeks, from GitHub. Within each cohort, robust z (median, 1.4826 × MAD, clamp ±3) is computed first, then adjusted for log(1 + stars). A rising vote requires a positive slope, z ≥ 1, and at least 5 average weekly commits. These values are unchanged from m3.
Axis 2: Citation momentum
The OLS slope of log(1 + citations per year) from OpenAlex. Drop the partial current year and, when four or more completed years exist, the earliest birth year. At least three completed years are required. Within-cohort robust z is adjusted for log(1 + total citations). A rising vote requires slope > 0 and z ≥ 1. These values are unchanged from m3.
Axis 3: Direct-dependents momentum (deps.dev)
Unique direct dependents over the union of a system's own packages, from deps.dev BigQuery Dependents weekly partitions. A package counts when it is declared in that system's repository, published under that name, and not attributed by deps.dev to another repository. A package whose own manifest is private is excluded unless the published package names the declaring repository. Packages without repository metadata are counted as unverified. Self-dependent exclusion uses a fixed list and does not change with this version. The estimator is the OLS slope of log(1 + dependents) over usable weekly points. The slope is residualized on log(1 + latest), then converted to robust z within cohort (median, 1.4826 × MAD, clamp ±3).
History is derived exactly from stored per-package weekly rows, or the series is restarted. A stored system total is used when no removed package is present. One kept package uses that package's stored count. Several kept packages use the union of their stored fingerprints only when every sketch is complete. Any other point is withheld, and the series restarts after a withheld point. A vote needs at least 14 usable points of the new quantity and at least 5 latest dependents. Rising needs slope > 0 and z ≥ 1. A one-way fragility veto withholds a rising vote if leaving out a point flips the slope sign or Theil-Sen disagrees in sign. A cohort whose slope-sign versus endpoint agreement falls below 0.80, with at least three voting systems, is held.
The estimator reuses the frozen v2h.1 evaluator on the latest unbroken run: points are ordered by partition and fitted at equally spaced point indices. Its robust normalization uses the upper-middle median and MAD; zero MAD gives z = 0.
The convergence gate
Rising ⟺ not incumbent ∧ cohort_n ≥ 5 ∧ |axes_present| ≥ 2 ∧ |axes_rising| ≥ 2 axis rising ⟺ slope > 0 ∧ z ≥ 1, plus the axis's floors and veto
Only a scored third axis counts toward axes present. The coverage states are scored, below_floor, held, stale, and out_of_panel. Unavailable scores carry null values; known latest counts and point counts remain visible. Incumbents anchor their cohorts and are never eligible for a Rising badge.
Momentum, percentile and confidence
momentum = clamp(50 + 12.5 × mean(z_present), 0, 100)
Momentum is rounded to one decimal place. Percentile uses ascending momentum within the cohort, retaining input order for ties. Confidence is high for Rising with at least two present axes, medium for other records with at least two present axes, and low otherwise. The existing status rules carry forward: incumbent, Rising, exactly one rising axis, at least two present axes, then remaining coverage.
Timing
Axis 3 uses the newest confirmed-clean weekly partition, which trails the snapshot by about two to three weeks. Each record states its as-of partition. An axis older than 28 days is not scored. Partition dates cannot exceed the snapshot date, observation capture times cannot exceed the snapshot's capture time, and the confirming sanity artifact must already be committed at that capture time. Provisional partitions are never scored.
Coverage and estimand
This axis measures the trajectory of a system's own packages: declared in its own tree, published under that name, and not attributed by deps.dev to another repository. A package with no repository link is unverified and stays. The self-name exclusion list is fixed at the v2h.1 panel. Systems with no admitted package are not measured on this axis. Points that cannot be derived exactly are withheld, and the series restarts after a withheld point.
History origin
The earliest weekly points of each series were read from deps.dev's BigQuery history on 2026-07-21; later points are weekly captures. m4 does not replay those partitions. Each point is the stored system total, one package's stored count, or a complete sketch union. A point that is not exact is withheld. Each record reports how many of its points are reconstructed history.
Known limits
- Axis 3 standardizes after size adjustment while axes 1 and 2 adjust after standardizing. This difference is to be revisited in a future version.
- Dependents of an admitted package include every published dependent of that name; a package without repository metadata is unverified, not verified.
- 64-bit fingerprint collisions in sketch unions are negligible at these set sizes and are not corrected.
- Package-level counts are not published.
- Momentum averages the axes present, so systems with two and three axes are not strictly comparable.
- The identity audit is as of 2026-10-04 and is applied to every stored partition. It does not prove ownership at earlier dates.
Independence monitor
Each m4 snapshot publishes diagnostics.axis_correlations: pooled within-cohort Pearson correlations for all three axis pairs, their pair counts, and per-cohort correlations where at least five pairs exist. Undefined correlations are null. The pre-registered bound is |r| < 0.5. The snapshot diagnostics index links to this field in each published m4 snapshot.
Derived signals
These separate reads use the existing commit series and remain unchanged from m3. A value is published only when its source history is sufficient.
- Recency swing compares recent and prior commit slopes.
- Signal-to-noise compares mean weekly commits with residual volatility.
- Changepoint identifies a slope break when history is sufficient.
- Citation lag remains reserved until paired history is sufficient.
- Alpha remains reserved for residual momentum against cohort peers.
- Gate ETA is not published: an estimate of when a system crosses the gate would be a public forward-looking prediction, which Invariant 5 rules out (governance record 2026-09-23).
Attribution
Source: deps.dev (Google), CC-BY 4.0. Modified: aggregated to system-level counts and momentum scores.
Records and reproducibility
The canonical specification is methodology/m4.json; its canonical JSON SHA256 is pinned in the version registry. Published snapshots keep their own methodology version and scores. m3 snapshots are never recomputed.
This is the m4 permalink. It supersedes m3 for new snapshots from 2026-10-10. Methodology prose is licensed CC-BY-4.0.