Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
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
160 changes: 0 additions & 160 deletions .argus-baseline.exs
Original file line number Diff line number Diff line change
Expand Up @@ -2,16 +2,6 @@
# design, with its reason. Checked by scripts/argus_baseline.exs (see its
# header for the workflow); prefer fixing a finding over adding it here.
[
%{
analysis: "coupling",
file: "lib/universal_proxy/application.ex",
title: "Coupled children under one_for_one",
at_label: "supervision tree defined here",
detail:
"UniversalProxy.ESPHome.EntityProvider registers with UniversalProxy.ESPHome.ConfigStore when it starts, and UniversalProxy.ESPHome.ConfigStore hands it to code outside the program, which may keep it. Both are children of the one_for_one supervisor UniversalProxy.Application, which restarts either alone. When UniversalProxy.ESPHome.ConfigStore restarts, its init/1 starts it afresh without what UniversalProxy.ESPHome.EntityProvider put there, and UniversalProxy.ESPHome.EntityProvider, which is not restarted with it, never registers again. When UniversalProxy.ESPHome.EntityProvider restarts, it registers a second time beside what its old process left.",
reason:
"False positive: ESPHome.ConfigStore.current/0 and device_config_opts/0 are reads of DETS-persisted config; ConfigStore keeps nothing about the caller and the 'handed on' call is Espex.DeviceConfig.detect_mac_address/0, a pure lookup. A ConfigStore restart loses no caller state."
},
%{
analysis: "coupling",
file: "lib/universal_proxy/application.ex",
Expand All @@ -22,16 +12,6 @@
reason:
"False positive: ESPHome.ConfigStore.current/0 and device_config_opts/0 are reads of DETS-persisted config; ConfigStore keeps nothing about the caller and the 'handed on' call is Espex.DeviceConfig.detect_mac_address/0, a pure lookup. A ConfigStore restart loses no caller state."
},
%{
analysis: "coupling",
file: "lib/universal_proxy/application.ex",
title: "Coupled children under one_for_one",
at_label: "supervision tree defined here",
detail:
"UniversalProxy.Storage.Server registers with UniversalProxy.ESPHome.ConfigStore when it starts, and UniversalProxy.ESPHome.ConfigStore hands it to code outside the program, which may keep it. Both are children of the one_for_one supervisor UniversalProxy.Application, which restarts either alone. When UniversalProxy.ESPHome.ConfigStore restarts, its init/1 starts it afresh without what UniversalProxy.Storage.Server put there, and UniversalProxy.Storage.Server, which is not restarted with it, never registers again. When UniversalProxy.Storage.Server restarts, it registers a second time beside what its old process left.",
reason:
"False positive: ESPHome.ConfigStore.current/0 and device_config_opts/0 are reads of DETS-persisted config; ConfigStore keeps nothing about the caller and the 'handed on' call is Espex.DeviceConfig.detect_mac_address/0, a pure lookup. A ConfigStore restart loses no caller state."
},
%{
analysis: "coupling",
file: "lib/universal_proxy/application.ex",
Expand Down Expand Up @@ -132,16 +112,6 @@
reason:
"False positive: the monitor at the flagged line is on the websocket (socket_monitor), demonitored with :flush in teardown_connection/2; the process terminated here is the linked Capture, which is not monitored."
},
%{
analysis: "startup",
file: "lib/universal_proxy/audio/input/store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.Audio.Input.Store.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "shutdown",
file: "lib/universal_proxy/audio/player.ex",
Expand Down Expand Up @@ -192,16 +162,6 @@
reason:
"Deliberate: the server's init/1 sweeps every child a previous incarnation left under the earlier DynamicSupervisor (which_children + terminate_child) before starting its own, so no orphan survives a server restart."
},
%{
analysis: "startup",
file: "lib/universal_proxy/audio/store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.Audio.Store.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "shutdown",
file: "lib/universal_proxy/bluetooth.ex",
Expand All @@ -222,26 +182,6 @@
reason:
"Deliberate (CLAUDE.md idiom): fire-and-forget work goes through UniversalProxy.TaskSupervisor for crash visibility. The task is short and meant to complete even if the caller goes away: restarting the ESPHome supervisor after a settings change must still happen if the caller (a LiveView or the Bluetooth manager) exits."
},
%{
analysis: "startup",
file: "lib/universal_proxy/bluetooth/manager.ex",
title: "init/1 makes a synchronous supervisor call",
at_label: "this call blocks init until the supervisor answers",
detail:
"UniversalProxy.Bluetooth.Manager.init/1 reaches Task.Supervisor.start_child on UniversalProxy.TaskSupervisor. Every supervisor management call is a GenServer.call into the supervisor; start_child in particular does not return until the new child's init/1 has, so those inits now run inside this one, on the tree's startup path. A child that calls back into UniversalProxy.Bluetooth.Manager, or into anything not yet started, deadlocks the boot; terminate_child waits for the whole shutdown of the child.",
reason:
"False positive: init/1 only stores &restart_esphome/0 in state (esphome_restart_fun); it is first invoked from handle_continue(:reconcile) and only on a paused-state change, never during init."
},
%{
analysis: "startup",
file: "lib/universal_proxy/bluetooth/settings.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.Bluetooth.Settings.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/btd700/server.ex",
Expand All @@ -252,16 +192,6 @@
reason:
"Deliberate: init/1 starts a worker per device already present under the WorkerSupervisor, an earlier sibling that is already running. BTD700.DeviceWorker.init/1 only builds state and returns {:continue, :initialize}, deferring all device I/O to handle_continue/2, and never calls back into this server, so the synchronous start_child cannot deadlock or stall the boot."
},
%{
analysis: "startup",
file: "lib/universal_proxy/btd700/store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.BTD700.Store.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "shutdown",
file: "lib/universal_proxy/esphome.ex",
Expand All @@ -272,16 +202,6 @@
reason:
"Deliberate (CLAUDE.md idiom): fire-and-forget work goes through UniversalProxy.TaskSupervisor for crash visibility. The task is short and meant to complete even if the caller goes away: restarting the ESPHome supervisor after a settings change must still happen if the caller (a LiveView or the Bluetooth manager) exits."
},
%{
analysis: "startup",
file: "lib/universal_proxy/esphome/config_store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.ESPHome.ConfigStore.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/esphome/infrared/server.ex",
Expand All @@ -292,26 +212,6 @@
reason:
"Deliberate: init/1 starts a worker per device already present under the WorkerSupervisor, an earlier sibling that is already running. The IRDroid DeviceWorker.init/1 only builds state and returns {:continue, :initialize}, deferring all device I/O to handle_continue/2, and never calls back into this server, so the synchronous start_child cannot deadlock or stall the boot."
},
%{
analysis: "startup",
file: "lib/universal_proxy/esphome/psk_store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.ESPHome.PskStore.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/firmware_update/config_store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.FirmwareUpdate.ConfigStore.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/fma120/server.ex",
Expand All @@ -322,26 +222,6 @@
reason:
"Deliberate: init/1 starts a worker per device already present under the WorkerSupervisor, an earlier sibling that is already running. FMA120.DeviceWorker.init/1 only builds state and returns {:continue, :initialize}, deferring all device I/O to handle_continue/2, and never calls back into this server, so the synchronous start_child cannot deadlock or stall the boot."
},
%{
analysis: "startup",
file: "lib/universal_proxy/fma120/store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.FMA120.Store.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/ssh_access.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.SSHAccess.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "shutdown",
file: "lib/universal_proxy/storage/server.ex",
Expand All @@ -362,26 +242,6 @@
reason:
"False positive: stop_share/1 calls demonitor_share/1 (Process.demonitor(ref, [:flush])) before terminate_share_child/1 and the sweep; argus does not follow the helper."
},
%{
analysis: "startup",
file: "lib/universal_proxy/storage/settings.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.Storage.Settings.init/1 performs close during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file. This close runs only when chmod to 0600 fails after a successful open: init/1 releases the table it just opened before returning {:stop, {:chmod_failed, reason}}, so a store holding the clear-text Samba password never serves world-readable."
},
%{
analysis: "startup",
file: "lib/universal_proxy/storage/settings.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.Storage.Settings.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/uart/history.ex",
Expand Down Expand Up @@ -432,26 +292,6 @@
reason:
"Deliberate: the server's init/1 sweeps every child a previous incarnation left under the earlier DynamicSupervisor (which_children + terminate_child) before starting its own, so no orphan survives a server restart."
},
%{
analysis: "startup",
file: "lib/universal_proxy/uart/settings_store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.UART.SettingsStore.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "startup",
file: "lib/universal_proxy/uart/store.ex",
title: "Distributed operation in init/1",
at_label: "remote operation during init/1",
detail:
"UniversalProxy.UART.Store.init/1 performs open_file during init, while the supervisor's start sequence waits. A slow or partitioned peer stalls local startup.",
reason:
"False positive: argus classes every :dets call as a distributed (Mnesia-style) store operation, but this is a local DETS file on the device's data partition. Opening it in init/1 is deliberate so a store that cannot open fails its start instead of serving without a table."
},
%{
analysis: "shutdown",
file: "lib/universal_proxy_web/live/overview_live.ex",
Expand Down
Loading
Loading