docs(roadmap): T41a needs a VM and not a certificate, so T94 takes the half that does - #29
Merged
Merged
Conversation
…e half that does T41a asked two questions and only one of them cost money. What it measures now is the machine — does a freshly built unsigned binary load on its first run under Smart App Control, and does the elevated hosts write survive Defender's `HostsFileHijack` heuristic — and that needs a clean VM and nothing bought. The remedy question is **T94**, in phase 9, where distribution lives. **The split is not only about who has a certificate. The certificate question shrank.** T41a's own remedy was "buy the cheapest usable certificate and try it on the VM", written before T20a and T27 measured the runtimes: of the four borrowed ones, only Node is signed upstream. So a certificate MixEngine buys signs MixEngine's own binaries and does nothing for PHP, nginx or Caddy — the binaries this product exists to start. `runtime-packaging.md` had already drawn the conclusion and nothing upstream of it had been updated: SAC would refuse the same artifacts even if MixEngine shipped none of its own. Signing them all would mean building them all, which is the trade "borrow before you build" refused on maintenance cost and which would have to be re-argued rather than assumed. That is why T94 is three readings and not one — what a certificate covers, what it leaves uncovered, and what the cheapest thing covering the rest is — and why a bad answer there supersedes ADR 0005 rather than amending it. **Two orderings are corrected while the reason is in view.** Counting how many users have SAC enforced was T41a's first question and was the wrong first question: while a remedy is open, 30% and 60% lead to the same next move. It moves to T94 and comes last, where it decides between remedies instead of describing a problem. And what T41a should read on the VM is now named: `updates.md` records that the 2026-08-13 refusal **did not persist**, which reads as an ISG reputation lookup that had not answered yet — so the reading that matters is the *first* run of a first-seen binary, which is exactly a user's first launch. `updates.md` and `standards/testing.md` pointed at T41a for the population number; both now point at the half that owns what they were asking for. Markdown only — no CI job reads it.
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 free
to 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.
T41a asked two questions and only one of them cost money. This splits them, and corrects two
orderings that were wrong before the split made them visible.
What stays in T41a
The measurement: does a freshly built unsigned binary load on its first run under Smart App Control,
and does the elevated hosts write survive Defender's
HostsFileHijackheuristic. That needs a cleanWindows VM and nothing bought — and it is the half that tests the code phase 4 just built.
What moves, and why it is not only about who has a certificate
The certificate question shrank between T41a being written and now. Its own remedy was "buy the
cheapest usable certificate and try it on the VM". T20a and T27 have since measured the runtimes: of
the four borrowed ones, only Node is signed upstream. So a certificate MixEngine buys signs
MixEngine's own binaries and does nothing for PHP, nginx or Caddy — the binaries this product exists
to start.
runtime-packaging.mdhad already drawn that conclusion and nothing upstream of it had beenupdated:
Signing them all would mean building them all, which is the trade "borrow before you build" refused
on maintenance cost — and which would have to be re-argued rather than assumed.
So T94 is three readings and not one: what a certificate covers, what it leaves uncovered, and
what the cheapest thing covering the rest is. It sits in phase 9 because its answer changes how the
product is distributed, while T41a's can invalidate ADR 0005 and the five phases resting on it —
which is why that one was written early and stays early.
Two orderings corrected
The population count was T41a's first question and was the wrong first question. While a remedy
is open, 30% and 60% lead to the same next move. It moves to T94 and comes last, where it
decides between remedies instead of describing a problem.
And what T41a should read on the VM is now named.
updates.mdrecords that the 2026-08-13refusal did not persist — the same binaries ran unchanged hours later, which reads as an ISG
reputation lookup that had not answered yet. That does not soften the question, it locates it: a
user's first launch is the first-seen case, and a first run that fails followed by a second that
works is still a first run that failed, on the one occasion when nobody has a reason to try twice.
So the reading is the first run of a freshly built binary, and whether it recovers.
Files
phase-4rewrites T41a's middle;phase-9gains T94 after T86a and corrects T86a's "two halves" tothree;
todo.mdupdates the index row, the debt table and the phase-4 prose.updates.mdandstandards/testing.mdboth pointed at T41a for the population number and now point at the half thatowns it.
Markdown only — no job in
ci.ymlreads it, so no CI run was requested.