Summary
Introduce a fresh canonical Windows distribution path in OpenPath where each release publishes one immutable Authenticode-signed installer whose bytes never change per classroom, deployment, wrapper, or download.
Target invariant:
same OpenPath release
-> same OpenPath-Windows-Setup.exe bytes
-> same SHA-256
-> same Authenticode signature
-> no runtime PE mutation
The signing solution must preserve the project's requirement of 0 EUR recurring service cost. Preferred implementation path: a free OSS signing program such as SignPath Foundation, subject to eligibility/approval. Signing occurs in the release pipeline, never per API request.
This is a new implementation ticket. Older Windows-installer issues may be referenced for historical context only; they are not the implementation contract for this work.
OpenPath-first boundary
Per AGENTS.md:
OpenPath owns the signed installer artifact, external bootstrap contract, signature/provenance verification, release publication, Windows E2E and maintained docs. No ClassroomPath-specific concepts belong here.
Required architecture
The installer must consume deployment/enrollment context outside the signed PE bytes through a generic OpenPath bootstrap mechanism, e.g. a sidecar supplied next to the executable or an explicit installer argument.
Conceptually:
build immutable installer
-> Authenticode sign
-> verify expected publisher/signature
-> SHA-256 final signed bytes
-> publish immutable artifact + provenance
No file writes are allowed after the signature is applied.
Zero-cost constraint
Do not introduce a paid per-signature/runtime signing service under this issue. If the preferred free OSS signing provider is unavailable or the project is ineligible, fail the implementation decision explicitly rather than silently adding a recurring paid dependency.
Historical context only
Relevant earlier work may help with reconnaissance, including OpenPath #242/#247 and the existing Windows offline-installer implementation, but this ticket defines the new target architecture.
Non-goals
- per-request Authenticode signing;
- self-signed certificates as a public SmartScreen solution;
- embedding classroom/deployment secrets in the signed EXE;
- claiming SmartScreen warnings disappear immediately after first release;
- downstream wrapper UX;
- multi-device deployment accounting (tracked separately).
Summary
Introduce a fresh canonical Windows distribution path in OpenPath where each release publishes one immutable Authenticode-signed installer whose bytes never change per classroom, deployment, wrapper, or download.
Target invariant:
The signing solution must preserve the project's requirement of 0 EUR recurring service cost. Preferred implementation path: a free OSS signing program such as SignPath Foundation, subject to eligibility/approval. Signing occurs in the release pipeline, never per API request.
This is a new implementation ticket. Older Windows-installer issues may be referenced for historical context only; they are not the implementation contract for this work.
OpenPath-first boundary
Per
AGENTS.md:OpenPath owns the signed installer artifact, external bootstrap contract, signature/provenance verification, release publication, Windows E2E and maintained docs. No ClassroomPath-specific concepts belong here.
Required architecture
The installer must consume deployment/enrollment context outside the signed PE bytes through a generic OpenPath bootstrap mechanism, e.g. a sidecar supplied next to the executable or an explicit installer argument.
Conceptually:
No file writes are allowed after the signature is applied.
Zero-cost constraint
Do not introduce a paid per-signature/runtime signing service under this issue. If the preferred free OSS signing provider is unavailable or the project is ineligible, fail the implementation decision explicitly rather than silently adding a recurring paid dependency.
Historical context only
Relevant earlier work may help with reconnaissance, including OpenPath #242/#247 and the existing Windows offline-installer implementation, but this ticket defines the new target architecture.
Non-goals