Skip to content
CAI
Software that uses CAICheck a score

ttscoff/doing

61.7

Adequate · 20 September 2026

32k

lines of production code

Ruby

with TypeScript

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a command-line time-tracking and activity logging tool called 'doing', designed to record and manage 'What Was I Doing' entries via a modular plugin-based architecture. It provides capabilities for adding, filtering, and archiving tasks with natural language date parsing, tag management, and interactive fuzzy-finding selection. The tool supports extensive data portability through a flexible plugin system for importing from sources like Calendar.app and exporting to formats such as CSV, JSON, and HTML.

How it got here

2014 — CLI architecture overhaul and plugin system

9 changes.

The project underwent a major architectural shift, replacing the monolithic CLI with a modular, plugin-based system and restructuring the core library for better configuration and extensibility. This period involved comprehensive refactoring of the codebase, expanded test coverage for task management commands, and the removal of legacy documentation and older package versions.

2016–2021 — Plugin ecosystem and shell integration

15 changes.

The project expanded its core functionality by introducing a modular plugin system for importing and exporting data in various formats, including CSV, JSON, and Day One. Significant effort was directed toward improving the user experience through comprehensive shell completion scripts for multiple environments and the addition of example commands and plugins. The period also saw the establishment of robust testing infrastructure, documentation, and automation for releases and encrypted file handling.

2022 — Modular architecture and CLI enhancements

11 changes.

This period focused on refactoring the core codebase into modular components, splitting monolithic classes in the WWID core, item management, and item models to improve maintainability. It also introduced significant feature additions, including a threaded test runner, a new interactive prompt system with fzf integration, and advanced changelog querying capabilities. Supporting infrastructure was expanded with new string, array, and time utility libraries, alongside Dockerfile updates for standardized testing environments.

Features

Add Dockerfiles for multiple Ruby versions and shell configuration files

New Dockerfiles have been added for Ruby versions 2.6, 2.7, 3.0, and 3.0.1, each configured to install Bundler 2.2.17, essential utilities (less, vim), and custom shell profiles (bash\_profile, inputrc) to enhance the interactive development experience. These containers are set up to run tests via scripts/runtests.sh, providing standardized environments for different Ruby versions.

docker · high confidence

Add fzf helper with build, release, and installation infrastructure

The lib/helpers/fzf directory now includes the full source and configuration for the fzf fuzzy finder, enabling its integration into the project. This addition provides a Makefile and .goreleaser.yml for building and releasing binaries across macOS (including Apple Silicon), Linux, Windows, and BSD, along with an install script that supports downloading pre-built binaries or building from source. It also includes shell key bindings and completion scripts for bash, zsh, and fish, as well as a Vim plugin and documentation (ADVANCED.md, BUILD.md, README.md).

lib/helpers/fzf · high confidence

Add man page documentation for the doing CLI

Added the \doing.1\ man page, along with its Ronn source (\doing.1.ronn\) and HTML output (\doing.1.html\), providing users with comprehensive documentation on the \doing\ command-line tool. The documentation covers global options, available commands (such as \now\, \later\, \done\, and \archive\), configuration via \\~/.doingrc\ (including per-folder configuration and template customization), and details on the TaskPaper-compatible file format used for storing entries.

man · high confidence

Add shell completion scripts for Zsh, Bash, Fish, and TypeScript (Fig)

Users of Zsh, Bash, Fish, and Fig-compatible shells (like iTerm2 or Warp) now receive built-in shell completion scripts for the \doing\ CLI. The \lib/completion\ directory introduces \\_doing.zsh\, \doing.bash\, \doing.fish\, and \doing.ts\, providing auto-completion for subcommands (such as \again\, \resume\, \archive\, \move\, \done\, \grep\, etc.) and their respective flags (like \--section\, \--tag\, \--search\, \--interactive\). This enables tab-completion for commands and arguments, significantly improving the interactive experience for users of these specific shells.

lib/completion · high confidence

