Skip to content
CAI
Software that uses CAICheck a score

technicalpickles/homesick

60.0

Adequate · 19 September 2026

726

lines of production code

Ruby

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

Homesick is a Ruby library and CLI tool for managing dotfiles, now refactored into a modular architecture that decouples core logic from command-line handling. It provides capabilities to clone, link, and list dotfile repositories (referred to as 'castles') while enforcing safer symlink conflict resolution and restricted evaluation contexts for user configuration scripts. The system requires Ruby 3.2+ and Git 1.8.0, utilizing a modern toolchain for testing and security scanning.

Architecture

Homesick restructured from a Thor CLI class to a modular library

The core \Homesick\ class has been refactored from a Thor-based command-line interface into a standard Ruby module, removing the built-in CLI commands (such as clone, link, and list) and external dependencies like Thor. This change shifts the responsibility of command-line handling to a new \Homesick::CLI\ class and organizes functionality into separate modules for file and git actions, effectively decoupling the library's logic from its interface.

lib · high confidence

Behavioural changes

CLI entry point refactored to use Homesick::CLI

The bin/homesick script now instantiates the command-line interface via the new Homesick::CLI class instead of calling the global Homesick.start method. This change also adds a frozen\_string\_literal pragma and corrects a redundant $LOAD\_PATH.unshift call, ensuring the CLI is properly initialized through the extracted module structure.

bin · high confidence

Homesick 2.0.0: Ruby 3.2+ requirement and breaking .homesickrc DSL migration

This release upgrades the minimum supported Ruby version to 3.2, dropping support for all 2.x and 3.0/3.1 releases. It introduces a breaking change to the \.homesickrc\ configuration system: files can no longer be evaluated in the CLI scope; instead, they must use the new \Homesick::RC::Context\ DSL, replacing direct CLI method calls with \castle\_path\ and \run\. Additionally, the Thor dependency is pinned to version 1.0, and CI has moved from Travis CI to GitHub Actions with added mutation testing.

(repo-wide) · high confidence

Homesick v2.0.0: CLI extraction and safer .homesickrc evaluation

Homesick has been updated to version 2.0.0, introducing a dedicated \Homesick::CLI\ class to manage command-line interface logic and enforcing a minimum Git version for operation. A significant behavioral change occurs in the \homesick rc\ command: \.homesickrc\ scripts are now evaluated within a restricted \Homesick::RC::Context\ object rather than the main CLI binding, preventing scripts from accessing internal CLI state while retaining access to standard Ruby methods. Additionally, the \rc\ command now supports a \--force\ option to bypass the interactive confirmation prompt, and the \clone\ command accepts an optional destination argument to specify the clone target directory.

lib/homesick · high confidence

The file and git operations have been extracted into new \FileActions\ and \GitActions\ modules. This change introduces stricter symlink conflict resolution: when a destination already exists, the system now explicitly checks for collisions and requires user acceptance before overwriting, rather than proceeding silently. Additionally, a minimum Git version (1.8.0) is now enforced, and all destructive file actions (such as moving, removing, or linking) correctly respect the \--pretend\ flag to prevent actual changes during dry runs.

lib/homesick/actions · high confidence

Test coverage

Added comprehensive RSpec test suite for CLI, RC context, and test helpers

This change introduces a robust test coverage layer for the Homesick CLI and its RC execution context. It adds \spec/homesick\_cli\_spec.rb\ to verify CLI behavior, including smoke tests, Git version validation, and various clone URL formats (GitHub, SSH, HTTP, file URIs, and host aliases). It also adds \spec/homesick\_rc\_spec.rb\ to ensure the RC context correctly executes shell commands and isolates the evaluation environment from CLI methods. The \spec\_helper.rb\ is updated to use RSpec's \expect\ syntax, integrates \test\_construct\ for temporary directory management, and provides a \given\_castle\ helper to simplify test setup for castle operations.

spec · high confidence

Dependencies

Initialize homesick 2.0.0 with modern Ruby tooling and security scanning

The project is initialized as version 2.0.0, requiring Ruby 3.2 or later. The dependency structure is modernized: the runtime dependency is pinned to Thor (\~\> 1.0), and development dependencies now include RSpec (\~\> 3.0), RuboCop, Mutant for mutation testing, and Bundler-audit for security scanning. The legacy Jeweler build tool and Rcov coverage tool have been removed in favor of this standard, up-to-date toolchain.

(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

Baseline

  • First survey — no prior run to compare against. CAI 60.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 50
  • Readiness 69
  • Security 65

Changes since last survey

  • 300 commits — 248 feature/other, 52 fixes

By area

  • (root) — 112 commits
  • (repo) — 80 commits
  • lib/homesick — 68 commits
  • lib/homesick.rb — 13 commits
  • .github/workflows — 9 commits
  • spec/homesick_spec.rb — 8 commits
  • spec/homesick_cli_spec.rb — 6 commits
  • spec/spec_helper.rb — 4 commits

Notable commits

  • fix: Add Ruby 2.2 & 2.3 to Travis config and fix GEM dependencies
  • fix: Add test for parens in filenames, and fixed
  • fix: Applied fixes that allow tests to pass again.
  • fix: Apply fixes suggested by Rubocop.
  • fix: Attempt to fix merge conflict.
  • fix: Bug fix to cover cases where homes are symlinked.
  • fix: Bug fix to make sure git check works properly.
  • fix: Coding standards fixes based off of Rubocop and minor edits to make logic flow easier to understand.
  • fix: Fix #177: respect --pretend flag in all destructive file actions
  • fix: Fix #65: document the generate command in README
  • fix: Fix CI badge to point to upstream repo
  • fix: Fix RuboCop Style/IfUnlessModifier and LineLength offenses
  • fix: Fix RuboCop: sort bundler-audit dependency alphabetically
  • fix: Fix Style/IfUnlessModifier in file_actions.rb
  • fix: Fix a few more syntax-related rubocop issues manually
  • fix: Fix a minor code style issue where "do" wasn't on the same line as its params
  • fix: Fix all 66 RuboCop offenses
  • fix: Fix an issue reported by rubocop that wasn't ignored in the todo config
  • fix: Fix default option value type warning
  • fix: Fix rubocop issues for some recently merged code
  • …and 280 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

technicalpickles/homesick 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 19 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 a57780d98cb02f8d3585548197a5ed66089f008f — 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-13a154b7f5d1.