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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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