Skip to content

fix(npm): isolate embedded aube storage - #11760

Merged
jdx merged 1 commit into
agent/bump-aube-1.38.0from
agent/isolate-embedded-aube-storage
Aug 7, 2026
Merged

jdx merged 1 commit into
agent/bump-aube-1.38.0from
agent/isolate-embedded-aube-storage

Conversation

@jdx

@jdx jdx commented Aug 7, 2026 •

Copy link
Copy Markdown
Owner

Summary

  • call aube v1.38.0 with invocation-scoped storage overrides
  • disable aube's global virtual store so npm tools are materialized inside their mise install directories
  • keep aube metadata and CAS data under mise's shared npm/aube cache subtree
  • verify the ownership boundary in unit and end-to-end tests

Root cause

Embedded aube previously inherited aube's process-wide cache/data namespaces and global virtual store. Removing a mise-managed npm tool therefore left package data owned by aube outside mise's cache-prune lifecycle, and standalone aube store prune could not reliably infer when mise installations disappeared.

With project-local materialization, installed tools do not depend on the regenerable CAS after installation. mise cache prune npm can now reclaim that state according to mise's configured cache age.

Fixes #11737

Stack

Depends on #11759, which updates the embedded aube crates to v1.38.0.

Validation

  • cargo test embedded_aube_uses_mise_owned_cache_and_store
  • mise run test:e2e e2e/backend/test_npm_aube
  • cargo check
  • cargo clippy --all-features --all-targets -- -D warnings
  • cargo fmt --all -- --check

AI-assisted — Tool: Codex; model: unavailable/unavailable; version: unavailable.


Note

Medium Risk
Changes npm install storage and materialization behavior; misconfiguration could affect install layout or cache pruning, but scope is limited to embedded aube and is covered by e2e/unit tests.

Overview
Embedded aube installs no longer lean on aube's process-wide global virtual store or default cache/data namespaces for package materialization. Installs call add_with_overrides with EmbedderInstallOverrides: use_global_virtual_store: false so tools land in each mise install dir (node_modules), and cache/store under $MISE_CACHE_DIR/npm/aube/{cache,store} so regenerable CAS/metadata is owned by mise's npm cache lifecycle.

aube_host.rs docs and tests are updated to reflect that on-disk layout is per-invocation overrides, while lockfile/manifest naming (aube.allowBuilds, aube-lock.yaml) stays compatible with standalone aube.

Tests add a unit check for override paths and e2e assertions that packument cache and store files exist under the mise npm cache tree after npm:cowsay install.

Reviewed by Cursor Bugbot for commit e076492. Bugbot is set up for automated code reviews on this repo. Configure here.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Central YAML (base), Organization UI (inherited)

Review profile: CHILL

Plan: Pro Plus

Run ID: a4d6dabe-5492-47f1-bc85-32adb6f4e183

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

The PR isolates embedded aube storage within mise's npm cache ownership boundary and disables aube's global virtual store.

  • Calls the aube 1.38 embedder with invocation-scoped cache and store overrides.
  • Materializes npm tools within their mise installation directories.
  • Adds unit and end-to-end coverage for the configured ownership boundary.

Confidence Score: 5/5

The PR appears safe to merge, with no concrete blocking or independently actionable non-blocking issue identified.

The changed installation path consistently supplies mise-owned cache and store directories while disabling global virtual-store materialization, and the added tests cover both the override values and resulting storage boundary.

Important Files Changed

Filename Overview
src/backend/npm.rs Routes embedded aube installs through invocation-scoped mise cache/store paths and disables the global virtual store, with focused unit coverage.
src/backend/aube_host.rs Updates host documentation and test naming to distinguish retained configuration names from newly overridden storage paths.
e2e/backend/test_npm_aube Extends npm-aube installation coverage to verify that regenerable cache and CAS state are created beneath mise's npm cache root.

Reviews (1): Last reviewed commit: "fix(npm): isolate embedded aube storage" | Re-trigger Greptile

@github-actions

github-actions Bot commented Aug 7, 2026

Copy link
Copy Markdown
Contributor

Instruction counts

Nothing was compared, and so nothing was gated. No series appears on both sides: either the base has no measurements recorded, or the two were measured on different runner classes, which are deliberately not comparable — counts shift between machine types by more than a real regression does.

New, nothing to compare against: env on bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1, hook-env on bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1, ls on bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1, registry on bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1, startup on bamboo-v2-ubuntu24.04-x64-30vcpu-24gb-rust1.97.1

Only instruction counts gate. Wall clock is shown for context — on identical hardware it moves 4-20% run to run.

Measured by tak — instruction-counted CLI benchmarks, stored in this repository's git notes.

e07649204aec vs 2d3bed318608 · measured on the runner, not pushed to the history.

@jdx
jdx merged commit 8821972 into agent/bump-aube-1.38.0 Aug 7, 2026
7 checks passed
@jdx
jdx deleted the agent/isolate-embedded-aube-storage branch August 7, 2026 16:41
jdx added a commit that referenced this pull request Aug 7, 2026
## Summary
- install a known deprecated npm package through mise's embedded aube
path
- verify aube's warning arrives through mise's output pipeline
- guard against suggesting the nonexistent `mise deprecations` command

## Why

aube v1.38.0 routes install-time deprecation warnings through structured
embedder events and suppresses standalone aube command hints for
embedded hosts. This regression test exercises the full mise integration
boundary, including the progress renderer that the old direct stderr
write corrupted.

Regression coverage for #11742
and aubepkg/aube#1236.

## Stack

Depends on #11760, which depends on the aube v1.38.0 bump in #11759.

## Validation
- `mise run test:e2e e2e/backend/test_npm_aube`

*AI-assisted — Tool: Codex; model: unavailable/unavailable; version:
unavailable.*

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Test-only change with no production or runtime behavior impact.
> 
> **Overview**
> Extends **`e2e/backend/test_npm_aube`** with integration checks for
install-time deprecation warnings on the embedded aube path.
> 
> After **`mise install npm:inflight@1.0.6`**, the test captures
combined stdout/stderr and asserts the output includes **`deprecated
inflight@1.0.6`** and does **not** mention **`mise deprecations`**, so
warnings go through mise’s renderer without bogus CLI hints.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
8d66348. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->
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.

1 participant