Skip to content

Commit d15e61c

Browse files
Extend trace by few levels of actions to make the explorer work (#320)
Co-authored-by: jayaprabhakar <jayaprabhakar@gmail.com>
1 parent ff9fc54 commit d15e61c

3 files changed

Lines changed: 28 additions & 0 deletions

File tree

fizz

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,7 @@ copy_ast=true
4646
output_dir=""
4747
trace_file=""
4848
trace_string=""
49+
trace_extend=0
4950
preinit_hook_file=""
5051
preinit_hook_string=""
5152

@@ -105,6 +106,15 @@ while [[ "$1" =~ ^- ]]; do
105106
usage
106107
fi
107108
;;
109+
--trace-extend )
110+
if [[ -n "$2" ]] && [[ "$2" =~ ^[0-9]+$ ]]; then
111+
trace_extend="$2"
112+
shift 2
113+
else
114+
echo "Error: --trace-extend requires a numeric value." 1>&2
115+
usage
116+
fi
117+
;;
108118
--preinit-hook-file )
109119
if [[ -n "$2" ]]; then
110120
preinit_hook_file="$2"
@@ -211,6 +221,9 @@ fi
211221
if [ -n "$trace_string" ]; then
212222
args+=("--trace" "$trace_string")
213223
fi
224+
if [ "$trace_extend" -ne 0 ]; then
225+
args+=("--trace-extend" "$trace_extend")
226+
fi
214227
if [ -n "$preinit_hook_file" ]; then
215228
args+=("--preinit-hook-file" "$preinit_hook_file")
216229
fi

main.go

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ var traceFile string
3434
var preinitHookFile string
3535
var trace string
3636
var preinitHook string
37+
var traceExtend int
3738

3839
var isTest bool
3940

@@ -543,6 +544,12 @@ func modelCheckSingleSpec(f *ast.File, stateConfig *ast.StateSpaceOptions, dirPa
543544
}
544545
}
545546

547+
// Set trace extension depth if configured
548+
if guidedTrace != nil && traceExtend > 0 {
549+
guidedTrace.ExtendDepth = traceExtend
550+
fmt.Printf("Trace will extend %d action(s) beyond the guided path\n", traceExtend)
551+
}
552+
546553
// Resolve preinit hook content (either from file or string)
547554
var preinitHookContentResolved string
548555
if preinitHookFile != "" {
@@ -848,6 +855,7 @@ func parseFlags() []string {
848855
flag.StringVar(&traceFile, "trace-file", "", "Path to trace file for guided execution")
849856
flag.StringVar(&preinitHookFile, "preinit-hook-file", "", "Path to Starlark file to execute after preinit but before freezing globals")
850857
flag.StringVar(&trace, "trace", "", "Trace content as a string for guided execution (multiline supported)")
858+
flag.IntVar(&traceExtend, "trace-extend", 0, "After trace ends, explore this many additional action depths (0 = stop at trace end)")
851859
flag.StringVar(&preinitHook, "preinit-hook", "", "Starlark code as a string to execute after preinit but before freezing globals (multiline supported)")
852860
flag.BoolVar(&isTest, "test", false, "Testing mode (prevents printing timestamps and other non-deterministic behavior. Default=false")
853861
flag.Parse()

modelchecker/trace.go

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@ import (
1111
type GuidedTrace struct {
1212
LinkNames []string
1313
currentIndex int
14+
ExtendDepth int // How many actions to explore after trace ends (0 = stop)
15+
extendedCount int // How many extended actions taken so far
1416
}
1517

1618
// parseTrace parses trace content from a scanner
@@ -114,6 +116,11 @@ func (p *Processor) ShouldScheduleNode(node *Node) bool {
114116

115117
// Check if trace is exhausted
116118
if node.guidedTrace.IsExhausted() {
119+
// Allow extension if configured
120+
if node.guidedTrace.ExtendDepth > 0 && node.guidedTrace.extendedCount < node.guidedTrace.ExtendDepth {
121+
node.guidedTrace.extendedCount++
122+
return true
123+
}
117124
return false
118125
}
119126

0 commit comments

Comments
 (0)