Added threaded test runner with parallel execution and colored output

A new \ThreadedTests\ helper class has been added to \lib/helpers\ that allows running test files in parallel using configurable thread counts (defaulting to 8). It provides real-time progress bars for each test file via \tty-progressbar\ and \tty-spinner\, and includes a \ThreadedTestString\ module to highlight test failures and errors with colored formatting in the console output.

lib/helpers · high confidence

Initial repository scaffolding and documentation structure

The repository now includes essential configuration and documentation files to support development and usage. A \.gitignore\ file is added to exclude build artifacts, caches, and environment-specific files. Development tooling is standardized with \.rubocop.yml\ and \.rubocop\_todo.yml\ for code style enforcement, and \.travis.yml\ for CI testing across Ruby 2.6, 2.7, and 3.0. Documentation is restructured with a new \README.md\, \CHANGELOG.md\, \COMMANDS.md\, and \SECURITY.md\, while legacy RDoc files are removed. Additionally, a \doing.ts\ file provides Fig shell completion specifications, and an \example\_plugin.rb\ demonstrates how to create custom export plugins.

(repo-wide) · high confidence

New Wiki Export plugin for styled HTML output

Adds a new example plugin that exports task data into styled HTML pages. The plugin provides HAML templates and CSS to render individual wiki pages with tags, notes, and time intervals, as well as an index page listing tags with counts. Users can trigger the export via the 'wiki' command, and the output includes responsive styling and hover effects for better readability.

_lib/examples/plugins/wiki\export · high confidence

New array helper modules for tag handling, cleanup, and encoding

The \lib/doing/array\ directory now includes four new modules that extend Ruby's Array class with domain-specific utilities. \ArrayTags\ provides methods to convert between plain strings and \@tag\-prefixed strings, as well as highlighting tags for console output. \ArrayCleanup\ adds methods to remove nils, empty strings, whitespace-only strings, and other 'bad' values (like false or negative numbers) from arrays. \ArrayNestedHash\ allows converting an array of keys into a nested hash structure. \Array\ (the main module) includes helpers for forcing UTF-8 encoding and capitalizing the first letter of each element. These changes enhance how the application processes and formats array data, particularly for tag management and data sanitization.

lib/doing/array · high confidence

New example commands for autotagging, scheduling, and wiki generation

Added four new example commands in lib/examples/commands that extend the core tool's capabilities: autotag wraps the tag command to automatically apply tags based on filters and counts; later and todo provide shortcuts to add entries to specific sections ('Later' and 'Todo') with optional editor integration and note-taking; and wiki generates HTML documentation for tags by leveraging the wiki export plugin, writing output to a doing\_wiki directory. These commands serve as both functional utilities and implementation examples for plugin development.

lib/examples/commands · high confidence

New example plugins for importing Capture Thing data, exporting via macOS 'say', and hooking into post-write events

Three new example plugins are now available in lib/examples/plugins. The Capture Thing Import plugin allows users to import entries from a Capture Thing folder by triggering the 'cap' or 'capturething' command, handling deduplication and tag prefixing. The Say Export plugin enables speaking the most recent entry via macOS's 'say' command, supporting custom voices and templates through configuration. The Hooks plugin demonstrates registering post-write and post-entry-added hooks, including an example integration with Day One for entries tagged with a specific trigger.

lib/examples/plugins · high confidence

New export templates for Markdown, Day One, and HAML formats

Added new template files (lib/templates) to support exporting activity data in Markdown, Day One, and HAML formats. The Markdown and Day One templates provide structured lists of items with dates, titles, times, and notes, while the HAML template offers a styled HTML layout with responsive CSS for viewing activity logs.

lib/templates · high confidence

New import plugins for Calendar.app, Timing.app, Doing, and JSON formats

