[BUG] Dynamic Rootd compilation rejects dependency-qualified features #50

Closed
opened 2026-09-14 12:33:43 +02:00 by erikinkinen · 0 comments
Owner

Summary

The shared dynamic compiler's manifest feature resolver treats dependency-qualified selectors as local package features. Existing Rootd scenario builds fail before their VM can execute. Both current Integration workflows report 54 scenario passes and 432 failures out of 486.

Reproduction

At Integration 4b65755f1f2774798d4a909212db4e64c0349b86, run an existing Rootd smoke scenario through the ordinary dynamic builder. The selected Rootd manifest receives rootd-runtime,rootd-integration-policy,rootd_integration_orchestration/integration-smoke. The shared-object builder resolves the orchestration feature, but Rootd's own compiler configuration then rejects the same qualified selector.

The smaller regression calls enabled_features from scripts/dynlink_package_features.py with a declared local feature and a declared dependency-qualified feature, using replace_defaults=(). It should return only the local compiler feature closure.

Expected and actual behavior

Expected: local compiler cfg values belong to the selected package. Dependency-qualified selections are validated and routed to their owning dependency, without inventing local cfg values or silently accepting unknown local features.

Actual: selected unknown package feature rootd_integration_orchestration/integration-smoke, followed by dynamic artifact build failed: rootd and exit status 1. Both complete catalog jobs fail; the subsequent isolated native diagnostic, canonical images and terminal modes are not reached in those workflows.

Environment and identity

  • Integration: signed 4b65755f1f2774798d4a909212db4e64c0349b86, feature branch feature/posix-compat.
  • Rootd selected by the existing catalog: ac3c1847af9915164d4a819f5f15e1827884e8b1.
  • Linux x86_64 CI host, release dynamic compilation for freestanding x86_64; 12 scenario workers.
  • This is a source feature-selection error before the affected guest execution. No additional guest capability is involved.
  • The preceding Integration 47c27a1614c02323db7bbebfdbd0ca6b09bc9d45 push workflow 1601 passed the full catalog; no unchanged rerun is requested.

Evidence and prior checks

Push CI 1603 and PR CI 1604 retain the original failures. All six terminal logs were inspected, totaling 14,427,322 bytes with zero warning candidates. Rust and Markdown jobs pass in both runs. Each catalog reports 54 passes, 432 failures and 486 total scenarios; these are scenario results, not a claim that every failure has an identical cause.

The separate local lifetime diagnostic at this revision passed its actual VM markers and expected exit. That result does not establish full catalog acceptance. The existing helper tests missed a qualified selector entering the shared compiler path.

Validation checkpoint — 14 September 2026: Signed Integration 7cc0593e101b2e0ca42f24d4fa189dd96cb1455c passes all 159 helper suites, the strict four-selection Rust matrix (320/321 units) and all 87 original Rootd feature selections from failed CI 1603/1604. Both final native VMs pass unchanged exit/marker rules with empty stderr. The lifetime image is 2,150,400 bytes, SHA256 7d8b99684110d38dd77d2be297f1d896d7bb94a2f60dc5a3ee3dcab06cea2c76; the ordinary Rootd image is 27,934,720 bytes, SHA256 3868790fac953843c62e3674ef149dc55e4502e5118212fcc95d1aef875cf1a0. Original compiler, runtime-import and entry-argument failures remain retained. Full CI 1605 and 1606 is running; no full-catalog pass is claimed.

Allocator validation checkpoint — 14 September 2026: Signed Integration a869a81eb406a4f027a2b5db573b6330ca114d94 selects both final source graphs and passes all 159 helper suites plus strict 320/321-unit development/release default/all Rust matrices. The final ordinary Rootd IPC-framing VM passes in 45.832335 seconds and the native distinct-argument/lifetime VM passes in 13.026853 seconds, under unchanged exit/marker/deadline rules with empty QEMU stderr. These are host build-and-run durations. The ordinary image is 27,934,720 bytes, SHA256 2a187127696d569ae5c627d9c1d154ad53c024e98d9a181dbb6006790f01a0cc; the lifetime image is 2,142,208 bytes, SHA256 8fa4c7512a5916a51ba956b1e55c84ac2945c2580ff9556c99c27cbaa6e3321d. Its final image, ELF and EFI bytes equal the preceding validated feature-tree artifacts. Older full CI 1605/1606 is still running; new 1607/1608 is waiting. No full-catalog pass, realm implementation or full guest build is claimed.

