Follow-ups from the independent review of #2616 (conduit run --dev hot-reload). All non-blocking; grouped for tracking.
-
Unbounded debouncer/goroutine growth per distinct filename. Watcher.consume creates one debouncer goroutine + map entry per distinct matching filename, living until ctx cancel. handleDeleted frees the filePipelines entry but not the debouncer. Bounded in realistic dev use (only matching files), so not a practical leak — but a long dev session that churns many distinct pipeline filenames grows monotonically. Consider retiring a debouncer when its file is deleted (idle + no pending).
-
--dev.json vs the repo-standard --json. The dev event stream is surfaced as --dev.json rather than --json. Defensible for a scoped streaming surface on a long-running run command, but it diverges from the "every command supports --json" convention. Decide: keep and document the rationale, or alias --json.
-
renderHuman omits ConfigPath. events.go captures ErrorInfo.ConfigPath for --dev.json but the human renderer never prints it — an operator watching the text stream loses the failing config path. Cheap to add.
Source: pkg/conduit/dev/{watcher.go,apply.go,events.go}.
Follow-ups from the independent review of #2616 (
conduit run --devhot-reload). All non-blocking; grouped for tracking.Unbounded debouncer/goroutine growth per distinct filename.
Watcher.consumecreates one debouncer goroutine + map entry per distinct matching filename, living until ctx cancel.handleDeletedfrees thefilePipelinesentry but not the debouncer. Bounded in realistic dev use (only matching files), so not a practical leak — but a long dev session that churns many distinct pipeline filenames grows monotonically. Consider retiring a debouncer when its file is deleted (idle + no pending).--dev.jsonvs the repo-standard--json. The dev event stream is surfaced as--dev.jsonrather than--json. Defensible for a scoped streaming surface on a long-runningruncommand, but it diverges from the "every command supports--json" convention. Decide: keep and document the rationale, or alias--json.renderHumanomitsConfigPath.events.gocapturesErrorInfo.ConfigPathfor--dev.jsonbut the human renderer never prints it — an operator watching the text stream loses the failing config path. Cheap to add.Source:
pkg/conduit/dev/{watcher.go,apply.go,events.go}.