Re-ground Joern's tool-native decline on a field evaluation of the shipped scan bundle (A26) - #122
Merged
Merged
Conversation
…ipped scan bundle (A26) A maintainer challenge - Joern ships a query database (queries.joern.io, the joern-scan bundle) - sent the preregistered decline's packaging claim into the field. Half of it failed: the pinned v4.0.614 release publishes a versioned querydb.zip asset, and the shipped `joern-scan --updatedb --dbversion 4.0.614` installs exactly it, so the bundle is pinnable and the earlier unpinnability grounds are retired. The decline survives on stronger evidence, measured rather than asserted: the version-pinned bundle dumps fifty-eight queries - none for JavaScript or Python - and its one query naming this profile's command sink (call-to-exec) filters the method-name property with a full-match regex that matches zero methods on a javasrc2cpg graph. Executed over all thirty-six probe fixtures with zero benchmark input, the installed bundle fired no query anywhere, the source-sink positives included. The Python leg also retains a shipped-product defect: auto-detection emits importCode.pythonsrc, which does not compile against the product's own console; the documented --language python runs, and still decides nothing. No partition cell moves: all eighteen Joern cells stay unsupported, as capability coverage on the A7 shape - no shipped query binds any probe endpoint - not as thirty-six false negatives. Evidence retained under reports/raw/amendment-a26-joern-scan-native/, produced by scripts/probe-joern-scan-native.sh, which works on a copy of the pinned distribution so the pin is never mutated. No freeze is invalidated; the retained 0/6 reports predate the amendment and keep their wording, per the A10 precedent. Drafted as A25; renumbered to A26 because concurrent PR #121 claims A25 for OpenTaint. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
DavidBakerEffendi
force-pushed
the
dave/joern-scan-native-a25
branch
from
September 2, 2026 06:09
282eeba to
9bbc75e
Compare
DavidBakerEffendi
added a commit
that referenced
this pull request
Sep 2, 2026
…ctivation surface (A28) (#124) ## What this is A maintainer challenge sent [Amendment A14](https://github.com/BrokkAi/dataflowbench/blob/main/docs/native-profile.md#a14--2026-09-01-infers-native-row-declines-on-a-measured-silence)'s central phrase — *"Pulse taint is off absent a configuration"* — into the field, the same movement A25 (OpenTaint) and A26 (Joern) made for their native declines. Part of the phrase failed. The decline survives on stronger evidence, recorded as **Amendment A28**. No cell moves: all six Infer native cells stay `unsupported`, 0 / 6, Java alone. ## What was measured (all three arms executed on the pinned v1.3.0 binary, evidence retained under `reports/raw/amendment-a28-infer-native-activation/`) 1. **The distribution bundles default taint data — enumerated.** Exactly one shipped taint surface exists: `lib/infer/infer/config/taint/`, four Objective-C `NSLib` files (`NSString`, `NSArray`, `NSDictionary`, `NSSet`) plus a README stating they "are always included when running infer". Every file's single top-level key is `pulse-taint-propagators`. No sources, no sinks, no sanitizers, no policies, no `.inferconfig` anywhere in the distribution, no Java identity. 2. **A zero-configuration invocation activates it — proven, not quoted.** Corrupting one bundled file in a byte copy of the distribution kills a zero-config Java *capture* with exit 3, the error naming the file from `Config.pulse_taint_config`'s directory fold (`engagement-proof-transcript.txt`). This matters because the pinned release's signature failure mode is *silent* config loss: here the opposite is established — A14's silence is an **engaged** silence. The loader runs, loads the shipped taint data, and that data binds no endpoint to any policy. 3. **The full default surface decides nothing the split invocation missed.** `infer run --sarif` — the release's whole default checker set, not the adapter's `capture` + `analyze --pulse-only` arms — produced **zero findings of any rule** over all twelve Java native fixtures (verbatim SARIF retained per fixture). No non-taint Pulse finding exists to reconcile against any anchor, so no cell becomes a live activation deciding `not-reached`. ## Why the cells stay declined The shipped model set expresses no flow question over any probe endpoint — the one taint artifact it ships is propagator-only and Objective-C-only. The twelve zero-finding full-default runs are the decline's evidence, not scored runs; `not-reached` would assert an asked question that found no flow, and no question is asked. (A7's / A26's distinction.) ## What changes where - `docs/native-profile.md` — A28 amendment entry; the Infer activation section gains the engaged-silence paragraph (A14's imprecise sentence stays quoted, per the retired-sentence discipline); table rows 1–2 restated. - `src/main.rs` — the six `NATIVE_PARTITION` Infer rationales re-grounded (Amendments A14, A28). The retained 0 / 6 report predates the amendment and keeps A14's wording, exactly as A26 left Joern's; the corrected strings land with the next evidence re-run. - `docs/java-native.md`, `adapters/infer/README.md` — mirrored. - `scripts/probe-infer-native-activation.sh` — the three-arm probe (works on a scratch copy; the pinned distribution is never mutated). ## Battery `cargo fmt --check` ✓ · `cargo test` 207 ✓ · `validate` 852 cases ✓ · `validate-reports` 82 ✓ · `validate-freeze reports/freeze.json` (v0.6.1) ✓ · `generate-results --check` current ✓ · astro build 45 pages ✓ Amendment number: drafted as A27, renumbered to **A28** before merge — the concurrent #123 claims A27 for Semgrep's native re-grounding (race note recorded in the entry). Rebased on main past A25 (#121) and A26 (#122). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.
What this is
A maintainer challenge to the Joern tool-native row — Joern ships a query database (https://queries.joern.io, the
joern-scanbundle) — sent the preregistered decline's grounds into the field. The result is Amendment A25: no partition cell moves, and the decline comes back stronger than it went in.What the field evaluation measured
Half of the old grounds failed. The preregistration declined the scan surface as "downloaded from a floating
latestrelease asset, unpinnable at run time". Measured: the pinned v4.0.614 release publishes a versionedquerydb.zipasset, and the shippedjoern-scan --updatedb --dbversion 4.0.614installs exactly it (URL + SHA-256 retained). The bundle is pinnable, andjoern-scanruns end to end with zero benchmark input. The retired claim stays recorded as retired, per the A10 precedent.The decline survives on the bundle's own content and behavior, retained under
reports/raw/amendment-a26-joern-scan-native/(produced byscripts/probe-joern-scan-native.sh, which works on a copy of the pinned distribution — the pin is never mutated):c, 10android, 9php, 7java, 3kotlin, 2ghidra) — none for JavaScript, none for Python.call-to-exec, the one query naming this profile's command sink — iscpg.method("java.lang.Runtime.exec").callIn, andcpg.method(...)full-match-filters the method name property (exec), so it matches zero methods on the veryjavasrc2cpggraph whosecpg.method("exec").callInis non-empty (binding check retained).joern-scan's Python auto-detection emitsimportCode.pythonsrc(...), which does not compile against the product's own console; the documented--language pythonruns — and still decides nothing.Why the cells stay declined rather than becoming scored
The A7 shape: no shipped query binds any probe endpoint — by absence in two languages, by a structurally impossible binding in the third — so the eighteen cells remain capability coverage decided from the bundle's text and confirmed by execution, not an activated model set producing 36 false negatives. Even the sink-existence hazard cannot reach these fixtures: the one sink-existence query aimed at
Runtime.execis the one that cannot bind.Changes
docs/native-profile.md— the Joern activation section's scan-bundle paragraph re-grounded (retired claim kept visible), the S-cell rationale extended, and Amendment A25 appended (drafted as A25, renumbered to A26 before opening: concurrent PR Amendment A25: re-ground OpenTaint's native declines on the shipped scan entry point's measured silence #121 claims A25 for OpenTaint).src/main.rs— the JoernNATIVE_PARTITIONS-cell rationale re-grounded to cite A25.adapters/joern/README.md— the three tool-native sections' unpinnability sentences replaced with the measured grounds.docs/adapters.md,docs/java-native.md,docs/javascript-native.md— the same claim corrected where echoed.scripts/probe-joern-scan-native.sh+reports/raw/amendment-a26-joern-scan-native/— the reproducible probe and its retained evidence.No cell moves, so no runner arm changes, no report re-runs, and no site-card change; the retained 0/6 reports predate the amendment and keep their wording (A10 precedent). No freeze is invalidated — v0.6.1 contains no tool-native report and
validate-freezestays green.Battery
cargo fmt --check✓cargo test✓ (207 passed)cargo run -- validate✓ (852 cases)cargo run -- validate-reports✓ (82 reports)cargo run -- validate-freeze reports/freeze.json✓ (v0.6.1)cargo run -- generate-results --manifest reports/freeze.json --output-directory <dir> --check✓astro build✓ (45 pages)🤖 Generated with Claude Code