Drop the transitional mkDefault from the dev VM forge SSH entry #84
No reviewers
Labels
No labels
blocked
bug
decision
duplicate
enhancement
help wanted
invalid
landed?
question
ready-to-merge
stale
wontfix
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
allod/archetypes!84
Loading…
Reference in a new issue
No description provided.
Delete branch "agent/drop-forge-identityfile-default"
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?
The dev VM's forge host block now has one author and no tie-breaker: the framework module that renders it from the VM's own identity record defines
IdentityFileat normal priority instead of underlib.mkDefault. On every running machine nothing changes: each template machine evaluates to the same system derivation as before, because the profile copies that the default used to yield to are gone from allod/profiles (allod/profiles#10) and from the deployments' private profiles, and the default value and the plain value render the same bytes. What changes is what happens if a copy ever comes back: it is a module-system conflict at evaluation, never a silent winner, and the check now pins that with a fixture that must fail to evaluate. If it is wrong, revert this PR; the only machine-visible consequence of a wrong revert is the old tie-breaker returning. This is allod/archetypes#82, the follow-up allod/archetypes#54 and allod/strategy#56 name, and it closes the arc.What changes
modules/dev-ssh-forge.nix:IdentityFile = "~/.ssh/${sshKeyName}", nolib.mkDefault; the header explains that a second definition of the block is now an evaluation conflict.checks/ssh-settings.nixand its fixtures: the "dev VM beside an unmigrated profile copy" fixture, which asserted the copy's key won, is inverted into a negative witness asserting that the two modules together fail to evaluate. The hypervisor, dev, localForwards, wiring and sabotage fixtures are unchanged.Risk
R2. Localized to one value and one fixture; the render is pinned byte-for-byte below. The integration uncertainty is a deployment whose private profiles still define the block: its next lock bump fails loudly at evaluation with a conflicting-definition error naming
programs.ssh.settings.<forge host>.IdentityFile, which is the behaviour the issue asks for. Rollback is a revert.Validation
Run by the integrator at
680442d:nix build .#checks.x86_64-linux.ssh-settings --rebuildexits 0; the worker showed the new negative assertion failing withlib.mkDefaultrestored, then reverted.nix flake check --no-buildexits 0 (worker run, alone).allod-dev's rendered~/.ssh/configfrom this flake's own machines is byte-identical between master and this branch.allod/deploymaster, whose lock already pins allod/profiles#10 and allod/secrets#33) with--override-input archetypes <this branch>:allod-dev,nexusandprivacy-1evaluate to the same toplevel derivation paths as the current lock, so every template machine is unchanged byte for byte;allod-dev's rendered config is byte-identical to the lock's render.Cold cross-family review:
gpt-5.6-terraviacodex exec, reasoning efforthigh, read the diff at447213e(a Claude-family worker authored it). Three findings. Marked blocker: the module comment claimed any second definition of the block is a conflict, but Home Manager merges an identical migrated copy silently; true, and harmless, since two identical definitions render one identical block and nothing substitutes another key. Comment corrected in680442d; no code change. Should-fix, accepted: the negative fixture'stryEvalrecords only that rendering threw, so a positive twin now asserts the legacy copy renders on its own and the rejection is pinned to the combination, in680442d. Should-fix, discarded: a fixture comment "names a real machine and a private path" — it cites the public allod/profiles file path and the public template machine in prose, not as a fixture value. The reviewer traced and cleared: forcing the rendered config text reaches the converted block and the failure is Home Manager's conflicting-option-types error between the legacy list and this module's string; the rendered bytes with no profile copy are unchanged;mkDevVmis the only production consumer and no in-tree fixture relied on the former default priority. No second reading follows the fix round; the fixes are settled by the rebuilt check and the sabotage of the new positive assertion.Closes allod/archetypes#82
Refs allod/archetypes#54
Closes allod/strategy#56