Skip to content

[v3.1 PR-5] Bundle layout migration: per-install-id dirs, .last-used stamping, Pass 1 GC, remove reparse-flip #16742

@radical

Description

@radical

Design changes: 5, 6 — see agreed-design-v3.md §4 Required changes.
Tracker: #16737

"Change N" numbers below refer to entries in the design doc's §4 table, not GitHub issues.

Scope

  • Move ~/.aspire/bundle/versions/<v>/~/.aspire/bundles/<install-id>/<version>/{managed,dcp,.last-used}/.
  • Move bundle lock to ~/.aspire/locks/<install-id>-<version>.lock.
  • First-run code stamps .last-used on existing bundles (gives them design §2.9 grace cycle).
  • Pass 1 same-route version GC: on every successful startup, after stamping its own .last-used, opportunistically delete bundles/<my-install-id>/<other-version>/ whose version isn't ours. Best-effort.
  • Remove the reparse-flip codepath introduced by Add symlink/junction support for bundle installs with versioned directories #16408 (current link logic). Each version owns its own subdir; nothing moves under a running process.
  • Rewrite BundleService for the per-install layout. Fixes the GetDefaultExtractDir brew-non-writable bug as a consequence.

Acceptance

  • Existing bundles continue to work after upgrade — no mass deletion on first run of new binary.
  • Two CLI versions of the same install can coexist in bundles/<install-id>/ indefinitely (G4).
  • BundleService no longer references the reparse-flip mechanism.
  • Aspire.Acquisition.Tests (Add comprehensive test coverage for CLI acquisition scripts #15995, merged) bundle tests pass.

Risk

High — bundle layout migration. Design §2.9 grace cycle protects against mass deletion.

Split fallback

If review burden demands: PR-5a (layout + stamping, no GC) → PR-5b (GC + reparse-flip removal).

Dependencies

Metadata

Metadata

Assignees

Type

No type
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions