Skip to content

Share PBT runtime reliability fixes with Calls - #413

Open
CaelmBleidd wants to merge 3 commits into
caelmbleidd/shared-ts-engine-infrastructurefrom
caelmbleidd/shared-ts-adapter-fixes
Open

CaelmBleidd wants to merge 3 commits into
caelmbleidd/shared-ts-engine-infrastructurefrom
caelmbleidd/shared-ts-adapter-fixes

Conversation

@CaelmBleidd

@CaelmBleidd CaelmBleidd commented Oct 1, 2026 •

Copy link
Copy Markdown
Member

PBT contains several runtime fixes that also apply to Calls and the shared FastCheck backend. This PR extracts those fixes on top of #412 without importing PBT campaign/search protocols.

  • Validate finite number tags against their actual IEEE-754 bits in Node and reuse one Kotlin validator for examples, manifests and decoding. NaN/infinity bits cannot bypass input checks with a finite tag.
  • Serialize Node protocol responses without consulting user-installed toJSON methods. An analyzed predicate can no longer replace or break the response by changing an inherited serializer.
  • Terminate interrupted subprocesses before returning while restoring the caller's interrupt flag. Use the bounded transport for the Node version probe, including output limits and cleanup; preserve its typed interruption diagnostic.
  • Reuse exact generated-module branch conversion with pinned source/module/map hashes, canonical source identities, mapping checks and ambiguity diagnostics. Add optional decoding budget checkpoints and a report byte limit; synchronous JSON parsing remains bounded but non-preemptible. Existing callers keep their timeout semantics.
  • Enable JacoDB [TS Calls] Build a real-project call census and model roadmap #367 cleanup in production frontend consumers (Calls source loading, model loading and census). Single-file Calls loading also removes completed or unreadable generated IR.
  • Retain the type of a thrown modeled Error or TypeError using the existing Calls runtime-type storage. Both new assertions failed with string before this fix. Keep the Calls constructor/storage models and existing fallback for other object exceptions.

The three commits separate protocol/numbers, process/coverage, and frontend/error integration. Review order: #391 → #410 → #394 → #409 → #412 → this PR.

Local validation with published JacoDB 86b07fc9fb and JDK 21:

  • Full :usvm-ts-fast-check:check :usvm-ts-pbt:check: 196 Kotlin tests and 77 Node tests passed.
  • Calls: all 43 existing symbolic-engine tests and two new frontend cleanup tests passed. The cleanup tests exercise single and multi-file conversion failures and IR decoding failures.
  • Error model: all six tests passed after reproducing both incorrect thrown types; subprocess tests passed again after the cleanup helper was refactored for lint.
  • Detekt main/test passed for the changed Kotlin modules; git diff --check passed.
  • The complete stack was temporarily merged with current main (53dce8f3, including [TS PBT] Align property execution semantics #386). The merge was conflict-free, and PBT/FastCheck checks plus Detekt passed: 207 Kotlin tests and 88 Node tests. That validation merge was then discarded; no merge commit was published.

Remote CI for b1c0c7df: https://github.com/UnitTestBot/usvm/actions/runs/36860002257 (running).

Sources include PBT commits 3011a138, ee0ff619, de1298c3, a416726b, 1895c251, 8c29d1ff, 48c5e169, and the narrow thrown-type part of 3ad57381. Campaign deadlines/outcomes, generated-observation lifecycle, candidate reduction and unfinished feature work remain in PBT. No campaign, corpus or manuscript result is changed. JacoDB #366 remains a separate open catch-binding fix and is not in the current dependency pin.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant