Overview
File Change Frequency Overall
  • There are 31 files with 1,234 lines of code.
    • 0 files changed more than 100 times (0 lines of code)
    • 0 files changed 51-100 times (0 lines of code)
    • 0 files changed 21-50 times (0 lines of code)
    • 8 files changed 6-20 times (440 lines of code)
    • 23 files changed 1-5 times (794 lines of code)
0% | 0% | 0% | 35% | 64%
Legend:
101+
51-100
21-50
6-20
1-5

explore: grouped by folders | grouped by update frequency | data
Contributors Count Frequency Overall
  • There are 31 files with 1,234 lines of code.
    • 0 files changed by more than 25 contributors (0 lines of code)
    • 0 files changed by 11-25 contributors (0 lines of code)
    • 0 files changed by 6-10 contributors (0 lines of code)
    • 0 files changed by 2-5 contributors (0 lines of code)
    • 31 files changed by 1 contributor (1,234 lines of code)
0% | 0% | 0% | 0% | 100%
Legend:
26+
11-25
6-10
2-5
1

explore: grouped by folders | grouped by contributors count | data
File Change Frequency per File Extension
scala, md, sbt, txt, yml, xml, gitignore, js, sh, html, properties, yaml
File Change Frequency per Extension
The number of recorded file updates
101+
51-100
21-50
6-20
1-5
scala0% | 0% | 0% | 48% | 51%
js0% | 0% | 0% | 0% | 100%
html0% | 0% | 0% | 0% | 100%
xml0% | 0% | 0% | 0% | 100%
yaml0% | 0% | 0% | 0% | 100%
File Change Frequency per Logical Decomposition
primary
primary (file change frequency)
The number of recorded file updates
101+
51-100
21-50
6-20
1-5
src0% | 0% | 0% | 59% | 40%
example0% | 0% | 0% | 0% | 100%
.github0% | 0% | 0% | 0% | 100%
Most Frequently Changed Files (Top 31)

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
PasskeyVerificationServiceImpl.scala
in src/main/scala/com/gu/playpasskeyauth/services
137 4 2025-07-24 2026-03-06 17 1 +471 / -321 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationService.scala
in src/main/scala/com/gu/playpasskeyauth/services
13 - 2025-07-24 2026-03-06 13 1 +152 / -59 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationFilter.scala
in src/main/scala/com/gu/playpasskeyauth/filters
30 1 2025-07-24 2026-03-06 11 1 +124 / -72 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuth.scala
in src/main/scala/com/gu/playpasskeyauth
38 2 2025-09-05 2026-03-06 10 1 +314 / -159 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
9 - 2025-07-11 2026-02-20 9 1 +252 / -114 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyChallengeRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
10 - 2025-07-24 2026-03-06 6 1 +150 / -71 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in src/main/scala/com/gu/playpasskeyauth/controllers
99 7 2025-07-24 2026-03-06 6 1 +361 / -170 1722550+kelvin-chappell 1722550+kelvin-chappell
JsonEncodings.scala
in src/main/scala/com/gu/playpasskeyauth/models
104 1 2025-07-25 2026-03-06 6 1 +206 / -37 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyUser.scala
in src/main/scala/com/gu/playpasskeyauth/models
10 - 2025-12-14 2026-03-06 5 1 +64 / -20 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithAuthenticationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
25 1 2025-09-15 2026-03-06 5 1 +140 / -74 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithCreationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
31 1 2025-09-15 2026-03-06 5 1 +179 / -103 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyName.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 3 2025-12-14 2026-03-06 5 1 +120 / -31 1722550+kelvin-chappell 1722550+kelvin-chappell
UserId.scala
in src/main/scala/com/gu/playpasskeyauth/models
6 - 2025-12-15 2026-03-06 4 1 +74 / -40 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithUser.scala
in src/main/scala/com/gu/playpasskeyauth/web
14 - 2025-12-14 2026-03-06 4 1 +123 / -69 1722550+kelvin-chappell 1722550+kelvin-chappell
HostApp.scala
in src/main/scala/com/gu/playpasskeyauth/models
13 - 2025-07-25 2025-12-15 3 1 +56 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyId.scala
in src/main/scala/com/gu/playpasskeyauth/models
20 3 2025-12-15 2026-02-20 3 1 +104 / -38 1722550+kelvin-chappell 1722550+kelvin-chappell
WebAuthnConfig.scala
in src/main/scala/com/gu/playpasskeyauth/models
77 1 2025-12-15 2026-03-06 3 1 +178 / -7 1722550+kelvin-chappell 1722550+kelvin-chappell
dependabot.yml
in .github
8 - 2025-07-11 2026-03-06 2 1 +9 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuthContext.scala
in src/main/scala/com/gu/playpasskeyauth
12 - 2026-02-20 2026-03-06 2 1 +96 / -39 1722550+kelvin-chappell 1722550+kelvin-chappell
User.scala
in example/app/models
12 - 2026-02-20 2026-03-06 2 1 +32 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyError.scala
in src/main/scala/com/gu/playpasskeyauth/services
15 - 2025-12-15 2025-12-16 2 1 +35 / -2 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in example/app/controllers
32 1 2026-02-20 2026-03-06 2 1 +94 / -6 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryChallengeRepository.scala
in example/app/services
37 3 2026-02-20 2026-03-06 2 1 +94 / -42 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyModule.scala
in example/app/modules
41 2 2026-02-20 2026-03-06 2 1 +102 / -52 1722550+kelvin-chappell 1722550+kelvin-chappell
passkey.js
in example/public/javascripts
205 24 2026-02-20 2026-03-06 2 1 +289 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
ChallengeType.scala
in src/main/scala/com/gu/playpasskeyauth/services
5 - 2026-03-06 2026-03-06 1 1 +11 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
HomeController.scala
in example/app/controllers
9 1 2026-02-20 2026-02-20 1 1 +14 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
logback.xml
in example/conf
13 - 2026-02-20 2026-02-20 1 1 +15 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Passkey.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 1 2026-02-20 2026-02-20 1 1 +88 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryPasskeyRepository.scala
in example/app/services
33 4 2026-02-20 2026-02-20 1 1 +48 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
index.scala.html
in example/app/views
110 - 2026-02-20 2026-02-20 1 1 +115 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Files With Most Churn (Top 31)
Based on the number of lines added and deleted across all commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
PasskeyVerificationServiceImpl.scala
in src/main/scala/com/gu/playpasskeyauth/services
137 4 2025-07-24 2026-03-06 17 1 +471 / -321 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in src/main/scala/com/gu/playpasskeyauth/controllers
99 7 2025-07-24 2026-03-06 6 1 +361 / -170 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuth.scala
in src/main/scala/com/gu/playpasskeyauth
38 2 2025-09-05 2026-03-06 10 1 +314 / -159 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
9 - 2025-07-11 2026-02-20 9 1 +252 / -114 1722550+kelvin-chappell 1722550+kelvin-chappell
passkey.js
in example/public/javascripts
205 24 2026-02-20 2026-03-06 2 1 +289 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithCreationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
31 1 2025-09-15 2026-03-06 5 1 +179 / -103 1722550+kelvin-chappell 1722550+kelvin-chappell
JsonEncodings.scala
in src/main/scala/com/gu/playpasskeyauth/models
104 1 2025-07-25 2026-03-06 6 1 +206 / -37 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyChallengeRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
10 - 2025-07-24 2026-03-06 6 1 +150 / -71 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithAuthenticationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
25 1 2025-09-15 2026-03-06 5 1 +140 / -74 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationService.scala
in src/main/scala/com/gu/playpasskeyauth/services
13 - 2025-07-24 2026-03-06 13 1 +152 / -59 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationFilter.scala
in src/main/scala/com/gu/playpasskeyauth/filters
30 1 2025-07-24 2026-03-06 11 1 +124 / -72 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithUser.scala
in src/main/scala/com/gu/playpasskeyauth/web
14 - 2025-12-14 2026-03-06 4 1 +123 / -69 1722550+kelvin-chappell 1722550+kelvin-chappell
WebAuthnConfig.scala
in src/main/scala/com/gu/playpasskeyauth/models
77 1 2025-12-15 2026-03-06 3 1 +178 / -7 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyModule.scala
in example/app/modules
41 2 2026-02-20 2026-03-06 2 1 +102 / -52 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyName.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 3 2025-12-14 2026-03-06 5 1 +120 / -31 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyId.scala
in src/main/scala/com/gu/playpasskeyauth/models
20 3 2025-12-15 2026-02-20 3 1 +104 / -38 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryChallengeRepository.scala
in example/app/services
37 3 2026-02-20 2026-03-06 2 1 +94 / -42 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuthContext.scala
in src/main/scala/com/gu/playpasskeyauth
12 - 2026-02-20 2026-03-06 2 1 +96 / -39 1722550+kelvin-chappell 1722550+kelvin-chappell
index.scala.html
in example/app/views
110 - 2026-02-20 2026-02-20 1 1 +115 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
UserId.scala
in src/main/scala/com/gu/playpasskeyauth/models
6 - 2025-12-15 2026-03-06 4 1 +74 / -40 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in example/app/controllers
32 1 2026-02-20 2026-03-06 2 1 +94 / -6 1722550+kelvin-chappell 1722550+kelvin-chappell
Passkey.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 1 2026-02-20 2026-02-20 1 1 +88 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyUser.scala
in src/main/scala/com/gu/playpasskeyauth/models
10 - 2025-12-14 2026-03-06 5 1 +64 / -20 1722550+kelvin-chappell 1722550+kelvin-chappell
HostApp.scala
in src/main/scala/com/gu/playpasskeyauth/models
13 - 2025-07-25 2025-12-15 3 1 +56 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryPasskeyRepository.scala
in example/app/services
33 4 2026-02-20 2026-02-20 1 1 +48 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyError.scala
in src/main/scala/com/gu/playpasskeyauth/services
15 - 2025-12-15 2025-12-16 2 1 +35 / -2 1722550+kelvin-chappell 1722550+kelvin-chappell
User.scala
in example/app/models
12 - 2026-02-20 2026-03-06 2 1 +32 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
logback.xml
in example/conf
13 - 2026-02-20 2026-02-20 1 1 +15 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
HomeController.scala
in example/app/controllers
9 1 2026-02-20 2026-02-20 1 1 +14 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
ChallengeType.scala
in src/main/scala/com/gu/playpasskeyauth/services
5 - 2026-03-06 2026-03-06 1 1 +11 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
dependabot.yml
in .github
8 - 2025-07-11 2026-03-06 2 1 +9 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Files With Most Contributors (Top 31)
Based on the number of unique email addresses found in commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
PasskeyVerificationServiceImpl.scala
in src/main/scala/com/gu/playpasskeyauth/services
137 4 2025-07-24 2026-03-06 17 1 +471 / -321 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationService.scala
in src/main/scala/com/gu/playpasskeyauth/services
13 - 2025-07-24 2026-03-06 13 1 +152 / -59 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationFilter.scala
in src/main/scala/com/gu/playpasskeyauth/filters
30 1 2025-07-24 2026-03-06 11 1 +124 / -72 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuth.scala
in src/main/scala/com/gu/playpasskeyauth
38 2 2025-09-05 2026-03-06 10 1 +314 / -159 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
9 - 2025-07-11 2026-02-20 9 1 +252 / -114 1722550+kelvin-chappell 1722550+kelvin-chappell
JsonEncodings.scala
in src/main/scala/com/gu/playpasskeyauth/models
104 1 2025-07-25 2026-03-06 6 1 +206 / -37 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in src/main/scala/com/gu/playpasskeyauth/controllers
99 7 2025-07-24 2026-03-06 6 1 +361 / -170 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyChallengeRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
10 - 2025-07-24 2026-03-06 6 1 +150 / -71 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithCreationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
31 1 2025-09-15 2026-03-06 5 1 +179 / -103 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithAuthenticationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
25 1 2025-09-15 2026-03-06 5 1 +140 / -74 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyUser.scala
in src/main/scala/com/gu/playpasskeyauth/models
10 - 2025-12-14 2026-03-06 5 1 +64 / -20 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyName.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 3 2025-12-14 2026-03-06 5 1 +120 / -31 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithUser.scala
in src/main/scala/com/gu/playpasskeyauth/web
14 - 2025-12-14 2026-03-06 4 1 +123 / -69 1722550+kelvin-chappell 1722550+kelvin-chappell
UserId.scala
in src/main/scala/com/gu/playpasskeyauth/models
6 - 2025-12-15 2026-03-06 4 1 +74 / -40 1722550+kelvin-chappell 1722550+kelvin-chappell
HostApp.scala
in src/main/scala/com/gu/playpasskeyauth/models
13 - 2025-07-25 2025-12-15 3 1 +56 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyId.scala
in src/main/scala/com/gu/playpasskeyauth/models
20 3 2025-12-15 2026-02-20 3 1 +104 / -38 1722550+kelvin-chappell 1722550+kelvin-chappell
WebAuthnConfig.scala
in src/main/scala/com/gu/playpasskeyauth/models
77 1 2025-12-15 2026-03-06 3 1 +178 / -7 1722550+kelvin-chappell 1722550+kelvin-chappell
User.scala
in example/app/models
12 - 2026-02-20 2026-03-06 2 1 +32 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyModule.scala
in example/app/modules
41 2 2026-02-20 2026-03-06 2 1 +102 / -52 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in example/app/controllers
32 1 2026-02-20 2026-03-06 2 1 +94 / -6 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryChallengeRepository.scala
in example/app/services
37 3 2026-02-20 2026-03-06 2 1 +94 / -42 1722550+kelvin-chappell 1722550+kelvin-chappell
passkey.js
in example/public/javascripts
205 24 2026-02-20 2026-03-06 2 1 +289 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
dependabot.yml
in .github
8 - 2025-07-11 2026-03-06 2 1 +9 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuthContext.scala
in src/main/scala/com/gu/playpasskeyauth
12 - 2026-02-20 2026-03-06 2 1 +96 / -39 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyError.scala
in src/main/scala/com/gu/playpasskeyauth/services
15 - 2025-12-15 2025-12-16 2 1 +35 / -2 1722550+kelvin-chappell 1722550+kelvin-chappell
HomeController.scala
in example/app/controllers
9 1 2026-02-20 2026-02-20 1 1 +14 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
index.scala.html
in example/app/views
110 - 2026-02-20 2026-02-20 1 1 +115 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryPasskeyRepository.scala
in example/app/services
33 4 2026-02-20 2026-02-20 1 1 +48 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
logback.xml
in example/conf
13 - 2026-02-20 2026-02-20 1 1 +15 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Passkey.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 1 2026-02-20 2026-02-20 1 1 +88 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
ChallengeType.scala
in src/main/scala/com/gu/playpasskeyauth/services
5 - 2026-03-06 2026-03-06 1 1 +11 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Files With Least Contributors (Top 31)
Based on the number of unique email addresses found in commits.

