Skip to content

feat(enrollment): add generic multi-device deployment grants and Windows deployment bundles #248

Description

@balejosg

Summary

Add a first-class generic OpenPath deployment capability for enrolling a bounded set of endpoint devices with one operator-prepared bundle, without personalizing or modifying the signed Windows executable.

This is the operator workflow required after #250 moves Windows enrollment data outside the PE bytes.

Target operator experience:

OpenPath admin/teacher
  -> create deployment for N devices
  -> download one deployment bundle
  -> copy to USB/share
  -> run the same signed OpenPath installer on N Windows PCs
  -> zero classroom codes typed per PC
  -> each PC receives its own durable device credential

The core must remain usable by OpenPath standalone. Downstream wrappers may label a deployment as an aula/classroom deployment in their own UI, but no downstream product concept belongs in this implementation.

Architecture boundary

Per AGENTS.md:

wrapper -> OpenPath

OpenPath owns:

  • deployment-grant lifecycle;
  • authorization;
  • max-enrollment accounting;
  • expiry/revocation;
  • atomic redemption;
  • per-device credential issuance;
  • generic bundle/config schema;
  • Windows installer consumption of the bundle;
  • interactive and silent install contract;
  • standalone API/UI;
  • readiness/observability/security semantics;
  • core canary and Windows E2E.

A wrapper owns only presentation, additional upstream policy and mapping its domain concepts to an OpenPath deployment.

Dependency

Blocked by / designed with: #250.

The final Windows .exe must be a release artifact whose bytes and Authenticode signature do not change per deployment. The deployment bundle carries the short-lived enrollment authority outside the PE.

Target artifact

Conceptually:

openpath-windows-deployment.zip
├── OpenPath-Windows-Setup.exe       # immutable signed release artifact
└── openpath-deployment.json         # deployment-specific bootstrap reference

The sidecar must contain an opaque deployment reference, not a long-lived device credential and not a ClassroomPath-specific identifier.

Security invariant

One deployment authority may authorize several initial enrollments, but it must never become the durable credential shared by those devices.

deployment grant
   -> atomic redemption #1 -> device credential A
   -> atomic redemption #2 -> device credential B
   -> ...
   -> redemption #N -> device credential N

The grant is bounded, expiring and revocable. Every successful device gets a distinct durable identity/credential.

Related

Non-goals

  • ClassroomPath-specific classrooms/tenants/schools
  • embedding enrollment secrets into the signed .exe
  • one permanent credential shared by multiple endpoints
  • unbounded or non-expiring deployment tokens
  • making the installer dependent on a wrapper
  • replacing normal one-device enrollment where it remains useful

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