[BUG] Cleanup-frame CI selects a disassembler symlink rejected by intake #5

Closed
opened 2026-09-12 15:28:36 +02:00 by erikinkinen · 0 comments
Owner

Summary

The cleanup-frame CI step selects /usr/bin/objdump, while the checker requires a regular selected executable and rejects symlink inputs. In the CI container this fails with errno 40 before disassembly, preventing the intended artifact evidence from being collected.

Reproduction

Run the maintained Exsh workflow at 9d1981caac57e3a0f146509282f27c8e4134ec40 in its selected container. Push run 219 and PR run 220 each invoke the checker with --objdump /usr/bin/objdump for optimized runtime and all-feature ELFs.

Expected and actual behavior

Expected: CI explicitly selects the installed disassembler's resolved regular executable and collects its actual ELF findings under the existing bounded intake policy.

Actual: both configurations in each run report OSError: [Errno 40] Too many levels of symbolic links: '/usr/bin/objdump', followed by incomplete evidence. This tool-intake error precedes actual frame analysis. The separately unresolved ordinary-source and direct-path proof remains a distinct limitation; correcting tool selection must not turn that incomplete proof into a pass.

Environment and identity

  • Exsh 9d1981caac57e3a0f146509282f27c8e4134ec40, push219/API9045 and PR220/API9046.
  • Maintained rust:latest CI container installs binutils and selects the x86_64 freestanding optimized runtime/all-feature builds.
  • Rust jobs19451/19453 report957 Rust tests and59 Python tests passing before the checker invocation.
  • Inputs are build artifacts and an explicitly selected host executable; no target image is executed by this checker.
  • The installed pathname fails the checker's no-follow regular-file intake. An exact container tool digest and prior unaffected workflow revision are not established by these logs.

Evidence and prior checks

Complete run metadata and both terminal job logs are retained. The local final-checker artifact replays used an admitted regular executable and remain separate evidence; they do not validate this container's selected pathname. No unchanged CI retry or tool-policy relaxation is used to classify the failure.

The correction should resolve the already selected installed tool explicitly before invocation, verify the resulting regular executable, and retain that resolved path and byte identity in the existing checker receipt. Preserve missing-tool failure, all original proof limits and the current incomplete-domain result.

Published correction: signed 7f9552abf3507b464921361fb985853525aef12d resolves the explicitly installed objdump path before the workflow invokes the unchanged checker. Local selected-symlink, missing-tool, workflow syntax and Markdown checks pass. All Rust sources and original frame limits are unchanged; current-head CI 221 and 222 now reach actual analysis with no objdump intake error after 957 Rust and 59 Python tests pass. Both still fail on the separately incomplete frame proof. This issue remains open for final review; the tool-selection failure is no longer observed at this head.

Tracking

Related emitted-proof issue: Exsh #4. Implementation: WIP PR #3. Tool-selection correction is separate from proving optimized source membership, indirect calls or complete stack safety.

Original terminal-graph CI classification — 21 September 2026:

Signed 0d5d5ad9aff082ca75ec79dbc9c29d73f799d8ed reaches actual analysis in both original CI 275/276. Each passes 976 unit tests and 355 checker controls before the required frame gate fails. Each run retains four incomplete reports: 101 unresolved runtime observations in both profiles and 68 all-feature observations in both profiles. All four workspace mappings pass separately. These CI artifact observations differ from local 97/63 results and are not interchangeable proof.

All four terminal logs are complete and hash-verified (319,902 bytes), with zero warnings. The disassembler intake correction reaches the real proof boundary; tool-selection issue 5 is resolved. Complete frame issue 4 and local release compiler issue 9 remain open. No workflow restart, bound change or conversion of incomplete evidence to a pass occurred.

