AI Slop Code Risk Monitor

TryGhost/Ghost

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

Independent technology for modern publishing, memberships, subscriptions and newsletters.

1.0 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for TryGhost/Ghost, a TypeScript project with 55,644 GitHub stars. SynthScan examined 1,275,122 lines of code across 7786 source files, recording 1075 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 1.0 (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.0
Adjusted Signal
1.0
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
55.6K
Stars
TypeScript
Language
1.3M
Lines of Code
7.8K
Files
1.1K
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 3.3/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 1.6/100 · LOW

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

Agent Over-Engineering Ratio 2.1/100 · LOW

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

PR Review Velocity Impact 4.6/100 · LOW

Which changes need focused human review? 1075 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 8HIGH 6MEDIUM 16LOW 1045

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 1075 distinct pattern matches across 12 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 Identifiers528 hits · 538 pts
SeverityFileLineSnippetContext
LOW…ls/configs/oxlint/rules/no-unsafe-reset-environment.ts36function getDestructuredFixtureNames(CODE
LOWtools/configs/oxlint/rules/max-api-complexity.ts14function getAPIVersionAndEndpointName(filename: string) {CODE
LOWtools/configs/oxlint/rules/max-api-lines.ts14function getAPIVersionAndEndpointName(filename: string) {CODE
LOWtools/scripts/ci/check-app-version-bump.ts38function readVersionFromPackageJson(packageJsonContent: string, sourceLabel: string): string {CODE
LOWtools/scripts/ci/check-internal-packages.ts114function usesStandardConfigFactory(config: string, moduleName: string, factoryName: string) {CODE
LOWtools/scripts/release/publish-packages.ts66async function assertCommitOnPublishBranch() {CODE
LOWtools/scripts/lib/pnpm.ts233export async function findPackagesNeedingChangeset(CODE
LOWtools/scripts/lib/package-template.ts13export function applyPackageTemplateTokens(CODE
LOWtools/gx/multi-sub-scenarios.ts214async function deleteExistingScenarioMembers() {CODE
LOW…ig-lexical/test/unit/utils/generateEditorState.test.ts129 function testGenerateNodesFromHTML(html, callback) {CODE
LOWkoenig/koenig-lexical/test/utils/e2e.ts463export async function expectUnchangedScrollPosition(page, wrapper) {CODE
LOWkoenig/koenig-lexical/test/e2e/floating-toolbar.test.ts89 async function expectToolbarCenteredOnSelection() {CODE
LOW…oenig-lexical/src/plugins/ReplacementStringsPlugin.tsx6function replacementStringTransform(node) {CODE
LOW…nig/koenig-lexical/src/plugins/DragDropPastePlugin.tsx49async function getListOfAcceptableMimeTypes(editor, uploadFileTypes) {CODE
LOWkoenig/koenig-lexical/src/utils/image-card-widths.ts6export function getAllowedImageCardWidths(configuredWidths?: unknown): readonly ImageCardWidth[] {CODE
LOWkoenig/koenig-lexical/src/utils/visibility.ts74export function serializeOptionsToVisibility(options, existingVisibility) {CODE
LOW…/koenig-lexical/src/utils/draggable/draggable-utils.ts42export function getParentScrollableElement(element) {CODE
LOW…/koenig-lexical/src/utils/draggable/draggable-utils.ts64export function getDocumentScrollingElement() {CODE
LOW…ical/src/components/ui/LinkActionToolbarWithSearch.tsx13export function LinkActionToolbarWithSearch({anchorElem, href, onClose, ...props}) {CODE
LOW…nig/koenig-lexical/src/components/ui/SettingsPanel.tsx205export function MultiSelectDropdownSetting({label, description, placeholder = '', items, availableItems, onChange, dataTCODE
LOW…ical/src/components/ui/KeyboardSelectionWithGroups.tsx19export function KeyboardSelectionWithGroups({groups, getItem, getGroup, onSelect, onEnterWithoutSelection, defaultSelectCODE
LOWkoenig/koenig-lexical/src/hooks/useSearchLinks.ts34function convertSearchResultsToListOptions(results, {noResultOptions, type} = {}) {CODE
LOW…g/koenig-lexical/src/hooks/useTypeaheadTriggerMatch.ts6export default function useBasicTypeaheadTriggerMatch(trigger,{minLength = 1, maxLength = 75}) {CODE
LOW…koenig-lexical/src/hooks/useSettingsPanelReposition.ts118function keepWithinSpacingOnResize(panelElem, {x, y, origin, lastSpacing}) {CODE
LOW…koenig-lexical/src/hooks/useSettingsPanelReposition.ts122export default function useSettingsPanelReposition({positionToRef} = {}, cardWidth) {CODE
LOWkoenig/koenig-lexical/src/hooks/useKoenigTextEntity.ts19function registerExtendedTextEntity(editor, getMatch, targetNode, createNode, nodeType) {CODE
LOW⚡koenig/kg-simplemde/debug/simplemde.js4899 function maybeUpdateRectForZooming(measure, rect) {CODE
LOW⚡koenig/kg-simplemde/debug/simplemde.js4909 function clearLineMeasurementCacheFor(lineView) {CODE
LOW⚡koenig/kg-simplemde/debug/simplemde.js4918 function clearLineMeasurementCache(cm) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js2134 function incrementRemainingMarkdownListNumbers(cm, pos) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js3895 function conflictingCollapsedRange(doc, lineNo$$1, from, to, marker) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js4152 function defaultSpecialCharPlaceholder(ch) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js4723 function updateExternalMeasurement(cm, line) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js6632 function maybeUpdateLineNumberWidth(cm) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js7264 function selectionEventCanBeMerged(doc, origin, prev, sel) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js7465 function setSelectionReplaceHistory(doc, sel, options) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js7793 function makeChangeSingleDocInEditor(cm, change, spans) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js8153 function adjustScrollWhenAboveVisible(cm, line, diff) {CODE
LOW…t-nodes/test/renderers/call-to-action-renderer.test.ts35 function testButtonSkipOnMissingData(target: string, layout: string, {missing = [] as string[]} = {}) {CODE
LOW…g/kg-default-nodes/src/nodes/gallery/gallery-parser.ts5function readGalleryImageAttributesFromElement(element: HTMLImageElement, imgNum: number) {CODE
LOW…es/src/nodes/horizontalrule/horizontalrule-renderer.ts7function horizontalRuleFrontendTemplate() {CODE
LOW…es/src/nodes/horizontalrule/horizontalrule-renderer.ts11function horizontalRuleEmailTemplate() {CODE
LOW…nodes/src/nodes/header/renderers/v2/header-renderer.ts121function generateMSOSplitHeaderImage(nodeData: HeaderV2NodeData) {CODE
LOW…nodes/src/nodes/header/renderers/v2/header-renderer.ts147function generateMSOContentWrapper(nodeData: HeaderV2NodeData) {CODE
LOW…nodes/src/nodes/header/renderers/v2/header-renderer.ts173function generateMSOContentClosing(nodeData: HeaderV2NodeData) {CODE
LOW…-nodes/src/utils/build-clean-basic-html-for-element.ts3export function buildCleanBasicHtmlForElement(domNode: Element) {CODE
LOW…enig/kg-default-nodes/src/utils/replacement-strings.ts31export function removeCodeWrappersFromHelpers(html: string, document: Document) {CODE
LOWkoenig/kg-default-nodes/src/utils/visibility.ts85export function migrateOldVisibilityFormat(visibility: Visibility) {CODE
LOW…-nodes/src/utils/read-image-attributes-from-element.ts1export function readImageAttributesFromElement(element: HTMLImageElement) {CODE
LOWkoenig/kg-default-transforms/src/default-transforms.ts21export function registerDefaultTransforms(editor: LexicalEditor) {CODE
LOW…ault-transforms/src/transforms/remove-at-link-nodes.ts9export function removeAtLinkNodesTransform(node: AtLinkNode) {CODE
LOW…ault-transforms/src/transforms/remove-at-link-nodes.ts29export function registerRemoveAtLinkNodesTransform(editor: LexicalEditor) {CODE
LOW…-default-transforms/src/transforms/merge-list-nodes.ts21export function registerMergeListNodesTransform(editor: LexicalEditor) {CODE
LOWkoenig/kg-default-cards/src/ambient.d.ts51 export function markdownAbsoluteToRelative(CODE
LOWkoenig/kg-default-cards/src/ambient.d.ts56 export function markdownRelativeToAbsolute(CODE
LOWkoenig/kg-converters/src/lexical-to-mobiledoc.ts139function getOrSetMarkupIndex(markup: string, mobiledoc: MobiledocDocument): number {CODE
LOWkoenig/kg-converters/src/lexical-to-mobiledoc.ts150function getOrSetAtomIndex(atom: MobiledocAtom, mobiledoc: MobiledocDocument): number {CODE
LOWkoenig/kg-converters/src/mobiledoc-to-lexical.ts210function convertMarkupSectionToLexical(CODE
LOWkoenig/kg-converters/src/mobiledoc-to-lexical.ts226function populateLexicalNodeWithMarkers(CODE
LOWkoenig/kg-converters/src/mobiledoc-to-lexical.ts368function convertMarkupTagsToLexicalFormatBitmask(tags: MobiledocMarkup[]): number {CODE
468 more matches not shown…
Fake / Example Data294 hits · 295 pts
SeverityFileLineSnippetContext
LOWtools/scripts/test/resolve-base-tag.test.ts22 'git config user.email "test@test.com"',CODE
LOWtools/scripts/test/resolve-base-tag.test.ts139 'git config user.email "test@test.com"',CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts30 description: 'lorem ipsum dolor amet lorem ipsum dolor amet',CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts53 <div>lorem ipsum dolor amet lorem ipsum dolor amet</div>CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts103 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add bookmark content...');CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts167 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add bookmark content...');CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts187 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add bookmark content...');CODE
LOW…al/test/e2e/cards/bookmark-card-without-search.test.ts209 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add bookmark content...');CODE
LOWkoenig/koenig-lexical/test/e2e/cards/embed-card.test.ts242 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add embedded content...');CODE
LOWkoenig/koenig-lexical/test/e2e/cards/embed-card.test.ts304 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add embedded content...');CODE
LOWkoenig/koenig-lexical/test/e2e/cards/embed-card.test.ts330 await expect(urlInput).toHaveAttribute('placeholder', 'Paste URL to add embedded content...');CODE
LOWkoenig/koenig-lexical/test/e2e/cards/embed-card.test.ts354 await expect(urlInput).toHaveAttribute('placeholder','Paste URL to add embedded content...');CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts36 description: 'lorem ipsum dolor amet lorem ipsum dolor amet',CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts59 <div>lorem ipsum dolor amet lorem ipsum dolor amet</div>CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts109 await expect(urlInput).toHaveAttribute('placeholder','Paste URL or search posts and pages...');CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts173 await expect(urlInput).toHaveAttribute('placeholder','Paste URL or search posts and pages...');CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts193 await expect(urlInput).toHaveAttribute('placeholder','Paste URL or search posts and pages...');CODE
LOW…xical/test/e2e/cards/bookmark-card-with-search.test.ts215 await expect(urlInput).toHaveAttribute('placeholder','Paste URL or search posts and pages...');CODE
LOW…enig/koenig-lexical/test/e2e/cards/button-card.test.ts96 await expect(buttonTextInput).toHaveAttribute('placeholder','Add button text');CODE
LOW…enig/koenig-lexical/test/e2e/cards/button-card.test.ts98 await expect(buttonUrlInput).toHaveAttribute('placeholder','https://yoursite.com/#/portal/signup/');CODE
LOWkoenig/kg-simplemde/debug/simplemde.js2016 CodeMirror.defineOption("placeholder", "", function(cm, val, old) {CODE
LOWkoenig/kg-simplemde/debug/simplemde.js2047 var placeHolder = cm.getOption("placeholder")CODE
LOWkoenig/kg-simplemde/debug/simplemde.js16366 placeholder: options.placeholder || el.getAttribute("placeholder") || "",CODE
LOWkoenig/kg-simplemde/src/js/simplemde.js1563 placeholder: options.placeholder || el.getAttribute('placeholder') || '',CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts46 const atLinkNode = $createAtLinkSearchNode('test', 'placeholder');CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts48 expect(atLinkNode.getPlaceholder()!).toBe('placeholder');CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts52 const atLinkSearch = $createAtLinkSearchNode('test', 'placeholder');CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts57 expect(atLinkSearchClone.getPlaceholder()!).toBe('placeholder');CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts61 const atLinkSearch = $createAtLinkSearchNode('test', 'placeholder');CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts66 placeholder: 'placeholder',CODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts75 const atLinkSearch = AtLinkSearchNode.importJSON({text: 'test', placeholder: 'placeholder'} as ReturnType<AtLinkCODE
LOW⚡…nig/kg-default-nodes/test/nodes/at-link-search.test.ts77 expect(atLinkSearch.getPlaceholder()!).toBe('placeholder');CODE
LOWkoenig/kg-lexical-html-renderer/test/render.test.ts89 input: `{"root":{"children":[{"children":[{"detail":0,"format":0,"mode":"normal","style":"","text":"Testing BefoCODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js400 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js421 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js434 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js447 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js463 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js482 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js501 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js512 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js529 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js539 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js557 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js586 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js609 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js629 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js648 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js707 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js728 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js753 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js782 to: 'user@example.com',CODE
LOWghost/test/unit/server/lib/mail/ghost-mailer.test.js802 to: 'user@example.com',CODE
LOW…st/test/unit/server/lib/mailgun/mailgun-client.test.js1216 sender: 'john@example.org',CODE
LOW…st/test/unit/server/lib/mailgun/mailgun-client.test.js1237 from: 'john@example.org',CODE
LOW…st/test/unit/server/lib/mailgun/mailgun-client.test.js1282 sender: 'john@example.org',CODE
LOW…st/test/unit/server/lib/mailgun/mailgun-client.test.js1310 from: 'john@example.org',CODE
LOW⚡…/server/data/importer/importers/revue-importer.test.js186 'id,description,sent_at,subject,preheader\n123456,"<p>Hello World!</p>",2022-12-01 01:01:30 UTC,Lorem Ipsum DoCODE
LOW⚡…/server/data/importer/importers/revue-importer.test.js186 'id,description,sent_at,subject,preheader\n123456,"<p>Hello World!</p>",2022-12-01 01:01:30 UTC,Lorem Ipsum DoCODE
LOW⚡…/server/data/importer/importers/revue-importer.test.js193 'Lorem Ipsum Dolor Sit Amet Consectetur Adipiscing Elit Mauris Convallis Et Metus Eu Blandit Lorem Ipsum DolCODE
234 more matches not shown…
Over-Commented Block162 hits · 162 pts
SeverityFileLineSnippetContext
LOWcompose.dev.yaml81 volumes:COMMENT
LOWpnpm-workspace.yaml301 # only ever call `load`. See patchedDependencies for the matching slim import.COMMENT
LOWpnpm-workspace.yaml461 # The 8.x Elasticsearch client eagerly requires apache-arrow for two ES|QLCOMMENT
LOWpnpm-workspace.yaml481 # - mensch parses input like `a{b}` (or a `{placeholder}` in a styleCOMMENT
LOWtools/scripts/ci/nx-set-shas.ts1// Resolves NX_BASE / NX_HEAD — the commit window `nx affected` and the CI pathCOMMENT
LOWtools/scripts/release/build-publish-matrix.ts1// Builds the matrix for the continuous publish job, filtered to the manifestCOMMENT
LOWtools/scripts/release/publish-packages.ts141}COMMENT
LOWtools/scripts/release/compare-published.ts1// Decides whether a continuous package has anything new to publish byCOMMENT
LOWtools/scripts/release/next-version.ts1// Computes the version the continuous publish job should publish next for aCOMMENT
LOWtools/scripts/lib/publish-manifest.ts1// The continuous publish lane: packages that CI publishes to npm whenever aCOMMENT
LOWdocker/tinybird-local-slim/cleanup.sh1#!/usr/bin/env bashCOMMENT
LOWdocker/stripe/with-stripe.sh1#!/bin/bashCOMMENT
LOWdocker/stripe/entrypoint.sh1#!/bin/shCOMMENT
LOWkoenig/kg-unsplash-selector/src/vite-env.d.ts1/// <reference types="vite/client" />COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts21 };COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts41 // id: '46',COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts61 // }COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts81 // id: '1237072960952750081',COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts101 // entities: {COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts121 // ],COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts141 // public_metrics: {COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts161 // display_url: 'ghost.org'COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts181 // {COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts201 // },COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts221 // protected: false,COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts241 // },COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts261 // entities: {COMMENT
LOWkoenig/koenig-lexical/demo/utils/fetchEmbed.ts281 // listed_count: 11COMMENT
LOWkoenig/koenig-lexical/test/e2e/selection.test.ts101 });COMMENT
LOWkoenig/koenig-lexical/test/e2e/selection.test.ts121 // await page.keyboard.press('a');COMMENT
LOW…nig/koenig-lexical/test/e2e/cards/gallery-card.test.ts381 await expect(captionEditor).toContainText('Caption');COMMENT
LOW…g/koenig-lexical/src/nodes/TransistorNodeComponent.tsx41 event.stopPropagation();COMMENT
LOW…g/koenig-lexical/src/plugins/KoenigBehaviourPlugin.tsx241 // If a non-historic, non-history-merge update arrives with theCOMMENT
LOW…nig-lexical/src/components/ui/cards/TransistorCard.tsx1import PropTypes from 'prop-types';COMMENT
LOW…nig-lexical/src/components/ui/cards/TransistorCard.tsx21 // const [backgroundColorPickerExpanded, setBackgroundColorPickerExpanded] = useState(false);COMMENT
LOW…nig-lexical/src/components/ui/cards/TransistorCard.tsx41 // value={accentColor || '#000000'}COMMENT
LOW…nig-lexical/src/components/ui/cards/TransistorCard.tsx61 // {title: 'White', hex: '#FFFFFF'},COMMENT
LOW…nig-lexical/src/components/ui/cards/TransistorCard.tsx121 // visibilityOptions: PropTypes.array,COMMENT
LOWkoenig/kg-simplemde/debug/simplemde.js2721 // + (ES): European Number SeparatorCOMMENT
LOWkoenig/kg-simplemde/debug/simplemde.js5001 // on a bidi boundary.COMMENT
LOWkoenig/kg-simplemde/debug/simplemde.js6801 // the scroll effect that the first few mouse wheel events have,COMMENT
LOWkoenig/kg-simplemde/debug/simplemde.js7921 return lineCOMMENT
LOWkoenig/kg-simplemde/debug/simplemde.js8181 // Created with markText and setBookmark methods. A TextMarker is aCOMMENT
LOWkoenig/kg-default-nodes/src/utils/visibility.ts61// {showOnWeb: true/false, showOnEmail: true/false, segment: 'status:free,status:-free'}COMMENT
LOWkoenig/kg-default-transforms/src/transforms/denest.ts21// - etc.COMMENT
LOWkoenig/kg-default-cards/test/cards/callout.test.ts41 // payload: {COMMENT
LOW.claude/hooks/nvm-path.sh1#!/usr/bin/env bashCOMMENT
LOW.devcontainer/compose.devcontainer.yaml1services:COMMENT
LOW.devcontainer/devcontainer.json1{COMMENT
LOW.devcontainer/devcontainer.json21 // environments where untrusted code runs in the container.COMMENT
LOWghost/vitest.config.db.ts1import path from 'node:path';COMMENT
LOWghost/vitest.config.db.ts21// OWN copy of process.env — only `SHARE_ENV` shares it. So a worker's writesCOMMENT
LOWghost/vitest.config.db.ts121 );COMMENT
LOWghost/vitest.config.db.ts221 // project intermittently wedged in CI: every file reported aCOMMENT
LOWghost/tsconfig.json1{COMMENT
LOWghost/tsconfig.json21 // "noLib": true, /* Disable including any library files, including the default lCOMMENT
LOWghost/tsconfig.json41 "resolveJsonModule": true /* Enable importing .json files. */,COMMENT
LOWghost/tsconfig.json61 // "sourceRoot": "", /* Specify the root path for debuggers to find the reference soCOMMENT
LOWghost/tsconfig.json81 "strict": true /* Enable all strict type-checking options. */,COMMENT
LOWghost/vitest.config.ts1import path from 'node:path';COMMENT
102 more matches not shown…
Hallucination Indicators8 hits · 80 pts
SeverityFileLineSnippetContext
CRITICALkoenig/kg-simplemde/debug/simplemde.js11224 return this.cm.display.wrapper.ownerDocument.getSelection()CODE
CRITICAL…/test/unit/server/services/tinybird-sync/index.test.ts165 dependencies.logging.info.mock.calls.map((call) => call[0].system),CODE
CRITICALghost/test/e2e-api/admin/members.test.js72 assertObjectMatches(models.Base.Model.prototype.serialize.call(subscription), asserts);CODE
CRITICALghost/test/e2e-api/members/webhooks.test.js88 const serialized = models.Base.Model.prototype.serialize.call(subscription);CODE
CRITICALghost/test/e2e-api/members/webhooks.test.js4193 assertObjectMatches(models.Base.Model.prototype.serialize.call(stored), {CODE
CRITICAL…src/global-search/use-global-search.component.test.tsx113 hook.result.current.search.results.map((group) => group.heading);CODE
CRITICAL…rc/editor/use-post-link-suggestions.component.test.tsx73 hook.result.current.search.results.find(({ heading }) => heading === 'Staff')?.items ?? [];CODE
CRITICAL…c/editor/publish/use-publish-inputs.component.test.tsx199 expect(hook.result.current.site.newsletters.map(({ slug }) => slug)).toEqual(['first', 'last']);CODE
Structural Annotation Overuse31 hits · 55 pts
SeverityFileLineSnippetContext
LOWghost/core/boot.js704 // Step 0 - Load config and logging - fundamental required componentsCOMMENT
LOWghost/core/boot.js738 // Step 1 - require more fundamental componentsCOMMENT
LOWghost/core/boot.js749 // Step 2 - Start server with minimal app in global maintenance modeCOMMENT
LOWghost/core/boot.js772 // Step 3 - Get the DB readyCOMMENT
LOWghost/core/boot.js780 // Step 4 - Load Ghost with all its servicesCOMMENT
LOW⚡ghost/core/boot.js810 // Step 5 - Mount the full Ghost app onto the minimal root app & disable maintenance modeCOMMENT
LOW⚡ghost/core/boot.js816 // Step 6 - We are technically done here - let everyone know!COMMENT
LOW⚡ghost/core/boot.js825 // Step 7 - Init our background services, we don't wait for this to finishCOMMENT
LOWghost/core/server/data/importer/import-manager.js438 // Step 1: Handle converting the file to usable dataCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js582 // Step 1: Load the content to importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js585 // Step 2: Let the importers pre-process the dataCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js588 // Step 3: Actually do the importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js592 // Step 4: Report on the importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js601 // Step 5: Cleanup the files this import ownsCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js605 // Step 6: Send emailCOMMENT
LOW…server/services/email-service/email-event-processor.js303 // Step 1: Resolve all providerId -> emailId mappingsCOMMENT
LOW…server/services/email-service/email-event-processor.js321 // Step 2: Build list of (email, emailId) pairs to lookupCOMMENT
LOW…server/services/email-service/email-event-processor.js338 // Step 3: Batch query all recipients with OR conditionsCOMMENT
LOW…server/services/email-service/email-event-processor.js355 // Step 4: Build cache map keyed by "email:emailId"COMMENT
LOW⚡…st/core/server/services/stats/content-stats-service.js62 // Step 1: Get raw data from TinybirdCOMMENT
LOW⚡…st/core/server/services/stats/content-stats-service.js69 // Step 2: Enrich the data with titlesCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md26## Step 1: Check if Component Already ExistsCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md34## Step 2: Fetch ShadCN DocumentationCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md51## Step 3: Install the ComponentCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md85## Step 4: Verify Component InstallationCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md94## Step 5: Create Storybook StoriesCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md186## Step 6: Lint and Fix StoriesCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md210## Step 7: Export ComponentCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md220## Step 8: Run TestsCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md236## Step 9: Visual Verification with PuppeteerCOMMENT
LOWapps/shade/.claude/commands/shadcn-add.md280## Step 10: Summary ReportCOMMENT
Cross-Language Confusion (JS/TS)6 hits · 30 pts
SeverityFileLineSnippetContext
HIGHtools/gx/benchmark-recipient-preparation.ts57 print({ phase: 'database', ...server[0] });CODE
HIGHtools/gx/benchmark-recipient-preparation.ts143 print({ phase: 'seed', members: offset + 1000, elapsed_ms: Date.now() - started });CODE
HIGHtools/gx/benchmark-recipient-preparation.ts200 print({CODE
HIGHtools/gx/benchmark-recipient-preparation.ts242 print({ error: error instanceof Error ? error.stack : String(error) });CODE
HIGHe2e/helpers/playwright/fixture.ts344 print('resolved by Ghost', serverHosts);CODE
HIGHe2e/helpers/playwright/fixture.ts345 print('requested by the browser', browserHosts);CODE
Verbosity Indicators16 hits · 30 pts
SeverityFileLineSnippetContext
LOW…ost/core/frontend/web/middleware/handle-image-sizes.js93 // CASE: When formatting, we need to check if the imageTransform package supports this specific formatCOMMENT
LOW…ost/core/frontend/web/middleware/handle-image-sizes.js100 // CASE: when transforming is supported, we need to check if it is desiredCOMMENT
LOWghost/core/frontend/helpers/comments.js15 * We need to check if comments enabled, because the theme might not be using the other available helpers to checkCOMMENT
LOWghost/core/server/data/importer/import-manager.js438 // Step 1: Handle converting the file to usable dataCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js582 // Step 1: Load the content to importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js585 // Step 2: Let the importers pre-process the dataCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js588 // Step 3: Actually do the importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js592 // Step 4: Report on the importCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js601 // Step 5: Cleanup the files this import ownsCOMMENT
LOW⚡ghost/core/server/data/importer/import-manager.js605 // Step 6: Send emailCOMMENT
LOW…server/services/email-service/email-event-processor.js303 // Step 1: Resolve all providerId -> emailId mappingsCOMMENT
LOW…server/services/email-service/email-event-processor.js321 // Step 2: Build list of (email, emailId) pairs to lookupCOMMENT
LOW…server/services/email-service/email-event-processor.js338 // Step 3: Batch query all recipients with OR conditionsCOMMENT
LOW…server/services/email-service/email-event-processor.js355 // Step 4: Build cache map keyed by "email:emailId"COMMENT
LOW⚡…st/core/server/services/stats/content-stats-service.js62 // Step 1: Get raw data from TinybirdCOMMENT
LOW⚡…st/core/server/services/stats/content-stats-service.js69 // Step 2: Enrich the data with titlesCOMMENT
Modern AI Meta-Vocabulary12 hits · 29 pts
SeverityFileLineSnippetContext
MEDIUM.agents/skills/shade-shadcn-install/SKILL.md8# Shade — ShadCN install guardrailsCOMMENT
MEDIUM…st/core/server/services/notifications/notifications.js44 // The check can be removed/moved to write operations once we have the guardrails on thatCOMMENT
MEDIUM.github/workflows/renovate.yml85 # - prConcurrentLimit/branchConcurrentLimit are useful guardrails, butCOMMENT
MEDIUM.github/agents/agentic-workflows.agent.md31- Configuration: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/github-agentic-workflows.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md54**Prompt file**: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/create-agentic-workflow.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md66**Prompt file**: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/update-agentic-workflow.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md78**Prompt file**: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/debug-agentic-workflow.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md90**Prompt file**: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/upgrade-agentic-workflows.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md102**Prompt file**: https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/create-shared-agentic-workflow.mdCODE
MEDIUM.github/agents/agentic-workflows.agent.md134# Initialize repository for agentic workflowsCOMMENT
MEDIUM.github/agents/agentic-workflows.agent.md162- Always reference the instructions file at https://github.com/github/gh-aw/blob/v0.49.3/.github/aw/github-agentic-workfCODE
MEDIUMapps/admin/eslint.config.js58 // Boundary guardrails. Product code must reach react-router and the AdminCOMMENT
Redundant / Tautological Comments13 hits · 22 pts
SeverityFileLineSnippetContext
LOWdocker/tb-cli/entrypoint.sh19# Check if workspace ID is validCOMMENT
LOWdocker/tb-cli/entrypoint.sh28# Check if workspace token is validCOMMENT
LOWdocker/tb-cli/entrypoint.sh61# Check if admin token is validCOMMENT
LOWdocker/tb-cli/entrypoint.sh73# Check if tracker token is validCOMMENT
LOWdocker/stripe/entrypoint.sh33# Check if STRIPE_SECRET_KEY is setCOMMENT
LOWdocker/stripe/entrypoint.sh52# Check if we got a timeoutCOMMENT
LOWdocker/stripe/entrypoint.sh59# Check if we got a valid secret (should start with "whsec_")COMMENT
LOW⚡…t/core/server/data/tinybird/scripts/configure-ghost.sh15# Check if workspace ID is validCOMMENT
LOW⚡…t/core/server/data/tinybird/scripts/configure-ghost.sh25# Check if workspace token is validCOMMENT
LOW⚡…t/core/server/data/tinybird/scripts/configure-ghost.sh35# Check if admin token is validCOMMENT
LOW…t/core/server/data/tinybird/scripts/configure-ghost.sh46# Check if tracker token is validCOMMENT
LOW.github/workflows/deploy-to-staging.yml65 # Check if Docker build job specifically succeeded (paginate — CI has 30+ jobs)COMMENT
LOW.github/hooks/commit-msg.bash32# Check if second line is blankCOMMENT
AI Slop Vocabulary3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMdocker/tinybird-local-slim/cleanup.sh23# server). Editing the shipped config in-place keeps this robust to upstreamCOMMENT
MEDIUMdocker/tb-cli/entrypoint.sh47 # Find admin token by looking for ADMIN scope (more robust than name matching)COMMENT
MEDIUM.github/workflows/e2e-runner-image.yml7# push, and it shares no layers with the Ghost build (no buildx-cache synergy).COMMENT
Self-Referential Comments1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMdocker/analytics/entrypoint.sh28# This file is created by the `tb-cli` service and mounted into the Analytics service containerCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOW…dmin/test-utils/acceptance/public/mockServiceWorker.js121async function handleRequest(event, requestId, requestInterceptedAt) {CODE