AI Slop Code RIsk Monitor

SteveTheKiller/KillerPDF

Free and open-source PDF editor for Windows with a built-in PDF 2.0 engine. View, annotate, OCR, merge, split, crop, rotate, compare, edit text, draw, sign, fill forms, print, flatten, and open password-protected PDFs without a subscription.

4.2 Low pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for SteveTheKiller/KillerPDF, a C# project with 4,078 GitHub stars. SynthScan examined 140,523 lines of code across 537 source files, recording 241 pattern matches distributed across 7 syntactic categories. The legacy adjusted pattern signal is 4.2 (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.

4.2
Adjusted Signal
4.2
Raw Pattern Score
100%
Time Factor
2026-10-07
Last Push
4.1K
Stars
C#
Language
140.5K
Lines of Code
537
Files
241
Pattern Hits
2026-10-12
Scan Date
0.01
HC Hit Rate

Risk Review · v3

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

Cognitive Ownership Risk 3.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 2.1/100 · LOW

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

Agent Over-Engineering Ratio 13.9/100 · LOW

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

PR Review Velocity Impact 18.3/100 · LOW

Which changes need focused human review? 241 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 6HIGH 0MEDIUM 137LOW 98

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 241 distinct pattern matches across 7 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.

Decorative Section Separators131 hits · 418 pts
SeverityFileLineSnippetContext
MEDIUMApp.xaml.cs46 // ── Machine-wide install (all users), matching Killendar / KillerShell ─────────────COMMENT
MEDIUMApp.xaml.cs1254 // ── Recent files (most-recent first, capped) ─────────────────────COMMENT
MEDIUMApp.xaml.cs1337 // ── Root grid: title bar row + content row ──────────────────COMMENT
MEDIUMApp.xaml.cs1342 // ── Title bar ───────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1405 // ── Content ─────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1491 // ── WinVerifyTrust P/Invoke ──────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1527 // ── Public helpers ───────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1614 // ── About dialog ────────────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1623 // ── Layout ──────────────────────────────────────────────────────COMMENT
MEDIUMApp.xaml.cs1813 // ── Downgrade guard ────────────────────────────────────────────────────COMMENT
MEDIUMMainWindow.xaml.cs41 // ── Split pane ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/PaneDrag.cs47 // ── Drag feedback ───────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs33 // ── Binding table ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs41 // ── Physical layout ────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs109 // ── View toggle (LIST / KEYBOARD) ──────────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs131 // ── Board construction (once, lazily) ──────────────────────────────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs271 // ── Caption marquee (hover a lit key whose caption is cut off) ─────────────────────────COMMENT
MEDIUMShell/KeyboardMapOverlay.cs323 // ── Layer painting ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUMShell/SettingsPanel.cs706 // ── Toolbar appearance (right-click picker on the bar) ────────────COMMENT
MEDIUMShell/SettingsPanel.cs1135 // ── Responsive toolbar overflow ───────────────────────────────────COMMENT
MEDIUMShell/KeyboardShortcuts.cs583 // ── Jump history (Alt+Left / Alt+Right / mouse back-forward buttons) ─────────────────────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerStubs.cs32 // ── Annotations ──────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs62 // ── Page canvases ────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs67 // ── Undo ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs71 // ── Text editing ─────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs79 // ── Text selection ───────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs83 // ── Crop ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs89 // ── Links ────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs98 // ── Save paths ───────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Features/Viewer/MainWindowViewerStubs.cs101 // ── Bound from MainWindow.xaml - see the class comment, these are load-bearing ───────COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs30 // ══ INWARD: chrome the viewer reads ═════════════════════════════════════════════════COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs41 // ══ INWARD: per-document state (group B - goes when the viewer owns its session) ═════COMMENT
MEDIUMFeatures/Viewer/MainWindowViewerBridge.cs55 // ══ OUTWARD: the viewer's members, under the names the window already calls ══════════COMMENT
MEDIUMFeatures/Viewer/IViewerHost.cs41 // ── Chrome the viewer updates (group A) ─────────────────────────────────────────────COMMENT
MEDIUMFeatures/Viewer/IViewerHost.cs123 // ── Notifications, so the window can update chrome for the FOCUSED viewer only ───────COMMENT
MEDIUM⚡Models/ViewerState.cs63 // ── Zoom / fit ──────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡Models/ViewerState.cs72 // ── In-flight render work ───────────────────────────────────────────────────────COMMENT
MEDIUM⚡Models/ViewerState.cs81 // ── Continuous-view bookkeeping ─────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs93 // ── Gesture routing ─────────────────────────────────────────────────────────────COMMENT
MEDIUMModels/ViewerState.cs101 // ── Visual hosts ────────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs64 // ── UI ──────────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs213 // ── Interaction ─────────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs239 // ── Eyedropper (desktop-wide) ───────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs292 // ── Saved swatches ──────────────────────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs335 // ── Small themed control builders ───────────────────────────────────────COMMENT
MEDIUMControls/ColorPickerDialog.cs439 // ── Color math / parsing ───────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs37 // ── Win32-compatible surface ─────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs85 // ── internals ────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs112 // ── Tree / pinned places / recents / hidden state ────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs305 // ── Filters ──────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs406 // ── Quick places (pinned + drives) ───────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs600 // ── Navigation ───────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs915 // ── Recent locations ─────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs952 // ── Hidden / dot files ───────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs1106 // ── View modes ───────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs1170 // ── Sorting ──────────────────────────────────────────────────────────────COMMENT
MEDIUMControls/FileDialog.xaml.cs1223 // ── Accept / cancel ──────────────────────────────────────────────────────COMMENT
MEDIUMControls/FolderTree.cs16 // ═══════════════════════════════════════════════════════════COMMENT
MEDIUMControls/FolderTree.cs18 // ═══════════════════════════════════════════════════════════COMMENT
MEDIUMControls/Viewer/PdfViewer.Bridge2.cs17 // ── Selection ────────────────────────────────────────────────────────────────────────COMMENT
71 more matches not shown…
Over-Commented Block97 hits · 96 pts
SeverityFileLineSnippetContext
LOWApp.xaml.cs1101COMMENT
LOWMainWindow.xaml.cs241 private (bool Initials, int ObjNum, int Page, double X, double Y, double W, double H)? _pendingSignField;COMMENT
LOWMainWindow.xaml.cs321 // so dropping onto an open document works too. The empty-state DropZone marks its own dropCOMMENT
LOWShell/SplitPane.cs41COMMENT
LOWShell/SplitPane.cs81 // The wheel focuses too. The zoom toolbar, the zoom box and Ctrl+wheel all act on theCOMMENT
LOWShell/SplitPane.cs261 if (_restoringSplit)COMMENT
LOWShell/SplitPane.cs341 private System.Windows.Threading.DispatcherTimer? _splitAnim;COMMENT
LOWShell/SplitPane.cs441 PaneACol.Width = new GridLength(aStart, GridUnitType.Pixel);COMMENT
LOWShell/AppScale.cs101 // so the footer carries it while you are zooming and gives the line back a beat afterCOMMENT
LOWShell/PaneDrag.cs1using System;COMMENT
LOWShell/PaneDrag.cs21 /// </summary>COMMENT
LOWShell/PaneDrag.cs101 {COMMENT
LOWShell/SidebarLayout.cs81 // on all four sides.COMMENT
LOWShell/SidebarLayout.cs121 // moves. Top and bottom stay 0: PaneShadow is Direction 270 and draws outside the element'sCOMMENT
LOWShell/SettingsPanel.cs261COMMENT
LOWShell/SettingsPanel.cs581 // so rebuild it in the new language. (The sidebar menu is rebuilt on each open.)COMMENT
LOWShell/ShortcutsOverlay.cs1using System.Linq;COMMENT
LOWShell/ShortcutsOverlay.cs61 .Replace("%zout%", Services.KeyLayout.ZoomOutChar());COMMENT
LOWShell/SystemMenu.cs1using System;COMMENT
LOWShell/FileOperations.cs841 KillerDialog.Show(this, Loc("Str_Err_MergeFailed") + "\n" + ex.Message, "KillerPDF", MessageBoxButton.OKCOMMENT
LOWShell/AnnotationBars.cs341 public object ConvertBack(object value, Type t, object p, System.Globalization.CultureInfo c) => value;COMMENT
LOWShell/FullScreen.cs121 // bounds FIRST, then drop to Normal: WPF restores to the just-set bounds, so the window landsCOMMENT
LOWFeatures/About/IAboutHost.cs1namespace KillerPDF.FeaturesCOMMENT
LOWFeatures/Cli/CliRunner.cs21// The scrubs, bitmap helpers, import helpers and PDFium interop all live in ServicesCOMMENT
LOWFeatures/Cli/CliRunner.cs41 // decrypt, the rotation-safe rasterizer, the OCR text-layer builder - soCOMMENT
LOWFeatures/Cli/BatchRunner.cs21 // Resaves through The KillerPDF.Engine's deterministic full-document writer. No window,COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs1using System.Collections.Generic;COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs21 ///COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs41 // ══ INWARD: per-document state (group B - goes when the viewer owns its session) ═════COMMENT
LOWFeatures/Viewer/MainWindowViewerBridge.cs101 private void ZoomOut_Click(object sender, RoutedEventArgs e) => ActiveViewer.ZoomOut_Click(sender, e);COMMENT
LOWFeatures/Viewer/IViewerHost.cs1using System.Windows;COMMENT
LOWFeatures/Viewer/IViewerHost.cs21 /// That audit split the coupling into three groups, and only the first belongs here:COMMENT
LOWFeatures/Viewer/IViewerHost.cs41 // ── Chrome the viewer updates (group A) ─────────────────────────────────────────────COMMENT
LOWFeatures/Viewer/MainWindowViewerElements.cs1using System.Windows.Controls;COMMENT
LOWModels/ViewTypes.cs1namespace KillerPDFCOMMENT
LOWModels/UndoTypes.cs1using System.Collections.Generic;COMMENT
LOWModels/LinkTypes.cs1namespace KillerPDFCOMMENT
LOWModels/ViewerState.cs1using System.Collections.Generic;COMMENT
LOWModels/ViewerState.cs21 /// </summary>COMMENT
LOWModels/ViewerState.cs41 /// which between them cover every write:COMMENT
LOWModels/ViewerState.cs101 // ── Visual hosts ────────────────────────────────────────────────────────────────COMMENT
LOWControls/FlyoutPlacement.cs1using System.Windows;COMMENT
LOWControls/FlyoutPlacement.cs21 /// rail sat near the window's right edge; "Top" opened them over the status bar. Hours wentCOMMENT
LOWControls/ThumbViewportFloorConverter.cs1using System;COMMENT
LOWControls/Anim.cs1using System;COMMENT
LOWControls/Anim.cs21//COMMENT
LOWControls/Anim.cs101 {COMMENT
LOWControls/PrintPreviewWindow.cs1361 /// every selected page has to be encoded into the XPS package there. Driven from the UICOMMENT
LOWControls/SidebarPageBinding.cs1using System.Collections;COMMENT
LOWControls/FileDialog.xaml.cs21 /// Themed stand-in for Microsoft.Win32.OpenFileDialog / SaveFileDialog. Same chrome, placesCOMMENT
LOWControls/FileDialog.xaml.cs221 App.SetSetting("FileDlgY", Top.ToString(ci));COMMENT
LOWControls/DragCursors.cs1using System;COMMENT
LOWControls/FolderTree.cs21 // current folder on open instead), no shell context menu suite.COMMENT
LOWControls/Viewer/PdfViewer.Links.cs21 // Moved from Shell/Links.cs; the namespace and class line are the only changes. Window membersCOMMENT
LOWControls/Viewer/PdfViewer.Links.cs41 internal Dictionary<int, List<LinkInfo>> ContinuousLinks => _continuousLinks;COMMENT
LOWControls/Viewer/PdfViewer.PageSelection.cs61 /// XAML-bound handler. Replaces the old detach/attach of a cached delegate, which neverCOMMENT
LOWControls/Viewer/PdfViewer.xaml.cs61 /// <summary>Accent ring marking this pane as the focused one in a split.COMMENT
LOWControls/Viewer/PdfViewer.Crop.cs21 // Moved from Shell/Crop.cs; the namespace and class line are the only changes. Window membersCOMMENT
LOWControls/Viewer/PdfViewer.TabStrip.cs1using System;COMMENT
LOWControls/Viewer/PdfViewer.TabStrip.cs21 // * UniformGrid divides the bounded host equally. The host grows only until the tabs reachCOMMENT
37 more matches not shown…
Hallucination Indicators6 hits · 60 pts
SeverityFileLineSnippetContext
CRITICALApp.xaml.cs474 var source = System.Windows.Media.Imaging.BitmapFrame.Create(bitmap);CODE
CRITICALShell/Signing.cs853 encoder.Frames.Add(System.Windows.Media.Imaging.BitmapFrame.Create(bmp));CODE
CRITICALShell/ContextMenu.cs64 var tileSource = System.Windows.Media.Imaging.BitmapFrame.Create(bmp);CODE
CRITICALControls/Viewer/PdfViewer.TabStrip.cs487 var slot = System.Windows.Controls.Primitives.LayoutInformation.GetLayoutSlot(fe);CODE
CRITICALControls/Viewer/PdfViewer.TabStrip.cs592 var slot = System.Windows.Controls.Primitives.LayoutInformation.GetLayoutSlot(dragged);CODE
CRITICALengine/KillerPdf.Engine/Authoring/PdfDocumentBuilder.cs2693 state.SoftMask.Backdrop.Value.Components.Select(Number))));CODE
Modern AI Meta-Vocabulary3 hits · 8 pts
SeverityFileLineSnippetContext
MEDIUM⚡Controls/Viewer/PdfViewer.Viewport.cs507 // geometry never changes; they show the white scaffold until re-rendered (render cacheCOMMENT
MEDIUMControls/Viewer/PdfViewer.Viewport.cs464 Background = Brushes.White, // empty-page scaffold while the bitmap streams in (not a dark box)CODE
MEDIUMControls/Viewer/PdfViewer.Viewport.cs707 img.Source = null; // slot keeps its height; white scaffold shows until re-renderedCODE
AI Slop Vocabulary2 hits · 5 pts
SeverityFileLineSnippetContext
MEDIUMShell/TempReload.cs109 // robust error recovery and will rewrite a correct xref), then retry the open.COMMENT
MEDIUMpdf-landing/technical.html153<a href="#robust" data-i18n="pt_12">Robustness</a>CODE
Self-Referential Comments1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMpdf-landing/engine/engine-docs-content.js1(function(){window.KPDF_ENGINE_DOCS={"api":"# API guide\n\nThe public API is organized by PDF responsibility. Start withCODE
Hyper-Verbose Identifiers1 hit · 1 pts
SeverityFileLineSnippetContext
LOWpdf-landing/kp.js404 function highlightStaticCodeBlocks() {CODE