AI Slop Code Risk Monitor

berty/berty

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

Berty is a secure peer-to-peer messaging app that works with or without internet access, cellular data or trust in the network

1.1 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for berty/berty, a TypeScript project with 9,341 GitHub stars. SynthScan examined 420,195 lines of code across 2058 source files, recording 425 pattern matches distributed across 8 syntactic categories. The legacy adjusted pattern signal is 1.1 (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.1
Adjusted Signal
1.1
Raw Pattern Score
100%
Time Factor
2026-10-31
Last Push
9.3K
Stars
TypeScript
Language
420.2K
Lines of Code
2.1K
Files
425
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 1.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 4.5/100 · LOW

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

Agent Over-Engineering Ratio 0.1/100 · LOW

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

PR Review Velocity Impact 5.4/100 · LOW

Which changes need focused human review? 425 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 4HIGH 0MEDIUM 1LOW 420

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

Fake / Example Data341 hits · 350 pts
SeverityFileLineSnippetContext
LOWgo/internal/discordlog/discord_test.go12 err := ShareQRLink("go test -v", QRCodeRoom, "Lorem Ipsum", "https://berty.tech", "https://berty.tech")CODE
LOWgo/pkg/banner/doc.go4// /\ / /\ ______ Lorem ipsum dolor sit amet, consecteturCOMMENT
LOWgo/pkg/banner/doc.go4// /\ / /\ ______ Lorem ipsum dolor sit amet, consecteturCOMMENT
LOW⚡go/pkg/banner/banner_test.go23 fmt.Println(Say(`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore etCODE
LOW⚡go/pkg/banner/banner_test.go23 fmt.Println(Say(`Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore etCODE
LOW⚡go/pkg/banner/banner_test.go26 // /\ / /\ ______ Lorem ipsum dolor sit amet, consecteturCOMMENT
LOW⚡go/pkg/banner/banner_test.go26 // /\ / /\ ______ Lorem ipsum dolor sit amet, consecteturCOMMENT
LOWberty-bridge-expo/mobile/src/navigation/stacks.tsx599 title: t('settings.fake-data.title'),CODE
LOW⚡…expo/mobile/src/screens/settings/FakeData/FakeData.tsx31 name={t('settings.fake-data.contacts-button')}CODE
LOW⚡…expo/mobile/src/screens/settings/FakeData/FakeData.tsx39 name={t('settings.fake-data.multi-members-button')}CODE
LOW⚡…expo/mobile/src/screens/settings/FakeData/FakeData.tsx47 name={t('settings.fake-data.messages-button')}CODE
LOW⚡…expo/mobile/src/screens/settings/FakeData/FakeData.tsx55 name={t('settings.fake-data.delete-button')}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx28 placeholder={"placeholder"}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx44 placeholder={"placeholder"}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx60 placeholder={"placeholder"}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx76 placeholder={"placeholder"}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx91 placeholder={"placeholder"}CODE
LOW…ge-expo/mobile/src/components/inputs/Input.stories.tsx106 placeholder={"placeholder"}CODE
LOW…bridge-expo/mobile/src/i18n/locale/tr-TR/messages.json87 "placeholder": "Takma adınızı seçin",CODE
LOW…bridge-expo/mobile/src/i18n/locale/tr-TR/messages.json138 "placeholder": "Grup ismi",CODE
LOW…bridge-expo/mobile/src/i18n/locale/tr-TR/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/tr-TR/messages.json378 "placeholder": "Tema adı...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/fr-FR/messages.json87 "placeholder": "Choisissez votre pseudo",CODE
LOW…bridge-expo/mobile/src/i18n/locale/fr-FR/messages.json138 "placeholder": "Nom du groupe",CODE
LOW…bridge-expo/mobile/src/i18n/locale/fr-FR/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/fr-FR/messages.json378 "placeholder": "Nom du thème...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/de-DE/messages.json87 "placeholder": "Wähle deinen Spitznamen",CODE
LOW…bridge-expo/mobile/src/i18n/locale/de-DE/messages.json138 "placeholder": "Gruppenname",CODE
LOW…bridge-expo/mobile/src/i18n/locale/de-DE/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/de-DE/messages.json378 "placeholder": "Theme-Name...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/pl-PL/messages.json87 "placeholder": "Wybierz swój pseudonim",CODE
LOW…bridge-expo/mobile/src/i18n/locale/pl-PL/messages.json138 "placeholder": "Nazwa grupy",CODE
LOW…bridge-expo/mobile/src/i18n/locale/pl-PL/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/pl-PL/messages.json378 "placeholder": "Nazwa motywu...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/vi-VN/messages.json87 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/vi-VN/messages.json138 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/vi-VN/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/vi-VN/messages.json378 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/da-DK/messages.json87 "placeholder": "Vælg dit kaldenavn",CODE
LOW…bridge-expo/mobile/src/i18n/locale/da-DK/messages.json138 "placeholder": "Gruppenavn",CODE
LOW…bridge-expo/mobile/src/i18n/locale/da-DK/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/da-DK/messages.json378 "placeholder": "Temanavn...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/no-NO/messages.json87 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/no-NO/messages.json138 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/no-NO/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/no-NO/messages.json378 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/el-GR/messages.json87 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/el-GR/messages.json138 "placeholder": "Όνομα ομάδας",CODE
LOW…bridge-expo/mobile/src/i18n/locale/el-GR/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/el-GR/messages.json378 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/es-ES/messages.json87 "placeholder": "Elige tu apodo",CODE
LOW…bridge-expo/mobile/src/i18n/locale/es-ES/messages.json138 "placeholder": "Nombre del grupo",CODE
LOW…bridge-expo/mobile/src/i18n/locale/es-ES/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/es-ES/messages.json378 "placeholder": "Nombre del tema...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/ru-RU/messages.json87 "placeholder": "Выбери себе никнейм",CODE
LOW…bridge-expo/mobile/src/i18n/locale/ru-RU/messages.json138 "placeholder": "Название группы",CODE
LOW…bridge-expo/mobile/src/i18n/locale/ru-RU/messages.json307 "fake-data": {CODE
LOW…bridge-expo/mobile/src/i18n/locale/ru-RU/messages.json378 "placeholder": "Название темы...",CODE
LOW…bridge-expo/mobile/src/i18n/locale/ca-ES/messages.json87 "placeholder": "",CODE
LOW…bridge-expo/mobile/src/i18n/locale/ca-ES/messages.json138 "placeholder": "",CODE
281 more matches not shown…
Over-Commented Block69 hits · 69 pts
SeverityFileLineSnippetContext
LOWgo/cmd/berty/token.go1package mainCOMMENT
LOWgo/cmd/welcomebot/main.go541 // })COMMENT
LOWgo/internal/tools/tools.go1//go:build toolsCOMMENT
LOWgo/internal/tools/tools_untool.go1//go:build !toolsCOMMENT
LOWgo/internal/messengerpayloads/handlers_test.go1package messengerpayloadsCOMMENT
LOWgo/internal/messengerpayloads/handlers_test.go21// for _, o := range opts {COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go41// s, serviceDispose = TestingService(ctx, t, &TestingServiceOpts{COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go61// t.Skip("TODO")COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go81// t.Skip("TODO")COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go101// t.Skip("TODO")COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go121// t.Skip("TODO")COMMENT
LOWgo/internal/messengerpayloads/handlers_test.go141// t.Skip("TODO")COMMENT
LOWgo/internal/initutil/manager.go241 m.SetNetManager(netmanager.NewNoopNetManager())COMMENT
LOWgo/internal/discordlog/doc.go1// discordlog is an unsafe package used during development to log info directly on the Berty's Discord server.COMMENT
LOWgo/pkg/bertylinks/links.go21// MarshalLink returns shareable web and internal URLs.COMMENT
LOWgo/pkg/bertylinks/links.go501 DefaultChecksumSize = 1 // 1-byte length by default (should have ~1/256 false-positive in case of invalid password)COMMENT
LOWgo/pkg/bertyreplication/testing.go161 require.NoError(t, err)COMMENT
LOWgo/pkg/messengertypes/messengertypes_grpc.pb.go701 }COMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go21 // Verify that runtime/protoimpl is sufficiently up-to-date.COMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go41 // The gRPC framework will generate this error code in the above twoCOMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go61 // not found.COMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go81 // a per-user quota, or perhaps the entire file system is out of space.COMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go101 // should be returned since the client should not retry unlessCOMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go121 //COMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go141 // commonly, you will see this error code when a method implementationCOMMENT
LOWgo/pkg/bertybridge/bertybridge.pb.go161 // This error code will be generated by the gRPC framework duringCOMMENT
LOWgo/pkg/bertyaccount/service_account.go1121 // torFlag = defaultConfig.TorCOMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go161 if err == io.EOF {COMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go181 // state:"in progress" doing:"stop-buf-server" progress:0.1923077 completed:2 total:13 delay:228COMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go201 // state:"in progress" doing:"close-ipfs-node" progress:0.8076923 completed:10 total:13 delay:561COMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go281 breakCOMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go301 // state:"in progress" doing:"stop-buf-server" progress:0.1923077 completed:2 total:13 delay:231COMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go441 steps++COMMENT
LOWgo/pkg/bertyaccount/blackbox_test.go461 // state:"in progress" doing:"stop-buf-server" progress:0.1923077 completed:2 total:13 delay:237COMMENT
LOWgo/pkg/banner/doc.go1// Package banner generates ASCII picture of the Berty logo with a message.COMMENT
LOWgo/pkg/banner/banner_test.go1package bannerCOMMENT
LOWgo/pkg/banner/banner_test.go21COMMENT
LOWberty-bridge-expo/plugin/src/appGroup.ts1// The App Group container is where the Go bridge stores its "shared" rootCOMMENT
LOWberty-bridge-expo/ios/BertyBridgeExpo-Bridging-Header.h1//COMMENT
LOWberty-bridge-expo/mobile/src/utils/messenger/clients.ts101 // const typeName = action?.payload?.type || beapi.messenger.StreamEvent.Notified.Type.UnknownCOMMENT
LOW…nents/chat/message/user-message/getUserMessageState.ts81 // TODO: tmp comment to don't have user frustration when a message is not receivedCOMMENT
LOW…ty-bridge-expo/mobile/src/hooks/faking/faking.hooks.ts41// export const useGenerateFakeMessages = () => {COMMENT
LOW…rty/bertybridgeexpo/gobridge/bledriver/PeerDevice.java881COMMENT
LOWjs/tsconfig.json21 // "outDir": "./", /* Redirect output structure to the directory. */COMMENT
LOWjs/ios/Berty/Berty-Bridging-Header.h1//COMMENT
LOW…ain/java/tech/berty/gobridge/bledriver/PeerDevice.java881COMMENT
LOW…nents/chat/message/user-message/getUserMessageState.ts81 // TODO: tmp comment to don't have user frustration when a message is not receivedCOMMENT
LOWjs/packages/hooks/faking/faking.hooks.ts41// export const useGenerateFakeMessages = () => {COMMENT
LOW.github/workflows/codeql-analysis.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql-analysis.yml61 # queries: ./path/to/local/query, your-org/your-repo/queries@mainCOMMENT
LOWtool/game-utils/game-dev-app/tsconfig.json21 // "removeComments": true, /* Do not emit comments to output. */COMMENT
LOW…ol/game-utils/game-dev-app/ios/miniGame/AppDelegate.mm1#import "AppDelegate.h"COMMENT
LOW…oid/app/src/main/jni/MainApplicationModuleProvider.cpp1#include "MainApplicationModuleProvider.h"COMMENT
LOWtool/tyber/go/parser/event.go81 AppStepCOMMENT
LOWtool/tyber/js/index.js21// registerRootComponent calls AppRegistry.registerComponent('main', () => App);COMMENT
LOWtool/metrics-compose/config/prometheus/prometheus.yml1# my global configCOMMENT
LOWtool/mobile-logs/get-mobile-logs.sh1#!/usr/bin/env bashCOMMENT
LOWtool/infra-testing-tool/go/todo.go1package mainCOMMENT
LOWtool/infra-testing-tool/go/todo.go21// certain ports for certain protocols, etcCOMMENT
LOWtool/infra-testing-tool/go/config/node.go161 panic(fmt.Sprintf("nodegroup %s has no connections", c.Name))COMMENT
9 more matches not shown…
Hallucination Indicators4 hits · 40 pts
SeverityFileLineSnippetContext
CRITICALgo/internal/initutil/ipfs.go228 m.Node.Protocol.MDNS.DriverLocker.Lock()CODE
CRITICALgo/internal/initutil/ipfs.go371 logger.Debug("local PeerID", logutil.PrivateString("PeerID", m.Node.Protocol.ipfsNode.Identity.String()))CODE
CRITICALgo/internal/initutil/ipfs.go578 cfg.Addresses.Swarm = append(cfg.Addresses.Swarm, m.Node.Protocol.Nearby.Driver.DefaultAddr())CODE
CRITICALgo/internal/initutil/ipfs.go734 m.Node.Protocol.MDNS.DriverLocker.Unlock()CODE
Hyper-Verbose Identifiers6 hits · 6 pts
SeverityFileLineSnippetContext
LOWberty-bridge-expo/plugin/src/withBlePermissions.ts54function addLocationPermissionToManifest(androidManifest: AndroidManifest) {CODE
LOWberty-bridge-expo/plugin/src/withBlePermissions.ts98function addScanPermissionToManifest(androidManifest: AndroidManifest) {CODE
LOW…bridge-expo/mobile/src/components/chat/MessageList.tsx36const CenteredActivityIndicator: React.FC<ActivityIndicatorProps> = React.memo(function CenteredActivityIndicator(props)CODE
LOW…ithub/workflows/utils/get-self-hosted-runner-status.js5async function getSelfHostedRunnersStatus() {CODE
LOW…ithub/workflows/utils/get-self-hosted-runner-status.js43async function getSelfHostedRunnersOnlineCount() {CODE
LOW…ithub/workflows/utils/get-self-hosted-runner-status.js68async function isSelfHostedRunnerAvailable() {CODE
Redundant / Tautological Comments2 hits · 3 pts
SeverityFileLineSnippetContext
LOW…actions/self-hosted-runners/xcode-cookie/gen_cookie.sh7# Check if env it set correctlyCOMMENT
LOW…actions/self-hosted-runners/xcode-cookie/gen_cookie.sh13# Check if fastlane cookie is still validCOMMENT
Slop Phrases1 hit · 2 pts
SeverityFileLineSnippetContext
MEDIUMtool/tyber/js/web/index.html107 Feel free to customize this however you'd like.CODE
TODO Padding1 hit · 2 pts
SeverityFileLineSnippetContext
LOW.github/workflows/go.yml310 # TODO: consider adding various GOARCH check per OS.COMMENT
Example Usage Blocks1 hit · 2 pts
SeverityFileLineSnippetContext
LOWtool/mobile-logs/get-mobile-logs.sh11# Usage:COMMENT