Skip to content

refactor(windows): cut over to immutable installer deployments and retire per-request EXE personalization #249

Description

@balejosg

Summary

After #250 and #248 are complete, make the immutable signed installer + external deployment bootstrap the canonical OpenPath Windows installation path and retire the obsolete per-request personalized-EXE lifecycle introduced by earlier work.

This is deliberately a separate cutover/cleanup issue so #250 can deliver the signed immutable release artifact without waiting for the complete multi-device deployment system, and #248 can build against that artifact without requiring the legacy path to disappear in the same change.

Dependencies

Blocked by:

Coordinate final release identity with #251.

Do not start destructive cleanup until both capabilities are proven by OpenPath standalone tests and Windows target-platform evidence.

Target state

OpenPath release
  -> one immutable signed OpenPath-Windows-Setup.exe

OpenPath enrollment/deployment API
  -> one-device or multi-device deployment authority
  -> external bootstrap/bundle

Windows endpoint
  -> same signed EXE
  -> bootstrap redemption
  -> unique durable device credential

No supported runtime request should need to copy a template and mutate PE bytes with applyOverlay().

Ownership

OpenPath remains the sole owner of the generic installer/deployment lifecycle. This issue must not add downstream wrapper concepts.

Cleanup targets

Inventory and retire/rework as appropriate:

  • per-request applyOverlay() generation in windows-offline-installer-artifact.service.ts;
  • private storage used only for personalized .exe artifacts;
  • reference persistence/routes that exist only to stream those personalized .exe files;
  • runtime template provisioning/readiness requirements that are obsolete once the immutable signed release artifact is the canonical input;
  • personalized-EXE canaries/E2E fixtures superseded by immutable-EXE + deployment-bootstrap coverage;
  • API/SPA contracts whose semantics still promise a newly personalized executable on every click.

Do not remove generic primitives still used by deployment-bundle delivery, rollback/provenance, or compatibility windows.

Migration invariant

There must be no long-lived dual authority:

old personalized EXE path = compatibility only
new immutable signed deployment path = canonical

Once the compatibility window ends, repository tests should prevent accidental reintroduction of runtime PE personalization as a supported path.

Related

Non-goals

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions