fix: the cross-runtime kiln check was structurally incapable of passing (AFD-116) - #259
Merged
Conversation
…ng — wrong function, wrong artifact, error swallowed (AFD-116)
Found by the per-piece release-watch of kiln v0.5.0, whose headline SR-58 is
--invoke on meld-fused CORE modules — exactly what jess ships. Testing it against
the real fused cascade found a defect in JESS, not in kiln.
scripts/jess-build.sh ran:
kout="$("$KILND" "$FUSED" --function run-stabilization 2>/dev/null || true)"
and printed "kiln check inconclusive (non-gating)" whenever it produced nothing. It
produced nothing every time, for three compounding reasons:
1. the fused core exports no `run-stabilization` — meld renames the exports to
pulseengine:falcon-cascade/<stage>@0.7.0#<fn>. kiln says so plainly
("[Runtime][E07DA] Function not found") and then LISTS the five that exist.
The information needed to notice was in the output 2>/dev/null discarded.
2. the wasmtime half invoked that name on $W, the PRE-FUSION component — a
different artifact. The two halves were never comparing the same thing.
3. `2>/dev/null || true` made "kiln disagreed" and "kiln could not run" the same
reading — the confusion varve#130 recorded when exit 127 was reported as a
refusal.
The JUnit evidence carried a kiln-xruntime testcase whose value was necessarily 0
on every run this repo has ever done.
WHAT 0.5.0 GIVES US, MEASURED: kilnd --version now prints `kilnd 0.5.0` and an
unknown flag exits 2 (neither held in the layer's build). --invoke works on the
real fused core: mixer#mix with four f32s returns i32 9488, and wasmtime returns
9488 for the same module, export and args. All five stage exports execute when each
is driven with its own arity.
WHAT IT DOES NOT GIVE US — checked BEFORE building on it: every cascade export
returns a POINTER, and that pointer is CONSTANT (9488) across three different
argument sets. Two engines agreeing on a fixed address is not evidence about the
arithmetic; a check built on it would agree even if one engine computed garbage. So
the replacement is labelled an EXECUTION check, not a value differential. The
strong version needs kiln to dereference the return area — filed upstream.
The replacement drives both engines over the SAME artifact/export/args, requires a
value from each, refuses a pre-0.5.0 kilnd by name instead of saying "inconclusive",
and asserts 5/5 stage exports execute. jess-build.sh passes MOD="$FUSED"
KILND="$KILND" explicitly — letting the checker use its own defaults would have
reintroduced defect (2) one layer down. Non-gating unless KILN_STRICT=1.
Both negative controls observed firing. Two harness bugs of my own caught by them:
the export name was packed as "<name>:4" and split on the first colon, but the name
contains colons and truncated to "pulseengine"; and driving all five exports with
six zeros made four fail on arity and reported "1/5" — a number measuring the
harness, not the artifact.
Co-Authored-By: Claude Opus 4.8 <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.
fix: the cross-runtime kiln check was structurally incapable of passing — wrong function, wrong artifact, error swallowed (AFD-116)
Found by the per-piece release-watch of kiln v0.5.0, whose headline SR-58 is
--invoke on meld-fused CORE modules — exactly what jess ships. Testing it against
the real fused cascade found a defect in JESS, not in kiln.
scripts/jess-build.sh ran:
kout="$("$KILND" "$FUSED" --function run-stabilization 2>/dev/null || true)"
and printed "kiln check inconclusive (non-gating)" whenever it produced nothing. It
produced nothing every time, for three compounding reasons:
run-stabilization— meld renames the exports topulseengine:falcon-cascade/@0.7.0#. kiln says so plainly
("[Runtime][E07DA] Function not found") and then LISTS the five that exist.
The information needed to notice was in the output 2>/dev/null discarded.
different artifact. The two halves were never comparing the same thing.
2>/dev/null || truemade "kiln disagreed" and "kiln could not run" the samereading — the confusion varve#130 recorded when exit 127 was reported as a
refusal.
The JUnit evidence carried a kiln-xruntime testcase whose value was necessarily 0
on every run this repo has ever done.
WHAT 0.5.0 GIVES US, MEASURED: kilnd --version now prints
kilnd 0.5.0and anunknown flag exits 2 (neither held in the layer's build). --invoke works on the
real fused core: mixer#mix with four f32s returns i32 9488, and wasmtime returns
9488 for the same module, export and args. All five stage exports execute when each
is driven with its own arity.
WHAT IT DOES NOT GIVE US — checked BEFORE building on it: every cascade export
returns a POINTER, and that pointer is CONSTANT (9488) across three different
argument sets. Two engines agreeing on a fixed address is not evidence about the
arithmetic; a check built on it would agree even if one engine computed garbage. So
the replacement is labelled an EXECUTION check, not a value differential. The
strong version needs kiln to dereference the return area — filed upstream.
The replacement drives both engines over the SAME artifact/export/args, requires a
value from each, refuses a pre-0.5.0 kilnd by name instead of saying "inconclusive",
and asserts 5/5 stage exports execute. jess-build.sh passes MOD="$FUSED"
KILND="$KILND" explicitly — letting the checker use its own defaults would have
reintroduced defect (2) one layer down. Non-gating unless KILN_STRICT=1.
Both negative controls observed firing. Two harness bugs of my own caught by them:
the export name was packed as ":4" and split on the first colon, but the name
contains colons and truncated to "pulseengine"; and driving all five exports with
six zeros made four fail on arity and reported "1/5" — a number measuring the
harness, not the artifact.
Co-Authored-By: Claude Opus 4.8 noreply@anthropic.com