can't be bothered writing a commit message
Some checks failed
dev release / build (push) Failing after 5m30s

This commit is contained in:
Breadway 2026-08-16 14:23:42 +08:00
parent cdd5de8f58
commit 670cf22f2c
27 changed files with 68553 additions and 11318 deletions

12
.grok/config.toml Normal file
View file

@ -0,0 +1,12 @@
# Copied from .claude/settings.local.json
[permission]
allow = [
"Bash(cargo test *)",
"Bash(/home/breadway/Projects/bread/target/debug/bread health *)",
"Bash(/home/breadway/Projects/bread/target/debug/bread sync *)",
"Bash(python3 *)",
"Bash(/home/breadway/Projects/bread/target/debug/bread modules *)",
"Bash(/home/breadway/Projects/bread/target/debug/bread doctor *)",
"Bash(/home/breadway/Projects/bread/target/debug/bread reload *)",
"Bash(cargo build *)",
]

20
CLAUDE.md Normal file
View file

@ -0,0 +1,20 @@
# CLAUDE.md — Repo hygiene
This repo follows the branch/release workflow documented in `CONTRIBUTING.md`
— read and follow it for any git, branch, or release work here (the
dev/beta/main lifecycle, `feature/x`/`fix/x` branch naming, when to cut or
reset `beta`, etc). Don't improvise a different workflow.
When starting work on a new feature, create branch "feature/<feature-name>" \
When working on a bug or issue, create branch "fix/<issue you are fixing>"
## Remotes
- `origin` — Forgejo (`git.breadway.dev` via Hestia, SSH) — authoritative.
- `github` — GitHub mirror. Push both when publishing.
## CI
- `dev-release.yml` triggers on `push: branches: ['dev']`; `beta-release.yml`
on `push: branches: ['beta']`; `release.yml` on a `v*` tag push. `package.yml` triggers the same way for the pacman-channel package.
None of these run on plain commits or PRs beyond what's listed.
## Don't
- Don't embed credentials in remote URLs — SSH or a credential helper only.

View file

@ -37,6 +37,7 @@ suggested `[[permissions]]` block for its own `bread.module.toml`.
| `low-battery-warning.lua` | Critical notification once when the battery runs low; resets on AC. | none | | `low-battery-warning.lua` | Critical notification once when the battery runs low; resets on AC. | none |
| `pause-media-on-headphone-unplug.lua` | Runs `playerctl pause` when a headphone/earbud device disconnects. | none (needs `playerctl`) | | `pause-media-on-headphone-unplug.lua` | Runs `playerctl pause` when a headphone/earbud device disconnects. | none (needs `playerctl`) |
| `dock-monitors.lua` | Applies a multi-monitor layout when an external display connects, reverts when removed. | edit output names/resolutions | | `dock-monitors.lua` | Applies a multi-monitor layout when an external display connects, reverts when removed. | edit output names/resolutions |
| `external-monitors.lua` | Zero-config laptop displays: any HDMI/DP/USB-C head at its preferred mode, mirrored by default (or extended), lid-safe, restores the panel on unplug. | optional `ARRANGE` / `SCALE` at the top |
| `active-window-widget.lua` | Shows the focused window next to the workspace pills in breadbar, via `bread.widget` + `bread.state.watch`. | none | | `active-window-widget.lua` | Shows the focused window next to the workspace pills in breadbar, via `bread.widget` + `bread.state.watch`. | none |
| `cpu-temp-widget/` | Live CPU temperature readout in breadbar's stats area, via `bread.widget` + `bread.fs.read` on a timer. Directory module with a `bread.module.toml` declaring `fs.read` + `widget` — the permission-manifest worked example. | edit `TEMP_PATH` for your hwmon layout | | `cpu-temp-widget/` | Live CPU temperature readout in breadbar's stats area, via `bread.widget` + `bread.fs.read` on a timer. Directory module with a `bread.module.toml` declaring `fs.read` + `widget` — the permission-manifest worked example. | edit `TEMP_PATH` for your hwmon layout |
| `bluetooth-toggle-widget.lua` | One-click Bluetooth power toggle in breadbar's tray, via `bread.widget` + a click handler. | none | | `bluetooth-toggle-widget.lua` | One-click Bluetooth power toggle in breadbar's tray, via `bread.widget` + a click handler. | none |

View file