See data for all files...

File# lines# unitscreatedlast modified# changes
(days)
# contributorsline
churn
first
contributor
latest
contributor
passkey.js
in example/public/javascripts
205 24 2026-02-20 2026-03-06 2 1 +289 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationServiceImpl.scala
in src/main/scala/com/gu/playpasskeyauth/services
137 4 2025-07-24 2026-03-06 17 1 +471 / -321 1722550+kelvin-chappell 1722550+kelvin-chappell
index.scala.html
in example/app/views
110 - 2026-02-20 2026-02-20 1 1 +115 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
JsonEncodings.scala
in src/main/scala/com/gu/playpasskeyauth/models
104 1 2025-07-25 2026-03-06 6 1 +206 / -37 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in src/main/scala/com/gu/playpasskeyauth/controllers
99 7 2025-07-24 2026-03-06 6 1 +361 / -170 1722550+kelvin-chappell 1722550+kelvin-chappell
WebAuthnConfig.scala
in src/main/scala/com/gu/playpasskeyauth/models
77 1 2025-12-15 2026-03-06 3 1 +178 / -7 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyModule.scala
in example/app/modules
41 2 2026-02-20 2026-03-06 2 1 +102 / -52 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuth.scala
in src/main/scala/com/gu/playpasskeyauth
38 2 2025-09-05 2026-03-06 10 1 +314 / -159 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryChallengeRepository.scala
in example/app/services
37 3 2026-02-20 2026-03-06 2 1 +94 / -42 1722550+kelvin-chappell 1722550+kelvin-chappell
InMemoryPasskeyRepository.scala
in example/app/services
33 4 2026-02-20 2026-02-20 1 1 +48 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Passkey.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 1 2026-02-20 2026-02-20 1 1 +88 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyName.scala
in src/main/scala/com/gu/playpasskeyauth/models
33 3 2025-12-14 2026-03-06 5 1 +120 / -31 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyController.scala
in example/app/controllers
32 1 2026-02-20 2026-03-06 2 1 +94 / -6 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithCreationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
31 1 2025-09-15 2026-03-06 5 1 +179 / -103 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationFilter.scala
in src/main/scala/com/gu/playpasskeyauth/filters
30 1 2025-07-24 2026-03-06 11 1 +124 / -72 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithAuthenticationData.scala
in src/main/scala/com/gu/playpasskeyauth/web
25 1 2025-09-15 2026-03-06 5 1 +140 / -74 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyId.scala
in src/main/scala/com/gu/playpasskeyauth/models
20 3 2025-12-15 2026-02-20 3 1 +104 / -38 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyError.scala
in src/main/scala/com/gu/playpasskeyauth/services
15 - 2025-12-15 2025-12-16 2 1 +35 / -2 1722550+kelvin-chappell 1722550+kelvin-chappell
RequestWithUser.scala
in src/main/scala/com/gu/playpasskeyauth/web
14 - 2025-12-14 2026-03-06 4 1 +123 / -69 1722550+kelvin-chappell 1722550+kelvin-chappell
logback.xml
in example/conf
13 - 2026-02-20 2026-02-20 1 1 +15 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
HostApp.scala
in src/main/scala/com/gu/playpasskeyauth/models
13 - 2025-07-25 2025-12-15 3 1 +56 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyVerificationService.scala
in src/main/scala/com/gu/playpasskeyauth/services
13 - 2025-07-24 2026-03-06 13 1 +152 / -59 1722550+kelvin-chappell 1722550+kelvin-chappell
User.scala
in example/app/models
12 - 2026-02-20 2026-03-06 2 1 +32 / -1 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyAuthContext.scala
in src/main/scala/com/gu/playpasskeyauth
12 - 2026-02-20 2026-03-06 2 1 +96 / -39 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyUser.scala
in src/main/scala/com/gu/playpasskeyauth/models
10 - 2025-12-14 2026-03-06 5 1 +64 / -20 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyChallengeRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
10 - 2025-07-24 2026-03-06 6 1 +150 / -71 1722550+kelvin-chappell 1722550+kelvin-chappell
HomeController.scala
in example/app/controllers
9 1 2026-02-20 2026-02-20 1 1 +14 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
PasskeyRepository.scala
in src/main/scala/com/gu/playpasskeyauth/services
9 - 2025-07-11 2026-02-20 9 1 +252 / -114 1722550+kelvin-chappell 1722550+kelvin-chappell
dependabot.yml
in .github
8 - 2025-07-11 2026-03-06 2 1 +9 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
UserId.scala
in src/main/scala/com/gu/playpasskeyauth/models
6 - 2025-12-15 2026-03-06 4 1 +74 / -40 1722550+kelvin-chappell 1722550+kelvin-chappell
ChallengeType.scala
in src/main/scala/com/gu/playpasskeyauth/services
5 - 2026-03-06 2026-03-06 1 1 +11 / -0 1722550+kelvin-chappell 1722550+kelvin-chappell
Correlations

