Skip to content

Settle what Phase 8 ships, and stop calling it blocked - #35

Merged
revtex merged 2 commits into
mainfrom
docs/phase-8-decisions
Aug 15, 2026
Merged

Settle what Phase 8 ships, and stop calling it blocked#35
revtex merged 2 commits into
mainfrom
docs/phase-8-decisions

Conversation

@revtex

Copy link
Copy Markdown
Owner

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

QuestionAnswer
9 — VB-CABLEDetect only, permanently. No vendor binary in the repo or the installer
Installer technologyInno Setup, per-user, %LOCALAPPDATA%, no admin prompt
3 — Signing certificateShip unsigned for now, with the signing step wired and inert
4 — Auto-updateAn update check, not an updater

Why 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 NOTICE and 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 → uninstall becomes the check reporting a newer tag and opening the release page.

🤖 Generated with Claude Code

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>
@revtexrevtex added the no-changelog This PR changes nothing a user would see, so CHANGELOG.md stays as it is label Aug 15, 2026
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.
@revtex
revtex merged commit 5e9835a into mainAug 15, 2026
6 checks passed
@revtex
revtex deleted the docs/phase-8-decisions branch August 15, 2026 03:30
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

no-changelogThis PR changes nothing a user would see, so CHANGELOG.md stays as it is

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@revtex