Skip to content
CAI
Software that uses CAICheck a score

Naveentp/Clean-MVVM-NewsApp

50.0

Weak · 21 September 2026

662

lines of production code

Kotlin

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Introduces local caching for news articles using Room

The application now persists and retrieves news articles locally using a new Room-based cache layer. This includes a database factory, a data access object for article operations, and a mapper to convert between domain models and database entities. The cache implementation has been updated to use these new components, enabling offline storage and retrieval of top headlines, along with a check to see if articles are cached.

cache · high confidence

Behavioural changes

Automatic API key injection and test coverage for remote layer

A new NewsInterceptor now automatically appends the API key as a query parameter to every remote request, removing the need to manually include it in API endpoints. The NewsRemoteImpl implementation was also updated to use RxJava's Observable instead of Flowable, and unit tests were added to verify the remote layer's behavior.

remote · high confidence

News data layer refactored to support offline caching

The data layer for news has been refactored to implement an offline-first strategy. The repository now checks network availability and local cache status to determine whether to fetch data from the remote API or serve it from the local database. This change introduces new methods to save and delete cached headlines and updates the reactive stream types from Flowable to Observable across the data and repository interfaces.

data · medium confidence

Redesigned home screen with new UI components and network checks

The app's home screen has been rebuilt to display a scrollable list of news articles. This change introduces a new \NewsListActivity\ and \NewsListAdapter\ to render article titles, descriptions, and images using a \RecyclerView\. A \NetworkUtil\ utility was added to check for active internet connectivity, and the \AndroidManifest\ was updated to request \INTERNET\ and \ACCESS\_NETWORK\_STATE\ permissions. Additionally, the app's theme colors were updated to a blue/purple palette, and the \NewsInterceptor\ was integrated into the \OkHttpClient\ to automatically append the \API\_KEY\ to all network requests.

app/src · high confidence

Removal of default nullability for Resource.Success data

The \Resource\ sealed class in the presentation layer has been updated so that the \data\ property in \Resource.Success\ is now non-nullable. This change removes the previous allowance for null values in the success state, meaning consumers of this API must handle the presence of data rather than checking for null. Additionally, the default example test files for both instrumented and unit tests have been removed from the presentation module.

presentation · high confidence

Simplified NewsDetails data model

The NewsDetails class has been simplified by removing the status, articles, and totalResults fields, leaving only the articles list. Within the Article class, all string fields (author, title, description, url, urlToImage, publishedAt, content) are now nullable, reflecting a change in how news data is structured and potentially handling missing values more gracefully.

shared · medium confidence

Test coverage

Domain layer tests added and RxJava types updated

Added unit tests for the domain layer, including a test for the NewsDetailsUseCase and a data factory for test fixtures. Additionally, the NewsRepository and NewsDetailsUseCase were updated to return Observable instead of Flowable.

domain · high confidence

Dependencies

Updated build dependencies and test configurations

The project has upgraded the Kotlin version from 1.3.21 to 1.3.31 and increased the minimum SDK version from 15 to 16. New dependencies for CardView, RecyclerView, Picasso, and Debug-DB have been added to the app module. The remote module now exposes Retrofit, its Gson converter, and the RxJava2 adapter as API dependencies, while the app module changes the remote dependency from implementation to api. Additionally, test dependencies such as JUnit, Mockito-Kotlin, AssertJ, Robolectric, and various AndroidX test libraries have been added across the domain, cache, and remote modules.

(dependencies) · medium 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 55 → 50 (-4.8)
  • Rubric changed (rubric-2026.08.18 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 100 → 88 (-12.0)
  • Maturity 61 → 61 (+0.0)
  • Readiness 24 → 24 (+0.0)
  • Security 97 → 100 (+2.5)
  • Domain Modelling 100 → 70 (-30.3)

Resolved (10)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • Medium: security finding (details withheld)
  • No exposed public API
  • Test reliability not included
  • The steps to build the app mention Retrofit2 and NewsApi but do not state which HTTP method (GET/POST) the news endpoint requires, a detail that matters for mocking and testing. (README.md)
  • early-stage repository — too little history to judge knowledge freshness
  • git history depth insufficient
  • git history depth insufficient
  • single-maintainer — knowledge-concentration (bus factor) risk

New (5)

  • Dependency hygiene PARTLY measured — Maven/Gradle declarations read, no dependency graph resolved
  • Documentation: no contributor guidance (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • No ADRs found

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

Survey your own repository

Naveentp/Clean-MVVM-NewsApp 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 91bdcca01adc923e2d43bb551335e0e1c7318487 — 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-28e75b8e3254.