@ -0,0 +1,228 @@
-- external-monitors — behave like a normal laptop desktop
--
-- Plug in any display (HDMI, DisplayPort, USB-C dock, a random TV) and
-- the session just works. No output names to edit.
--
-- • the laptop panel stays at its preferred (native) mode
-- • each external uses its preferred mode and refresh
-- • new screens clone the laptop (set ARRANGE = "extend" to sit to the right)
-- • closing the lid does not sleep while an external is on
-- • unplug everything and the laptop is the only display again
--
-- Drop-in: copy to ~/.config/bread/modules/ and `bread reload`.
local M = bread.module({
name = "external-monitors",
version = "1.0.0",
after = { "bread.monitors" },
})
-- "mirror" = every external clones the laptop (presentations, TVs)
-- "extend" = extra desktop to the right
local ARRANGE = "mirror"
local SCALE = "auto"
local INTERNAL_RE = "^eDP"
local INHIBITOR = "/tmp/bread-lid-inhibitor.pid"
local function inhibit_lid()
if bread.fs.exists(INHIBITOR) then return end
bread.exec(
"bash -c 'systemd-inhibit --what=handle-lid-switch --who=bread "
.. "--why=external-display sleep infinity & echo $! > "
.. INHIBITOR
.. "'"
)
end
local function release_lid()
bread.exec(
"bash -c 'kill $(cat " .. INHIBITOR .. " 2>/dev/null) 2>/dev/null; rm -f " .. INHIBITOR .. "'"
)
end
local function is_internal(name)
return type(name) == "string" and name:match(INTERNAL_RE) ~= nil
end
local function drm_status(name)
for card = 0, 5 do
local raw = bread.fs.read(string.format("/sys/class/drm/card%d-%s/status", card, name))
if raw then
return raw:match("^%s*(%S+)")
end
end
return nil
end
local function drm_first_mode(name)
for card = 0, 5 do
local raw = bread.fs.read(string.format("/sys/class/drm/card%d-%s/modes", card, name))
if raw then
local w, h = raw:match("(%d+)x(%d+)")
if w then
return tonumber(w), tonumber(h)
end
end
end
return 1920, 1080
end
local function list_connectors()
local names = {}
local ok, out = bread.exec_capture("ls /sys/class/drm", { timeout_ms = 500 })
if not ok or not out then
return names
end
for ent in out:gmatch("[^%s]+") do
local name = ent:match("^card%d+%-(.+)$")
if name and not name:match("^Writeback") then
names[#names + 1] = name
end
end
table.sort(names)
return names
end
local function connected()
local internal, externals = nil, {}
for _, name in ipairs(list_connectors()) do
if drm_status(name) == "connected" then
if is_internal(name) then
internal = internal or name
else
externals[#externals + 1] = name
end
end
end
return internal or "eDP-1", externals
end
-- BOS Hyprland talks Lua (`hl.monitor`). Stock Hyprland uses the
-- `monitor=` keyword. Try eval first, then keyword.
local function apply_monitor(opts)
local extra = ""
if opts.mirror and opts.mirror ~= "" then
extra = string.format(", mirror = %q", opts.mirror)
end
local expr = string.format(
"hl.monitor({ output = %q, mode = %q, position = %q, scale = %q%s })",
opts.output,
opts.mode or "preferred",
opts.position or "0x0",
opts.scale or SCALE,
extra
)
local resp = bread.hyprland.eval(expr)
if type(resp) == "string" and resp:match("error") then
local spec = string.format(
"%s, %s, %s, %s",
opts.output,
opts.mode or "preferred",
opts.position or "0x0",
opts.scale or SCALE
)
if opts.mirror and opts.mirror ~= "" then
spec = spec .. ", mirror, " .. opts.mirror
end
bread.hyprland.keyword("monitor", spec)
end
end
local function apply(internal, externals)
apply_monitor({
output = internal,
mode = "preferred",
position = "0x0",
scale = SCALE,
})
if ARRANGE == "mirror" then
for _, name in ipairs(externals) do
apply_monitor({
output = name,
mode = "preferred",
position = "0x0",
scale = SCALE,
mirror = internal,
})
end
return
end
local x = select(1, drm_first_mode(internal)) or 1920
for _, name in ipairs(externals) do
apply_monitor({
output = name,
mode = "preferred",
position = x .. "x0",
scale = SCALE,
})
local w = select(1, drm_first_mode(name)) or 1920
x = x + w
end
end
function M.on_load()
local last = nil
local applied = false
local function evaluate()
local internal, externals = connected()
local sig = internal .. "|" .. table.concat(externals, ",")
if sig == last then
return
end
last = sig
if #externals == 0 then
if applied then
apply_monitor({
output = internal,
mode = "preferred",
position = "0x0",
scale = SCALE,
})
release_lid()
applied = false
end
return
end
apply(internal, externals)
inhibit_lid()
applied = true
bread.log("[external-monitors] " .. internal .. " + " .. table.concat(externals, ", "))
end
local settle = bread.debounce(1500, evaluate)
bread.on("bread.hyprland.monitor.connected", function(event)
local name = event.data and event.data.name
if name and not is_internal(name) then
bread.notify("Display connected: " .. name, { urgency = "low" })
end
settle()
end)
bread.on("bread.hyprland.monitor.disconnected", function()
settle()
end)
bread.on("bread.device.**", function(event)
local sub = event.data and event.data.subsystem
if sub == "drm" then
settle()
end
end)
bread.hyprland.on_raw("configreloaded", function()
last = nil
evaluate()
end)
bread.every(3000, evaluate)
settle()
end
return M

View file

@ -1,5 +1,5 @@
{ {
"0": "lua/mod.rs", "0": "LuaEngine",
"1": "RawEvent", "1": "RawEvent",
"2": "config.rs", "2": "config.rs",
"3": "Server", "3": "Server",
@ -15,24 +15,24 @@
"13": "bread-cli/src/main.rs", "13": "bread-cli/src/main.rs",
"14": "types.rs", "14": "types.rs",
"15": "podman.rs", "15": "podman.rs",
"16": "StateHandle", "16": "Value",
"17": "run_udev_monitor", "17": "Result",
"18": "hooks_shell.rs", "18": "hooks_shell.rs",
"19": "bluetooth.rs", "19": "bluetooth.rs",
"20": "SubscriptionId", "20": "SubscriptionId",
"21": "glob.rs", "21": "glob.rs",
"22": "run_state_engine", "22": "StateHandle",
"23": "RtnetlinkAdapter", "23": "Adapter",
"24": "network.rs", "24": "network.rs",
"25": "power.rs", "25": "power.rs",
"26": "hyprland.rs", "26": "hyprland.rs",
"27": "Adapter", "27": "parse_upower_message",
"28": "dl.breadway.dev Distribution", "28": "main Branch",
"29": "git-branch-widget.lua", "29": "git-branch-widget.lua",
"30": "TestHarness", "30": "TestHarness",
"31": "Sync", "31": "Sync",
"32": "active-window-widget.lua", "32": "active-window-widget.lua",
"33": "cpu-temp-widget.lua", "33": ".new",
"34": "focus-mode-widget.lua", "34": "focus-mode-widget.lua",
"35": "workflow-status-widget.lua", "35": "workflow-status-widget.lua",
"36": "bread.widget API", "36": "bread.widget API",
@ -59,10 +59,10 @@
"57": "bread.system.startup", "57": "bread.system.startup",
"58": "Monitors Configuration Example", "58": "Monitors Configuration Example",
"59": "Binds Module (Built-in)", "59": "Binds Module (Built-in)",
"60": "Bakery Package Manager", "60": "lua/mod.rs",
"61": "Phase 3: GUI Control Center", "61": "external-monitors.lua",
"62": "Phase 5: Cross-Device Mesh", "62": "AGENTS.md — Repo hygiene",
"63": "Dev Version Computation", "63": "CLAUDE.md — Repo hygiene",
"64": "ModuleHostLua", "64": "ModuleHostLua",
"65": "ModuleHostRegistry", "65": "ModuleHostRegistry",
"66": "xtask/src/main.rs", "66": "xtask/src/main.rs",
@ -86,5 +86,10 @@
"84": "State", "84": "State",
"85": "init.lua", "85": "init.lua",
"86": "Execution", "86": "Execution",
"87": "packaging/README.md" "87": "packaging/README.md",
"88": "PathBuf",
"89": "build.sh",
"90": "beta Release Track",
"91": "dev Release Track",
"92": "stable Release Track"
} }

View file

@ -0,0 +1 @@
{"0": "dff8ca2baa85bb77", "1": "2213379d8e986e1b", "2": "055a5a9a2c0abb47", "3": "4e76d4b9b12f60a0", "4": "15d25492162f61da", "5": "c9e7c9b0b9f9532c", "6": "5dc03258b399572c", "7": "7e3d24ea3cd2b4cb", "8": "d2b23fb40be07856", "9": "c63bb5497aa74cc4", "10": "37be3ba834804202", "11": "e820233ee9e24e6c", "12": "90afbdba0e9131b5", "13": "a893df0933556d63", "14": "2b140ca807922de5", "15": "77fe3c708c10a92e", "16": "f46d2bf3ec15783d", "17": "9d5d3a5ebfca7e96", "18": "4b221b9f82894754", "19": "1af003225b1510f7", "20": "cec4f1891a3503a7", "21": "af54da4748cbfe19", "22": "755f92ef4fb448a8", "23": "8d61c62e8cd29e24", "24": "a6096a26ebcbe7ca", "25": "4bb3423b0748a5b8", "26": "f14069a977bb7109", "27": "c24364ae8589386f", "28": "b7dfd1e572840cf9", "29": "38bd4a3ed7d82df4", "30": "c7a227c868287ece", "31": "8298f357ade782b6", "32": "8c3f9c59418c0d78", "33": "d441528441bffad6", "34": "0ca065898bae7a4c", "35": "91d64164a425221e", "36": "8f4f1c63c1339596", "37": "f29f07965a593c46", "38": "69c04956206264ea", "39": "d5e6784916307537", "40": "9dd3e8ecc75d42d1", "41": "975bc2eaec9ade41", "42": "c119297bd4e771d7", "43": "5df098735d8e8ccf", "44": "3ea089711b226db5", "45": "937d314565bd1f7c", "46": "644deb50d1523213", "47": "a8ba58be12f4eaaf", "48": "07122a351039caad", "49": "85df939415e8bf76", "50": "ccecca45fa071d89", "51": "d12f6c2877bf28fc", "52": "8fde0947b8e44878", "53": "1894c9960c737861", "54": "8eb6456a35bc1424", "55": "266c21cbaa157140", "56": "3dd39e27b03e805b", "57": "9914e60060e52831", "58": "082ed57548a0aa26", "59": "1d8fa6f90af6c7a9", "60": "5b3a15eab473b681", "61": "53961581c79663fe", "62": "1c3daa39aab41ca2", "63": "cd7e1aedbdbb382a", "64": "793a68e5b584e15a", "65": "e5048b5a19d78c81", "66": "abaa846ce9fdc66e", "67": "a46e2827ad3261b0", "68": "56d1c4600f18d094", "69": "b29197139c1a5fc7", "70": "f6f5196c6a2f3084", "71": "f8b572524780f968", "72": "95bd136ecb3896b6", "73": "a2e1d482f5282a2b", "74": "96279e53156461bf", "75": "3c234d3ea2845544", "76": "37f5bfa38e9dda4b", "77": "c95e6689883cdc3d", "78": "784aa039bef2aabf", "79": "1e1cd6b488d8850c", "80": "42213e202400e524", "81": "bb8f3086e24c3f87", "82": "8f000e4f1c6edcd1", "83": "19573b318feb4438", "84": "47016ab7f59f2ab4", "85": "da1e8594a8fb071a", "86": "d730f8d81a4b91ff", "87": "af426938b90fa391", "88": "dce55fb2c83882bb", "89": "9d30c290d7898f81", "90": "356e8182b8067c22", "91": "825919e98a656895", "92": "c5d2ff6dacf845a7"}

View file

@ -0,0 +1,90 @@
{
"0": "lua/mod.rs",
"1": "RawEvent",
"2": "config.rs",
"3": "Server",
"4": "widget.rs",
"5": "Bread Daemon (breadd)",
"6": "filesystem.rs",
"7": "git.rs",
"8": "Result",
"9": "state_engine.rs",
"10": "modules_mgmt.rs",
"11": "systemd.rs",
"12": "hooks_git.rs",
"13": "bread-cli/src/main.rs",
"14": "types.rs",
"15": "podman.rs",
"16": "StateHandle",
"17": "run_udev_monitor",
"18": "hooks_shell.rs",
"19": "bluetooth.rs",
"20": "SubscriptionId",
"21": "glob.rs",
"22": "run_state_engine",
"23": "RtnetlinkAdapter",
"24": "network.rs",
"25": "power.rs",
"26": "hyprland.rs",
"27": "Adapter",
"28": "dl.breadway.dev Distribution",
"29": "git-branch-widget.lua",
"30": "TestHarness",
"31": "Sync",
"32": "active-window-widget.lua",
"33": "cpu-temp-widget.lua",
"34": "focus-mode-widget.lua",
"35": "workflow-status-widget.lua",
"36": "bread.widget API",
"37": "bluetooth-toggle-widget.lua",
"38": "pause-media-on-headphone-unplug.lua",
"39": "Autostart Example Module",
"40": "dock-monitors.lua",
"41": "dock-workflow.lua",
"42": "low-battery-warning.lua",
"43": "install.sh",
"44": "Filesystem Adapter",
"45": "Git Adapter",
"46": "Podman Adapter",
"47": "Systemd Adapter",
"48": "bread.after(delay_ms, fn)",
"49": "bread.bluetooth namespace",
"50": "bread.every(interval_ms, fn)",
"51": "bread.exec(cmd)",
"52": "bread.hyprland namespace",
"53": "bread.notify(message, opts)",
"54": "bread.state.watch(path, fn)",
"55": "bread-cli/src/lib.rs",
"56": "core/mod.rs",
"57": "bread.system.startup",
"58": "Monitors Configuration Example",
"59": "Binds Module (Built-in)",
"60": "Bakery Package Manager",
"61": "Phase 3: GUI Control Center",
"62": "Phase 5: Cross-Device Mesh",
"63": "Dev Version Computation",
"64": "ModuleHostLua",
"65": "ModuleHostRegistry",
"66": "xtask/src/main.rs",
"67": "Bread",
"68": "rules.rs",
"69": "Normalized events",
"70": "Bread Documentation",
"71": "udev.rs",
"72": "Dictionary: Lua API",
"73": "Out-of-process module sandboxing *(Since: v1.6)*",
"74": "Dictionary: Built-in modules",
"75": "Events",
"76": "Machine and filesystem",
"77": "Contributing",
"78": "Bluetooth",
"79": "Widgets *(Since: v1.3)*",
"80": "Getting started",
"81": "Capability-scoped modules *(Since: v1.5)*",
"82": "Workflows *(Since: v1.2)*",
"83": "Timers",
"84": "State",
"85": "init.lua",
"86": "Execution",
"87": "packaging/README.md"
}

View file

@ -0,0 +1,397 @@
# Graph Report - bread (2026-08-15)
## Corpus Check
- 62 files · ~88,250 words
- Verdict: corpus is large enough that graph structure adds value.
## Summary
- 1467 nodes · 3347 edges · 88 communities (64 shown, 24 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 48 edges (avg confidence: 0.78)
- Token cost: 0 input · 0 output
## Graph Freshness
- Built from commit: `a6973360`
- Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation)
- lua/mod.rs
- RawEvent
- config.rs
- Server
- widget.rs
- Bread Daemon (breadd)
- filesystem.rs
- git.rs
- Result
- state_engine.rs
- modules_mgmt.rs
- systemd.rs
- hooks_git.rs
- bread-cli/src/main.rs
- types.rs
- podman.rs
- StateHandle
- run_udev_monitor
- hooks_shell.rs
- bluetooth.rs
- SubscriptionId
- glob.rs
- run_state_engine
- RtnetlinkAdapter
- network.rs
- power.rs
- hyprland.rs
- Adapter
- dl.breadway.dev Distribution
- git-branch-widget.lua
- TestHarness
- Sync
- active-window-widget.lua
- cpu-temp-widget.lua
- focus-mode-widget.lua
- workflow-status-widget.lua
- bread.widget API
- bluetooth-toggle-widget.lua
- pause-media-on-headphone-unplug.lua
- Autostart Example Module
- install.sh
- Filesystem Adapter
- Git Adapter
- Podman Adapter
- Systemd Adapter
- bread.after(delay_ms, fn)
- bread.bluetooth namespace
- bread.every(interval_ms, fn)
- bread.exec(cmd)
- bread.hyprland namespace
- bread.notify(message, opts)
- bread.state.watch(path, fn)
- bread.system.startup
- Monitors Configuration Example
- Binds Module (Built-in)
- Bakery Package Manager
- Phase 3: GUI Control Center
- Phase 5: Cross-Device Mesh
- Dev Version Computation
- ModuleHostLua
- ModuleHostRegistry
- xtask/src/main.rs
- Bread
- rules.rs
- Normalized events
- Bread Documentation
- udev.rs
- Dictionary: Lua API
- Out-of-process module sandboxing *(Since: v1.6)*
- Dictionary: Built-in modules
- Events
- Machine and filesystem
- Contributing
- Bluetooth
- Widgets *(Since: v1.3)*
- Getting started
- Capability-scoped modules *(Since: v1.5)*
- Workflows *(Since: v1.2)*
- Timers
- State
- init.lua
- Execution
- packaging/README.md
## God Nodes (most connected - your core abstractions)
1. `LuaEngine` - 59 edges
2. `RawEvent` - 49 edges
3. `BreadEvent` - 38 edges
4. `raw()` - 37 edges
5. `RuntimeState` - 34 edges
6. `StateHandle` - 28 edges
7. `now_unix_ms()` - 26 edges
8. `Adapter` - 25 edges
9. `SubscriptionId` - 25 edges
10. `ModuleHostLua` - 24 edges
## Surprising Connections (you probably didn't know these)
- `parse_bluetooth_message()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/bluetooth.rs → bread-shared/src/lib.rs
- `try_enumerate()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/bluetooth.rs → bread-shared/src/lib.rs
- `classify()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/filesystem.rs → bread-shared/src/lib.rs
- `network_raw_event()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/network.rs → bread-shared/src/lib.rs
- `power_raw_event()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/power.rs → bread-shared/src/lib.rs
## Import Cycles
- 2-file cycle: `breadd/src/core/state_engine.rs -> breadd/src/lua/mod.rs -> breadd/src/core/state_engine.rs`
- 2-file cycle: `bread-shared/src/lib.rs -> bread-shared/src/module_host_ipc.rs -> bread-shared/src/lib.rs`
## Hyperedges (group relationships)
- **** — ci_dev_release, workflow_version_compute, release_track_dev, distribution_dl_breadway_dev, package_bakery [INFERRED]
- **** — adapter_udev, adapter_hyprland, adapter_power, sys_bread_daemon, api_bread_on, sys_lua_runtime [INFERRED]
- **** — config_init_lua, config_modules_dir, pattern_module_skeleton, api_bread_on, sys_lua_runtime [INFERRED]
- **** — api_bread_workflow, api_bread_spawn, api_bread_wait, example_dock_workflow, api_bread_notify [INFERRED]
- **** — api_bread_widget, api_bread_every, example_widget_cpu_temp, api_bread_state_watch [INFERRED]
- **** — branch_main, ci_dev_release, ci_rc_release, ci_stable_release, release_track_dev, release_track_beta, release_track_stable [INFERRED]
## Communities (88 total, 24 thin omitted)
### Community 0 - "lua/mod.rs"
Cohesion: 0.06
Nodes (86): now_unix_ms(), ModulePermission, Option, String, WidgetSpec, RuntimeState, bluetooth_connect(), bluetooth_disconnect() (+78 more)
### Community 1 - "RawEvent"
Cohesion: 0.05
Nodes (67): adapter_source_is_hashable_and_eq(), AdapterSource, bread_event_new_accepts_owned_and_borrowed_names(), bread_event_new_assigns_unique_id_and_no_cause(), bread_event_new_sets_current_timestamp(), bread_event_with_timestamp_preserves_timestamp_and_assigns_id(), BreadEvent, DaemonSection (+59 more)
### Community 2 - "config.rs"
Cohesion: 0.07
Nodes (50): AdaptersConfig, AdapterToggle, compat_section_defaults_legacy_hyprland_names_to_true(), CompatConfig, Config, config_path(), config_path_falls_back_to_home_when_no_xdg(), config_path_respects_xdg_config_home() (+42 more)
### Community 3 - "Server"
Cohesion: 0.05
Nodes (41): A, command_target(), event_domain(), is_known_app(), is_reserved_domain(), Option, validate_app_namespace(), validate_command_event() (+33 more)
### Community 4 - "widget.rs"
Cohesion: 0.07
Nodes (32): accepts_node_count_at_max(), accepts_tree_at_max_depth(), Align, Background, box_of(), default_orientation(), FontWeight, is_valid_class() (+24 more)
### Community 5 - "Bread Daemon (breadd)"
Cohesion: 0.06
Nodes (39): Bluetooth Adapter, Hyprland Adapter, Network Adapter, Power Adapter, udev Adapter, bread.on(pattern, fn), bread.spawn(fn), bread.wait(pattern, opts) (+31 more)
### Community 6 - "filesystem.rs"
Cohesion: 0.12
Nodes (28): classify(), classify_build_artifact_created_in_target(), classify_debounces_rapid_repeat_events_for_same_path(), classify_file_changed_for_ordinary_source_file(), classify_silent_for_modify_in_target_not_create(), classify_silent_under_git(), classify_silent_under_node_modules(), detect_markers() (+20 more)
### Community 7 - "git.rs"
Cohesion: 0.12
Nodes (22): check_ahead_behind(), check_dirty(), discover_repos(), expand_roots(), expand_roots_globs_single_trailing_star(), expand_roots_skips_unreadable_glob_parent_without_panicking(), expand_roots_uses_literal_path_without_trailing_star(), GitAdapter (+14 more)
### Community 8 - "Result"
Cohesion: 0.15
Nodes (50): daemon_survives_repeated_reloads_and_pipeline_resumes(), emit_with_app_source_allows_command_to_another_app(), emit_with_app_source_rejects_wrong_namespace(), emit_with_app_source_still_rejects_foreign_app_namespace(), emit_with_internal_source_is_rejected(), emit_with_known_app_source_routes_through_normalizer(), emit_with_unregistered_app_source_is_rejected(), emit_without_event_errors() (+42 more)
### Community 9 - "state_engine.rs"
Cohesion: 0.12
Nodes (19): apply_device_change(), apply_event_to_state(), device_connect_adds_device_with_all_fields(), device_connect_is_idempotent_for_same_id(), device_disconnect_of_unknown_id_is_noop(), device_disconnect_removes_matching_id(), ev(), monitor_connect_adds_new_monitor() (+11 more)
### Community 10 - "modules_mgmt.rs"
Cohesion: 0.11
Nodes (36): audit_detects_fs_read_and_widget_from_cpu_temp_widget_style_module(), audit_extracts_exec_bin_hint_and_ignores_baseline_calls(), audit_module(), audit_scans_required_sibling_files_in_module_directory(), classify_call_site(), collect_lua_files(), copy_dir(), extract_first_string_arg() (+28 more)
### Community 11 - "systemd.rs"
Cohesion: 0.12
Nodes (17): active_state_to_kind(), failure_result(), get_unit_path(), handle_message(), is_failed_transition(), query_active_state(), Connection, HashMap (+9 more)
### Community 12 - "hooks_git.rs"
Cohesion: 0.15
Nodes (24): all_hook_scripts_exit_0_unconditionally(), all_hook_scripts_start_with_shebang_and_marker(), branch_changed_emit_line(), commit_created_emit_line(), emit_line_for(), git_dir(), hook_script(), hook_script_rejects_unknown_name() (+16 more)
### Community 13 - "bread-cli/src/main.rs"
Cohesion: 0.19
Nodes (29): CausalityTracker, Cli, Commands, config_directory(), daemon_socket_path(), format_timestamp(), handle_modules_cmd(), HooksCommand (+21 more)
### Community 14 - "types.rs"
Cohesion: 0.17
Nodes (21): Device, DeviceRule, DeviceTopology, InterfaceState, MatchCondition, ModuleStatus, Monitor, NetworkState (+13 more)
### Community 15 - "podman.rs"
Cohesion: 0.15
Nodes (17): container_event(), ignores_remove_event(), ignores_stop_event_to_avoid_double_emit_with_died(), ignores_unknown_action(), map_podman_event(), maps_died_event(), maps_health_status_event(), maps_start_event() (+9 more)
### Community 16 - "StateHandle"
Cohesion: 0.14
Nodes (10): condition_matches(), resolve_device(), Option, Result, String, Value, Vec, StateHandle (+2 more)
### Community 17 - "run_udev_monitor"
Cohesion: 0.35
Nodes (9): enumerate_with_udev(), Result, Self, Sender, String, Vec, run_udev_monitor(), ScannedDevice (+1 more)
### Community 18 - "hooks_shell.rs"
Cohesion: 0.18
Nodes (11): hook_scripts_background_every_emit_call(), hooks_dir(), install_shell(), join_line_continuations(), Option, PathBuf, Result, String (+3 more)
### Community 19 - "bluetooth.rs"
Cohesion: 0.15
Nodes (10): address_from_path(), BluetoothAdapter, parse_bluetooth_message(), Message, Option, Result, Self, Sender (+2 more)
### Community 20 - "SubscriptionId"
Cohesion: 0.29
Nodes (13): HashMap, String, Vec, Subscription, SubscriptionId, SubscriptionTable, table_add_assigns_provided_id_and_finds_match(), table_clear_removes_all() (+5 more)
### Community 22 - "run_state_engine"
Cohesion: 0.27
Nodes (12): dispatch_event(), handle_command(), Arc, AtomicU64, Receiver, RwLock, Self, Sender (+4 more)
### Community 23 - "RtnetlinkAdapter"
Cohesion: 0.22
Nodes (7): ip_from_bytes(), Option, Result, Self, Sender, String, RtnetlinkAdapter
### Community 24 - "network.rs"
Cohesion: 0.27
Nodes (9): has_default_route(), network_raw_event(), NetworkAdapter, NetworkSnapshot, read_network_state(), BTreeMap, Result, Sender (+1 more)
### Community 25 - "power.rs"
Cohesion: 0.26
Nodes (8): power_raw_event(), PowerAdapter, PowerSnapshot, read_power_state(), Option, Result, Self, Sender
### Community 26 - "hyprland.rs"
Cohesion: 0.29
Nodes (7): hyprland_event_socket(), HyprlandAdapter, parse_hyprland_line(), PathBuf, Result, Sender, String
### Community 27 - "Adapter"
Cohesion: 0.23
Nodes (8): Adapter, parse_upower_message(), Message, Result, Self, Sender, UPowerAdapter, Send
### Community 28 - "dl.breadway.dev Distribution"
Cohesion: 0.25
Nodes (8): main Branch, dev-release.yml Workflow, rc-release.yml Workflow, release.yml Workflow, dl.breadway.dev Distribution, beta Release Track, dev Release Track, stable Release Track
### Community 29 - "git-branch-widget.lua"
Cohesion: 0.62
Nodes (6): focused_tab_cwd(), git_info(), M.on_load(), shell_quote(), update(), widget_root()
### Community 30 - "TestHarness"
Cohesion: 0.16
Nodes (16): main(), parse_args(), Option, String, killing_a_module_host_child_does_not_take_down_breadd_or_other_modules(), os_execute_and_io_open_are_denied_at_the_kernel_level_outside_granted_scope(), Child, Drop (+8 more)
### Community 31 - "Sync"
Cohesion: 0.50
Nodes (3): main(), Result, Sync
### Community 32 - "active-window-widget.lua"
Cohesion: 0.83
Nodes (3): label_for(), M.on_load(), widget_root()
### Community 33 - "cpu-temp-widget.lua"
Cohesion: 0.83
Nodes (3): M.on_load(), read_temp_c(), widget_root()
### Community 34 - "focus-mode-widget.lua"
Cohesion: 1.00
Nodes (3): is_focused(), M.on_load(), widget_root()
### Community 35 - "workflow-status-widget.lua"
Cohesion: 0.83
Nodes (3): M.on_load(), most_relevant(), widget_update()
### Community 36 - "bread.widget API"
Cohesion: 0.67
Nodes (3): bread.widget API, CPU Temperature Widget Example, Live Widget Update Pattern
### Community 64 - "ModuleHostLua"
Cohesion: 0.10
Nodes (38): call(), HostMessage, IoCommand, RpcResponse, Duration, Option, PathBuf, Receiver (+30 more)
### Community 65 - "ModuleHostRegistry"
Cohesion: 0.07
Nodes (43): bin_allowed(), path_allowed(), HashMap, Option, OwnedWriteHalf, Result, Sender, String (+35 more)
### Community 66 - "xtask/src/main.rs"
Cohesion: 0.11
Nodes (36): BTreeSet, ExitCode, check(), CheckReport, clean_state_passes(), extract_cli_commands(), extract_enum_variants(), extract_ipc_methods() (+28 more)
### Community 67 - "Bread"
Cohesion: 0.06
Nodes (28): Deprecations, Hyprland legacy flat event names (since v1.5), Bread Examples, Example 1: Porting keyboard_and_display_watcher.sh (system script), Example 2: Porting autostart.lua, Example 3: Porting display/monitors.lua, Example 4: Multi-step automation workflows, Example 5: A live widget in breadbar (+20 more)
### Community 68 - "rules.rs"
Cohesion: 0.14
Nodes (27): empty_file_loads_with_no_rules(), empty_on_is_treated_as_missing(), invalid_toml_is_fatal(), load_rules(), missing_on_is_reported_with_index_and_no_on(), multiple_action_keys_is_reported(), one_bad_rule_does_not_block_other_valid_rules(), ParsedRule (+19 more)
### Community 69 - "Normalized events"
Cohesion: 0.12
Nodes (16): Bluetooth (BlueZ), Compatibility: `[compat]` config, Devices (udev / Bluetooth), Filesystem / project detection, Git (hooks + dirty-state poller), Hyprland, Network, Normalized events (+8 more)
### Community 70 - "Bread Documentation"
Cohesion: 0.14
Nodes (14): API Stability & Versioning, Bread Documentation, Contents, Debugging tips, Dictionary: Event reference, Dictionary: IPC protocol, Dictionary: Runtime state schema, Integrating a bread\* app (+6 more)
### Community 71 - "udev.rs"
Cohesion: 0.32
Nodes (10): build_device_event(), build_event(), enumerate_payload_includes_classification_fields(), prop_bool(), prop_str(), Option, Value, udev_event_payload() (+2 more)
### Community 72 - "Dictionary: Lua API"
Cohesion: 0.17
Nodes (12): `bread.debounce(delay_ms, fn) -> wrapped_fn`, `bread.log(msg)` / `bread.warn(msg)` / `bread.error(msg)`, `bread.notify(message, opts)`, `bread.profile.activate(name)`, Dictionary: Lua API, Hyprland, Module declaration, Module lifecycle hooks (+4 more)
### Community 73 - "Out-of-process module sandboxing *(Since: v1.6)*"
Cohesion: 0.20
Nodes (10): Architecture, Crash isolation, New IPC methods, Out-of-process module sandboxing *(Since: v1.6)*, RPC bridge coverage, The gap this closes, The Landlock sandbox, The token/identity handshake (+2 more)
### Community 74 - "Dictionary: Built-in modules"
Cohesion: 0.20
Nodes (10): `bread.binds`, `bread.devices`, `bread.monitors`, `bread.rules` *(Since: v1.5)*, `bread.workspaces`, Device rule options, Dictionary: Built-in modules, Example: Dock-specific setup (+2 more)
### Community 75 - "Events"
Cohesion: 0.20
Nodes (10): `bread.emit(event, data)`, `bread.filter(pattern, fn, opts) -> id`, `bread.off(id)`, `bread.on(pattern, fn) -> id`, `bread.once(pattern, fn) -> id`, `bread.spawn(fn)`, `bread.wait_all(patterns, opts) -> table` *(Since: v1.2)*, `bread.wait_any(patterns, opts) -> event | nil` *(Since: v1.2)* (+2 more)
### Community 76 - "Machine and filesystem"
Cohesion: 0.20
Nodes (10): `bread.fs.exists(path) -> bool`, `bread.fs.expand(path) -> string`, `bread.fs.read(path) -> string | nil`, `bread.fs.readlink(path) -> string | nil`, `bread.fs.write(path, content)`, `bread.json.decode(str) -> table | nil`, `bread.machine.has_tag(tag) -> bool`, `bread.machine.name() -> string` (+2 more)
### Community 77 - "Contributing"
Cohesion: 0.22
Nodes (8): Branches, CI, Contributing, Keeping the API docs honest, Local development, Questions, The release cycle, Tracks, from a user's perspective
### Community 78 - "Bluetooth"
Cohesion: 0.22
Nodes (9): Bluetooth, `bread.bluetooth.connect(address)`, `bread.bluetooth.devices() -> table | nil`, `bread.bluetooth.disconnect(address)`, `bread.bluetooth.power(enabled)`, `bread.bluetooth.powered() -> bool | nil`, `bread.bluetooth.scan(enabled)`, Example: auto-connect headphones on AC power (+1 more)
### Community 79 - "Widgets *(Since: v1.3)*"
Cohesion: 0.22
Nodes (9): `bread.widget.list() -> table`, `bread.widget.register(spec) -> ok, err`, `bread.widget.remove(id) -> bool`, `bread.widget.update(id, patch) -> ok, err`, Click events, Node types, `style` *(Since: v1.4)*, Style vs. `class` (+1 more)
### Community 80 - "Getting started"
Cohesion: 0.33
Nodes (6): 1) Create a minimal config, 2) The fast path: `rules.toml` *(Since: v1.5)*, 3) Minimal `init.lua`, 4) Start the daemon, 5) Check that it's running, Getting started
### Community 81 - "Capability-scoped modules *(Since: v1.5)*"
Cohesion: 0.33
Nodes (6): Baseline (always available, no manifest entry needed), `bread modules audit <name>`, Capability-scoped modules *(Since: v1.5)*, Gated — requires a matching `[[permissions]]` entry, `path`/`bin` enforcement depends on where the module runs, `require("bread.devices")` still works from a scoped module
### Community 82 - "Workflows *(Since: v1.2)*"
Cohesion: 0.33
Nodes (6): `bread.workflow.define(name, fn)`, `bread.workflow.list() -> table`, `bread.workflow.start(name, opts)`, `bread.workflow.status(name) -> table | nil`, `bread.workflow.step(label)`, Workflows *(Since: v1.2)*
### Community 83 - "Timers"
Cohesion: 0.50
Nodes (4): `bread.after(delay_ms, fn) -> id`, `bread.cancel(id)`, `bread.every(interval_ms, fn) -> id`, Timers
### Community 84 - "State"
Cohesion: 0.50
Nodes (4): `bread.state.get(path)`, `bread.state.watch(path, fn) -> id`, State, Typed shorthands
### Community 85 - "init.lua"
Cohesion: 0.83
Nodes (3): M.on_load(), read_temp_c(), widget_root()
### Community 86 - "Execution"
Cohesion: 0.67
Nodes (3): `bread.exec_capture(cmd, opts) -> ok, stdout`, `bread.exec(cmd)`, Execution
## Knowledge Gaps
- **179 isolated node(s):** `install.sh script`, `Branches`, `The release cycle`, `Tracks, from a user's perspective`, `Keeping the API docs honest` (+174 more)
These have ≤1 connection - possible missing edges or undocumented components.
- **24 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions
_Questions this graph is uniquely positioned to answer:_
- **Why does `RawEvent` connect `RawEvent` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `run_udev_monitor`, `bluetooth.rs`, `RtnetlinkAdapter`, `network.rs`, `power.rs`, `hyprland.rs`, `Adapter`?**
_High betweenness centrality (0.094) - this node is a cross-community bridge._
- **Why does `Adapter` connect `Adapter` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `run_udev_monitor`, `bluetooth.rs`, `RtnetlinkAdapter`, `network.rs`, `power.rs`, `hyprland.rs`, `Sync`?**
_High betweenness centrality (0.077) - this node is a cross-community bridge._
- **Why does `BreadEvent` connect `RawEvent` to `ModuleHostLua`, `lua/mod.rs`, `ModuleHostRegistry`, `Server`, `state_engine.rs`, `run_state_engine`?**
_High betweenness centrality (0.063) - this node is a cross-community bridge._
- **What connects `install.sh script`, `Branches`, `The release cycle` to the rest of the system?**
_179 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `lua/mod.rs` be split into smaller, more focused modules?**
_Cohesion score 0.056 - nodes in this community are weakly interconnected._
- **Should `RawEvent` be split into smaller, more focused modules?**
_Cohesion score 0.051842708517016396 - nodes in this community are weakly interconnected._
- **Should `config.rs` be split into smaller, more focused modules?**
_Cohesion score 0.07191780821917808 - nodes in this community are weakly interconnected._

View file

@ -0,0 +1,18 @@
{
"runs": [
{
"date": "2026-08-04T09:09:09.071813+00:00",
"input_tokens": 0,
"output_tokens": 0,
"files": 55
},
{
"date": "2026-08-04T09:28:29.057021+00:00",
"input_tokens": 72759,
"output_tokens": 0,
"files": 55
}
],
"total_input_tokens": 72759,
"total_output_tokens": 0
}

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,327 @@
{
"bread-cli/src/hooks_git.rs": {
"mtime": 1786800467.7200727,
"ast_hash": "7a29b5d5d90170f0aef9cececc7d8656",
"semantic_hash": "7a29b5d5d90170f0aef9cececc7d8656"
},
"bread-cli/src/hooks_shell.rs": {
"mtime": 1786800467.7201686,
"ast_hash": "c5d5b8922fcff79954ddb00496721603",
"semantic_hash": "c5d5b8922fcff79954ddb00496721603"
},
"bread-cli/src/lib.rs": {
"mtime": 1786800467.7201686,
"ast_hash": "d1bf6e1c239498521c42418f672bc400",
"semantic_hash": "d1bf6e1c239498521c42418f672bc400"
},
"bread-cli/src/main.rs": {
"mtime": 1786800467.7201686,
"ast_hash": "e1fbe63ea3b10e0887072ab7133d0508",
"semantic_hash": ""
},
"bread-cli/src/modules_mgmt.rs": {
"mtime": 1786801244.1263742,
"ast_hash": "1cb6f3e4fa26108f81215ab57bb02b91",
"semantic_hash": ""
},
"bread-cli/tests/modules.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "84fca8f87dc915b1cb523f8199e78521",
"semantic_hash": "84fca8f87dc915b1cb523f8199e78521"
},
"bread-emit/src/main.rs": {
"mtime": 1786800467.7206197,
"ast_hash": "350cefbf697cfd93f7df7b7bcc45a101",
"semantic_hash": "350cefbf697cfd93f7df7b7bcc45a101"
},
"bread-shared/src/apps.rs": {
"mtime": 1786801218.1467261,
"ast_hash": "e8419571e7a322019d71c89559fb02fb",
"semantic_hash": ""
},
"bread-shared/src/glob.rs": {
"mtime": 1786800467.7210522,
"ast_hash": "0594a313cb1909d1cca5fd5b8f241b68",
"semantic_hash": "0594a313cb1909d1cca5fd5b8f241b68"
},
"bread-shared/src/lib.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "236b73bad29f1544a28fbf3ee1ccc795",
"semantic_hash": ""
},
"bread-shared/src/widget.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "33272eb38c7fffbfa180cef7c5a286fc",
"semantic_hash": "33272eb38c7fffbfa180cef7c5a286fc"
},
"breadd/src/adapters/bluetooth.rs": {
"mtime": 1786800467.7214499,
"ast_hash": "4d1df67347d5b7c9cdbcb12921a6ae28",
"semantic_hash": "4d1df67347d5b7c9cdbcb12921a6ae28"
},
"breadd/src/adapters/filesystem.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56",
"semantic_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56"
},
"breadd/src/adapters/git.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "6e6ff6ca318e28cd94690c30d41b520b",
"semantic_hash": "6e6ff6ca318e28cd94690c30d41b520b"
},
"breadd/src/adapters/hyprland.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "71537dbd86b413d94476f8022054f1f4",
"semantic_hash": "71537dbd86b413d94476f8022054f1f4"
},
"breadd/src/adapters/mod.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "63885887c2fc3ea2314d7fe095e5df61",
"semantic_hash": "63885887c2fc3ea2314d7fe095e5df61"
},
"breadd/src/adapters/network.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "8706dc546b7e08d5aa084ca58c48559c",
"semantic_hash": "8706dc546b7e08d5aa084ca58c48559c"
},
"breadd/src/adapters/network_rtnetlink.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c",
"semantic_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c"
},
"breadd/src/adapters/podman.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "97c08551c0fe53b0a5888d98730d35db",
"semantic_hash": "97c08551c0fe53b0a5888d98730d35db"
},
"breadd/src/adapters/power.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "987d202ec0d30ec26b1d747a6e320ed7",
"semantic_hash": "987d202ec0d30ec26b1d747a6e320ed7"
},
"breadd/src/adapters/power_upower.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "fc0a36ca76d340c8be77644f63e462bf",
"semantic_hash": "fc0a36ca76d340c8be77644f63e462bf"
},
"breadd/src/adapters/systemd.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "b3884dbecd39acc38abdf67589a8b954",
"semantic_hash": "b3884dbecd39acc38abdf67589a8b954"
},
"breadd/src/adapters/udev.rs": {
"mtime": 1786800978.7399695,
"ast_hash": "568993c8c2dd218879eec57aee50a6b9",
"semantic_hash": ""
},
"breadd/src/core/config.rs": {
"mtime": 1786800467.7215972,
"ast_hash": "7f479bfb51647e6131c14f0c2f153d95",
"semantic_hash": ""
},
"breadd/src/core/mod.rs": {
"mtime": 1786800467.7223108,
"ast_hash": "e38bfdb894eabd208941bd3ffb1ef464",
"semantic_hash": ""
},
"breadd/src/core/normalizer.rs": {
"mtime": 1786801218.2233918,
"ast_hash": "1596f60df5049ff8715f66f64bee9f8a",
"semantic_hash": ""
},
"breadd/src/core/state_engine.rs": {
"mtime": 1786800467.7223108,
"ast_hash": "84a35ee78f3881261a3ce378ea3c03a0",
"semantic_hash": ""
},
"breadd/src/core/subscriptions.rs": {
"mtime": 1786800467.7223108,
"ast_hash": "8735d4717b74523c787dab9ea2b0bbd8",
"semantic_hash": "8735d4717b74523c787dab9ea2b0bbd8"
},
"breadd/src/core/supervisor.rs": {
"mtime": 1786800467.7223108,
"ast_hash": "403f7ba1807c71f9b89d81bfeff2681a",
"semantic_hash": "403f7ba1807c71f9b89d81bfeff2681a"
},
"breadd/src/core/types.rs": {
"mtime": 1786800467.7223108,
"ast_hash": "8bd070d4c09725d8717749a79aa42a92",
"semantic_hash": ""
},
"breadd/src/ipc/mod.rs": {
"mtime": 1786800912.9916558,
"ast_hash": "54af229257e555313f7d4b59d57ff8d3",
"semantic_hash": ""
},
"breadd/src/lua/mod.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "ed13e2495399d532625653a22a4fee14",
"semantic_hash": ""
},
"breadd/src/main.rs": {
"mtime": 1786800467.722855,
"ast_hash": "4b31888cc9e76210df0c7cff3a8b1e42",
"semantic_hash": ""
},
"breadd/tests/ipc_integration.rs": {
"mtime": 1786801218.36339,
"ast_hash": "2b5bade2cc2e189a3af9c692232be258",
"semantic_hash": ""
},
"examples/modules/active-window-widget.lua": {
"mtime": 1786800467.7243168,
"ast_hash": "a5f6fb2c54775a49ddaf29674f86571d",
"semantic_hash": "a5f6fb2c54775a49ddaf29674f86571d"
},
"examples/modules/bluetooth-toggle-widget.lua": {
"mtime": 1786800467.7243168,
"ast_hash": "c8529dc45862adf4f63db48674a28277",
"semantic_hash": "c8529dc45862adf4f63db48674a28277"
},
"examples/modules/dock-monitors.lua": {
"mtime": 1786800467.724451,
"ast_hash": "4abe51f19614d2bf117ac35e95324801",
"semantic_hash": "4abe51f19614d2bf117ac35e95324801"
},
"examples/modules/dock-workflow.lua": {
"mtime": 1786800467.724451,
"ast_hash": "84cf81cfb7780e89a46e96a6ccfbad15",
"semantic_hash": ""
},
"examples/modules/focus-mode-widget.lua": {
"mtime": 1786800467.724451,
"ast_hash": "f62c366c2c85cfbe59eef663fc607230",
"semantic_hash": "f62c366c2c85cfbe59eef663fc607230"
},
"examples/modules/git-branch-widget.lua": {
"mtime": 1786800467.724451,
"ast_hash": "ebeeaebab5b5b29619f3db65c1df57d8",
"semantic_hash": ""
},
"examples/modules/low-battery-warning.lua": {
"mtime": 1786800467.724451,
"ast_hash": "e0ba79860562fc36fa8cb183bc576fb7",
"semantic_hash": "e0ba79860562fc36fa8cb183bc576fb7"
},
"examples/modules/pause-media-on-headphone-unplug.lua": {
"mtime": 1786800467.724451,
"ast_hash": "6c4cf82b6963eb93df224bed60d06c2d",
"semantic_hash": "6c4cf82b6963eb93df224bed60d06c2d"
},
"examples/modules/workflow-status-widget.lua": {
"mtime": 1786800467.724451,
"ast_hash": "9f913a66a0f8654dadc1c5d6c2be0938",
"semantic_hash": "9f913a66a0f8654dadc1c5d6c2be0938"
},
"scripts/install.sh": {
"mtime": 1786800994.0764284,
"ast_hash": "35d1a7f63824e9176bd105ab3d699576",
"semantic_hash": ""
},
"CONTRIBUTING.md": {
"mtime": 1786800467.716893,
"ast_hash": "6d056fcf0dae29949d19c41b41792879",
"semantic_hash": ""
},
"Documentation.md": {
"mtime": 1786801027.2816515,
"ast_hash": "7b8471e7ae45aed70682bb858826860c",
"semantic_hash": ""
},
"Examples.md": {
"mtime": 1786800467.716893,
"ast_hash": "6bcd7a14be53a9f67ef6912b160da8bc",
"semantic_hash": "6bcd7a14be53a9f67ef6912b160da8bc"
},
"README.md": {
"mtime": 1786800994.0964282,
"ast_hash": "97ae9f7efb9f2cdceb615a47cf3dfa1a",
"semantic_hash": ""
},
"bread-module-host/src/io.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "dbe04e05d1cfb02770db8d7c0bcc0b68",
"semantic_hash": ""
},
"bread-module-host/src/lua_env.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "97d009846e18d3c809663b1185c98bbb",
"semantic_hash": ""
},
"bread-module-host/src/main.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "9a93253ae44c764b8273df40999ddede",
"semantic_hash": ""
},
"bread-shared/src/module_host_ipc.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "fcdb4c03f242a5ea51fd3a096b711363",
"semantic_hash": ""
},
"bread-shared/src/permissions.rs": {
"mtime": 1786800467.7210522,
"ast_hash": "800445ef9c90bdbf8f3ac9d4f1afd98e",
"semantic_hash": ""
},
"breadd/src/core/rules.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "bd430cf213f400b8d4e96ccc35a76ff1",
"semantic_hash": ""
},
"breadd/src/ipc/module_host_bridge.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "caa9cf82695e48c88758fcfa835e1871",
"semantic_hash": ""
},
"breadd/src/module_host.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "228826ff3c8941ea5f9bb28b66d637a9",
"semantic_hash": ""
},
"breadd/tests/module_host_sandbox.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "7e637b3a950c510215a6f6a7b88dd404",
"semantic_hash": ""
},
"examples/modules/cpu-temp-widget/init.lua": {
"mtime": 1786800467.724451,
"ast_hash": "5ac893dd2f6af6d8b22dd290e3021f77",
"semantic_hash": ""
},
"xtask/src/main.rs": {
"mtime": 1786801244.1297076,
"ast_hash": "e914dd77ac3241df09e3a681228961db",
"semantic_hash": ""
},
".forgejo/workflows/dev-release.yml": {
"mtime": 1786800467.7161875,
"ast_hash": "707129aa2fe79b4539d108c03e6d7abf",
"semantic_hash": ""
},
".forgejo/workflows/rc-release.yml": {
"mtime": 1786800467.7167187,
"ast_hash": "3007d2c43d785cd72f0548096626a21d",
"semantic_hash": ""
},
".forgejo/workflows/release.yml": {
"mtime": 1786800467.7167187,
"ast_hash": "3578aa39e7b2466822c8d85247489d36",
"semantic_hash": ""
},
"DEPRECATIONS.md": {
"mtime": 1786800467.716893,
"ast_hash": "1685b60fad2ed4184e4119c30866ec12",
"semantic_hash": ""
},
"examples/modules/README.md": {
"mtime": 1786800467.7242541,
"ast_hash": "dfa8a72f41c08bd5b8036b684092a93b",
"semantic_hash": ""
},
"packaging/README.md": {
"mtime": 1786800994.0430956,
"ast_hash": "caa295eed64de126874a2e48b8aed8a2",
"semantic_hash": ""
}
}

