[GH-ISSUE #3406] test(hopper): satisfy the Linux loader prerequisite in the doctor CLI fixture #1270

Closed
opened 2026-10-16 21:03:36 +00:00 by bsakaguchi · 2 comments
Owner

Originally created by @N0zoM1z0 on GitHub (Oct 14, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/3406

Originally assigned to: @N0zoM1z0 on GitHub.

The new public CLI fixture tests/boundary/cli/doctorHopperDiscovery.test.ts creates a shell script as the configured launcher and expects the Hopper availability check to pass. On Linux, systemDoctorHost.executable also runs ldd; a plain shell script fails that prerequisite, so the test fails before establishing its intended path-preservation/no-launch outcome.

Observed on clean tracked main 322506d0c (Linux x86_64, Node 24.18.0, npm 11.16.0, Vitest 5.0.3):

npm run test:focused -- tests/boundary/cli/doctorHopperDiscovery.test.ts

Result: 1 failed / 0 passed, exit 1, 2.98 s. The hopper check is ok: false, classification config_drift, with remediation to update HOPPER_LAUNCHER_PATH. Hosted job 115776960626 shows the same failure. The test was added in 7582f0dff.

Controlled reproduction through the same real CLI, retaining its original assertions and 20 s deadline:

  • Provide a temporary Linux-only ldd fixture ahead of the existing PATH. It requires exactly one argument equal to the original HOPPER_LAUNCHER_PATH, including bin/../bin, and returns a resolved-library diagnostic: test passes, including the assertion that the Hopper launch marker does not exist.
  • Change only that diagnostic to libfixture.so => not found: test fails, preserving the real shared-library admission check.
  • Both temporary variants have been restored byte-for-byte. Production code was not modified. These are controlled dependency responses, not evidence of compatibility with a real installed Hopper build.

Make the Linux loader prerequisite explicit in this path-preservation fixture, using an appropriately scoped controlled diagnostic or a genuine compatible executable. Keep the exact configured path, no-launch marker, existing runtime/dependency/hash checks and missing-library rejection. Do not weaken production checks, add blanket retries, raise the deadline or skip Linux to make this green.

This is independent of #3394's two JavaScript test-context changes; the clean-main reproduction establishes the baseline failure. Portable tests is required, so the existing failure prevents an otherwise unrelated PR from merging. No broader production discovery regression is established by this fixture failure.

Originally created by @N0zoM1z0 on GitHub (Oct 14, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/3406 Originally assigned to: @N0zoM1z0 on GitHub. The new public CLI fixture `tests/boundary/cli/doctorHopperDiscovery.test.ts` creates a shell script as the configured launcher and expects the Hopper availability check to pass. On Linux, `systemDoctorHost.executable` also runs `ldd`; a plain shell script fails that prerequisite, so the test fails before establishing its intended path-preservation/no-launch outcome. Observed on clean tracked main `322506d0c` (Linux x86_64, Node 24.18.0, npm 11.16.0, Vitest 5.0.3): ```sh npm run test:focused -- tests/boundary/cli/doctorHopperDiscovery.test.ts ``` Result: 1 failed / 0 passed, exit 1, 2.98 s. The `hopper` check is `ok: false`, classification `config_drift`, with remediation to update `HOPPER_LAUNCHER_PATH`. Hosted job [115776960626](https://github.com/morluto/rea/actions/runs/38541313551/job/115776960626) shows the same failure. The test was added in `7582f0dff`. Controlled reproduction through the same real CLI, retaining its original assertions and 20 s deadline: - Provide a temporary Linux-only `ldd` fixture ahead of the existing PATH. It requires exactly one argument equal to the original `HOPPER_LAUNCHER_PATH`, including `bin/../bin`, and returns a resolved-library diagnostic: **test passes**, including the assertion that the Hopper launch marker does not exist. - Change only that diagnostic to `libfixture.so => not found`: **test fails**, preserving the real shared-library admission check. - Both temporary variants have been restored byte-for-byte. Production code was not modified. These are controlled dependency responses, not evidence of compatibility with a real installed Hopper build. Make the Linux loader prerequisite explicit in this path-preservation fixture, using an appropriately scoped controlled diagnostic or a genuine compatible executable. Keep the exact configured path, no-launch marker, existing runtime/dependency/hash checks and missing-library rejection. Do not weaken production checks, add blanket retries, raise the deadline or skip Linux to make this green. This is independent of #3394's two JavaScript test-context changes; the clean-main reproduction establishes the baseline failure. `Portable tests` is required, so the existing failure prevents an otherwise unrelated PR from merging. No broader production discovery regression is established by this fixture failure.
Author
Owner

@N0zoM1z0 commented on GitHub (Oct 14, 2026):

Correction to the earlier verification claim: main advanced from ba33c706d to 60c08802a before #3299 merged. Upstream 7435e79d6 had already changed this same fixture to assert platform-specific readiness and exit status. The textual merge preserved both those assertions and my older synthetic loader setup, producing a semantic conflict on Linux. The Hopper file was therefore not byte-identical to the tested PR head; that earlier claim is withdrawn.

I reproduced the failure on actual merged main a32b4b6ac. Follow-up branch head 3698e4f89 restores only this file from the real pre-merge main parent, removing my obsolete loader setup while preserving the stronger platform-specific assertions. The correct Rizin stdin/readiness fix remains intact. Four relevant files / 76 tests and static/architecture checks pass locally. Reopening #3410 for full current-head CI and review; this is a correction to my merge, not an unrelated failure to ignore.

<!-- gh-comment-id:6166748321 --> @N0zoM1z0 commented on GitHub (Oct 14, 2026): Correction to the earlier verification claim: main advanced from `ba33c706d` to `60c08802a` before #3299 merged. Upstream `7435e79d6` had already changed this same fixture to assert platform-specific readiness and exit status. The textual merge preserved both those assertions and my older synthetic loader setup, producing a semantic conflict on Linux. The Hopper file was therefore **not** byte-identical to the tested PR head; that earlier claim is withdrawn. I reproduced the failure on actual merged main `a32b4b6ac`. Follow-up branch head `3698e4f89` restores only this file from the real pre-merge main parent, removing my obsolete loader setup while preserving the stronger platform-specific assertions. The correct Rizin stdin/readiness fix remains intact. Four relevant files / 76 tests and static/architecture checks pass locally. Reopening #3410 for full current-head CI and review; this is a correction to my merge, not an unrelated failure to ignore.
Author
Owner

@N0zoM1z0 commented on GitHub (Oct 14, 2026):

Superseded by upstream 0686b0754 (verified on main f75b1a416ba67b8421e7dbd248160afedb79581f); closing unmerged.

The latest attempted PR run 38555395945 checked out synthetic merge f2c99a6a91b1a01ecbd420cb76cf522e8c5b1730, combining head e2259b526 with concurrent main c2b79aa46. That main revision separated Hopper discovery from Linux version readiness. Removing the controlled loader then suppressed the expected version check and path discovery. This run failed the Hopper test and canceled other shards; it is not a passing current-main result and was not blindly retried.

Upstream 0686b0754 now retains the controlled loader and discovered path while correctly asserting a separate unsupported-version result. I discarded the restoration proposed here and verified a local integration tree identical to main f75b1a416: Hopper CLI, Doctor service and Rizin boundary tests passed (3 files / 47 tests / 4.33 s); check:ci and architecture guards across 1,394 files passed. No product-runtime fix, macOS execution, installed-Hopper compatibility or new full portable-suite pass is claimed.

The original Rizin readiness fix remains in #3299. No separate restoration patch is needed, and this closure does not claim that #3410 was merged. Initial human declarations were not fabricated. The performance work in #3281 will retain the current upstream Hopper fixture unchanged.

<!-- gh-comment-id:6167272856 --> @N0zoM1z0 commented on GitHub (Oct 14, 2026): Superseded by upstream `0686b0754` (verified on main `f75b1a416ba67b8421e7dbd248160afedb79581f`); closing **unmerged**. The latest attempted PR run `38555395945` checked out synthetic merge `f2c99a6a91b1a01ecbd420cb76cf522e8c5b1730`, combining head `e2259b526` with concurrent main `c2b79aa46`. That main revision separated Hopper discovery from Linux version readiness. Removing the controlled loader then suppressed the expected version check and path discovery. This run failed the Hopper test and canceled other shards; it is not a passing current-main result and was not blindly retried. Upstream `0686b0754` now retains the controlled loader and discovered path while correctly asserting a separate unsupported-version result. I discarded the restoration proposed here and verified a local integration tree **identical to main `f75b1a416`**: Hopper CLI, Doctor service and Rizin boundary tests passed (**3 files / 47 tests / 4.33 s**); `check:ci` and architecture guards across 1,394 files passed. No product-runtime fix, macOS execution, installed-Hopper compatibility or new full portable-suite pass is claimed. The original Rizin readiness fix remains in #3299. No separate restoration patch is needed, and this closure does not claim that #3410 was merged. Initial human declarations were not fabricated. The performance work in #3281 will retain the current upstream Hopper fixture unchanged.
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
morluto/rea#1270
No description provided.