Endpoint construction checkpoint — 14 September 2026: Completed older Integration 1605/1606 at 7cc0593e101b2e0ca42f24d4fa189dd96cb1455c each reports 485 passes and one failure across all 486 scenarios. The sole failed scenario is the existing ext4 quota timeout tracked in #18. All six complete logs total 27,546,527 bytes with zero warning candidates; Rust and Markdown pass. There are no VM-worker dependency-feature compiler failures. Subsequent dependent image and terminal gates remain unestablished. The allocator cohort 1607/1608 is running; current endpoint-construction cohort 1609/1610 is waiting. The signed feature-selection correction, 87 original Rootd feature selections, direct and actual-compiler controls, local strict checks and both newly classified full catalogs establish correction of this compiler regression. Close this scoped defect while the separate quota bug and whole-suite gate remain open.

Completed CI checkpoint — 15 September 2026: Signed Integration a869a81eb406a4f027a2b5db573b6330ca114d94 passes both 1607/1608; signed endpoint-construction checkpoint 989d44d604d07c4c9bcc23264912bdf2076b99eb passes both 1609/1610. Each run reports all 486 distinct VM scenarios passing, followed by the actual native lifetime scenario, physical/serial interactive checks and all four console modes. Rust and Markdown pass. The two six-log cohorts contain 26,769,289 and 26,769,316 bytes respectively, with zero warning candidates. The previously observed intermittent quota timeout remains documented without a causal-fix claim. These results establish the selected source checkpoints, not owned invocation transport, complete authority closure or either full in-EriX build generation.

Tracking

Related: #49, the broader component audit #11 and Integration PR 12. Add direct, transitive, malformed and real-compiler regressions; preserve strict local and dependency validation. Keep this issue open until the signed fix and relevant new-head CI are classified.

