ace-idea 0.18.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (52) hide show
  1. checksums.yaml +7 -0
  2. data/.ace-defaults/idea/config.yml +21 -0
  3. data/.ace-defaults/nav/protocols/wfi-sources/ace-idea.yml +19 -0
  4. data/CHANGELOG.md +387 -0
  5. data/README.md +42 -0
  6. data/Rakefile +13 -0
  7. data/docs/demo/ace-idea-getting-started.gif +0 -0
  8. data/docs/demo/ace-idea-getting-started.tape.yml +44 -0
  9. data/docs/demo/fixtures/README.md +3 -0
  10. data/docs/demo/fixtures/sample.txt +1 -0
  11. data/docs/getting-started.md +102 -0
  12. data/docs/handbook.md +39 -0
  13. data/docs/usage.md +320 -0
  14. data/exe/ace-idea +22 -0
  15. data/handbook/skills/as-idea-capture/SKILL.md +25 -0
  16. data/handbook/skills/as-idea-capture-features/SKILL.md +26 -0
  17. data/handbook/skills/as-idea-review/SKILL.md +26 -0
  18. data/handbook/workflow-instructions/idea/capture-features.wf.md +243 -0
  19. data/handbook/workflow-instructions/idea/capture.wf.md +270 -0
  20. data/handbook/workflow-instructions/idea/prioritize.wf.md +223 -0
  21. data/handbook/workflow-instructions/idea/review.wf.md +93 -0
  22. data/lib/ace/idea/atoms/idea_file_pattern.rb +40 -0
  23. data/lib/ace/idea/atoms/idea_frontmatter_defaults.rb +39 -0
  24. data/lib/ace/idea/atoms/idea_id_formatter.rb +37 -0
  25. data/lib/ace/idea/atoms/idea_validation_rules.rb +89 -0
  26. data/lib/ace/idea/atoms/slug_sanitizer_adapter.rb +6 -0
  27. data/lib/ace/idea/cli/commands/create.rb +98 -0
  28. data/lib/ace/idea/cli/commands/doctor.rb +206 -0
  29. data/lib/ace/idea/cli/commands/list.rb +62 -0
  30. data/lib/ace/idea/cli/commands/show.rb +55 -0
  31. data/lib/ace/idea/cli/commands/status.rb +61 -0
  32. data/lib/ace/idea/cli/commands/update.rb +118 -0
  33. data/lib/ace/idea/cli.rb +75 -0
  34. data/lib/ace/idea/models/idea.rb +39 -0
  35. data/lib/ace/idea/molecules/idea_clipboard_reader.rb +117 -0
  36. data/lib/ace/idea/molecules/idea_config_loader.rb +93 -0
  37. data/lib/ace/idea/molecules/idea_creator.rb +248 -0
  38. data/lib/ace/idea/molecules/idea_display_formatter.rb +165 -0
  39. data/lib/ace/idea/molecules/idea_doctor_fixer.rb +504 -0
  40. data/lib/ace/idea/molecules/idea_doctor_reporter.rb +264 -0
  41. data/lib/ace/idea/molecules/idea_frontmatter_validator.rb +137 -0
  42. data/lib/ace/idea/molecules/idea_llm_enhancer.rb +177 -0
  43. data/lib/ace/idea/molecules/idea_loader.rb +124 -0
  44. data/lib/ace/idea/molecules/idea_mover.rb +78 -0
  45. data/lib/ace/idea/molecules/idea_resolver.rb +57 -0
  46. data/lib/ace/idea/molecules/idea_scanner.rb +56 -0
  47. data/lib/ace/idea/molecules/idea_structure_validator.rb +157 -0
  48. data/lib/ace/idea/organisms/idea_doctor.rb +207 -0
  49. data/lib/ace/idea/organisms/idea_manager.rb +251 -0
  50. data/lib/ace/idea/version.rb +7 -0
  51. data/lib/ace/idea.rb +37 -0
  52. metadata +166 -0
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 8994e5d86e56e55d0f5a6bb8bcf3d492bf54cf6a57c0cd9dbc4e7dc5918ee9f0
4
+ data.tar.gz: b31f01f126a87d8d0cba9a9e4ff7b428dd9438f7757a402ee77914fd9c582a75
5
+ SHA512:
6
+ metadata.gz: 97b27dfac510f4dc695d75c5720282c0d131f17e9ed0c501e095af0cb033f814019a4a26599e69027b09215303dc6ad3e17d360ce709efdb58f6133c69cc8709
7
+ data.tar.gz: f40ce5aa2082d5c1e3f0ba6e59f9d5948b6c54812c71ea9fac556b3bf605f91f62c3f3d55bafacf6b80f542d29f334a5bee4a49ae8cfc6c254b62aea03cc5b72
@@ -0,0 +1,21 @@
1
+ # ace-idea default configuration
2
+ idea:
3
+ # Root directory for ideas storage
4
+ root_dir: .ace-ideas
5
+
6
+ # Default status for new ideas
7
+ default_status: pending
8
+
9
+ # LLM model for idea enhancement
10
+ llm_model: gemini:flash-latest
11
+
12
+ # LLM model for doctor --auto-fix-with-agent
13
+ doctor_agent_model: gemini:flash-latest@yolo
14
+
15
+ # Status command: default limits
16
+ status:
17
+ up_next_limit: 7
18
+ recently_done_limit: 7
19
+
20
+ # Prefix used to identify special folders (e.g., "_archive", "_maybe")
21
+ special_folder_prefix: "_"
@@ -0,0 +1,19 @@
1
+ ---
2
+ # WFI Sources Protocol Configuration for ace-idea gem
3
+ # This enables workflow discovery from the installed ace-idea gem
4
+
5
+ name: ace-idea
6
+ type: gem
7
+ description: Idea management workflow instructions from ace-idea gem
8
+ priority: 10
9
+
10
+ # Configuration for workflow discovery within the gem
11
+ config:
12
+ # Relative path within the gem (default: handbook/workflow-instructions)
13
+ relative_path: handbook/workflow-instructions
14
+
15
+ # Pattern for finding workflow files (default: *.wf.md)
16
+ pattern: "*.wf.md"
17
+
18
+ # Enable discovery
19
+ enabled: true
data/CHANGELOG.md ADDED
@@ -0,0 +1,387 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project will be documented in this file.
4
+
5
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.18.0] - 2026-03-23
11
+
12
+ ### Fixed
13
+ - Corrected `--enhance` flag reference in README to `--llm-enhance` matching the actual CLI option.
14
+
15
+ ### Changed
16
+ - Updated gemspec summary to align with README tagline emphasizing the capture-to-execution lifecycle.
17
+ - Rewrote folder documentation to clarify that folders are user-defined; only `_archive` has special behavior.
18
+ - Updated `--move-to` option descriptions in usage docs to reflect any-named-folder support.
19
+ - Added `ace-idea status` example output to usage reference.
20
+ - Documented clipboard platform behavior in getting-started prerequisites (macOS rich vs generic fallback).
21
+ - Re-recorded getting-started demo with list, create, archive, and status scenes running in the main project.
22
+
23
+ ## [0.17.4] - 2026-03-23
24
+
25
+ ### Changed
26
+ - Refreshed `README.md` to match the new package layout pattern with logo/badges, quick links, and use-case-led positioning.
27
+
28
+ ## [0.17.3] - 2026-03-22
29
+
30
+ ### Technical
31
+ - Aligned the getting-started demo tape output path with the checked-in asset.
32
+ - Updated prioritize workflow wording to use current queue terminology instead of backlog language.
33
+
34
+ ## [0.17.2] - 2026-03-22
35
+
36
+ ### Fixed
37
+ - Clarified the README, getting-started guide, and usage reference so the `next` queue is documented as the root-scope view rather than a physical `_next` folder.
38
+
39
+ ## [0.17.1] - 2026-03-22
40
+
41
+ ### Fixed
42
+ - Replaced Kramdown-only code block markup with fenced Markdown blocks in the getting-started and usage docs.
43
+ - Added `docs/**/*` to the gemspec file manifest so the packaged gem ships the documentation files linked from the README.
44
+
45
+ ## [0.17.0] - 2026-03-22
46
+
47
+ ### Changed
48
+ - Reworked the package documentation with a landing-page README, tutorial getting-started guide, full usage reference, handbook catalog, demo assets, refreshed gem metadata messaging, and updated idea workflows to match the current six-command CLI.
49
+
50
+ ## [0.16.0] - 2026-03-20
51
+
52
+ ### Changed
53
+ - Expanded `TS-IDEA-001` E2E lifecycle coverage with a new archive-transition goal and aligned list-filter runner/verifier contracts with root-scope behavior.
54
+
55
+ ## [0.15.1] - 2026-03-18
56
+
57
+ ### Changed
58
+ - Migrated CLI namespace from `Ace::Core::CLI::*` to `Ace::Support::Cli::*` (ace-support-cli is now the canonical home for CLI infrastructure).
59
+
60
+
61
+ ## [0.15.0] - 2026-03-18
62
+
63
+ ### Changed
64
+ - Removed legacy backward-compatibility behavior as part of the 0.10 cleanup release.
65
+
66
+
67
+ ## [0.14.4] - 2026-03-15
68
+
69
+ ### Changed
70
+ - Migrated CLI framework from dry-cli to ace-support-cli
71
+
72
+ ## [0.14.3] - 2026-03-13
73
+
74
+ ### Changed
75
+ - Updated the canonical idea review skill to explicitly run its bundled workflow in the current project and execute it end-to-end.
76
+
77
+ ## [0.14.2] - 2026-03-12
78
+
79
+ ### Changed
80
+ - Updated the idea-lifecycle E2E runner instructions to capture the created idea file path and frontmatter content as first-class artifacts.
81
+
82
+ ## [0.14.1] - 2026-03-08
83
+
84
+ ### Technical
85
+ - Removed obsolete doctor CLI test coverage for deleted `provider_cli_args` behavior and corrected quiet-mode unhealthy test block closure.
86
+
87
+ ## [0.14.0] - 2026-03-08
88
+
89
+ ### Changed
90
+ - Remove hardcoded `providers.cli_args` config; use ace-llm `@preset` suffixes for provider permission flags
91
+
92
+ ## [0.13.5] - 2026-03-06
93
+
94
+ ### Fixed
95
+ - `ace-idea list` now prints the summary line even when no ideas match the current scope.
96
+
97
+ ## [0.13.4] - 2026-03-05
98
+
99
+ ### Fixed
100
+ - Legacy `cancelled` idea statuses are now normalized to `obsolete` in idea loading and display stats so `ace-idea list` no longer surfaces a non-canonical status bucket.
101
+
102
+ ### Changed
103
+ - Frontmatter validation now emits a warning when derived `location` metadata is stored in idea frontmatter.
104
+ - Doctor auto-fix now supports migrating legacy `cancelled` status to `obsolete`.
105
+ - Doctor auto-fix now supports removing derived `location` from idea frontmatter.
106
+
107
+ ### Technical
108
+ - Added regression tests for legacy status normalization in formatter output.
109
+ - Added validator and fixer tests for `location` cleanup and `cancelled` migration paths.
110
+
111
+ ## [0.13.3] - 2026-03-05
112
+
113
+ ### Changed
114
+ - Updated E2E expectation wording for `ace-idea` move-to-next flow to match current root-scope behavior (no dedicated `_next` directory) and align verification output with `root` scope.
115
+
116
+ ## [0.13.2] - 2026-03-05
117
+
118
+ ### Changed
119
+ - E2E idea-lifecycle expectations were updated for default root-scope behavior (no legacy `_next` relocation requirement).
120
+
121
+ ## [0.13.1] - 2026-03-04
122
+
123
+ ### Fixed
124
+ - Restored backward-compatible legacy `doctor_cli_args` fallback when using nested `idea.doctor.cli_args`.
125
+
126
+ ### Changed
127
+ - Preserved compatibility for legacy codex default shorthand values when normalizing provider CLI args.
128
+
129
+ ## [0.13.0] - 2026-03-04
130
+
131
+ ### Changed
132
+ - Renamed doctor agent CLI argument config from `doctor_cli_args` to nested `doctor.cli_args`.
133
+ - Converted default doctor CLI args for `gemini` to array format.
134
+
135
+ - Switched default doctor arg values to provider-array format.
136
+
137
+ ## [0.12.4] - 2026-03-03
138
+
139
+ ### Changed
140
+ - Config: replaced `special_folders` map with `special_folder_prefix: "_"` (prefix-based detection replaces hardcoded folder list)
141
+
142
+ ## [0.12.3] - 2026-03-03
143
+
144
+ ### Changed
145
+ - IdeaCreator uses two-tier naming: folder slug (5 words) and file slug (7 words) for concise folders with descriptive filenames
146
+
147
+ ## [0.12.2] - 2026-03-03
148
+
149
+ ### Changed
150
+ - List items: ID, tags, and folder are dimmed for visual contrast with title
151
+ - Attachments only shown in `show` output, no longer in list items
152
+
153
+ ## [0.12.1] - 2026-03-03
154
+
155
+ ### Fixed
156
+ - `IdeaScanner#scan_in_folder("next")` returned no results — root items have `special_folder: nil`, not `"next"`; corrected filter to `r.special_folder.nil?` matching TaskScanner and RetroScanner
157
+
158
+ ## [0.12.0] - 2026-03-03
159
+
160
+ ### Added
161
+ - Colored status symbols in list output: pending (default), in-progress (yellow), done (green), obsolete (dim) — TTY-aware, no color when piped
162
+ - `last_folder_counts` on `IdeaScanner` and `IdeaManager`: exposes per-folder item counts from the full scan for use in stats line
163
+ - `list --help` status legend with ANSI colors matching list output
164
+
165
+ ### Changed
166
+ - Status symbols replaced from emoji (⚪🟡🟢⚫) to Unicode shapes (○▶✓✗) for consistent terminal rendering and colorization support
167
+ - `format_list` and `format_stats_line` accept `global_folder_stats:` parameter, always showing folder breakdown in stats line even when viewing a filtered subset
168
+
169
+ ## [0.11.0] - 2026-03-02
170
+
171
+ ### Added
172
+ - `--move-to` / `-m` option on `update` command: relocate idea to a special folder (archive, maybe, anytime) or back to root (next/root//)
173
+
174
+ ### Changed
175
+ - `update` command now accepts `--move-to` alone (no `--set` required), replacing the standalone `move` command
176
+
177
+ ### Removed
178
+ - Standalone `move` command — use `update --move-to` instead
179
+ - `IdeaManager#move` method — use `IdeaManager#update(move_to:)` instead
180
+
181
+ ## [0.10.0] - 2026-03-02
182
+
183
+ ### Added
184
+ - `--git-commit` / `--gc` flag on `create`, `update`, and `move` commands to auto-commit changes via `ace-git-commit`
185
+
186
+ ## [0.9.0] - 2026-03-02
187
+
188
+ ### Added
189
+ - `status` CLI command showing up-next ideas, summary stats, and recently completed ideas
190
+ - `--up-next-limit` and `--recently-done-limit` options for status command (configurable via config.yml)
191
+ - `IdeaDisplayFormatter.format_status` and `format_status_line` class methods for status overview rendering
192
+ - Config defaults: `status: { up_next_limit: 7, recently_done_limit: 7 }`
193
+
194
+ ## [0.8.0] - 2026-03-02
195
+
196
+ ### Added
197
+ - `IdeaScanner#last_scan_total` exposes total item count before folder filtering
198
+ - `IdeaManager#last_list_total` exposes total item count for "X of Y" stats display
199
+ - `IdeaDisplayFormatter.format_list` and `format_stats_line` accept `total_count:` parameter
200
+ - CLI list command passes total count through to formatter for contextual stats
201
+
202
+ ## [0.7.0] - 2026-03-02
203
+
204
+ ### Added
205
+ - `IdeaDisplayFormatter.format_stats_line` for generating stats summary (e.g., "Ideas: ⚪ 3 | 🟡 1 | 🟢 2 • 6 total • 33% complete")
206
+ - `format_list` now appends a stats summary line after the item list (omitted for empty lists)
207
+
208
+ ## [0.6.0] - 2026-03-02
209
+
210
+ ### Changed
211
+ - `IdeaManager#list` defaults to `in_folder: "next"` — shows only root ideas by default (excludes _archive, _maybe, etc.)
212
+ - `IdeaScanner#scan_in_folder` supports virtual filters ("next" for root-only, "all" for everything)
213
+ - `IdeaCreator` rejects virtual filter names ("next", "all") in `--move-to` option
214
+ - Use `--in all` to see all ideas including special folders (previous default behavior)
215
+ - Remove `next: _next` from default config special folder mappings
216
+
217
+ ## [0.5.0] - 2026-02-28
218
+
219
+ ### Changed
220
+ - `IdeaMover#move` now accepts an optional `date:` keyword argument; when moving to `_archive`, the idea is placed under a B36TS month/week partition (e.g. `_archive/8p/4/{folder}/`) instead of a flat `_archive/` directory
221
+ - `IdeaManager#move` automatically extracts `completed_at` or `created_at` from idea frontmatter and passes it as the archive date, falling back to `Time.now`
222
+
223
+ ## [0.4.2] - 2026-02-28
224
+
225
+ ### Added
226
+ - `doctor_cli_args` configuration map for the `doctor --auto-fix-with-agent` workflow so each provider can define any required CLI args (default maps `gemini` to `yolo`).
227
+ ### Fixed
228
+ - `ace-idea doctor --auto-fix-with-agent` now only passes CLI args when the configured map contains an entry, preventing Gemini CLI from receiving unsupported flags while still honoring other providers (tests cover the CLI map lookup).
229
+
230
+ ## [0.4.1] - 2026-02-28
231
+
232
+ ### Added
233
+ - `doctor` command: extended auto-fix support for additional issue types
234
+ - Auto-fix for missing opening '---' delimiter (prepends proper frontmatter)
235
+ - Auto-fix for legacy folder naming (generates new b36ts ID and renames folder)
236
+ - Category folder detection (skips folders with only subdirectories, no files)
237
+ - 16 fixable patterns (up from 14)
238
+
239
+ ### Technical
240
+ - 13 new tests for extended auto-fix functionality (230 total tests)
241
+
242
+ ## [0.4.0] - 2026-02-28
243
+
244
+ ### Added
245
+ - `doctor` command: comprehensive health checks for ideas with auto-fix and agent support
246
+ - Structure validation (folder naming, spec files, stale backups, empty directories)
247
+ - Frontmatter validation (delimiters, YAML syntax, required/recommended fields)
248
+ - Scope/status consistency checks (terminal status in _archive, etc.)
249
+ - Health score (0-100) based on errors/warnings
250
+ - `--auto-fix` for safe automatic fixes (14 fixable patterns)
251
+ - `--auto-fix-with-agent` to launch LLM agent for remaining issues
252
+ - Output formats: `--json`, `--quiet`, `--verbose`, `--summary`
253
+ - Filters: `--check (frontmatter|structure|scope)`, `--errors-only`
254
+ - Other options: `--no-color`, `--dry-run`, `--model`
255
+ - `IdeaValidationRules` atom: pure validation predicates for status, ID, scope consistency
256
+ - `IdeaFrontmatterValidator` molecule: per-file frontmatter validation
257
+ - `IdeaStructureValidator` molecule: directory structure validation
258
+ - `IdeaDoctorFixer` molecule: auto-fix engine with dry-run support
259
+ - `IdeaDoctorReporter` molecule: terminal/JSON/summary formatting
260
+ - `IdeaDoctor` organism: orchestrates all validation checks
261
+ - `doctor_agent_model` config default (`gflash`) for `--auto-fix-with-agent`
262
+
263
+ ### Technical
264
+ - 108 new tests covering all doctor components (230 total tests with v0.4.1 additions)
265
+
266
+ ## [0.3.1] - 2026-02-28
267
+
268
+ ### Fixed
269
+ - Test performance: stub `llm_available?` in LLM-related tests to prevent real API calls (43s → <0.2s)
270
+
271
+ ## [0.3.0] - 2026-02-28
272
+
273
+ ### Changed
274
+ - Refactored `IdeaLoader` to use shared `FrontmatterParser` and `TitleExtractor` from `ace-support-items`
275
+ - Refactored `IdeaFrontmatterDefaults.serialize` to delegate to shared `FrontmatterSerializer`
276
+ - Refactored `IdeaManager` to use shared `FrontmatterParser`, `FrontmatterSerializer`, and `FilterApplier`
277
+ - Updated dependency: `ace-support-items ~> 0.2` (was `~> 0.1`)
278
+
279
+ ### Added
280
+ - `--filter` option on `list` command: `ace-idea list --filter status:pending --filter tags:ux|design`
281
+ - `IdeaManager#list` accepts `filters:` parameter for generic `key:value` filter syntax
282
+ - Supports OR values (`key:a|b`), negation (`key:!value`), and AND across multiple filters
283
+
284
+ ## [0.2.4] - 2026-02-28
285
+
286
+ ### Added
287
+ - E2E test scenario `TS-IDEA-001-idea-lifecycle` with three test cases: TC-001 (create idea), TC-002 (list with filters), TC-003 (move to folder)
288
+
289
+ ### Technical
290
+ - Updated `idea/capture` workflow: corrected done-state description to use `ace-idea move <id> --to archive` + `ace-idea update <id> --set status=done`
291
+ - Updated `idea/prioritize` workflow: replaced `ace-idea reschedule` commands with folder-based `ace-idea move` prioritization
292
+ - Fixed `bin/ace-idea` wrapper to load from `ace-idea/exe/ace-idea` (was incorrectly loading from `ace-taskflow/exe/ace-idea`)
293
+
294
+ ## [0.2.3] - 2026-02-28
295
+
296
+ ### Technical
297
+ - Added explicit `require "json"` to `IdeaLlmEnhancer` (prevents runtime NameError in cold process)
298
+ - Removed unused `DEFAULT_STATUS` / `DEFAULT_LLM_MODEL` constants from `IdeaConfigLoader`
299
+ - Removed redundant inline `require "ace/support/items"` inside `IdeaCreator#generate_slug`
300
+
301
+ ## [0.2.2] - 2026-02-28
302
+
303
+ ### Fixed
304
+ - Path traversal in `--to` / `--move-to` options — boundary check via `File.expand_path` in `IdeaMover#move` and `IdeaCreator#determine_target_dir`
305
+ - YAML serializer now quotes YAML-ambiguous values (`true`, `false`, `null`, numbers)
306
+ - `rebuild_file` uses `IdeaFrontmatterDefaults.serialize` for consistent inline-array format (was: `YAML.dump` block format)
307
+ - `IdeaLlmEnhancer` JSON extraction uses regex to handle LLM preamble before code block
308
+ - `IdeaLoader#list_attachments` filters hidden OS files (`.DS_Store` etc.)
309
+
310
+ ### Added
311
+ - `spec.executables` in gemspec — `ace-idea` binary now installs correctly via `gem install`
312
+
313
+ ## [0.2.1] - 2026-02-28
314
+
315
+ ### Fixed
316
+
317
+ - Sanitize attachment filenames to prevent path traversal (reject `../` and null bytes)
318
+ - `--root` option in `list` now validates path stays within `root_dir` boundary
319
+ - Atomic file writes in `update_idea_file` using temp file + `File.rename` pattern
320
+ - `gem_root` path calculation corrected (was resolving to `lib/` instead of gem root)
321
+ - `ArgumentError` from clipboard failures caught in `exe/ace-idea` with friendly message
322
+ - TOCTOU race condition in `IdeaMover` replaced with `File.rename` + cross-device fallback
323
+ - Same-path move in `IdeaMover` now returns early (no-op) instead of raising misleading error
324
+ - Config loader rescues only `Errno::ENOENT` / `Psych::SyntaxError` instead of `StandardError`
325
+ - Formatting drift after repeated `update` calls fixed (strip leading newline in `parse_file`)
326
+ - YAML serializer now quotes all YAML special characters (`@`, `*`, `&`, `!`, `%`, `[`, `]`, etc.)
327
+ - CLI `update` command uses `FieldArgumentParser` for type inference (arrays, booleans, numerics)
328
+
329
+ ### Technical
330
+
331
+ - Regression tests for path traversal (attachment filenames, `--root`), same-path no-op, null bytes
332
+ - Total: 109 tests, 336 assertions, 0 failures
333
+
334
+ ## [0.2.0] - 2026-02-28
335
+
336
+ ### Added
337
+
338
+ - `ace-idea` CLI executable with 5 commands: `create`, `show`, `list`, `move`, `update`
339
+ - `IdeaCLI` registry (`lib/ace/idea/cli.rb`) following dry-cli Registry pattern
340
+ - `create` command: positional content, `--title`, `--tags`, `--move-to`, `--clipboard`, `--llm-enhance`, `--dry-run`
341
+ - `show` command: display by ref with `--path` and `--content` mode flags
342
+ - `list` command: filter by `--status`, `--tags`, `--in FOLDER`, `--root`
343
+ - `move` command: relocate idea with `--to FOLDER` (short names: archive, maybe, next, root)
344
+ - `update` command: `--set K=V`, `--add K=V`, `--remove K=V` for frontmatter mutation
345
+ - `version` and `help` commands via `ace-support-core` DryCli helpers
346
+ - SIGINT handling with exit code 130 in `exe/ace-idea`
347
+ - `dry-cli ~> 1.0` runtime dependency
348
+ - Handbook workflow instructions moved from `ace-taskflow`: `idea/capture.wf.md`, `idea/capture-features.wf.md`, `idea/prioritize.wf.md`
349
+ - CLI integration tests covering all 5 commands and error paths
350
+
351
+ ## [0.1.1] - 2026-02-28
352
+
353
+ ### Added
354
+
355
+ - Integration tests covering full create→show→update→move→list roundtrip lifecycle
356
+ - Clipboard edge case tests: empty content, binary data, oversized content, gem unavailable
357
+ - LLM enhancement fallback tests at the manager level
358
+ - Concurrent b36ts ID collision tests (two ideas within the 2-second encoding window)
359
+ - Performance tests verifying scan completes within threshold for 500+ idea collections
360
+
361
+ ### Fixed
362
+
363
+ - `IdeaCreator` now handles duplicate folder names when two ideas share the same b36ts ID
364
+ and slug (appends numeric counter `-2`, `-3`, etc. to ensure unique directories)
365
+
366
+ ## [0.1.0] - 2026-02-28
367
+
368
+ Extracted from `ace-taskflow` v0.42.11 (was `Ace::Taskflow::Idea::*`) into a dedicated gem.
369
+
370
+ ### Added
371
+
372
+ - Initial release with core operations and model
373
+ - `IdeaIdFormatter` atom for raw 6-char b36ts ID generation (no type markers)
374
+ - `IdeaFilePattern` atom for `.idea.s.md` file glob patterns
375
+ - `IdeaFrontmatterDefaults` atom for frontmatter generation and serialization
376
+ - `Idea` model (Struct) with id, status, title, tags, content, path, file_path, special_folder, created_at, attachments, metadata
377
+ - `IdeaConfigLoader` molecule for config cascade (gem defaults -> user -> project)
378
+ - `IdeaScanner` molecule wrapping DirectoryScanner for `.idea.s.md` files
379
+ - `IdeaResolver` molecule wrapping ShortcutResolver for 3-char suffix shortcuts
380
+ - `IdeaLoader` molecule for loading idea directories with frontmatter parsing and attachment enumeration
381
+ - `IdeaCreator` molecule for full idea creation with clipboard support and LLM enhancement
382
+ - `IdeaLlmEnhancer` molecule with hardcoded 3-Question Brief system prompt
383
+ - `IdeaClipboardReader` molecule for system clipboard capture (text, rich, images)
384
+ - `IdeaMover` molecule for relocating idea folders to special folders
385
+ - `IdeaDisplayFormatter` molecule for terminal output formatting
386
+ - `IdeaManager` organism orchestrating all operations with config-driven root directory
387
+ - Default configuration in `.ace-defaults/idea/config.yml`
data/README.md ADDED
@@ -0,0 +1,42 @@
1
+ <div align="center">
2
+ <h1> ACE - Idea </h1>
3
+
4
+ Capture ideas quickly, then shape and organize them for execution.
5
+
6
+ <img src="https://raw.githubusercontent.com/cs3b/ace/main/docs/brand/AgenticCodingEnvironment.Logo.XS.jpg" alt="ACE Logo" width="480">
7
+ <br><br>
8
+
9
+ <a href="https://rubygems.org/gems/ace-idea"><img alt="Gem Version" src="https://img.shields.io/gem/v/ace-idea.svg" /></a>
10
+ <a href="https://www.ruby-lang.org"><img alt="Ruby" src="https://img.shields.io/badge/Ruby-3.2+-CC342D?logo=ruby" /></a>
11
+ <a href="https://opensource.org/licenses/MIT"><img alt="License: MIT" src="https://img.shields.io/badge/License-MIT-blue.svg" /></a>
12
+
13
+ </div>
14
+
15
+ > Works with: Claude Code, Codex CLI, OpenCode, Gemini CLI, pi-agent, and more.
16
+
17
+ [Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md)
18
+
19
+ ![ace-idea demo](docs/demo/ace-idea-getting-started.gif)
20
+
21
+ Ideas appear mid-flow: copied from chat, typed in a terminal, or drafted with an LLM. `ace-idea` gives them a stable home in git with sortable IDs and lightweight status updates, so ideas stay actionable instead of scattered across notes and tabs.
22
+
23
+ ## How It Works
24
+
25
+ 1. Capture idea text into a structured markdown artifact with metadata from direct input, stdin, or clipboard.
26
+ 2. Refine and organize entries through review-oriented workflows with tags, scoping, and bucket placement.
27
+ 3. Promote ready ideas into execution tasks when they pass review.
28
+
29
+ ## Use Cases
30
+
31
+ **Capture from anywhere** - create an idea from direct text input, stdin, or clipboard content with [`ace-idea create`](docs/usage.md). Add `--llm-enhance` when a rough note needs LLM cleanup, or use `/as-idea-capture` for the full agent-driven workflow.
32
+
33
+ **Shape and review** - run `/as-idea-review` to turn raw notes into structured entries with clearer scope, tags, and next actions.
34
+
35
+ **Organize by intent** - move ideas into any named folder you choose (e.g. `_review`, `_big`, `_maybe`) to group them by intent. `_archive` is the only special folder — it partitions by date. Root-level ideas act as the `next` queue.
36
+
37
+ **Track and maintain** - use [`ace-idea list`](docs/usage.md), `ace-idea show`, and `ace-idea status` for visibility, then run `ace-idea doctor` to detect and repair structure drift.
38
+
39
+ **Promote to execution** - once an idea is ready, hand it off to [ace-task](../ace-task) and continue with planning and implementation workflows.
40
+
41
+ ---
42
+ [Getting Started](docs/getting-started.md) | [Usage Guide](docs/usage.md) | [Handbook - Skills, Agents, Templates](docs/handbook.md) | Part of [ACE](https://github.com/cs3b/ace)
data/Rakefile ADDED
@@ -0,0 +1,13 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ require "rake/testtask"
5
+
6
+ Rake::TestTask.new(:test) do |t|
7
+ t.libs << "test"
8
+ t.libs << "lib"
9
+ t.test_files = FileList["test/**/*_test.rb"]
10
+ end
11
+
12
+ task spec: :test
13
+ task default: :test
@@ -0,0 +1,44 @@
1
+ ---
2
+ description: List ideas, create one, mark it done, and archive it
3
+ tags:
4
+ - ace-idea
5
+ - docs
6
+ - getting-started
7
+ settings:
8
+ font_size: 16
9
+ width: 960
10
+ height: 560
11
+ format: gif
12
+ env:
13
+ PROJECT_ROOT_PATH: /home/mc/ace-t.5nx
14
+ scenes:
15
+ - name: Browse existing ideas
16
+ commands:
17
+ - type: cd $PROJECT_ROOT_PATH
18
+ sleep: 1s
19
+ - type: ace-idea list
20
+ sleep: 3s
21
+ - type: ace-idea list --in maybe
22
+ sleep: 3s
23
+ - name: Capture a new idea
24
+ commands:
25
+ - type: clear
26
+ sleep: 1s
27
+ - type: ace-idea create 'Nightly regression suite for LLM providers' --tags testing,llm
28
+ sleep: 3s
29
+ - name: Complete and archive the idea
30
+ commands:
31
+ - type: clear
32
+ sleep: 1s
33
+ - type: ace-idea list
34
+ sleep: 3s
35
+ - type: "DEMO_ID=$(ace-idea list --in next | grep 'LLM provider' | cut -d' ' -f2) && ace-idea update $DEMO_ID --set status=done --move-to archive"
36
+ sleep: 3s
37
+ - name: Check overall status
38
+ commands:
39
+ - type: clear
40
+ sleep: 1s
41
+ - type: ace-idea status
42
+ sleep: 5s
43
+ teardown:
44
+ - run: cd /home/mc/ace-t.5nx && find .ace-ideas -type d -name '*nightly-regression-suite*' -exec rm -rf {} + 2>/dev/null || true
@@ -0,0 +1,3 @@
1
+ # Demo fixtures for ace-idea
2
+
3
+ Seed data used by YAML demo setup.
@@ -0,0 +1 @@
1
+ sample fixture content
@@ -0,0 +1,102 @@
1
+ ---
2
+ doc-type: user
3
+ title: ace-idea Getting Started
4
+ purpose: Tutorial for first-run ace-idea workflows
5
+ ace-docs:
6
+ last-updated: 2026-03-22
7
+ last-checked: 2026-03-22
8
+ ---
9
+
10
+ # Getting Started with ace-idea
11
+
12
+ This walkthrough shows the core `ace-idea` loop: capture one thought, improve it with clipboard or LLM context,
13
+ organize it, and list what should happen next.
14
+
15
+ ## Prerequisites
16
+
17
+ * Ruby 3.2+
18
+ * `ace-idea` installed
19
+ * A project directory where you want ideas stored
20
+ * Optional: clipboard support for `--clipboard` — on macOS this works out of the box with rich content (text, RTF, HTML, images via ace-support-mac-clipboard); on Linux or Windows install the `clipboard` gem (`gem install clipboard`) for plain-text clipboard access
21
+ * Optional: LLM provider configuration for `--llm-enhance`
22
+
23
+ ## Installation
24
+
25
+ ```bash
26
+ gem install ace-idea
27
+ ```
28
+
29
+ By default, `ace-idea` stores ideas in `.ace-ideas/` under your current working directory.
30
+
31
+ ## 1. Capture Your First Idea
32
+
33
+ Start with a direct text capture:
34
+
35
+ ```bash
36
+ ace-idea create "My idea" --title "Feature X"
37
+ ```
38
+
39
+ This creates a new folder inside `.ace-ideas/` with a matching `.idea.s.md` file and a short ID you can use later.
40
+
41
+ ## 2. Capture from Clipboard
42
+
43
+ When the idea is already copied, skip the paste step:
44
+
45
+ ```bash
46
+ ace-idea create --clipboard
47
+ ```
48
+
49
+ You can also combine clipboard text with a short lead-in:
50
+
51
+ ```bash
52
+ ace-idea create "Dashboard notes" --clipboard
53
+ ```
54
+
55
+ ## 3. Ask for LLM Enhancement
56
+
57
+ If the idea is rough, let `ace-idea` expand it before writing the file:
58
+
59
+ ```bash
60
+ ace-idea create --clipboard --llm-enhance
61
+ ```
62
+
63
+ If enhancement fails, the raw capture is still saved.
64
+
65
+ ## 4. Organize the Idea
66
+
67
+ Move an idea into your next queue after you review it:
68
+
69
+ ```bash
70
+ ace-idea update q7w --move-to next
71
+ ```
72
+
73
+ `next` is the root-scope queue alias. Use the same command for `maybe`, `anytime`, `archive`, or `root`.
74
+
75
+ ## 5. List What Matters Now
76
+
77
+ See everything queued for action:
78
+
79
+ ```bash
80
+ ace-idea list --in next
81
+ ace-idea status
82
+ ```
83
+
84
+ `list` is useful for focused filtering. `status` gives you a broader dashboard with up-next items and recently done work.
85
+
86
+ ## Common Commands
87
+
88
+ | Goal | Command |
89
+ |------|---------|
90
+ | Create a new idea | `ace-idea create "My idea" --title "Feature X"` |
91
+ | Capture from clipboard | `ace-idea create --clipboard` |
92
+ | Enhance clipboard content | `ace-idea create --clipboard --llm-enhance` |
93
+ | Move an idea into the root `next` queue | `ace-idea update q7w --move-to next` |
94
+ | List ideas in the root `next` queue | `ace-idea list --in next` |
95
+ | Show one idea in full | `ace-idea show q7w` |
96
+
97
+ ## Next Steps
98
+
99
+ * Add metadata with `ace-idea update q7w --set status=in-progress --add tags=research`
100
+ * Run `ace-idea doctor --auto-fix --dry-run` to preview idea hygiene fixes
101
+ * Convert a strong idea into a task with your normal `ace-task` workflow
102
+ * Browse more commands with `ace-idea --help`