AI Slop Code Risk Monitor

bytedance/flowgram.ai

SlopCodeMonitor badge for bytedance/flowgram.ai Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

FlowGram is an extensible workflow development framework with built-in canvas, form, variable, and materials that helps developers build AI workflow platforms faster and simpler.

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for bytedance/flowgram.ai, a TypeScript project with 8,544 GitHub stars. SynthScan examined 330,473 lines of code across 3333 source files, recording 166 pattern matches distributed across 12 syntactic categories. The legacy adjusted pattern signal is 0.6 (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.

0.6
Adjusted Signal
0.6
Raw Pattern Score
100%
Time Factor
2026-10-23
Last Push
8.5K
Stars
TypeScript
Language
330.5K
Lines of Code
3.3K
Files
166
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 2.5/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.1/100 · LOW

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

Agent Over-Engineering Ratio 1.0/100 · LOW

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

PR Review Velocity Impact 2.8/100 · LOW

Which changes need focused human review? 166 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 4MEDIUM 2LOW 160

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 166 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.

Over-Commented Block79 hits · 79 pts
SeverityFileLineSnippetContext
LOWrush.json101 * The default value is false.COMMENT
LOWrush.json121 // * Designate categories with whatever granularity is appropriate for your review process,COMMENT
LOWrush.json261 *COMMENT
LOWrush.json301 /**COMMENT
LOWrush.json321 // /**COMMENT
LOWrush.json341 // * installing from NPM. If you are using PNPM workspaces, this is indicated byCOMMENT
LOWrush.json361 //COMMENT
LOWrush.json381 // */COMMENT
LOWcommon/config/rush/command-line.json21 //COMMENT
LOWcommon/config/rush/command-line.json41 // /**COMMENT
LOWcommon/config/rush/command-line.json61 // /**COMMENT
LOWcommon/config/rush/command-line.json81 // * certain operations, for example a "clean" task that deletes output files. In this caseCOMMENT
LOWcommon/config/rush/command-line.json101 // * Thus, warnings do not interfere with local development, but they will cause a CI job to fail, becauseCOMMENT
LOWcommon/config/rush/command-line.json121 // * (EXPERIMENTAL) Normally Rush terminates after the command finishes. If this option is set to "true" RushCOMMENT
LOWcommon/config/rush/command-line.json141 // */COMMENT
LOWcommon/config/rush/command-line.json161 // * is to publish the project to an NPM registry and use common/scripts/install-run.js to launch it.COMMENT
LOWcommon/config/rush/command-line.json361 "autoinstallerName": "license-header",COMMENT
LOWcommon/config/rush/command-line.json381 //COMMENT
LOWcommon/config/rush/command-line.json401 // /**COMMENT
LOWcommon/config/rush/command-line.json421 // /**COMMENT
LOWcommon/config/rush/command-line.json441 // * If a "defaultValue" is specified, then if the Rush command line is invoked withoutCOMMENT
LOWcommon/config/rush/command-line.json461 // * Whenever you introduce commands/parameters, taking a little time to write meaningfulCOMMENT
LOWcommon/config/rush/command-line.json481 // * (Required) Determines the type of custom parameter.COMMENT
LOWcommon/config/rush/command-line.json501 // * `rush my-global-command --my-integer-list 1 --my-integer-list 2 --my-integer-list 3`COMMENT
LOWcommon/config/rush/command-line.json521 // * `rush my-global-command --my-string-list A --my-string-list B --my-string-list C`COMMENT
LOWcommon/config/rush/command-line.json541 // * might be invoked asCOMMENT
LOWcommon/config/rush/command-line.json561 // "name": "vanilla",COMMENT
LOWcommon/config/rush/custom-tips.json21 // "tipId": "TIP_RUSH_INCONSISTENT_VERSIONS",COMMENT
LOWcommon/config/rush/rush-plugins.json1/**COMMENT
LOWcommon/config/rush/rush-plugins.json21 // * The name of a Rush autoinstaller that will be used for installation, whichCOMMENT
LOWcommon/config/rush/pnpm-config.json161 * (https://github.com/orgs/pnpm/discussions/6194) or an incompletely migrated private registry.COMMENT
LOWcommon/scripts/install-run.js1// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.COMMENT
LOWcommon/scripts/install-run.js481 // "3.0.1",COMMENT
LOWcommon/scripts/install-run-rushx.js1// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.COMMENT
LOWcommon/scripts/install-run-rush-pnpm.js1// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.COMMENT
LOWcommon/scripts/install-run-rush.js1// THIS FILE WAS GENERATED BY A TOOL. ANY MANUAL MODIFICATIONS WILL GET OVERWRITTEN WHENEVER RUSH IS UPGRADED.COMMENT
LOWpackages/node-engine/form/__tests__/field-model.test.ts221 formModel.setValueIn('a.1.input', 'xxx');COMMENT
LOWpackages/node-engine/form/__tests__/object.test.ts181 });COMMENT
LOWpackages/node-engine/form/src/core/utils.ts101 //COMMENT
LOWpackages/node-engine/form/src/utils/glob.ts181 // const parts = splitPattern(pattern);COMMENT
LOWpackages/node-engine/form/src/utils/glob.ts201 // * const obj = {COMMENT
LOWpackages/node-engine/form/src/utils/glob.ts241 //COMMENT
LOWpackages/node-engine/form/src/utils/glob.ts261 // * expect(Glob.findMatchPaths(obj, '*.y')).toEqual(['x.y']);COMMENT
LOW…rm/abilities/validation-ability/form-validate.types.ts1/**COMMENT
LOW…rm/abilities/validation-ability/form-validate.types.ts21//COMMENT
LOW…rm/abilities/validation-ability/form-validate.types.ts41// multipleOf?: number;COMMENT
LOW…rm/abilities/validation-ability/form-validate.types.ts61// | undefinedCOMMENT
LOW…ls/src/components/json-schema-editor/default-value.tsx41 const wrapperRef = useRef<HTMLDivElement>(null);COMMENT
LOW…ngine/fixed-layout-core/src/activities/simple-split.ts41 },COMMENT
LOW…/fixed-layout-core/src/activities/slot/utils/create.ts21// {COMMENT
LOW…as-engine/renderer/__tests__/components/Adder.test.tsx61COMMENT
LOW…ine/renderer/src/layers/flow-selector-bounds-layer.tsx101 // 需要调整 bounds 菜单的位置COMMENT
LOW…ine/renderer/src/layers/flow-selector-bounds-layer.tsx121 // return (COMMENT
LOW…engine/renderer/src/layers/flow-selector-box-layer.tsx141COMMENT
LOW…engine/renderer/src/layers/flow-selector-box-layer.tsx241 // autorun(): void {COMMENT
LOWpackages/canvas-engine/core/__tests__/entity.spec.ts81// handle(...args: any[]): void {COMMENT
LOWpackages/canvas-engine/core/__tests__/entity.spec.ts461 // [COMMENT
LOWpackages/canvas-engine/core/src/playground-config.ts1/**COMMENT
LOWpackages/canvas-engine/core/src/playground-config.ts61 // ables: [Dragable, Selectable, Resizable],COMMENT
LOW…e/core/src/core/pipeline/pipeline-entities-selector.ts61 // /**COMMENT
19 more matches not shown…
Hyper-Verbose Identifiers41 hits · 41 pts
SeverityFileLineSnippetContext
LOWcommon/scripts/install-run.js730function runWithErrorAndStatusCode(logger, fn) {CODE
LOWpackages/node-engine/form/src/core/utils.ts58 export function shouldTriggerFieldChangeEvent(CODE
LOWpackages/node-engine/form/src/core/utils.ts93 export function shouldTriggerFieldValidateWhenChange(CODE
LOWpackages/node-engine/form/src/utils/glob.ts229 export function findMatchPathsWithEmptyValue(obj: any, pattern: string): string[] {CODE
LOWpackages/node-engine/form/src/utils/glob.ts236 // export function findMatchPathsWithEmptyValue(obj: any, pattern: string) {COMMENT
LOW…de-engine/form-core/src/client/node-material-client.ts13export function registerNodePlaceholderRender(CODE
LOW…/form-core/src/client/create-node-container-modules.ts10export function createNodeContainerModules() {CODE
LOWpackages/node-engine/node/src/utils.ts37export function formFeedbacksToNodeCoreFormFeedbacks(CODE
LOW…m-antd-materials/src/utils/format-legacy-refs/index.ts119export function isLegacyFlowRefValueSchema(value: any): value is LegacyFlowRefValueSchema {CODE
LOW…/form-materials/src/shared/format-legacy-refs/index.ts119export function isLegacyFlowRefValueSchema(value: any): value is LegacyFlowRefValueSchema {CODE
LOW…terials/src/components/display-inputs-values/index.tsx52export function DisplayInputsValueAllInTag({CODE
LOW…/src/components/prompt-editor-with-variables/index.tsx13export function PromptEditorWithVariables(props: PromptEditorWithVariablesProps) {CODE
LOW…lugins/free-auto-layout-plugin/src/dagre-lib/layout.js337function reversePointsForReversedEdges(g) {CODE
LOW…s/free-auto-layout-plugin/src/dagre-lib/position/bk.js130function findOtherInnerSegmentNode(g, v) {CODE
LOW…s/free-auto-layout-plugin/src/dagre-lib/position/bk.js285function findSmallestWidthAlignment(g, xss) {CODE
LOW…-variable-plugin/src/form-v2/create-provider-effect.ts17export function createEffectFromVariableProvider(CODE
LOWpackages/plugins/history-node-plugin/src/utils/index.ts41export function shouldChangeFormValuesMerge(CODE
LOW…ages/canvas-engine/renderer/__mocks__/renderer.mock.ts9export function createPlaygroundContainer(): Container {CODE
LOW…ages/canvas-engine/renderer/__mocks__/renderer.mock.ts15export function createPlaygroundConfigEntity(): PlaygroundConfigEntity {CODE
LOW…ckages/canvas-engine/renderer/src/components/utils.tsx254export function getTransitionLabelHoverWidth(data: FlowNodeTransitionData) {CODE
LOW…ckages/canvas-engine/renderer/src/components/utils.tsx277export function getTransitionLabelHoverHeight(data: FlowNodeTransitionData) {CODE
LOWpackages/canvas-engine/core/src/playground-container.ts44export function createPluginContextDefault(container: interfaces.Container): PluginContext {CODE
LOWpackages/canvas-engine/core/src/playground-container.ts57export function createPlaygroundLayerDefault(CODE
LOWpackages/canvas-engine/core/src/playground-container.ts109export function createPlaygroundContainer(CODE
LOWpackages/canvas-engine/core/src/playground-config.ts49export function createDefaultPlaygroundConfig(): PlaygroundConfig {CODE
LOW…-engine/core/src/core/pipeline/pipline-react-utils.tsx39 function PlaygroundReactLayerPortal(): JSX.Element {CODE
LOW…ne/core/src/core/utils/use-gesture/core/utils/state.ts12export function clampStateInternalMovementToBounds(state: CommonGestureState) {CODE
LOW…e/core/src/core/utils/use-gesture/core/utils/events.ts69function getCurrentTargetTouchList(event: TouchEvent) {CODE
LOW…-engine/core/src/common/playground-decorator-helper.ts34function getRegistryInjectedProperties(target: any): string[] {CODE
LOW…nvas-engine/core/src/common/schema/transform-schema.ts597 export function isParentOrChildrenTransform(dragableEntities: Entity[], target: Entity): boolean {CODE
LOW…ayout-core/__tests__/workflow-line-render-data.test.ts24function createContainerWithoutLineContribution(): {CODE
LOW…layout-core/src/hooks/use-playground-readonly-state.ts14export function usePlaygroundReadonlyState(listenChange?: boolean): boolean {CODE
LOWpackages/common/utils/src/dom-utils.ts118 export function addStandardDisposableListener(CODE
LOWpackages/common/utils/src/math/shapes/Rectangle.ts580 export function createRectangleWithTwoPoints(point1: IPoint, point2: IPoint): Rectangle {CODE
LOW…t/free-layout-editor/src/hooks/use-playground-tools.ts169 function handleUpdateInteractiveType(interactiveType: InteractiveType) {CODE
LOW…t/free-layout-editor/src/hooks/use-playground-tools.ts183 function handleUpdateMouseScrollDelta(delta: number | ((zoom: number) => number)) {CODE
LOW…editor/src/components/fixed-layout-editor-provider.tsx28 function FixedLayoutEditorProvider(props: FixedLayoutProps, ref) {CODE
LOW…/fixed-layout-editor/src/hooks/use-playground-tools.ts155 function handleUpdateInteractiveType(interactiveType: PlaygroundInteractiveType) {CODE
LOW…yout-animation/src/components/update-schema/example.py153 def generate_clothing_suggestion(self, state: WorkflowState) -> WorkflowState:CODE
LOW…yout-animation/src/components/update-schema/example.py212 def _get_rule_based_suggestion(self, temperature: float, weather_condition: str) -> str:STRING
LOWapps/cli/src/materials/refresh-project-import.ts15export function executeRefreshProjectImport(context: SyncMaterialContext) {CODE
Structural Annotation Overuse17 hits · 29 pts
SeverityFileLineSnippetContext
LOW.claude/skills/material-component-dev/SKILL.md39### Step 1: 规划组件结构COMMENT
LOW.claude/skills/material-component-dev/SKILL.md46### Step 2: 创建目录结构COMMENT
LOW.claude/skills/material-component-dev/SKILL.md62### Step 3: 实现组件COMMENT
LOW.claude/skills/material-component-dev/SKILL.md154### Step 4: 在 form-materials 主入口导出COMMENT
LOW.claude/skills/material-component-dev/SKILL.md180### Step 5: 创建 Storybook StoryCOMMENT
LOW.claude/skills/material-component-dev/SKILL.md246### Step 6: 运行类型检查COMMENT
LOW.claude/skills/material-component-dev/SKILL.md255### Step 7: 启动开发环境测试COMMENT
LOW⚡.claude/skills/create-node/SKILL.md150### Step 1: 规划节点COMMENT
LOW⚡.claude/skills/create-node/SKILL.md159### Step 2: 选择开发模式COMMENT
LOW⚡.claude/skills/create-node/SKILL.md167### Step 3: 复制模板并修改COMMENT
LOW.claude/skills/create-node/SKILL.md193### Step 4: 添加节点类型常量COMMENT
LOW.claude/skills/create-node/SKILL.md204### Step 5: 注册节点COMMENT
LOW.claude/skills/create-node/SKILL.md219### Step 6: 准备节点图标COMMENT
LOW.claude/skills/create-node/SKILL.md227### Step 7: 测试验证COMMENT
LOW…/free-layout-core/src/service/workflow-drag-service.ts743 // Step 1: check same lineCOMMENT
LOW⚡…/free-layout-core/src/service/workflow-drag-service.ts770 // Step 3: delete lineCOMMENT
LOW⚡…/free-layout-core/src/service/workflow-drag-service.ts780 // Step 4: add lineCOMMENT
Empty Error Handlers4 hits · 20 pts
SeverityFileLineSnippetContext
HIGHapps/desktop-backend/validation/service.py58except (BrokenPipeError,ConnectionResetError):passCODE
HIGHapps/desktop-backend/validation/service_lifecycle.py53except (OSError,urllib.error.URLError):passCODE
HIGHapps/desktop-backend/validation/published_services.py34except (OSError,urllib.error.URLError):passCODE
HIGHapps/desktop-backend/validation/published_services.py66except (OSError,ValueError,urllib.error.URLError):passCODE
Fake / Example Data6 hits · 6 pts
SeverityFileLineSnippetContext
LOW…es/runtime/js-core/src/domain/validation/index.test.ts246 name: 'John Doe',CODE
LOW…es/runtime/js-core/src/domain/validation/index.test.ts257 name: 'John Doe',CODE
LOW…es/runtime/js-core/src/domain/validation/index.test.ts268 name: 'John Doe',CODE
LOWapps/desktop/src/components/session-panel.tsx355 placeholder={t('placeholder')}CODE
LOWapps/desktop/src/lib/mentions.test.ts108 mentionQuery({ content: "user@example.com", mentions: [] }, 16)CODE
LOW…ts/form-materials/form-plugins/infer-assign-plugin.tsx51 content: 'John Doe',CODE
Verbosity Indicators3 hits · 6 pts
SeverityFileLineSnippetContext
LOW…/free-layout-core/src/service/workflow-drag-service.ts743 // Step 1: check same lineCOMMENT
LOW⚡…/free-layout-core/src/service/workflow-drag-service.ts770 // Step 3: delete lineCOMMENT
LOW⚡…/free-layout-core/src/service/workflow-drag-service.ts780 // Step 4: add lineCOMMENT
Deep Nesting5 hits · 5 pts
SeverityFileLineSnippetContext
LOW.github/scripts/desktop-smoke.py13CODE
LOWapps/desktop-backend/validation/scenarios.py23CODE
LOWapps/desktop-backend/validation/service.py61CODE
LOWapps/desktop-backend/validation/example_projects.py75CODE
LOW…yout-animation/src/components/update-schema/example.py212CODE
Unused Imports4 hits · 4 pts
SeverityFileLineSnippetContext
LOWapps/desktop-backend/validation/service_lifecycle.py2CODE
LOWapps/desktop-backend/validation/published_services.py5CODE
LOWapps/desktop-backend/validation/published_services.py7CODE
LOW…yout-animation/src/components/update-schema/example.py12CODE
Excessive Try-Catch Wrapping3 hits · 2 pts
SeverityFileLineSnippetContext
LOW…yout-animation/src/components/update-schema/example.py202 except Exception as e:STRING
LOW…yout-animation/src/components/update-schema/example.py392 except Exception as e:CODE
LOW…yout-animation/src/components/update-schema/example.py414 except Exception as e:CODE
Self-Referential Comments2 hits · 2 pts
SeverityFileLineSnippetContext
MEDIUM…yout-animation/src/components/update-schema/example.py311 # Create the graphSTRING
MEDIUM…yout-animation/src/components/update-schema/example.py320 # Define the flowSTRING
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOW…yout-animation/src/components/update-schema/example.py384 # Example usageCOMMENT
Overly Generic Function Names1 hit · 1 pts
SeverityFileLineSnippetContext
LOWapps/desktop-backend/validation/service.py61 def handle_request(self):CODE