Skip to content

[TS PBT] Align property execution semantics - #386

Open
CaelmBleidd wants to merge 5 commits into
mainfrom
caelmbleidd/issue-384-property-contract
Open

CaelmBleidd wants to merge 5 commits into
mainfrom
caelmbleidd/issue-384-property-contract

Conversation

@CaelmBleidd

@CaelmBleidd CaelmBleidd commented Sep 7, 2026

Copy link
Copy Markdown
Member

Summary

This change gives concrete generation, examples, replay and shrinking one property execution contract, ready for downstream symbolic integration.

  • Use one isolated input graph per attempt, preserving positional special values, aliases within an invocation, and the original counterexample before predicate mutation.
  • Treat false preconditions as skips and discard-budget exhaustion as PRECONDITION_EXHAUSTED. Throwing and non-boolean preconditions are execution errors; even unreadable thrown values retain that classification.
  • Treat false or throwing predicates as candidate violations, and non-boolean results as contract errors. Preserve the first contract error throughout shrinking.
  • Use fast-check's total interruption budget for timeouts. User exceptions are classified independently of their message, so a predicate throwing Error('Property timeout: ...') remains a violation. Interrupted shrinking retains an already found counterexample.
  • Keep Kotlin result invariants and primitive-only constant domains aligned with the adapter.

Scope

This PR contains the #384 execution contract and FastCheck behavior only. It is based on main, which already contains #350. PR #387 owns the dependent #351/#352 symbolic projection and search.

Validation

  • ./gradlew :usvm-ts-pbt:check :usvm-ts-pbt:installDist :usvm-ts-pbt:detektMain :usvm-ts-pbt:detektTest: passed, 193 JVM tests, 59 adapter tests, no Detekt findings.
  • New regressions reproduced the two exception-classification failures before their fixes and pass afterward, including sync/async paths and the Kotlin transport boundary.
  • git diff --check: passed.
  • CI run 35274293374: all six jobs passed. The unchanged JVM instrumentation dynamic timeout() test passed on one job rerun.

Closes #384

@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/issue-384-property-contract branch from 52e3db6 to 73cb437 Compare September 8, 2026 06:51
Base automatically changed from caelmbleidd/issue-350-property-ets-mapping to main September 8, 2026 12:12
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/issue-384-property-contract branch from 73cb437 to e250a3b Compare September 8, 2026 12:54
@CaelmBleidd CaelmBleidd changed the title [TS PBT][P0] Align and simplify property execution semantics [TS PBT] Integrate the property execution contract with USVM Sep 8, 2026
@CaelmBleidd
CaelmBleidd force-pushed the caelmbleidd/issue-384-property-contract branch from e250a3b to 174af1a Compare September 8, 2026 13:30
@CaelmBleidd CaelmBleidd changed the title [TS PBT] Integrate the property execution contract with USVM [TS PBT] Align property execution semantics Sep 8, 2026
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.

[TS PBT][P0] Align and simplify property execution semantics before integration

1 participant