AI Slop Code RIsk Monitor

filamentphp/filament

A powerful open-source UI framework for Laravel • Build and ship apps & admin panels fast with Livewire

4.4 Low pattern signal View on GitHub

Maintenance and Governance Review

This report summarizes scanner evidence for filamentphp/filament, a PHP project with 32,230 GitHub stars. SynthScan examined 660,227 lines of code across 6389 source files, recording 2658 pattern matches distributed across 6 syntactic categories. The legacy adjusted pattern signal is 4.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.

4.4
Adjusted Signal
4.4
Raw Pattern Score
100%
Time Factor
2026-10-10
Last Push
32.2K
Stars
PHP
Language
660.2K
Lines of Code
6.4K
Files
2.7K
Pattern Hits
2026-10-12
Scan Date
0.00
HC Hit Rate

Risk Review · v3

Use each vector to guide manual verification of the underlying findings.

Cognitive Ownership Risk 14.0/100 · LOW

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

Hallucinated Dependency & Supply Chain Risk 6.7/100 · LOW

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

Agent Over-Engineering Ratio 13.8/100 · LOW

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

PR Review Velocity Impact 18.3/100 · LOW

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

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 2658 distinct pattern matches across 6 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 Identifiers1760 hits · 1957 pts
SeverityFileLineSnippetContext
LOWbin/update-docs-version.js14export function updateDocumentationVersion(content, version) {CODE
LOWbin/update-docs-version.js38function getDocumentationFilePaths() {CODE
LOWtests/src/Tables/TableTest.php857function registerTableContentRenderHooks(string $scope, ?array &$contentBeforeData, ?array &$contentAfterData): voidCODE
LOWtests/src/Tables/RecordTest.php62function attachDepartmentsWithSort(Ticket $ticket, Collection $departments, int $sortOffset = 1, array $extraPivotData =CODE
LOWtests/src/Tables/RecordTest.php75function pivotSortKeyedByDepartment(Ticket $ticket): arrayCODE
LOWtests/src/Forms/FieldAccessibilityTest.php46function fieldAccessibilityDocument(string $html): DOMXPathCODE
LOWtests/src/Forms/FieldAccessibilityTest.php318 public function getExtraInputAttributeBag(): ComponentAttributeBagCODE
LOWtests/src/Forms/Components/RepeaterTest.php3566 public function getFilamentTranslatableContentDriver(): ?stringCODE
LOW…c/Forms/Components/RichEditor/RichContentFakerTest.php684 public static function generateFakeConfiguration(Generator $faker): arrayCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2096 public function saveUploadedFileAttachment(TemporaryUploadedFile $file): mixedCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2101 public function getDefaultFileAttachmentVisibility(): ?stringCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2106 public function isExistingRecordRequiredToSaveNewFileAttachments(): boolCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2128 public function getFileAttachmentProvider(): ?FileAttachmentProviderCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2137 public function saveUploadedFileAttachment(TemporaryUploadedFile $file): mixedCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2142 public function getDefaultFileAttachmentVisibility(): ?stringCODE
LOW⚡…orms/Components/RichEditor/RichContentRendererTest.php2147 public function isExistingRecordRequiredToSaveNewFileAttachments(): boolCODE
LOW…s/Components/RichEditor/RichContentCustomBlockTest.php82 public static function shouldApplyProseStylingToPreview(array $config): boolCODE
LOW…ents/RichEditor/StateCasts/RichEditorStateCastTest.php654 public static function shouldApplyProseStylingToPreview(array $config): boolCODE
LOW…uth/MultiFactor/App/AppAuthenticationChallengeTest.php1148 public function beforeVerificationReturns(Closure $callback): voidCODE
LOW⚡…MultiFactor/Email/EmailAuthenticationChallengeTest.php1119 public function cacheMultiFactorChallengeFormForTesting(): voidCODE
LOW⚡…MultiFactor/Email/EmailAuthenticationChallengeTest.php1124 public function setLegacyUserUndertakingMultiFactorAuthenticationForTesting(mixed $identifier): voidCODE
LOW⚡…MultiFactor/Email/EmailAuthenticationChallengeTest.php1129 public function getUserUndertakingMultiFactorAuthenticationForTesting(): ?AuthenticatableCODE
LOWtests/src/Panels/Tenancy/TenantScopeHydrationTest.php59function tenantScopeHydrationFixture(): arrayCODE
LOWtests/src/Panels/Tenancy/TenantScopeHydrationTest.php335 public function resolveScopedModelProperties(): voidCODE
LOWtests/src/Panels/Tenancy/TenantScopeHydrationTest.php439 public static function getRecordRouteBindingEloquentQuery(): BuilderCODE
LOWtests/src/Panels/Tenancy/TenantScopeHydrationTest.php445 public static function resolveRecordRouteBinding(int | string $key, ?Closure $modifyQuery = null): ?ModelCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php648 public static function resolveRecordRouteBinding(int | string $key, ?Closure $modifyQuery = null): ?ModelCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php675 protected function getParentRecordRouteParameters(): arrayCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php692 public static function getParentResourceRegistration(): ?ParentResourceRegistrationCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php707 protected function getParentRecordRouteParameters(): arrayCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php720 protected function getParentRecordRouteParameters(): arrayCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php757 protected function getTablePageMountParameters(): arrayCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php1217 public static function getParentResourceRegistration(): ?ParentResourceRegistrationCODE
LOWtests/src/Panels/Resources/NestedResourceTest.php1244 protected function authorizeParentRecordAccess(): voidCODE
LOW…/Resources/RelationManagerTenantScopeHydrationTest.php105function relationManagerTenantScopeHydrationFixture(): arrayCODE
LOWtests/src/Panels/Commands/MakeThemeCommandTest.php25function createCommandWithMockedFilesystem(string $viteConfigContent = '', string $panelProviderContent = '', string $paCODE
LOWtests/src/Panels/Pages/BreadcrumbsTest.php289 public function getSubNavigationParameters(): arrayCODE
LOWtests/src/Panels/GlobalSearch/GlobalSearchTest.php428 public static function getGloballySearchableAttributes(): arrayCODE
LOWtests/src/Rector/Rules/ScopePestTestHelpersRector.php510 private function hasUnsafeCallbackArgument(array $arguments, int $callbackPosition): boolCODE
LOWtests/src/Rector/Rules/ScopePestTestHelpersRector.php611 private function findFirstUsageOrRegistrationIndex(array $statements, array $helperNames): intCODE
LOWtests/src/Rector/Rules/ScopePestTestHelpersRector.php689 private function rewriteHelperCallsInStatements(array $statements, array $helperNames): voidCODE
LOW…ts/src/Rector/Rules/MovePestTestClassesToEndRector.php135 private function canMoveClassLikeStatements(array $statements, array $classLikeStatements): boolCODE
LOW…ts/src/Rector/Rules/MovePestTestClassesToEndRector.php236 private function containsEagerClassLikeReference(Node $node, array $classLikeNames): boolCODE
LOW…ts/src/Rector/Rules/MovePestTestClassesToEndRector.php277 private function containsPestTestRegistration(Node $statement): boolCODE
LOW⚡tests/src/Schemas/InteractsWithSchemasTest.php495 public function getSchemaPassedToDefaultHook(): ?SchemaCODE
LOW⚡tests/src/Schemas/InteractsWithSchemasTest.php500 public function getSchemaReturnedByDefaultHook(): ?SchemaCODE
LOW⚡tests/src/Schemas/InteractsWithSchemasTest.php505 public function getSchemaReturnedByMethod(): ?SchemaCODE
LOWtests/src/Schemas/Components/Utilities/GetTest.php503 protected function areCachedDefaultChildSchemasFresh(): boolCODE
LOWtests/src/Schemas/Components/Utilities/GetTest.php510 protected function isCachedDefaultChildSchemaFresh(string | int $key): boolCODE
LOWtests/src/Schemas/Components/Utilities/GetTest.php571 protected function areCachedDefaultChildSchemasFresh(): boolCODE
LOWtests/src/Schemas/Components/Utilities/GetTest.php578 protected function isCachedDefaultChildSchemaFresh(string | int $key): boolCODE
LOW…oncerns/RestrictsFileUploadsToSchemaComponentsTest.php19function temporaryUploadedFileReference(string $filename): stringCODE
LOW⚡tests/src/Support/CanCallHooksTest.php7 protected function afterSaveRecordsParentLifecycleHooks(): voidCODE
LOW⚡tests/src/Support/CanCallHooksTest.php15 protected function afterSaveRecordsNestedLifecycleHooks(): voidCODE
LOW⚡tests/src/Support/CanCallHooksTest.php25 protected function beforeCreateRecordsLifecycleHooks(): voidCODE
LOW⚡tests/src/Support/CanCallHooksTest.php30 protected function afterSaveRecordsLifecycleHooks(): voidCODE
LOW⚡tests/src/Support/CanCallHooksTest.php40 protected function beforeSaveRecordsDuplicateLifecycleHooks(): voidCODE
LOWtests/src/Support/EvaluatesClosuresTest.php121 protected function resolveDefaultClosureDependencyForEvaluationByName(string $parameterName): arrayCODE
LOWtests/src/Support/EvaluatesClosuresTest.php129 protected function resolveDefaultClosureDependencyForEvaluationByType(string $parameterType): arrayCODE
LOWtests/src/Support/Assets/AssetTest.php233 public function getInstalledVersionForTesting(string $package): stringCODE
1700 more matches not shown…
Fake / Example Data877 hits · 900 pts
SeverityFileLineSnippetContext
LOWtests/src/Tables/ColumnTest.php1442 $company = Company::factory()->create(['name' => 'Acme Corp']);CODE
LOWtests/src/Tables/ColumnTest.php1652 $company = Company::factory()->create(['name' => 'Acme Corp']);CODE
LOWtests/src/Tables/ColumnTest.php1741 $company = Company::factory()->create(['name' => 'Acme Corp']);CODE
LOWtests/src/Tables/GroupingTest.php206 $companyNames = ['Acme Corp', 'Beta Inc', 'Gamma LLC', 'Delta Co', 'Epsilon Ltd'];CODE
LOWtests/src/Tables/GroupingTest.php405 $company = Company::factory()->create(['name' => 'Acme Corp']);CODE
LOWtests/src/Tables/GroupingTest.php810 $companyNames = ['Acme Corp', 'Beta Inc', 'Gamma LLC', 'Delta Co', 'Epsilon Ltd'];CODE
LOWtests/src/Tables/GroupingTest.php837 $company = Company::factory()->create(['name' => 'Acme Corp']);CODE
LOWtests/src/Tables/Filters/SelectFilterTest.php842describe('placeholder', function (): void {CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php343 $author = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php755 $author = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php779 $author = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php803 $firstAuthor = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php804 $secondAuthor = User::factory()->create(['name' => 'Jane Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php829 $matchingUser = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Filters/QueryBuilderTest.php1013 $author = User::factory()->create(['name' => 'John Doe']);CODE
LOW⚡tests/src/Tables/Columns/ImageColumnTest.php181 $relatedRecord = new User(['email' => 'user@example.com']);CODE
LOW⚡tests/src/Tables/Columns/ImageColumnTest.php184 ->disk(static fn (string $state, User $relatedRecord): string => (($state === 'avatar.jpg') && ($relatedRecord->CODE
LOW⚡tests/src/Tables/Columns/ImageColumnTest.php185 ->visibility(static fn (string $state, User $relatedRecord): string => (($state === 'avatar.jpg') && ($relatedReCODE
LOW⚡tests/src/Tables/Columns/ImageColumnTest.php188 ->checkFileExistence(static fn (string $state, User $relatedRecord): bool => ($state !== 'avatar.jpg') || ($relaCODE
LOWtests/src/Tables/Columns/SelectColumnTest.php408 $user = User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Tables/Columns/SelectColumnTest.php443 $user = User::factory()->create(['name' => 'Jane Doe']);CODE
LOWtests/src/Tables/Columns/SelectColumnTest.php452 expect($label)->toBe('Jane Doe');CODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php98 $relatedRecord = new User(['email' => 'user@example.com']);CODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php101 ->boolean(static fn (bool $state, User $relatedRecord): bool => is_bool($state) && ($relatedRecord->email === 'uCODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php102 ->trueColor(static fn (bool $state, User $relatedRecord): string => ($state && ($relatedRecord->email === 'user@CODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php103 ->falseColor(static fn (bool $state, User $relatedRecord): string => ((! $state) && ($relatedRecord->email === 'CODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php104 ->trueIcon(static fn (bool $state, User $relatedRecord): string => ($state && ($relatedRecord->email === 'user@eCODE
LOW⚡tests/src/Tables/Columns/IconColumnTest.php105 ->falseIcon(static fn (bool $state, User $relatedRecord): string => ((! $state) && ($relatedRecord->email === 'uCODE
LOWtests/src/Tables/Columns/ColumnTest.php256describe('placeholder', function (): void {CODE
LOW⚡tests/src/Tables/Columns/TextColumnTest.php429 $relatedRecord = new User(['email' => 'user@example.com']);CODE
LOW⚡tests/src/Tables/Columns/TextColumnTest.php433 decimalPlaces: static fn (float $state, User $relatedRecord): int => (($state === 1234.5) && ($relatedReCODE
LOW⚡tests/src/Tables/Columns/TextColumnTest.php434 decimalSeparator: static fn (float $state, User $relatedRecord): string => (($state === 1234.5) && ($relCODE
LOW⚡tests/src/Tables/Columns/TextColumnTest.php435 thousandsSeparator: static fn (float $state, User $relatedRecord): string => (($state === 1234.5) && ($rCODE
LOWtests/src/Forms/ActionTest.php252 ->assertDispatched('state-captured', state: '555-1234');CODE
LOWtests/src/Forms/ActionTest.php258 ->assertDispatched('state-captured', state: ['street' => '123 Main St', 'city' => 'Springfield']);CODE
LOWtests/src/Forms/ActionTest.php291 ->default('555-1234')CODE
LOWtests/src/Forms/ActionTest.php301 ->default('123 Main St'),CODE
LOWtests/src/Forms/AfterStateUpdatedJsTest.php19 ->fill('#form\.name', 'John Doe')CODE
LOWtests/src/Forms/AfterStateUpdatedJsTest.php25 ->fill('#form\.flex_name', 'Jane Doe')CODE
LOWtests/src/Forms/Components/RichEditorTest.php2263 $editor->rawState('<p><img src="placeholder" data-id="new-upload-uuid" /></p>');CODE
LOWtests/src/Forms/Components/RichEditorTest.php2287 $editor->rawState('<p><img src="placeholder" data-id="uploads/kept.jpg" /></p>');CODE
LOWtests/src/Forms/Components/RichEditorTest.php2306 $editor->rawState('<p><img src="placeholder" data-id="foreign-id" /></p>');CODE
LOWtests/src/Forms/Components/SelectTest.php2194 User::factory()->create(['name' => 'John Doe']);CODE
LOWtests/src/Forms/Components/SelectTest.php2203 expect(array_values($results))->toContain('John Doe');CODE
LOWtests/src/Forms/Components/TextInputTest.php703 ->type('[data-testid="text-input"] input', 'John Doe');CODE
LOWtests/src/Forms/Components/MarkdownEditorTest.php602describe('placeholder', function (): void {CODE
LOWtests/src/Forms/Components/OneTimeCodeInputTest.php110describe('placeholder', function (): void {CODE
LOWtests/src/Forms/Components/TextareaTest.php199describe('placeholder', function (): void {CODE
LOWtests/src/Forms/Components/ColorPickerTest.php136describe('placeholder', function (): void {CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php39 'name' => 'John Doe',CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php44 expect($html)->toContain('John Doe');CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php293 'user_name' => 'John Doe',CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php1181 'label' => 'John Doe',CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php1218 ->getLabelsUsing(fn (array $ids): array => ['1' => 'John Doe']),CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php1247 ->getLabelsUsing(fn (array $ids): array => ['1' => 'John Doe'])CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php1721 ->mergeTags(['name' => 'John Doe']);CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php1723 expect($renderer->getMergeTagValue('name'))->toBe('John Doe');CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php2201 'src' => 'placeholder',CODE
LOW…orms/Components/RichEditor/RichContentRendererTest.php2213 expect($html)->not->toContain('src="placeholder"');CODE
LOWtests/src/Forms/Components/MorphToSelect/TypeTest.php279 $user = User::factory()->create(['name' => 'Jane Doe']);CODE
817 more matches not shown…
Structural Annotation Overuse16 hits · 24 pts
SeverityFileLineSnippetContext
LOWdocs/11-plugins/03-building-a-panel-plugin.md16## Step 1: Create the pluginCOMMENT
LOWdocs/11-plugins/03-building-a-panel-plugin.md20## Step 2: Clean upCOMMENT
LOWdocs/11-plugins/03-building-a-panel-plugin.md83## Step 3: Setting up the providerCOMMENT
LOWdocs/11-plugins/03-building-a-panel-plugin.md126## Step 4: Create the widgetCOMMENT
LOWdocs/11-plugins/03-building-a-panel-plugin.md187## Step 5: Update your READMECOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md15## Step 1: Create the pluginCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md19## Step 2: Clean upCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md88## Step 3: Setting up the providerCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md123## Step 4: Creating our componentCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md186## Step 5: Rendering our componentCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md219## Step 6: Adding some stylesCOMMENT
LOWdocs/11-plugins/04-building-a-standalone-plugin.md260## Step 7: Update your READMECOMMENT
LOWpackages/widgets/docs/03-charts.md654### Step 1: Install the plugin with NPMCOMMENT
LOWpackages/widgets/docs/03-charts.md662### Step 2: Create a JavaScript file importing the pluginCOMMENT
LOWpackages/widgets/docs/03-charts.md688### Step 3: Compile the JavaScript file with ViteCOMMENT
LOWpackages/widgets/docs/03-charts.md712### Step 4: Register the JavaScript file in FilamentCOMMENT
Hallucination Indicators1 hit · 10 pts
SeverityFileLineSnippetContext
CRITICAL…urces/js/components/rich-editor/extension-merge-tag.js239 view.state.schema.nodes.mergeTag.create({CODE
AI Response Leakage1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHpackages/schemas/docs/02-layouts.md237The `from()` method is used to control the [Tailwind breakpoint](https://tailwindcss.com/docs/responsive-design#overviewCODE
Over-Commented Block3 hits · 3 pts
SeverityFileLineSnippetContext
LOWpackages/support/resources/js/components/tooltip.js1// Dismiss any visible tooltip when `Escape` is pressed (WAI-ARIA APG Tooltip).COMMENT
LOW…ckages/actions/src/Exports/Concerns/CanFormatState.php141 // A purely numeric string that begins with a sign, such as `-5` or `+42`,COMMENT
LOWdocs-assets/screenshots/script.js1// UsageCOMMENT