## Summary The shared dynamic compiler's manifest feature resolver treats dependency-qualified selectors as local package features. Existing Rootd scenario builds fail before their VM can execute. Both current Integration workflows report 54 scenario passes and 432 failures out of 486. ## Reproduction At Integration `4b65755f1f2774798d4a909212db4e64c0349b86`, run an existing Rootd smoke scenario through the ordinary dynamic builder. The selected Rootd manifest receives `rootd-runtime,rootd-integration-policy,rootd_integration_orchestration/integration-smoke`. The shared-object builder resolves the orchestration feature, but Rootd's own compiler configuration then rejects the same qualified selector. The smaller regression calls `enabled_features` from `scripts/dynlink_package_features.py` with a declared local feature and a declared dependency-qualified feature, using `replace_defaults=()`. It should return only the local compiler feature closure. ## Expected and actual behavior Expected: local compiler cfg values belong to the selected package. Dependency-qualified selections are validated and routed to their owning dependency, without inventing local cfg values or silently accepting unknown local features. Actual: `selected unknown package feature rootd_integration_orchestration/integration-smoke`, followed by `dynamic artifact build failed: rootd` and exit status 1. Both complete catalog jobs fail; the subsequent isolated native diagnostic, canonical images and terminal modes are not reached in those workflows. ## Environment and identity - Integration: signed `4b65755f1f2774798d4a909212db4e64c0349b86`, feature branch `feature/posix-compat`. - Rootd selected by the existing catalog: `ac3c1847af9915164d4a819f5f15e1827884e8b1`. - Linux x86_64 CI host, release dynamic compilation for freestanding x86_64; 12 scenario workers. - This is a source feature-selection error before the affected guest execution. No additional guest capability is involved. - The preceding Integration `47c27a1614c02323db7bbebfdbd0ca6b09bc9d45` push workflow 1601 passed the full catalog; no unchanged rerun is requested. ## Evidence and prior checks [Push CI 1603](https://git.erikinkinen.fi/erix/integration/actions/runs/1603) and [PR CI 1604](https://git.erikinkinen.fi/erix/integration/actions/runs/1604) retain the original failures. All six terminal logs were inspected, totaling 14,427,322 bytes with zero warning candidates. Rust and Markdown jobs pass in both runs. Each catalog reports 54 passes, 432 failures and 486 total scenarios; these are scenario results, not a claim that every failure has an identical cause. The separate local lifetime diagnostic at this revision passed its actual VM markers and expected exit. That result does not establish full catalog acceptance. The existing helper tests missed a qualified selector entering the shared compiler path. Validation checkpoint — 14 September 2026: Signed Integration `7cc0593e101b2e0ca42f24d4fa189dd96cb1455c` passes all 159 helper suites, the strict four-selection Rust matrix (320/321 units) and all 87 original Rootd feature selections from failed CI 1603/1604. Both final native VMs pass unchanged exit/marker rules with empty stderr. The lifetime image is 2,150,400 bytes, SHA256 `7d8b99684110d38dd77d2be297f1d896d7bb94a2f60dc5a3ee3dcab06cea2c76`; the ordinary Rootd image is 27,934,720 bytes, SHA256 `3868790fac953843c62e3674ef149dc55e4502e5118212fcc95d1aef875cf1a0`. Original compiler, runtime-import and entry-argument failures remain retained. Full CI [1605](https://git.erikinkinen.fi/erix/integration/actions/runs/1605) and [1606](https://git.erikinkinen.fi/erix/integration/actions/runs/1606) is running; no full-catalog pass is claimed. Allocator validation checkpoint — 14 September 2026: Signed Integration `a869a81eb406a4f027a2b5db573b6330ca114d94` selects both final source graphs and passes all 159 helper suites plus strict 320/321-unit development/release default/all Rust matrices. The final ordinary Rootd IPC-framing VM passes in 45.832335 seconds and the native distinct-argument/lifetime VM passes in 13.026853 seconds, under unchanged exit/marker/deadline rules with empty QEMU stderr. These are host build-and-run durations. The ordinary image is 27,934,720 bytes, SHA256 `2a187127696d569ae5c627d9c1d154ad53c024e98d9a181dbb6006790f01a0cc`; the lifetime image is 2,142,208 bytes, SHA256 `8fa4c7512a5916a51ba956b1e55c84ac2945c2580ff9556c99c27cbaa6e3321d`. Its final image, ELF and EFI bytes equal the preceding validated feature-tree artifacts. Older full CI [1605](https://git.erikinkinen.fi/erix/integration/actions/runs/1605)/[1606](https://git.erikinkinen.fi/erix/integration/actions/runs/1606) is still running; new [1607](https://git.erikinkinen.fi/erix/integration/actions/runs/1607)/[1608](https://git.erikinkinen.fi/erix/integration/actions/runs/1608) is waiting. No full-catalog pass, realm implementation or full guest build is claimed. Endpoint construction checkpoint — 14 September 2026: Completed older Integration [1605](https://git.erikinkinen.fi/erix/integration/actions/runs/1605)/[1606](https://git.erikinkinen.fi/erix/integration/actions/runs/1606) at `7cc0593e101b2e0ca42f24d4fa189dd96cb1455c` each reports 485 passes and one failure across all 486 scenarios. The sole failed scenario is the existing ext4 quota timeout tracked in #18. All six complete logs total 27,546,527 bytes with zero warning candidates; Rust and Markdown pass. There are no VM-worker dependency-feature compiler failures. Subsequent dependent image and terminal gates remain unestablished. The allocator cohort 1607/1608 is running; current endpoint-construction cohort 1609/1610 is waiting. The signed feature-selection correction, 87 original Rootd feature selections, direct and actual-compiler controls, local strict checks and both newly classified full catalogs establish correction of this compiler regression. Close this scoped defect while the separate quota bug and whole-suite gate remain open. Completed CI checkpoint — 15 September 2026: Signed Integration `a869a81eb406a4f027a2b5db573b6330ca114d94` passes both [1607](https://git.erikinkinen.fi/erix/integration/actions/runs/1607)/[1608](https://git.erikinkinen.fi/erix/integration/actions/runs/1608); signed endpoint-construction checkpoint `989d44d604d07c4c9bcc23264912bdf2076b99eb` passes both [1609](https://git.erikinkinen.fi/erix/integration/actions/runs/1609)/[1610](https://git.erikinkinen.fi/erix/integration/actions/runs/1610). Each run reports all 486 distinct VM scenarios passing, followed by the actual native lifetime scenario, physical/serial interactive checks and all four console modes. Rust and Markdown pass. The two six-log cohorts contain 26,769,289 and 26,769,316 bytes respectively, with zero warning candidates. The previously observed intermittent quota timeout remains documented without a causal-fix claim. These results establish the selected source checkpoints, not owned invocation transport, complete authority closure or either full in-EriX build generation. ## Tracking Related: #49, the broader component audit #11 and [Integration PR 12](https://git.erikinkinen.fi/erix/integration/pulls/12). Add direct, transitive, malformed and real-compiler regressions; preserve strict local and dependency validation. Keep this issue open until the signed fix and relevant new-head CI are classified.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
erix/integration#50
No description provided.