View file

@ -1,21 +1,21 @@
# Graph Report - bread (2026-08-15) # Graph Report - bread (2026-08-16)
## Corpus Check ## Corpus Check
- 62 files · ~88,250 words - 66 files · ~90,429 words
- Verdict: corpus is large enough that graph structure adds value. - Verdict: corpus is large enough that graph structure adds value.
## Summary ## Summary
- 1467 nodes · 3347 edges · 88 communities (64 shown, 24 thin omitted) - 1486 nodes · 3384 edges · 93 communities (68 shown, 25 thin omitted)
- Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 48 edges (avg confidence: 0.78) - Extraction: 99% EXTRACTED · 1% INFERRED · 0% AMBIGUOUS · INFERRED: 47 edges (avg confidence: 0.78)
- Token cost: 0 input · 0 output - Token cost: 0 input · 0 output
## Graph Freshness ## Graph Freshness
- Built from commit: `a6973360` - Built from commit: `cdd5de8f`
- Run `git rev-parse HEAD` and compare to check if the graph is stale. - Run `git rev-parse HEAD` and compare to check if the graph is stale.
- Run `graphify update .` after code changes (no API cost). - Run `graphify update .` after code changes (no API cost).
## Community Hubs (Navigation) ## Community Hubs (Navigation)
- lua/mod.rs - LuaEngine
- RawEvent - RawEvent
- config.rs - config.rs
- Server - Server
@ -31,24 +31,24 @@
- bread-cli/src/main.rs - bread-cli/src/main.rs
- types.rs - types.rs
- podman.rs - podman.rs
- StateHandle - Value
- run_udev_monitor - Result
- hooks_shell.rs - hooks_shell.rs
- bluetooth.rs - bluetooth.rs
- SubscriptionId - SubscriptionId
- glob.rs - glob.rs
- run_state_engine - StateHandle
- RtnetlinkAdapter - Adapter
- network.rs - network.rs
- power.rs - power.rs
- hyprland.rs - hyprland.rs
- Adapter - parse_upower_message
- dl.breadway.dev Distribution - main Branch
- git-branch-widget.lua - git-branch-widget.lua
- TestHarness - TestHarness
- Sync - Sync
- active-window-widget.lua - active-window-widget.lua
- cpu-temp-widget.lua - .new
- focus-mode-widget.lua - focus-mode-widget.lua
- workflow-status-widget.lua - workflow-status-widget.lua
- bread.widget API - bread.widget API
@ -70,10 +70,10 @@
- bread.system.startup - bread.system.startup
- Monitors Configuration Example - Monitors Configuration Example
- Binds Module (Built-in) - Binds Module (Built-in)
- Bakery Package Manager - lua/mod.rs
- Phase 3: GUI Control Center - external-monitors.lua
- Phase 5: Cross-Device Mesh - AGENTS.md — Repo hygiene
- Dev Version Computation - CLAUDE.md — Repo hygiene
- ModuleHostLua - ModuleHostLua
- ModuleHostRegistry - ModuleHostRegistry
- xtask/src/main.rs - xtask/src/main.rs
@ -98,15 +98,20 @@
- init.lua - init.lua
- Execution - Execution
- packaging/README.md - packaging/README.md
- PathBuf
- build.sh
- beta Release Track
- dev Release Track
- stable Release Track
## God Nodes (most connected - your core abstractions) ## God Nodes (most connected - your core abstractions)
1. `LuaEngine` - 59 edges 1. `LuaEngine` - 59 edges
2. `RawEvent` - 49 edges 2. `RawEvent` - 50 edges
3. `BreadEvent` - 38 edges 3. `BreadEvent` - 38 edges
4. `raw()` - 37 edges 4. `raw()` - 37 edges
5. `RuntimeState` - 34 edges 5. `RuntimeState` - 36 edges
6. `StateHandle` - 28 edges 6. `StateHandle` - 28 edges
7. `now_unix_ms()` - 26 edges 7. `now_unix_ms()` - 25 edges
8. `Adapter` - 25 edges 8. `Adapter` - 25 edges
9. `SubscriptionId` - 25 edges 9. `SubscriptionId` - 25 edges
10. `ModuleHostLua` - 24 edges 10. `ModuleHostLua` - 24 edges
@ -118,31 +123,29 @@
breadd/src/adapters/bluetooth.rs → bread-shared/src/lib.rs breadd/src/adapters/bluetooth.rs → bread-shared/src/lib.rs
- `classify()` --calls--> `now_unix_ms()` [INFERRED] - `classify()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/filesystem.rs → bread-shared/src/lib.rs breadd/src/adapters/filesystem.rs → bread-shared/src/lib.rs
- `emit_topology_snapshot()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/hyprland.rs → bread-shared/src/lib.rs
- `network_raw_event()` --calls--> `now_unix_ms()` [INFERRED] - `network_raw_event()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/network.rs → bread-shared/src/lib.rs breadd/src/adapters/network.rs → bread-shared/src/lib.rs
- `power_raw_event()` --calls--> `now_unix_ms()` [INFERRED]
breadd/src/adapters/power.rs → bread-shared/src/lib.rs
## Import Cycles ## Import Cycles
- 2-file cycle: `breadd/src/core/state_engine.rs -> breadd/src/lua/mod.rs -> breadd/src/core/state_engine.rs` - 2-file cycle: `breadd/src/core/state_engine.rs -> breadd/src/lua/mod.rs -> breadd/src/core/state_engine.rs`
- 2-file cycle: `bread-shared/src/lib.rs -> bread-shared/src/module_host_ipc.rs -> bread-shared/src/lib.rs` - 2-file cycle: `bread-shared/src/lib.rs -> bread-shared/src/module_host_ipc.rs -> bread-shared/src/lib.rs`
## Hyperedges (group relationships) ## Hyperedges (group relationships)
- **** — ci_dev_release, workflow_version_compute, release_track_dev, distribution_dl_breadway_dev, package_bakery [INFERRED]
- **** — adapter_udev, adapter_hyprland, adapter_power, sys_bread_daemon, api_bread_on, sys_lua_runtime [INFERRED] - **** — adapter_udev, adapter_hyprland, adapter_power, sys_bread_daemon, api_bread_on, sys_lua_runtime [INFERRED]
- **** — config_init_lua, config_modules_dir, pattern_module_skeleton, api_bread_on, sys_lua_runtime [INFERRED] - **** — config_init_lua, config_modules_dir, pattern_module_skeleton, api_bread_on, sys_lua_runtime [INFERRED]
- **** — api_bread_workflow, api_bread_spawn, api_bread_wait, example_dock_workflow, api_bread_notify [INFERRED] - **** — api_bread_workflow, api_bread_spawn, api_bread_wait, example_dock_workflow, api_bread_notify [INFERRED]
- **** — api_bread_widget, api_bread_every, example_widget_cpu_temp, api_bread_state_watch [INFERRED] - **** — api_bread_widget, api_bread_every, example_widget_cpu_temp, api_bread_state_watch [INFERRED]
- **** — branch_main, ci_dev_release, ci_rc_release, ci_stable_release, release_track_dev, release_track_beta, release_track_stable [INFERRED]
## Communities (88 total, 24 thin omitted) ## Communities (93 total, 25 thin omitted)
### Community 0 - "lua/mod.rs" ### Community 0 - "LuaEngine"
Cohesion: 0.06 Cohesion: 0.11
Nodes (86): now_unix_ms(), ModulePermission, Option, String, WidgetSpec, RuntimeState, bluetooth_connect(), bluetooth_disconnect() (+78 more) Nodes (19): ErrorEntry, HandlerEntry, HandlerKind, LuaEngine, LuaMessage, ModuleInfo, AtomicU64, HashMap (+11 more)
### Community 1 - "RawEvent" ### Community 1 - "RawEvent"
Cohesion: 0.05 Cohesion: 0.06
Nodes (67): adapter_source_is_hashable_and_eq(), AdapterSource, bread_event_new_accepts_owned_and_borrowed_names(), bread_event_new_assigns_unique_id_and_no_cause(), bread_event_new_sets_current_timestamp(), bread_event_with_timestamp_preserves_timestamp_and_assigns_id(), BreadEvent, DaemonSection (+59 more) Nodes (67): adapter_source_is_hashable_and_eq(), AdapterSource, bread_event_new_accepts_owned_and_borrowed_names(), bread_event_new_assigns_unique_id_and_no_cause(), bread_event_new_sets_current_timestamp(), bread_event_with_timestamp_preserves_timestamp_and_assigns_id(), BreadEvent, DaemonSection (+59 more)
### Community 2 - "config.rs" ### Community 2 - "config.rs"
@ -155,11 +158,11 @@ Nodes (41): A, command_target(), event_domain(), is_known_app(), is_reserved_dom
### Community 4 - "widget.rs" ### Community 4 - "widget.rs"
Cohesion: 0.07 Cohesion: 0.07
Nodes (32): accepts_node_count_at_max(), accepts_tree_at_max_depth(), Align, Background, box_of(), default_orientation(), FontWeight, is_valid_class() (+24 more) Nodes (33): accepts_node_count_at_max(), accepts_tree_at_max_depth(), Align, Background, box_of(), default_orientation(), FontWeight, is_valid_class() (+25 more)
### Community 5 - "Bread Daemon (breadd)" ### Community 5 - "Bread Daemon (breadd)"
Cohesion: 0.06 Cohesion: 0.06
Nodes (39): Bluetooth Adapter, Hyprland Adapter, Network Adapter, Power Adapter, udev Adapter, bread.on(pattern, fn), bread.spawn(fn), bread.wait(pattern, opts) (+31 more) Nodes (36): Bluetooth Adapter, Hyprland Adapter, Network Adapter, Power Adapter, udev Adapter, bread.on(pattern, fn), bread.spawn(fn), bread.wait(pattern, opts) (+28 more)
### Community 6 - "filesystem.rs" ### Community 6 - "filesystem.rs"
Cohesion: 0.12 Cohesion: 0.12
@ -175,7 +178,7 @@ Nodes (50): daemon_survives_repeated_reloads_and_pipeline_resumes(), emit_with_a
### Community 9 - "state_engine.rs" ### Community 9 - "state_engine.rs"
Cohesion: 0.12 Cohesion: 0.12
Nodes (19): apply_device_change(), apply_event_to_state(), device_connect_adds_device_with_all_fields(), device_connect_is_idempotent_for_same_id(), device_disconnect_of_unknown_id_is_noop(), device_disconnect_removes_matching_id(), ev(), monitor_connect_adds_new_monitor() (+11 more) Nodes (20): apply_device_change(), apply_event_to_state(), device_connect_adds_device_with_all_fields(), device_connect_is_idempotent_for_same_id(), device_disconnect_of_unknown_id_is_noop(), device_disconnect_removes_matching_id(), ev(), hyprland_snapshot_replaces_topology() (+12 more)
### Community 10 - "modules_mgmt.rs" ### Community 10 - "modules_mgmt.rs"
Cohesion: 0.11 Cohesion: 0.11
@ -194,20 +197,20 @@ Cohesion: 0.19
Nodes (29): CausalityTracker, Cli, Commands, config_directory(), daemon_socket_path(), format_timestamp(), handle_modules_cmd(), HooksCommand (+21 more) Nodes (29): CausalityTracker, Cli, Commands, config_directory(), daemon_socket_path(), format_timestamp(), handle_modules_cmd(), HooksCommand (+21 more)
### Community 14 - "types.rs" ### Community 14 - "types.rs"
Cohesion: 0.17 Cohesion: 0.15
Nodes (21): Device, DeviceRule, DeviceTopology, InterfaceState, MatchCondition, ModuleStatus, Monitor, NetworkState (+13 more) Nodes (21): DeviceTopology, InterfaceState, MatchCondition, ModuleStatus, Monitor, NetworkState, PowerState, ProfileState (+13 more)
### Community 15 - "podman.rs" ### Community 15 - "podman.rs"
Cohesion: 0.15 Cohesion: 0.15
Nodes (17): container_event(), ignores_remove_event(), ignores_stop_event_to_avoid_double_emit_with_died(), ignores_unknown_action(), map_podman_event(), maps_died_event(), maps_health_status_event(), maps_start_event() (+9 more) Nodes (17): container_event(), ignores_remove_event(), ignores_stop_event_to_avoid_double_emit_with_died(), ignores_unknown_action(), map_podman_event(), maps_died_event(), maps_health_status_event(), maps_start_event() (+9 more)
### Community 16 - "StateHandle" ### Community 16 - "Value"
Cohesion: 0.14 Cohesion: 0.17
Nodes (10): condition_matches(), resolve_device(), Option, Result, String, Value, Vec, StateHandle (+2 more) Nodes (14): active_window_from_data(), apply_hyprland_snapshot(), condition_matches(), hyprland_state_key(), json_stringish(), resolve_device(), Option, Result (+6 more)
### Community 17 - "run_udev_monitor" ### Community 17 - "Result"
Cohesion: 0.35 Cohesion: 0.13
Nodes (9): enumerate_with_udev(), Result, Self, Sender, String, Vec, run_udev_monitor(), ScannedDevice (+1 more) Nodes (26): bluetooth_connect(), bluetooth_disconnect(), bluetooth_find_adapter(), bluetooth_get_powered(), bluetooth_query(), bluetooth_set_powered(), bluetooth_set_scanning(), bluetooth_spawn() (+18 more)
### Community 18 - "hooks_shell.rs" ### Community 18 - "hooks_shell.rs"
Cohesion: 0.18 Cohesion: 0.18
@ -221,13 +224,13 @@ Nodes (10): address_from_path(), BluetoothAdapter, parse_bluetooth_message(), Me
Cohesion: 0.29 Cohesion: 0.29
Nodes (13): HashMap, String, Vec, Subscription, SubscriptionId, SubscriptionTable, table_add_assigns_provided_id_and_finds_match(), table_clear_removes_all() (+5 more) Nodes (13): HashMap, String, Vec, Subscription, SubscriptionId, SubscriptionTable, table_add_assigns_provided_id_and_finds_match(), table_clear_removes_all() (+5 more)
### Community 22 - "run_state_engine" ### Community 22 - "StateHandle"
Cohesion: 0.27 Cohesion: 0.15
Nodes (12): dispatch_event(), handle_command(), Arc, AtomicU64, Receiver, RwLock, Self, Sender (+4 more) Nodes (16): dispatch_event(), handle_command(), Arc, AtomicU64, HashMap, Receiver, RwLock, Self (+8 more)
### Community 23 - "RtnetlinkAdapter" ### Community 23 - "Adapter"
Cohesion: 0.22 Cohesion: 0.19
Nodes (7): ip_from_bytes(), Option, Result, Self, Sender, String, RtnetlinkAdapter Nodes (9): Adapter, ip_from_bytes(), Option, Result, Self, Sender, String, RtnetlinkAdapter (+1 more)
### Community 24 - "network.rs" ### Community 24 - "network.rs"
Cohesion: 0.27 Cohesion: 0.27
@ -239,15 +242,11 @@ Nodes (8): power_raw_event(), PowerAdapter, PowerSnapshot, read_power_state(), O
### Community 26 - "hyprland.rs" ### Community 26 - "hyprland.rs"
Cohesion: 0.29 Cohesion: 0.29
Nodes (7): hyprland_event_socket(), HyprlandAdapter, parse_hyprland_line(), PathBuf, Result, Sender, String Nodes (11): emit_topology_snapshot(), hyprland_event_socket(), hyprland_request_json(), hyprland_request_socket(), HyprlandAdapter, parse_hyprland_line(), PathBuf, Result (+3 more)
### Community 27 - "Adapter" ### Community 27 - "parse_upower_message"
Cohesion: 0.23 Cohesion: 0.27
Nodes (8): Adapter, parse_upower_message(), Message, Result, Self, Sender, UPowerAdapter, Send Nodes (6): parse_upower_message(), Message, Result, Self, Sender, UPowerAdapter
### Community 28 - "dl.breadway.dev Distribution"
Cohesion: 0.25
Nodes (8): main Branch, dev-release.yml Workflow, rc-release.yml Workflow, release.yml Workflow, dl.breadway.dev Distribution, beta Release Track, dev Release Track, stable Release Track
### Community 29 - "git-branch-widget.lua" ### Community 29 - "git-branch-widget.lua"
Cohesion: 0.62 Cohesion: 0.62
@ -265,9 +264,9 @@ Nodes (3): main(), Result, Sync
Cohesion: 0.83 Cohesion: 0.83
Nodes (3): label_for(), M.on_load(), widget_root() Nodes (3): label_for(), M.on_load(), widget_root()
### Community 33 - "cpu-temp-widget.lua" ### Community 33 - ".new"
Cohesion: 0.83 Cohesion: 0.16
Nodes (3): M.on_load(), read_temp_c(), widget_root() Nodes (15): ModulePermission, Option, String, bluetooth_list_devices(), builtin_module_decls(), is_lib_path(), list_lua_files(), module_name_from_path() (+7 more)
### Community 34 - "focus-mode-widget.lua" ### Community 34 - "focus-mode-widget.lua"
Cohesion: 1.00 Cohesion: 1.00
@ -281,8 +280,24 @@ Nodes (3): M.on_load(), most_relevant(), widget_update()
Cohesion: 0.67 Cohesion: 0.67
Nodes (3): bread.widget API, CPU Temperature Widget Example, Live Widget Update Pattern Nodes (3): bread.widget API, CPU Temperature Widget Example, Live Widget Update Pattern
### Community 60 - "lua/mod.rs"
Cohesion: 0.30
Nodes (20): now_unix_ms(), RuntimeState, module_store_get(), module_store_set(), Arc, JsonValue, RwLock, widget_list_json() (+12 more)
### Community 61 - "external-monitors.lua"
Cohesion: 0.29
Nodes (8): apply(), apply_monitor(), connected(), drm_first_mode(), drm_status(), is_internal(), list_connectors(), M.on_load()
### Community 62 - "AGENTS.md — Repo hygiene"
Cohesion: 0.33
Nodes (5): AGENTS.md — Repo hygiene, CI, Don't, Local architecture (still true), Remotes
### Community 63 - "CLAUDE.md — Repo hygiene"
Cohesion: 0.40
Nodes (4): CI, CLAUDE.md — Repo hygiene, Don't, Remotes
### Community 64 - "ModuleHostLua" ### Community 64 - "ModuleHostLua"
Cohesion: 0.10 Cohesion: 0.09
Nodes (38): call(), HostMessage, IoCommand, RpcResponse, Duration, Option, PathBuf, Receiver (+30 more) Nodes (38): call(), HostMessage, IoCommand, RpcResponse, Duration, Option, PathBuf, Receiver (+30 more)
### Community 65 - "ModuleHostRegistry" ### Community 65 - "ModuleHostRegistry"
@ -310,8 +325,8 @@ Cohesion: 0.14
Nodes (14): API Stability & Versioning, Bread Documentation, Contents, Debugging tips, Dictionary: Event reference, Dictionary: IPC protocol, Dictionary: Runtime state schema, Integrating a bread\* app (+6 more) Nodes (14): API Stability & Versioning, Bread Documentation, Contents, Debugging tips, Dictionary: Event reference, Dictionary: IPC protocol, Dictionary: Runtime state schema, Integrating a bread\* app (+6 more)
### Community 71 - "udev.rs" ### Community 71 - "udev.rs"
Cohesion: 0.32 Cohesion: 0.18
Nodes (10): build_device_event(), build_event(), enumerate_payload_includes_classification_fields(), prop_bool(), prop_str(), Option, Value, udev_event_payload() (+2 more) Nodes (18): build_device_event(), build_event(), enumerate_payload_includes_classification_fields(), prop_bool(), prop_str(), Option, Result, Self (+10 more)
### Community 72 - "Dictionary: Lua API" ### Community 72 - "Dictionary: Lua API"
Cohesion: 0.17 Cohesion: 0.17
@ -373,25 +388,29 @@ Nodes (3): M.on_load(), read_temp_c(), widget_root()
Cohesion: 0.67 Cohesion: 0.67
Nodes (3): `bread.exec_capture(cmd, opts) -> ok, stdout`, `bread.exec(cmd)`, Execution Nodes (3): `bread.exec_capture(cmd, opts) -> ok, stdout`, `bread.exec(cmd)`, Execution
### Community 88 - "PathBuf"
Cohesion: 1.00
Nodes (3): dirs_home(), lua_expand_path(), PathBuf
## Knowledge Gaps ## Knowledge Gaps
- **179 isolated node(s):** `install.sh script`, `Branches`, `The release cycle`, `Tracks, from a user's perspective`, `Keeping the API docs honest` (+174 more) - **182 isolated node(s):** `build.sh script`, `install.sh script`, `Remotes`, `CI`, `Local architecture (still true)` (+177 more)
These have ≤1 connection - possible missing edges or undocumented components. These have ≤1 connection - possible missing edges or undocumented components.
- **24 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes. - **25 thin communities (<3 nodes) omitted from report** — run `graphify query` to explore isolated nodes.
## Suggested Questions ## Suggested Questions
_Questions this graph is uniquely positioned to answer:_ _Questions this graph is uniquely positioned to answer:_
- **Why does `RawEvent` connect `RawEvent` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `run_udev_monitor`, `bluetooth.rs`, `RtnetlinkAdapter`, `network.rs`, `power.rs`, `hyprland.rs`, `Adapter`?** - **Why does `Adapter` connect `Adapter` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `bluetooth.rs`, `network.rs`, `power.rs`, `hyprland.rs`, `parse_upower_message`, `Sync`?**
_High betweenness centrality (0.094) - this node is a cross-community bridge._ _High betweenness centrality (0.089) - this node is a cross-community bridge._
- **Why does `Adapter` connect `Adapter` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `run_udev_monitor`, `bluetooth.rs`, `RtnetlinkAdapter`, `network.rs`, `power.rs`, `hyprland.rs`, `Sync`?** - **Why does `RawEvent` connect `RawEvent` to `Server`, `filesystem.rs`, `git.rs`, `udev.rs`, `systemd.rs`, `podman.rs`, `bluetooth.rs`, `Adapter`, `network.rs`, `power.rs`, `hyprland.rs`, `parse_upower_message`?**
_High betweenness centrality (0.077) - this node is a cross-community bridge._ _High betweenness centrality (0.084) - this node is a cross-community bridge._
- **Why does `BreadEvent` connect `RawEvent` to `ModuleHostLua`, `lua/mod.rs`, `ModuleHostRegistry`, `Server`, `state_engine.rs`, `run_state_engine`?** - **Why does `BreadEvent` connect `RawEvent` to `ModuleHostLua`, `LuaEngine`, `.new`, `Server`, `ModuleHostRegistry`, `state_engine.rs`, `StateHandle`?**
_High betweenness centrality (0.063) - this node is a cross-community bridge._ _High betweenness centrality (0.061) - this node is a cross-community bridge._
- **What connects `install.sh script`, `Branches`, `The release cycle` to the rest of the system?** - **What connects `build.sh script`, `install.sh script`, `Remotes` to the rest of the system?**
_179 weakly-connected nodes found - possible documentation gaps or missing edges._ _182 weakly-connected nodes found - possible documentation gaps or missing edges._
- **Should `lua/mod.rs` be split into smaller, more focused modules?** - **Should `LuaEngine` be split into smaller, more focused modules?**
_Cohesion score 0.056 - nodes in this community are weakly interconnected._ _Cohesion score 0.11153846153846154 - nodes in this community are weakly interconnected._
- **Should `RawEvent` be split into smaller, more focused modules?** - **Should `RawEvent` be split into smaller, more focused modules?**
_Cohesion score 0.051842708517016396 - nodes in this community are weakly interconnected._ _Cohesion score 0.05702970297029703 - nodes in this community are weakly interconnected._
- **Should `config.rs` be split into smaller, more focused modules?** - **Should `config.rs` be split into smaller, more focused modules?**
_Cohesion score 0.07191780821917808 - nodes in this community are weakly interconnected._ _Cohesion score 0.0670122176971492 - nodes in this community are weakly interconnected._

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_deprecations_md", "label": "DEPRECATIONS.md", "file_type": "document", "source_file": "DEPRECATIONS.md", "source_location": "L1"}, {"id": "$graphify-root$_deprecations_deprecations", "label": "Deprecations", "file_type": "document", "source_file": "DEPRECATIONS.md", "source_location": "L1"}, {"id": "$graphify-root$_deprecations_hyprland_legacy_flat_event_names_since_v1_5", "label": "Hyprland legacy flat event names (since v1.5)", "file_type": "document", "source_file": "DEPRECATIONS.md", "source_location": "L8"}], "edges": [{"source": "$graphify-root$_deprecations_md", "target": "$graphify-root$_deprecations_deprecations", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DEPRECATIONS.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_deprecations_md", "target": "$graphify-root$_documentation_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "DEPRECATIONS.md", "source_location": "L4", "weight": 1.0, "target_file": "$graphify-root$/Documentation.md"}, {"source": "$graphify-root$_deprecations_deprecations", "target": "$graphify-root$_deprecations_hyprland_legacy_flat_event_names_since_v1_5", "relation": "contains", "confidence": "EXTRACTED", "source_file": "DEPRECATIONS.md", "source_location": "L8", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_claude_md", "label": "CLAUDE.md", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}, {"id": "$graphify-root$_claude_claude_md_repo_hygiene", "label": "CLAUDE.md \u2014 Repo hygiene", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L1"}, {"id": "$graphify-root$_claude_remotes", "label": "Remotes", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L10"}, {"id": "$graphify-root$_claude_ci", "label": "CI", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L14"}, {"id": "$graphify-root$_claude_don_t", "label": "Don't", "file_type": "document", "source_file": "CLAUDE.md", "source_location": "L19"}], "edges": [{"source": "$graphify-root$_claude_md", "target": "$graphify-root$_claude_claude_md_repo_hygiene", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_claude_claude_md_repo_hygiene", "target": "$graphify-root$_claude_remotes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L10", "weight": 1.0}, {"source": "$graphify-root$_claude_claude_md_repo_hygiene", "target": "$graphify-root$_claude_ci", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L14", "weight": 1.0}, {"source": "$graphify-root$_claude_claude_md_repo_hygiene", "target": "$graphify-root$_claude_don_t", "relation": "contains", "confidence": "EXTRACTED", "source_file": "CLAUDE.md", "source_location": "L19", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_ci_build_sh", "label": "build.sh", "file_type": "code", "source_file": "ci/build.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "file"}}, {"id": "$graphify-root$_ci_build_sh__entry", "label": "build.sh script", "file_type": "code", "source_file": "ci/build.sh", "source_location": "L1", "metadata": {"language": "bash", "kind": "bash_entrypoint"}}], "edges": [{"source": "$graphify-root$_ci_build_sh", "target": "$graphify-root$_ci_build_sh__entry", "relation": "contains", "confidence": "EXTRACTED", "source_file": "ci/build.sh", "source_location": "L1", "weight": 1.0}], "raw_calls": [{"language": "bash", "callee": "set", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L9"}, {"language": "bash", "callee": "rm", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L16"}, {"language": "bash", "callee": "git", "caller_nid": "$graphify-root$_ci_build_sh__entry", "source_file": "ci/build.sh", "source_location": "L17"}], "bash_sources": []}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_examples_modules_readme_md", "label": "README.md", "file_type": "document", "source_file": "examples/modules/README.md", "source_location": "L1"}, {"id": "$graphify-root$_examples_modules_readme_example_bread_modules", "label": "Example bread modules", "file_type": "document", "source_file": "examples/modules/README.md", "source_location": "L1"}, {"id": "$graphify-root$_examples_modules_readme_installing", "label": "Installing", "file_type": "document", "source_file": "examples/modules/README.md", "source_location": "L7"}, {"id": "$graphify-root$_examples_modules_readme_modules", "label": "Modules", "file_type": "document", "source_file": "examples/modules/README.md", "source_location": "L33"}], "edges": [{"source": "$graphify-root$_examples_modules_readme_md", "target": "$graphify-root$_examples_modules_readme_example_bread_modules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_examples_modules_readme_md", "target": "$graphify-root$_examples_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L4", "weight": 1.0, "target_file": "$graphify-root$/Examples.md"}, {"source": "$graphify-root$_examples_modules_readme_example_bread_modules", "target": "$graphify-root$_examples_modules_readme_installing", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L7", "weight": 1.0}, {"source": "$graphify-root$_examples_modules_readme_md", "target": "$graphify-root$_examples_modules_permissions_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L18", "weight": 1.0}, {"source": "$graphify-root$_examples_modules_readme_md", "target": "$graphify-root$_documentation_md", "relation": "references", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L19", "weight": 1.0, "target_file": "$graphify-root$/Documentation.md"}, {"source": "$graphify-root$_examples_modules_readme_example_bread_modules", "target": "$graphify-root$_examples_modules_readme_modules", "relation": "contains", "confidence": "EXTRACTED", "source_file": "examples/modules/README.md", "source_location": "L33", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

View file

@ -0,0 +1 @@
{"nodes": [{"id": "$graphify-root$_agents_md", "label": "AGENTS.md", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L1"}, {"id": "$graphify-root$_agents_agents_md_repo_hygiene", "label": "AGENTS.md \u2014 Repo hygiene", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L1"}, {"id": "$graphify-root$_agents_remotes", "label": "Remotes", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L16"}, {"id": "$graphify-root$_agents_ci", "label": "CI", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L22"}, {"id": "$graphify-root$_agents_local_architecture_still_true", "label": "Local architecture (still true)", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L31"}, {"id": "$graphify-root$_agents_don_t", "label": "Don't", "file_type": "document", "source_file": "AGENTS.md", "source_location": "L39"}], "edges": [{"source": "$graphify-root$_agents_md", "target": "$graphify-root$_agents_agents_md_repo_hygiene", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L1", "weight": 1.0}, {"source": "$graphify-root$_agents_agents_md_repo_hygiene", "target": "$graphify-root$_agents_remotes", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L16", "weight": 1.0}, {"source": "$graphify-root$_agents_agents_md_repo_hygiene", "target": "$graphify-root$_agents_ci", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L22", "weight": 1.0}, {"source": "$graphify-root$_agents_agents_md_repo_hygiene", "target": "$graphify-root$_agents_local_architecture_still_true", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L31", "weight": 1.0}, {"source": "$graphify-root$_agents_agents_md_repo_hygiene", "target": "$graphify-root$_agents_don_t", "relation": "contains", "confidence": "EXTRACTED", "source_file": "AGENTS.md", "source_location": "L39", "weight": 1.0}], "input_tokens": 0, "output_tokens": 0}

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -1 +1 @@
1785892770.494006 1786850688.401695

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because it is too large Load diff

View file

@ -1,327 +1,352 @@
{ {
"bread-cli/src/hooks_git.rs": { "bread-cli/src/hooks_git.rs": {
"mtime": 1786800467.7200727, "mtime": 1784781158.0572724,
"ast_hash": "7a29b5d5d90170f0aef9cececc7d8656", "ast_hash": "7a29b5d5d90170f0aef9cececc7d8656",
"semantic_hash": "7a29b5d5d90170f0aef9cececc7d8656" "semantic_hash": "7a29b5d5d90170f0aef9cececc7d8656"
}, },
"bread-cli/src/hooks_shell.rs": { "bread-cli/src/hooks_shell.rs": {
"mtime": 1786800467.7201686, "mtime": 1784781158.0582726,
"ast_hash": "c5d5b8922fcff79954ddb00496721603", "ast_hash": "c5d5b8922fcff79954ddb00496721603",
"semantic_hash": "c5d5b8922fcff79954ddb00496721603" "semantic_hash": "c5d5b8922fcff79954ddb00496721603"
}, },
"bread-cli/src/lib.rs": { "bread-cli/src/lib.rs": {
"mtime": 1786800467.7201686, "mtime": 1778512393.4941568,
"ast_hash": "d1bf6e1c239498521c42418f672bc400", "ast_hash": "d1bf6e1c239498521c42418f672bc400",
"semantic_hash": "d1bf6e1c239498521c42418f672bc400" "semantic_hash": "d1bf6e1c239498521c42418f672bc400"
}, },
"bread-cli/src/main.rs": { "bread-cli/src/main.rs": {
"mtime": 1786800467.7201686, "mtime": 1785882914.3322613,
"ast_hash": "e1fbe63ea3b10e0887072ab7133d0508", "ast_hash": "e1fbe63ea3b10e0887072ab7133d0508",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-cli/src/modules_mgmt.rs": { "bread-cli/src/modules_mgmt.rs": {
"mtime": 1786801244.1263742, "mtime": 1785882914.3322613,
"ast_hash": "1cb6f3e4fa26108f81215ab57bb02b91", "ast_hash": "1cb6f3e4fa26108f81215ab57bb02b91",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-cli/tests/modules.rs": { "bread-cli/tests/modules.rs": {
"mtime": 1786801244.1297076, "mtime": 1784781158.0602725,
"ast_hash": "84fca8f87dc915b1cb523f8199e78521", "ast_hash": "84fca8f87dc915b1cb523f8199e78521",
"semantic_hash": "84fca8f87dc915b1cb523f8199e78521" "semantic_hash": "84fca8f87dc915b1cb523f8199e78521"
}, },
"bread-emit/src/main.rs": { "bread-emit/src/main.rs": {
"mtime": 1786800467.7206197, "mtime": 1784781158.0616376,
"ast_hash": "350cefbf697cfd93f7df7b7bcc45a101", "ast_hash": "350cefbf697cfd93f7df7b7bcc45a101",
"semantic_hash": "350cefbf697cfd93f7df7b7bcc45a101" "semantic_hash": "350cefbf697cfd93f7df7b7bcc45a101"
}, },
"bread-shared/src/apps.rs": { "bread-shared/src/apps.rs": {
"mtime": 1786801218.1467261, "mtime": 1786805047.7009091,
"ast_hash": "e8419571e7a322019d71c89559fb02fb", "ast_hash": "e8419571e7a322019d71c89559fb02fb",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-shared/src/glob.rs": { "bread-shared/src/glob.rs": {
"mtime": 1786800467.7210522, "mtime": 1784781158.0616376,
"ast_hash": "0594a313cb1909d1cca5fd5b8f241b68", "ast_hash": "0594a313cb1909d1cca5fd5b8f241b68",
"semantic_hash": "0594a313cb1909d1cca5fd5b8f241b68" "semantic_hash": "0594a313cb1909d1cca5fd5b8f241b68"
}, },
"bread-shared/src/lib.rs": { "bread-shared/src/lib.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "236b73bad29f1544a28fbf3ee1ccc795", "ast_hash": "236b73bad29f1544a28fbf3ee1ccc795",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-shared/src/widget.rs": { "bread-shared/src/widget.rs": {
"mtime": 1786801244.1297076, "mtime": 1784781173.9236407,
"ast_hash": "33272eb38c7fffbfa180cef7c5a286fc", "ast_hash": "33272eb38c7fffbfa180cef7c5a286fc",
"semantic_hash": "33272eb38c7fffbfa180cef7c5a286fc" "semantic_hash": "33272eb38c7fffbfa180cef7c5a286fc"
}, },
"breadd/src/adapters/bluetooth.rs": { "breadd/src/adapters/bluetooth.rs": {
"mtime": 1786800467.7214499, "mtime": 1778843727.5135255,
"ast_hash": "4d1df67347d5b7c9cdbcb12921a6ae28", "ast_hash": "4d1df67347d5b7c9cdbcb12921a6ae28",
"semantic_hash": "4d1df67347d5b7c9cdbcb12921a6ae28" "semantic_hash": "4d1df67347d5b7c9cdbcb12921a6ae28"
}, },
"breadd/src/adapters/filesystem.rs": { "breadd/src/adapters/filesystem.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0616376,
"ast_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56", "ast_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56",
"semantic_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56" "semantic_hash": "8ec9dcd8de13f30922cfbe9b4a3fff56"
}, },
"breadd/src/adapters/git.rs": { "breadd/src/adapters/git.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0616376,
"ast_hash": "6e6ff6ca318e28cd94690c30d41b520b", "ast_hash": "6e6ff6ca318e28cd94690c30d41b520b",
"semantic_hash": "6e6ff6ca318e28cd94690c30d41b520b" "semantic_hash": "6e6ff6ca318e28cd94690c30d41b520b"
}, },
"breadd/src/adapters/hyprland.rs": { "breadd/src/adapters/hyprland.rs": {
"mtime": 1786800467.7215972, "mtime": 1786805047.7042425,
"ast_hash": "71537dbd86b413d94476f8022054f1f4", "ast_hash": "86056a351db61eb1788a2147d859fc5c",
"semantic_hash": "71537dbd86b413d94476f8022054f1f4" "semantic_hash": ""
}, },
"breadd/src/adapters/mod.rs": { "breadd/src/adapters/mod.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0616376,
"ast_hash": "63885887c2fc3ea2314d7fe095e5df61", "ast_hash": "63885887c2fc3ea2314d7fe095e5df61",
"semantic_hash": "63885887c2fc3ea2314d7fe095e5df61" "semantic_hash": "63885887c2fc3ea2314d7fe095e5df61"
}, },
"breadd/src/adapters/network.rs": { "breadd/src/adapters/network.rs": {
"mtime": 1786800467.7215972, "mtime": 1778470615.8460202,
"ast_hash": "8706dc546b7e08d5aa084ca58c48559c", "ast_hash": "8706dc546b7e08d5aa084ca58c48559c",
"semantic_hash": "8706dc546b7e08d5aa084ca58c48559c" "semantic_hash": "8706dc546b7e08d5aa084ca58c48559c"
}, },
"breadd/src/adapters/network_rtnetlink.rs": { "breadd/src/adapters/network_rtnetlink.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0616376,
"ast_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c", "ast_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c",
"semantic_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c" "semantic_hash": "0c9d0bb2693bc46b11807f6b8ebb7c4c"
}, },
"breadd/src/adapters/podman.rs": { "breadd/src/adapters/podman.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0622723,
"ast_hash": "97c08551c0fe53b0a5888d98730d35db", "ast_hash": "97c08551c0fe53b0a5888d98730d35db",
"semantic_hash": "97c08551c0fe53b0a5888d98730d35db" "semantic_hash": "97c08551c0fe53b0a5888d98730d35db"
}, },
"breadd/src/adapters/power.rs": { "breadd/src/adapters/power.rs": {
"mtime": 1786800467.7215972, "mtime": 1778470615.838569,
"ast_hash": "987d202ec0d30ec26b1d747a6e320ed7", "ast_hash": "987d202ec0d30ec26b1d747a6e320ed7",
"semantic_hash": "987d202ec0d30ec26b1d747a6e320ed7" "semantic_hash": "987d202ec0d30ec26b1d747a6e320ed7"
}, },
"breadd/src/adapters/power_upower.rs": { "breadd/src/adapters/power_upower.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0622723,
"ast_hash": "fc0a36ca76d340c8be77644f63e462bf", "ast_hash": "fc0a36ca76d340c8be77644f63e462bf",
"semantic_hash": "fc0a36ca76d340c8be77644f63e462bf" "semantic_hash": "fc0a36ca76d340c8be77644f63e462bf"
}, },
"breadd/src/adapters/systemd.rs": { "breadd/src/adapters/systemd.rs": {
"mtime": 1786800467.7215972, "mtime": 1784781158.0622723,
"ast_hash": "b3884dbecd39acc38abdf67589a8b954", "ast_hash": "b3884dbecd39acc38abdf67589a8b954",
"semantic_hash": "b3884dbecd39acc38abdf67589a8b954" "semantic_hash": "b3884dbecd39acc38abdf67589a8b954"
}, },
"breadd/src/adapters/udev.rs": { "breadd/src/adapters/udev.rs": {
"mtime": 1786800978.7399695, "mtime": 1786805047.7042425,
"ast_hash": "568993c8c2dd218879eec57aee50a6b9", "ast_hash": "568993c8c2dd218879eec57aee50a6b9",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/config.rs": { "breadd/src/core/config.rs": {
"mtime": 1786800467.7215972, "mtime": 1785882914.3346088,
"ast_hash": "7f479bfb51647e6131c14f0c2f153d95", "ast_hash": "7f479bfb51647e6131c14f0c2f153d95",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/mod.rs": { "breadd/src/core/mod.rs": {
"mtime": 1786800467.7223108, "mtime": 1785882914.3346088,
"ast_hash": "e38bfdb894eabd208941bd3ffb1ef464", "ast_hash": "e38bfdb894eabd208941bd3ffb1ef464",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/normalizer.rs": { "breadd/src/core/normalizer.rs": {
"mtime": 1786801218.2233918, "mtime": 1786805047.7042425,
"ast_hash": "1596f60df5049ff8715f66f64bee9f8a", "ast_hash": "3e0e6e0b46cc3d42dbfd6348fc5f0bb1",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/state_engine.rs": { "breadd/src/core/state_engine.rs": {
"mtime": 1786800467.7223108, "mtime": 1786805047.7042425,
"ast_hash": "84a35ee78f3881261a3ce378ea3c03a0", "ast_hash": "0e54b3b7d1de26db074454d469543192",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/subscriptions.rs": { "breadd/src/core/subscriptions.rs": {
"mtime": 1786800467.7223108, "mtime": 1784781158.0632722,
"ast_hash": "8735d4717b74523c787dab9ea2b0bbd8", "ast_hash": "8735d4717b74523c787dab9ea2b0bbd8",
"semantic_hash": "8735d4717b74523c787dab9ea2b0bbd8" "semantic_hash": "8735d4717b74523c787dab9ea2b0bbd8"
}, },
"breadd/src/core/supervisor.rs": { "breadd/src/core/supervisor.rs": {
"mtime": 1786800467.7223108, "mtime": 1778680581.3778126,
"ast_hash": "403f7ba1807c71f9b89d81bfeff2681a", "ast_hash": "403f7ba1807c71f9b89d81bfeff2681a",
"semantic_hash": "403f7ba1807c71f9b89d81bfeff2681a" "semantic_hash": "403f7ba1807c71f9b89d81bfeff2681a"
}, },
"breadd/src/core/types.rs": { "breadd/src/core/types.rs": {
"mtime": 1786800467.7223108, "mtime": 1785882914.3346088,
"ast_hash": "8bd070d4c09725d8717749a79aa42a92", "ast_hash": "8bd070d4c09725d8717749a79aa42a92",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/ipc/mod.rs": { "breadd/src/ipc/mod.rs": {
"mtime": 1786800912.9916558, "mtime": 1786805047.7042425,
"ast_hash": "54af229257e555313f7d4b59d57ff8d3", "ast_hash": "d5bc8f1194e7356de3fe181c68133cba",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/lua/mod.rs": { "breadd/src/lua/mod.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "ed13e2495399d532625653a22a4fee14", "ast_hash": "ed13e2495399d532625653a22a4fee14",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/main.rs": { "breadd/src/main.rs": {
"mtime": 1786800467.722855, "mtime": 1785882914.3346088,
"ast_hash": "4b31888cc9e76210df0c7cff3a8b1e42", "ast_hash": "4b31888cc9e76210df0c7cff3a8b1e42",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/tests/ipc_integration.rs": { "breadd/tests/ipc_integration.rs": {
"mtime": 1786801218.36339, "mtime": 1786805047.7042425,
"ast_hash": "2b5bade2cc2e189a3af9c692232be258", "ast_hash": "2b5bade2cc2e189a3af9c692232be258",
"semantic_hash": "" "semantic_hash": ""
}, },
"examples/modules/active-window-widget.lua": { "examples/modules/active-window-widget.lua": {
"mtime": 1786800467.7243168, "mtime": 1784781173.9256406,
"ast_hash": "a5f6fb2c54775a49ddaf29674f86571d", "ast_hash": "a5f6fb2c54775a49ddaf29674f86571d",
"semantic_hash": "a5f6fb2c54775a49ddaf29674f86571d" "semantic_hash": "a5f6fb2c54775a49ddaf29674f86571d"
}, },
"examples/modules/bluetooth-toggle-widget.lua": { "examples/modules/bluetooth-toggle-widget.lua": {
"mtime": 1786800467.7243168, "mtime": 1784781173.9256406,
"ast_hash": "c8529dc45862adf4f63db48674a28277", "ast_hash": "c8529dc45862adf4f63db48674a28277",
"semantic_hash": "c8529dc45862adf4f63db48674a28277" "semantic_hash": "c8529dc45862adf4f63db48674a28277"
}, },
"examples/modules/dock-monitors.lua": { "examples/modules/dock-monitors.lua": {
"mtime": 1786800467.724451, "mtime": 1784781158.0663679,
"ast_hash": "4abe51f19614d2bf117ac35e95324801", "ast_hash": "4abe51f19614d2bf117ac35e95324801",
"semantic_hash": "4abe51f19614d2bf117ac35e95324801" "semantic_hash": "4abe51f19614d2bf117ac35e95324801"
}, },
"examples/modules/dock-workflow.lua": { "examples/modules/dock-workflow.lua": {
"mtime": 1786800467.724451, "mtime": 1785882914.337525,
"ast_hash": "84cf81cfb7780e89a46e96a6ccfbad15", "ast_hash": "84cf81cfb7780e89a46e96a6ccfbad15",
"semantic_hash": "" "semantic_hash": ""
}, },
"examples/modules/focus-mode-widget.lua": { "examples/modules/focus-mode-widget.lua": {
"mtime": 1786800467.724451, "mtime": 1784781173.9256406,
"ast_hash": "f62c366c2c85cfbe59eef663fc607230", "ast_hash": "f62c366c2c85cfbe59eef663fc607230",
"semantic_hash": "f62c366c2c85cfbe59eef663fc607230" "semantic_hash": "f62c366c2c85cfbe59eef663fc607230"
}, },
"examples/modules/git-branch-widget.lua": { "examples/modules/git-branch-widget.lua": {
"mtime": 1786800467.724451, "mtime": 1785882914.337525,
"ast_hash": "ebeeaebab5b5b29619f3db65c1df57d8", "ast_hash": "ebeeaebab5b5b29619f3db65c1df57d8",
"semantic_hash": "" "semantic_hash": ""
}, },
"examples/modules/low-battery-warning.lua": { "examples/modules/low-battery-warning.lua": {
"mtime": 1786800467.724451, "mtime": 1784781158.0663679,
"ast_hash": "e0ba79860562fc36fa8cb183bc576fb7", "ast_hash": "e0ba79860562fc36fa8cb183bc576fb7",
"semantic_hash": "e0ba79860562fc36fa8cb183bc576fb7" "semantic_hash": "e0ba79860562fc36fa8cb183bc576fb7"
}, },
"examples/modules/pause-media-on-headphone-unplug.lua": { "examples/modules/pause-media-on-headphone-unplug.lua": {
"mtime": 1786800467.724451, "mtime": 1784781158.0663679,
"ast_hash": "6c4cf82b6963eb93df224bed60d06c2d", "ast_hash": "6c4cf82b6963eb93df224bed60d06c2d",
"semantic_hash": "6c4cf82b6963eb93df224bed60d06c2d" "semantic_hash": "6c4cf82b6963eb93df224bed60d06c2d"
}, },
"examples/modules/workflow-status-widget.lua": { "examples/modules/workflow-status-widget.lua": {
"mtime": 1786800467.724451, "mtime": 1784781173.9256406,
"ast_hash": "9f913a66a0f8654dadc1c5d6c2be0938", "ast_hash": "9f913a66a0f8654dadc1c5d6c2be0938",
"semantic_hash": "9f913a66a0f8654dadc1c5d6c2be0938" "semantic_hash": "9f913a66a0f8654dadc1c5d6c2be0938"
}, },
"scripts/install.sh": { "scripts/install.sh": {
"mtime": 1786800994.0764284, "mtime": 1786805047.710909,
"ast_hash": "35d1a7f63824e9176bd105ab3d699576", "ast_hash": "35d1a7f63824e9176bd105ab3d699576",
"semantic_hash": "" "semantic_hash": ""
}, },
"CONTRIBUTING.md": { "CONTRIBUTING.md": {
"mtime": 1786800467.716893, "mtime": 1785909683.2691193,
"ast_hash": "6d056fcf0dae29949d19c41b41792879", "ast_hash": "6d056fcf0dae29949d19c41b41792879",
"semantic_hash": "" "semantic_hash": ""
}, },
"Documentation.md": { "Documentation.md": {
"mtime": 1786801027.2816515, "mtime": 1786805047.7009091,
"ast_hash": "7b8471e7ae45aed70682bb858826860c", "ast_hash": "e219e52fae2208f771d9b77d87d6790b",
"semantic_hash": "" "semantic_hash": ""
}, },
"Examples.md": { "Examples.md": {
"mtime": 1786800467.716893, "mtime": 1784781173.9236407,
"ast_hash": "6bcd7a14be53a9f67ef6912b160da8bc", "ast_hash": "6bcd7a14be53a9f67ef6912b160da8bc",
"semantic_hash": "6bcd7a14be53a9f67ef6912b160da8bc" "semantic_hash": "6bcd7a14be53a9f67ef6912b160da8bc"
}, },
"README.md": { "README.md": {
"mtime": 1786800994.0964282, "mtime": 1786805047.7009091,
"ast_hash": "97ae9f7efb9f2cdceb615a47cf3dfa1a", "ast_hash": "97ae9f7efb9f2cdceb615a47cf3dfa1a",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-module-host/src/io.rs": { "bread-module-host/src/io.rs": {
"mtime": 1786801244.1297076, "mtime": 1786805041.5686455,
"ast_hash": "dbe04e05d1cfb02770db8d7c0bcc0b68", "ast_hash": "dbe04e05d1cfb02770db8d7c0bcc0b68",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-module-host/src/lua_env.rs": { "bread-module-host/src/lua_env.rs": {
"mtime": 1786801244.1297076, "mtime": 1786805041.5686455,
"ast_hash": "97d009846e18d3c809663b1185c98bbb", "ast_hash": "97d009846e18d3c809663b1185c98bbb",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-module-host/src/main.rs": { "bread-module-host/src/main.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "9a93253ae44c764b8273df40999ddede", "ast_hash": "9a93253ae44c764b8273df40999ddede",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-shared/src/module_host_ipc.rs": { "bread-shared/src/module_host_ipc.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "fcdb4c03f242a5ea51fd3a096b711363", "ast_hash": "fcdb4c03f242a5ea51fd3a096b711363",
"semantic_hash": "" "semantic_hash": ""
}, },
"bread-shared/src/permissions.rs": { "bread-shared/src/permissions.rs": {
"mtime": 1786800467.7210522, "mtime": 1785882914.3346088,
"ast_hash": "800445ef9c90bdbf8f3ac9d4f1afd98e", "ast_hash": "800445ef9c90bdbf8f3ac9d4f1afd98e",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/core/rules.rs": { "breadd/src/core/rules.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "bd430cf213f400b8d4e96ccc35a76ff1", "ast_hash": "bd430cf213f400b8d4e96ccc35a76ff1",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/ipc/module_host_bridge.rs": { "breadd/src/ipc/module_host_bridge.rs": {
"mtime": 1786801244.1297076, "mtime": 1785882914.3346088,
"ast_hash": "caa9cf82695e48c88758fcfa835e1871", "ast_hash": "caa9cf82695e48c88758fcfa835e1871",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/src/module_host.rs": { "breadd/src/module_host.rs": {
"mtime": 1786801244.1297076, "mtime": 1785895235.7449324,
"ast_hash": "228826ff3c8941ea5f9bb28b66d637a9", "ast_hash": "228826ff3c8941ea5f9bb28b66d637a9",
"semantic_hash": "" "semantic_hash": ""
}, },
"breadd/tests/module_host_sandbox.rs": { "breadd/tests/module_host_sandbox.rs": {
"mtime": 1786801244.1297076, "mtime": 1786805041.5686455,
"ast_hash": "7e637b3a950c510215a6f6a7b88dd404", "ast_hash": "7e637b3a950c510215a6f6a7b88dd404",
"semantic_hash": "" "semantic_hash": ""
}, },
"examples/modules/cpu-temp-widget/init.lua": { "examples/modules/cpu-temp-widget/init.lua": {
"mtime": 1786800467.724451, "mtime": 1785882914.337525,
"ast_hash": "5ac893dd2f6af6d8b22dd290e3021f77", "ast_hash": "5ac893dd2f6af6d8b22dd290e3021f77",
"semantic_hash": "" "semantic_hash": ""
}, },
"xtask/src/main.rs": { "xtask/src/main.rs": {
"mtime": 1786801244.1297076, "mtime": 1785909683.2724528,
"ast_hash": "e914dd77ac3241df09e3a681228961db", "ast_hash": "e914dd77ac3241df09e3a681228961db",
"semantic_hash": "" "semantic_hash": ""
}, },
".forgejo/workflows/dev-release.yml": { ".forgejo/workflows/dev-release.yml": {
"mtime": 1786800467.7161875, "mtime": 1786805047.7009091,
"ast_hash": "707129aa2fe79b4539d108c03e6d7abf", "ast_hash": "ee3f41732b4ca3f34718b9c4fee68a4c",
"semantic_hash": "" "semantic_hash": ""
}, },
".forgejo/workflows/rc-release.yml": { ".forgejo/workflows/rc-release.yml": {
"mtime": 1786800467.7167187, "mtime": 1786805047.7009091,
"ast_hash": "3007d2c43d785cd72f0548096626a21d", "ast_hash": "ce93aea449f6698edb5e993a9f658392",
"semantic_hash": "" "semantic_hash": ""
}, },
".forgejo/workflows/release.yml": { ".forgejo/workflows/release.yml": {
"mtime": 1786800467.7167187, "mtime": 1786805047.7009091,
"ast_hash": "3578aa39e7b2466822c8d85247489d36", "ast_hash": "aa3e2461c895d0e8ff0cf0fa5556694d",
"semantic_hash": "" "semantic_hash": ""
}, },
"DEPRECATIONS.md": { "DEPRECATIONS.md": {
"mtime": 1786800467.716893, "mtime": 1786805047.7009091,
"ast_hash": "1685b60fad2ed4184e4119c30866ec12", "ast_hash": "f3eb8f249d81c7c4faf2a131e890f459",
"semantic_hash": "" "semantic_hash": ""
}, },
"examples/modules/README.md": { "examples/modules/README.md": {
"mtime": 1786800467.7242541, "mtime": 1786858478.390548,
"ast_hash": "dfa8a72f41c08bd5b8036b684092a93b", "ast_hash": "d47ad6c1a9775a44212b89e281aae907",
"semantic_hash": "" "semantic_hash": ""
}, },
"packaging/README.md": { "packaging/README.md": {
"mtime": 1786800994.0430956, "mtime": 1786805047.710909,
"ast_hash": "caa295eed64de126874a2e48b8aed8a2", "ast_hash": "caa295eed64de126874a2e48b8aed8a2",
"semantic_hash": "" "semantic_hash": ""
},
"ci/build.sh": {
"mtime": 1786805047.7071788,
"ast_hash": "363dbb1a10cf8e098a0451f43ff101cf",
"semantic_hash": ""
},
"examples/modules/external-monitors.lua": {
"mtime": 1786858478.390548,
"ast_hash": "ba0f44a4d84889b9828201aff9186466",
"semantic_hash": ""
},
".forgejo/workflows/check.yml": {
"mtime": 1786805047.7009091,
"ast_hash": "4ceb400224458b1a43c5ddc44cfbd187",
"semantic_hash": ""
},
"AGENTS.md": {
"mtime": 1786805047.7009091,
"ast_hash": "513e4a05cbbcdcb47b208b781f4d78bb",
"semantic_hash": ""
},
"CLAUDE.md": {
"mtime": 1784778267.6147587,
"ast_hash": "589cfefd400c641c059a2f8516ff2037",
"semantic_hash": ""
} }
} }