AI Slop Code Risk Monitor

wavetermdev/waveterm

SlopCodeMonitor badge for wavetermdev/waveterm Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

An open-source, AI-integrated, cross-platform terminal for seamless workflows

1.3 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for wavetermdev/waveterm, a Go project with 22,625 GitHub stars. SynthScan examined 188,642 lines of code across 915 source files, recording 175 pattern matches distributed across 10 syntactic categories. The legacy adjusted pattern signal is 1.3 (Low 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.

1.3
Adjusted Signal
1.3
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
22.6K
Stars
Go
Language
188.6K
Lines of Code
915
Files
175
Pattern Hits
2026-10-31
Scan Date
0.00
HC Hit Rate

Risk Review · Payload v1

Use each vector to guide manual verification of the underlying findings.

Payload schema: 1.0.0 · Engine: 2.0.0 · Scoring: heuristic-density-v1 · Scan date: 2026-10-31.

Cognitive Ownership Risk 5.5/100 · LOW

Can maintainers explain intent, assumptions, and trade-offs? 159 finding(s).

Hallucinated Dependency & Supply Chain Risk 0.4/100 · LOW

Are imports declared and package/API names verified? 10 finding(s).

Agent Over-Engineering Ratio 2.7/100 · LOW

Are wrappers, guards, and repeated structures necessary? 84 finding(s).

PR Review Velocity Impact 5.2/100 · LOW

Which changes need focused human review? 175 finding(s).

What These Metrics Mean

Adjusted Signal
Legacy pattern score normalized per 1,000 scanned lines and multiplied by the repository-level time factor. It is not an estimate of AI authorship.
Raw Pattern Score
Sum of severity- and context-weighted pattern findings before applying the time factor.
Time Factor
A coarse multiplier based on repository last-push metadata. It does not identify when individual code was written.
Pattern Hits
Count of configured pattern findings. Review each location and surrounding code before acting.
HC Hit Rate
High- and critical-severity findings per scanned file. Severity is a configured detector weight, not proof of a vulnerability or authorship.
Lines / Files
Scan coverage denominators used by the legacy normalized score.

Pattern-Signal History

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.

Severity Breakdown

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.

CRITICAL 0HIGH 1MEDIUM 10LOW 164

Directory Score Breakdown

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.

Pattern Findings

The scanner identified 175 distinct pattern matches across 10 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.

Hyper-Verbose Identifiers78 hits · 84 pts
SeverityFileLineSnippetContext
LOWtsunami/frontend/src/util/clientid.ts11export function getOrCreateClientId(): string {CODE
LOWtsunami/frontend/src/util/keyutil.ts247function adaptFromReactOrNativeKeyEvent(event: React.KeyboardEvent | KeyboardEvent): VDomKeyboardEvent {CODE
LOWtsunami/frontend/src/util/keyutil.ts270function adaptFromElectronKeyEvent(event: any): VDomKeyboardEvent {CODE
LOWfrontend/app/app.tsx61function isContentEditableBeingEdited(): boolean {CODE
LOWfrontend/app/suggestion/suggestion.tsx131function BlockHeaderSuggestionControl(props: BlockHeaderSuggestionControlProps) {CODE
LOWfrontend/app/suggestion/suggestion.tsx152function SuggestionControlNoResults({ children }: { children?: React.ReactNode }) {CODE
LOWfrontend/app/workspace/widgetfilter.ts4function shouldIncludeWidgetForWorkspace(widget: WidgetConfigType, workspaceId?: string): boolean {CODE
LOWfrontend/app/modals/conntypeahead.tsx55function createRemoteSuggestionItems(CODE
LOWfrontend/app/modals/conntypeahead.tsx97function createFilteredLocalSuggestionItem(CODE
LOWfrontend/app/modals/conntypeahead.tsx259function getNewConnectionSuggestionItem(CODE
LOWfrontend/app/view/term/osc-handlers.ts98function handleShellIntegrationCommandStart(CODE
LOWfrontend/app/view/term/shellblocking.ts38function looksInteractiveShellArgs(args: string[]): boolean {CODE
LOWfrontend/app/view/term/shellblocking.ts48function isNonInteractiveShellExec(args: string[]): boolean {CODE
LOWfrontend/app/view/term/termutil.ts176function findFirstDataTransferItem(CODE
LOWfrontend/app/view/sysinfo/sysinfo.tsx93function convertWaveEventToDataItem(event: Extract<WaveEvent, { event: "sysinfo" }>): DataItem {CODE
LOWfrontend/app/view/preview/preview-directory-utils.tsx155export function makeDirectoryDefaultMenuItems(model: PreviewModel): ContextMenuItem[] {CODE
LOWfrontend/app/view/vdom/vdom-utils.tsx28export function validateAndWrapCss(model: VDomModel, cssText: string, wrapperClassName: string) {CODE
LOWfrontend/app/view/vdom/vdom-utils.tsx114export function validateAndWrapReactStyle(model: VDomModel, style: Record<string, any>): Record<string, any> {CODE
LOWfrontend/app/view/vdom/vdom-utils.tsx114export function validateAndWrapReactStyle(model: VDomModel, style: Record<string, any>): Record<string, any> {CODE
LOWfrontend/app/aipanel/aimode.tsx65function computeCompatibleSections(CODE
LOWfrontend/app/aipanel/aitooluse.tsx80function getEffectiveApprovalStatus(baseApproval: string, isStreaming: boolean): string {CODE
LOWfrontend/app/store/badge.ts53function clearBadgesForBlockOnFocus(blockId: string, env?: BadgeEnv) {CODE
LOWfrontend/app/store/keymodel.ts68function getFocusedBlockInStaticTab(): string {CODE
LOWfrontend/app/store/keymodel.ts74function getSimpleControlShiftAtom() {CODE
LOWfrontend/app/store/keymodel.ts470function registerControlShiftStateUpdateHandler() {CODE
LOWfrontend/app/store/keymodel.ts480function registerElectronReinjectKeyHandler() {CODE
LOWfrontend/app/store/keymodel.ts773function registerBuilderGlobalKeys() {CODE
LOWfrontend/app/store/global.ts362async function createBlockSplitHorizontally(CODE
LOWfrontend/app/store/global.ts385async function createBlockSplitVertically(CODE
LOWfrontend/app/store/global.ts527function getLocalHostDisplayNameAtom(): Atom<string> {CODE
LOW⚡frontend/app/store/global.ts550function registerBlockComponentModel(blockId: string, bcm: BlockComponentModel) {CODE
LOW⚡frontend/app/store/global.ts554function unregisterBlockComponentModel(blockId: string) {CODE
LOW⚡frontend/app/store/global.ts562function getAllBlockComponentModels(): BlockComponentModel[] {CODE
LOWfrontend/util/keyutil.ts231function adaptFromReactOrNativeKeyEvent(event: React.KeyboardEvent | KeyboardEvent): WaveKeyboardEvent {CODE
LOWfrontend/util/keyutil.ts252function adaptFromElectronKeyEvent(event: any): WaveKeyboardEvent {CODE
LOWfrontend/layout/lib/utils.ts91export function navigateDirectionToOffset(direction: NavigateDirection): Point {CODE
LOWfrontend/layout/lib/layoutModelHooks.ts45export function getLayoutModelForStaticTab() {CODE
LOWfrontend/layout/lib/layoutModelHooks.ts76export function useDebouncedNodeInnerRect(nodeModel: NodeModel): CSSProperties {CODE
LOWfrontend/layout/lib/types.ts14export function navigateDirectionToString(dir: NavigateDirection): string {CODE
LOWfrontend/layout/lib/layoutAtom.ts7export function getLayoutStateAtomFromTab(tabAtom: Atom<Tab>, get: Getter): Atom<LayoutState> {CODE
LOWfrontend/layout/lib/layoutNode.ts241export function findInsertLocationFromIndexArr(CODE
LOWfrontend/layout/lib/layoutNode.ts263function findNextInsertLocationHelper(CODE
LOWfrontend/preview/preview-contextmenu.tsx82function getPreviewContextMenuItemId(item: ContextMenuItem): string {CODE
LOWfrontend/preview/mock/mockfilesystem.ts172function createMockFilesystemEntries(): MockFsEntryInput[] {CODE
LOWfrontend/preview/mock/preview-electron-api.ts64function installPreviewElectronApi() {CODE
LOWfrontend/preview/previews/processviewer.preview.tsx40function makeMockProcessListResponse(data: CommandRemoteProcessListData): ProcessListResponse {CODE
LOWfrontend/preview/previews/aifilediff.preview-util.ts29export function makeMockAiFileDiffResponse(CODE
LOWfrontend/builder/builder-buildpanel.tsx13function handleBuildPanelContextMenu(e: React.MouseEvent, selectedText: string): void {CODE
LOWemain/emain-platform.ts156function getElectronAppUnpackedBasePath(): string {CODE
LOWemain/emain-platform.ts160function getElectronAppResourcesPath(): string {CODE
LOWemain/emain-platform.ts230function callWithOriginalXdgCurrentDesktop(callback: () => void) {CODE
LOWemain/emain-platform.ts252async function callWithOriginalXdgCurrentDesktopAsync(callback: () => Promise<void>) {CODE
LOWemain/emain-menu.ts56 function getWorkspaceSwitchAccelerator(i: number): string {CODE
LOWemain/emain-menu.ts401function initMenuEventSubscriptions() {CODE
LOWemain/emain-menu.ts408function getWebContentsByWorkspaceOrBuilderId(workspaceOrBuilderId: string): electron.WebContents {CODE
LOWemain/emain-tabview.ts24function handleWindowsMenuAccelerators(CODE
LOWemain/emain-tabview.ts111export function getWaveTabViewByWebContentsId(webContentsId: number): WaveTabView {CODE
LOWemain/emain-tabview.ts304export async function getOrCreateWebViewForTab(waveWindowId: string, tabId: string): Promise<[WaveTabView, boolean]> {CODE
LOWemain/authkey.ts15export function configureAuthKeyRequestInjection(session: Electron.Session) {CODE
LOWemain/emain-util.ts21function broadcastZoomFactorChanged(newZoomFactor: number): void {CODE
18 more matches not shown…
Structural Annotation Overuse47 hits · 78 pts
SeverityFileLineSnippetContext
LOW⚡tsunami/frontend/src/model/model-utils.ts27 // Step 1: Create text map from transfertextCOMMENT
LOW⚡tsunami/frontend/src/model/model-utils.ts35 // Step 2: Map of waveid to VDomElem, skipping any without a waveidCOMMENT
LOWtsunami/frontend/src/model/model-utils.ts50 // Step 3: Build VDomElem trees by linking childrenCOMMENT
LOWtsunami/frontend/src/model/model-utils.ts76 // Step 4: Update renderupdates with rebuilt VDomElem treesCOMMENT
LOWfrontend/app/view/vdom/vdom-utils.tsx143 // Step 1: Map of waveid to VDomElem, skipping any without a waveidCOMMENT
LOW⚡frontend/app/view/vdom/vdom-utils.tsx158 // Step 2: Build VDomElem trees by linking childrenCOMMENT
LOW⚡frontend/app/view/vdom/vdom-utils.tsx167 // Step 3: Update renderupdates with rebuilt VDomElem treesCOMMENT
LOW.kilocode/skills/wps-events/SKILL.md34### Step 1: Define the Event ConstantCOMMENT
LOW.kilocode/skills/wps-events/SKILL.md54### Step 2: Add to AllEventsCOMMENT
LOW.kilocode/skills/wps-events/SKILL.md65### Step 3: Register in WaveEventDataTypes (REQUIRED)COMMENT
LOW.kilocode/skills/wps-events/SKILL.md82### Step 4: Define Event Data Structure (Optional)COMMENT
LOW.kilocode/skills/wps-events/SKILL.md93### Step 5: Expose Type to Frontend (If Needed)COMMENT
LOW.kilocode/skills/add-rpc/SKILL.md35### Step 1: Define the Command in the InterfaceCOMMENT
LOW.kilocode/skills/add-rpc/SKILL.md56### Step 2: Define Request and Response TypesCOMMENT
LOW.kilocode/skills/add-rpc/SKILL.md80### Step 3: Generate BindingsCOMMENT
LOW.kilocode/skills/add-rpc/SKILL.md95### Step 4: Implement the CommandCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md24### Step 1: Create Command FileCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md90### Step 2: Command StructureCOMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md140### Step 3: Implement Command LogicCOMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md146 // Step 1: Always track activity (for telemetry)COMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md151 // Step 2: Validate arguments and flagsCOMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md157 // Step 3: Parse/prepare dataCOMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md160 // Step 4: Make RPC call if neededCOMMENT
LOW⚡.kilocode/skills/add-wshcmd/SKILL.md168 // Step 5: Output resultsCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md212### Step 4: Define FlagsCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md252### Step 5: Working with Block ArgumentsCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md305### Step 6: Making RPC CallsCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md341### Step 7: Add DocumentationCOMMENT
LOW.kilocode/skills/add-wshcmd/SKILL.md391### Step 8: Test Your CommandCOMMENT
LOW.kilocode/skills/add-config/SKILL.md25### Step 1: Add to Go Struct DefinitionCOMMENT
LOW.kilocode/skills/add-config/SKILL.md95### Step 2: Set Default Value (Optional)COMMENT
LOW.kilocode/skills/add-config/SKILL.md119### Step 3: Update DocumentationCOMMENT
LOW.kilocode/skills/add-config/SKILL.md140### Step 4: Regenerate Schema and TypeScript TypesCOMMENT
LOW.kilocode/skills/add-config/SKILL.md157### Step 5: Use in Frontend CodeCOMMENT
LOW.kilocode/skills/add-config/SKILL.md197### Step 6: Use in Backend CodeCOMMENT
LOWaiprompts/config-system.md96### Step 1: Add to Go Struct DefinitionCOMMENT
LOWaiprompts/config-system.md155### Step 2: Set Default Value (Optional)COMMENT
LOWaiprompts/config-system.md178### Step 3: Update DocumentationCOMMENT
LOWaiprompts/config-system.md194### Step 4: Regenerate Schema and TypeScript TypesCOMMENT
LOWaiprompts/config-system.md210### Step 5: Use in Frontend CodeCOMMENT
LOWaiprompts/config-system.md244### Step 6: Use in Backend CodeCOMMENT
LOWaiprompts/focus-layout.md79// Step 1: isFocused → blockClickedCOMMENT
LOWaiprompts/focus-layout.md84// Step 2: blockClicked → physical focusCOMMENT
LOWaiprompts/wps-events.md29### Step 1: Define the Event ConstantCOMMENT
LOWaiprompts/wps-events.md48### Step 2: Define Event Data Structure (Optional)COMMENT
LOWaiprompts/wps-events.md59### Step 3: Expose Type to Frontend (If Needed)COMMENT
LOWpkg/util/shellutil/shellintegration/bash_preexec.sh82# WARNING: This variable is no longer used and should not be relied upon.COMMENT
Over-Commented Block19 hits · 19 pts
SeverityFileLineSnippetContext
LOWfrontend/types/jsx.d.ts1// Copyright 2025, Command Line Inc.COMMENT
LOWfrontend/types/vite-env.d.ts1// Copyright 2025, Command Line Inc.COMMENT
LOWfrontend/preview/mock/mockwaveenv.ts21export const PreviewWorkspaceId = crypto.randomUUID();COMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOWpkg/util/daystr/daystr.go21 return dayStrCOMMENT
LOWpkg/util/shellutil/shellintegration/bash_preexec.sh1# License for bash-preexec.sh follows below from https://github.com/rcaloras/bash-preexec v0.6.0COMMENT
LOWpkg/util/shellutil/shellintegration/bash_preexec.sh21# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,COMMENT
LOWpkg/util/shellutil/shellintegration/bash_preexec.sh41# General Usage:COMMENT
LOWpkg/util/shellutil/shellintegration/bash_preexec.sh161# This function is installed as part of the PROMPT_COMMAND;COMMENT
LOWpkg/aiusechat/gemini/doc.go1// Copyright 2025, Command Line Inc.COMMENT
LOWpkg/aiusechat/gemini/doc.go21// - Image uploads (JPEG, PNG, etc.) - inline base64 encodingCOMMENT
LOWpkg/aiusechat/gemini/doc.go41//COMMENT
LOWpkg/aiusechat/gemini/doc.go61//COMMENT
LOWpkg/aiusechat/gemini/doc.go81//COMMENT
LOWpkg/aiusechat/google/doc.go1// Copyright 2025, Command Line Inc.COMMENT
LOWpkg/aiusechat/google/doc.go21//COMMENT
LOWpkg/aiusechat/anthropic/anthropic-backend.go381 BudgetTokens: thinkingBudget,COMMENT
LOWpkg/wcore/workspace.go381 ws.TabIds = tabIdsCOMMENT
LOWpkg/remote/sshclient.go261 return []ssh.Signer{dummySigner}, nilCOMMENT
Decorative Section Separators6 hits · 18 pts
SeverityFileLineSnippetContext
MEDIUMfrontend/app/view/term/term-tooltip.tsx9// ── low-level primitive ──────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/app/view/term/term-tooltip.tsx66// ── wired-up sub-component ───────────────────────────────────────────────────COMMENT
MEDIUMfrontend/layout/lib/layoutTree.ts452// ─── SPLIT HORIZONTAL ─────────────────────────────────────────────────────────────COMMENT
MEDIUMfrontend/layout/lib/layoutTree.ts495// ─── SPLIT VERTICAL ─────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/util/shellutil/shellintegration/bash_preexec.sh2# -----------------------------------------------------------------------------COMMENT
MEDIUMpkg/util/shellutil/shellintegration/bash_preexec.sh25# -----------------------------------------------------------------------------COMMENT
Verbosity Indicators7 hits · 14 pts
SeverityFileLineSnippetContext
LOW⚡tsunami/frontend/src/model/model-utils.ts27 // Step 1: Create text map from transfertextCOMMENT
LOW⚡tsunami/frontend/src/model/model-utils.ts35 // Step 2: Map of waveid to VDomElem, skipping any without a waveidCOMMENT
LOWtsunami/frontend/src/model/model-utils.ts50 // Step 3: Build VDomElem trees by linking childrenCOMMENT
LOWtsunami/frontend/src/model/model-utils.ts76 // Step 4: Update renderupdates with rebuilt VDomElem treesCOMMENT
LOWfrontend/app/view/vdom/vdom-utils.tsx143 // Step 1: Map of waveid to VDomElem, skipping any without a waveidCOMMENT
LOW⚡frontend/app/view/vdom/vdom-utils.tsx158 // Step 2: Build VDomElem trees by linking childrenCOMMENT
LOW⚡frontend/app/view/vdom/vdom-utils.tsx167 // Step 3: Update renderupdates with rebuilt VDomElem treesCOMMENT
Self-Referential Comments4 hits · 12 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/bump-version.yml68 # Create a new commit for the package version bump in package.jsonCOMMENT
MEDIUMpkg/util/shellutil/shellintegration/bash_preexec.sh161# This function is installed as part of the PROMPT_COMMAND;COMMENT
MEDIUMpkg/util/shellutil/shellintegration/bash_preexec.sh169# This function is installed as part of the PROMPT_COMMAND.COMMENT
MEDIUMpkg/util/shellutil/shellintegration/bash_preexec.sh229# This function is installed as the DEBUG trap. It is invoked before eachCOMMENT
Fake / Example Data9 hits · 9 pts
SeverityFileLineSnippetContext
LOWcmd/wsh/cmd/wshcmd-ssh_test.go26 want: "foo@bar.com",CODE
LOWcmd/wsh/cmd/wshcmd-ssh_test.go45 want: "foo@bar.com",CODE
LOWtsunami/demo/tsunamiconfig/app.go42 Placeholder string `json:"placeholder"`CODE
LOWtsunami/demo/tsunamiconfig/app.go165 "placeholder": "Enter URL (e.g., localhost:52848, http://localhost:52848/api/config, or just 52848)",CODE
LOWtsunami/demo/tsunamiconfig/app.go202 "placeholder": props.Placeholder,CODE
LOWtsunami/demo/todo/app.go56 "placeholder": "What needs to be done?",CODE
LOWfrontend/app/view/preview/preview-directory.tsx460 <div className="dir-table-body-cell">dummy-data</div>CODE
LOWfrontend/layout/lib/TileLayout.tsx131 <Placeholder key="placeholder" layoutModel={layoutModel} style={{ top: 10000, ...overlayTransform }} />CODE
LOWfrontend/layout/lib/TileLayout.tsx499 setPlaceholderOverlay(<div className="placeholder" style={placeholderTransform} />);CODE
Magic Placeholder Names1 hit · 8 pts
SeverityFileLineSnippetContext
HIGHpkg/aiusechat/google/doc.go26// APIKey: "YOUR_API_KEY",COMMENT
Redundant / Tautological Comments3 hits · 4 pts
SeverityFileLineSnippetContext
LOWpkg/util/shellutil/shellintegration/pwsh_wavepwsh.sh27 # Check if we're in tmux or screenCOMMENT
LOWpkg/util/shellutil/shellintegration/fish_wavefish.sh16 # Check if we're in tmux or screen (using fish-native checks)COMMENT
LOWpkg/util/shellutil/shellintegration/bash_bashrc.sh49# Check if bash-preexec was successfully importedCOMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtsunami/util/util.go20// Example usage:COMMENT