Skip to content
CAI
Software that uses CAICheck a score

everest-engineering/lhotse

60.5

Adequate · 21 September 2026

3.3k

lines of production code

Java

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a modernized Java-based backend service that manages photo uploads and photo-based competitions. It provides REST APIs for users to upload photos, create and participate in competitions, and manage their accounts, while administrators can manage competition details and perform data deletion. The architecture leverages the Axon framework for event sourcing and command handling, supported by JPA for persistence and Keycloak for authentication.

How it got here

2019 — Legacy codebase cleanup and migration

21 changes.

This period was dominated by the removal of legacy Axon-based domain models, REST APIs, and security implementations, alongside the deletion of obsolete test code. The project simultaneously upgraded its build system to Spring Boot 3.3 and Java 17, signaling a major architectural shift away from the previous technology stack.

2020 — API security and competition features

18 changes.

This period focused on securing the API with Keycloak OAuth2 authentication and standardizing error handling. It also introduced new endpoints for photo management and competitions, alongside refactoring the Axon framework integration and command validation infrastructure.

2021–2023 — Feature expansion and localization

17 changes.

This period focused on introducing new domain capabilities, specifically photo management and competition functionality, alongside comprehensive internationalization support for error messages. The work also included migrating the database schema to Liquibase and updating integration examples to use Keycloak.

Features

Add persistence layer for competitions and entries

Introduced new JPA entities (PersistableCompetition, PersistableCompetitionEntry) and Spring Data repositories to store competition metadata and user submissions. Added read and write services (DefaultCompetitionsReadService, DefaultCompetitionsWriteService) that map between domain models and the persistence layer, enabling the system to create, retrieve, and manage competitions and their associated entries.

src/competitions-persistence/src/main · high confidence

Add user photo management and automated cleanup on account deletion

Users can now upload and own photos, with a new domain model, write service, and event handlers to persist photo metadata and file references. When a user account is deleted, an automated saga triggers the deletion of all associated photos and their backing files, ensuring data is properly cleaned up in compliance with privacy requirements.

src/photos · high confidence

Added default secret key persistence implementation

A new default implementation of the secret key repository has been introduced in the secretkeys-persistence module. This includes a Spring @Repository class, DefaultSecretKeyRepository, which delegates to a new JPA repository interface, PersistableSecretKeyJPARepository, enabling the storage and retrieval of cryptographic secret keys.

src/secretkeys-persistence · medium confidence

Added photo persistence and read/write services

Introduced a new domain for photo management, including a JPA entity (PersistablePhoto) and repository for storing photo metadata. A write service handles photo creation and deletion, while a read service enables users to retrieve, stream, and view thumbnails of their own photos.

src/photos-persistence/src/main · high confidence

Added user deletion and retry logic infrastructure

Introduced a new 'forgotten users' module containing a domain aggregate, service, and event handler to process user deletion and crypto-shredding requests. Additionally, added a common 'RetryWithExponentialBackoff' utility class with corresponding unit tests to handle transient failures with exponential backoff strategies.

src/launcher · high confidence

Initial project scaffolding and configuration

The repository was initialized with essential project files, including an Apache 2.0 license, a comprehensive README with setup and feature documentation, and a .env file defining environment variables for Postgres, Axon Server, and Keycloak. A Gradle wrapper was updated to a newer version, and a shell script was added to automate the creation of new aggregate directory structures. Additionally, a .gitignore file was configured to exclude IDE and build artifacts, and Lombok was configured to add generated annotations.

(repo-wide) · high confidence

Introduce competition service interfaces for read, write, and general operations

Added three new service interfaces in the competitions module: CompetitionsReadService for retrieving competition lists and details, CompetitionsWriteService for managing competition creation, entries, votes, and winner selection, and CompetitionsService for high-level operations like creating competitions, submitting photos, and voting. These interfaces define the core capabilities for managing photo competitions, including submission and voting workflows.

src/competitions-api/src/main/java/engineering/everest/lhotse/competitions/services · high confidence

Introduce photo competition functionality

Users can now create photo competitions, submit photos for entry, and cast votes. The system automatically closes the voting period and declares winners based on vote counts. This change adds the domain models, commands, events, and handlers required to support the full competition lifecycle, including a saga that schedules the vote-counting process.

