# Changelog

## Score

- CAI 63 → 60 (-2.8)
- Rubric changed (rubric-2026.10.1 → rubric-2026.10.5) — scores are not directly comparable.

## Lenses

- Code Health 81 → 86 (+4.3)
- Architecture 100 → 100 (+0.0)
- Maturity 56 → 49 (-6.5)
- Readiness 58 → 58 (+0.0)
- Security 74 → 74 (+0.0)

## Resolved (7)

- Duplicate functionality across modules. `CLI.UI` and `CLI.UI.Printer` both expose a `puts` method with identical signatures. `Printer` appears to be a dedicated class for this purpose, making the `UI` method redundant.
- Duplicate functionality across modules. `CLI.UI` and `CLI.UI.Prompt` both expose a `confirm` method with identical signatures. Since `Prompt` is a submodule of `UI`, this suggests either redundant code or confusing API surface where users don't know which module to use.
- Duplicate functionality across modules. `CLI.UI` and `CLI.UI.Prompt` both expose an `any_key` method with identical signatures. This mirrors the `confirm` inconsistency.
- Duplicate functionality across modules. `CLI.UI` and `CLI.UI.Prompt` both expose an `ask` method with identical signatures. This is the most complex method in the API, and having it in two places increases maintenance burden and user confusion.
- Fork-triggerable workflow runs with an unscoped write token
- Inconsistent naming for lookup operations. `Glyph`, `Color`, `FrameStyle`, and `Widgets` use a class-level `lookup` method, while the top-level `UI` module exposes a `glyph` method that likely performs a similar lookup but is named after the object type rather than the action. This creates two different entry points for similar functionality.
- PR-triggered workflow without a permissions block

## New (23)

- Confusingly named/overlapping intent: Similar to colors, `UI.resolve_style` and `FrameStyle.lookup` likely perform similar lookups. `UI.resolve_style` suggests a higher-level API, while `FrameStyle.lookup` is type-specific.
- Confusingly named/overlapping intent: `UI.resolve_color` likely takes a string/input and returns a color object or code, while `Color.lookup` takes a name and returns a Color object. It is unclear if `UI.resolve_color` is a higher-level wrapper that calls `Color.lookup` or if they serve different purposes (e.g., parsing vs. lookup).
- Documentation: no architecture or design documentation
- Duplicate intent: Both `UI` and `Prompt` expose an identical `any_key` method signature. This is a low-level blocking input operation duplicated across two types.
- Duplicate intent: Both `UI` and `Prompt` expose an identical `confirm` method signature. `Prompt` appears to be a specialized subset or facade for interactive input, yet it duplicates the high-level UI interaction method.
- Duplicate intent: Both `UI` and `Prompt` expose an identical, complex `ask` method signature. This is the most significant duplication, as `ask` is a core interactive feature.
- Duplicate intent: `Printer` is a distinct type that exposes the exact same `puts` signature as `UI`. `Printer` appears to be an internal implementation detail or a facade that duplicates the public API of `UI`.
- Fork-triggerable workflow runs with an unscoped write token (.github/workflows/cla.yml)
- Orphaned file (lib/cli/ui/ansi.rb)
- Orphaned file (lib/cli/ui/color.rb)
- Orphaned file (lib/cli/ui/formatter.rb)
- Orphaned file (lib/cli/ui/frame/frame_style/box.rb)
- Orphaned file (lib/cli/ui/frame/frame_style/bracket.rb)
- Orphaned file (lib/cli/ui/glyph.rb)
- Orphaned file (lib/cli/ui/progress.rb)
- Orphaned file (lib/cli/ui/progress_reporter.rb)
- Orphaned file (lib/cli/ui/prompt.rb)
- Orphaned file (lib/cli/ui/spinner.rb)
- Orphaned file (lib/cli/ui/truncater.rb)
- Orphaned file (lib/cli/ui/work_queue.rb)
- …and 3 more
