# Graph Report - qmk-rgb (2026-09-27) ## Corpus Check - 63 files · ~33,290 words - Verdict: corpus is large enough that graph structure adds value. - Unclassified: 3 file(s) not represented in the graph (top: (none) 3) ## Summary - 469 nodes · 1113 edges · 28 communities (20 shown, 8 thin omitted) - Extraction: 87% EXTRACTED · 13% INFERRED · 0% AMBIGUOUS · INFERRED: 142 edges (avg confidence: 0.85) - Token cost: 0 input · 0 output ## Graph Freshness - Built from commit: `664037b6` - 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) - device.go - impact80_test.go - LEDType - Zone - profile.go - hid.go - selectedZones - What You Must Do When Invoked - testing.T - protocol.go - graphify.js - opencode.json - netdome.biz/paul/qmk-rgb - Agent Guidelines — QMK RGB Tool - QMK RGB Tool - fakeTransport - /qmk-rgb - Wobkey RGB CLI — Implementation Plan - graphify reference: extra exports and benchmark - graphify reference: query, path, explain - graphify reference: add a URL and watch a folder - graphify reference: commit hook and native CLAUDE.md integration - graphify reference: incremental update and cluster-only - graphify reference: GitHub clone and cross-repo merge - graphify reference: transcribe video and audio - CLAUDE.md - .claude/CLAUDE.md - extraction-spec.md ## God Nodes (most connected - your core abstractions) 1. `Zone` - 35 edges 2. `LEDType` - 31 edges 3. `selectedZones()` - 22 edges 4. `AllZones()` - 17 edges 5. `QMK RGB Tool` - 16 edges 6. `ResolveEffect()` - 15 edges 7. `init()` - 13 edges 8. `NewBrightnessCmd()` - 12 edges 9. `OpenDevice()` - 12 edges 10. `selectDevice()` - 12 edges ## Surprising Connections (you probably didn't know these) - `deviceInfoOutput` --references--> `Device` [EXTRACTED] cmd/qmk-rgb-tool/keyboard_info_test.go → internal/device/device.go - `runBrightness()` --references--> `LEDType` [EXTRACTED] cmd/qmk-rgb-tool/brightness_summary_test.go → internal/via/protocol.go - `appliedFor()` --references--> `LEDType` [EXTRACTED] cmd/qmk-rgb-tool/brightness_verify_test.go → internal/via/protocol.go - `TestSetBrightnessVerifiedReadsBackEveryZone()` --calls--> `AllZones()` [EXTRACTED] cmd/qmk-rgb-tool/brightness_verify_test.go → internal/rgb/impact80.go - `NewColorCmd()` --calls--> `ParseHexColor()` [EXTRACTED] cmd/qmk-rgb-tool/color.go → internal/rgb/effects.go ## Import Cycles - None detected. ## Communities (28 total, 8 thin omitted) ### Community 0 - "device.go" Cohesion: 0.13 Nodes (30): formatDeviceList(), selectDevice(), testDevices(), TestFormatDeviceList(), TestSelectDeviceByIndex(), TestSelectDeviceEmptySelectorRejectsMultiple(), TestSelectDeviceEmptySelectorRejectsNone(), TestSelectDeviceEmptySelectorRequiresSingle() (+22 more) ### Community 1 - "impact80_test.go" Cohesion: 0.15 Nodes (24): TestSelectedChannelStopsOnFirstError(), resolveEffectTargets(), executeEffectCommand(), TestEffectCommandRejectsBeforeOpeningProtocol(), TestEffectCommandSuppressesSuccessAfterLaterWriteFailure(), TestEffectCommandWarnsForSkippedZones(), TestResolveEffectTargetsBacklightOnly(), TestResolveEffectTargetsBreathing() (+16 more) ### Community 2 - "LEDType" Cohesion: 0.11 Nodes (18): getInfoValue(), readInfo(), readZoneInfo(), TestInfoCommandPrintsJSONBeforeReturningError(), TestInfoErrorRecord(), TestInfoSuccessfulRecord(), lightingEnabled(), TestLightingEnabledRequiresActiveEffectAndBrightness() (+10 more) ### Community 3 - "Zone" Cohesion: 0.11 Nodes (36): TestOneArgCommandsKeepTheirArity(), NewBrightnessCmd(), TestSelectedChannelOperations(), NewModeCmd(), anyMismatch(), disableLightingOnZones(), enableLightingOnZones(), forEachSelectedZone() (+28 more) ### Community 4 - "profile.go" Cohesion: 0.10 Nodes (34): TestZeroArgCommandsAcceptNoArgs(), TestZeroArgCommandsRejectStrayTokens(), NewColorCmd(), NewDisableCmd(), listAllEffects(), NewEffectCmd(), runEffectSet(), NewEnableCmd() (+26 more) ### Community 5 - "hid.go" Cohesion: 0.18 Nodes (12): go_pkg_github_com_sstallion_go_hid, go_pkg_sync, go_pkg_time, Device, DeviceInfo, DevicesInfo, DiscoverAll(), ensureInit() (+4 more) ### Community 6 - "selectedZones" Cohesion: 0.11 Nodes (24): sameZones(), TestFilterZonesDoesNotAddMissingZones(), TestFilterZonesDoesNotMutateInput(), TestFilterZonesKeepsOnlyTheSelection(), TestDeviceFlagIsInheritedByCommands(), TestSelectedZonesDefaultsToAll(), TestSelectedZonesExplicitZones(), TestSelectedZonesRejectsUnknownZone() (+16 more) ### Community 7 - "What You Must Do When Invoked" Cohesion: 0.08 Nodes (24): For /graphify add and --watch, For /graphify query, For the commit hook and native CLAUDE.md integration, For --update and --cluster-only, /graphify, Honesty Rules, Interpreter guard for subcommands, Part A - Structural extraction for code files (+16 more) ### Community 8 - "testing.T" Cohesion: 0.06 Nodes (57): TestAgentsDocDoesNotDuplicateTheCommandTable(), TestAgentsDocDoesNotDuplicateTheEffectCatalog(), TestAgentsDocTellsAgentsToReadTheReadme(), runBrightness(), TestBrightnessReportsPlainMessageWhenAllZonesMatch(), TestBrightnessSummarisesAppliedValuesOnMismatch(), TestBrightnessSummarisesASingleMismatchingZone(), TestBrightnessSummaryNamesOnlySelectedZones() (+49 more) ### Community 9 - "protocol.go" Cohesion: 0.19 Nodes (7): OpenDevice(), TestZoneValidationPrecedesDeviceOpening(), TestZoneValidationRunsBeforeCommandOpener(), Protocol, New(), Message, transport ### Community 10 - "graphify.js" Cohesion: 0.40 Nodes (3): IMPORTANT: keep the reminder string free of backticks and $(...) constructs., ref_fs, ref_path ### Community 13 - "Agent Guidelines — QMK RGB Tool" Cohesion: 0.10 Nodes (19): Agent Guidelines — QMK RGB Tool, Architecture, Code vs Documentation, Concurrency, Consistency, Constraints, Device Selection, Error Handling (+11 more) ### Community 14 - "QMK RGB Tool" Cohesion: 0.09 Nodes (21): Architecture, Brightness and Speed Are Not Applied Verbatim, CLI Reference, Compatibility Aliases, Effect Behavior, Features, Impact 80 Zones and Effects, Installation (+13 more) ### Community 16 - "/qmk-rgb" Cohesion: 0.15 Nodes (12): 1. First, get the tool's own help, 2. If the tool is not built or no keyboard is connected, 3. When a user wants to change something, 4. Profiles, Compatibility aliases, How to answer, Known limitations, /qmk-rgb (+4 more) ### Community 18 - "Wobkey RGB CLI — Implementation Plan" Cohesion: 0.18 Nodes (10): Continue With Hardware, Cross-Platform HID Backends, Effect Families, Handoff Status, Hardware Environment, Open Issues, Status, Verification (+2 more) ### Community 19 - "graphify reference: extra exports and benchmark" Cohesion: 0.22 Nodes (8): graphify reference: extra exports and benchmark, Step 6b - Wiki (only if --wiki flag), Step 7 - Neo4j export (only if --neo4j or --neo4j-push flag), Step 7a - FalkorDB export (only if --falkordb or --falkordb-push flag), Step 7b - SVG export (only if --svg flag), Step 7c - GraphML export (only if --graphml flag), Step 7d - MCP server (only if --mcp flag), Step 8 - Token reduction benchmark (only if total_words > 5000) ### Community 20 - "graphify reference: query, path, explain" Cohesion: 0.33 Nodes (5): For /graphify explain, For /graphify path, graphify reference: query, path, explain, Step 0 — Constrained query expansion (REQUIRED before traversal), Step 1 — Traversal ### Community 21 - "graphify reference: add a URL and watch a folder" Cohesion: 0.50 Nodes (3): For /graphify add, For --watch, graphify reference: add a URL and watch a folder ### Community 22 - "graphify reference: commit hook and native CLAUDE.md integration" Cohesion: 0.50 Nodes (3): For git commit hook, For native CLAUDE.md integration, graphify reference: commit hook and native CLAUDE.md integration ### Community 23 - "graphify reference: incremental update and cluster-only" Cohesion: 0.50 Nodes (3): For --cluster-only, For --update (incremental re-extraction), graphify reference: incremental update and cluster-only ## Knowledge Gaps - **100 isolated node(s):** `$schema`, `plugin`, `profileListOutput`, `netdome.biz/paul/qmk-rgb`, `LEDParam` (+95 more) These have ≤1 connection - possible missing edges or undocumented components. (Counts symbols only; 145 node(s) total have ≤1 connection when file, concept and rationale nodes are included.) - **8 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 `LEDType` connect `LEDType` to `testing.T`, `protocol.go`, `Zone`, `profile.go`?** _High betweenness centrality (0.049) - this node is a cross-community bridge._ - **Why does `Zone` connect `Zone` to `impact80_test.go`, `LEDType`, `profile.go`, `selectedZones`?** _High betweenness centrality (0.022) - this node is a cross-community bridge._ - **Are the 3 inferred relationships involving `Zone` (e.g. with `TestImpact80DefaultEffects()` and `TestImpact80LogoAndSideCatalog()`) actually correct?** _`Zone` has 3 INFERRED edges - model-reasoned connections that need verification._ - **Are the 18 inferred relationships involving `selectedZones()` (e.g. with `NewBrightnessCmd()` and `NewColorCmd()`) actually correct?** _`selectedZones()` has 18 INFERRED edges - model-reasoned connections that need verification._ - **What connects `$schema`, `plugin`, `profileListOutput` to the rest of the system?** _100 weakly-connected nodes found - possible documentation gaps or missing edges._ - **Should `device.go` be split into smaller, more focused modules?** _Cohesion score 0.1265597147950089 - nodes in this community are weakly interconnected._ - **Should `impact80_test.go` be split into smaller, more focused modules?** _Cohesion score 0.1452991452991453 - nodes in this community are weakly interconnected._