src/competitions · high confidence

Introduce photo management capabilities

Users can now upload, view, and stream their own photos. This change introduces the core domain model for photos, including a new RegisterUploadedPhotoCommand for persisting uploads, and defines read and write service interfaces that allow users to retrieve photo metadata, stream full-size images, and stream thumbnails.

src/photos-api · medium confidence

Introduces DtoConverter for mapping domain objects to REST responses

A new DtoConverter service has been added to map domain objects (Photo, Competition, CompetitionWithEntries) to their corresponding REST response DTOs (PhotoResponse, CompetitionSummaryResponse, CompetitionWithEntriesResponse). This centralizes the conversion logic for competition and photo data exposed via the API.

src/api/src/main/java/engineering/everest/lhotse/api/rest/converters · high confidence

New APIs for photo management and competitions

The REST API now exposes endpoints for managing photos and competitions. Users can upload, list, and stream photos, as well as submit entries and vote in photo competitions. Administrators can create and manage competitions. Access to these new endpoints is controlled by updated security annotations: 'AdminOnly' restricts admin actions, 'AdminOrRegisteredUser' allows admins and registered users to view data, and 'RegisteredUser' allows registered users to submit and vote. The system also includes a GDPR-compliant endpoint for administrators to delete and forget user data.

src/api/src/main/java/engineering/everest/lhotse/api/rest/controllers · high confidence

New i18n exception classes for localized error messages

Added TranslatableException and its subclasses (TranslatableIllegalArgumentException, TranslatableIllegalStateException) to support internationalized error messages. These exceptions store an i18n message key and arguments, and override getLocalizedMessage() to translate the message using the current locale, falling back to the raw key if no translation is found.

src/i18n-support/src/main/java/engineering/everest/lhotse/i18n/exceptions · high confidence

New replay management capabilities for event processors

A new set of classes has been introduced to support replaying events from a specific marker. This includes a \ReplayEndpoint\ that exposes Spring Boot Actuator operations to start and monitor replays, a \ReplayMarkerAwareTrackingEventProcessor\ that handles the replay logic, and a builder to wire it up. Users can now trigger and track the status of event replays through the actuator endpoint.

src/axon-support/src/main/java/engineering/everest/lhotse/axon/replay · high confidence

New request models for competition submissions and admin competition creation

The API now includes new request models for managing photo competitions. Admin users can create competitions using the new CreateCompetitionRequest, which accepts details like submission and voting timestamps, and maximum entries per user. Additionally, a new CompetitionSubmissionRequest model allows users to submit photos to a competition by providing a photo ID and optional notes. The old OrganizationAddress model has been removed and replaced with a DeleteAndForgetUserRequest for handling user deletion and forgetting requests.

src/api/src/main/java/engineering/everest/lhotse/api/rest/requests · high confidence

Removals

Removal of legacy Spring Security OAuth2 authentication and configuration components

The security-support module has removed several core components related to the previous authentication and authorization implementation. Specifically, the \AuthenticationProvider\, \DefaultAuthenticationContextProvider\, \SpringSecurityBackedPasswordEncoder\, and \TokenController\ have been deleted. Additionally, the Spring Security configuration classes (\AuthServerConfig\, \ResourceServerConfig\, \WebSecurityConfig\) and the \SimpleCorsFilter\ have been removed, along with associated user details classes (\AdminUserDetails\, \AdminUserDetailsService\, \AuthServerUserDetailsService\). This change eliminates the legacy OAuth2-based authentication flow and its associated REST endpoints for token revocation, indicating a significant shift in how the application handles security and user identity.

security-support · high confidence

Removed legacy REST API implementation

The legacy REST API implementation has been removed from the application. This includes the removal of all REST controllers (such as OrganizationsController, UserController, and UsersController), request and response DTOs, custom annotations for authorization, and related configuration classes (such as SwaggerConfig and WebConfig). Additionally, the associated unit tests and test helper classes have been deleted, indicating a significant reduction in the public API surface.

api · high confidence

Behavioural changes

Added German translations for competition validation messages

