chore: pin the floating git dependencies to their locked commits - #9492
chore: pin the floating git dependencies to their locked commits#9492eordano wants to merge 1 commit into
Conversation
Eleven manifest entries rode a default-branch HEAD with only packages-lock.json standing between a fresh resolve and whatever the upstream branch happens to point at: UniTask, unity-gltf, client-sdk-unity-web, Unity3D-NSubstitute, chrome-devtool-protocol-unity, Arch.SystemGroups (+visualiser), REnum, RichTypesUnity, StylizedGrassShader and SuperScrollView. Append the exact commit each one already resolves to in the lock, so the manifest and lock agree and a lost or regenerated lock cannot silently float a dependency. Zero content change — every pinned SHA is the hash the lock already holds. Bumping a dep is now an explicit two-line edit (manifest ref + lock hash). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
|
Slack notification sent to #explorer-ext-contributions for external review. |
|
Tests: 24372 passed, 0 failed ✅ |
|
Claude finished @eordano's task in 3m 40s —— View job Security-focused dependency review
Step 1 — Dependency changes identifiedNo dependency is added, removed, or upgraded by this PR. The diff is 22 lines, all of them the No new binary or native plugin files, no Step 1.5 — "Zero content change" claim: verifiedI checked all 11 entries against the
Corroborating checks:
Conclusion: the resolved dependency graph is byte-identical to Step 2/3 — FindingsThree items for human follow-up. None is a defect in the 22 changed lines. MEDIUM — 1. PR description understates the scope: two The body says the
Two consequences. First, a reviewer trusting the description will skip exactly those two lines. Second, if #9478 rewrites the Six sibling entries from the same repo remain floating: Either fix the description or pin all eight — a partial pin on a shared repo is the confusing middle ground. Fix this → MEDIUM — 2. SHA pins on personal-account repos stop silent substitution but not availability loss The four highest-value pins by the body's own reasoning —
MEDIUM / UNKNOWN — 3.
I could not resolve this: network egress is blocked in this sandbox ( Separately: GitHub tags are mutable unless protected, so LOW — Summary
The diff itself is verified safe and is a net supply-chain improvement: I confirmed line-by-line that it changes no resolved dependency content, and it removes eleven default-branch HEADs from the resolve path. DEPENDENCY_REVIEW: NEEDS_ATTENTION |
decentraland-bot
left a comment
There was a problem hiding this comment.
Review — PR #9492: chore: pin the floating git dependencies to their locked commits
STEP 2 — Root-cause check: PASS
The problem: 11 git dependencies in manifest.json ride default-branch HEAD with no commit anchor. If packages-lock.json is lost or regenerated, every one of these resolves to whatever HEAD happens to be at that moment — an unreviewed, potentially breaking change.
This PR fixes the root cause by pinning each to the exact commit SHA already present in the lock file. Bumping a dependency becomes an explicit, reviewable two-line change.
STEP 3 — Design & integration: PASS
This is a configuration-only change — no new systems, state, or lifecycle logic. The approach (appending #<sha> to git URLs) is the standard Unity Package Manager mechanism for commit pinning.
SHA verification — all 11 match:
Every commit SHA appended to the manifest URL was cross-checked against the hash field already present in packages-lock.json. All 11 match exactly — confirming zero content change.
| Package | SHA (first 12) | Lock hash match |
|---|---|---|
arch.systemgroups.visualiser |
e368e96fa814 |
✅ |
com.arch.systemgroups |
bd58275fb169 |
✅ |
com.atteneder.gltfast |
b9f9f75c3a00 |
✅ |
com.cysharp.unitask |
73d86259ce31 |
✅ |
com.decentraland.renum |
d39a0d38580a |
✅ |
com.nickkhalow.chrome-devtool-protocol-unity |
5ea7798478c6 |
✅ |
com.nickkhalow.richtypes |
00cbf100acd1 |
✅ |
decentraland.grassshader |
c35c10aabe0f |
✅ |
io.livekit.unity |
84a79b486b17 |
✅ |
net.tnrd.nsubstitute |
cdd11bb74398 |
✅ |
superscrollview |
8e1478ec9f8f |
✅ |
Scope of deliberately unpinned deps — verified and correct:
unity-explorer-packagescompat-branch deps (gpui-assets,filebrowserpro,gpui-pro,gpui-pro.terrain,avpro,renderfeatures) — rewritten by #9478 (Unity 6000.5.2 upgrade)unity-shared-dependencies— left for separate handling- 8 deps already carrying
#tagor#sha— no action needed
The split between what this PR pins and what #9478 handles is clean. The personal-account repos (mikhail-dcl, NickKhalow, m3taphysics) are the highest-value pins since their default branches are not under org control.
STEP 4 — Member audit: N/A
No code members added or changed.
STEP 5 — Line-level review: No issues
- No bugs, no security vulnerabilities, no performance issues
- No secrets or sensitive data committed
- Format is consistent across all 11 entries
- Lock file changes correctly mirror the manifest changes
Security review
- Supply-chain improvement: Pinning prevents silent dependency drift on lock file regeneration. This is a net positive for supply-chain security.
- Personal-account repos: The highest-risk dependencies (repos owned by individual GitHub accounts outside the org) are now pinned.
- No secrets committed: Only commit SHAs appended to public git URLs.
- No new dependencies added: Zero content change — all SHAs were already resolved in the lock file.
STEP 6 — Complexity: SIMPLE
Config-only change (2 JSON files, +22/−22), no runtime code, no ECS/system/component changes.
STEP 7 — QA: NO
No runtime code changes — only package manifest pinning. Zero content change confirmed by matching lock file hashes.
STEP 8 — Non-blocking warnings: None
Main scene not modified. No other warnings.
Git conventions (ADR-6)
- Title:
chore: pin the floating git dependencies to their locked commits✅ - Branch:
chore/pin-floating-git-deps✅
REVIEW_RESULT: PASS ✅
COMPLEXITY: SIMPLE
COMPLEXITY_REASON: Config-only change to package manifest and lock file; no runtime code touched.
QA_REQUIRED: NO
Reviewed by Jarvis 🤖 · Requested by unknown via Slack
Eleven manifest entries ride a default-branch HEAD, with only
packages-lock.jsonstanding between a fresh resolve and whatever the upstream branch points at that day: UniTask, unity-gltf, client-sdk-unity-web, Unity3D-NSubstitute, chrome-devtool-protocol-unity, Arch.SystemGroups (+ visualiser), REnum, RichTypesUnity, StylizedGrassShader and SuperScrollView.This pins each one to the exact commit the lock already resolves — zero content change (every SHA is the hash already in
packages-lock.json), verified by the untouched lock hashes. What it buys:Personal-account repos (
mikhail-dcl/Arch.SystemGroups,NickKhalow/REnum,NickKhalow/RichTypesUnity,m3taphysics/Arch.SystemGroups.Visualiser) are the highest-value pins here — nothing about their default branches is under org control.Deliberately untouched (their lines are rewritten by #9478 or pinned by policy): the
unity-explorer-packagescompat-branch deps,unity-shared-dependencies, and everything already carrying a#tag/#sha.🤖 Generated with Claude Code