Settle what Phase 8 ships, and stop calling it blocked - #35
Merged
Conversation
Four questions the plan left open decided how packaging would look, and three of them were still written as unanswered while Phase 8 was described as blocked on the first: - VB-CABLE is detect-only, permanently. No vendor binary enters this repo or the installer, which is the specific act its donationware licence forbids without the author's agreement. The plan had this as the recommendation and the assumption Phase 7 built against; it is now the decision, so the risk row closes and the Phase 7 exit criterion stops saying "pending". - The installer is Inno Setup, per-user, into %LOCALAPPDATA%, with no admin prompt anywhere — matching an app that needs no admin to run. WiX/MSI buys policy-based enterprise deployment that nothing here asks for. - v1 ships unsigned with the signing step already wired and inert, because there is no certificate yet and buying one is procurement rather than engineering. What that costs is now a risk row of its own rather than a surprise: SmartScreen warns on first run and every user clicks through it. - There is an update check, not an updater. The full item's value rests on signatures that do not exist yet, so its verification step would have nothing to verify. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Question 4 was answered "skip for v1", but the plan then described an in-app check that asks GitHub for the newest tag and links to it. That is a feature, not the absence of one - a network call, a settings toggle and a pair of localised strings - and writing it into the plan as settled would have had it built. Six places said it: the Updater row in the porting table, the tab summary, the System.IO.Compression note, the Phase 8 bullet, the exit criterion and improvement item 10. The update leg of the exit criterion is replaced rather than reinterpreted. There is nothing in the app to exercise, so what gets tested is the installer's own upgrade path: a newer build over an older one leaves one entry in Apps & Features, not two, which is what the stable AppId is for.
Uh oh!
There was an error while loading. Please reload this page.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 8 was described as blocked on open question 9, and three more of the plan's open questions decided how packaging would look. All four are answered here. Documentation only — no code changes, so
no-changelog.The decisions
%LOCALAPPDATA%, no admin promptWhy each
VB-CABLE — its donationware licence permits redistributing the package as is, but forbids integrating it into another installation procedure without the author's agreement. Detect-only keeps Offstream nowhere near that line, and avoids adding ~3 MB of unsigned third-party kernel-mode driver payload to every release. The origin and donationware attribution the licence asks for already ships, in
NOTICEand beside the device picker. This was already the plan's recommendation and what Phase 7 built; what changes is that it is now settled rather than provisional, so the risk row closes and Phase 7's exit criterion stops saying "pending question 9".Inno Setup — the app needs no admin to run, so the installer should need none either. WiX/MSI buys policy-based enterprise deployment that nothing here asks for.
Unsigned — there is no certificate and acquiring one is procurement, not engineering. The pipeline gets a signing step that is a no-op while none is configured and signs the moment one is. The cost is stated rather than hidden: a new risk row records that SmartScreen warns on first run and every user clicks through it. The EV-vs-OV choice stays open; it just no longer holds the release.
Update check — the full item (signed manifest, background download, signature verification, apply on restart) is the largest piece of the phase, and its value rests on signatures that do not exist yet. Building it now means building the verification step against nothing to verify.
What this touches
docs/MODERNIZATION-PLAN.md— questions 3, 4 and 9 struck through and answered; Phase 8 rewritten around the four decisions; Phase 7's exit criterion and the two VB-CABLE blocks reworded; the VB-CABLE risk row closed and two new rows added for what the decisions actually expose (unsigned installer, and an ffmpeg source offer going stale).CLAUDE.md— the "open question 9 blocks part of it" line replaced with the four decisions.Phase 8's exit criterion also loses its update leg: with no updater,
install → record → update → uninstallbecomes the check reporting a newer tag and opening the release page.🤖 Generated with Claude Code