File Size vs. Number of Changes: 31 points

example/app/controllers/PasskeyController.scala x: 32 lines of code y: 2 # changes example/app/models/User.scala x: 12 lines of code y: 2 # changes example/app/modules/PasskeyModule.scala x: 41 lines of code y: 2 # changes example/app/services/InMemoryChallengeRepository.scala x: 37 lines of code y: 2 # changes example/public/javascripts/passkey.js x: 205 lines of code y: 2 # changes src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 38 lines of code y: 10 # changes src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 99 lines of code y: 6 # changes src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 30 lines of code y: 11 # changes src/main/scala/com/gu/playpasskeyauth/models/JsonEncodings.scala x: 104 lines of code y: 6 # changes src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 33 lines of code y: 5 # changes src/main/scala/com/gu/playpasskeyauth/models/PasskeyUser.scala x: 10 lines of code y: 5 # changes src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 6 lines of code y: 4 # changes src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 77 lines of code y: 3 # changes src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 5 lines of code y: 1 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyChallengeRepository.scala x: 10 lines of code y: 6 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 13 lines of code y: 13 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 137 lines of code y: 17 # changes src/main/scala/com/gu/playpasskeyauth/web/RequestWithAuthenticationData.scala x: 25 lines of code y: 5 # changes src/main/scala/com/gu/playpasskeyauth/web/RequestWithCreationData.scala x: 31 lines of code y: 5 # changes src/main/scala/com/gu/playpasskeyauth/web/RequestWithUser.scala x: 14 lines of code y: 4 # changes .github/dependabot.yml x: 8 lines of code y: 2 # changes example/app/controllers/HomeController.scala x: 9 lines of code y: 1 # changes example/app/services/InMemoryPasskeyRepository.scala x: 33 lines of code y: 1 # changes example/app/views/index.scala.html x: 110 lines of code y: 1 # changes example/conf/logback.xml x: 13 lines of code y: 1 # changes src/main/scala/com/gu/playpasskeyauth/models/PasskeyId.scala x: 20 lines of code y: 3 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyRepository.scala x: 9 lines of code y: 9 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyError.scala x: 15 lines of code y: 2 # changes src/main/scala/com/gu/playpasskeyauth/models/HostApp.scala x: 13 lines of code y: 3 # changes
17.0
# changes
  min: 1.0
  average: 4.42
  25th percentile: 2.0
  median: 3.0
  75th percentile: 6.0
  max: 17.0
0 205.0
lines of code
min: 5.0 | average: 39.81 | 25th percentile: 12.0 | median: 25.0 | 75th percentile: 38.0 | max: 205.0

Number of Contributors vs. Number of Changes: 31 points

example/app/controllers/PasskeyController.scala x: 1 # contributors y: 2 # changes src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 1 # contributors y: 10 # changes src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 1 # contributors y: 6 # changes src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 1 # contributors y: 11 # changes src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 1 # contributors y: 5 # changes src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 1 # contributors y: 4 # changes src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 1 # contributors y: 3 # changes src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 1 # contributors y: 1 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 1 # contributors y: 13 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 1 # contributors y: 17 # changes src/main/scala/com/gu/playpasskeyauth/services/PasskeyRepository.scala x: 1 # contributors y: 9 # changes
17.0
# changes
  min: 1.0
  average: 4.42
  25th percentile: 2.0
  median: 3.0
  75th percentile: 6.0
  max: 17.0
0 1.0
# contributors
min: 1.0 | average: 1.0 | 25th percentile: 1.0 | median: 1.0 | 75th percentile: 1.0 | max: 1.0

Number of Contributors vs. File Size: 31 points

example/app/controllers/PasskeyController.scala x: 1 # contributors y: 32 lines of code example/app/models/User.scala x: 1 # contributors y: 12 lines of code example/app/modules/PasskeyModule.scala x: 1 # contributors y: 41 lines of code example/app/services/InMemoryChallengeRepository.scala x: 1 # contributors y: 37 lines of code example/public/javascripts/passkey.js x: 1 # contributors y: 205 lines of code src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 1 # contributors y: 38 lines of code src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 1 # contributors y: 99 lines of code src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 1 # contributors y: 30 lines of code src/main/scala/com/gu/playpasskeyauth/models/JsonEncodings.scala x: 1 # contributors y: 104 lines of code src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 1 # contributors y: 33 lines of code src/main/scala/com/gu/playpasskeyauth/models/PasskeyUser.scala x: 1 # contributors y: 10 lines of code src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 1 # contributors y: 6 lines of code src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 1 # contributors y: 77 lines of code src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 1 # contributors y: 5 lines of code src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 1 # contributors y: 13 lines of code src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 1 # contributors y: 137 lines of code src/main/scala/com/gu/playpasskeyauth/web/RequestWithAuthenticationData.scala x: 1 # contributors y: 25 lines of code src/main/scala/com/gu/playpasskeyauth/web/RequestWithCreationData.scala x: 1 # contributors y: 31 lines of code src/main/scala/com/gu/playpasskeyauth/web/RequestWithUser.scala x: 1 # contributors y: 14 lines of code .github/dependabot.yml x: 1 # contributors y: 8 lines of code example/app/controllers/HomeController.scala x: 1 # contributors y: 9 lines of code example/app/views/index.scala.html x: 1 # contributors y: 110 lines of code src/main/scala/com/gu/playpasskeyauth/models/PasskeyId.scala x: 1 # contributors y: 20 lines of code src/main/scala/com/gu/playpasskeyauth/services/PasskeyError.scala x: 1 # contributors y: 15 lines of code
205.0
lines of code
  min: 5.0
  average: 39.81
  25th percentile: 12.0
  median: 25.0
  75th percentile: 38.0
  max: 205.0
