mirror of
https://github.com/logos-co/logos-workspace.git
synced 2026-08-27 10:41:16 +00:00
Nix below 2.26 DISCARDS an overridden input's own lock and resolves its children
from the PARENT's lock instead. Every doc-test that passes --override-input --
which is all of them under --workspace-pins -- therefore builds that input's
dependencies from a stale snapshot, and can silently compile months-old code
while reporting green. v27 shipped Nix 2.22.
This is not theoretical. On logos-workspace#99 it produced two failures whose
builds are clean on a local Nix 2.34.6 with the identical pins:
doctest logos-basecamp (both platforms)
#include "logos_async_result.h" -- file not found, from an inconsistent
header set assembled out of the stale parent lock. `nix build
.#logos-basecamp` succeeds locally and the artifact carries the expected
new-protocol symbols.
doctest logos-tutorial (both platforms)
6 remaining failures, all downstream of the basecamp build.
Same root cause forced a second workspace pin (logos-lidl) that would otherwise
have been unnecessary: cpp-sdk's own lidl pin was being discarded in favour of
the parent's.
v31 keeps the `extra_nix_config` interface, so this is a version bump only.
Applied to all three workflows so the behaviour is uniform -- a doc-test that
resolves differently in ci.yml than in tests-and-doctests.yml is its own trap.
Co-authored-by: Claude Opus 5 <noreply@anthropic.com>