Users will now see error messages in German for specific competition-related validation failures, including minimum submission and voting periods, malformed email addresses, and file existence checks. This completes the German localization for the new competition domain, ensuring that users receive appropriate feedback in their preferred language when these specific domain constraints are violated.

src/i18n-support/src/main/resources · high confidence

Added internationalization support for API translations

Users can now receive domain validation errors in their preferred language. This is enabled by a new i18n support module that provides a \TranslationService\ for resolving messages via a \ResourceBundleMessageSource\, a \RequestParameterAcceptHeaderLocaleResolver\ that respects a \locale\ query parameter, and a \MessageKeys\ class defining keys for competition and photo-related errors.

src/i18n-support/src/main/java/engineering/everest/lhotse/i18n · high confidence

Axon framework configuration refactored to use Jackson serialization and JPA stores

The Axon configuration has been updated to use Jackson for event serialization via a new CryptoShreddingSerializer, replacing the previous default. Additionally, the configuration now explicitly registers a TrackingEventProcessor, configures JPA-based stores for Saga and Token management, and sets up command message interceptors for validation and logging.

src/axon-support/src/main/java/engineering/everest/lhotse/axon/config · medium confidence

Axon support classes migrated to new package structure with Java 17 updates

The Axon framework support classes, including the command and message handler interceptors, have been moved from the 'starterkit' package to the 'lhotse' package, reflecting a reorganization of the codebase. The Java source files were also updated to use Java 17 features, such as the 'toList()' method on streams, and replaced the 'javax.validation' imports with 'jakarta.validation' to align with modern Java EE/Jakarta EE standards. These changes ensure the Axon integration components are correctly located and compatible with the updated Java and validation frameworks.

src/axon-support/src/main/java/engineering/everest/lhotse/axon · medium confidence

Centralized exception handling for API errors

The REST API now uses a dedicated controller advice to standardize error responses. Validation failures, missing aggregates, and command execution issues are all caught and returned as structured JSON errors containing a status, message, and timestamp. This replaces the previous ad-hoc exception handling, ensuring consistent error formatting across the API.

src/api/src/main/java/engineering/everest/lhotse/api/rest · high confidence

Improved command validation with internationalized error messages

Command validators now use internationalized error messages for better user feedback. The EmailAddressValidator was moved to the new package structure and updated to throw TranslatableIllegalArgumentException with a specific message key (EMAIL\_ADDRESS\_MALFormed) instead of a generic string. A new FileStatusValidator was added to validate file existence, throwing a TranslatableIllegalStateException with the FILE\_DOes not exist message key. These changes ensure that validation failures provide clear, localized error messages to users.

src/command-validation-support/src/main · high confidence

Introduced domain models and commands for the new competition feature

Added new domain classes for the competition feature: Competition, CompetitionEntry, and CompetitionWithEntries, along with the CreateCompetitionCommand to initiate a new competition. The legacy PersistableThumbnail class was removed and replaced with a new CompetitionWithEntriesQuery to support querying competition data with its associated entries.

src/competitions-api/src/main/java/engineering/everest/lhotse/competitions/domain · high confidence

Introduces command validation interfaces and restructures package hierarchy

Adds the core interfaces for command validation: ValidatableCommand and Validates, enabling commands to be validated before execution. Additionally, existing command interfaces (EmailAddressValidatableCommand, FileStatusValidatableCommand) are moved from the 'starterkit' to the 'lhotse' package, and the FileStatusValidatableCommand is renamed to better reflect its purpose.

src/command-validation-api · medium confidence

Migrate API security to Keycloak OAuth2 and centralize configuration

The API's security model has been updated to use Keycloak for authentication, replacing the previous JWT signing approach. A new WebSecurityConfig enforces authentication for /api/\\ endpoints and permits public access to version, actuator, and Swagger UI paths. A KeycloakJwtGrantedAuthoritiesConverter extracts roles and scopes from JWTs to map to Spring Security authorities. Additionally, global CORS, OpenAPI documentation (springdoc), and Jackson ObjectMapper settings are now explicitly configured in dedicated config classes.

src/api/src/main/java/engineering/everest/lhotse/api/config · high confidence

Migrate database schema to Liquibase and configure Spring Boot 3.0 JPA