0 1.0
# contributors
min: 1.0 | average: 1.0 | 25th percentile: 1.0 | median: 1.0 | 75th percentile: 1.0 | max: 1.0

Number of Changes vs. Line Churn: 83 points

build.sbt x: 43 # changes y: 242 line churn example/README.md x: 2 # changes y: 191 line churn project/build.properties x: 20 # changes y: 39 line churn .github/workflows/ci.yml x: 11 # changes y: 50 line churn .github/workflows/sbt-dependency-graph.yaml x: 11 # changes y: 106 line churn .scalafmt.conf x: 12 # changes y: 28 line churn project/plugins.sbt x: 10 # changes y: 25 line churn .github/copilot-instructions.md x: 1 # changes y: 193 line churn CONTRIBUTING.md x: 1 # changes y: 239 line churn example/app/controllers/PasskeyController.scala x: 2 # changes y: 100 line churn example/app/models/User.scala x: 2 # changes y: 33 line churn example/app/modules/PasskeyModule.scala x: 2 # changes y: 154 line churn example/app/services/InMemoryChallengeRepository.scala x: 2 # changes y: 136 line churn example/conf/routes x: 2 # changes y: 25 line churn example/public/javascripts/passkey.js x: 2 # changes y: 290 line churn src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 10 # changes y: 473 line churn src/main/scala/com/gu/playpasskeyauth/PasskeyAuthContext.scala x: 2 # changes y: 135 line churn src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 6 # changes y: 531 line churn src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 11 # changes y: 196 line churn src/main/scala/com/gu/playpasskeyauth/models/JsonEncodings.scala x: 6 # changes y: 243 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 5 # changes y: 151 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyUser.scala x: 5 # changes y: 84 line churn src/main/scala/com/gu/playpasskeyauth/models/User.scala x: 2 # changes y: 60 line churn src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 4 # changes y: 114 line churn src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 3 # changes y: 185 line churn src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 1 # changes y: 11 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyChallengeRepository.scala x: 6 # changes y: 221 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 13 # changes y: 211 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 17 # changes y: 792 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithAuthenticationData.scala x: 5 # changes y: 214 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithCreationData.scala x: 5 # changes y: 282 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithUser.scala x: 4 # changes y: 192 line churn src/test/scala/com/gu/playpasskeyauth/models/JsonEncodingsSpec.scala x: 1 # changes y: 85 line churn src/test/scala/com/gu/playpasskeyauth/models/PasskeyNameSpec.scala x: 2 # changes y: 206 line churn src/test/scala/com/gu/playpasskeyauth/models/PasskeySpec.scala x: 1 # changes y: 60 line churn src/test/scala/com/gu/playpasskeyauth/services/PasskeyErrorSpec.scala x: 2 # changes y: 54 line churn .github/dependabot.yml x: 2 # changes y: 9 line churn README.md x: 7 # changes y: 549 line churn example/app/services/InMemoryPasskeyRepository.scala x: 1 # changes y: 48 line churn example/app/views/index.scala.html x: 1 # changes y: 115 line churn example/conf/application.conf x: 1 # changes y: 21 line churn example/run.sh x: 1 # changes y: 8 line churn src/main/scala/com/gu/playpasskeyauth/models/Passkey.scala x: 1 # changes y: 88 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyId.scala x: 3 # changes y: 142 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyInfo.scala x: 3 # changes y: 60 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyRepository.scala x: 9 # changes y: 366 line churn version.sbt x: 2 # changes y: 5 line churn .github/workflows/release.yml x: 2 # changes y: 17 line churn src/test/scala/com/gu/playpasskeyauth/models/UserIdSpec.scala x: 1 # changes y: 43 line churn src/main/scala/com/gu/playpasskeyauth/models/HostApp.scala x: 3 # changes y: 57 line churn src/test/scala/com/gu/playpasskeyauth/models/HostAppSpec.scala x: 1 # changes y: 137 line churn src/main/scala/com/gu/playpasskeyauth/controllers/BasePasskeyController.scala x: 12 # changes y: 448 line churn Passkeys.md x: 1 # changes y: 168 line churn src/main/scala/com/gu/playpasskeyauth/web/CreationDataRequest.scala x: 3 # changes y: 84 line churn src/main/scala/com/gu/playpasskeyauth/utilities/Utilities.scala x: 3 # changes y: 24 line churn src/main/scala/com/gu/playpasskeyauth/Passkey.scala x: 2 # changes y: 38 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestExtractor.scala x: 2 # changes y: 28 line churn src/test/scala/com/gu/playpasskeyauth/controllers/BasePasskeyControllerTest.scala x: 3 # changes y: 1378 line churn src/test/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilterTest.scala x: 3 # changes y: 490 line churn src/test/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImplTest.scala x: 3 # changes y: 606 line churn src/main/scala/com/gu/playpasskeyauth/model/JsonEncodings.scala x: 2 # changes y: 196 line churn src/main/scala/com/gu/playpasskeyauth/services/Webauthn4jPasskeyVerificationService.scala x: 1 # changes y: 266 line churn src/main/scala/com/gu/playpasskeyauth/filters/RequestHelper.scala x: 2 # changes y: 14 line churn src/main/scala/com/gu/playpasskeyauth/filters/PasskeyAuthFilter.scala x: 2 # changes y: 70 line churn src/main/scala/com/gu/playpasskeyauth/services/Webauthn4jPasskeyAuthService.scala x: 2 # changes y: 76 line churn CODEOWNERS x: 1 # changes y: 1 line churn .gitignore x: 1 # changes y: 32 line churn
1378.0
line churn
  min: 1.0
  average: 149.0
  25th percentile: 25.0
  median: 76.0
  75th percentile: 196.0
  max: 1378.0
