Make the runtime-selection, vm-facts drift, and dev-forge-opt-out checks fork-safe #36
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/archetypes#36
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Bring
runtime-module-selection,vm-facts-negative, anddev-forge-opt-outup to the same fork-safety standard allod/archetypes#11 asks ofpi-integration: all three fail against a deployment fork that supplies its ownprofiles/secrets/inventoryinputs through the documented follows redirects, so a fork consuming the check suite has to exclude them and loses their coverage.Primary goals:
masterdata breaks on any fork whose identities, profile data, or inventory legitimately differ.Per-check evidence, measured against a fork at archetypes
8aa0fceruntime-module-selectionbuilds its selection fixtures from whichever dev machine inventory declares first, drivingmkDevVmwithout theprofileDatalayer thatmachineConfigurationscomposes. On a fork whose secrets identity assigns that machine a different username than the public secrets do, the fixture merges twohome.usernamedefinitions and dies before asserting anything:It also hard-requires the inventory input to expose
checks.<system>.runtime-fact-mutations, which only the public inventory carries.vm-facts-negative(as of the runtime-axis extension) requires a valid runtime literal that differs from every runtime in the composedvmFacts. With a two-valuelibvirt/microvmenum and a fleet that has machines on both, no such literal exists and the check refuses by its own design:dev-forge-opt-outasserts the composed dev machine generates exactly the two age secrets captured from publicmaster, byte-for-byte in file/path/owner/group/mode. A fork that uses the framework's own token-registry opt-out (the mechanism allod/archetypes#17 added) to withhold one credential fails the capture comparison:Scope
In scope: making these three checks pass, or self-skip with a named reason, against a fork supplying divergent
profiles/secrets/inventorydata. Out of scope: the fork's own exclusion list (each fork carries that until this lands) and pi-integration, which allod/archetypes#11 already tracks.Found during the microvm runtime adoption arc (allod/strategy#20), where a fork excluding these checks is what makes its composed check set green.
A fourth check now has the same defect:
pi-provider-lifecycle, added with the managed Pi provider arc.Its fixture hard-codes
machineName = "allod-dev"and drivesmkDevVmdirectly, without theprofileDatalayermachineConfigurationscomposes. That is the same shape asruntime-module-selection: on a fork whoseprofileDatasupplies that machine a different runtime identity, the fixture merges twohome.usernamedefinitions and dies before asserting anything.Measured against archetypes
c41a294with a fork consuming the check suite through the documentedprofiles/secrets/inventoryfollows redirects. Every other framework check in that fork's re-exported suite passes at this pin except the ones already listed here andmicrovm-host-join, which is the same fixture class again.The cost is higher for this one than for the three above, because the fork has no fork-safe sibling and no real machine to fall back on: a deployment that manages no Pi provider yet has nothing that exercises the reconciler, so excluding the check drops the coverage entirely rather than relocating it. The fixture builds a machine only to reach a home-activation script and an age secret, so composing the fixture identity through the same layer production uses — or building a synthetic dev machine rather than reusing a real machine name — would keep the witness and cost nothing.