Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
373 commits
Select commit Hold shift + click to select a range
50ce3ff
SA walk: resume at the handler after an unmodelled exception
solid-eureka Oct 16, 2026
7f6aa4c
sa-soundness: handler resumption tasks
solid-eureka Oct 16, 2026
b3a08e7
Docs: handler resumption results
solid-eureka Oct 16, 2026
1568fec
Executor: report branch keys and stack changes in the trace
solid-eureka Oct 17, 2026
fc817ee
SA walk: detect desyncs by key and resync after losing the graph
solid-eureka Oct 17, 2026
66a5d02
Docs: branch keys, desync detection and resync
solid-eureka Oct 17, 2026
8f5505e
Remove handler resumption (covered by resync)
solid-eureka Oct 17, 2026
aa20dab
Mask library callbacks in the SA walk
solid-eureka Oct 17, 2026
8dab346
sa-soundness: library callback tasks; docs
solid-eureka Oct 17, 2026
d8289a7
sa-soundness: library-callback-assert (known false SAFE with SA)
solid-eureka Oct 17, 2026
6ced24e
Flag to turn off callback targets (--sa-no-callback-targets)
solid-eureka Oct 17, 2026
f6197d3
Key the solver's constraint cache by tree node, not iid
solid-eureka Oct 17, 2026
9046cd0
sa-soundness: exec-loop-iid-wrap
solid-eureka Oct 17, 2026
69c6b83
Keep Z3's jar off the extractor's classpath
solid-eureka Oct 17, 2026
98eb95d
SA walk: call sites with several callees (union in summaries, resync …
solid-eureka Oct 17, 2026
65aab6e
Docs: callback targets, multi-target calls, solver cache fix
solid-eureka Oct 17, 2026
604ba0a
Remove dead code left from the SA integration
solid-eureka Oct 17, 2026
8f0501b
Remove generated timing plot, ignore it
solid-eureka Oct 17, 2026
2f8e874
Merge remote-tracking branch 'origin/feat/witness-via-trace' into svc…
nils-loose Oct 18, 2026
e65dbe2
Merge #65 (static pre-analysis) into the integration branch
nils-loose Oct 18, 2026
f948cb0
Static pre-analysis: prune only under valid-assert and within main's …
nils-loose Oct 18, 2026
6eb7bff
SA walk: do not prune at a branch whose pairing could not be checked
nils-loose Oct 18, 2026
aa8a0ef
Tests for the pre-analysis guards and unchecked pairings
nils-loose Oct 18, 2026
45addc3
Encode NaN and signed zeros in FCMPG/FCMPL
nils-loose Oct 18, 2026
896cab9
Support Verifier.nondetObject in the SV-COMP instrumentation
nils-loose Oct 18, 2026
8f78f91
Re-solve a branch whose solution's run does not reach it
nils-loose Oct 18, 2026
42ac10b
Release the Database lock on exceptions and record traces that cannot…
nils-loose Oct 18, 2026
f83326f
End a failed or incomplete SV-COMP run with UNKNOWN
nils-loose Oct 18, 2026
58c15ae
Extract constraint variables without recursion, each subterm once
nils-loose Oct 18, 2026
373384d
Build and walk the execution tree iteratively; keep UNMODELLED_EXCEPT…
nils-loose Oct 18, 2026
e9ae9b0
Make the class name check descriptor-aware
nils-loose Oct 18, 2026
508db53
Add a static check for uncaught RuntimeExceptions and AssertionErrors
nils-loose Oct 18, 2026
2273466
Answer SAFE when the property pre-check proves the property
nils-loose Oct 18, 2026
c41571f
Test the property pre-check and the verdict it gives
nils-loose Oct 18, 2026
3445d64
Check only the static initializers that may run
nils-loose Oct 18, 2026
eaeb2d9
Continue the running symbolic execution in nested endpoints
nils-loose Oct 18, 2026
b09b432
Start the symbolic execution in the entry class's static initializer
nils-loose Oct 18, 2026
d0d7357
Close soundness gaps in the exception-freedom check
nils-loose Oct 18, 2026
de4930b
Report an assertion failure where its AssertionError is thrown
nils-loose Oct 18, 2026
cfdc451
Branch on the element a symbolic index selects in an object array
nils-loose Oct 18, 2026
cbd98d0
Hold the SA walk in place over choice branches
nils-loose Oct 18, 2026
9f0306e
Test the object-array index search in a forked agent
nils-loose Oct 18, 2026
f55b477
Decide precision loss by symbol kind instead of by name
nils-loose Oct 18, 2026
db4cd1e
Declare the approximate UF models and record their precision loss
nils-loose Oct 18, 2026
edf7764
Model Integer/Long bit operations and radix-2^k string conversions
nils-loose Oct 18, 2026
31aab84
Fix Short.compareUnsigned model to return the difference
nils-loose Oct 18, 2026
cf03553
Model Double.doubleToLongBits/doubleToRawLongBits, canonicalise NaN bits
nils-loose Oct 18, 2026
4ce61c0
Add spec comparing Integer/Long/Short/Byte/Double/Float models with t…
nils-loose Oct 18, 2026
506c20b
Return a concrete result from Objects.equals with a null operand
nils-loose Oct 18, 2026
0152059
Reproduce Java reference identity in the IF_ACMP rewrite
nils-loose Oct 18, 2026
6d51129
Downgrade SAFE on a reference semantic change
nils-loose Oct 18, 2026
1675424
Treat calls that a library default method may serve as unknown
nils-loose Oct 18, 2026
9358459
Model Math.round, max/min, signum, floorDiv and floorMod exactly
nils-loose Oct 18, 2026
adebf40
Model transcendental Math calls as per-call uninterpreted functions
nils-loose Oct 18, 2026
7141297
Slice UF definitions per query and bound queries over Math models
nils-loose Oct 18, 2026
ae1b9e5
Handle a StackOverflowError in the target as the plain JVM would
nils-loose Oct 18, 2026
db097ce
Do not report a violation of an execution that overflowed the stack
nils-loose Oct 18, 2026
22dce63
Build comparison results and Integer-to-bit-vector conversions over b…
nils-loose Oct 18, 2026
cba8042
Skip functions when reading input values from a model
nils-loose Oct 18, 2026
a33984a
Lower the default resource limit for queries over Math models to 2.5e8
nils-loose Oct 18, 2026
a8c403c
Encode bit-op and radix-string models without shared subterms
nils-loose Oct 18, 2026
c2a4c50
Model reference-only calls on JDK containers
nils-loose Oct 18, 2026
0f84f31
Make the String models match Java
nils-loose Oct 18, 2026
186d971
Make the StringBuilder model exact, and record the index checks of St…
nils-loose Oct 18, 2026
ae83736
Do not count the exactly defined String UFs as precision loss
nils-loose Oct 18, 2026
0df4738
Test that the String and StringBuilder models are exact
nils-loose Oct 18, 2026
1bca0a5
Model System.arraycopy with concrete positions and length
nils-loose Oct 18, 2026
5a33932
Test the JDK container and arraycopy models
nils-loose Oct 18, 2026
634d6f7
Solve comparisons over int_to_bv of string lengths and char codes ove…
nils-loose Oct 18, 2026
5d7de94
Extract constraint variables without recursion, each subterm once
nils-loose Oct 18, 2026
ee59502
Add choice branches: executor-added branches that enumerate an operan…
nils-loose Oct 18, 2026
4c79e69
Model Integer/Long toString and toUnsignedString with a radix
nils-loose Oct 18, 2026
3c8ea30
Fix the string of a negative long or short in concatenation
nils-loose Oct 18, 2026
b701046
Convert floats and doubles to their concrete string
nils-loose Oct 18, 2026
f4486e3
Solve program branches before choice branches
nils-loose Oct 18, 2026
942d66d
Remove the unused SVCompHandler
nils-loose Oct 18, 2026
a863ff5
Keep SV-COMP runs within the competition's memory and CPU budget
nils-loose Oct 18, 2026
2b6ba31
Test the number-to-string models against the JDK
nils-loose Oct 18, 2026
0269e0b
Run the executor JVM with the C1 compiler only
nils-loose Oct 18, 2026
a1c072c
Use the same resource budget in the competition package and the harness
nils-loose Oct 18, 2026
ab37625
Do not close the solver context at the end of an SV-COMP execution
nils-loose Oct 18, 2026
f67f39d
Encode the trace with one Z3 solver for all formulas, compact JSON
nils-loose Oct 18, 2026
d1ac405
Create the solver contexts with java-smt's null log manager
nils-loose Oct 18, 2026
2dcd94c
Run the executor JVM with C1 only
nils-loose Oct 18, 2026
e4305de
Select the next branch without copying the execution tree
nils-loose Oct 18, 2026
ac1a353
Keep the nested replace, as precision loss; model the constructor's c…
nils-loose Oct 18, 2026
9cd00a6
Fail the check when the JVM would not load the classpath as modelled
nils-loose Oct 18, 2026
ccd0536
Stop growing ClassDepot's cached hierarchy lists on every allocation
nils-loose Oct 18, 2026
1624541
Look up the reflected field by its name in Field.get
nils-loose Oct 18, 2026
81f8042
Store String[] rows created by ANEWARRAY into multi-dimensional arrays
nils-loose Oct 18, 2026
30be08f
Close constructor invokes left by an exception inside a constructor
nils-loose Oct 18, 2026
519c375
Resync a diverged primitive value with a context loss instead of halting
nils-loose Oct 18, 2026
3ee3cb4
Convert floats and doubles to strings concretely
nils-loose Oct 18, 2026
f6c0a51
Add agent tests for entry-method start, nested mains and constructor …
nils-loose Oct 18, 2026
339a71c
Encode NaN and signed zeros in FCMP and the compare/compareTo models
nils-loose Oct 18, 2026
a5740d7
Recheck only mutable map keys for symbolic state
nils-loose Oct 18, 2026
db0fff1
Merge remote-tracking branch 'origin/fix/exit-hides-assertion' into s…
nils-loose Oct 18, 2026
acd18e3
Merge remote-tracking branch 'origin/fix/sa-property-guard' into svco…
nils-loose Oct 18, 2026
d0addcf
Merge remote-tracking branch 'origin/fix/uf-detection-by-kind' into s…
nils-loose Oct 18, 2026
d7841dc
Merge remote-tracking branch 'origin/feat/property-aware-downgrade' i…
nils-loose Oct 18, 2026
dc34189
Merge remote-tracking branch 'origin/feat/collections-jdk-models' int…
nils-loose Oct 18, 2026
b1db004
Merge feat/symbolic-object-array-index (#69) into svcomp27/all-fixes
nils-loose Oct 18, 2026
08fcd4e
Count each stop of the resource budget once
nils-loose Oct 18, 2026
a5b76de
Merge feat/number-to-string-models (#76, includes #70) into svcomp27/…
nils-loose Oct 18, 2026
98e402a
Report loop-head states with the trace
nils-loose Oct 18, 2026
1a4e046
Leave out branches below a repeated loop-head state
nils-loose Oct 18, 2026
b138c9d
Enable loop-state matching in the SV-COMP configuration
nils-loose Oct 18, 2026
44a5a24
Bound the time a run spends on loop-head states
nils-loose Oct 18, 2026
6ce97bf
Merge fix/explorer-robustness (#72) into svcomp27/all-fixes
nils-loose Oct 18, 2026
92e8fd1
Give the driver robustness tests a property pre-check
nils-loose Oct 18, 2026
67d6dbe
Merge feat/diverged-branch-retry (#74) into svcomp27/all-fixes
nils-loose Oct 18, 2026
f5eeefb
Adapt the divergence and driver tests to the combined driver
nils-loose Oct 18, 2026
cae0290
Merge fix/string-model-soundness (#75) into svcomp27/all-fixes
nils-loose Oct 18, 2026
358e06f
Merge fix/stackoverflow-handling (#78) into svcomp27/all-fixes
nils-loose Oct 18, 2026
f6624c6
Keep a stack overflow of a trace that could not be added
nils-loose Oct 18, 2026
d1f7ad6
Merge fix/ref-equality-semantics (#79) into svcomp27/all-fixes
nils-loose Oct 18, 2026
d757d7f
Test variable extraction on shared and deep constraint terms
nils-loose Oct 19, 2026
929b11a
End the run when a Z3 query outgrows the memory budget
nils-loose Oct 19, 2026
a29e2b5
Merge feat/math-models (#80) into svcomp27/all-fixes
nils-loose Oct 19, 2026
5c2225e
Declare the sampled Math functions as approximate model functions
nils-loose Oct 19, 2026
65fdc4b
Merge perf/solver-encoding (#81) into svcomp27/all-fixes
nils-loose Oct 19, 2026
1f5f3b0
Merge perf/round-overhead (#82) into svcomp27/all-fixes
nils-loose Oct 19, 2026
f262d4d
See a given-up branch's later-reached side on the tree's node
nils-loose Oct 19, 2026
fbea4c1
Model StringBuffer, case mappings, ignore-case comparisons and simple…
nils-loose Oct 19, 2026
80ce0f0
Model parsing numbers from Strings exactly, with NumberFormatExceptio…
nils-loose Oct 19, 2026
8f36a25
Test that the number parsing models are exact
nils-loose Oct 19, 2026
d80f610
Merge feat/parse-number-models (#83, based on #75) into svcomp27/all-…
nils-loose Oct 19, 2026
925ce9e
Count the CPU time of the whole cgroup against the budget
nils-loose Oct 19, 2026
80287c7
Log the per-node trace of the branch selection below DEBUG
nils-loose Oct 19, 2026
3e3d367
Pass the explorer's output through in run_swat.py
nils-loose Oct 19, 2026
ef7c0ac
Model case mappings and ignore-case comparisons for ASCII strings only
nils-loose Oct 19, 2026
d6a6d21
Keep the module loggers' DEBUG/INFO lines off stdout in sv-comp mode
nils-loose Oct 19, 2026
22e3844
Count a symbolic array length as symbolic
nils-loose Oct 19, 2026
ca0f2a5
Stop reporting loop states after a call into untracked code
nils-loose Oct 19, 2026
730db3a
Add loop-state matching soundness tasks
nils-loose Oct 19, 2026
637b685
Report UNKNOWN for an SV-COMP round in which the target sent no trace
nils-loose Oct 19, 2026
008110b
Add an end-to-end test for targets that fail before main
nils-loose Oct 19, 2026
193fc2b
Cover the competition package wrapper in the failed-start test
nils-loose Oct 19, 2026
4977c74
Merge fix/executor-small-bugs (#86) into svcomp27/all-fixes
nils-loose Oct 19, 2026
bf21183
Leave toLowerCase/toUpperCase of symbolic strings unmodelled; pin bef…
nils-loose Oct 19, 2026
0b601b2
Merge fix/resource-budget (#88) into svcomp27/all-fixes
nils-loose Oct 19, 2026
403985d
Give the driver tests the resource budget and the Database reads
nils-loose Oct 19, 2026
0ff4068
Merge fix/failed-start-unknown (#89) into svcomp27/all-fixes
nils-loose Oct 19, 2026
afd150f
Report UNKNOWN for a failed start also when the pre-check proved the …
nils-loose Oct 19, 2026
29b8c03
Test equalsIgnoreCase of two symbolic strings under its branches
nils-loose Oct 19, 2026
c373130
Merge feat/string-models-2 (#90, based on #75) into svcomp27/all-fixes
nils-loose Oct 19, 2026
4b33c36
Mark the number-parsing branches as checks or splits
nils-loose Oct 19, 2026
d1b8fb8
Merge feat/loop-state-matching (#84) into svcomp27/all-fixes
nils-loose Oct 19, 2026
c89050b
Prune only the dominated subtree in the iterative walk; attach loop s…
nils-loose Oct 19, 2026
54a2c21
Update Z3 to 5.3.1 in the executor and the explorer
nils-loose Oct 20, 2026
09c4552
Update ASM, Jackson, logback, SLF4J, Spock and Mockito
nils-loose Oct 20, 2026
0fc33f3
Update Gradle to 8.14.6 and the build plugins
nils-loose Oct 20, 2026
5cdec5c
Update the Python dependencies
nils-loose Oct 20, 2026
57413b5
Update the GitHub Actions used by CI
nils-loose Oct 20, 2026
f2d8115
Keep Z3's previous regex solver in the explorer
nils-loose Oct 20, 2026
534c182
SV-COMP 2027 version (#92)
nils-loose Oct 20, 2026
15ab838
Fix SV-COMP packaging of the single-file jar artifact; report the pac…
nils-loose Oct 20, 2026
2bd2bbf
Merge pull request #94 from SWAT-project/fix/package-flat-artifact
nils-loose Oct 20, 2026
2ae41c2
Embed bundled third-party component list in executor jar
nils-loose Oct 20, 2026
8764492
Add THIRD-PARTY-LICENSES.md generator for the SV-COMP package
nils-loose Oct 20, 2026
7f2a47d
Generate THIRD-PARTY-LICENSES.md when packaging, drop stale HTML report
nils-loose Oct 20, 2026
209cc0e
Merge pull request #95 from SWAT-project/chore/third-party-licenses
nils-loose Oct 20, 2026
0eb83cd
Add optional executor phase profile (-Dswat.profile=<file>)
nils-loose Oct 20, 2026
18800d8
Transformers return null for classes they do not change
nils-loose Oct 20, 2026
004231a
Send the trace with HttpURLConnection instead of HttpClient
nils-loose Oct 20, 2026
fdf08f0
Share the executor's classes across rounds with an AppCDS archive
nils-loose Oct 20, 2026
fe6fa18
Profile: split premain into handler setup, thread context, input retr…
nils-loose Oct 20, 2026
a5997f2
Run ASM's CheckClassAdapter only if instrumentation.checkClassAdapter…
nils-loose Oct 20, 2026
1a67f8b
Solve floating-point queries with Z3's qffp tactic first
nils-loose Oct 21, 2026
24219f2
Lift char codes as Java chars when the query only holds Java chars
nils-loose Oct 21, 2026
c1f1456
Merge perf/executor-round-cost into svcomp27/overnight-solver-perf
nils-loose Oct 21, 2026
b845782
Merge perf/qffp-fp-tactic into svcomp27/overnight-solver-perf
nils-loose Oct 21, 2026
3f7e46f
Merge perf/char-code-bmp-lifting into svcomp27/overnight-solver-perf
nils-loose Oct 21, 2026
f0745f9
Update my-example-2
solid-eureka Oct 23, 2026
b38d0ee
Lift chars widened to int in the int_to_bv lifting
solid-eureka Oct 23, 2026
4fc51e1
Faster indexOf(int) encoding; keep surrogates in string literals
solid-eureka Oct 23, 2026
23a4f62
Use Z3 5.3.1 in the SV-COMP harness and the OpenOLAT target
solid-eureka Oct 24, 2026
d75d7a3
Solve int inputs that are only used as numbers over the Integers
solid-eureka Oct 24, 2026
177efe8
Add --search-order: shallow, coverage and generational branch orders
solid-eureka Oct 24, 2026
19cd69a
Add --prefer-short-strings: shrink string inputs of a solution
solid-eureka Oct 24, 2026
28b8a38
Run the property pre-check from cfg-extraction (#93)
solid-eureka Oct 24, 2026
0313fca
Ship the property pre-check jar in the SV-COMP archive (#93)
solid-eureka Oct 24, 2026
90ca67a
Cut the exception side of guards that cannot raise (#93)
solid-eureka Oct 24, 2026
d2e0aa0
Prune by the graph under no-runtime-exception too (#93)
solid-eureka Oct 24, 2026
6344bd3
Flag the branches of SWAT's helpers like callbacks
solid-eureka Oct 24, 2026
64c5174
Static pre-analysis for the HTTP driver
solid-eureka Oct 24, 2026
79322f9
Raw request bodies in the HTTP driver; no halt on a diverged String
solid-eureka Oct 24, 2026
25419d3
Report AssertionErrors where thrown for Spring endpoints
solid-eureka Oct 24, 2026
7fea52e
target-1: inserted bug in /e1/depth/5 for the SA experiments
solid-eureka Oct 24, 2026
15a42c6
Keep null String and boxed endpoint parameters
solid-eureka Oct 24, 2026
9911eb5
HTTP driver: sendable strings, and no hang when the driver fails
solid-eureka Oct 24, 2026
2461858
personal-finance-engine-v2: switchable inserted bugs for the SA exper…
solid-eureka Oct 24, 2026
db0b69b
HTTP mode: take static initializers out of the traces
solid-eureka Oct 24, 2026
61e8dfb
SA experiment campaign; switchable bugs in optaplanner-spring
solid-eureka Oct 24, 2026
e9f0b88
Report the branches of inlined list lifting like a SWAT helper's
solid-eureka Oct 24, 2026
3287a51
Campaign: bug-free case for the transaction filter endpoint
solid-eureka Oct 25, 2026
927ee10
Results of the SA experiments on the applications
solid-eureka Oct 25, 2026
db657fc
Note the work on relevance (slicing) and later loop summarization
solid-eureka Oct 26, 2026
37cef25
swat-benchmarks: relevance and relevance-soundness suites
solid-eureka Oct 26, 2026
4e884b1
Relevance analysis: do not flip branches that cannot affect a target
solid-eureka Oct 26, 2026
62ce5ae
Relevance: a statement that may throw somewhere that matters is a branch
solid-eureka Oct 26, 2026
3b8f4dc
Slicing: solve the full query first, the sliced one where it has no m…
solid-eureka Oct 26, 2026
8a1c51b
Document the relevance analysis: results, where it helps, design notes
solid-eureka Oct 26, 2026
1f0166d
Document the relevance limitations (library state, context) and their…
solid-eureka Oct 26, 2026
62b8c95
swat-benchmarks: loop-summary and loop-summary-soundness suites
solid-eureka Oct 26, 2026
9a233cd
Loop summaries: merge diamonds and counting loops into formulas
solid-eureka Oct 26, 2026
6283feb
Loop summaries: only merge values that stay symbolic
solid-eureka Oct 26, 2026
8f86b67
Document loop summarization: results, where it helps, the concretizat…
solid-eureka Oct 26, 2026
bcac538
End deadlocked runs, and stop at a wall-clock deadline
solid-eureka Oct 26, 2026
cb26a46
Loop summaries for counting loops whose bodies do other things too
solid-eureka Oct 26, 2026
3c43ae7
Prefer small models over extreme ones
solid-eureka Oct 26, 2026
895deaa
prefer_small: tolerate solutions of any shape
solid-eureka Oct 26, 2026
4dabcb6
Loop summaries: nested conditions, division by constants, inclusive b…
solid-eureka Oct 26, 2026
cc607da
Document the loop summary next steps, small models and deadlocks
solid-eureka Oct 26, 2026
b319354
Explorer tests: driver fixtures for slicing and projected divergence
solid-eureka Oct 27, 2026
71f1768
Pin cfg-extraction v0.2.0 (data-flow facts for relevance)
solid-eureka Oct 27, 2026
0746098
CI: check out cfg-extraction without a token (#93)
solid-eureka Oct 27, 2026
1ada655
Bring swat-debug.cfg up-to-date with sv-comp.cfg
solid-eureka Oct 28, 2026
359db51
Cleaner console log: explorer DEBUG only in the log files, no double …
solid-eureka Oct 28, 2026
d38fe31
Log traces as DEBUG
solid-eureka Oct 28, 2026
41d70f2
Console log: executor lines with their own timestamp only; live output
solid-eureka Oct 28, 2026
27d7720
Log possible branch IDs as DEBUG
solid-eureka Oct 28, 2026
18de9b1
Write the verdict to verdict.log
solid-eureka Oct 28, 2026
c17c0ef
Remove ThreadHandler's unused global Z3 context (fixes #110)
solid-eureka Oct 28, 2026
2966bc3
Remove ThreadHandler's unused global Z3 context (fixes #110)
solid-eureka Oct 28, 2026
52a8040
Remove ThreadHandler's unused global Z3 context (fixes #110)
solid-eureka Oct 28, 2026
4e8d6b2
Remove ThreadHandler's unused global Z3 context (fixes #110)
solid-eureka Oct 28, 2026
6c4b590
Add comments
solid-eureka Nov 1, 2026
3f2dfa4
dfs: drop the UNMODELLED_EXCEPTION special-node case
solid-eureka Nov 1, 2026
d14b845
SA walk: one vocabulary, fewer special cases
solid-eureka Nov 1, 2026
04a0ae5
dfs: one branch per role; test the walk counts; HTTP stats record the…
solid-eureka Nov 1, 2026
bcca759
StrategyService logs to explorer.log; a shorter walk line
solid-eureka Nov 1, 2026
56fe56a
Type the SA code fully; it passes mypy
solid-eureka Nov 2, 2026
66da216
Merge pull request #109 from SWAT-project/niklas/relevance-slicing
solid-eureka Nov 2, 2026
f6c0d20
Merge svcomp27/overnight-solver-perf into dev
solid-eureka Nov 2, 2026
eb00840
Merge niklas/dev into dev
solid-eureka Nov 2, 2026
323f09e
Make --search-order coverage the default
solid-eureka Nov 3, 2026
8c8394a
Merge niklas/coverage-default into dev: --search-order coverage by de…
solid-eureka Nov 3, 2026
2a9ea29
SampledMath: sample the edges of the double and integral ranges
solid-eureka Nov 3, 2026
08e7a41
SV-COMP archive: ship and run the static pre-analysis
solid-eureka Nov 3, 2026
b24964c
cfg-extraction.ref: v0.2.1 (fat jar with component list, no GPL graph4j)
solid-eureka Nov 3, 2026
15759c0
Merge niklas/svcomp-sa-package into dev: the SV-COMP archive runs the…
solid-eureka Nov 3, 2026
41f4072
Loop-head states: Class.desiredAssertionStatus does not stop them
solid-eureka Nov 3, 2026
c8cdcc2
Prefer small models for floating-point inputs too
solid-eureka Nov 3, 2026
9eeba98
Model floating-point % symbolically (it was silently concrete)
solid-eureka Nov 3, 2026
4caea36
Cap the resource limit of bounded re-solves
solid-eureka Nov 3, 2026
2ff390a
Size the limit of bounded re-solves by the branch's own query
solid-eureka Nov 3, 2026
5a0b895
CLAUDE.md: small models for doubles, approximate models, loop-head st…
solid-eureka Nov 3, 2026
8da25d3
Merge dev into niklas/dev: the SV-COMP archive runs the static pre-an…
solid-eureka Nov 4, 2026
64b9038
Merge niklas/dev into dev: approximate-model and loop-state fixes
solid-eureka Nov 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
210 changes: 195 additions & 15 deletions .github/workflows/gradle.yml
Original file line number Diff line number Diff line change
Expand Up @@ -3,45 +3,225 @@ name: Java CI with Gradle
on:
push:
pull_request:
workflow_dispatch:

env:
# Python of the SV-COMP execution environment (SV-COMP 2027: Ubuntu 26.04).
SVCOMP_PYTHON_VERSION: '3.14'
SVCOMP_BASE_IMAGE: docker.io/ubuntu:26.04

jobs:
build:
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Prepare Solver Dependencies
run: ./gradlew copyNativeLibs
- name: Build
run: ./gradlew build -x test
run: ./gradlew --no-daemon build -x test
# The property pre-check (svcomp/PropertyPreCheck.py) and the static pre-analysis
# (svcomp/StaticPreAnalysis.py) come from cfg-extraction; SWAT pins the cfg-extraction ref it
# ships in cfg-extraction.ref.
- name: Read pinned cfg-extraction ref
id: cfg
run: echo "ref=$(tr -d '[:space:]' < cfg-extraction.ref)" >> "${GITHUB_OUTPUT}"
- name: Check out cfg-extraction
uses: actions/checkout@v7
with:
repository: SWAT-project/cfg-extraction
ref: ${{ steps.cfg.outputs.ref }}
path: cfg-extraction
- name: Build the property pre-check and the static pre-analysis
working-directory: cfg-extraction
run: ./gradlew --no-daemon precheckJar fatJar
- name: Upload JARs
uses: actions/upload-artifact@v7
with:
name: release-jars-${{ github.sha }}
path: |
symbolic-executor/lib/symbolic-executor.jar
cfg-extraction/build/libs/cfg-extractor-precheck.jar
cfg-extraction/build/libs/cfg-extractor-1.0-SNAPSHOT-all.jar
if-no-files-found: error
retention-days: 1

package:
needs: build
if: >-
github.event_name == 'pull_request' ||
github.event_name == 'workflow_dispatch' ||
(github.event_name == 'push' && (
github.ref == 'refs/heads/main' ||
github.ref == 'refs/heads/dev' ||
startsWith(github.ref, 'refs/tags/')
))
runs-on: ubuntu-24.04
permissions:
contents: read
outputs:
channel: ${{ steps.meta.outputs.channel }}
zip-name: ${{ steps.meta.outputs.zip-name }}
rolling: ${{ steps.meta.outputs.rolling }}
prerelease: ${{ steps.meta.outputs.prerelease }}
artifact-name: ${{ steps.meta.outputs.artifact-name }}
steps:
- uses: actions/checkout@v7
- name: Download JARs
uses: actions/download-artifact@v8
with:
name: release-jars-${{ github.sha }}
path: ${{ runner.temp }}/release-jars
- name: Determine release channel
id: meta
run: |
ref_type="${GITHUB_REF_TYPE}"
ref_name="${GITHUB_REF_NAME}"
sha_short="${GITHUB_SHA::7}"

channel="" # release/tag name; empty -> build artifact only, no release
release="false"
rolling="false" # rolling channels move their tag to the current commit
prerelease="false"

if [[ "$ref_type" == "tag" ]]; then
channel="$ref_name"
release="true"
elif [[ "$ref_name" == "main" ]]; then
channel="latest"
release="true"
rolling="true"
elif [[ "$ref_name" == "dev" ]]; then
channel="latest-dev"
release="true"
rolling="true"
prerelease="true"
fi

# Channel-stable asset name gives the nightly cron a fixed download URL;
# the exact commit is recorded in the release notes and BUILD_INFO.txt.
if [[ -n "$channel" ]]; then
version="$channel"
else
version="$sha_short"
fi
zip_name="swat-svcomp-${version}.zip"

{
echo "channel=${channel}"
echo "version=${version}"
echo "zip-name=${zip_name}"
echo "artifact-name=swat-svcomp-${version}"
echo "release=${release}"
echo "rolling=${rolling}"
echo "prerelease=${prerelease}"
} >> "${GITHUB_OUTPUT}"
- name: Build SV-COMP Python runtime
env:
SWAT_SVCOMP_PYTHON_VERSION: ${{ env.SVCOMP_PYTHON_VERSION }}
run: scripts/build-svcomp-python-runtime.sh "${RUNNER_TEMP}/svcomp-python"
- name: Pack SV-COMP ZIP
env:
SWAT_SVCOMP_VERSION: ${{ steps.meta.outputs.version }}
SWAT_SVCOMP_ARTIFACT_DIR: ${{ runner.temp }}/release-jars
SWAT_SVCOMP_PYTHON_DIR: ${{ runner.temp }}/svcomp-python
SWAT_SVCOMP_COMMIT: ${{ github.sha }}
SWAT_SVCOMP_REF: ${{ github.ref_name }}
SWAT_SVCOMP_CHANNEL: ${{ steps.meta.outputs.channel }}
run: scripts/package-svcomp.sh
- name: Check SV-COMP ZIP in competition base image
run: scripts/check-svcomp-package.sh "build/distributions/${{ steps.meta.outputs.zip-name }}" "${SVCOMP_BASE_IMAGE}"
- name: Upload SV-COMP ZIP artifact
uses: actions/upload-artifact@v7
with:
name: ${{ steps.meta.outputs.artifact-name }}
path: build/distributions/${{ steps.meta.outputs.zip-name }}
if-no-files-found: error

publish-release:
needs: package
if: >-
github.event_name == 'push' && (
github.ref == 'refs/heads/main' ||
github.ref == 'refs/heads/dev' ||
startsWith(github.ref, 'refs/tags/')
)
runs-on: ubuntu-latest
permissions:
contents: write
steps:
- name: Download SV-COMP ZIP artifact
uses: actions/download-artifact@v8
with:
name: ${{ needs.package.outputs.artifact-name }}
path: ${{ runner.temp }}/svcomp-package
- name: Publish release
env:
GH_TOKEN: ${{ github.token }}
GH_REPO: ${{ github.repository }}
CHANNEL: ${{ needs.package.outputs.channel }}
ZIP_NAME: ${{ needs.package.outputs.zip-name }}
ROLLING: ${{ needs.package.outputs.rolling }}
PRERELEASE: ${{ needs.package.outputs.prerelease }}
run: |
zip_path="${RUNNER_TEMP}/svcomp-package/${ZIP_NAME}"
notes="$(printf 'Automated SWAT SV-COMP package.\n\nRef: %s\nCommit: %s\nRun: %s/%s/actions/runs/%s\n' \
"$GITHUB_REF_NAME" "$GITHUB_SHA" "$GITHUB_SERVER_URL" "$GITHUB_REPOSITORY" "$GITHUB_RUN_ID")"

prerelease_flag=()
[[ "$PRERELEASE" == "true" ]] && prerelease_flag=(--prerelease)

if [[ "$ROLLING" == "true" ]]; then
# Refresh the rolling channel: drop the old release + tag, then recreate
# it at the current commit so the tag always tracks the channel head.
# Uses the default GITHUB_TOKEN, so the new tag does not retrigger CI.
gh release delete "$CHANNEL" --yes --cleanup-tag 2>/dev/null || true
gh release create "$CHANNEL" "$zip_path" \
--target "$GITHUB_SHA" \
--title "SWAT ${CHANNEL} (${GITHUB_SHA::7})" \
--notes "$notes" \
"${prerelease_flag[@]}"
else
# Permanent, version-tagged release (the tag already points at this commit).
if gh release view "$CHANNEL" >/dev/null 2>&1; then
gh release upload "$CHANNEL" "$zip_path" --clobber
else
gh release create "$CHANNEL" "$zip_path" \
--title "SWAT ${CHANNEL}" \
--notes "$notes" \
"${prerelease_flag[@]}"
fi
fi

test:
needs: build
runs-on: ubuntu-latest
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Copy Z3
run: ./gradlew copyNativeLibs
- name: Test
run: ./gradlew test
- name: Upload test reports
if: failure()
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: test-reports
path: symbolic-executor/build/reports/tests
Expand All @@ -53,18 +233,18 @@ jobs:
permissions:
contents: read
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Gradle
uses: gradle/actions/setup-gradle@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
- name: Generate Javadoc
run: ./gradlew :symbolic-executor:javadoc
- name: Upload Javadoc
uses: actions/upload-artifact@v4
uses: actions/upload-artifact@v7
with:
name: javadoc
path: symbolic-executor/build/docs/javadoc
Expand All @@ -75,11 +255,11 @@ jobs:
permissions:
contents: write
steps:
- uses: actions/checkout@v5
- uses: actions/checkout@v7
- name: Set up JDK 17
uses: actions/setup-java@v4
uses: actions/setup-java@v6
with:
java-version: '17'
distribution: 'temurin'
- name: Generate and submit dependency graph
uses: gradle/actions/dependency-submission@017a9effdb900e5b5b2fddfb590a105619dca3c3 # v4
uses: gradle/actions/dependency-submission@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
9 changes: 8 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@ targets/applications/openolat/libs/z3/
**/logs/
**/logs-debug/
**/results/
**/runs/
**/runs-debug/
**/*.class
/build/
**/build/
Expand All @@ -21,13 +23,18 @@ libs/jacoco/report
targets/applications/openhospital/oh_build/restler_working_dir/Compile
targets/applications/openhospital/oh_build/restler_working_dir/RestlerResults
targets/sv-comp/sv-benchmarks/
targets/sv-comp/sv-benchmarks-*/
targets/sv-comp/wit4java/
**/__pycache__
**/.venv/*
/.vscode/
**/smt_files/
**/witness/
# ... but not the witness packages of the executor sources
!symbolic-executor/src/**/witness/
**/sv-comp/results/
**/analysis/
!targets/sv-comp/scripts/lib/analysis
libs/cfg-extractor/cfg-extractor-1.0-SNAPSHOT.jar
libs/cfg-extractor/cfg-extractor-1.0-SNAPSHOT.jar
# Default output of targets/sv-comp/scripts/plot_timing_comparison.py
timing_comparison.png
Loading