The database-support module now uses Liquibase for schema management, introducing a new \DatabaseConfig\ Java configuration class that sets up the \EntityManagerFactory\, transaction manager, and data source beans for Spring Boot 3.0. Additionally, a new \lhotse.xml\ changelog file defines the initial database schema, creating tables for users, photos, competitions, and internal Axon framework structures, replacing previous schema management approaches.

src/database-support · medium confidence

New API response models for photo competition features

The API now exposes new response models to support photo competition functionality. A new ApiErrorResponse class provides a standard format for error responses, including status, message, and timestamp. New classes CompetitionEntryFragment, CompetitionSummaryResponse, and CompetitionWithEntriesResponse define the structure for competition data, including submission details, voting status, and entry lists. Additionally, the previous UserResponse class has been renamed to PhotoResponse and repurposed to represent photo upload metadata (filename and upload timestamp) rather than user profile data.

src/api/src/main/java/engineering/everest/lhotse/api/rest/responses · high confidence

Removal of FileService interface

The FileService interface, previously located in the file-service-api module, has been removed. This interface defined methods for creating temporary files, and transferring data to permanent and artifact stores. Its removal indicates that the file handling logic has been extracted into a separate library, as suggested by the commit messages.

file-service-api · medium confidence

Removal of Hazelcast-based distributed command handling

The Hazelcast-based distributed command implementation has been removed from the Axon support module. This change deletes the \HazelcastCommandGateway\ and related classes (\AxonDistributableCommand\, \AxonDistributableCommandCallback\, \HazelcastApplicationContextHolder\, \KubernetesAwareHazelcastHealthIndicator\) that facilitated remote command execution via a Hazelcast cluster. Corresponding configuration classes (\AxonHazelcastConfig\, \AxonConfig\) and their associated unit tests have also been removed, simplifying the command handling architecture.

axon-support · high confidence

The security-support-api module has removed the AuthenticationContextProvider interface and the AuthenticationFailureException class. These components, previously located in the engineering.everest.starterkit.axon.security package, are no longer part of the API, which may affect any code relying on these specific authentication context or failure handling mechanisms.

security-support-api · medium confidence

Removal of common domain models and read service infrastructure

The common module has removed several core domain classes and interfaces, including the User entity, the Role enum, the Identifiable and Referencable interfaces, and the PasswordEncoder interface. Additionally, the ReadService interface and its DefaultReadServiceProvider implementation have been deleted, along with their associated unit tests. This eliminates the generic read-service lookup mechanism and associated domain abstractions from the shared codebase.

common · high confidence

Removal of hardcoded configuration files and metadata

The launcher module has removed several configuration files that previously defined default values and environment-specific settings. Specifically, the \additional-spring-configuration-metadata.json\ file, which exposed properties like JWT secrets and admin credentials, has been deleted. Additionally, the \application.properties\ file, which contained hardcoded database URLs, Axon serializer settings, and health check configurations, has been removed. The \application-prod.properties\ and \application-standalone.properties\ files, which defined database connections for PostgreSQL and H2 respectively, have also been deleted. This change eliminates the inclusion of sensitive default credentials and environment-specific database configurations in the launcher's resources.

launcher/src/main/resources · high confidence

Removal of internal file storage implementation

The internal file storage implementation, including the \DeduplicatingFileStore\ interface, \DefaultFileService\, and associated persistence classes, has been removed from the file-service. This change reflects the extraction of the file store logic into a separate library, meaning the service no longer contains the concrete logic for handling file uploads and storage.

file-service · high confidence

Removal of legacy organization persistence and read service

The \organizations-persistence\ module has removed the legacy MongoDB-based organization storage and querying layer. Specifically, the \Address\, \OrgAdminUser\, \PersistableOrganization\ entities, the \OrganizationsRepository\, and the \DefaultOrganizationsReadService\ implementation have all been deleted. Corresponding integration tests and MongoDB test configuration have also been removed, indicating a shift away from this specific persistence implementation.

organizations-persistence · high confidence

Removal of media thumbnail generation and persistence code

