Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
fc3256b
TLC as a resident service: open, budgeted check, typed traces, stats,…
kiranandcode Sep 21, 2026
933ec8a
GraphStore: keep every reached state, its first path, its predecessor…
kiranandcode Sep 21, 2026
056305c
Coverage as data and the run's registers
kiranandcode Sep 21, 2026
16a2de3
Incremental refresh: replay the store under an edited spec
kiranandcode Sep 21, 2026
a434ffd
Simulate mode: random behaviours with the action-pair follow matrix
kiranandcode Sep 21, 2026
69c5b4f
Cap counterexample traces per property under continuation
kiranandcode Sep 21, 2026
818ec9d
Refresh: replay only a complete store under an unchanged frame
kiranandcode Sep 22, 2026
7e6baef
Resident review fixes: stuttering traces, held pauses, <- substitutio…
kiranandcode Sep 22, 2026
a992b94
Resident review fixes: guard hooks, refresh base, store cost, tests
kiranandcode Sep 22, 2026
0d022e4
ValueOutputStream: restore CRLF line endings
kiranandcode Sep 22, 2026
3628ee9
Refresh review fixes: definition slots, parameter signatures, continu…
kiranandcode Sep 22, 2026
1f88aab
Resident review fixes: pause deadlock, capped reports, multi-worker t…
kiranandcode Sep 23, 2026
ba9f9ac
Resident review fixes: exact action pairing, stale coverage, lock-fre…
kiranandcode Sep 23, 2026
7e27e5f
Resident review fixes: unadopted replay on invariant errors, one susp…
kiranandcode Sep 23, 2026
4b783ba
Resident review fixes: no hang on a budget during init, full rerun on…
kiranandcode Sep 23, 2026
99d2bbf
Resident review fixes: evaluation failures are not violations, one tr…
kiranandcode Sep 23, 2026
aacc660
Resident review fixes: verdicts TLC skipped under continuation, viola…
kiranandcode Sep 23, 2026
a4f7657
Resident review fixes: excluded successors checked, queries off the c…
kiranandcode Sep 23, 2026
052a9c1
Resident review fixes: invariants skipped under continuation stay swe…
kiranandcode Sep 23, 2026
25ec10c
Resident review fixes: assumptions and implied inits on refresh, VIEW…
kiranandcode Sep 23, 2026
0724257
Resident review fixes: full rerun under VIEW or SYMMETRY, constraint-…
kiranandcode Sep 23, 2026
b6e3fc9
Resident review fixes: initial-state violations carry their state, wr…
kiranandcode Sep 23, 2026
87343e3
Resident review fixes: stale stats and registers after a refresh, cap…
kiranandcode Sep 23, 2026
8888ab6
Resident review fixes: a simulation that ends on an evaluation error …
kiranandcode Sep 23, 2026
660e761
Resident review fixes: model values kept across refreshes, stored sta…
kiranandcode Sep 24, 2026
d481701
Resident review fixes: path-dependent operators behind config substit…
kiranandcode Sep 24, 2026
7587f7e
Resident review fixes: an evaluation error under continuation is an e…
kiranandcode Sep 24, 2026
be9b51f
Resident tests: JSON-escape the spec path spliced into requests
kiranandcode Sep 24, 2026
d565c6d
ResidentInitBudgetTest: keep init under the FPSet eviction threshold
kiranandcode Sep 24, 2026
13390fa
GraphStore.dispose: retry the delete when Windows holds the file
kiranandcode Sep 24, 2026
4153da6
customBuild test: create target/GeneratedTESpecs before the JUnit runs
kiranandcode Sep 24, 2026
4f6c4cc
Resident.shutdown: remove the run's metadir too
kiranandcode Sep 24, 2026
9b42e24
Resident.shutdown: close the workers' trace files before deleting the…
kiranandcode Sep 24, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions tlatools/org.lamport.tlatools/customBuild.xml
Original file line number Diff line number Diff line change
Expand Up @@ -505,6 +505,10 @@
<echo>Running tests across ${threadLimit} threads</echo>
<!-- run junit tests -->
<mkdir dir="${test.reports}" />
<!-- Tests pass -teSpecOutDir target/GeneratedTESpecs, and a _TLCTrace
POSTCONDITION writes its .bin there before TLC creates the directory,
so a test that runs before any other has made it fails. -->
<mkdir dir="target/GeneratedTESpecs" />
<!-- First run unit tests which due to their nature cannot be run in parallel. -->
<junit
printsummary="yes"
Expand Down
39 changes: 39 additions & 0 deletions tlatools/org.lamport.tlatools/src/tlc2/TLCGlobals.java
Original file line number Diff line number Diff line change
Expand Up @@ -210,6 +210,45 @@ public static final boolean isCoverageEnabled() {
// Continue running even when invariant is violated
public static boolean continuation = false;

/**
* Basis: under continuation, regenerate and print at most this many
* counterexample traces per invariant or implied action (a trace is
* rebuilt by re-running the next-state relation from an initial state,
* which dominates a run whose invariant fails on most states). Further
* violations are still reported by message, so they are counted, but
* without a trace. Negative means no limit, as upstream.
*/
public static int continuationTraceLimit = -1;
private static final java.util.concurrent.ConcurrentHashMap<String, java.util.concurrent.atomic.AtomicInteger> continuationTraces = new java.util.concurrent.ConcurrentHashMap<>();

/** Whether a trace should still be printed for this property's violation. */
public static boolean continuationTraceAllowed(final String property) {
if (continuationTraceLimit < 0) {
return true;
}
final int n = continuationTraces.computeIfAbsent(property == null ? "" : property,
k -> new java.util.concurrent.atomic.AtomicInteger()).incrementAndGet();
return n <= continuationTraceLimit;
}

/**
* Whether the violation of this property being reported now will get no
* trace: TLC continues past violations and the property already printed
* as many traces as the limit allows. Read before
* {@link #continuationTraceAllowed} counts the report, under the same lock.
*/
public static boolean continuationTraceCapped(final String property) {
if (!continuation || continuationTraceLimit < 0) {
return false;
}
final java.util.concurrent.atomic.AtomicInteger n = continuationTraces.get(property == null ? "" : property);
return (n == null ? 0 : n.get()) >= continuationTraceLimit;
}

public static void resetContinuationTraces() {
continuationTraces.clear();
}

// Prints only the state difference in state traces
public static boolean printDiffsOnly = false;

Expand Down
Loading
Loading