generated from erix/meta
[BUG] Dynamic artifact cache omits selected source and linker identity #24
Labels
No labels
bug
ci
docs
duplicate
enhancement
help wanted
invalid
performance
phase-6
question
refactor
security
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
erix/integration#24
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?
Summary
The dynamic executable cache key omits the contents of explicitly selected
external source and linker files. Changing either file, or selecting another
file with the same basename, leaves the key unchanged when component-owned
inputs and build configuration stay fixed. A cache hit can therefore select an
artifact whose primary compiler inputs no longer match the requested build.
Reproduction
Use Integration
b518b6ad1d2f3e7a36a5d796eaff3103c051bb84. Source its unchangedscripts/lib/service-build.shin an isolated fixture with a component tree, anempty-dependency service record and valid empty shared-object registry. Select
TARGET=x86_64-unknown-none,PROFILE=release, and explicit source/linker filesoutside the component tree.
Call the original gateway using the existing argument order:
Keep component files unchanged and repeat after changing only the external source
bytes, changing only the external linker bytes, or selecting alternate external
files named
main.rsandlinker.ld. Repeat both with freshly prepared cachecontext and with the original unprepared path. A feature-only change is a control. Also select distinct same-basename sources
and linkers already present in one unchanged component tree, and a component-local
source symlink resolving to an external file whose bytes then change.
Expected and actual behavior
Expected: changes to explicitly selected primary compiler inputs invalidate the
cache identity; missing selected inputs fail before a cache can be reused.
Actual: in 28 local observations, each mode returned the same key after source or
linker content changes and after same-basename alternative selections. Missing
selected files also returned the prior key. Internal same-basename alternatives also alias despite selecting different
component-owned entries. An apparently internal source symlink continues to alias
when its external target changes. Every invocation exited zero with empty stderr. Changing the declared feature string did change the key, showing
that the real fingerprint gateway was exercised rather than a constant stub.
Environment and identity
b518b6ad1d2f3e7a36a5d796eaff3103c051bb84; 50 selected original script blobsused without modifications, with an explicitly authored host catalog fixture.
x86_64-unknown-none, fixed entry and runtime feature selection; no image.queries and local LLVM tools. No compilation or VM execution was performed.
no implicit external parent-tree discovery and no network or publication access.
Evidence and prior checks
Original Git blob hashes, each source/linker input snapshot, unchanged component
hashes, all keys and command status/output receipts were retained separately.
Both prepared and unprepared cache routes reproduce the omission. A declared
feature change invalidates the key in both routes. Each command had a 30-second
hard deadline, 10-second output-stall deadline, 1 MiB output budget and owned
subprocess-group cleanup.
The proposed correction must bind selected bytes and selection coordinates,
reject missing inputs before lookup, and distinguish resolved input ownership.
Cache bypass for external sources/linkers without complete declared input
coverage must preserve their existing compilation support. These observations concern primary selected files;
they do not establish complete external module or linker-include dependency
closure, artifact restoration behavior, guest execution or self-hosting.
Published correction: signed Integration
381bccd87c5632e9d1af8aa9d0aca295cbc00e1fin WIP PR #12. The final 32 warning-denied cache tests and existing shell fixture pass; every original fixture assertion is preserved. CI syntax and all 113 Markdown files pass. Original failing replays remain retained. Current-head CI, complete dependency closure and fresh image/guest acceptance remain open.Tracking
Related compiler-coordinate reproducibility work:
#22.
This cache omission has separate original-source evidence and requires a
separately reviewed correction. No cache threshold, retry or full-image rebuild
is part of this reproduction.
erikinkinen referenced this issue2026-09-12 15:01:34 +02:00