Converge all 13 package.json files onto a single exact-pinned
toolchain target — latest stable on npm:
@graphprotocol/graph-cli ^0.97.0 / ^0.98.1 -> 0.98.1
@graphprotocol/graph-ts ^0.38.0 / ^0.38.2 -> 0.38.2
matchstick-as 0.5.0 / ^0.6.0 -> 0.6.0
All carets stripped to exact pins for deterministic resolutions.
Three subgraphs (staking, predict-omen, predict-polymarket) were
already on the 0.98.1 line; the other 9 subgraphs + root are bumped
up to converge.
Verification (full local CI sequence on Node 22 + yarn 1.22):
yarn install --frozen-lockfile : all 13 paths "Already up-to-date"
yarn graph codegen + test : all 12 subgraphs pass
liquidity 23 tests passed
tokenomics-eth 3 tests passed
governance 12 tests passed
legacy-mech-fees 15 tests passed
predict-omen 19 tests passed
predict-polymarket 96 tests passed
babydegen-optimism 10 tests passed
liquidity-l2 15 tests passed
staking 18 tests passed
tokenomics-l2 8 tests passed
service-registry 13 tests passed
new-mech-fees 15 tests passed
----------------------------------------
TOTAL 247 Matchstick tests, all green
yarn audit delta is modest (latest stable is only 0.98.1; bigger jumps
not yet stable on npm). Net change across paths: -13 High advisories
on heaviest paths, +3 on three paths (matchstick-as 0.6 transitive),
unchanged on the rest. Real wins of this PR are version consistency
and exact-pin determinism, not advisory clearance.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Summary
Phase 2 of the supply-chain hardening rollout (see
.plans/supply-chain-update.md, Tier 3). Stacked on top of #119, will rebase tomainonce that merges.Converges all 13
package.jsonfiles onto a single exact-pinned toolchain — the latest stable versions on npm — and regenerates everyyarn.lockto match. Eliminates version drift across subgraphs and removes all carets in favor of deterministic exact pins.What changed
@graphprotocol/graph-cli^0.97.0(9 subgraphs) /^0.98.1(3 subgraphs)0.98.1(exact, all 13)@graphprotocol/graph-ts^0.38.0/^0.38.20.38.2(exact, all 13)matchstick-as0.5.0(9 subgraphs) /^0.6.0(3 subgraphs)0.6.0(exact, all 12 subgraphs + root)Three subgraphs (
staking,predict-omen,predict-polymarket) were already on the0.98.1line — they only have carets stripped, no resolution change. The other 9 subgraphs + root are bumped from0.97to0.98.Total diff: 26 files (13 ×
package.json, 13 ×yarn.lock).Verification
Full local CI sequence on every subgraph
Ran the same 4-step sequence CI uses (
yarn install --frozen-lockfile && yarn graph codegen && yarn graph test) on all 12 subgraphs:All 13 paths (root + 12 subgraphs) pass
yarn install --frozen-lockfilecleanly.yarn auditdeltaCaptured per-path before/after counts (raw data in
audit/, gitignored).Honest read: modest delta. Latest stable on npm is only
0.98.1(newer is pre-release / alpha / rc); the source plan's "37 Highs → 0" expectation was over-optimistic given the actual upstream availability. 5 paths improved by 3-4 Highs each; 3 paths gained +1 High becausematchstick-as 0.6.0pulled in a new transitive with one High advisory; 5 paths unchanged.The real wins of this PR are not advisory clearance — they're:
yarn install.staking+predict-omen+predict-polymarketalready use successfully (and pass CI today).Pre-PR recon: gitleaks history scan (T5)
Ran
gitleaks detect --no-banner --redact --log-opts="--all"over the full git history (374 commits, all branches/tags) as the pre-PR-recon step for T5 — historical secret leak in repo or CI logs.Result: 0 actual leaks. Repo history is clean.
The default ruleset returned 54 raw findings; every one was confirmed a false positive by
git show <sha>:<path>inspection — each redacted "secret" resolves to a public on-chain Optimism token contract address (USDC, USDT, DAI, WETH, FRAX, LUSD, DOLA, BOLD, sDAI, USDC.e) hardcoded into babydegen mappers for decimals/symbol branching, plus one Dune SQL example insubgraphs/liquidity/README.md. No credentials, tokens, or keys present in history.The CI gitleaks workflow lands in PR #121 with a path+regex-scoped
.gitleaks.tomlallowlist (40-hex shape, scoped to the babydegen mapper paths and the liquidity README) so future scans surface real findings cleanly. Verified the allowlist does not silence genuine secrets — synthetic AWS / Slack /sk_live_*fixtures in a temp dir still tripped the scanner.Operating notes
Pre-existing repo issue surfaced (not addressed in this PR)
While running
yarn generate-manifestsforservice-registryas part of the local CI sequence, I noticed it overwrites 3 hand-crafted manifests with broken / lossy template output:subgraph.mainnet.yaml— uses a different ABI (ServiceRegistry1-paramCreateServicevs. the L2 2-param). Template overwrites with broken{{ ServiceRegistryL2.address }}placeholders that aren't substituted becausenetworks.jsonmainnet entry usesServiceRegistry.subgraph.matic.yaml— losesERC8004Agent/ERC8004Metadataentity entries.subgraph.optimism.yaml— losesGnosisSafeABI registration.CI gets away with this because CI only TESTS
subgraph.gnosis.yamlafter generate-manifests. None of the regenerations are committed; they're transient artifacts of running the build.Reverted those 3 files in this PR so the diff is clean. Worth flagging for a follow-up hygiene PR — the template/manifest setup for
service-registryis silently broken.What's deferred to PR3
service-registrytemplate/manifest fix.Test plan
yarn install --frozen-lockfilesucceeds for all 13 paths.yarn graph codegen && yarn graph testsucceeds for all 12 subgraphs (247/247 tests green).main.Rollback
Single commit.
git revert <sha>restores all 26 files. No infrastructure change; pure dep-version edit.Stacked on
Depends on #119 (PR1) being on
mainbefore this can rebase cleanly. While #119 is open, this PR's base ismohan/supply-chain-update-1so the diff stays scoped to the bump only.