Skip to content

fix(cli): only name a shadowing install whose manager can move it - #7499

Merged
WaterrrForever merged 1 commit into
mainfrom
fix/rav-shadow-project-install
Nov 10, 2026
Merged

WaterrrForever merged 1 commit into
mainfrom
fix/rav-shadow-project-install

Conversation

@WaterrrForever

Copy link
Copy Markdown
Collaborator

Follow-up to #7488, from the review nit there.

shadowingInstall named any older hyperframes on PATH and suggested npm install -g for anything it couldn't classify. A project-local node_modules/.bin/hyperframes also shadows plain npx hyperframes, but a global install never moves it.

Now the shadowing copy is classified the same way as the running one (runningInstall and installAt share the code):

  • Global (npm / pnpm / bun / brew): the agent gets that manager's command, as before.
  • Project-local: the agent gets the project's own manager, picked from its lockfile (bun add hyperframes@<v>, pnpm add …, yarn add …, npm install …). This reuses updateCommandFor, which doctor and upgrade already use.
  • Unknown layout or workspace link: nothing is named. The skill's _meta.updateAvailable rule still pins the run.

The command now names the release the npx copy is running instead of latest, so a project install's command doesn't fall back to npx hyperframes@latest.

Tests: two new shadowingInstall cases. A project-local install with bun.lock gets bun add; an unknown layout gets null.

A project-local node_modules/.bin/hyperframes can shadow plain npx hyperframes,
but npm install -g never updates it. Classify the shadowing copy like the
running one: global installs keep their manager's command, project-local
installs get the project's own manager (from its lockfile), and unknown
layouts stay quiet. The command pins the release the npx copy is running.

@jrusso1020 jrusso1020 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Reviewed at 5403738d2e44aabc6cedefcd98d807c86fe5a24f.

The #7488 Nit is resolved. installAt classifies the shadowing path itself, while runningInstall retains its plugin override and prior classification order. Project-local candidates reuse the lockfile-aware updateCommandFor; unknown/workspace layouts no longer receive a guessed global command. The update targets the resolved run's version rather than a moving latest.

Validation: 180 tests passed across installerDetection, attendedTerminal, auth/login, updateCheck and autoUpdate. Replayed the earlier real-filesystem symlink repro against base and head: base suggests npm install -g hyperframes@latest; head correctly suggests npm install hyperframes@0.9.29. The new Bun-lockfile and unknown-layout tests also pass. Independent adversarial source pass found no new defect. No package installation/update was executed by these probes.

Need: yes · Size: ok · Reuse: shared installAt and updateCommandFor · Simpler: already minimal · Structure: fine (checked running-install and reverse consumers; no split)
Risk: low - reuses existing classification and command generation for a read-only notice.

Verdict: APPROVE
Reasoning: The follow-up closes the misleading project-local update suggestion without changing the existing installer behavior.

Reviewed by hf-review.

@github-actions

Copy link
Copy Markdown
Contributor

Edit accuracy: accurate 267 (base branch 267), smooth 97 of those

The gate passes.
Smoothness is reported in the artifact, not gated. A case fails only if it fails 2 of 3 runs.

Quarantined, measured but not gated (8)

@WaterrrForever
WaterrrForever added this pull request to the merge queue Nov 10, 2026
Merged via the queue into main with commit b28bd2b Nov 10, 2026
84 checks passed
@WaterrrForever
WaterrrForever deleted the fix/rav-shadow-project-install branch November 10, 2026 13:46
@miguel-heygen miguel-heygen mentioned this pull request Nov 10, 2026
3 of 4 tasks
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants