ci/spec22-gems: round-7 bisect — sha256 legs, ffi.open, fiddle flag matrix (incident 13) - #92
Merged
Merged
Conversation
…atrix (incident 13) Round 6's bisect died NoMethodError on its first leg (ffi 1.17 made DynamicLibrary.load_library private) and no dep-load verdict printed. Meanwhile the round-6 artifact's pressed image proved on macOS that the closure walk's answers match llvm-objdump ground truth exactly, and the two native.rb attempts differ by route (covered lib/sassc -> OS 126; not-held ext/ -> EACCES synthesis). Round 7 measures what has never been measured on the runner: - sha256 of each vendored module through ruby's patched IO vs the image-extracted constants (a vendored-DLL mismatch = a windows-side backend read bug; libsass.so is per-run compiled, informational); - ffi DynamicLibrary.open legs: bare-name controls, sibling solos, the top module — the 126 names 'a dep', these name which; - a fiddle LoadLibraryExA flag matrix on the materialized HOST spelling (passthrough route = the raw OS loader): default-order negative control, altered (0x8), search-default+dll-dir (0x1100); successes FreeLibrary'd at once so no leg poisons the next. Every leg rescues StandardError and prints its class — a probe bug can never kill the bisect again. The original LoadError still re-raises.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Incident 13 round 7 — a bisect that cannot die, and three legs that have never been measured
Round 6's run (factory build-windows 32204381083) produced two proofs and one probe bug:
5c2a106); extracted on macOS, all 16 imports oflibsass.somatchllvm-objdump's read of the real import tables exactly, and all three vendored modules are validcoff-x86-64. The walk's answers are the truth.LOAD_WITH_ALTERED_SEARCH_PATHwhen the caller named noLOAD_LIBRARY_SEARCH_*order, and the two native.rb attempts differ by route:lib/sassc/libsass.so→ OS 126 (covered, materialized, real load);ext/libsass.so→ error 5 (EACCESsynthesis — that file is not in the image; red herring, dead fallback).PROBE-DIAG dep-loadverdict —FFI::DynamicLibrary.load_librarywent private in ffi 1.17.4 (private_class_method), the first leg diedNoMethodError, and the per-legrescue LoadErrorcouldn't catch it.This round's probe fixes the bug and measures what has never been measured on the runner:
libsass.sois recompiled per run by gem install; its comparison is informational.)DynamicLibrary.openlegs (the public API) — bare-name controls (ADVAPI32.dll,api-ms-win-crt-runtime-l1-1-0.dll), each sibling solo, then the top module. The 126 names "a dep"; these name WHICH.default-orderas the negative control (the standard order never searches the DLL's own dir — 126 there is documented behavior, success there rewrites the model),altered(0x8, ffi's route), andsearch-default+dll-dir(0x1100). Every succeeded handle isFreeLibrary'd at once so no leg poisons the next via the loader's already-loaded table.Every leg rescues
StandardErrorand prints its exception class — a probe bug can never again kill the bisect. The originalLoadErrorstill re-raises; the probe never gates.Fixture-only change (
ci/spec22-gems/fixtures/probe.rb),ruby -cclean. The factory dogfood is the acceptance:proof-sassc.logmust carry a fullPROBE-DIAGverdict sheet.