## Summary The cleanup-frame CI step selects `/usr/bin/objdump`, while the checker requires a regular selected executable and rejects symlink inputs. In the CI container this fails with errno 40 before disassembly, preventing the intended artifact evidence from being collected. ## Reproduction Run the maintained Exsh workflow at `9d1981caac57e3a0f146509282f27c8e4134ec40` in its selected container. [Push run 219](https://git.erikinkinen.fi/erix/exsh/actions/runs/219) and [PR run 220](https://git.erikinkinen.fi/erix/exsh/actions/runs/220) each invoke the checker with `--objdump /usr/bin/objdump` for optimized runtime and all-feature ELFs. ## Expected and actual behavior Expected: CI explicitly selects the installed disassembler's resolved regular executable and collects its actual ELF findings under the existing bounded intake policy. Actual: both configurations in each run report `OSError: [Errno 40] Too many levels of symbolic links: '/usr/bin/objdump'`, followed by incomplete evidence. This tool-intake error precedes actual frame analysis. The separately unresolved ordinary-source and direct-path proof remains a distinct limitation; correcting tool selection must not turn that incomplete proof into a pass. ## Environment and identity - Exsh `9d1981caac57e3a0f146509282f27c8e4134ec40`, push219/API9045 and PR220/API9046. - Maintained `rust:latest` CI container installs binutils and selects the x86_64 freestanding optimized runtime/all-feature builds. - Rust jobs19451/19453 report957 Rust tests and59 Python tests passing before the checker invocation. - Inputs are build artifacts and an explicitly selected host executable; no target image is executed by this checker. - The installed pathname fails the checker's no-follow regular-file intake. An exact container tool digest and prior unaffected workflow revision are not established by these logs. ## Evidence and prior checks Complete run metadata and both terminal job logs are retained. The local final-checker artifact replays used an admitted regular executable and remain separate evidence; they do not validate this container's selected pathname. No unchanged CI retry or tool-policy relaxation is used to classify the failure. The correction should resolve the already selected installed tool explicitly before invocation, verify the resulting regular executable, and retain that resolved path and byte identity in the existing checker receipt. Preserve missing-tool failure, all original proof limits and the current incomplete-domain result. Published correction: signed `7f9552abf3507b464921361fb985853525aef12d` resolves the explicitly installed objdump path before the workflow invokes the unchanged checker. Local selected-symlink, missing-tool, workflow syntax and Markdown checks pass. All Rust sources and original frame limits are unchanged; current-head CI [221](https://git.erikinkinen.fi/erix/exsh/actions/runs/221) and [222](https://git.erikinkinen.fi/erix/exsh/actions/runs/222) now reach actual analysis with no objdump intake error after 957 Rust and 59 Python tests pass. Both still fail on the separately incomplete frame proof. This issue remains open for final review; the tool-selection failure is no longer observed at this head. ## Tracking Related emitted-proof issue: [Exsh #4](https://git.erikinkinen.fi/erix/exsh/issues/4). Implementation: [WIP PR #3](https://git.erikinkinen.fi/erix/exsh/pulls/3). Tool-selection correction is separate from proving optimized source membership, indirect calls or complete stack safety. Original terminal-graph CI classification — 21 September 2026: Signed `0d5d5ad9aff082ca75ec79dbc9c29d73f799d8ed` reaches actual analysis in both original CI [275](https://git.erikinkinen.fi/erix/exsh/actions/runs/275)/[276](https://git.erikinkinen.fi/erix/exsh/actions/runs/276). Each passes 976 unit tests and 355 checker controls before the required frame gate fails. Each run retains four incomplete reports: 101 unresolved runtime observations in both profiles and 68 all-feature observations in both profiles. All four workspace mappings pass separately. These CI artifact observations differ from local 97/63 results and are not interchangeable proof. All four terminal logs are complete and hash-verified (319,902 bytes), with zero warnings. The disassembler intake correction reaches the real proof boundary; [tool-selection issue 5](https://git.erikinkinen.fi/erix/exsh/issues/5) is resolved. [Complete frame issue 4](https://git.erikinkinen.fi/erix/exsh/issues/4) and [local release compiler issue 9](https://git.erikinkinen.fi/erix/exsh/issues/9) remain open. No workflow restart, bound change or conversion of incomplete evidence to a pass occurred.
Sign in to join this conversation.
No description provided.