From 8a4cb57703845c1d8ffbc9318a4125818a72a545 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Tue, 12 May 2026 22:12:32 +0300 Subject: invert dependency: internal no longer imports internal/tui Introduce internal/runtime as a neutral contract package that both the core engine (internal) and the TUI layer (internal/tui) depend on. - internal/runtime: defines TraceStarter, StreamSource, EventSink, LiveTrieSource, SnapshotSource, ProbeManager, RuntimePublisher, RuntimeState, TraceRuntimeBindings, and all context key/helper functions (RuntimeBindingsFromContext, RuntimePublisherFromContext, ContextWithRuntimeBindings, ContextWithTraceFilters, TraceFiltersFromContext). These were previously defined in internal/tui, forcing the core package to import the TUI layer. - internal/streamrow: add RingBuffer (moved from internal/tui/eventstream) so the core tracing engine can use the ring buffer without importing the TUI layer. - internal/tui/eventstream/ringbuffer.go: change to a thin re-export of streamrow.RingBuffer via a type alias, preserving the existing API for all callers within the TUI layer. - internal/tui/tui.go: replace locally-defined interface declarations (TraceStarter, SnapshotSource, ProbeManager, RuntimePublisher, RuntimeState, TraceRuntimeBindings) with type aliases from internal/runtime. Delegate all context helper functions to runtime. - internal/ior.go, internal/ior_bpfsetup.go: remove imports of internal/tui and internal/tui/eventstream; use internal/runtime and internal/streamrow instead. Add SetTUIRunners injection point so the concrete TUI runner functions are wired in by cmd/ior/main.go. - cmd/ior/main.go: call internal.SetTUIRunners with the concrete TUI runner functions before internal.Run, completing the wiring without creating a cycle. - Test files (internal/ior_mode_test.go, internal/bench_pipeline_test.go): updated to use runtime.* and streamrow.* types in place of tui.* and eventstream.* types. Co-Authored-By: Claude Sonnet 4.6 --- cmd/ior/main.go | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'cmd') diff --git a/cmd/ior/main.go b/cmd/ior/main.go index ebd3ef3..9c5bac1 100644 --- a/cmd/ior/main.go +++ b/cmd/ior/main.go @@ -7,6 +7,7 @@ import ( "ior/internal" "ior/internal/flags" + "ior/internal/tui" ) // main is the entry point for the application. It checks if the OS is Linux, @@ -32,6 +33,15 @@ func main() { return } + // Wire the concrete TUI runner functions into the core internal package. + // This is the only place that imports both internal and internal/tui, which + // breaks the cycle: internal no longer imports internal/tui. + internal.SetTUIRunners( + tui.RunWithTraceStarterConfig, + tui.RunTestFlamesWithTraceStarterConfig, + tui.RunTestFlamesWithTraceStarterConfig, // same runner; starter differs (static vs live) + ) + // Run the internal logic of the application. if err := internal.Run(cfg); err != nil { fmt.Printf("Failed to run: %v\n", err) -- cgit v1.2.3