Repository Analysis

kimai/kimai

Kimai is the #1 open-source time-tracking application. From freelancers to companies and organisations - everyone can manage timesheets, generate reports, create invoices and so much more... Web-based multi-user application, available as On-Premise or SaaS version: https://www.kimai.org

9.3 Low AI signal View on GitHub

Analysis Overview

This report presents the forensic synthetic code analysis of kimai/kimai, a PHP project with 4,950 GitHub stars. SynthScan v2.0 examined 194,398 lines of code across 1945 source files, recording 1596 pattern matches distributed across 8 syntactic categories. The overall adjusted score of 9.3 places this repository in the Low AI signal band.

The scanner applied 160+ deterministic lexical heuristics, multi-line block detectors, abstract syntax tree depth profilers, and a cross-file Jaccard similarity matrix to construct a statistically normalised synthetic code estimate. All matches are individually weighted by severity coefficient and contextual multiplier before summation, and the resulting headline score is temporally discounted to account for the repository's development history relative to the commercial emergence of large language model coding tooling (November 2022 onward).

9.3
Adjusted Score
9.3
Raw Score
100%
Time Factor
2026-08-25
Last Push
5.0K
Stars
PHP
Language
194.4K
Lines of Code
1.9K
Files
1.6K
Pattern Hits
2026-08-29
Scan Date
0.00
HC Hit Rate

What These Metrics Mean

Adjusted Score
Primary synthetic code indicator. Raw score normalised per 1,000 lines of code and multiplied by the temporal discount factor. This is the definitive comparative metric — use it to rank repositories by AI authorship density.
Raw Score
The unmodified sum of all severity-weighted, context-multiplied pattern match scores before temporal discounting. Reflects the absolute signal strength independent of when the repository was last active.
Time Factor
The temporal discount multiplier (0–100%) applied to the raw score. Repositories last updated before ChatGPT's launch (Nov 2022) receive a 5% factor. Full signal is only assigned to repositories active in the post-adoption era (Jan 2024+).
Pattern Hits
Total count of individual pattern matches across all files and categories. A high hit count with a low score may indicate a very large codebase with isolated AI snippets; a low count with a high score indicates dense, concentrated AI signatures.
HC Hit Rate
High+Critical pattern hits per file, averaged across the repository. This orthogonal signal catches repositories where a few files are densely packed with high-severity AI tells — a strong indicator even when the normalised score appears moderate due to codebase size.
Lines of Code / Files
Total lines and files analysed. The scanner examines 94 file extensions. These denominators are used to normalise the score, enabling fair comparison between repositories of vastly different sizes.

Score History

This chart maps the temporal evolution of the adjusted synthetic code score across successive scan runs. An upward trajectory indicates ongoing incorporation of AI-generated code or expanding LLM-assisted scaffolding; a stable or declining trajectory may reflect active human refactoring, code removal, or the adoption of stricter authorship policies. The dashed secondary line (right axis) independently tracks total raw pattern hit count, which can diverge from the normalised score when codebase size changes significantly between scans.

Severity Breakdown

Classifies detected patterns by their diagnostic confidence and structural impact. CRITICAL patterns (coefficient 10) represent definitive synthetic signatures — hallucinated imports, explicit LLM attribution metadata — virtually never produced by human authors. HIGH (5) indicates strong structural tells such as cross-file repetition or cross-linguistic idioms. MEDIUM (2) covers recognisable conversational padding and AI-specific vocabulary. LOW (1) captures subtle indicators like tautological comments and generic boilerplate that require density to carry independent signal.

CRITICAL 0HIGH 1MEDIUM 38LOW 1557

Directory Score Breakdown

This horizontal bar chart decomposes the repository's raw synthetic code score by top-level directory, allowing you to pinpoint precisely which modules or components carry the highest AI authorship density. Directories with disproportionately high scores relative to their size warrant targeted manual review: concentrated AI signatures often trace back to mass-generated configuration layers, auto-ported test suites, LLM-scaffolded boilerplate classes, or entire subsystems authored under heavy copilot assistance. Use this view to prioritise your human code-review effort.

