Skip to content
CAI
Software that uses CAICheck a score

KyoheiG3/Plan

66.1

Adequate · 21 September 2026

3.9k

lines of production code

Swift

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is a state management and dispatching architecture for iOS and macOS applications, centered around the 'Plan' framework. It provides a structured approach to managing application state and actions through an Interactor, Dispatcher, and Store, supporting concurrent action dispatching and thread-safe state updates. The system includes example projects demonstrating clean architecture and UI cataloging, along with comprehensive testing infrastructure via fastlane and unit tests.

Features

Add iOS RAC example app with UI catalog and snapshot tests

A new iOS example application built with ReactiveCocoa (RAC) and ReactiveSwift is added, providing a complete reference implementation of the architecture. The example includes multiple view controllers (Entrance, Home, Login, MyPage, UserEdit) with their corresponding use cases, presenters, and UI components. A Catalog app is introduced to showcase all UI components via Playbook scenarios, enabling visual regression testing through snapshot tests that capture UI states across different devices and user conditions.

Examples/Example-iOS-RAC · high confidence

Added Plan example project with clean architecture structure

A new example project has been added to demonstrate a clean architecture implementation using the Plan framework. The entry includes a README.md file that explains the project's structure, which is divided into two apps (Example.app and Catalog.app) and five frameworks (Presentation, Gateway, UseCase, Component, and Domain). The architecture enforces dependency isolation by limiting Component to Boundary and Entity, facilitating easier testing. A plan.pu file provides a visual representation of the dependencies between these layers.

Examples · high confidence

Added Xcode project and test scheme for the Plan framework

The Plan.xcodeproj project file, workspace configuration, and run scheme have been added to the repository. This establishes the build configuration for the Plan framework and its associated unit tests (including Executor, Atomic, Dispatcher, Translator, Interactor, and Presenter), enabling developers to build and run the test suite directly within Xcode.

Plan.xcodeproj · high confidence

Added fastlane configuration for iOS testing

The fastlane directory now includes an Appfile and a Fastfile that define an iOS build lane named 'run\_project\_tests'. This lane executes tests using fastlane's scan tool, targeting the 'Plan' scheme on an iPhone 11 Pro device. A README.md has also been added to document the available fastlane actions.

fastlane · high confidence

Introduce Plan architecture for state management and dispatching

Added a new Plan module providing a structured approach to managing application state and actions. This includes an Interactor base class for handling actions, a Dispatcher system that routes actions through a Translator to update a Store, and an Executor for managing asynchronous work on specific queues (immediate, main thread, or custom). The architecture supports multiple interactors dispatching actions concurrently, with thread-safe state updates via the Atomic wrapper and queue-based execution.

Plan · high confidence

Behavioural changes

Default Swift and deployment target settings for new Plan project

A new configuration file, Plan.xcconfig, has been added to the Support Files directory. This file establishes the default build settings for the Plan project, specifically setting the Swift version to 5.0 and defining deployment targets for iOS (10.0), macOS (10.12), tvOS (10.0), and watchOS (3.0). It also explicitly lists the supported platforms, ensuring consistent build environments across Apple ecosystems.

Support Files · high confidence

Test coverage

Initial test suite for the Plan architecture

Added comprehensive unit tests for the Plan architecture, covering the core components: Atomic operations, Dispatcher, Executor, Interactor, Presenter, and Translator. The test suite includes mock implementations for testing the flow of actions through the system, ensuring that dispatching actions correctly triggers translations and store updates.

PlanTests · high confidence

Dependencies

Added Swift Package Manager and CocoaPods support for the Plan library

The Plan library is now available via Swift Package Manager and CocoaPods, enabling easier integration into iOS, tvOS, and macOS projects. The Swift Package Manager configuration defines the Plan target and its dependencies, while the CocoaPods podspec specifies version 0.2.1 and sets deployment targets for iOS, tvOS, macOS, and watchOS.

(dependencies) · 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 69 → 66 (-3.0)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 95 (-4.7)
  • Architecture 100 → 97 (-2.5)
  • Maturity 62 → 66 (+4.0)
  • Readiness 57 → 53 (-3.8)
  • Security 92 → 85 (-7.1)

Resolved (8)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • No exposed public API
  • Test reliability not included
  • The overview section describes a single ideal processing flow diagram but does not explain how the five main types (Interactor, Dispatcher, Store, Translator, Presenter) fit together in the actual architecture. (README.md)
  • complexity unreadable for .swift — churn × complexity hotspots could not be measured
  • early-stage repository — too little history to judge knowledge freshness
  • single-maintainer — knowledge-concentration (bus factor) risk

New (54)

  • Ambiguous constructor overloading for AnyDispatcher. One initializer takes a generic D (likely a concrete dispatcher type), and the other takes a closure. This creates confusion about whether D is a type-erased wrapper or a concrete implementation. If D is meant to be any type conforming to a protocol, the signature should explicitly state the constraint (e.g., init<D: Dispatcher>(_ dispatcher: D)). The current signature init(D) is syntactically incomplete in Swift (missing generic constraint or type alias definition context), suggesting a potential API design flaw where the intent of D is unclear compared to the explicit closure initializer.
  • Coverage not measured — Swift suite
  • Dependency hygiene PARTLY measured — SwiftPM pinning read, dependency currency NOT established
  • Documentation: no architecture or design documentation (README.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (10 lines × 2) (Examples/Example-iOS-RAC/Catalog/SceneDelegate.swift)
  • Duplicated block (10 lines × 2) (Examples/Example-iOS-RAC/Gateway/Repositories/UserRepository.swift)
  • Duplicated block (11 lines × 2) (Examples/Example-iOS-RAC/Component/Components/MyPage/MyPageViewController.swift)
  • Duplicated block (11 lines × 2) (Examples/Example-iOS-Rx/Component/Components/Home/HomeViewController.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Component/Components/Home/HomeViewController.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Component/Components/Login/LoginViewController.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Component/Components/MyPage/Entities/MyPageItem.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Component/Components/MyPage/MyPageViewController.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Component/Components/User/Edit/UserEditViewController.swift)
  • Duplicated block (12 lines × 2) (Examples/Example-iOS-RAC/Example-iOS-RAC/Router/TabRouter.swift)
  • Duplicated block (14 lines × 2) (Examples/Example-iOS-RAC/Component/Components/TabBarController.swift)
  • Duplicated block (17 lines × 2) (Examples/Example-iOS-RAC/Catalog/Scenarios/HomeScenarios.swift)
  • Duplicated block (17 lines × 2) (Examples/Example-iOS-RAC/Catalog/SceneDelegate.swift)
  • Duplicated block (17 lines × 4) (Examples/Example-iOS-RAC/UseCase/Components/Home/HomeInteractor.swift)
  • …and 34 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

KyoheiG3/Plan 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 49f53128eac924d9723b31ee4b0240d62bd0e12d — 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-b84573e22831.