Users can now import task entries from external sources using four new import plugins. The Calendar.app plugin imports events from macOS Calendar into Doing, preserving titles, notes, and due times. The Timing.app plugin imports task data from Timing JSON reports, mapping project names to tags and setting completion times. The Doing plugin allows importing from existing Doing-formatted files, supporting updates to existing items and duplicate detection. The JSON plugin imports entries from Doing's own JSON export format, enabling data restoration or migration. All importers support filtering by search terms, date ranges, and tags, with options to add prefixes, apply autotagging, and prevent overlapping entries.

lib/doing/plugins/import · high confidence

New interactive prompt system with fzf integration

The \lib/doing/prompt\ directory now provides a comprehensive set of terminal interaction capabilities, replacing previous ad-hoc implementations. Users benefit from fuzzy-finding selection menus powered by \fzf\ (which is now automatically installed if missing), multi-line text input with Readline support and tab completion, and robust yes/no questioning. This refactoring standardizes how the application handles user input, ensuring consistent behavior across commands like \doing select\, \doing note\, and \doing list\.

lib/doing/prompt · high confidence

New plugin-based export system with multiple format options

The export functionality has been refactored into a modular plugin system, introducing dedicated export plugins for By Day (grouped daily totals), CSV, Day One (plist), Doing format, HTML, JSON (including a timeline view), Markdown, TaskPaper, and generic templates. Users can now export their task data into these specific formats, with the JSON export supporting both standard JSON and a timeline visualization, and the Day One export allowing import into the Day One journal app.

lib/doing/plugins/export · high confidence

New shell completion generators and release automation scripts

Added new Ruby scripts to generate shell completions for Bash, Fish, and Zsh, which parse the application's help output to provide context-aware tab completion for commands and options. Also introduced a \deploy.rb\ script that automates the release process, including version validation, running parallel tests, generating documentation, updating the wiki, and pushing git tags, all with visual progress feedback.

scripts · high confidence

New shell completion generators for Bash, Zsh, Fish, and Fig

The \lib/doing/completion\ directory now includes dedicated generators for Bash, Zsh, Fish, and Fig (Zsh-compatible) shell completions. These new Ruby classes (\BashCompletions\, \ZshCompletions\, \FishCompletions\, \FigCompletions\) dynamically parse the CLI's help sections and command options to produce accurate, context-aware tab-completion scripts for each supported shell environment, replacing or supplementing previous manual or limited completion logic.

lib/doing/completion · high confidence

New string utility modules for highlighting, tagging, and formatting

The \lib/doing/string\ directory now includes dedicated modules for enhanced string processing. \StringHighlight\ adds ANSI colorization for @tags and search result matching, while \StringTags\ provides robust methods to add, remove, rename, and deduplicate tags in task strings. \StringQuery\ introduces fuzzy search, wildcard support, and phrase/boolean query parsing. Additionally, \StringTransform\ and \StringTruncate\ offer text wrapping, capitalization, pluralization, and flexible truncation strategies, and \StringURL\ converts raw URLs into formatted links for HTML, Markdown, or terminal output.

lib/doing/string · high confidence

New time formatting and parsing library

The \lib/doing/chronify\ library has been introduced to handle time-related operations, providing methods to parse natural language dates and durations (e.g., '1d2h30m', 'yesterday 5:30pm') into time objects, and to format durations into human-readable strings (e.g., '2 years, 3 days') or compact formats (e.g., '2y 3d'). This includes support for converting seconds to days/hours/minutes, expanding date tags in strings, and splitting date ranges.

lib/doing/chronify · high confidence

Removals

Removal of generated RDoc documentation files

The \html/\ directory, which contained the generated RDoc documentation for the \doing\ CLI tool, has been completely removed. This includes the main index, class and module pages (such as \WWID\, \String\, and \Object\), the README, and associated assets like CSS and JavaScript files. Users will no longer have access to the local HTML documentation generated by RDoc 4.1.1.

html · high confidence

Removal of the 'doing' CLI tool

