AI Slop Code Risk Monitor

openfga/openfga

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

A high-performance and flexible authorization/permission engine built for developers and inspired by Google Zanzibar.

1.4 Low pattern signal View on GitHub

Open-Source Code Quality, Security and Technical Debt Review

This report summarizes scanner evidence for openfga/openfga, a Go project with 6,069 GitHub stars. SynthScan examined 201,081 lines of code across 517 source files, recording 136 pattern matches distributed across 4 syntactic categories. The legacy adjusted pattern signal is 1.4 (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.4
Adjusted Signal
1.4
Raw Pattern Score
100%
Time Factor
2026-10-30
Last Push
6.1K
Stars
Go
Language
201.1K
Lines of Code
517
Files
136
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.9/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 0.0/100 · LOW

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

Agent Over-Engineering Ratio 5.0/100 · LOW

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

PR Review Velocity Impact 6.6/100 · LOW

Which changes need focused human review? 136 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 1MEDIUM 67LOW 68

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 136 distinct pattern matches across 4 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a detector match to inspect in context. Expand any category row to inspect the individual file paths, line numbers, code snippets, and the lexical context (CODE, COMMENT, or STRING) in which each match was detected.

Reading the findings table: The Severity column indicates the configured finding weight (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — legacy comment-context matches receive a ×1.5 score weight. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier under the legacy scoring model.

Decorative Section Separators66 hits · 207 pts
SeverityFileLineSnippetContext
MEDIUMinternal/listobjects/pipeline/doc.go20// ┌─────────┐ ┌─────────┐ ┌─────────┐COMMENT
MEDIUMinternal/listobjects/pipeline/doc.go23// └─────────┘ └─────────┘ └─────────┘COMMENT
MEDIUMpkg/storage/keys_test.go27// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go29// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go214// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go216// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go495// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go497// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go553// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go555// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go571// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go573// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go685// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go687// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go737// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/keys_test.go739// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go23// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go25// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go395// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go397// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go604// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go606// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go879// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go881// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go961// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go963// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go1007// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go1009// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go1051// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/cached_reader_test.go1053// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go20// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go22// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go32// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go34// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go36// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM⚡pkg/storage/storagewrappers/iterator_cache.go38// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache.go67// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache.go69// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache.go357// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache.go359// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go25// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go27// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go78// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go80// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go344// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go346// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go972// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go974// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go1219// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go1221// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go1243// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUMpkg/storage/storagewrappers/iterator_cache_test.go1245// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go27// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go29// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go80// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go82// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go171// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go173// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go260// ─────────────────────────────────────────────────────────────────────────────COMMENT
MEDIUM…orage/storagewrappers/iterator_cache_benchmark_test.go262// ─────────────────────────────────────────────────────────────────────────────COMMENT
6 more matches not shown…
Over-Commented Block68 hits · 68 pts
SeverityFileLineSnippetContext
LOWinternal/graph/recursive_resolver.go21 "github.com/openfga/openfga/pkg/typesystem"COMMENT
LOWinternal/graph/recursive_resolver.go261 return finalResult, nilCOMMENT
LOWinternal/graph/interface.go21 // parent request.COMMENT
LOWinternal/graph/graph.go121//COMMENT
LOWinternal/utils/reduce.go1package utilsCOMMENT
LOWinternal/listobjects/pipeline/pipeline.go461COMMENT
LOWinternal/listobjects/pipeline/doc.go1// Package pipeline implements reverse expansion for authorization queries.COMMENT
LOWinternal/listobjects/pipeline/doc.go21// │ Worker │◄────│ Worker │◄────│ Worker │COMMENT
LOWinternal/listobjects/pipeline/doc.go41// - Coordinated shutdown ensures all in-flight messages are processedCOMMENT
LOWinternal/listobjects/pipeline/doc.go61// }COMMENT
LOWinternal/listobjects/pipeline/internal/track/doc.go1// Package track provides coordination primitives for detecting when aCOMMENT
LOWinternal/listobjects/pipeline/internal/worker/cycle.go81}COMMENT
LOWinternal/listobjects/pipeline/internal/worker/core.go41 // [SpecificTypeAndRelation] node.COMMENT
LOW…ine/internal/worker/difference_direct_subtract_test.go21 "github.com/openfga/openfga/pkg/storage/memory"COMMENT
LOWinternal/listobjects/pipeline/internal/worker/doc.go1// Package worker implements the concurrent processing nodes that formCOMMENT
LOWinternal/modelgraph/benchmarks_test.go21 // model is the FGA DSL for the authorization model.COMMENT
LOWinternal/telemetry/tracing.go61 samplingRatio float64COMMENT
LOWinternal/containers/doc.go1// Package containers provides generic, concurrency-safe data structures.COMMENT
LOWinternal/containers/mpmc/queue.go21// head or tail position.COMMENT
LOWinternal/containers/mpmc/doc.go1// Package mpmc provides a bounded, multiple-producer, multiple-consumerCOMMENT
LOWinternal/containers/mpsc/doc.go1// Package mpsc provides a lock-free MPSC (multiple-producer, single-consumer)COMMENT
LOWinternal/containers/mpsc/accumulator.go21 Next atomic.Pointer[node[T]]COMMENT
LOWinternal/check/check_test.go681 // Same invariant as ResolveUnionEdges: the goroutine must not write to cache whenCOMMENT
LOWinternal/check/strategies.go61COMMENT
LOWinternal/check/recursive_ttu_collision_test.go21// "full_admin from parent") sharing the same `visited` map. Both branches readCOMMENT
LOWinternal/check/weight2_test.go1041// 1. Right processes contextual value "group:9" → sets lastRightVal = "group:9"COMMENT
LOWinternal/validation/doc.go1// Package validation provides tuple and request validation against anCOMMENT
LOW.github/workflows/codeql.yml1# For most projects, this workflow file will not need changing; you simply needCOMMENT
LOW.github/workflows/codeql.yml81 # If you wish to specify custom queries, you can do so here or in a config file.COMMENT
LOW.github/workflows/scorecard.yml41 with:COMMENT
LOWassets/tests/consolidated_1_1_tests.yaml2841# type groupCOMMENT
LOWassets/tests/consolidated_1_1_tests.yaml2861# user: group:1#memberCOMMENT
LOWassets/tests/abac_tests.yaml1741# - request:COMMENT
LOWpkg/server/server.go401// This number should be set depending on the RPS expected for Check and ListObjects APIs, the number of OpenFGA replicaCOMMENT
LOWpkg/server/server.go841// WithListObjectsBufferCapacity is only effective when the ListObjects "pipeline" algorithmCOMMENT
LOWpkg/server/batch_check_test.go821 CorrelationId: correlationID,COMMENT
LOWpkg/server/list_objects_test.go201 require.NoError(t, err)COMMENT
LOWpkg/server/config/config.go381 // ListObjectsPipelineEnabled defines whether the ListObjects pipeline optimizationCOMMENT
LOWpkg/server/commands/check.go321// the execute path). ErrThrottledTimeout and ErrTransactionThrottled are included sinceCOMMENT
LOWpkg/server/commands/list_objects.go901// confirmListObjectsBreakingChange folds a single streamed object into theCOMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go41// check(o#r, r, o); v2 evaluates against the schema and returns FALSE.COMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go81// CheckReasonFromV2Error maps a v2Check error to a v2-breaking reason when theCOMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go101 return ""COMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go141COMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go241 if wildcardReachableUnderDifferenceBase(typesys, targetObjectType, relation, rewrite, subjectType) {COMMENT
LOWpkg/server/commands/v2breaking/v2breaking.go281// For the four per-user-shape reasons, this looks for the specific user thatCOMMENT
LOWpkg/server/commands/v2breaking/batch.go21// does NOT gate on the check's allowed result: the outcome reflects whicheverCOMMENT
LOWpkg/server/commands/reverseexpand/reverse_expand.go261 return &copyCOMMENT
LOW…rver/commands/reverseexpand/reverse_expand_weighted.go121// It will continue to dispatch and traverse the graph until it reaches a DirectEdge, whichCOMMENT
LOW…rver/commands/reverseexpand/reverse_expand_weighted.go221 })COMMENT
LOW…commands/reverseexpand/reverse_expand_weighted_test.go841 objectType: "org",COMMENT
LOW…commands/reverseexpand/reverse_expand_weighted_test.go861 // define member: [team#member] and allowedCOMMENT
LOWpkg/storage/storage.go141// Deletes is a typesafe alias for Delete arguments.COMMENT
LOWpkg/storage/storage.go181 // and the filterCOMMENT
LOWpkg/storage/storage.go221 // OnMissingDeleteError indicates that if a delete operation is attempted on a tuple that doesCOMMENT
LOWpkg/storage/cache/keys/build.go21COMMENT
LOWpkg/storage/cache/keys/build.go161 e.WriteTo(kb)COMMENT
LOWpkg/storage/cache/keys/xtypes_test.go841//COMMENT
LOWpkg/storage/cache/keys/doc.go1// Package keys provides deterministic, collision-resistant cache keyCOMMENT
LOWpkg/storage/storagewrappers/iterator_cache.go21// ConstantsCOMMENT
8 more matches not shown…
AI Response Leakage1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHdocs/check/README.md261A tupleset relation `document#parent` must be a direct relationship and it has to be assignable to a direct object type,CODE
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUM.github/workflows/codeql.yml63 # If you are analyzing a compiled language, you can modify the 'build-mode' for that language to customize howCOMMENT