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.
- checksums.yaml +7 -0
- data/.ace-defaults/idea/config.yml +21 -0
- data/.ace-defaults/nav/protocols/wfi-sources/ace-idea.yml +19 -0
- data/CHANGELOG.md +387 -0
- data/README.md +42 -0
- data/Rakefile +13 -0
- data/docs/demo/ace-idea-getting-started.gif +0 -0
- data/docs/demo/ace-idea-getting-started.tape.yml +44 -0
- data/docs/demo/fixtures/README.md +3 -0
- data/docs/demo/fixtures/sample.txt +1 -0
- data/docs/getting-started.md +102 -0
- data/docs/handbook.md +39 -0
- data/docs/usage.md +320 -0
- data/exe/ace-idea +22 -0
- data/handbook/skills/as-idea-capture/SKILL.md +25 -0
- data/handbook/skills/as-idea-capture-features/SKILL.md +26 -0
- data/handbook/skills/as-idea-review/SKILL.md +26 -0
- data/handbook/workflow-instructions/idea/capture-features.wf.md +243 -0
- data/handbook/workflow-instructions/idea/capture.wf.md +270 -0
- data/handbook/workflow-instructions/idea/prioritize.wf.md +223 -0
- data/handbook/workflow-instructions/idea/review.wf.md +93 -0
- data/lib/ace/idea/atoms/idea_file_pattern.rb +40 -0
- data/lib/ace/idea/atoms/idea_frontmatter_defaults.rb +39 -0
- data/lib/ace/idea/atoms/idea_id_formatter.rb +37 -0
- data/lib/ace/idea/atoms/idea_validation_rules.rb +89 -0
- data/lib/ace/idea/atoms/slug_sanitizer_adapter.rb +6 -0
- data/lib/ace/idea/cli/commands/create.rb +98 -0
- data/lib/ace/idea/cli/commands/doctor.rb +206 -0
- data/lib/ace/idea/cli/commands/list.rb +62 -0
- data/lib/ace/idea/cli/commands/show.rb +55 -0
- data/lib/ace/idea/cli/commands/status.rb +61 -0
- data/lib/ace/idea/cli/commands/update.rb +118 -0
- data/lib/ace/idea/cli.rb +75 -0
- data/lib/ace/idea/models/idea.rb +39 -0
- data/lib/ace/idea/molecules/idea_clipboard_reader.rb +117 -0
- data/lib/ace/idea/molecules/idea_config_loader.rb +93 -0
- data/lib/ace/idea/molecules/idea_creator.rb +248 -0
- data/lib/ace/idea/molecules/idea_display_formatter.rb +165 -0
- data/lib/ace/idea/molecules/idea_doctor_fixer.rb +504 -0
- data/lib/ace/idea/molecules/idea_doctor_reporter.rb +264 -0
- data/lib/ace/idea/molecules/idea_frontmatter_validator.rb +137 -0
- data/lib/ace/idea/molecules/idea_llm_enhancer.rb +177 -0
- data/lib/ace/idea/molecules/idea_loader.rb +124 -0
- data/lib/ace/idea/molecules/idea_mover.rb +78 -0
- data/lib/ace/idea/molecules/idea_resolver.rb +57 -0
- data/lib/ace/idea/molecules/idea_scanner.rb +56 -0
- data/lib/ace/idea/molecules/idea_structure_validator.rb +157 -0
- data/lib/ace/idea/organisms/idea_doctor.rb +207 -0
- data/lib/ace/idea/organisms/idea_manager.rb +251 -0
- data/lib/ace/idea/version.rb +7 -0
- data/lib/ace/idea.rb +37 -0
- 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
|
+

|
|
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
|
|
Binary file
|
|
@@ -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 @@
|
|
|
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`
|