AI Slop Code Risk Monitor

emberjs/ember.js

SlopCodeMonitor badge for emberjs/ember.js Adjusted legacy signal; badge bands: 25 / 50 / 75 (different from dashboard bands).

Ember.js - A JavaScript framework for creating ambitious web applications

0.6 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for emberjs/ember.js, a TypeScript project with 22,565 GitHub stars. SynthScan examined 311,366 lines of code across 1785 source files, recording 160 pattern matches distributed across 7 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-31
Last Push
22.6K
Stars
TypeScript
Language
311.4K
Lines of Code
1.8K
Files
160
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.4/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.7/100 · LOW

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

Agent Over-Engineering Ratio 1.5/100 · LOW

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

PR Review Velocity Impact 2.9/100 · LOW

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

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

Hyper-Verbose Identifiers84 hits · 92 pts
SeverityFileLineSnippetContext
LOWblueprints/-utils.js6export function generateComponentSignature(componentName) {CODE
LOWblueprints/component-test/index.js14function invocationForStrictComponentAuthoringFormat(options) {CODE
LOW…prints/tests/helpers/generate-fake-package-manifest.js3module.exports = function generateFakePackageManifest(name, version) {CODE
LOW…ke-tests/node-template/tests/node/helpers/setup-app.js164function registerApplicationClasses(app, registry) {CODE
LOWpackages/router_js/tests/test_helpers.ts100function stubbedHandlerInfoFactory(name: string, props: Dict<unknown>) {CODE
LOWpackages/router_js/tests/router_test.ts4339 function setupAuthenticatedExample(assert: Assert) {CODE
LOWpackages/router_js/tests/query_params_test.ts78 function consumeAllFinalQueryParams(params: Dict<unknown>, finalParams: Dict<unknown>[]) {CODE
LOWpackages/router_js/lib/route-info.ts157function createRouteInfoWithAttributes(CODE
LOWpackages/router_js/lib/utils.ts67export function coerceQueryParamsToString(queryParams: Dict<unknown>) {CODE
LOW⚡packages/internal-test-helpers/lib/element-helpers.ts68export function assertClassicComponentElement(CODE
LOW⚡packages/internal-test-helpers/lib/element-helpers.ts72export function assertClassicComponentElement(shape: ClassicComponentShape): void;CODE
LOW⚡packages/internal-test-helpers/lib/element-helpers.ts73export function assertClassicComponentElement(CODE
LOWpackages/@ember/test/index.ts14export function registerTestImplementation(impl: typeof EmberTesting) {CODE
LOWpackages/@ember/-internals/metal/tests/alias_test.js185 function assertPropertyTagUnchanged(obj, keyName, callback) {CODE
LOWpackages/@ember/-internals/metal/lib/property_get.ts18 getPossibleMandatoryProxyValue = function getPossibleMandatoryProxyValue(obj, keyName): any {CODE
LOW⚡packages/@ember/-internals/metal/lib/cached.ts153function throwCachedExtraneousParens(): never {CODE
LOW⚡packages/@ember/-internals/metal/lib/cached.ts159function throwCachedGetterOnlyError(key: string): never {CODE
LOW⚡packages/@ember/-internals/metal/lib/cached.ts163function throwCachedInvalidArgsError(args: unknown[] = []): never {CODE
LOWpackages/@ember/-internals/metal/lib/decorator-util.ts99export function identifyModernDecoratorArgs(args: Parameters<Decorator>):CODE
LOWpackages/@ember/-internals/metal/lib/observer.ts84function getOrCreateActiveObserversFor(target: object, sync: boolean) {CODE
LOWpackages/@ember/-internals/metal/lib/observer.ts84function getOrCreateActiveObserversFor(target: object, sync: boolean) {CODE
LOWpackages/@ember/-internals/metal/lib/observer.ts142export function suspendedObserverDeactivation() {CODE
LOWpackages/@ember/-internals/metal/lib/observer.ts146export function resumeObserverDeactivation() {CODE
LOWpackages/@ember/-internals/utils/lib/super.ts44function createObserverListenerMetaFor(fn: Function) {CODE
LOW…mer/tests/integration/custom-component-manager-test.js53function createInstrumentedManager(owner) {CODE
LOW…ntegration/components/classic/event-dispatcher-test.js14function fireNativeWithDataTransfer(node, type, dataTransfer) {CODE
LOW…ckages/@ember/-internals/glimmer/lib/utils/bindings.ts83export function createClassNameBindingRef(CODE
LOW…ckages/@ember/-internals/glimmer/lib/utils/bindings.ts113export function createSimpleClassNameBindingRef(inner: Reference, path?: string) {CODE
LOW…ckages/@ember/-internals/glimmer/lib/utils/bindings.ts134function createColonClassNameBindingRef(CODE
LOW…ber/-internals/glimmer/lib/component-managers/curly.ts491export function processComponentInitializationAssertions(component: Component, props: any): void {CODE
LOW…ber/-internals/glimmer/lib/component-managers/curly.ts542export function initialRenderInstrumentDetails(component: any): any {CODE
LOW…ber/-internals/glimmer/lib/component-managers/curly.ts546function rerenderInstrumentDetails(component: any): any {CODE
LOWpackages/@ember/-internals/views/lib/system/utils.ts24export function constructStyleDeprecationMessage(affectedStyle: string): string {CODE
LOWpackages/@ember/-internals/views/lib/system/utils.ts203export function getViewBoundingClientRect(view: View): DOMRect {CODE
LOWpackages/@ember/object/mixin-internal.ts46function concatenatedMixinProperties(CODE
LOWpackages/@ember/object/mixin-internal.ts169function applyConcatenatedProperties(key: string, value: any, values: { [key: string]: any }) {CODE
LOWpackages/@ember/object/mixin-internal.ts369function updateObserversAndListeners(obj: object, key: string, fn: Function, add: boolean) {CODE
LOWpackages/@ember/object/core.ts1092 CoreObject._onLookup = function injectedPropertyAssertion(debugContainerKey: string) {CODE
LOW…s/@ember/object/lib/computed/reduce_computed_macros.ts1372function sortByNormalizedSortProperties(CODE
LOWpackages/@ember/object/lib/computed/computed_macros.ts44function generateComputedWithPredicate(name: string, predicate: (value: unknown) => unknown) {CODE
LOW…ompiler/lib/plugins/transform-wrap-mount-and-outlet.ts38export default function transformWrapMountAndOutlet(env: EmberASTPluginEnvironment): ASTPlugin {CODE
LOW…e-compiler/lib/plugins/assert-against-named-outlets.ts18export default function assertAgainstNamedOutlets(env: EmberASTPluginEnvironment): ASTPlugin {CODE
LOW…ompiler/lib/plugins/assert-reserved-named-arguments.ts7export default function assertReservedNamedArguments(env: EmberASTPluginEnvironment): ASTPlugin {CODE
LOW…lugins/transform-quoted-bindings-into-just-bindings.ts4export default function transformQuotedBindingsIntoJustBindings(/* env */): ASTPlugin {CODE
LOWpackages/@ember/routing/lib/generate_controller.ts20export function generateControllerFactory(CODE
LOWpackages/@ember/routing/lib/utils.ts201export function normalizeControllerQueryParams(queryParams: Readonly<ControllerQueryParam[]>) {CODE
LOWpackages/@ember/routing/lib/utils.ts211function accumulateQueryParamDescriptors(CODE
LOWpackages/@ember/routing/lib/routing-service.ts141function numberOfContextsAcceptedByHandler(handlerName: string, handlerInfos: any[]) {CODE
LOWpackages/@ember/debug/data-adapter.ts182function reportReleaseMethodsEmberArrayUse(name: string) {CODE
LOW…glimmer-workspace/integration-tests/test/owner-test.ts77function defineCheckOwnerComponent(ownerToCheck: object | undefined, assert: Assert) {CODE
LOW…-workspace/integration-tests/lib/modes/jit/register.ts17export function registerTemplateOnlyComponent(CODE
LOW…-workspace/integration-tests/lib/modes/jit/register.ts48export function registerCurlyInvokedComponent(CODE
LOW…mmer-workspace/integration-tests/lib/dom/assertions.ts160export function assertSerializedInElement(result: string, expected: string, message?: string) {CODE
LOW…mmer-workspace/integration-tests/lib/dom/assertions.ts226export function processAssertComponentArgs(CODE
LOW…@glimmer/opcode-compiler/lib/opcode-builder/context.ts5export function templateCompilationContext(CODE
LOW…code-compiler/lib/opcode-builder/helpers/resolution.ts27function makeResolutionTypeVerifier(typeToVerify: SexpOpcode) {CODE
LOW…code-compiler/lib/opcode-builder/helpers/resolution.ts347export function resolveOptionalComponentOrHelper(CODE
LOW…r/opcode-compiler/lib/opcode-builder/helpers/blocks.ts86export function InvokeStaticBlockWithStack(CODE
LOW…mmer/component/src/-private/ember-component-manager.ts24function scheduledDestroyComponent(component: GlimmerComponent): void {CODE
LOW⚡packages/@glimmer/manager/lib/internal/api.ts90export function getInternalModifierManager(definition: object): InternalModifierManager;CODE
24 more matches not shown…
Over-Commented Block39 hits · 39 pts
SeverityFileLineSnippetContext
LOW…s/compiler-internals/02-program-compilation-context.md1#COMMENT
LOWtests/node-vitest/lib/find-side-effects.js1// Builds ember-source straight from source and reports which modules stillCOMMENT
LOWpackages/ember-template-compiler/minimal.ts1// The main entrypoint of ember-template-compiler is the fairly-cruftyCOMMENT
LOWpackages/router_js/lib/router.ts781 // When the app boots, you are at a url, e.g. /foo. If some routeCOMMENT
LOWpackages/internal-test-helpers/lib/ember-dev/warning.ts61 };COMMENT
LOW…ges/internal-test-helpers/lib/ember-dev/deprecation.ts121 trueCOMMENT
LOWpackages/@ember/runloop/-private/backburner.ts1// This exists solely to provide a compatibility shim for `ember-test-helpers`COMMENT
LOWpackages/@ember/runloop/tests/later_test.js141 // later(this, fn, 5, 10);COMMENT
LOWpackages/@ember/runloop/tests/later_test.js161COMMENT
LOWpackages/@ember/modifier/on.ts1import { on as glimmerOn } from '@glimmer/runtime/lib/modifiers/on';COMMENT
LOW…/components/runtime-template-compiler-implicit-test.ts401 },COMMENT
LOW…immer/tests/integration/components/strict-mode-test.js321 templateOnly()COMMENT
LOW…/components/runtime-template-compiler-explicit-test.ts301 // we specifically enable them when calling `precompile`)COMMENT
LOWpackages/@ember/-internals/glimmer/lib/helper.ts321 *COMMENT
LOWpackages/@ember/-internals/glimmer/lib/helper.ts381// This overload allows users to provide a `Signature` type explicitly at theCOMMENT
LOWpackages/@ember/-internals/glimmer/lib/helper.ts401 //COMMENT
LOWpackages/@ember/-internals/glimmer/lib/helpers/mut.ts61 // invocation, etcCOMMENT
LOW…ges/@ember/-internals/glimmer/lib/helpers/unique-id.ts1import type { Reference } from '@glimmer/reference/lib/reference';COMMENT
LOWpackages/@ember/component/template-only.ts41COMMENT
LOWpackages/@ember/utils/lib/compare.ts21};COMMENT
LOWpackages/@ember/object/-internals.ts1export { getCachedValueFor as cacheFor } from '@ember/-internals/metal/lib/computed_cache';COMMENT
LOWpackages/@ember/canary-features/index.ts61// }COMMENT
LOWpackages/@ember/routing/router-service.ts421 @publicCOMMENT
LOWpackages/@ember/routing/route.ts401 // By default, changes to controller query param propertiesCOMMENT
LOWpackages/@ember/service/index.ts141// NOTE: this cannot be `Record<string, Service | undefined>`, convenient asCOMMENT
LOWpackages/ember/tests/routing/route_manager_test.js401);COMMENT
LOW…rkspace/integration-tests/test/collections/set-test.ts301 // behavior is fixedCOMMENT
LOW…pace/integration-tests/test/collections/object-test.ts81 }COMMENT
LOW…ode-compiler/lib/opcode-builder/helpers/conditional.ts141 // If the body invokes a block, its return will return toCOMMENT
LOW…ode-compiler/lib/opcode-builder/helpers/conditional.ts161COMMENT
LOWpackages/@glimmer/validator/lib/validators.ts181COMMENT
LOWpackages/@glimmer/validator/lib/collections/array.ts181 }COMMENT
LOWpackages/@glimmer/runtime/lib/vm/element-builder.ts481 setLocalDebugType('block:remote', this);COMMENT
LOWpackages/@glimmer/runtime/lib/dom/props.ts41 return value;COMMENT
LOWpackages/@glimmer/syntax/lib/v1/nodes-v1.ts321};COMMENT
LOW…@glimmer/syntax/lib/parser/handlebars-node-visitors.ts161 //COMMENT
LOWpackages/@glimmer/compiler/test/compiler-test.ts321COMMENT
LOWpackages/@glimmer/compiler/lib/utils.ts1import type { Dict, WellKnownAttrName, WellKnownTagName } from '@glimmer/interfaces';COMMENT
LOW…ithub/workflows/glimmer-syntax-prettier-smoke-test.yml61 # - name: Install prettier dependenciesCOMMENT
Fake / Example Data28 hits · 35 pts
SeverityFileLineSnippetContext
LOWtype-tests/@ember/template-tests.ts4let trusted = htmlSafe('lorem ipsum...');CODE
LOW⚡type-tests/@ember/object-test/proxy.ts101expectTypeOf(person.set('fullName', 'John Doe')).toBeString();CODE
LOW⚡type-tests/@ember/object-test/proxy.ts106expectTypeOf(person.setProperties({ fullName: 'John Doe' })).toEqualTypeOf<{CODE
LOW⚡type-tests/@ember/object-test/proxy.ts107 fullName: 'John Doe';CODE
LOW⚡type-tests/@ember/object-test/proxy.ts109expectTypeOf(person.setProperties({ fullName: 'John Doe' }).fullName).toBeString();CODE
LOW⚡type-tests/@ember/object-test/proxy.ts111person.setProperties({ fullName: 'John Doe', invalid: true });CODE
LOW…ber/-internals/glimmer/tests/integration/input-test.js111 this.runAttributeTest('placeholder', ['foo', 'bar']);CODE
LOW…immer/tests/integration/components/input-angle-test.js146 this.assertAttr('placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js158 this.assertAttr('placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js169 set(this.context, 'placeholder', 'Updated placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js180 this.assertAttr('placeholder', 'Updated placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js191 set(this.context, 'placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js202 this.assertAttr('placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js228 this.assertAttr('placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js241 this.assertAttr('placeholder', 'Original placeholder');CODE
LOW…immer/tests/integration/components/input-angle-test.js551 let attributes = ['role', 'disabled', 'placeholder', 'name', 'maxlength', 'size', 'tabindex'];CODE
LOW⚡…immer/tests/integration/components/input-angle-test.js588 set(this.context, 'placeholder', 'Updated placeholder');CODE
LOW⚡…immer/tests/integration/components/input-angle-test.js598 this.assertAttr('placeholder', 'Updated placeholder');CODE
LOW⚡…immer/tests/integration/components/input-angle-test.js608 set(this.context, 'placeholder', null);CODE
LOW⚡…immer/tests/integration/components/input-angle-test.js618 // this.assertAttr('placeholder', undefined); //NOTE: this fails with a value of "null" (TEST_SUITE=sauce)COMMENT
LOW…er/tests/integration/components/textarea-angle-test.js55 { attribute: 'placeholder', first: 'Stuff here', second: 'Other stuff' },CODE
LOW⚡…er-workspace/integration-tests/test/attributes-test.ts361 this.assert.strictEqual(this.readDOMAttr('placeholder'), '');CODE
LOW⚡…er-workspace/integration-tests/test/attributes-test.ts365 this.assert.strictEqual(this.readDOMAttr('placeholder'), 'Alex');CODE
LOW⚡…er-workspace/integration-tests/test/attributes-test.ts368 this.assert.strictEqual(this.readDOMAttr('placeholder'), '');CODE
LOW…ace/integration-tests/test/partial-rehydration-test.ts25 '<div id="placeholder"><RehydratingComponent @a={{@a}} @b={{@b}} @c={{@c}}/></div>'CODE
LOW…ace/integration-tests/test/partial-rehydration-test.ts40 '<div id="placeholder">',CODE
LOW…ace/integration-tests/test/partial-rehydration-test.ts64 castToSimple(document.getElementById('placeholder')!)CODE
LOW…ace/integration-tests/test/partial-rehydration-test.ts66 this.assertHTML(content([OPEN, OPEN, '<div id="placeholder">abc</div>', CLOSE, CLOSE]));CODE
Cross-Language Confusion (JS/TS)2 hits · 10 pts
SeverityFileLineSnippetContext
HIGHpackages/@glimmer/syntax/test/generation/print-test.ts186 print(ast, { entityEncoding: 'raw' }),CODE
HIGHpackages/@glimmer/syntax/lib/generation/printer.ts536 print(node: ASTv1.Node): string {CODE
Self-Referential Comments3 hits · 9 pts
SeverityFileLineSnippetContext
MEDIUMpackages/@ember/-internals/glimmer/lib/component.ts241 ## Defining a Classic ComponentCOMMENT
MEDIUMpackages/@glimmer/component/src/index.ts37 ## Defining a Template-only ComponentCOMMENT
MEDIUMpackages/@glimmer/component/src/-private/component.ts101 * ## Defining a ComponentCOMMENT
AI Slop Vocabulary3 hits · 7 pts
SeverityFileLineSnippetContext
MEDIUM…ber/-internals/glimmer/lib/component-managers/curly.ts340 // Essentially we're saving off all the state we'll need in the future.COMMENT
MEDIUM.github/workflows/publish-to-npm.yml27 use-node-modules-cache: false # Absolutely no cache should be used when publishing due to the potential of cacCODE
MEDIUM.github/workflows/non-ember-source-publish.yml38 use-node-modules-cache: false # Absolutely no cache should be used when publishing due to the potential of cacCODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOWpackages/@glimmer/syntax/lib/generation/printer.ts465 // TODO: implement a top level Params AST node (just like the Hash object)COMMENT