A pixel desktop pet that watches Claude Code, Codex, Cursor & other AI coding agents — so you don't have to.
This report summarizes scanner evidence for rullerzhou-afk/clawd-on-desk, a JavaScript project with 6,416 GitHub stars. SynthScan examined 576,816 lines of code across 1228 source files, recording 2766 pattern matches distributed across 17 syntactic categories. The legacy adjusted pattern signal is 5.9 (Moderate pattern signal); it is not an authorship estimate.
Use the findings to ask whether maintainers can explain intent, verify dependencies, simplify unnecessary scaffolding, and focus review effort. Risk Payload v1 adds ownership, supply-chain, over-engineering, and review-effort vectors when available. These are prompts for human verification, not probabilities, security findings, or measured maintenance costs.
Use each vector to guide manual verification of the underlying findings.
Can maintainers explain intent, assumptions, and trade-offs? 2461 finding(s).
Are imports declared and package/API names verified? 82 finding(s).
Are wrappers, guards, and repeated structures necessary? 2169 finding(s).
Which changes need focused human review? 2766 finding(s).
This chart tracks the legacy adjusted pattern score across scan runs. Changes can reflect source changes, scan coverage, or detector/scoring versions; they do not measure AI adoption or prove that a team refactored code. Compare runs only when their scoring versions are compatible. The dashed line tracks the raw pattern-hit count.
Groups findings by configured severity weight. Severity is not a confidence estimate, security rating, or proof that a package is missing. Verify imports against the project's manifests and inspect each finding in its local design context.
This horizontal bar chart shows where configured pattern scores accumulate across directories. Treat the bars as locations to inspect, not as evidence of authorship or code quality. Use the file-level findings to decide whether a directory needs a focused ownership, dependency, complexity, or review check.
The scanner identified 2766 distinct pattern matches across 17 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.
Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/server-hook-management.test.js | 47 | function createGuardedIntegrationCtx(target, calls) { | CODE |
| LOW | test/server-hook-management.test.js | 276 | function healthyClaudeSettingsWithThirdPartyHook() { | CODE |
| LOW | test/server-hook-management.test.js | 1500 | function makeServerWithLiveAutoStart(initialValue) { | CODE |
| LOW | test/state-agent-icons.test.js | 112 | function shouldCheckRuntimeIconEntry(entry) { | CODE |
| LOW | test/claude-hook-health.test.js | 620 | function missingCoreEventOnlyReport() { | CODE |
| LOW | test/telegram-identity-wiring-main.test.js | 14 | const start = MAIN_SOURCE.indexOf("async function initTelegramMigrationController()"); | CODE |
| LOW | test/telegram-identity-wiring-main.test.js | 34 | const start = MAIN_SOURCE.indexOf("function buildTelegramApprovalIdentitySignature(config)"); | CODE |
| LOW | test/telegram-identity-wiring-main.test.js | 117 | const tokenWriteStart = MAIN_SOURCE.indexOf("function writeTelegramApprovalToken(token)"); | CODE |
| LOW | test/telegram-identity-wiring-main.test.js | 118 | const tokenWriteEnd = MAIN_SOURCE.indexOf("\nasync function initTelegramMigrationController()", tokenWriteStart); | CODE |
| LOW | test/dashboard.test.js | 12 | function loadDashboardWithElectron(fakeElectron, originFocus) { | CODE |
| LOW | test/dashboard.test.js | 1292 | async function assertFailedPreScaleFlushRetries({ asyncFailure, moved }) { | CODE |
| LOW | test/dashboard.test.js | 1365 | async function assertOlderAsyncCompletionPreservesNewerDebt(firstResponse) { | CODE |
| LOW | test/main-size-preview-wiring.test.js | 49 | const rebase = section("function rebaseSizeToRealizedPixels() {", "function getCurrentPixelSize("); | CODE |
| LOW | test/telegram-legacy-retirement.test.js | 71 | const start = main.indexOf("async function persistTelegramMigrationPatch(patch) {"); | CODE |
| LOW | test/permission-slack-announce.test.js | 59 | function loadPermissionWithFakeElectron() { | CODE |
| LOW | test/updater.test.js | 129 | function makeLatestReleaseResponse(release) { | CODE |
| LOW | test/updater.test.js | 144 | function makePendingReleaseResponse(queue) { | CODE |
| LOW | test/pet-window-runtime.test.js | 644 | function wireNativeGeometryListeners(harness) { | CODE |
| LOW | test/pet-window-runtime.test.js | 1059 | function makeInsetMutterClampedWindow(bounds, { rightInset = 0 } = {}) { | CODE |
| LOW | test/focus-mac-extras.test.js | 18 | function setupHermeticSupersetHome({ withDb = true } = {}) { | CODE |
| LOW | test/doctor-opencode-managed.test.js | 412 | function writeLegacyFourFileGeneration(home) { | CODE |
| LOW | test/recap-private-permissions.test.js | 66 | function canonicalWindowsOwnerPrincipal(userSid) { | CODE |
| LOW | test/recap-private-permissions.test.js | 88 | function assertWindowsPrivatePrincipals(principals) { | CODE |
| LOW | test/dashboard-quick-app-quit.test.js | 42 | function loadDashboardWithElectron(fakeElectron, originFocus) { | CODE |
| LOW | test/copilot-hook.test.js | 32 | function makeFakeCopilotHomeWithSession(rootName, sessionId, contents) { | CODE |
| LOW | test/feishu-approval-sdk-security.test.js | 63 | function assertSafeApplicationLogs(applicationCalls) { | CODE |
| LOW | test/remote-ssh-ipc.test.js | 159 | function actionBackedSettingsController(profiles = [], { failOnce = null } = {}) { | CODE |
| LOW | test/permission-hotkey-focus.test.js | 108 | async function assertHotkeyLeavesFocusUntouchedOnCaptureFailure({ accelerator, expectedBehavior }) { | CODE |
| LOW | test/server-route-permission.test.js | 158 | function callPermissionPostThroughAutomation(body, mode, options = {}) { | CODE |
| LOW | test/session-automation-dialog-parent.test.js | 47 | const start = mainSource.indexOf("async function showSessionAutomationWarning(entry)"); | CODE |
| LOW | test/settings-effect-router-notify-autoclose.test.js | 8 | function createFakeSettingsController() { | CODE |
| LOW | test/dsh-desktop-repair.test.js | 197 | function writeIncompleteLinkedProfile(harness, profile) { | CODE |
| LOW | test/codex-hook.test.js | 1283 | async function runClientEphemeralSessionStart(options = {}) { | CODE |
| LOW | test/cleanup-integrations.test.js | 782 | function assertOnlyClawdHooksRemoved(settingsPath) { | CODE |
| LOW | test/accessory-theme-capability.test.js | 34 | function assertDeclaredTargetsExist(themeId, raw) { | CODE |
| LOW | test/permission-auto-approve.test.js | 337 | function withRealSessionAutomation(globalMode) { | CODE |
| LOW | test/permission-family-lifecycle.test.js | 27 | function loadPermissionWithElectron(fakeElectron) { | CODE |
| LOW | test/permission-family-lifecycle.test.js | 116 | function assertSecretAbsentFromLifecycleLogs(harness, secret) { | CODE |
| LOW | test/readme-contributors.test.js | 168 | function extractContributorSection(markdown, filename) { | CODE |
| LOW | test/permission-codex-response.test.js | 9 | function loadPermissionWithElectron(fakeElectron = null) { | CODE |
| LOW | test/permission-codex-response.test.js | 32 | function createCodexDecisionHarness() { | CODE |
| LOW | test/quota-alerts.test.js | 17 | function deferredNotificationHarness(options = {}) { | CODE |
| LOW | test/copilot-install.test.js | 40 | function makeTempHomeWithoutCopilot() { | CODE |
| LOW | test/agent-runtime-main.test.js | 2158 | function makeArchiveRuntimeHarness({ root, extraOptions = {} } = {}) { | CODE |
| LOW | test/dsh-install-bridge.test.js | 162 | function writeHistoricalGeneration(harness, version, sourceClawdVersion = "1.2.3") { | CODE |
| LOW | test/recap-store.test.js | 38 | function grantWindowsParentReadToEveryone(dirPath) { | CODE |
| LOW | test/recap-store.test.js | 78 | function canonicalWindowsOwnerPrincipal(userSid) { | CODE |
| LOW | test/recap-store.test.js | 100 | function assertWindowsPrivatePrincipals(principals) { | CODE |
| LOW | test/settings-controller.test.js | 1573 | function createControllerWithReadFailure(p, injectedDeps = {}) { | CODE |
| LOW | test/edge-virtualization.test.js | 217 | function createEdgeVirtualizationHarness(overrides = {}) { | CODE |
| LOW | test/edge-virtualization.test.js | 249 | function countedRuntimeGetAllDisplays() { | CODE |
| LOW | test/edge-virtualization.test.js | 253 | function countedMiniGetAllDisplays() { | CODE |
| LOW | test/edge-virtualization.test.js | 268 | function countedRepositionSessionHud() { | CODE |
| LOW | test/edge-virtualization.test.js | 689 | function tickUntilJumpAnimationEnds(mini, maxSteps = 60, stepMs = 10) { | CODE |
| LOW | test/hermes-plugin.test.js | 41 | function envWithoutTerminalIdentity() { | CODE |
| LOW | test/permission-notify-autoclose.test.js | 17 | function loadPermissionWithElectron(fakeElectron) { | CODE |
| LOW | test/permission-notify-autoclose.test.js | 680 | function withBridgeRequestRecorder(run) { | CODE |
| LOW | test/settings-effect-router.test.js | 12 | function createFakeSettingsController(initialSnapshot = {}) { | CODE |
| LOW⚡ | test/settings-renderer-browser-env.test.js | 14928 | assert.ok(coreSource.includes("function readCustomToolDetectionResults(")); | CODE |
| LOW⚡ | test/settings-renderer-browser-env.test.js | 14929 | assert.ok(coreSource.includes("function readCustomAgentDetectionResults(")); | CODE |
| 1886 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | test/state.test.js | 7169 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM⚡ | test/state.test.js | 7178 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 21 | // ── Helpers ────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/state.test.js | 402 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 404 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 678 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 680 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 806 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 808 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1369 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1371 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1554 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1556 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1870 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 1872 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 4500 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 4502 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 6653 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 6655 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 6893 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 6895 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7118 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7120 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7324 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7328 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7395 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state.test.js | 7400 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/win-foreground-terminal.test.js | 297 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/win-foreground-terminal.test.js | 303 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/doctor-local-server.test.js | 75 | // ── #681: runtime IDENTITY, not just the port ───────────────────────────── | COMMENT |
| MEDIUM | test/doctor-local-server.test.js | 75 | // ── #681: runtime IDENTITY, not just the port ───────────────────────────── | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 63 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 65 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 154 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 156 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 187 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 189 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 318 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 320 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 364 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 366 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 395 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/pid-resolver-offline-gate.test.js | 397 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state-source-pid-merge.test.js | 27 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state-source-pid-merge.test.js | 29 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state-source-pid-merge.test.js | 108 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/state-source-pid-merge.test.js | 110 | // ═══════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/permission-slack-announce.test.js | 598 | // ── Interaction kind and action target (review item 4) ────────────────────── | COMMENT |
| MEDIUM | test/updater.test.js | 1603 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/updater.test.js | 1610 | // ────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 47 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 49 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 137 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 140 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 301 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 303 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 507 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/hook-pid-cache-contexts.test.js | 509 | // ═════════════════════════════════════════════════════════════════════════════ | COMMENT |
| MEDIUM | test/copilot-hook.test.js | 383 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| MEDIUM | test/copilot-hook.test.js | 385 | // ───────────────────────────────────────────────────────────────────────── | COMMENT |
| 130 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-oneshot-gate.sh | 1 | #!/bin/bash | COMMENT |
| LOW | tools/generate-kirocrew-fallback-icon.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | tools/copilot-permission-capture/e2e-hook.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | tools/copilot-permission-capture/capture.js | 1 | #!/usr/bin/env node | COMMENT |
| LOW | test/permission-family-payload.test.js | 1 | // opencode-family payload ↔ renderer contract (plan §3.5/§9). | COMMENT |
| LOW | test/state.test.js | 7161 | // s0 is oldest ack-pending (smallest updatedAt) — must be the victim. | COMMENT |
| LOW | test/pid-resolver-offline-gate.test.js | 1 | // test/pid-resolver-offline-gate.test.js — #681 Slice A1. | COMMENT |
| LOW | test/state-source-pid-merge.test.js | 1 | // test/state-source-pid-merge.test.js — #681 Slice A1, server-side contract. | COMMENT |
| LOW | test/opencode-family-jsonc.test.js | 501 | }); | COMMENT |
| LOW | test/permission-slack-announce.test.js | 1 | // Slack "approval needed" announcements must describe reality. | COMMENT |
| LOW | test/hook-pid-cache-contexts.test.js | 1 | "use strict"; | COMMENT |
| LOW | test/hook-pid-cache-contexts.test.js | 501 | const r = runHook("reasonix-hook.js", { event: "PostToolUse", session_id: "default", cwd: "D:/repo", toolName: "bash | COMMENT |
| LOW | test/pet-window-runtime.test.js | 681 | // I2's rebase formula: logical = actualPhysicalX + oldViewportOffsetX = | COMMENT |
| LOW | test/pet-window-runtime.test.js | 701 | // can exceed 250ms) — misjudging the pause as "grab ended" and acting on | COMMENT |
| LOW | test/pet-window-runtime.test.js | 761 | // already computes for a 203px-wide window: Math.round(203 * 0.25) = 51; | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1181 | // PR #751 rework batch A-5: each sub-case below used to advance the fake | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1221 | COMMENT | |
| LOW | test/pet-window-runtime.test.js | 1321 | assert.equal( | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1361 | }, { force: true }); | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1381 | // stuck at gen2's original 1700 despite a real move having happened. | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1401 | // "stale" closure actually read gen2's OWN CURRENT sweepGen by the time | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1421 | clock.advance(50); | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1541 | harness.runtime.getPetWindowBounds().x, 851, | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1561 | // advances writeGen), that debt survives untouched all the way to | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1761 | COMMENT | |
| LOW | test/pet-window-runtime.test.js | 1881 | // the reviewer's own exact counter-example timeline; coordinator-verified | COMMENT |
| LOW | test/pet-window-runtime.test.js | 1921 | COMMENT | |
| LOW | test/pet-window-runtime.test.js | 2161 | if (originalDebug === undefined) delete process.env.CLAWD_WINDOW_DEBUG; | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2181 | // time — even though 5 real events genuinely happened — misclassifying a | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2361 | "the genuine external move after the consumption point must still correctly rebase (the bit must have been re-arme | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2381 | // C-2 (Codex B2): reproduces Codex's own dual-display counter-example. | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2441 | // side itself. Same two-display topology as C-2 (left=eligible outer | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2501 | // out from under a rect that was never actually re-written. | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2541 | assert.equal(harness.renderWin.getBounds().x, 1770, "sanity: software-clamped physical, no Mutter mock needed"); | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2561 | harness.runtime.syncHitWin(); | COMMENT |
| LOW | test/pet-window-runtime.test.js | 2581 | clock.advance(300); // one hit reconcile cycle (past HIT_QUIET_MS) | COMMENT |
| LOW | test/dashboard-quick-app-quit.test.js | 1 | "use strict"; | COMMENT |
| LOW | test/session-hud-style.test.js | 81 | // color-vision deficiency. | COMMENT |
| LOW | test/bubble-kimi-cue.test.js | 101 | COMMENT | |
| LOW | test/cleanup-integrations.test.js | 481 | assert.strictEqual(claudeAgent.error, "queue disposed"); | COMMENT |
| LOW | test/permission-auto-approve.test.js | 1 | // Permission automation chokepoint in showPermissionBubble. | COMMENT |
| LOW | test/mini.test.js | 421 | assert.equal(mini.getMiniMode(), true); | COMMENT |
| LOW | test/permission-plan-feedback.test.js | 1 | // Tests for the ExitPlanMode "Tell Claude what to change" feedback path. | COMMENT |
| LOW | test/permission-plan-feedback.test.js | 261 | destroy: () => {}, | COMMENT |
| LOW | test/server-runtime-write.test.js | 1 | // test/server-runtime-write.test.js — #681 Slice A1, runtime write robustness. | COMMENT |
| LOW | test/server-runtime-write.test.js | 181 | COMMENT | |
| LOW | test/pid-cache-sanitized.test.js | 1 | // test/pid-cache-sanitized.test.js — #681 Slice A2, the privacy boundary. | COMMENT |
| LOW | test/remote-ssh-runtime.test.js | 2261 | const probe = children[1]; | COMMENT |
| LOW | test/telegram-approval-settings.test.js | 261 | // test fails loudly if a future refactor re-introduces the read. | COMMENT |
| LOW | test/dashboard-quick-scroll.test.js | 1 | "use strict"; | COMMENT |
| LOW | test/edge-virtualization.test.js | 1 | "use strict"; | COMMENT |
| LOW | test/edge-virtualization.test.js | 121 | const ISSUE_690_WORK_AREA = { x: 0, y: 0, width: 1920, height: 1080 }; | COMMENT |
| LOW | test/edge-virtualization.test.js | 161 | // geometry change — it would fire a real ConfigureNotify/move event, not | COMMENT |
| LOW | test/edge-virtualization.test.js | 181 | offsetRatio, | COMMENT |
| LOW | test/edge-virtualization.test.js | 221 | let cursor = { x: 100, y: 100 }; | COMMENT |
| LOW | test/edge-virtualization.test.js | 261 | // (src/main.js's petWindowRuntime options) — a single shared counter here | COMMENT |
| LOW | test/edge-virtualization.test.js | 501 | afterEach(() => { | COMMENT |
| LOW | test/edge-virtualization.test.js | 621 | ); | COMMENT |
| LOW | test/edge-virtualization.test.js | 641 | assert.equal(h.runtime.getPetWindowBounds().x, 1816, "logical X must settle at calcMiniX()'s resting position"); | COMMENT |
| LOW | test/edge-virtualization.test.js | 941 | COMMENT | |
| 405 more matches not shown… | ||||
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| CRITICAL | test/settings-renderer-browser-env.test.js | 8967 | harness.core.state.mountedControls.size.dispose(); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 11012 | harness.core.state.mountedControls.roamArea.chooseButton.dispatchEvent({ type: "click", bubbles: false }); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 11424 | harness.core.state.mountedControls.generalSwitches.delete("showDock"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12485 | assert.strictEqual(harness.core.state.transientUiState.generalSwitches.has("soundMuted"), false); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12521 | assert.strictEqual(harness.core.state.transientUiState.generalSwitches.has("soundMuted"), false); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12538 | const manage = harness.core.state.mountedControls.generalSwitches.get("manageClaudeHooksAutomatically"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12539 | const autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12564 | let autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12576 | autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12587 | autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithClaude"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12912 | const autoStart = harness.core.state.mountedControls.generalSwitches.get("autoStartWithCodex"); | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 12949 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 13081 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 13136 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 13166 | const notificationPolicy = harness.core.state.mountedControls.bubblePolicyControls.get("notificationBubbleAutoCloseS | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 15393 | harness.core.runtime.agentInstallationHints.agents.map((agent) => agent.agentId), | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 15445 | harness.core.runtime.agentInstallationHints.agents.map((entry) => entry.detectedInstalled), | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16183 | const permissionsSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16220 | const soundSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16280 | const subagentSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16337 | const subagentSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16340 | const permissionsSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16374 | const permissionsSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16381 | const notificationSwitch = [...harness.core.state.mountedControls.agentSwitches.values()] | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16685 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16735 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| CRITICAL | test/settings-renderer-browser-env.test.js | 16807 | harness.core.state.mountedControls.animMapSwitches.set("clawd:error", { | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/hermes-plugin.test.js | 132 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 182 | print(json.dumps({"events": [item["event"] for item in posts]}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 203 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 231 | print(json.dumps([{"event": item["event"], "session_id": item["session_id"]} for item in posts])) | CODE |
| HIGH | test/hermes-plugin.test.js | 267 | print(json.dumps(posts, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 315 | print(json.dumps(posts[-1], sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 346 | print(json.dumps(posts[-1], sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 373 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 405 | print(json.dumps(cases, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 437 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 455 | print(json.dumps({"meta": meta, "payload": payload, "unresolved": unresolved}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 525 | print(json.dumps({"calls": calls, "meta": meta}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 575 | print(json.dumps({"calls": calls, "meta": meta}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 614 | return None | CODE |
| HIGH | test/hermes-plugin.test.js | 630 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 691 | print(json.dumps({"results": results, "calls": calls, "events": events})) | CODE |
| HIGH | test/hermes-plugin.test.js | 733 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 757 | print(json.dumps({"result": result, "calls": calls, "cached_port": mod._cached_port}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 812 | print(json.dumps({"received": received, "cached_port": mod._cached_port}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 845 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 874 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 911 | print(json.dumps({"result": result, "calls": calls, "logs": logs}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 934 | print(json.dumps({"result": result, "hook_events": hook_events}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 964 | return False | CODE |
| HIGH | test/hermes-plugin.test.js | 980 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1017 | print(json.dumps({"calls": calls, "logs": logs, "cached_port": mod._cached_port}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1051 | print(json.dumps({"result": result, "calls": calls}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1096 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1124 | print(json.dumps({"identity": identity, "reason": reason, "calls": calls, "logs": logs}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1147 | print(json.dumps({"result": result, "calls": calls, "logs": logs}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1186 | print(json.dumps({"calls": calls}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1227 | print(json.dumps({"result": result, "calls": calls}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1265 | print(json.dumps({"result": result, "calls": calls, "logs": logs}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1312 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1336 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1389 | print(json.dumps({"log_text": log_text, "safe": safe}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1432 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1452 | print(json.dumps({"agent_pid": payload.get("agent_pid")}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1468 | print(json.dumps({"calls": calls, "secure": mod._ssh_secure_mode()}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1496 | print(json.dumps({ | CODE |
| HIGH | test/hermes-plugin.test.js | 1511 | print(json.dumps({"orca": payload.get("orca_pane_key")}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1545 | print(json.dumps({"identity": identity, "reason": reason, "calls": calls}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1577 | print(json.dumps({"preferred": mod._hermes_home() == Path("/tmp/x")}, sort_keys=True)) | CODE |
| HIGH | test/hermes-plugin.test.js | 1594 | print(json.dumps({"fallback": mod._hermes_home() == Path(os.environ["HERMES_HOME"])}, sort_keys=True)) | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM⚡ | test/state.test.js | 7170 | // Qwen Code 0.16.1 self-submit filter — qwen's agentic loop fires a synthetic | COMMENT |
| MEDIUM | docs/releases/release-v0.6.0.md | 6 | - **Theme ecosystem** — fully pluggable theme system replacing hardcoded constants. Themes now define state-to-asset map | CODE |
| MEDIUM | docs/releases/release-v0.9.0.md | 13 | - **Mobile companion — read-only PWA LAN preview (M1)** (#391, #412, #419) - A new read-only mobile companion serves a s | CODE |
| MEDIUM | docs/guides/setup-guide.md | 270 | The statusline installer preserves an existing third-party statusline unless you explicitly opt into chaining; see [Agen | CODE |
| MEDIUM | hooks/qwen-code-hook.js | 30 | // agentic-loop tool-result feedback, NOT user input. It used to flash | COMMENT |
| MEDIUM | hooks/clawd-hook.js | 16 | // #634: the pid cache + lifecycle orchestration is owned by the shared resolver | COMMENT |
| MEDIUM | hooks/clawd-hook.js | 799 | // #627/#634: the per-session pid cache + lifecycle orchestration now lives | COMMENT |
| MEDIUM⚡ | src/state.js | 572 | // 2000ms window covers the agentic loop with ~2x headroom while still letting | COMMENT |
| MEDIUM⚡ | src/state.js | 577 | // PostToolUseFailure (where the agentic loop may still self-submit), and | COMMENT |
| MEDIUM | src/state.js | 2766 | // Qwen Code 0.16.1 self-submit guard. qwen's agentic loop fires a synthetic | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | hooks/hermes-plugin/__init__.py | 226 | except Exception: | CODE |
| HIGH | hooks/hermes-plugin/__init__.py | 137 | except Exception: | CODE |
| HIGH | hooks/hermes-plugin/__init__.py | 715 | except Exception: | CODE |
| HIGH | hooks/hermes-plugin/__init__.py | 875 | except Exception: | CODE |
| HIGH | hooks/hermes-plugin/__init__.py | 437 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | hooks/hermes-plugin/__init__.py | 231 | def _read_runtime_port() -> Optional[int]: | CODE |
| MEDIUM | hooks/hermes-plugin/__init__.py | 242 | def _read_remote_identity() -> Tuple[Optional[Dict[str, Any]], str]: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 742 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 756 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 759 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 875 | except Exception: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 885 | except Exception as exc: | CODE |
| LOW⚡ | hooks/hermes-plugin/__init__.py | 902 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 27 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 137 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 174 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 226 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 237 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 247 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 338 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 437 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 454 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 513 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 588 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 622 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 639 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 687 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 715 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 985 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1245 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1274 | except Exception as exc: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1358 | except Exception: | CODE |
| LOW | hooks/hermes-plugin/__init__.py | 1406 | except Exception: | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/gemini-log-monitor.test.js | 128 | // Step 1: user message → thinking | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 145 | // Step 2: 300ms — gemini text, no toolCalls (deferred idle starts) | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 153 | // Step 3: 800ms — toolCalls arrive (within 2s defer) → cancel idle, emit attention | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 275 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 287 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 299 | // Step 3: follow-up text (no tools) → should be SKIPPED (turnHasTools=true) | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 323 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 335 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 347 | // Step 3: new user message → resets turnHasTools | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 360 | // Step 4: gemini text without tools → should NOT be skipped (new turn, turnHasTools reset) | COMMENT |
| LOW⚡ | src/settings-actions.js | 2440 | // Step 1: always disable every managed target so a failed disk cleanup can | COMMENT |
| LOW | src/settings-actions.js | 2468 | // Step 2: decide `integrationInstalled` from the per-agent disk result. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/gemini-log-monitor.test.js | 128 | // Step 1: user message → thinking | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 145 | // Step 2: 300ms — gemini text, no toolCalls (deferred idle starts) | COMMENT |
| LOW⚡ | test/gemini-log-monitor.test.js | 153 | // Step 3: 800ms — toolCalls arrive (within 2s defer) → cancel idle, emit attention | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 275 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 287 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 299 | // Step 3: follow-up text (no tools) → should be SKIPPED (turnHasTools=true) | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 323 | // Step 1: user message | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 335 | // Step 2: gemini with tools → attention, turnHasTools=true | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 347 | // Step 3: new user message → resets turnHasTools | COMMENT |
| LOW | test/gemini-log-monitor.test.js | 360 | // Step 4: gemini text without tools → should NOT be skipped (new turn, turnHasTools reset) | COMMENT |
| LOW⚡ | src/settings-actions.js | 2440 | // Step 1: always disable every managed target so a failed disk cleanup can | COMMENT |
| LOW | src/settings-actions.js | 2468 | // Step 2: decide `integrationInstalled` from the per-agent disk result. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| HIGH | test/pet-window-runtime.test.js | 2240 | // write landed exactly as requested) and takes (a) — pre-fix, (a) left | COMMENT |
| HIGH | docs/releases/release-v1.3.0.md | 16 | - **Session titles** (#1127; issue #1125) — shows AI-generated Claude Code CLI | CODE |
| HIGH | src/pet-window-runtime.js | 1012 | // (a) our own write landed exactly as requested. | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| MEDIUM | test/remote-ssh-codespaces-harness.test.js | 18 | test("#546 manual harness is tracked, isolated, and never uses broad process cleanup", () => { | CODE |
| MEDIUM | test/remote-ssh-codespaces-harness.test.js | 51 | test("#546 V10 readiness harness uses a test-only identity and exact cleanup", () => { | CODE |
| MEDIUM | test/edge-virtualization.test.js | 274 | // (1 per write, from the runtime's own tail-end call only) — a robust | COMMENT |
| MEDIUM | test/bubble-format.test.js | 211 | // server is always second-to-last, tool is last — robust to extra prefixes. | COMMENT |
| MEDIUM | hooks/opencode-family-install.js | 1476 | // to the REAL ~/.config, which is how #825's verification harness first | COMMENT |
| MEDIUM | src/remote-ssh-deploy.js | 483 | // with .trim(), so it's robust to either, but no-newline avoids | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test/settings-icons.test.js | 58 | const placeholder = icons.getIcon("placeholder"); | CODE |
| LOW | test/settings-icons.test.js | 66 | assert.strictEqual(icons.getIcon("no-such-tab-xyz"), icons.getIcon("placeholder")); | CODE |
| LOW | test/contribution-template-parity.test.js | 59 | hasPlaceholder: hasOwn(attributes, "placeholder"), | CODE |
| LOW | test/session-history-loader.test.js | 201 | writeTranscript("placeholder", projectCwd); // gives projectCwd its own directory | CODE |
| LOW | test/session-history-loader.test.js | 219 | writeTranscript("placeholder", projectCwd); // the ENOENT branch needs the dir to exist | CODE |
| LOW | test/claude-statusline-local-chain.test.js | 279 | const f = fixture(process.platform, { type: "command", command: "placeholder", padding: 4 }); | CODE |
| LOW | src/settings-renderer.js | 60 | div.className = "placeholder"; | CODE |
| LOW | src/settings-renderer.js | 62 | `<div class="placeholder-icon">${getTabIcon("placeholder")}</div>` + | CODE |
| LOW | src/settings-tab-agents.js | 94 | empty.className = "placeholder"; | CODE |
| LOW | src/settings-tab-theme.js | 104 | empty.className = "placeholder"; | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hooks/hermes-plugin/__init__.py | 242 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 393 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 467 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 801 | CODE | |
| LOW | hooks/hermes-plugin/__init__.py | 1318 | CODE |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | test-macos.sh | 95 | # Check if the state server received it | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | ci/wayland-smoke.sh | 4 | # Usage: | COMMENT |
| Severity | File | Line | Snippet | Context |
|---|---|---|---|---|
| LOW | hooks/hermes-plugin/__init__.py | 8 | CODE |