The \media-support\ module has removed the \DefaultThumbnailService\ and its associated persistence classes (\PersistableThumbnailMapping\, \ThumbnailMappingRepository\) and their integration tests. This change reflects the extraction of the media thumbnail functionality into a separate library, meaning the local implementation and its tests are no longer part of this codebase.

media-support · high confidence

Removed AdminProvisionTask component

The AdminProvisionTask component, which previously handled the automatic creation of an initial admin user account, has been removed from the launcher module. This eliminates the automatic admin account provisioning logic from the application startup process.

launcher/src/main/java · high confidence

Removed MongoDB-based OAuth2 token persistence

The MongoDB-based implementation for storing and retrieving OAuth2 access and refresh tokens has been removed. This includes the deletion of the \MongoTokenStore\ implementation, the \OAuth2Serializer\ for serializing token data, the \TokenKeyGenerator\ for creating token keys, and the associated Spring Data repository interfaces (\OAuthAccessTokenRepository\, \OAuthRefreshTokenRepository\) and their corresponding entity classes (\PersistableOAuthAccessToken\, \PersistableOAuthRefreshToken\). Consequently, the application will no longer persist OAuth2 tokens in MongoDB.

security-support-persistence · high confidence

Removed legacy Axon-based organization domain model

The organization domain model, including the \OrganizationAggregate\, \OrganizationContactDetails\, and associated event classes, has been removed from the codebase. This change eliminates the previous event-sourcing implementation for organizations, along with the corresponding repository configuration and service layer, as the system migrates away from the Axon framework for this domain.

organizations · high confidence

Removed legacy Axon-based user management implementation

The legacy Axon-based user management implementation has been removed. This includes the removal of the \UserAggregate\ domain model, associated commands (\CreateUserCommand\, \UpdateUserDetailsCommand\), domain events, and the \UsersEventHandler\ that synchronized state to the database. On the API side, the \AuthServerUserReadService\ and \UsersReadService\ interfaces were deleted, along with the \UsersService\ interface and its \DefaultUsersService\ implementation. Corresponding unit tests for the aggregate, event handler, and service layer were also removed.

users, users-api · high confidence

Removed legacy PostgreSQL DDL script

The file launcher/db-scripts/docker-postgres-ddl.sql, which contained raw SQL statements for tables like domain\_event\_entry and saga\_entry, has been removed. This change aligns with the introduction of JPA interfaces and Liquibase for managing database schemas, indicating a shift from manual SQL scripts to an automated schema management approach.

launcher/db-scripts · high confidence

Removed organization command and service interfaces

The command-validation-api module no longer includes the \ValidatableCommand\ interface and its specific implementations (\OrganizationStatusValidatableCommand\, \UserUniqueEmailValidatableCommand\, \UsersBelongToOrganizationValidatableCommand\, and \Validates\). Additionally, the organizations-api module has removed the \RegisterOrganizationCommand\ and \UpdateOrganizationCommand\ classes, along with the \OrganizationsService\ and \OrganizationsReadService\ interfaces. The \ThumbnailService\ interface in the media-support-api has also been removed. These changes indicate a restructuring or removal of the organization management and command validation infrastructure.

command-validation-api, media-support-api, organizations-api · high confidence

Removed user and organization validation and persistence components

The system has removed several command validation components, including validators for organization status, user membership, and unique email addresses, along with the associated user persistence layer (MongoDB repository, entity, and read services). This eliminates the ability to validate commands against these specific user and organization states and removes the direct database access for user data.

command-validation-support, users-persistence · high confidence

Updated Jupyter notebook to demonstrate Keycloak integration

The starter-example.ipynb notebook has been migrated to Python and updated to demonstrate integration with Keycloak. The notebook now includes code for setting up a Keycloak admin client, creating an application admin user, assigning realm roles, and simulating user self-registration and login flows using the Keycloak Python client library.

doc/notebook/files · medium confidence

Test coverage

Added and updated tests for command validation; Added integration tests for competition persistence services; Added integration tests for photo persistence services; Added tests for CORS configuration and updated test infrastructure; Added unit tests for Axon command validation interceptor; Added unit tests for Axon replay functionality; Added unit tests for Keycloak JWT authority conversion; Added unit tests for REST controllers; Added unit tests for REST exception handling; Added unit tests for the i18n TranslationService; Removed obsolete test helpers and functional tests.

