{"name":"main","updatestamp":"2026-10-01T08:41:22.490113Z","head_commit":{"commitid":"4289dbba5ac1aa2cda73eb1d41ab44a7c38c53ad","message":"docs: correct the licence check description (#162)\n\n## Description\n\nMerging this corrects the licence check entry of the pull-request check\nlist in `CONTRIBUTING.md`.\n[netresearch/typo3-ci-workflows#269](https://github.com/netresearch/typo3-ci-workflows/pull/269)\nchanged the default `forbidden-licenses` of `license-check.yml`: it\nrefuses `SSPL`, `BSL` and `BUSL` and every versioned `SSPL-` or `BUSL-`\nidentifier such as `SSPL-1.0` or `BUSL-1.1`; `BSL-1.0` (Boost) passes.\nNo workflow in this repository overrides `forbidden-licenses`. The entry\nnamed the old default pattern `\"(SSPL|BSL)\"`.\n\n## Type of Change\n\n- [x] Documentation update\n\n## Related Issues\n\nNone.\n\n## Changes Made\n\n- `CONTRIBUTING.md`: the PHP licence check entry names what the default\n`forbidden-licenses` refuses.\n\n## Testing\n\nDocumentation only; no tests apply. markdownlint (defaults, not a CI\ngate here): issue count of CONTRIBUTING.md unchanged (13).\n\n_Assisted by claude-code:claude-opus-5-5 —\n[Session](https://claude.ai/code/session_012wvC6mH5CGkQr6HUcoUX2J)_","timestamp":"2026-10-01T08:39:37Z","ci_passed":true,"author":{"service":"github","username":"CybotTM","name":"Sebastian Mendel"},"branch":"main","totals":{"files":51,"lines":3729,"hits":3440,"misses":289,"partials":0,"coverage":92.24,"branches":0,"methods":240,"sessions":25,"complexity":726.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0},"state":"complete","parent":"ee13af6276f4f6cc6e425fc1e84ade6cfb4c30ac","report":{"totals":{"files":51,"lines":3729,"hits":3440,"misses":289,"partials":0,"coverage":92.24,"branches":0,"methods":240,"messages":0,"sessions":25,"complexity":726.0,"complexity_total":0.0,"complexity_ratio":0,"diff":[0,0,0,0,0,null,0,0,0,0,null,null,0]},"files":[{"name":"Classes/Authentication/PasskeyAuthenticationService.php","totals":{"files":0,"lines":309,"hits":290,"misses":19,"partials":0,"coverage":93.85,"branches":0,"methods":17,"messages":0,"sessions":0,"complexity":87.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Command/RecoveryCommand.php","totals":{"files":0,"lines":79,"hits":79,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":6,"messages":0,"sessions":0,"complexity":14.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Configuration/ExtensionConfiguration.php","totals":{"files":0,"lines":32,"hits":32,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":16,"messages":0,"sessions":0,"complexity":17.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/AdminController.php","totals":{"files":0,"lines":195,"hits":195,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":10,"messages":0,"sessions":0,"complexity":52.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/AdminModuleController.php","totals":{"files":0,"lines":170,"hits":170,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":11,"messages":0,"sessions":0,"complexity":32.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/BackendUserTrait.php","totals":{"files":0,"lines":43,"hits":41,"misses":2,"partials":0,"coverage":95.34,"branches":0,"methods":4,"messages":0,"sessions":0,"complexity":20.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/JsonBodyTrait.php","totals":{"files":0,"lines":22,"hits":22,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":10.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/LoginController.php","totals":{"files":0,"lines":140,"hits":139,"misses":1,"partials":0,"coverage":99.28,"branches":0,"methods":11,"messages":0,"sessions":0,"complexity":44.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Controller/ManagementController.php","totals":{"files":0,"lines":144,"hits":143,"misses":1,"partials":0,"coverage":99.3,"branches":0,"methods":9,"messages":0,"sessions":0,"complexity":44.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/AdminCredentialInfo.php","totals":{"files":0,"lines":12,"hits":12,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/AdoptionStats.php","totals":{"files":0,"lines":6,"hits":6,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":3.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/AssertionOptions.php","totals":{"files":0,"lines":1,"hits":1,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":1.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/AuthenticatedUser.php","totals":{"files":0,"lines":1,"hits":1,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":1.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/CredentialInfo.php","totals":{"files":0,"lines":11,"hits":11,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/EnforcementStatus.php","totals":{"files":0,"lines":22,"hits":22,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":5,"messages":0,"sessions":0,"complexity":11.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/GroupEnforcementInfo.php","totals":{"files":0,"lines":16,"hits":16,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":3,"messages":0,"sessions":0,"complexity":4.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/PasskeyAudienceStats.php","totals":{"files":0,"lines":4,"hits":4,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/RegistrationOptions.php","totals":{"files":0,"lines":1,"hits":1,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":1.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/UserPasskeyStatus.php","totals":{"files":0,"lines":15,"hits":15,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":3,"messages":0,"sessions":0,"complexity":3.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Dto/VerifiedAssertion.php","totals":{"files":0,"lines":1,"hits":1,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":1.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Enum/CredentialDiscoverability.php","totals":{"files":0,"lines":20,"hits":20,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":4,"messages":0,"sessions":0,"complexity":15.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Domain/Enum/EnforcementLevel.php","totals":{"files":0,"lines":13,"hits":13,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":4,"messages":0,"sessions":0,"complexity":9.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/EventListener/InjectPasskeyBanner.php","totals":{"files":0,"lines":7,"hits":7,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/EventListener/InjectPasskeyLoginFields.php","totals":{"files":0,"lines":44,"hits":44,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Form/Element/PasskeyInfoElement.php","totals":{"files":0,"lines":177,"hits":177,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":4,"messages":0,"sessions":0,"complexity":33.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Middleware/PasskeySetupInterstitial.php","totals":{"files":0,"lines":158,"hits":155,"misses":3,"partials":0,"coverage":98.1,"branches":0,"methods":7,"messages":0,"sessions":0,"complexity":52.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Middleware/PublicRouteResolver.php","totals":{"files":0,"lines":7,"hits":7,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":6.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/AdoptionStatsService.php","totals":{"files":0,"lines":283,"hits":282,"misses":1,"partials":0,"coverage":99.64,"branches":0,"methods":11,"messages":0,"sessions":0,"complexity":45.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/AssertionService.php","totals":{"files":0,"lines":152,"hits":151,"misses":1,"partials":0,"coverage":99.34,"branches":0,"methods":10,"messages":0,"sessions":0,"complexity":25.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/AttestationService.php","totals":{"files":0,"lines":106,"hits":92,"misses":14,"partials":0,"coverage":86.79,"branches":0,"methods":7,"messages":0,"sessions":0,"complexity":12.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/BackendPasskeyAdoptionStatsProvider.php","totals":{"files":0,"lines":7,"hits":7,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":2.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/ChallengeService.php","totals":{"files":0,"lines":59,"hits":59,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":6,"messages":0,"sessions":0,"complexity":13.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/CredentialRepository.php","totals":{"files":0,"lines":158,"hits":134,"misses":24,"partials":0,"coverage":84.81,"branches":0,"methods":13,"messages":0,"sessions":0,"complexity":16.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/EnforcementService.php","totals":{"files":0,"lines":56,"hits":56,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":4,"messages":0,"sessions":0,"complexity":17.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/ExtensionConfigurationService.php","totals":{"files":0,"lines":68,"hits":65,"misses":3,"partials":0,"coverage":95.58,"branches":0,"methods":7,"messages":0,"sessions":0,"complexity":28.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/RateLimiterService.php","totals":{"files":0,"lines":103,"hits":103,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":13,"messages":0,"sessions":0,"complexity":26.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/WebAuthnCeremonyFactory.php","totals":{"files":0,"lines":34,"hits":34,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":5,"messages":0,"sessions":0,"complexity":12.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Service/WebAuthnService.php","totals":{"files":0,"lines":27,"hits":27,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":11,"messages":0,"sessions":0,"complexity":11.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/UserSettings/PasskeySettingsPanel.php","totals":{"files":0,"lines":96,"hits":96,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":5,"messages":0,"sessions":0,"complexity":16.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/UserSettings/PasskeySettingsPanelElement.php","totals":{"files":0,"lines":36,"hits":36,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":3,"messages":0,"sessions":0,"complexity":10.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Utility/TranslationTrait.php","totals":{"files":0,"lines":7,"hits":7,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":3.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Utility/TypeCastTrait.php","totals":{"files":0,"lines":4,"hits":4,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":4.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Widgets/DataProvider/PasskeyAdoptionChartDataProvider.php","totals":{"files":0,"lines":40,"hits":40,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":3,"messages":0,"sessions":0,"complexity":8.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Widgets/DataProvider/PasskeyCredentialsCountDataProvider.php","totals":{"files":0,"lines":6,"hits":6,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":2,"messages":0,"sessions":0,"complexity":3.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Classes/Widgets/PasskeyAdoptionChartWidget.php","totals":{"files":0,"lines":12,"hits":12,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":1,"messages":0,"sessions":0,"complexity":5.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/PasskeyAdminInfo.js","totals":{"files":0,"lines":112,"hits":106,"misses":6,"partials":0,"coverage":94.64,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/PasskeyBanner.js","totals":{"files":0,"lines":68,"hits":68,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/PasskeyDashboard.js","totals":{"files":0,"lines":114,"hits":114,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/PasskeyLogin.js","totals":{"files":0,"lines":321,"hits":239,"misses":82,"partials":0,"coverage":74.45,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/PasskeyManagement.js","totals":{"files":0,"lines":192,"hits":60,"misses":132,"partials":0,"coverage":31.25,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}},{"name":"Resources/Public/JavaScript/Util/Base64.js","totals":{"files":0,"lines":18,"hits":18,"misses":0,"partials":0,"coverage":100.0,"branches":0,"methods":0,"messages":0,"sessions":0,"complexity":0.0,"complexity_total":0.0,"complexity_ratio":0,"diff":0}}]}}}