0 43.0
# changes
min: 1.0 | average: 4.11 | 25th percentile: 1.0 | median: 2.0 | 75th percentile: 4.0 | max: 43.0

Number of Contributors vs. Line Churn: 31 points

example/app/controllers/PasskeyController.scala x: 1 # contributors y: 100 line churn example/app/models/User.scala x: 1 # contributors y: 33 line churn example/app/modules/PasskeyModule.scala x: 1 # contributors y: 154 line churn example/app/services/InMemoryChallengeRepository.scala x: 1 # contributors y: 136 line churn example/public/javascripts/passkey.js x: 1 # contributors y: 290 line churn src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 1 # contributors y: 473 line churn src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 1 # contributors y: 531 line churn src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 1 # contributors y: 196 line churn src/main/scala/com/gu/playpasskeyauth/models/JsonEncodings.scala x: 1 # contributors y: 243 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 1 # contributors y: 151 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyUser.scala x: 1 # contributors y: 84 line churn src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 1 # contributors y: 114 line churn src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 1 # contributors y: 185 line churn src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 1 # contributors y: 11 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyChallengeRepository.scala x: 1 # contributors y: 221 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 1 # contributors y: 211 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 1 # contributors y: 792 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithAuthenticationData.scala x: 1 # contributors y: 214 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithCreationData.scala x: 1 # contributors y: 282 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithUser.scala x: 1 # contributors y: 192 line churn .github/dependabot.yml x: 1 # contributors y: 9 line churn example/app/controllers/HomeController.scala x: 1 # contributors y: 14 line churn example/app/services/InMemoryPasskeyRepository.scala x: 1 # contributors y: 48 line churn src/main/scala/com/gu/playpasskeyauth/models/Passkey.scala x: 1 # contributors y: 88 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyId.scala x: 1 # contributors y: 142 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyRepository.scala x: 1 # contributors y: 366 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyError.scala x: 1 # contributors y: 37 line churn src/main/scala/com/gu/playpasskeyauth/models/HostApp.scala x: 1 # contributors y: 57 line churn
792.0
line churn
  min: 9.0
  average: 181.9
  25th percentile: 57.0
  median: 142.0
  75th percentile: 221.0
  max: 792.0
