diff --git a/.argus-baseline.exs b/.argus-baseline.exs index 8db5655..47f9d14 100644 --- a/.argus-baseline.exs +++ b/.argus-baseline.exs @@ -98,7 +98,7 @@ title: "Children started under another tree outlive their owner", at_label: "start_child onto a supervisor in another tree", detail: - "UniversalProxy.Audio.Input.Source.stop_capture/1 starts children under UniversalProxy.TaskSupervisor, a DynamicSupervisor UniversalProxy.Audio.Input.Source does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxy.Audio.Input.Source's: when UniversalProxy.Audio.Input.Source's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxy.Audio.Input.Source's terminate/2 does not stop them.", + "UniversalProxy.Audio.Input.Source.stop_capture/1 starts children under UniversalProxy.TaskSupervisor, a supervisor UniversalProxy.Audio.Input.Source does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxy.Audio.Input.Source's: when UniversalProxy.Audio.Input.Source's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxy.Audio.Input.Source's terminate/2 does not stop them.", 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: the task only stops the old arecord Capture via stop_capture_process/2 (GenServer.stop bounded at 2s; already-gone exits tolerated, a timeout logged and the Capture killed). Outliving the Source is intended: the Source has already handed the Capture off and moved on. On a tree shutdown the task is still safe: UniversalProxy.TaskSupervisor starts before Audio.Input.Supervisor in the application's child list, so it outlives the audio-input subtree while that stops. The Capture itself does not depend on the task then: the Source started it with start_link from its own callbacks, so the Source is the Capture's gen_server parent, and gen_server handles a parent {:EXIT, source, :shutdown} by running Capture.terminate/2 (port close + kill -9) even though Capture traps exits; that message never reaches Capture's catch-all handle_info/2." }, @@ -162,23 +162,13 @@ 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: "shutdown", - file: "lib/universal_proxy/bluetooth.ex", - title: "Children started under another tree outlive their owner", - at_label: "start_child onto a supervisor in another tree", - detail: - "UniversalProxy.Bluetooth.restart_esphome/0 starts children under UniversalProxy.TaskSupervisor, a DynamicSupervisor UniversalProxyWeb.BluetoothLive does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxyWeb.BluetoothLive's: when UniversalProxyWeb.BluetoothLive's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxyWeb.BluetoothLive's terminate/2 does not stop them.", - 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: "shutdown", file: "lib/universal_proxy/bluetooth/manager.ex", title: "Children started under another tree outlive their owner", at_label: "start_child onto a supervisor in another tree", detail: - "UniversalProxy.Bluetooth.Manager.restart_esphome/0 starts children under UniversalProxy.TaskSupervisor, a DynamicSupervisor UniversalProxy.Bluetooth.Manager does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxy.Bluetooth.Manager's: when UniversalProxy.Bluetooth.Manager's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxy.Bluetooth.Manager's terminate/2 does not stop them.", + "UniversalProxy.Bluetooth.Manager.restart_esphome/0 starts children under UniversalProxy.TaskSupervisor, a supervisor UniversalProxy.Bluetooth.Manager does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxy.Bluetooth.Manager's: when UniversalProxy.Bluetooth.Manager's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxy.Bluetooth.Manager's terminate/2 does not stop them.", 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." }, @@ -192,16 +182,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: "shutdown", - file: "lib/universal_proxy/esphome.ex", - title: "Children started under another tree outlive their owner", - at_label: "start_child onto a supervisor in another tree", - detail: - "UniversalProxy.ESPHome.update_config/1 starts children under UniversalProxy.TaskSupervisor, a DynamicSupervisor UniversalProxyWeb.DiscoveryLive does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxyWeb.DiscoveryLive's: when UniversalProxyWeb.DiscoveryLive's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxyWeb.DiscoveryLive's terminate/2 does not stop them.", - 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/infrared/server.ex", @@ -291,15 +271,5 @@ "UniversalProxy.UART.Server (position 2) starts processes under DynamicSupervisor (position 0) of UniversalProxy.UART.Supervisor, a rest_for_one supervisor. When UniversalProxy.UART.Server crashes, the supervisor restarts it and every later child, but DynamicSupervisor started earlier and survives — with the processes the old UniversalProxy.UART.Server started still running inside it. The new UniversalProxy.UART.Server knows nothing of them and starts its own: duplicated work, or a stale process holding a resource the replacement expects to own.", 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: "shutdown", - file: "lib/universal_proxy_web/live/overview_live.ex", - title: "Children started under another tree outlive their owner", - at_label: "start_child onto a supervisor in another tree", - detail: - "UniversalProxyWeb.OverviewLive.start_format/3 starts children under UniversalProxy.TaskSupervisor, a DynamicSupervisor UniversalProxyWeb.OverviewLive does not sit under. Their lifetime follows UniversalProxy.TaskSupervisor's tree, not UniversalProxyWeb.OverviewLive's: when UniversalProxyWeb.OverviewLive's tree shuts down they keep running — reconnecting, logging, calling into applications that have already stopped — and UniversalProxyWeb.OverviewLive's terminate/2 does not stop them.", - 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: a drive format started from the Overview must run to completion even if the LiveView (browser tab) goes away; Storage.Server serializes it and reports progress over PubSub." } ] diff --git a/mix.lock b/mix.lock index 918251c..839a433 100644 --- a/mix.lock +++ b/mix.lock @@ -1,22 +1,22 @@ %{ - "argus_beam": {:hex, :argus_beam, "0.22.0", "a033c7f5ff999501dc401b5eead2f35074a0efd0e52584c8434f747a975f504c", [:mix], [{:beam_spy, "~> 0.2", [hex: :beam_spy, repo: "hexpm", optional: false]}, {:breeze, "~> 0.5.5", [hex: :breeze, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: true]}, {:makeup_erlang, "~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: true]}, {:pentiment, "~> 0.2", [hex: :pentiment, repo: "hexpm", optional: false]}, {:roux, "~> 0.3.2", [hex: :roux, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "dcf29f6d1de042cc40f6784fc9c9565de491af949c53872eafd007b2b16cbcd1"}, + "argus_beam": {:hex, :argus_beam, "0.24.0", "15024fca26c739b0de7eec0105767a0fd16c6e9cb46cd9b300ddf24a0b8a4241", [:mix], [{:beam_spy, "~> 0.2.2", [hex: :beam_spy, repo: "hexpm", optional: false]}, {:breeze, "~> 0.5.5", [hex: :breeze, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: true]}, {:makeup_erlang, "~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: true]}, {:pentiment, "~> 0.2", [hex: :pentiment, repo: "hexpm", optional: false]}, {:roux, "~> 0.3.6", [hex: :roux, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "f2e69930ba11582d0aec3c70c1c9e56df1b9de8cc965b9a9fcfbf7f041b085eb"}, "beam_notify": {:hex, :beam_notify, "1.1.2", "214861e7b540701b6652bdeb491313b02c3b7dcc3dca1c1321f1c02d97aea974", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "6cb59cfd1bffd5a86206cbadcdec4182dc1e2c91950fab050da5d32e01828981"}, - "beam_spy": {:hex, :beam_spy, "0.2.1", "02683c9b8d8f84a2139c83d4462fb17d2ca0e14b229ce9c3877cf8d92950be76", [:mix], [{:burrito, "~> 1.0", [hex: :burrito, repo: "hexpm", optional: true]}, {:ctf, "~> 0.1.1", [hex: :ctf, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:optimus, "~> 0.5", [hex: :optimus, repo: "hexpm", optional: false]}, {:table_rex, "~> 4.0", [hex: :table_rex, repo: "hexpm", optional: false]}, {:toml, "~> 0.7", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "ccb3167c4a68f4f757696c359a16afe36750bc8916ae9fbf06a58feeaafd7739"}, + "beam_spy": {:hex, :beam_spy, "0.2.2", "3eab5bb8aa20467d174dba8822036203f3688b20a69f0b01fa09f57d73dcee7b", [:mix], [{:burrito, "~> 1.0", [hex: :burrito, repo: "hexpm", optional: true]}, {:ctf, "~> 0.1.1", [hex: :ctf, repo: "hexpm", optional: false]}, {:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:optimus, "~> 0.5", [hex: :optimus, repo: "hexpm", optional: false]}, {:table_rex, "~> 4.0", [hex: :table_rex, repo: "hexpm", optional: false]}, {:toml, "~> 0.7", [hex: :toml, repo: "hexpm", optional: false]}], "hexpm", "2367cde1e67c741a238bd05ff3b33d4b2ea4bd3adfe8f1927d0ad0c4304b62f0"}, "bluez": {:hex, :bluez, "0.3.0", "1db9ebbe91d560846857134bac11d9e12be3ad32c76b51b9ca0dbbd4a6fdcc2b", [:mix], [{:muontrap, "~> 1.8 or ~> 2.0", [hex: :muontrap, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: true]}, {:typedstruct, "~> 0.5", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "4269e9e7d0f1d36cc53750ad85c298388dd3c4970ea4612f95032cc812c8dc1e"}, "bunt": {:hex, :bunt, "1.0.0", "081c2c665f086849e6d57900292b3a161727ab40431219529f13c4ddcf3e7a44", [:mix], [], "hexpm", "dc5f86aa08a5f6fa6b8096f0735c4e76d54ae5c9fa2c143e5a1fc7c1cd9bb6b5"}, "cc_precompiler": {:hex, :cc_precompiler, "0.1.11", "8c844d0b9fb98a3edea067f94f616b3f6b29b959b6b3bf25fee94ffe34364768", [:mix], [{:elixir_make, "~> 0.7", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "3427232caf0835f94680e5bcf082408a70b48ad68a5f5c0b02a3bea9f3a075b9"}, - "circuits_uart": {:hex, :circuits_uart, "1.6.0", "259e8126b4004648e1bba6da5827b9e473b7e09e1eb4357f0026a1d9f274fce2", [:mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "9f0bdf612706b16beb2026a9e316cc313b919c35b663c1177d374b1f7330b790"}, + "circuits_uart": {:hex, :circuits_uart, "1.7.0", "bd2f524dd199d363f327b34ecc7795a817e540af4093e0abb611acd68a4b29f4", [:mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "a3a4b82bfe4df9b6c7d1626ece9b630a3d8ab3efde589bd1039e364c958e8b2a"}, "circular_buffer": {:hex, :circular_buffer, "1.1.0", "af9332c40d600cc27b160eebd9fad1bf0a8106cd62e9f57d6cc8f028d3cc46d1", [:mix], [], "hexpm", "0daa0a4fcb3a7ffabc8576bdbf64c99adc6d4b37eab1185179140769ba58f571"}, "cowboy": {:hex, :cowboy, "2.20.0", "63f6e3afa7e14201498142a10d00379f5e11761f69e69782807c713627f6bc73", [:make, :rebar3], [{:cowlib, ">= 2.21.0 and < 3.0.0", [hex: :cowlib, repo: "hexpm", optional: false]}, {:ranch, ">= 1.8.0 and < 3.0.0", [hex: :ranch, repo: "hexpm", optional: false]}], "hexpm", "a0be47464a2887f71c061ce90723dc17441c9b81ba9569cd9b596eb0367d1edd"}, "cowboy_telemetry": {:hex, :cowboy_telemetry, "0.4.0", "f239f68b588efa7707abce16a84d0d2acf3a0f50571f8bb7f56a15865aae820c", [:rebar3], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7d98bac1ee4565d31b62d59f8823dfd8356a169e7fcbb83831b8a5397404c9de"}, "cowlib": {:hex, :cowlib, "2.21.0", "3ea757c79784bdbdebac7857ce3adf2290af6b8680d4248c75e40ced2e98c89e", [:make, :rebar3], [], "hexpm", "0960248773762a5319b3c17285028bc76f54f58ef0f9451367401bdf67b46274"}, "credo": {:hex, :credo, "1.7.19", "cc52129665fc7c15143d47838fda0f9cd6dac9ceced7bf4da6f85fcbfe64b12a", [:mix], [{:bunt, "~> 0.2.1 or ~> 1.0", [hex: :bunt, repo: "hexpm", optional: false]}, {:file_system, "~> 0.2 or ~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "2d8bc95d5a7bb99dd2613621d4f08c6a3575c3fd4b62e6a2b48a100352a557b8"}, "ctf": {:hex, :ctf, "0.1.2", "6f3c5e5c550e9156dcfc22ff57f7032d2ff8e12eb26d786139d27518f2935ccb", [:mix], [], "hexpm", "e989987b32eb876daf26fb0057ab68cb8112df5a6b1bec17c351c41513bb4b39"}, - "decibel": {:hex, :decibel, "1.3.0", "4ee9649ea5e36485319db5e5ee96cf81d140d41a3b9c90b3a3fbf62bbeb63667", [:mix], [{:typedstruct, "~> 0.5.0", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "6496b49880292dbe7e35c777ad3350b61bfdac45193db568ac56f4ebeeeb65eb"}, + "decibel": {:hex, :decibel, "1.4.0", "e57608be31f287abdb489c6c95128700b9137328641a0daf6928e7ad157fedff", [:mix], [{:typedstruct, "~> 0.5.0", [hex: :typedstruct, repo: "hexpm", optional: false]}], "hexpm", "abda50ac44a6cf397db6ee60b35453d7686b16e11195984efb52477837f0239a"}, "dialyxir": {:hex, :dialyxir, "1.4.8", "7ef671a8aff9948b091d8c30f09467fbb16e77305cda451bce48109a0f5e021c", [:mix], [{:erlex, ">= 0.2.8", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "cbd5a851571e5dfeb32aaf2e840bfa98b7864cb3071bf2ef5d95d1276b12e072"}, "elixir_make": {:hex, :elixir_make, "0.10.0", "16577e2583a79bb79237bbff349619ef5d80afffc07eac6e4faf0d00e2ddaf7d", [:mix], [], "hexpm", "dc1f09fb7fa68866b886abd5f0f3c83553b1a19a52359a899e92af1bb3b31982"}, "erlex": {:hex, :erlex, "0.2.9", "7debbbaa9f4f368b8cd648983e0f1d7963028508e9c59e9d4ed504e94ef52a55", [:mix], [], "hexpm", "8cfffc0ec7159e6d73de2ab28a588064de80f88b2798d5cbe4482cbbc200178b"}, - "esbuild": {:hex, :esbuild, "0.10.0", "b0aa3388a1c23e727c5a3e7427c932d89ee791746b0081bbe56103e9ef3d291f", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "468489cda427b974a7cc9f03ace55368a83e1a7be12fba7e30969af78e5f8c70"}, + "esbuild": {:hex, :esbuild, "0.10.1", "32b44b468d2c6386b6bf9229617cbf51be025ce4380eacd383a8979cbb8327ef", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "890f251330052dcacafa40c409769e7c42e3876fb0ae450707bde831be7b34ea"}, "espex": {:hex, :espex, "0.11.0", "bf2023b46dd63dbf68333942cf83320799e0ef48c201e8ca08bcaf26ef231869", [:mix], [{:protobuf, "~> 0.12", [hex: :protobuf, repo: "hexpm", optional: false]}, {:protobuf_generate, "~> 0.2", [hex: :protobuf_generate, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.4", [hex: :thousand_island, repo: "hexpm", optional: false]}], "hexpm", "3f11b198fc865f497ceddaf65e17ecbd7511c9ecd3e6bd966844c8aa75285ac7"}, "expo": {:hex, :expo, "1.1.1", "4202e1d2ca6e2b3b63e02f69cfe0a404f77702b041d02b58597c00992b601db5", [:mix], [], "hexpm", "5fb308b9cb359ae200b7e23d37c76978673aa1b06e2b3075d814ce12c5811640"}, "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, @@ -36,7 +36,7 @@ "mint_web_socket": {:hex, :mint_web_socket, "1.0.6", "5ffcf350df5b90f2d7a04adf877165228804993714592512374218d4679e325a", [:mix], [{:mint, ">= 1.4.1 and < 2.0.0-0", [hex: :mint, repo: "hexpm", optional: false]}], "hexpm", "0c360e9012413f1c115a63532601eb5d63731aab7010949178769760686c1698"}, "muontrap": {:hex, :muontrap, "1.8.0", "3c5dab5bc91d5a16d14cd85b130ae7d35a9c469564a11ba4b2ebbcd7ccf5bc05", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "45ff36451303cbdefe1c66da3681b5aff078ee5737348f554f0017daa66284af"}, "nerves": {:hex, :nerves, "1.15.0", "5f7a224b9d5e797a742342dae0563dec41506a821ca09f7d0895955329d61a38", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:interactive_cmd, "~> 0.1.4", [hex: :interactive_cmd, repo: "hexpm", optional: false]}, {:jason, "~> 1.2", [hex: :jason, repo: "hexpm", optional: false]}, {:nerves_discovery, "~> 0.1.2", [hex: :nerves_discovery, repo: "hexpm", optional: false]}, {:tablet, "~> 0.3.1", [hex: :tablet, repo: "hexpm", optional: false]}], "hexpm", "1d874dbb30feffeb658317c28ddbf027eddb0e5e3d25a6e78a43170dab4e1734"}, - "nerves_discovery": {:hex, :nerves_discovery, "0.1.5", "2f0ff379818970b5d9a64c05d7a3b2b4d064d7f5dc6400825ba7da9b47da1105", [:mix], [], "hexpm", "aa16d2da754fb95a0212d8c77ca9d672184bc38c45cfcca40024832cc6c217f5"}, + "nerves_discovery": {:hex, :nerves_discovery, "0.1.6", "47a47177052c50dbe44a9c36eae5b0934deb41182a753ec8c7c079afc38c75bd", [:mix], [], "hexpm", "0d1362580f7e8cae7f03c8e1c6ac71f878104d63996c1a0b32af2d6b88e37c8b"}, "nerves_github_updater": {:hex, :nerves_github_updater, "0.3.0", "738e3b00bdd7598fdc250d87711934ba4b485565e19b83f88e433820f42433d4", [:mix], [{:jason, "~> 1.4", [hex: :jason, repo: "hexpm", optional: false]}, {:phoenix_pubsub, "~> 2.1", [hex: :phoenix_pubsub, repo: "hexpm", optional: true]}, {:req, "~> 0.5", [hex: :req, repo: "hexpm", optional: false]}], "hexpm", "7a02b5a6a80964254b5e3f4e83e340b6d86e7fafc6945683c0105658845c44ae"}, "nerves_logging": {:hex, :nerves_logging, "0.2.4", "7d60c345325c7165a1473be30a399847eaba425dce3258ef97a8aefd6d913160", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "942f9757adea17d56f4f64fbf4e1aaffd4b2471dd2f1bc020ba80ba2ef5238bc"}, "nerves_motd": {:hex, :nerves_motd, "0.1.17", "a0c4ebec82425185dd8cea1c12cd5d310b076cdefc82ba5f4bf516b5733ee4de", [:mix], [{:nerves_runtime, "~> 0.13.9", [hex: :nerves_runtime, repo: "hexpm", optional: false]}, {:nerves_time, "~> 0.4", [hex: :nerves_time, repo: "hexpm", optional: true]}, {:nerves_time_zones, "~> 0.1", [hex: :nerves_time_zones, repo: "hexpm", optional: true]}], "hexpm", "901a99bb22355e3f68b2f33182756cec1b0556531a6f93521a7baa2f0591969d"}, @@ -55,13 +55,13 @@ "nerves_system_rpi4": {:git, "https://github.com/bbangert/nerves_systems_universal_proxy.git", "33a1fc9229024b6acc54042af3ea14bf269c32ae", [sparse: "rpi4", tag: "v0.1.11"]}, "nerves_system_rpi5": {:git, "https://github.com/bbangert/nerves_systems_universal_proxy.git", "33a1fc9229024b6acc54042af3ea14bf269c32ae", [sparse: "rpi5", tag: "v0.1.11"]}, "nerves_system_x86_64": {:git, "https://github.com/bbangert/nerves_systems_universal_proxy.git", "33a1fc9229024b6acc54042af3ea14bf269c32ae", [sparse: "x86_64", tag: "v0.1.11"]}, - "nerves_time": {:hex, :nerves_time, "0.4.12", "71b9243b2646c05f18dc060a4e9004c58890195cfebfd7228122dc37e976f4ba", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:muontrap, "~> 0.5 or ~> 1.0", [hex: :muontrap, repo: "hexpm", optional: false]}], "hexpm", "527696d2cb5505faa50fa98f7babf1d5b9390a1125d4931b10374ce20e3fe1fc"}, + "nerves_time": {:hex, :nerves_time, "0.4.13", "2acee10b94adeff2bab61c61b4167627b32dae50fdf4f9b91f2e1f4df06d1e35", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:muontrap, "~> 0.5 or ~> 1.0 or ~> 2.0", [hex: :muontrap, repo: "hexpm", optional: false]}], "hexpm", "b3bcf9ade8ad8281d7f134ec7ee21627f3db76e79a26fb242e682f5bc08a9fe9"}, "nerves_toolchain_aarch64_nerves_linux_gnu": {:hex, :nerves_toolchain_aarch64_nerves_linux_gnu, "15.3.1", "484322303fc2390d8a23c9611ab225201e33584e9cc6731928dada77a64ebba1", [:mix], [{:nerves, "~> 1.13 or ~> 2.0-dev", [hex: :nerves, repo: "hexpm", optional: false]}], "hexpm", "041488c45aff9dcbf01d6dc542218d7d87ef3bfcd7190b491156cff3f900dd3f"}, "nerves_toolchain_armv6_nerves_linux_gnueabihf": {:hex, :nerves_toolchain_armv6_nerves_linux_gnueabihf, "15.3.1", "c1e0eda5cd21c12a0f10865c7e66da102d6cc5e5382e156f604cf81528968dee", [:mix], [{:nerves, "~> 1.13 or ~> 2.0-dev", [hex: :nerves, repo: "hexpm", optional: false]}], "hexpm", "cc9ccb66a149cf0bc20d3f85516826fcc2b5ec825c0c539479ea639d261ec9a1"}, "nerves_toolchain_armv7_nerves_linux_gnueabihf": {:hex, :nerves_toolchain_armv7_nerves_linux_gnueabihf, "15.3.1", "de5fbc5dde4f1d9349a68f6f73639034155648d78149bf5d1fb5d47a7505f246", [:mix], [{:nerves, "~> 1.13 or ~> 2.0-dev", [hex: :nerves, repo: "hexpm", optional: false]}], "hexpm", "a2a2b6aff6cd0054d599b00a32dfa3670441d511db39b27f2da871ee9d27aafb"}, "nerves_toolchain_riscv64_nerves_linux_gnu": {:hex, :nerves_toolchain_riscv64_nerves_linux_gnu, "15.3.1", "3e0738bf7ae97025f8c0c72d17390803b5987da57fba18cbe6399546c0ec0dd6", [:mix], [{:nerves, "~> 1.13 or ~> 2.0-dev", [hex: :nerves, repo: "hexpm", optional: false]}], "hexpm", "6c3e4775d83b859c4f4daca26303c3d6a291142a59ae6ade82c87fea40aed802"}, "nerves_toolchain_x86_64_nerves_linux_musl": {:hex, :nerves_toolchain_x86_64_nerves_linux_musl, "15.3.1", "6f92ad20e551783a951ae5d06237a111c0b21a08882d56c9c6142be36c417fd6", [:mix], [{:nerves, "~> 1.13 or ~> 2.0-dev", [hex: :nerves, repo: "hexpm", optional: false]}], "hexpm", "3467b99325cebae03b22e0f9a910375fc9cde8b53620b0e33d5a69798be83b52"}, - "nerves_uevent": {:hex, :nerves_uevent, "0.1.7", "e8163591bb0cf087de608a7d0a0523a4c2df9df437dade2e6e890525f9380848", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:property_table, "~> 0.2.0 or ~> 0.3.0", [hex: :property_table, repo: "hexpm", optional: false]}], "hexpm", "d442b1aec1c61cdaf0fdbb8bcb9be4cada7dab695707ade0e2e7b78ffa4bf3b0"}, + "nerves_uevent": {:hex, :nerves_uevent, "0.1.8", "478b8febccf877be48736aa530fe26db6a2a8dc83fb8565580f5da7dfaeaee0f", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:property_table, "~> 0.2.0 or ~> 0.3.0", [hex: :property_table, repo: "hexpm", optional: false]}], "hexpm", "8324a75dc55c46e134f4cd0b34782a1d15d90ab13214b7fc53d031a4d4831371"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_pool": {:hex, :nimble_pool, "1.1.0", "bf9c29fbdcba3564a8b800d1eeb5a3c58f36e1e11d7b7fb2e084a643f645f06b", [:mix], [], "hexpm", "af2e4e6b34197db81f7aad230c1118eac993acc0dae6bc83bac0126d4ae0813a"}, "one_dhcpd": {:hex, :one_dhcpd, "3.0.0", "262bd6bfea2001c85340d1384d7d992094f1dca3a761d0a1042d708bdc472c87", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}], "hexpm", "959d7fde6ee3c1af526ae08b6273ef26fd25598dda6b59adb872889a5be08d1a"}, @@ -83,25 +83,25 @@ "ranch": {:hex, :ranch, "2.3.0", "7de7b041a9a6a5091a3aa5898d66c0564be671d87db4f9d63b1b5ee775b097df", [:make, :rebar3], [], "hexpm", "6168ec49409d982f7cfbd83dd083144f6cbe67caa4036551d2f0a3ad67c9d023"}, "req": {:hex, :req, "0.7.5", "0c3293cbf7717aba20b1b1b3ea13fe8d3fdf6f1557490f390c3f1ef6dd9db955", [:mix], [{:brotli, "~> 0.3.1", [hex: :brotli, repo: "hexpm", optional: true]}, {:finch, "~> 0.21", [hex: :finch, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:mime, "~> 2.0.6 or ~> 2.1", [hex: :mime, repo: "hexpm", optional: false]}, {:nimble_csv, "~> 1.0", [hex: :nimble_csv, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: true]}], "hexpm", "576853c4bf403faa3c1fa5d093e0759227083b78f8a6864c67d62c0a9c45514d"}, "ring_logger": {:hex, :ring_logger, "0.11.7", "294ca73bd8459d412f8d7c71f27edec297257c3bc2dd863920b4e62aa4487cce", [:mix], [{:circular_buffer, "~> 0.4.0 or ~> 1.0", [hex: :circular_buffer, repo: "hexpm", optional: false]}, {:logger_backends, "~> 1.0", [hex: :logger_backends, repo: "hexpm", optional: true]}], "hexpm", "59cdc3dc90c2b5fcb0b14ef7a6818c701c11687a2f758f1c214c968f5a11cce6"}, - "roux": {:hex, :roux, "0.3.2", "bc8f6e386424148d9db9bf5411f3d796be98d3b7b131ba578107a350dbff2587", [:mix], [{:gen_lsp, "~> 0.11.3", [hex: :gen_lsp, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "99ec13af2f869864c30ffc85aae084b7879e28d07979672c9515995ba70f5086"}, + "roux": {:hex, :roux, "0.3.6", "a96a73b588dee868d2768d7253506463fe0539ead70dcaf8d6ca8db134840599", [:mix], [{:gen_lsp, "~> 0.11.3", [hex: :gen_lsp, repo: "hexpm", optional: true]}, {:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "754be163590e1010e44b9675c0a68b12b2aaa321671af16b452b250039414ee2"}, "shoehorn": {:hex, :shoehorn, "0.9.3", "88b79efa6c3cf42395d0635b2b6a41d1774275abb4a4889c0288874446d33d88", [:mix], [], "hexpm", "376ccf28e1d57a7f9d73ea93130e711886e88f4464a2cb9355787fd23897bbba"}, "sobelow": {:hex, :sobelow, "0.16.0", "13e3f761bc7fcc88e81ae23ddef9140617a12a3efb26601e5516453290539398", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "00a0260edf9aeac35d9116366f55dc9451d11e0e696e28ec5570c6a56bd41f1e"}, - "ssh_subsystem_fwup": {:hex, :ssh_subsystem_fwup, "0.6.9", "e54728aafaa170211c647ffc8e8d0f4a92b9ccb82846317cafdc4a31279fe400", [:mix], [{:interactive_cmd, "~> 0.1.2", [hex: :interactive_cmd, repo: "hexpm", optional: false]}], "hexpm", "b715ea3ba0e26a8f4ada58202e30177ae0203bb07495308261afacd59ad15d56"}, + "ssh_subsystem_fwup": {:hex, :ssh_subsystem_fwup, "0.6.10", "2c8a33fa6b4dac99a9c14d55dac47a88c6a5e53923d1df49d1abc0d1f02be015", [:mix], [{:interactive_cmd, "~> 0.1.2", [hex: :interactive_cmd, repo: "hexpm", optional: false]}], "hexpm", "e7d59f3b749dfc38a4e48b88484d08b0ad66044f9940d3eb96aacff6f5472376"}, "table_rex": {:hex, :table_rex, "4.1.0", "fbaa8b1ce154c9772012bf445bfb86b587430fb96f3b12022d3f35ee4a68c918", [:mix], [], "hexpm", "95932701df195d43bc2d1c6531178fc8338aa8f38c80f098504d529c43bc2601"}, "tablet": {:hex, :tablet, "0.3.3", "cf2975d34da2e26a42e0a09e3ac67e63171a3ad1a8da41be9c23ffda484eb84d", [:mix], [], "hexpm", "2701b7a6f8bca941ef036a982d7789a6aebd9e8802b2e26665391295935f4925"}, "tailwind": {:hex, :tailwind, "0.5.1", "35435b13158c90d37da11e1cfc808755fca1d7b6c5ab87b1b19c5de87e2f0a10", [:mix], [], "hexpm", "c4e26302a59fec72abc5610ecb6ad2116d9aa31f31aab2d4b8eb6e95d25a689c"}, "telemetry": {:hex, :telemetry, "1.4.2", "a0cb522801dffb1c49fe6e30561badffc7b6d0e180db1300df759faa22062855", [:rebar3], [], "hexpm", "928f6495066506077862c0d1646609eed891a4326bee3126ba54b60af61febb1"}, "telemetry_metrics": {:hex, :telemetry_metrics, "1.2.0", "7632c19c01d88d8aaca5da1a0e8912f5af39b79e7c08a2c253aeb3c14c2c957e", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "71dde12fc29b58b9c77ec17ec319109e5ca848d010fc1965ed4463bba1837c07"}, "telemetry_poller": {:hex, :telemetry_poller, "1.3.0", "d5c46420126b5ac2d72bc6580fb4f537d35e851cc0f8dbd571acf6d6e10f5ec7", [:rebar3], [{:telemetry, "~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "51f18bed7128544a50f75897db9974436ea9bfba560420b646af27a9a9b35211"}, - "thousand_island": {:hex, :thousand_island, "1.5.0", "f50a213cac97262b6d5ebb85745aa2c00fec1413191e6e66834788d45425cecb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "708923d40523e43cf99041ab37a0d4b0ec426ac6438fa3716ab23d919eaeb412"}, + "thousand_island": {:hex, :thousand_island, "1.6.0", "d6ad7c2220c96a270cc8ca1586ec4d8bde648a4a3a53f003ce093f41beec0288", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "4d4720470f091fc21a1311777c2ac66916c43621bffc068590c9f9bb3cd057a3"}, "toml": {:hex, :toml, "0.7.0", "fbcd773caa937d0c7a02c301a1feea25612720ac3fa1ccb8bfd9d30d822911de", [:mix], [], "hexpm", "0690246a2478c1defd100b0c9b89b4ea280a22be9a7b313a8a058a2408a2fa70"}, "toolshed": {:hex, :toolshed, "0.5.0", "3dbc915bf30354d71b1e9b9cad0b0ad906360d7cfc1efb86acc1a6c58d9aa375", [:mix], [{:nerves_runtime, "~> 0.8", [hex: :nerves_runtime, repo: "hexpm", optional: true]}], "hexpm", "44a39f384d813d1991c4637eca23f62e9f91135e496c868c400b42ed01eb51d2"}, "typedstruct": {:hex, :typedstruct, "0.5.4", "d1d33d58460a74f413e9c26d55e66fd633abd8ac0fb12639add9a11a60a0462a", [:make, :mix], [], "hexpm", "ffaef36d5dbaebdbf4ed07f7fb2ebd1037b2c1f757db6fb8e7bcbbfabbe608d8"}, "uboot_env": {:hex, :uboot_env, "1.0.3", "40ffaa6304b97275f79749aeb6e34e279568463d55529e0655f784aee707e45f", [:mix], [], "hexpm", "7dbe533327767c14e77ef62e8ab58c7c1c687bf98db0adf7ca04c2e668671d6e"}, - "vintage_net": {:hex, :vintage_net, "0.13.13", "cdb34efa05c26e58678eab8b25d81fa272ad48a5255368268470288403526236", [:make, :mix], [{:beam_notify, "~> 0.2.0 or ~> 1.0", [hex: :beam_notify, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:muontrap, "~> 0.5.1 or ~> 0.6.0 or ~> 1.0", [hex: :muontrap, repo: "hexpm", optional: false]}, {:property_table, "~> 0.2.0 or ~> 0.3.0", [hex: :property_table, repo: "hexpm", optional: false]}], "hexpm", "4849d48b9224303c1242b4b5f3d1561b4b28a999862a4540da584340052ffc64"}, + "vintage_net": {:hex, :vintage_net, "0.13.14", "17cfc464f903533f678268a85c318a53e27b9ca0915b16022fe08ffe12efdaad", [:make, :mix], [{:beam_notify, "~> 0.2.0 or ~> 1.0", [hex: :beam_notify, repo: "hexpm", optional: false]}, {:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:muontrap, "~> 0.5.1 or ~> 0.6.0 or ~> 1.0 or ~> 2.0", [hex: :muontrap, repo: "hexpm", optional: false]}, {:property_table, "~> 0.2.0 or ~> 0.3.0", [hex: :property_table, repo: "hexpm", optional: false]}], "hexpm", "93aae3491d5cd0f25c6fff74d117f47e28cf9ddee749cf5b629032b6bcbde219"}, "vintage_net_direct": {:hex, :vintage_net_direct, "0.10.8", "30461d2ed3caf84c888effbbee0b15f7351529e900dcfde668ab3e08837f0373", [:mix], [{:one_dhcpd, "~> 0.2.3 or ~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :one_dhcpd, repo: "hexpm", optional: false]}, {:vintage_net, "~> 0.9.1 or ~> 0.10.0 or ~> 0.11.0 or ~> 0.12.0 or ~> 0.13.0", [hex: :vintage_net, repo: "hexpm", optional: false]}], "hexpm", "07eb4e1144f437fbc93c80480f27e48a9d12f6962bed97471e03cda6c91ba88f"}, "vintage_net_ethernet": {:hex, :vintage_net_ethernet, "0.11.2", "ef67db5ace9ad5ca5bf229a507247f9eb45b847dc0ff694a6e8a156ed9c5915d", [:mix], [{:vintage_net, "~> 0.12.0 or ~> 0.13.0", [hex: :vintage_net, repo: "hexpm", optional: false]}], "hexpm", "6915f9e15e1aa15e52d1948f318ce5109181d1ad7aaa50016bad5dd8e22df9ea"}, - "vintage_net_wifi": {:hex, :vintage_net_wifi, "0.12.11", "6eb76aa1b340c96eddc9a5e3cad43f86154e0a8bb1b1bf9873acba8391dea966", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:vintage_net, "~> 0.12.0 or ~> 0.13.0", [hex: :vintage_net, repo: "hexpm", optional: false]}], "hexpm", "ef45626527e7c5258b192c21e3f37f9ba4798cf4eadf320d7e2ca5bccb6e3ebe"}, + "vintage_net_wifi": {:hex, :vintage_net_wifi, "0.12.12", "64a75e6dc4a56cc28fa93e9cf64a0ffd0e4622718835d29a11dcb6d145284720", [:make, :mix], [{:elixir_make, "~> 0.6", [hex: :elixir_make, repo: "hexpm", optional: false]}, {:vintage_net, "~> 0.12.0 or ~> 0.13.0", [hex: :vintage_net, repo: "hexpm", optional: false]}], "hexpm", "5f179c6cbb2b48eadc83e3cd15b42d8d87007be0053f2d5b5f7b201a492f1afc"}, "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, "websock_adapter": {:hex, :websock_adapter, "0.6.0", "73db5ab8aaefd1a876a97ce3e6afc96562625de69ef17a4e04426e034849d0b8", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "50021a85bce8f203b086705d9e0c5415e2c7eb05d319111b0428fe71f9934617"}, }