The 'doing' CLI application (version 0.1.1) has been removed from the package. This eliminates the ability to add, list, and manage 'What Was I Doing' reminders via the command line, including commands such as \now\, \recent\, \today\, and \archive\, as well as the underlying library logic for parsing TaskPaper-compatible files and managing user configuration.

pkg, pkg/doing-0.1.1 · high confidence

Architecture

Major CLI architecture overhaul and plugin system introduction

The \bin/doing\ entry point has been completely rewritten to replace the previous monolithic command structure with a modular plugin-based architecture. This change introduces a new plugin system (supporting export plugins), standardized input type normalization (for booleans, case sensitivity, age, order, and tag sorting), and environment-driven logging configuration via variables like \DOING\_LOG\_LEVEL\ and \DOING\_DEBUG\. The CLI now uses \GLI\ with specific help text wrapping and autocomplete settings, and initializes a new \Doing::WWID\ object alongside a dedicated logger, marking a significant shift in how the tool is structured and extended.

bin · high confidence

Refactored WWID core into modular components

The WWID (What Was I Doing) core logic has been split from a single monolithic class into distinct, focused modules: display, editor, filetools, filter, guess, interactive, modify, tags, timers, and utilities. This refactoring improves code organization and maintainability without changing user-facing behavior, as the public API and command-line interface remain unchanged.

lib/doing/wwid · high confidence

Refactored item management into modular sub-classes

The \lib/doing/items\ logic has been reorganized from a single monolithic class into five focused modules: \filter.rb\ (search, tag, and date filtering), \items.rb\ (core collection methods like ID lookup and serialization), \modify.rb\ (item deletion and updates), \sections.rb\ (section creation, deletion, and fuzzy matching), and \util.rb\ (deduplication, diffing, and tag aggregation). This structural change improves maintainability and clarity of the item handling capabilities without altering the external API surface.

lib/doing/items · high confidence

Behavioural changes

API documentation no longer displays source code for methods

The YARD template for method details has been updated to explicitly return nil for the source content. As a result, the generated API documentation will no longer include the raw source code snippets for methods, providing a cleaner view of the documentation without implementation details.

_yard\templates · high confidence

Added file mapping for encrypted build notes

A new mapping configuration file has been added to the .gitsecret paths directory, explicitly associating the 'buildnotes.md' file with the encryption system. This ensures that build notes are automatically encrypted when committed and decrypted when checked out, keeping sensitive build information secure in the repository.

.gitsecret · high confidence

Item model refactored into modular components with ID support

The core item representation has been restructured into separate modules for dates, tags, state, and queries, improving maintainability. Items now include a unique MD5-based identifier (accessible via the \id\ attribute) to support precise tracking and deduplication. The item model also supports multiple sections and provides enhanced search capabilities, including fuzzy matching and case-insensitive search options, allowing users to find entries more flexibly.

lib/doing/item · high confidence

Major codebase restructuring and new CLI capabilities

The \lib/doing\ library has been significantly refactored into a modular architecture, introducing new files for command options (\add\_options.rb\), configuration management (\configuration.rb\), and a hook system (\hooks.rb\). This change adds new user-facing capabilities, including a \--bool\ flag for combining tag filters with AND/OR/NOT logic, a \--template\ flag to override output formats with custom strings, and a \--back\ flag to backdate new entries. It also introduces a new \boolean\_term\_parser.rb\ for advanced query parsing and a \completion.rb\ module to generate shell completion scripts for Zsh, Bash, Fish, and Fig. The refactoring also includes a new \cli\_status.rb\ for improved terminal progress indicators and a \colors.rb\ module for enhanced ANSI color support in templates.

lib/doing · high confidence

Major library refactoring and expanded configuration capabilities

The core library has been significantly restructured, replacing the previous minimal setup with a comprehensive module that includes new configuration resolution, logging, and plugin management. Users benefit from improved configuration handling, including support for dot-separated keypaths and per-project configuration files, as well as enhanced logging capabilities and better integration with external tools via new dependencies like TTY libraries and YAML/JSON support.