0 1.0
# contributors
min: 1.0 | average: 1.0 | 25th percentile: 1.0 | median: 1.0 | 75th percentile: 1.0 | max: 1.0

File Size vs. Line Churn: 31 points

example/app/controllers/PasskeyController.scala x: 32 lines of code y: 100 line churn example/app/models/User.scala x: 12 lines of code y: 33 line churn example/app/modules/PasskeyModule.scala x: 41 lines of code y: 154 line churn example/app/services/InMemoryChallengeRepository.scala x: 37 lines of code y: 136 line churn example/public/javascripts/passkey.js x: 205 lines of code y: 290 line churn src/main/scala/com/gu/playpasskeyauth/PasskeyAuth.scala x: 38 lines of code y: 473 line churn src/main/scala/com/gu/playpasskeyauth/PasskeyAuthContext.scala x: 12 lines of code y: 135 line churn src/main/scala/com/gu/playpasskeyauth/controllers/PasskeyController.scala x: 99 lines of code y: 531 line churn src/main/scala/com/gu/playpasskeyauth/filters/PasskeyVerificationFilter.scala x: 30 lines of code y: 196 line churn src/main/scala/com/gu/playpasskeyauth/models/JsonEncodings.scala x: 104 lines of code y: 243 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyName.scala x: 33 lines of code y: 151 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyUser.scala x: 10 lines of code y: 84 line churn src/main/scala/com/gu/playpasskeyauth/models/UserId.scala x: 6 lines of code y: 114 line churn src/main/scala/com/gu/playpasskeyauth/models/WebAuthnConfig.scala x: 77 lines of code y: 185 line churn src/main/scala/com/gu/playpasskeyauth/services/ChallengeType.scala x: 5 lines of code y: 11 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyChallengeRepository.scala x: 10 lines of code y: 221 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationService.scala x: 13 lines of code y: 211 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyVerificationServiceImpl.scala x: 137 lines of code y: 792 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithAuthenticationData.scala x: 25 lines of code y: 214 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithCreationData.scala x: 31 lines of code y: 282 line churn src/main/scala/com/gu/playpasskeyauth/web/RequestWithUser.scala x: 14 lines of code y: 192 line churn .github/dependabot.yml x: 8 lines of code y: 9 line churn example/app/controllers/HomeController.scala x: 9 lines of code y: 14 line churn example/app/services/InMemoryPasskeyRepository.scala x: 33 lines of code y: 48 line churn example/app/views/index.scala.html x: 110 lines of code y: 115 line churn example/conf/logback.xml x: 13 lines of code y: 15 line churn src/main/scala/com/gu/playpasskeyauth/models/Passkey.scala x: 33 lines of code y: 88 line churn src/main/scala/com/gu/playpasskeyauth/models/PasskeyId.scala x: 20 lines of code y: 142 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyRepository.scala x: 9 lines of code y: 366 line churn src/main/scala/com/gu/playpasskeyauth/services/PasskeyError.scala x: 15 lines of code y: 37 line churn src/main/scala/com/gu/playpasskeyauth/models/HostApp.scala x: 13 lines of code y: 57 line churn
792.0
line churn
  min: 9.0
  average: 181.9
  25th percentile: 57.0
  median: 142.0
  75th percentile: 221.0
  max: 792.0
0 205.0
lines of code
min: 5.0 | average: 39.81 | 25th percentile: 12.0 | median: 25.0 | 75th percentile: 38.0 | max: 205.0