Pattern Findings

The scanner identified 1596 distinct pattern matches across 8 syntactic categories. Each entry below represents a discrete location in the source code where the engine recorded a statistically significant AI authorship indicator. 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 diagnostic confidence level (CRITICAL / HIGH / MEDIUM / LOW). The Context column identifies whether the match occurred inside executable code, an inline comment, or a string literal — comment-context matches receive a ×1.5 weight because LLMs systematically over-annotate. The ⚡ bolt icon marks clustered matches: three or more patterns within a 10-line window, each receiving an additional ×1.5 density multiplier as dense clusters constitute far stronger evidence of synthetic authorship than isolated hits.

Hyper-Verbose Identifiers1399 hits · 1476 pts
SeverityFileLineSnippetContext
LOWtests/TranslationsTest.php18 public function testForWrongFileExtension(): voidCODE
LOWtests/TranslationsTest.php51 public function testReplacerWereNotTranslated(): voidCODE
LOWtests/Reporting/ReportingServiceTest.php46 public function testGetAvailableReportsWithPermission(): voidCODE
LOWtests/Configuration/MailConfigurationTest.php25 public function testGetFromAddressWithEmptyAddressReturnsNull(): voidCODE
LOWtests/Configuration/LocaleServiceTest.php115 public function testInvalidLocaleWithGivenLocale(): voidCODE
LOWtests/Configuration/LocaleServiceTest.php150 public function testGetNearestTranslationLocale(string $locale, string $expected): voidCODE
LOWtests/Configuration/LocaleServiceTest.php160 public static function getNearestTranslationLocaleData(): arrayCODE
LOWtests/Configuration/SystemConfigurationTest.php156 public function testDefaultWithMixedConfigs(): voidCODE
LOWtests/Configuration/SystemConfigurationTest.php186 public function testCalendarWithoutLoader(): voidCODE
LOWtests/Configuration/SystemConfigurationTest.php211 public function testFormDefaultWithoutLoader(): voidCODE
LOWtests/Configuration/SystemConfigurationTest.php224 public function testFormDefaultWithLoader(): voidCODE
LOWtests/Configuration/SystemConfigurationTest.php236 public function testUserWizardWithoutLoader(): voidCODE
LOWtests/Configuration/SystemConfigurationTest.php248 public function testTimesheetWithoutLoader(): voidCODE
LOWtests/Repository/InvoiceDocumentRepositoryTest.php85 public function testDefaultTemplatesExists(): voidCODE
LOWtests/Repository/UserRepositoryTest.php84 public function testLastLoginIsWrittenOnceWithinTimeWindow(): voidCODE
LOWtests/Repository/UserRepositoryTest.php118 public function testLastLoginIsUpdatedWhenOutdated(): voidCODE
LOWtests/Repository/TimesheetRepositoryTest.php33 public function testResultTypeForQueryState(): voidCODE
LOWtests/Repository/TimesheetRepositoryTest.php55 public function testPaginationReturnsDistinctResultsWithIdenticalBegin(): voidCODE
LOWtests/Repository/TimesheetRepositoryTest.php175 public function testTimesheetResultPreloadsTeamAssignments(): voidCODE
LOWtests/Repository/TimesheetRepositoryTest.php250 public function testQueryDoesNotReturnTimesheetsWithForeignActivityTeam(): voidCODE
LOWtests/Repository/TimesheetRepositoryTest.php331 public function testFindTimesheetsByIdDoesNotReturnForeignActivityTeam(): voidCODE
LOWtests/Repository/Search/SearchHelperTest.php32 public function testSearchTermIsNullDoesNotModifyQueryBuilder(): voidCODE
LOWtests/Repository/Search/SearchHelperTest.php45 public function testNoAliasThrowsException(): voidCODE
LOWtests/Repository/Search/SearchHelperTest.php61 public function testSupportsMetaFieldsAddsMetaFieldConditions(): voidCODE
LOWtests/Repository/Search/SearchHelperTest.php187 public function testSearchTermWithExcludedFieldAddsExclusionCondition(): voidCODE
LOWtests/Repository/Search/SearchHelperTest.php203 public static function provideMaliciousMetaFieldPayloads(): arrayCODE
LOWtests/Repository/Search/SearchHelperTest.php217 public function testMaliciousMetaFieldNamesCannotInfluenceSubqueryDql(string $term, array $expectedMetaNames): voidCODE
LOWtests/Form/ActivityEditFormTest.php22 public function testWithGlobalNewActivity(): voidCODE
LOWtests/Form/ActivityEditFormTest.php42 public function testWithGlobalNewActivityAndOptionsBudget(): voidCODE
LOWtests/Form/ActivityEditFormTest.php53 public function testWithGlobalNewActivityAndOptionsTimeBudget(): voidCODE
LOWtests/Form/ActivityEditFormTest.php64 public function testWithGlobalNewActivityAndOptionsAllBudget(): voidCODE
LOWtests/Form/ActivityEditFormTest.php76 public function testWithGlobalExistingActivityAndOptions(): voidCODE
LOWtests/Form/ActivityEditFormTest.php89 public function testWithNonGlobalExistingActivityAndOptions(): voidCODE
LOWtests/Form/UserRolesTypeTest.php82 public function testHigherRoleIsPreservedWhenActorCannotAssignIt(): voidCODE
LOWtests/Form/UserRolesTypeTest.php95 public function testMultipleHigherRolesArePreserved(): voidCODE
LOWtests/Form/UserRolesTypeTest.php108 public function testAssignableRoleCanStillBeRemoved(): voidCODE
LOWtests/Form/UserRolesTypeTest.php120 public function testActorCanRemoveARoleTheyAreAllowedToAssign(): voidCODE
LOWtests/Form/UserRolesTypeTest.php132 public function testWithoutActingUserNothingIsPreserved(): voidCODE
LOWtests/Form/CustomerEditFormTest.php61 public function testWithBudgetAndTimeBudget(): voidCODE
LOWtests/Form/CustomerEditFormTest.php61 public function testWithBudgetAndTimeBudget(): voidCODE
LOWtests/Form/ProjectEditFormTest.php62 public function testWithBudgetAndTimeBudget(): voidCODE
LOWtests/Form/ProjectEditFormTest.php62 public function testWithBudgetAndTimeBudget(): voidCODE
LOWtests/Form/ExportTemplateSpreadsheetFormTest.php42 public function testWithGlobalNewActivity(): voidCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php28 public static function getValidTestDataTransform(): arrayCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php40 public static function getInvalidTestDataTransform(): arrayCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php55 public function testInvalidTransformThrowsException($transform): voidCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php64 public static function getValidTestDataReverseTransform(): arrayCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php80 public static function getInvalidTestDataReverseTransform(): arrayCODE
LOW…Transformer/DurationStringToSecondsTransformerTest.php100 public function testInvalidReverseTransformThrowsException($transform): voidCODE
LOWtests/Form/Type/DurationTypeTest.php62 public function testPresetsAreNotGeneratedOnMissingHours(): voidCODE
LOWtests/Form/Type/DurationTypeTest.php71 public function testPresetsAreNotGeneratedOnMissingMinutes(): voidCODE
LOWtests/Form/Type/DurationTypeTest.php80 public function testPresetsAreNotGeneratedOnNegativeMinutes(): voidCODE
LOWtests/Form/Type/DurationTypeTest.php90 public function testPresetsAreNotGeneratedOnNegativeHours(): voidCODE
LOWtests/Form/Type/DurationTypeTest.php100 public function testHasDurationInputClass(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php84 public function testSuperAdminCanAssignAllRoles(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php93 public function testAdminCannotAssignSuperAdmin(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php102 public function testTeamleadCanOnlyAssignTeamlead(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php111 public function testRegularUserCannotAssignPrivilegedRoles(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php120 public function testWithoutActingUserAllRolesRemain(): voidCODE
LOWtests/Form/Type/UserRoleTypeTest.php130 public function testAssignabilityRestrictionIsOptInAndOffByDefault(): voidCODE
1339 more matches not shown…
Decorative Section Separators36 hits · 148 pts
SeverityFileLineSnippetContext
MEDIUMphpstan.sh3# ----------------------------------------------------------------------COMMENT
MEDIUMphpstan.sh5# ----------------------------------------------------------------------COMMENT
MEDIUMphpstan.sh11# ----------------------------------------------------------------------COMMENT
MEDIUMphp-cs-fixer.sh3# ----------------------------------------------------------------------COMMENT
MEDIUMphp-cs-fixer.sh5# ----------------------------------------------------------------------COMMENT
MEDIUMphp-cs-fixer.sh11# ----------------------------------------------------------------------COMMENT
MEDIUMkimai.sh3# --------------------------------------------------------------------------------COMMENT
MEDIUMkimai.sh7# --------------------------------------------------------------------------------COMMENT
MEDIUMkimai.sh160# ---------------------------------------------------------COMMENT
MEDIUMconfig/services.yaml44 # ================================================================================COMMENT
MEDIUMconfig/services.yaml46 # ================================================================================COMMENT
MEDIUMconfig/services.yaml90 # ================================================================================COMMENT
MEDIUMconfig/services.yaml92 # ================================================================================COMMENT
MEDIUMconfig/services.yaml106 # ================================================================================COMMENT
MEDIUMconfig/services.yaml108 # ================================================================================COMMENT
MEDIUMconfig/services.yaml119 # ================================================================================COMMENT
MEDIUMconfig/services.yaml121 # ================================================================================COMMENT
MEDIUMconfig/services.yaml127 # ================================================================================COMMENT
MEDIUMconfig/services.yaml129 # ================================================================================COMMENT
MEDIUMconfig/packages/kimai.yaml1# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml7# ---------------------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml10# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml12# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml16# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml19# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml21# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml71# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml74# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml76# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml124# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml127# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml129# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml149# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml152# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml154# --------------------------------------------------------------------------------COMMENT
MEDIUMconfig/packages/kimai.yaml162# --------------------------------------------------------------------------------COMMENT
Fake / Example Data91 hits · 106 pts
SeverityFileLineSnippetContext
LOW…sts/Form/Extension/EnhancedChoiceTypeExtensionTest.php67 ['value' => null, 'attr' => ['size' => 1, 'class' => 'selectpicker', 'data-width' => '50%', 'data-disable-seCODE
LOWtests/Form/Helper/ProjectHelperTest.php87 $project->setComment('Lorem Ipsum');CODE
LOWtests/Form/Helper/ProjectHelperTest.php89 self::assertEquals('FOO BAR - Lorem Ipsum - Acme company - F76/123', $helper->getChoiceLabel($project));CODE
LOWtests/Form/Helper/ActivityHelperTest.php58 $activity->setComment('Lorem Ipsum');CODE
LOWtests/Form/Helper/ActivityHelperTest.php59 self::assertEquals('FOO BAR - Lorem Ipsum', $helper->getChoiceLabel($activity));CODE
LOWtests/Form/Helper/CustomerHelperTest.php66 $customer->setComment('Lorem Ipsum');CODE
LOWtests/Form/Helper/CustomerHelperTest.php67 self::assertEquals('FOO BAR - Lorem Ipsum', $helper->getChoiceLabel($customer));CODE
LOWtests/Form/Helper/CustomerHelperTest.php69 self::assertEquals('FOO BAR - Lorem Ipsum - Acme University', $helper->getChoiceLabel($customer));CODE
LOWtests/Form/Helper/CustomerHelperTest.php71 self::assertEquals('FOO BAR - Lorem Ipsum - Acme University - 2023-0815', $helper->getChoiceLabel($customer));CODE
LOWtests/Mail/KimaiMailerTest.php91 $user->method('getEmail')->willReturn('user@example.com');CODE
LOWtests/Controller/TimesheetControllerTest.php633 self::assertEquals('Lorem Ipsum', $timesheet->getDescription());CODE
LOWtests/Controller/ProfileControllerTest.php49 $this->assertHasProfileBox($client, 'John Doe');CODE
LOWtests/Controller/ProfileControllerTest.php86 $this->assertHasProfileBox($client, 'John Doe');CODE
LOWtests/Controller/ProfileControllerTest.php137 self::assertEquals('John Doe', $user->getAlias());CODE
LOWtests/API/CustomerControllerTest.php340 'email' => 'admin@example.com',CODE
LOWtests/API/CustomerControllerTest.php386 self::assertEquals('admin@example.com', $result['email']);CODE
LOWtests/Command/CreateUserCommandTest.php42 $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar');CODE
LOWtests/Command/CreateUserCommandTest.php50 $commandTester = $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar12');CODE
LOWtests/Command/CreateUserCommandTest.php90 $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar123');CODE
LOWtests/Command/CreateUserCommandTest.php99 $this->createUser('MyTestUser', 'user@example.com', 'ROLE_USER', 'foobar12');CODE
LOWtests/Command/CreateUserCommandTest.php100 $commandTester = $this->createUser('MyTestUser2', 'user@example.com', 'ROLE_USER', 'foobar');CODE
LOWtests/Export/Spreadsheet/CustomerExporterTest.php47 $customer->setComment('Lorem Ipsum');CODE
LOWtests/Export/Spreadsheet/CustomerExporterTest.php98 self::assertEquals('Lorem Ipsum', $worksheet->getCell([++$i, 2])->getValue()); // commentCODE
LOW…xport/Spreadsheet/EntityWithMetaFieldsExporterTest.php48 $project->setComment('Lorem Ipsum');CODE
LOW…xport/Spreadsheet/EntityWithMetaFieldsExporterTest.php76 self::assertEquals('Lorem Ipsum', $worksheet->getCell([++$i, 2])->getValue());CODE
LOWtests/Export/Spreadsheet/ProjectExporterTest.php48 $project->setComment('Lorem Ipsum');CODE
LOWtests/Export/Spreadsheet/ProjectExporterTest.php76 self::assertEquals('Lorem Ipsum', $worksheet->getCell([++$i, 2])->getValue());CODE
LOWtests/Export/Spreadsheet/ActivityExporterTest.php46 $activity->setComment('Lorem Ipsum');CODE
LOWtests/Export/Spreadsheet/ActivityExporterTest.php69 self::assertEquals('Lorem Ipsum', $worksheet->getCell([++$i, 2])->getValue());CODE
LOW…sts/Export/Spreadsheet/AnnotatedObjectExporterTest.php33 $project->setComment('Lorem Ipsum');CODE
LOW…sts/Export/Spreadsheet/AnnotatedObjectExporterTest.php59 self::assertEquals('Lorem Ipsum', $worksheet->getCell([++$i, 2])->getValue());CODE
LOWtests/Export/Spreadsheet/Entities/DemoFull.php22 #[Exporter\Expose(name: 'fake-name', label: 'Protected-Property', type: 'boolean')]COMMENT
LOWtests/Twig/Runtime/MarkdownExtensionTest.php76 $loremIpsum = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt uCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php76 $loremIpsum = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt uCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php77 $loremIpsumShort = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php77 $loremIpsumShort = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php108 $loremIpsum = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt uCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php108 $loremIpsum = 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt uCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php116 'Lorem ipsum dolor sit amet, consetetur sadipscing …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php116 'Lorem ipsum dolor sit amet, consetetur sadipscing …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php121 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore eCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php121 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore eCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php126 'Lorem ipsum dolor sit amet, consetetur sadipscing …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php126 'Lorem ipsum dolor sit amet, consetetur sadipscing …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php131 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php131 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php132 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php132 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php136 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php136 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php137 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php137 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php141 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php141 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php142 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php142 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php146 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php146 'Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt …',CODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php147 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
LOWtests/Twig/Runtime/MarkdownExtensionTest.php147 $sut->commentOneLiner(implode(PHP_EOL, ['Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nCODE
31 more matches not shown…
Over-Commented Block65 hits · 63 pts
SeverityFileLineSnippetContext
LOWconfig/packages/kimai.yaml1# ---------------------------------------------------------------------------------------------COMMENT
LOWconfig/packages/kimai.yaml21# --------------------------------------------------------------------------------COMMENT
LOWconfig/packages/kimai.yaml41 #COMMENT
LOWconfig/packages/kimai.yaml61 # days: ['saturday','sunday']COMMENT
LOWconfig/packages/kimai.yaml121 ROLE_TEAMLEAD: ['view_rate_own_timesheet','view_rate_other_timesheet','hourly-rate_own_profile','view_team_mCOMMENT
LOWconfig/packages/kimai.yaml141#COMMENT
LOWtests/API/TimesheetControllerTest.php1981 // CVE-2024-29200 / GHSA-cj3c-5xpm-cx94 — per-record IDOR regression suite.COMMENT
LOWsrc/Widget/DashboardService.php121 'DurationMonth',COMMENT
LOWsrc/Entity/Team.php21use Symfony\Component\Validator\Constraints as Assert;COMMENT
LOWsrc/Entity/Team.php41 #[ORM\Column(name: 'name', type: Types::STRING, length: 100, nullable: false)]COMMENT
LOWsrc/Entity/UserPreference.php61 #[ORM\JoinColumn(nullable: false, onDelete: 'CASCADE')]COMMENT
LOWsrc/Entity/WorkingTime.php21#[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]COMMENT
LOWsrc/Entity/Tag.php21#[ORM\UniqueConstraint(columns: ['name'])]COMMENT
LOWsrc/Entity/Tag.php41 #[ORM\Column(name: 'name', type: Types::STRING, length: 100, nullable: false)]COMMENT
LOWsrc/Entity/User.php41#[UniqueEntity('email')]COMMENT
LOWsrc/Entity/User.php81 */COMMENT
LOWsrc/Entity/User.php161 * This flag will be initialized in UserEnvironmentSubscriber.COMMENT
LOWsrc/Entity/User.php181 #[ORM\Column(name: 'account', type: Types::STRING, length: 30, nullable: true)]COMMENT
LOWsrc/Entity/User.php221 private array $roles = [];COMMENT
LOWsrc/Entity/AccessToken.php21#[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]COMMENT
LOWsrc/Entity/Customer.php41 #[ORM\Column(name: 'id', type: Types::INTEGER)]COMMENT
LOWsrc/Entity/Customer.php61 #[Exporter\Expose(label: 'number')]COMMENT
LOWsrc/Entity/Customer.php81 #[Assert\Length(max: 100)]COMMENT
LOWsrc/Entity/Customer.php101 /**COMMENT
LOWsrc/Entity/Customer.php121 #[Serializer\Groups(['Default'])]COMMENT
LOWsrc/Entity/Customer.php141 #[Serializer\Groups(['Default'])]COMMENT
LOWsrc/Entity/Customer.php161 #[Assert\Length(max: 100)]COMMENT
LOWsrc/Entity/Customer.php181 *COMMENT
LOWsrc/Entity/Customer.php201 #[Serializer\Groups(['Customer'])]COMMENT
LOWsrc/Entity/Customer.php221 #[Serializer\Groups(['Customer_Entity', 'Customer_Details'])]COMMENT
LOWsrc/Entity/Customer.php241 #[Exporter\Expose(label: 'city')]COMMENT
LOWsrc/Entity/Project.php21use JMS\Serializer\Annotation as Serializer;COMMENT
LOWsrc/Entity/Project.php41COMMENT
LOWsrc/Entity/Project.php61 private ?Customer $customer = null;COMMENT
LOWsrc/Entity/Project.php101 #[Serializer\Type(name: "DateTime<'Y-m-d'>")]COMMENT
LOWsrc/Entity/Project.php121 #[Exporter\Expose(label: 'comment')]COMMENT
LOWsrc/Entity/Project.php141 * @var Collection<ProjectMeta>COMMENT
LOWsrc/Entity/Project.php161 #[OA\Property(type: 'array', items: new OA\Items(ref: '#/components/schemas/Team'))]COMMENT
LOWsrc/Entity/ExportTemplate.php21#[ORM\Entity(repositoryClass: ExportTemplateRepository::class)]COMMENT
LOWsrc/Entity/Invoice.php21use Symfony\Bridge\Doctrine\Validator\Constraints\UniqueEntity;COMMENT
LOWsrc/Entity/Invoice.php41 public const STATUS_PAID = 'paid';COMMENT
LOWsrc/Entity/Invoice.php61 #[ORM\Column(name: 'comment', type: Types::TEXT, nullable: true)]COMMENT
LOWsrc/Entity/Invoice.php81 #[Assert\NotNull]COMMENT
LOWsrc/Entity/Invoice.php101 #[Serializer\Groups(['Default'])]COMMENT
LOWsrc/Entity/Invoice.php121 #[Serializer\Groups(['Default'])]COMMENT
LOWsrc/Entity/Bookmark.php21#[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]COMMENT
LOWsrc/Entity/Rate.php21 #[ORM\Id]COMMENT
LOWsrc/Entity/CommentTableTypeTrait.php21 #[ORM\Column(name: 'id', type: Types::INTEGER)]COMMENT
LOWsrc/Entity/Activity.php21use JMS\Serializer\Annotation as Serializer;COMMENT
LOWsrc/Entity/Activity.php41 use CreatedTrait;COMMENT
LOWsrc/Entity/Activity.php61 */COMMENT
LOWsrc/Entity/Activity.php81 #[ORM\Column(name: 'visible', type: Types::BOOLEAN, nullable: false, options: ['default' => true])]COMMENT
LOWsrc/Entity/Activity.php101 #[Serializer\Type(name: 'array<App\Entity\ActivityMeta>')]COMMENT
LOWsrc/Entity/RolePermission.php21#[ORM\ChangeTrackingPolicy('DEFERRED_EXPLICIT')]COMMENT
LOWsrc/Entity/Timesheet.php21use Doctrine\ORM\Mapping as ORM;COMMENT
LOWsrc/Entity/Timesheet.php41#[ORM\Index(columns: ['user', 'id', 'duration'], name: 'IDX_TIMESHEET_RESULT_STATS')]COMMENT
LOWsrc/Entity/Timesheet.php101 * Attention: Accessor MUST be used, otherwise date will be serialized in UTC.COMMENT
LOWsrc/Entity/Timesheet.php141 private ?int $break = 0;COMMENT
LOWsrc/Entity/InvoiceTemplate.php21#[ORM\UniqueConstraint(columns: ['name'])]COMMENT
LOWsrc/Entity/InvoiceTemplate.php41 private ?string $company = null;COMMENT
5 more matches not shown…
Synthetic Comment Markers1 hit · 5 pts
SeverityFileLineSnippetContext
HIGHUPGRADING-1.md89 - some representation names changed (eg. from `ActivityMetaField` to `ActivityMeta`, `TimesheetSubCollection` vs `TiCODE
Example Usage Blocks2 hits · 4 pts
SeverityFileLineSnippetContext
LOWphpstan.sh6# Usage:COMMENT
LOWphp-cs-fixer.sh6# Usage:COMMENT
Slop Phrases1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/API/StatusController.php34 #[OA\Response(response: 200, description: "A simple route that returns a 'pong', which you can use for testing the ACOMMENT
AI Slop Vocabulary1 hit · 3 pts
SeverityFileLineSnippetContext
MEDIUMsrc/Invoice/Renderer/AbstractSpreadsheetRenderer.php85 // templates can have a formula, which utilize the timesheet records content like this:COMMENT