lib · high confidence

Modularized command structure with new shell completion and changelog viewer

The CLI commands in bin/commands have been refactored into individual, modular files (e.g., again.rb, archive.rb, changes.rb) to improve maintainability. This change introduces a new \doing changes\ command for viewing version history with interactive and markdown support, and adds \doing completion\ subcommands to generate and install shell completion scripts for zsh, bash, and fish. Additionally, the \doing commands\ command now allows users to enable or disable specific CLI commands via configuration.

bin/commands · high confidence

New changelog querying and filtering capabilities

The changelog tool now supports advanced filtering and search. Users can filter changelog entries by type (changed, new, improved, fixed) using the \--only\ flag, and optionally include a type prefix in the output with \--prefix\. The \changes\ command now supports a \--lookup\ option to find versions relative to a specific version (e.g., \\> 1.0.0\, \prior 2.0.0\), and a \--search\ option to find entries matching a query string. Additionally, versions with no matching changelog entries are no longer shown in the interactive menu.

lib/doing/changelog · high confidence

Rubocop style fixes in Cucumber step definitions and support files

The Cucumber test infrastructure files (step definitions and support/env) have been updated to comply with Rubocop style guidelines. This includes adding frozen\_string\_literal pragmas, adjusting regex syntax in step definitions, and modernizing file path resolution in the support environment setup.

_features/step\definitions, features/support · high confidence

Test coverage

Added test helper utilities for time handling and output mocking; Added test plugins for hooks, export, and import functionality; Expanded test coverage for core task management commands.

Dependencies

Update Ruby dependencies and lockfile for doing gem v2.1.92

The \doing\ gem has been updated to version 2.1.92, introducing a comprehensive refresh of its Ruby dependencies. Runtime dependencies now include \chronic\, \csv\, \deep\_merge\, \haml\, \logger\, \ostruct\, \parslet\, \plist\, \reline\, \safe\yaml\, and various \tty-\\ libraries, while the \gli\ dependency has been bumped to version 2.20. Development dependencies have also been updated to include \rubocop\, \github-markup\, \parallel\_tests\, \redcarpet\, \test-unit\, and \yard\. The \Gemfile\ source has been changed from HTTPS to HTTP, and the \Gemfile.lock\ has been regenerated to reflect these changes.

(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 62.

Lenses

  • Code Health 84
  • Architecture 99
  • Maturity 65
  • Readiness 64
  • Security 72
  • Accessibility 53

Changes since last survey

  • 300 commits — 265 feature/other, 35 fixes

By area

  • docs/doc — 85 commits
  • (root) — 82 commits
  • (repo) — 60 commits
  • lib/doing — 51 commits
  • bin/commands — 16 commits
  • lib/helpers — 2 commits
  • .github/FUNDING.yml — 1 commit
  • bin/doing — 1 commit
  • test/doing_reset_test.rb — 1 commit
  • test/doing_unit-item_test.rb — 1 commit

Notable commits

  • fix: @fixed Trying to fix runtime slowness
  • fix: @improved Rubocop fixes
  • fix: Doing now fixes
  • fix: Fix 12am parsing
  • fix: Fix autotagging for doing done
  • fix: Fix bash completion linking
  • fix: Fix compatibility with Ruby 3.4
  • fix: Fix crash (undefined boldwhite)
  • fix: Fix crash in doing tags
  • fix: Fix deprecation warning
  • fix: Fix doing recent --interactive with count
  • fix: Fix doing recent with both section and count
  • fix: Fix doing select resume/repeat
  • fix: Fix error when no match for view/section
  • fix: Fix for doing again ignoring existing @done tag
  • fix: Fix for doing select editor
  • fix: Fix for unterminated date range
  • fix: Fix more color references
  • fix: Fix no-label for archive command
  • fix: Fix note prompt without --ask
  • …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

ttscoff/doing 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 20 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 69879f12f362b992d79728a40b37056160b6b98c — 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-b51f968c9b10.