Dependencies

Migrate build system to Spring Boot 3.3 and Java 17

The project has been upgraded to Spring Boot 3.3.0 and Java 17, requiring a corresponding update to the Gradle build configuration. This includes updating the Spring Boot version, upgrading the Java toolchain, and modernizing the build script by replacing the Spring Boot Gradle plugin with the Spring Boot BOM and removing legacy IDE facet generation. Additionally, the build now enforces code formatting via Spotless and integrates SonarQube for code coverage reporting.

(dependencies) · high confidence

Upgrade Gradle wrapper to version 8.8

The Gradle wrapper has been upgraded from version 6.0.1 to 8.8. This update includes configuration changes such as setting a network timeout and enabling distribution URL validation, which may affect how the project builds and manages dependencies.

gradle · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 65 → 61 (-4.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (-0.2)
  • Architecture 100 → 84 (-15.8)
  • Maturity 62 → 61 (-1.4)
  • Readiness 57 → 53 (-3.5)
  • Security 61 → 60 (-1.0)
  • Domain Modelling 100 → 73 (-27.4)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (12)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Duplicated block (6 lines × 2) (src/axon-support/src/main/java/engineering/everest/lhotse/axon/replay/ReplayMarkerAwareTrackingEventProcessorBuilder.java)
  • Further orphaned files (smaller)
  • No exposed public API
  • Secret: generic-api-key (doc/notebook/files/starter-example.ipynb)
  • Secret: generic-api-key (doc/notebook/files/starter-example.ipynb)
  • Secret: generic-api-key (doc/notebook/files/starter-example.ipynb)
  • Secret: jwt (doc/notebook/files/starter-example.ipynb)
  • Secret: jwt (doc/notebook/files/starter-example.ipynb)
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (77)

  • Coverage not measured — no coverage collector is wired up
  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Dormant codebase
  • Duplicated block (15 lines × 2) (src/i18n-support/src/main/java/engineering/everest/lhotse/i18n/exceptions/TranslatableIllegalArgumentException.java)
  • Duplicated block (9 lines × 2) (src/axon-support/src/main/java/engineering/everest/lhotse/axon/replay/ReplayMarkerAwareTrackingEventProcessorBuilder.java)
  • Leaked secret: hardcoded-credential (.env)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • Medium IaC: WD-COMPOSE-0002 (docker-compose.yml)
  • No ADRs found
  • No assertions: adminsCanCreateCompetitions (src/api/src/test/java/engineering/everest/lhotse/api/rest/controllers/CompetitionsControllerTest.java)
  • No assertions: allControllerHandlerMethodsHaveMatchingAnnotationAndSignature (src/api/src/test/java/engineering/everest/lhotse/api/rest/controllers/CustomSecurityAnnotationConsistencyTest.java)
  • No assertions: applicationIsAbleToStart (src/launcher/src/test/java/engineering/everest/lhotse/functionaltests/scenarios/ApplicationFunctionalTests.java)
  • No assertions: canTriggerReplayEvents (src/launcher/src/test/java/engineering/everest/lhotse/functionaltests/scenarios/ReplayFunctionalTests.java)
  • No assertions: checkForFilesMarkedForDeletionToCleanUp_WillDoNothingWhenAnotherInstanceHasAcquiredLock (src/launcher/src/test/java/engineering/everest/lhotse/tasks/PeriodicFilesMarkedForDeletionRemovalTaskTest.java)
  • No assertions: commandValidatingMessageHandlerInterceptorWillBeRegistered (src/launcher/src/test/java/engineering/everest/lhotse/functionaltests/scenarios/ApplicationFunctionalTests.java)
  • No assertions: competitionSummariesCanBeListed (src/api/src/test/java/engineering/everest/lhotse/api/rest/controllers/CompetitionsControllerTest.java)
  • No assertions: competitionsCanBeRetrievedInFull (src/api/src/test/java/engineering/everest/lhotse/api/rest/controllers/CompetitionsControllerTest.java)
  • …and 57 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

everest-engineering/lhotse was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit b18dc942f161b94940fe2be16616f3bd4be0495f — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-fa71c66cabd8.