Skip to main content
← Back to list
01Issue
BugShippedSwamp CLIPublic
Assigneeshammz

Relationships

#2312 Property test for deferred bindings fails intermittently on a __proto__ key

Opened by hammz · 9/21/2026· Shipped 9/21/2026

Found while running the verification workflow for swamp-club#2303; unrelated to that change.

Summary

src/domain/expressions/deferred_expression_property_test.ts fails on roughly one run in five, because fast-check generates a random seed each run and only some seeds reach the failing input. It failed the verify-build workflow for an unrelated branch, and reproduced twice in ten consecutive local runs of the single test file.

Counterexample

The shrunk input is an inputs dictionary whose only key is the string proto surrounded by double underscores, mapped to an empty object. The assertion that fails is the first one in the property, the round trip through JSON and DeferredExpressionSchema.parse at line 47. The diff shows the parsed record has lost the inputs binding entirely, while the expected record still carries it.

Reported seed and path from one failing run: seed 1180135354, path [IP-1]:[IP-2].

Why it matters

Two separate problems. First, a test that fails one run in five will randomly fail CI and the verification workflow for changes that have nothing to do with expressions, which is how it was found. Second, the underlying behaviour looks worth a hard look on its own: a binding whose key collides with the prototype accessor name is silently dropped somewhere between captureDeferredBindings, the JSON round trip and the schema parse. Workflow inputs are attacker-influenced on webhook-triggered runs, so inconsistent handling of that key deserves scrutiny rather than a test tweak.

Suggested direction

Establish which layer drops the key before deciding the fix. If the schema or the capture helper should reject or normalise such a key, do that deliberately and assert it. Pinning the seed to make the test deterministic would hide the finding rather than resolve it.

02Bog Flow
OPENTRIAGEDIN PROGRESSSHIPPED+ 1 MOREASSIGNED+ 14 MOREREVIEW+ 2 MORECODE_CONFORMANCE_REVIEW+ 2 MORESESSION_SUMMARIZED

Shipped

9/21/2026, 4:40:44 PM

Click a lifecycle step above to view its details.

03Sludge Pulse
hammz assigned hammz9/21/2026, 4:12:43 PM

Sign in to post a ripple.