ariadna 1.1.4 → 1.2.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 +4 -4
- data/data/agents/ariadna-planner.md +28 -0
- data/data/ariadna/references/rails-conventions.md +384 -0
- data/data/ariadna/workflows/new-project.md +52 -129
- data/data/ariadna/workflows/plan-phase.md +100 -49
- data/data/commands/ariadna/new-project.md +8 -6
- data/data/commands/ariadna/plan-phase.md +9 -7
- data/lib/ariadna/tools/config_manager.rb +2 -2
- data/lib/ariadna/tools/frontmatter.rb +2 -0
- data/lib/ariadna/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a59ce08ab4d7f1165dd59dac034ac04e5725263a3022bebbd2c3c39fdb0a3c23
|
|
4
|
+
data.tar.gz: 2eb175ba24a25c5114e3b76f83bbfef0275a21dc114f00d7376390508cb54a87
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 11f2127685615ea902f97bfc9fc813e20e74f354b055672568d39552d3d551d31896ba73b5ad3434d1ac84dc6d593f8d385818e78fc7cae24844f45720558f80
|
|
7
|
+
data.tar.gz: cec523e574d6182711229ddf5fa7519929f3c9fb9a144a0eb4928cf46a24d4761e9f718cf3678cf2dde812f9cd655647ca2c12776fcf29aa526831ad9df017a9
|
|
@@ -17,6 +17,7 @@ Your job: Produce PLAN.md files that Claude executors can implement without inte
|
|
|
17
17
|
|
|
18
18
|
**Core responsibilities:**
|
|
19
19
|
- **FIRST: Parse and honor user decisions from CONTEXT.md** (locked decisions are NON-NEGOTIABLE)
|
|
20
|
+
- Use Rails conventions (from `rails-conventions.md`) for standard task decomposition
|
|
20
21
|
- Decompose phases into parallel-optimized plans with 2-3 tasks each
|
|
21
22
|
- Build dependency graphs and assign execution waves
|
|
22
23
|
- Derive must-haves using goal-backward methodology
|
|
@@ -25,6 +26,33 @@ Your job: Produce PLAN.md files that Claude executors can implement without inte
|
|
|
25
26
|
- Return structured results to orchestrator
|
|
26
27
|
</role>
|
|
27
28
|
|
|
29
|
+
<rails_awareness>
|
|
30
|
+
## Rails-Aware Planning
|
|
31
|
+
|
|
32
|
+
Load Rails conventions from your required reading for standard task decomposition patterns.
|
|
33
|
+
|
|
34
|
+
@~/.claude/ariadna/references/rails-conventions.md
|
|
35
|
+
|
|
36
|
+
**Use domain templates** for common Rails work:
|
|
37
|
+
- "Add model" → migration + model + tests + fixtures
|
|
38
|
+
- "Add controller" → routes + controller + views + tests
|
|
39
|
+
- "Add authentication" → auth scaffold + user model + session controller + tests
|
|
40
|
+
- "Add background job" → job class + model method + tests
|
|
41
|
+
- "Add mailer" → mailer + views + tests
|
|
42
|
+
- "Add Turbo/Hotwire feature" → Turbo Frame + controller response + Stimulus (if needed) + system test
|
|
43
|
+
|
|
44
|
+
**Known domains (skip discovery):** Models, Controllers, Views, Auth, Jobs, Email, File Uploads, Real-time, Testing, API Mode, Caching. See `rails-conventions.md` `<known_domains>` for the full list.
|
|
45
|
+
|
|
46
|
+
**Discovery only for:** External API integrations, novel gems, payment systems, or anything not in the known domains list.
|
|
47
|
+
|
|
48
|
+
**Pitfall prevention:** Apply common Rails pitfalls from `rails-conventions.md` proactively:
|
|
49
|
+
- Include `includes()` for associations in controller queries (N+1)
|
|
50
|
+
- Add database indexes in migration tasks
|
|
51
|
+
- Use strong_parameters in controller tasks
|
|
52
|
+
- Keep controllers thin, models rich
|
|
53
|
+
- Use background jobs for external calls
|
|
54
|
+
</rails_awareness>
|
|
55
|
+
|
|
28
56
|
<context_fidelity>
|
|
29
57
|
## CRITICAL: User Decision Fidelity
|
|
30
58
|
|
|
@@ -0,0 +1,384 @@
|
|
|
1
|
+
<rails_conventions>
|
|
2
|
+
|
|
3
|
+
Pre-baked Rails knowledge for Ariadna planning and execution agents. This document replaces generic research for standard Rails projects, encoding well-known conventions, patterns, and pitfalls so agents don't need to web-search for common Rails patterns.
|
|
4
|
+
|
|
5
|
+
<standard_stack>
|
|
6
|
+
|
|
7
|
+
## Standard Rails Stack (2025)
|
|
8
|
+
|
|
9
|
+
| Layer | Technology | Notes |
|
|
10
|
+
|-------|-----------|-------|
|
|
11
|
+
| Framework | Rails 8+ | Defaults to SQLite in dev, includes Solid Queue/Cache/Cable |
|
|
12
|
+
| Database | PostgreSQL (production) | SQLite for dev/test is fine for most projects |
|
|
13
|
+
| Background Jobs | Solid Queue | Rails 8 default, replaces Sidekiq for most cases |
|
|
14
|
+
| Caching | Solid Cache | Rails 8 default, database-backed cache |
|
|
15
|
+
| WebSockets | Action Cable + Solid Cable | Rails 8 default |
|
|
16
|
+
| Real-time UI | Turbo (Hotwire) | Turbo Drive, Frames, Streams |
|
|
17
|
+
| JS Sprinkles | Stimulus (Hotwire) | Controllers for interactive behavior |
|
|
18
|
+
| CSS | Tailwind CSS or Propshaft | Rails 8 defaults to Propshaft asset pipeline |
|
|
19
|
+
| Auth | Rails built-in `has_secure_password` or Devise | Rails 8 includes auth generator |
|
|
20
|
+
| Email | Action Mailer | Built-in |
|
|
21
|
+
| File Upload | Active Storage | Built-in |
|
|
22
|
+
| API | Rails API mode or Jbuilder | Built-in |
|
|
23
|
+
| Testing | Minitest | Rails default, use fixtures not factories |
|
|
24
|
+
| Linting | RuboCop + rubocop-rails | Standard community linting |
|
|
25
|
+
|
|
26
|
+
**What NOT to use (and why):**
|
|
27
|
+
- Factories (FactoryBot) when fixtures suffice — fixtures are faster, declarative, and Rails-native
|
|
28
|
+
- RSpec unless the project already uses it — Minitest is simpler and Rails-native
|
|
29
|
+
- Webpacker/Shakapacker — replaced by importmap-rails or jsbundling-rails
|
|
30
|
+
- Sprockets — replaced by Propshaft in Rails 8
|
|
31
|
+
- Redis for jobs/cache — Solid Queue/Cache use the database, simpler ops
|
|
32
|
+
|
|
33
|
+
</standard_stack>
|
|
34
|
+
|
|
35
|
+
<architecture_patterns>
|
|
36
|
+
|
|
37
|
+
## Rails Architecture Patterns
|
|
38
|
+
|
|
39
|
+
### MVC Foundation
|
|
40
|
+
- **Models:** Business logic lives here. Validations, scopes, callbacks, associations.
|
|
41
|
+
- **Controllers:** Thin. Receive request, call model, render response. 7 RESTful actions max.
|
|
42
|
+
- **Views:** ERB templates. Logic delegated to presenters or helpers.
|
|
43
|
+
|
|
44
|
+
### Concern-Driven Architecture
|
|
45
|
+
```
|
|
46
|
+
app/models/concerns/
|
|
47
|
+
shared/ # Cross-model concerns (Trackable, Searchable)
|
|
48
|
+
model_name/ # Model-specific concerns (User::Authenticatable)
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**When to extract a concern:**
|
|
52
|
+
- Behavior reused across 2+ models → shared concern
|
|
53
|
+
- Model file exceeds ~100 lines → model-specific concern
|
|
54
|
+
- Logical grouping of related methods → named concern
|
|
55
|
+
|
|
56
|
+
### Service Objects (When Needed)
|
|
57
|
+
Use plain Ruby objects in `app/services/` for:
|
|
58
|
+
- Multi-model operations (CreateOrderWithPayment)
|
|
59
|
+
- External API integrations (StripeChargeService)
|
|
60
|
+
- Complex business processes spanning multiple steps
|
|
61
|
+
|
|
62
|
+
**Don't use for:** Simple CRUD, single-model operations, or anything a model method handles.
|
|
63
|
+
|
|
64
|
+
### Presenter Pattern
|
|
65
|
+
Plain Ruby classes for complex view logic:
|
|
66
|
+
```ruby
|
|
67
|
+
# app/models/dashboard_presenter.rb (NOT app/presenters/)
|
|
68
|
+
class DashboardPresenter
|
|
69
|
+
include ActionView::Helpers::TagHelper
|
|
70
|
+
|
|
71
|
+
def initialize(user)
|
|
72
|
+
@user = user
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
def greeting
|
|
76
|
+
"Welcome, #{@user.name}"
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
### RESTful Resource Design
|
|
82
|
+
- Prefer creating new controllers over adding custom actions
|
|
83
|
+
- `POST /messages/:id/archive` → `ArchivesController#create`
|
|
84
|
+
- Nest resources max 1 level: `/posts/:post_id/comments`
|
|
85
|
+
- Use `concerns` in routes for shared resource patterns
|
|
86
|
+
|
|
87
|
+
### Current Attributes
|
|
88
|
+
```ruby
|
|
89
|
+
# app/models/current.rb
|
|
90
|
+
class Current < ActiveSupport::CurrentAttributes
|
|
91
|
+
attribute :user, :session, :account
|
|
92
|
+
end
|
|
93
|
+
```
|
|
94
|
+
Set in `ApplicationController`, access everywhere. No parameter passing for auth context.
|
|
95
|
+
|
|
96
|
+
</architecture_patterns>
|
|
97
|
+
|
|
98
|
+
<common_pitfalls>
|
|
99
|
+
|
|
100
|
+
## Common Rails Pitfalls (with Prevention)
|
|
101
|
+
|
|
102
|
+
### 1. N+1 Queries
|
|
103
|
+
**Problem:** Loading associated records in a loop.
|
|
104
|
+
**Prevention:** Use `includes`, `preload`, or `eager_load` in controllers. Add `strict_loading` to models in development.
|
|
105
|
+
```ruby
|
|
106
|
+
# Bad
|
|
107
|
+
@posts = Post.all # then post.comments in view
|
|
108
|
+
|
|
109
|
+
# Good
|
|
110
|
+
@posts = Post.includes(:comments, :author).all
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
### 2. Missing Database Indexes
|
|
114
|
+
**Prevention:** Always add indexes for:
|
|
115
|
+
- Foreign keys (`add_index :posts, :user_id`)
|
|
116
|
+
- Columns used in `where` clauses
|
|
117
|
+
- Columns used in `order` clauses
|
|
118
|
+
- Unique constraints (`add_index :users, :email, unique: true`)
|
|
119
|
+
|
|
120
|
+
### 3. Mass Assignment Vulnerabilities
|
|
121
|
+
**Prevention:** Always use `strong_parameters` in controllers.
|
|
122
|
+
```ruby
|
|
123
|
+
def post_params
|
|
124
|
+
params.require(:post).permit(:title, :body, :published)
|
|
125
|
+
end
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
### 4. Callback Hell
|
|
129
|
+
**Prevention:** Limit callbacks to:
|
|
130
|
+
- `before_validation` for normalization (strip whitespace, downcase email)
|
|
131
|
+
- `after_create_commit` for async side effects (send email, broadcast)
|
|
132
|
+
- Avoid `after_save` chains that trigger cascading updates
|
|
133
|
+
|
|
134
|
+
### 5. Fat Controllers
|
|
135
|
+
**Prevention:** Controllers should only:
|
|
136
|
+
1. Authenticate/authorize
|
|
137
|
+
2. Load/build the resource
|
|
138
|
+
3. Call save/update/destroy
|
|
139
|
+
4. Respond with redirect or render
|
|
140
|
+
|
|
141
|
+
### 6. Missing Validations
|
|
142
|
+
**Prevention:** Validate at model level, not just in forms:
|
|
143
|
+
- Presence on required fields
|
|
144
|
+
- Uniqueness with database-level constraint
|
|
145
|
+
- Format for emails, URLs, phone numbers
|
|
146
|
+
- Numericality for quantities, prices
|
|
147
|
+
|
|
148
|
+
### 7. Unscoped Queries (Multi-tenancy)
|
|
149
|
+
**Prevention:** Always scope queries to current user/account:
|
|
150
|
+
```ruby
|
|
151
|
+
# Bad
|
|
152
|
+
Post.find(params[:id])
|
|
153
|
+
|
|
154
|
+
# Good
|
|
155
|
+
Current.user.posts.find(params[:id])
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
### 8. Missing Error Handling
|
|
159
|
+
**Prevention:** Add `rescue_from` in `ApplicationController`:
|
|
160
|
+
```ruby
|
|
161
|
+
rescue_from ActiveRecord::RecordNotFound, with: :not_found
|
|
162
|
+
rescue_from ActionController::ParameterMissing, with: :bad_request
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
### 9. Synchronous External Calls
|
|
166
|
+
**Prevention:** Always use background jobs for:
|
|
167
|
+
- Sending emails
|
|
168
|
+
- Calling external APIs
|
|
169
|
+
- Processing uploads
|
|
170
|
+
- Generating reports
|
|
171
|
+
|
|
172
|
+
### 10. Missing CSRF Protection
|
|
173
|
+
**Prevention:** Rails enables CSRF by default. Don't disable `protect_from_forgery`. For API endpoints, use token auth instead.
|
|
174
|
+
|
|
175
|
+
</common_pitfalls>
|
|
176
|
+
|
|
177
|
+
<testing_patterns>
|
|
178
|
+
|
|
179
|
+
## Rails Testing Patterns (Minitest)
|
|
180
|
+
|
|
181
|
+
### Test Organization
|
|
182
|
+
```
|
|
183
|
+
test/
|
|
184
|
+
models/ # Unit tests for models
|
|
185
|
+
controllers/ # Integration tests for request/response
|
|
186
|
+
system/ # Browser-based end-to-end tests
|
|
187
|
+
helpers/ # Helper method tests
|
|
188
|
+
jobs/ # Background job tests
|
|
189
|
+
mailers/ # Mailer tests
|
|
190
|
+
fixtures/ # YAML test data
|
|
191
|
+
test_helper.rb # Shared setup
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
### Fixtures Over Factories
|
|
195
|
+
```yaml
|
|
196
|
+
# test/fixtures/users.yml
|
|
197
|
+
alice:
|
|
198
|
+
name: Alice
|
|
199
|
+
email: alice@example.com
|
|
200
|
+
password_digest: <%= BCrypt::Password.create('password') %>
|
|
201
|
+
|
|
202
|
+
bob:
|
|
203
|
+
name: Bob
|
|
204
|
+
email: bob@example.com
|
|
205
|
+
password_digest: <%= BCrypt::Password.create('password') %>
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
**Why fixtures:** Faster (loaded once per test suite), declarative, Rails-native, no external gem needed.
|
|
209
|
+
|
|
210
|
+
### Model Test Pattern
|
|
211
|
+
```ruby
|
|
212
|
+
class UserTest < ActiveSupport::TestCase
|
|
213
|
+
setup do
|
|
214
|
+
Current.session = sessions(:alice_session) # Always set Current context
|
|
215
|
+
end
|
|
216
|
+
|
|
217
|
+
test "validates email presence" do
|
|
218
|
+
user = User.new(name: "Test")
|
|
219
|
+
assert_not user.valid?
|
|
220
|
+
assert_includes user.errors[:email], "can't be blank"
|
|
221
|
+
end
|
|
222
|
+
|
|
223
|
+
test "creates user with valid attributes" do
|
|
224
|
+
assert_difference "User.count", 1 do
|
|
225
|
+
User.create!(name: "New", email: "new@example.com", password: "password")
|
|
226
|
+
end
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
### Controller Test Pattern (Integration)
|
|
232
|
+
```ruby
|
|
233
|
+
class PostsControllerTest < ActionDispatch::IntegrationTest
|
|
234
|
+
setup do
|
|
235
|
+
@user = users(:alice)
|
|
236
|
+
sign_in @user # Helper method
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
test "index returns posts" do
|
|
240
|
+
get posts_url
|
|
241
|
+
assert_response :success
|
|
242
|
+
assert_select "h2", posts(:first).title
|
|
243
|
+
end
|
|
244
|
+
|
|
245
|
+
test "create redirects on success" do
|
|
246
|
+
assert_difference "Post.count", 1 do
|
|
247
|
+
post posts_url, params: { post: { title: "New", body: "Content" } }
|
|
248
|
+
end
|
|
249
|
+
assert_redirected_to post_url(Post.last)
|
|
250
|
+
end
|
|
251
|
+
end
|
|
252
|
+
```
|
|
253
|
+
|
|
254
|
+
### System Test Pattern
|
|
255
|
+
```ruby
|
|
256
|
+
class UserFlowsTest < ApplicationSystemTestCase
|
|
257
|
+
test "user can sign up and create a post" do
|
|
258
|
+
visit new_registration_url
|
|
259
|
+
fill_in "Name", with: "Test User"
|
|
260
|
+
fill_in "Email", with: "test@example.com"
|
|
261
|
+
fill_in "Password", with: "password123"
|
|
262
|
+
click_on "Sign up"
|
|
263
|
+
|
|
264
|
+
assert_text "Welcome, Test User"
|
|
265
|
+
|
|
266
|
+
click_on "New Post"
|
|
267
|
+
fill_in "Title", with: "My First Post"
|
|
268
|
+
fill_in "Body", with: "Hello world"
|
|
269
|
+
click_on "Create Post"
|
|
270
|
+
|
|
271
|
+
assert_text "My First Post"
|
|
272
|
+
end
|
|
273
|
+
end
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
### Key Testing Conventions
|
|
277
|
+
- Use `assert_difference` for state changes, not just boolean checks
|
|
278
|
+
- Set `Current.session` in setup blocks for multi-tenancy
|
|
279
|
+
- Test happy path and one key failure path per method
|
|
280
|
+
- Use `assert_select` for HTML assertions in controller tests
|
|
281
|
+
- Run `bin/rails test` (not `rspec`) for the full suite
|
|
282
|
+
|
|
283
|
+
</testing_patterns>
|
|
284
|
+
|
|
285
|
+
<domain_templates>
|
|
286
|
+
|
|
287
|
+
## Rails Task Templates for Planning
|
|
288
|
+
|
|
289
|
+
These templates help the planner agent decompose common Rails work into well-structured tasks.
|
|
290
|
+
|
|
291
|
+
### Add Model
|
|
292
|
+
```
|
|
293
|
+
Tasks:
|
|
294
|
+
1. Create migration + model with validations, associations, and concerns
|
|
295
|
+
Files: db/migrate/xxx_create_[model].rb, app/models/[model].rb
|
|
296
|
+
2. Add model tests + fixtures
|
|
297
|
+
Files: test/models/[model]_test.rb, test/fixtures/[model].yml
|
|
298
|
+
```
|
|
299
|
+
|
|
300
|
+
### Add Controller (with views)
|
|
301
|
+
```
|
|
302
|
+
Tasks:
|
|
303
|
+
1. Add routes + controller with RESTful actions
|
|
304
|
+
Files: config/routes.rb, app/controllers/[model]_controller.rb
|
|
305
|
+
2. Add views (index, show, new, edit, _form partial)
|
|
306
|
+
Files: app/views/[model]/*.html.erb
|
|
307
|
+
3. Add controller tests
|
|
308
|
+
Files: test/controllers/[model]_controller_test.rb
|
|
309
|
+
```
|
|
310
|
+
|
|
311
|
+
### Add Authentication
|
|
312
|
+
```
|
|
313
|
+
Tasks:
|
|
314
|
+
1. Generate auth scaffold (Rails 8: bin/rails generate authentication)
|
|
315
|
+
or: Add User model with has_secure_password, Session model, SessionsController
|
|
316
|
+
Files: app/models/user.rb, app/models/session.rb, app/controllers/sessions_controller.rb
|
|
317
|
+
2. Add auth views (login, registration)
|
|
318
|
+
Files: app/views/sessions/*.html.erb, app/views/registrations/*.html.erb
|
|
319
|
+
3. Add auth tests
|
|
320
|
+
Files: test/controllers/sessions_controller_test.rb, test/models/user_test.rb
|
|
321
|
+
```
|
|
322
|
+
|
|
323
|
+
### Add Background Job
|
|
324
|
+
```
|
|
325
|
+
Tasks:
|
|
326
|
+
1. Create job class + model method it delegates to
|
|
327
|
+
Files: app/jobs/[name]_job.rb, app/models/[model].rb
|
|
328
|
+
2. Add job tests
|
|
329
|
+
Files: test/jobs/[name]_job_test.rb
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
### Add Mailer
|
|
333
|
+
```
|
|
334
|
+
Tasks:
|
|
335
|
+
1. Create mailer + views
|
|
336
|
+
Files: app/mailers/[name]_mailer.rb, app/views/[name]_mailer/*.html.erb
|
|
337
|
+
2. Add mailer tests
|
|
338
|
+
Files: test/mailers/[name]_mailer_test.rb
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
### Add Turbo/Hotwire Feature
|
|
342
|
+
```
|
|
343
|
+
Tasks:
|
|
344
|
+
1. Add Turbo Frame wrapping + controller turbo_stream response
|
|
345
|
+
Files: app/views/[model]/*.html.erb, app/controllers/[model]_controller.rb
|
|
346
|
+
2. Add Stimulus controller (if interactive behavior needed)
|
|
347
|
+
Files: app/javascript/controllers/[name]_controller.js
|
|
348
|
+
3. Add system test for real-time behavior
|
|
349
|
+
Files: test/system/[feature]_test.rb
|
|
350
|
+
```
|
|
351
|
+
|
|
352
|
+
</domain_templates>
|
|
353
|
+
|
|
354
|
+
<known_domains>
|
|
355
|
+
|
|
356
|
+
## Known Rails Domains (Skip Research)
|
|
357
|
+
|
|
358
|
+
These domains are well-understood in Rails and don't need web research:
|
|
359
|
+
|
|
360
|
+
| Domain | Key Patterns | Research Needed? |
|
|
361
|
+
|--------|-------------|-----------------|
|
|
362
|
+
| Models & Migrations | ActiveRecord, validations, associations, concerns | No |
|
|
363
|
+
| Controllers & Routes | RESTful resources, before_action, strong params | No |
|
|
364
|
+
| Views & Templates | ERB, partials, layouts, content_for | No |
|
|
365
|
+
| Authentication | has_secure_password, Devise, Rails 8 auth generator | No |
|
|
366
|
+
| Authorization | Pundit, CanCanCan, or hand-rolled | No |
|
|
367
|
+
| Background Jobs | Solid Queue, ActiveJob | No |
|
|
368
|
+
| Email | Action Mailer, letter_opener | No |
|
|
369
|
+
| File Uploads | Active Storage | No |
|
|
370
|
+
| Real-time | Action Cable, Turbo Streams | No |
|
|
371
|
+
| Testing | Minitest, fixtures, system tests | No |
|
|
372
|
+
| API Mode | Jbuilder, API-only controllers, token auth | No |
|
|
373
|
+
| Caching | Fragment caching, Russian doll, Solid Cache | No |
|
|
374
|
+
| Search | pg_search, Ransack | Maybe (depends on complexity) |
|
|
375
|
+
| Payments | Stripe, Pay gem | Yes (API details change) |
|
|
376
|
+
| External APIs | Third-party integrations | Yes (API-specific) |
|
|
377
|
+
| Novel Gems | Unfamiliar libraries | Yes |
|
|
378
|
+
| Infrastructure | Docker, Kamal, deployment | Maybe |
|
|
379
|
+
|
|
380
|
+
**Heuristic:** If all phase requirements map to "No" domains, skip research automatically. If any requirement maps to "Yes", consider `--research` flag.
|
|
381
|
+
|
|
382
|
+
</known_domains>
|
|
383
|
+
|
|
384
|
+
</rails_conventions>
|
|
@@ -14,9 +14,9 @@ Check if `--auto` flag is present in $ARGUMENTS.
|
|
|
14
14
|
**If auto mode:**
|
|
15
15
|
- Skip brownfield mapping offer (assume greenfield)
|
|
16
16
|
- Skip deep questioning (extract context from provided document)
|
|
17
|
-
-
|
|
17
|
+
- Skip config questions — use opinionated defaults (Step 5)
|
|
18
18
|
- After config: run Steps 6-9 automatically with smart defaults:
|
|
19
|
-
- Research:
|
|
19
|
+
- Research: No (Rails conventions pre-loaded). Use `--auto --research` to force research.
|
|
20
20
|
- Requirements: Include all table stakes + features from provided document
|
|
21
21
|
- Requirements approval: Auto-approve
|
|
22
22
|
- Roadmap approval: Auto-approve
|
|
@@ -215,129 +215,45 @@ mkdir -p .planning
|
|
|
215
215
|
ariadna-tools commit "docs: initialize project" --files .planning/PROJECT.md
|
|
216
216
|
```
|
|
217
217
|
|
|
218
|
-
## 5. Workflow
|
|
218
|
+
## 5. Workflow Configuration
|
|
219
219
|
|
|
220
|
-
**
|
|
220
|
+
**Use opinionated defaults. Only ask if user wants to customize.**
|
|
221
221
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
question: "How thorough should planning be?",
|
|
236
|
-
multiSelect: false,
|
|
237
|
-
options: [
|
|
238
|
-
{ label: "Quick", description: "Ship fast (3-5 phases, 1-3 plans each)" },
|
|
239
|
-
{ label: "Standard", description: "Balanced scope and speed (5-8 phases, 3-5 plans each)" },
|
|
240
|
-
{ label: "Comprehensive", description: "Thorough coverage (8-12 phases, 5-10 plans each)" }
|
|
241
|
-
]
|
|
242
|
-
},
|
|
243
|
-
{
|
|
244
|
-
header: "Execution",
|
|
245
|
-
question: "Run plans in parallel?",
|
|
246
|
-
multiSelect: false,
|
|
247
|
-
options: [
|
|
248
|
-
{ label: "Parallel (Recommended)", description: "Independent plans run simultaneously" },
|
|
249
|
-
{ label: "Sequential", description: "One plan at a time" }
|
|
250
|
-
]
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
header: "Git Tracking",
|
|
254
|
-
question: "Commit planning docs to git?",
|
|
255
|
-
multiSelect: false,
|
|
256
|
-
options: [
|
|
257
|
-
{ label: "Yes (Recommended)", description: "Planning docs tracked in version control" },
|
|
258
|
-
{ label: "No", description: "Keep .planning/ local-only (add to .gitignore)" }
|
|
259
|
-
]
|
|
222
|
+
Apply these defaults directly to `.planning/config.json`:
|
|
223
|
+
|
|
224
|
+
```json
|
|
225
|
+
{
|
|
226
|
+
"mode": "interactive",
|
|
227
|
+
"depth": "standard",
|
|
228
|
+
"parallelization": true,
|
|
229
|
+
"commit_docs": true,
|
|
230
|
+
"model_profile": "balanced",
|
|
231
|
+
"workflow": {
|
|
232
|
+
"research": false,
|
|
233
|
+
"plan_check": true,
|
|
234
|
+
"verifier": true
|
|
260
235
|
}
|
|
261
|
-
|
|
236
|
+
}
|
|
262
237
|
```
|
|
263
238
|
|
|
264
|
-
**
|
|
265
|
-
|
|
266
|
-
These spawn additional agents during planning/execution. They add tokens and time but improve quality.
|
|
267
|
-
|
|
268
|
-
| Agent | When it runs | What it does |
|
|
269
|
-
|-------|--------------|--------------|
|
|
270
|
-
| **Researcher** | Before planning each phase | Investigates domain, finds patterns, surfaces gotchas |
|
|
271
|
-
| **Plan Checker** | After plan is created | Verifies plan actually achieves the phase goal |
|
|
272
|
-
| **Verifier** | After phase execution | Confirms must-haves were delivered |
|
|
273
|
-
|
|
274
|
-
All recommended for important projects. Skip for quick experiments.
|
|
239
|
+
**Ask ONE question — only the non-obvious setting:**
|
|
275
240
|
|
|
276
241
|
```
|
|
277
242
|
questions: [
|
|
278
243
|
{
|
|
279
|
-
header: "
|
|
280
|
-
question: "
|
|
281
|
-
multiSelect: false,
|
|
282
|
-
options: [
|
|
283
|
-
{ label: "Yes (Recommended)", description: "Investigate domain, find patterns, surface gotchas" },
|
|
284
|
-
{ label: "No", description: "Plan directly from requirements" }
|
|
285
|
-
]
|
|
286
|
-
},
|
|
287
|
-
{
|
|
288
|
-
header: "Plan Check",
|
|
289
|
-
question: "Verify plans will achieve their goals? (adds tokens/time)",
|
|
290
|
-
multiSelect: false,
|
|
291
|
-
options: [
|
|
292
|
-
{ label: "Yes (Recommended)", description: "Catch gaps before execution starts" },
|
|
293
|
-
{ label: "No", description: "Execute plans without verification" }
|
|
294
|
-
]
|
|
295
|
-
},
|
|
296
|
-
{
|
|
297
|
-
header: "Verifier",
|
|
298
|
-
question: "Verify work satisfies requirements after each phase? (adds tokens/time)",
|
|
299
|
-
multiSelect: false,
|
|
300
|
-
options: [
|
|
301
|
-
{ label: "Yes (Recommended)", description: "Confirm deliverables match phase goals" },
|
|
302
|
-
{ label: "No", description: "Trust execution, skip verification" }
|
|
303
|
-
]
|
|
304
|
-
},
|
|
305
|
-
{
|
|
306
|
-
header: "Model Profile",
|
|
307
|
-
question: "Which AI models for planning agents?",
|
|
244
|
+
header: "Depth",
|
|
245
|
+
question: "How thorough should planning be?",
|
|
308
246
|
multiSelect: false,
|
|
309
247
|
options: [
|
|
310
|
-
{ label: "
|
|
311
|
-
{ label: "
|
|
312
|
-
{ label: "
|
|
248
|
+
{ label: "Standard (Recommended)", description: "Balanced scope and speed (5-8 phases, 3-5 plans each)" },
|
|
249
|
+
{ label: "Quick", description: "Ship fast (3-5 phases, 1-3 plans each)" },
|
|
250
|
+
{ label: "Comprehensive", description: "Thorough coverage (8-12 phases, 5-10 plans each)" }
|
|
313
251
|
]
|
|
314
252
|
}
|
|
315
253
|
]
|
|
316
254
|
```
|
|
317
255
|
|
|
318
|
-
Create `.planning/config.json` with
|
|
319
|
-
|
|
320
|
-
```json
|
|
321
|
-
{
|
|
322
|
-
"mode": "yolo|interactive",
|
|
323
|
-
"depth": "quick|standard|comprehensive",
|
|
324
|
-
"parallelization": true|false,
|
|
325
|
-
"commit_docs": true|false,
|
|
326
|
-
"model_profile": "quality|balanced|budget",
|
|
327
|
-
"workflow": {
|
|
328
|
-
"research": true|false,
|
|
329
|
-
"plan_check": true|false,
|
|
330
|
-
"verifier": true|false
|
|
331
|
-
}
|
|
332
|
-
}
|
|
333
|
-
```
|
|
334
|
-
|
|
335
|
-
**If commit_docs = No:**
|
|
336
|
-
- Set `commit_docs: false` in config.json
|
|
337
|
-
- Add `.planning/` to `.gitignore` (create if needed)
|
|
338
|
-
|
|
339
|
-
**If commit_docs = Yes:**
|
|
340
|
-
- No additional gitignore entries needed
|
|
256
|
+
Create `.planning/config.json` with the defaults above, applying the user's depth selection.
|
|
341
257
|
|
|
342
258
|
**Commit config.json:**
|
|
343
259
|
|
|
@@ -345,24 +261,26 @@ Create `.planning/config.json` with all settings:
|
|
|
345
261
|
ariadna-tools commit "chore: add project config" --files .planning/config.json
|
|
346
262
|
```
|
|
347
263
|
|
|
348
|
-
**Note:** Run `/ariadna:settings` anytime to update these preferences.
|
|
264
|
+
**Note:** Run `/ariadna:settings` anytime to update these preferences (research, model profile, parallelization, etc.).
|
|
349
265
|
|
|
350
266
|
## 5.5. Resolve Model Profile
|
|
351
267
|
|
|
352
|
-
Use models from init: `
|
|
268
|
+
Use models from init: `roadmapper_model`.
|
|
353
269
|
|
|
354
270
|
## 6. Research Decision
|
|
355
271
|
|
|
356
|
-
**
|
|
272
|
+
**Default: Skip research.** Rails conventions are pre-loaded via `rails-conventions.md` reference document, which provides standard stack, architecture patterns, common pitfalls, and testing patterns.
|
|
357
273
|
|
|
358
|
-
|
|
359
|
-
- header: "Research"
|
|
360
|
-
- question: "Research the domain ecosystem before defining requirements?"
|
|
361
|
-
- options:
|
|
362
|
-
- "Research first (Recommended)" — Discover standard stacks, expected features, architecture patterns
|
|
363
|
-
- "Skip research" — I know this domain well, go straight to requirements
|
|
274
|
+
**If `--research` flag was passed or auto mode:** Run full research (see below).
|
|
364
275
|
|
|
365
|
-
**
|
|
276
|
+
**Otherwise:** Display skip notice and continue to Step 7:
|
|
277
|
+
|
|
278
|
+
```
|
|
279
|
+
Using pre-loaded Rails conventions (stack, architecture, patterns, pitfalls).
|
|
280
|
+
To research instead: /ariadna:new-project --research
|
|
281
|
+
```
|
|
282
|
+
|
|
283
|
+
**If research requested (`--research` flag or auto mode):**
|
|
366
284
|
|
|
367
285
|
Display stage banner:
|
|
368
286
|
```
|
|
@@ -596,7 +514,7 @@ Display research complete banner and key findings:
|
|
|
596
514
|
Files: `.planning/research/`
|
|
597
515
|
```
|
|
598
516
|
|
|
599
|
-
**If
|
|
517
|
+
**If research not requested:** Continue to Step 7.
|
|
600
518
|
|
|
601
519
|
## 7. Define Requirements
|
|
602
520
|
|
|
@@ -769,6 +687,9 @@ Task(prompt="
|
|
|
769
687
|
**Research (if exists):**
|
|
770
688
|
@.planning/research/SUMMARY.md
|
|
771
689
|
|
|
690
|
+
**Rails Conventions (pre-loaded domain knowledge):**
|
|
691
|
+
@~/.claude/ariadna/references/rails-conventions.md
|
|
692
|
+
|
|
772
693
|
**Config:**
|
|
773
694
|
@.planning/config.json
|
|
774
695
|
|
|
@@ -780,8 +701,9 @@ Create roadmap:
|
|
|
780
701
|
2. Map every v1 requirement to exactly one phase
|
|
781
702
|
3. Derive 2-5 success criteria per phase (observable user behaviors)
|
|
782
703
|
4. Validate 100% coverage
|
|
783
|
-
5.
|
|
784
|
-
6.
|
|
704
|
+
5. Use Rails conventions reference for standard patterns and build order
|
|
705
|
+
6. Write files immediately (ROADMAP.md, STATE.md, update REQUIREMENTS.md traceability)
|
|
706
|
+
7. Return ROADMAP CREATED with summary
|
|
785
707
|
|
|
786
708
|
Write files first, then return. This ensures artifacts persist even if context is lost.
|
|
787
709
|
</instructions>
|
|
@@ -903,14 +825,15 @@ Present completion with next steps:
|
|
|
903
825
|
|
|
904
826
|
**Phase 1: [Phase Name]** — [Goal from ROADMAP.md]
|
|
905
827
|
|
|
906
|
-
/ariadna:
|
|
828
|
+
/ariadna:plan-phase 1
|
|
907
829
|
|
|
908
830
|
<sub>/clear first → fresh context window</sub>
|
|
909
831
|
|
|
910
832
|
---
|
|
911
833
|
|
|
912
834
|
**Also available:**
|
|
913
|
-
- /ariadna:
|
|
835
|
+
- /ariadna:discuss-phase 1 — gather detailed context before planning (optional)
|
|
836
|
+
- /ariadna:plan-phase 1 --research — research before planning (for non-standard integrations)
|
|
914
837
|
|
|
915
838
|
───────────────────────────────────────────────────────────────
|
|
916
839
|
```
|
|
@@ -940,18 +863,18 @@ Present completion with next steps:
|
|
|
940
863
|
- [ ] Brownfield detection completed
|
|
941
864
|
- [ ] Deep questioning completed (threads followed, not rushed)
|
|
942
865
|
- [ ] PROJECT.md captures full context → **committed**
|
|
943
|
-
- [ ] config.json has
|
|
944
|
-
- [ ] Research completed (if
|
|
945
|
-
- [ ] Requirements gathered (from research or conversation)
|
|
866
|
+
- [ ] config.json has opinionated defaults → **committed**
|
|
867
|
+
- [ ] Research completed (only if `--research` flag) — 4 parallel agents spawned → **committed**
|
|
868
|
+
- [ ] Requirements gathered (from research or conversation, with Rails conventions as context)
|
|
946
869
|
- [ ] User scoped each category (v1/v2/out of scope)
|
|
947
870
|
- [ ] REQUIREMENTS.md created with REQ-IDs → **committed**
|
|
948
|
-
- [ ] ariadna-roadmapper spawned with context
|
|
871
|
+
- [ ] ariadna-roadmapper spawned with context (including rails-conventions.md)
|
|
949
872
|
- [ ] Roadmap files written immediately (not draft)
|
|
950
873
|
- [ ] User feedback incorporated (if any)
|
|
951
874
|
- [ ] ROADMAP.md created with phases, requirement mappings, success criteria
|
|
952
875
|
- [ ] STATE.md initialized
|
|
953
876
|
- [ ] REQUIREMENTS.md traceability updated
|
|
954
|
-
- [ ] User knows next step is `/ariadna:
|
|
877
|
+
- [ ] User knows next step is `/ariadna:plan-phase 1`
|
|
955
878
|
|
|
956
879
|
**Atomic commits:** Each phase commits its artifacts immediately. If context is lost, artifacts persist.
|
|
957
880
|
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<purpose>
|
|
2
|
-
Create executable phase prompts (PLAN.md files) for a roadmap phase
|
|
2
|
+
Create executable phase prompts (PLAN.md files) for a roadmap phase. Default flow: Context (inline if needed) -> Plan -> Verify -> Done. Orchestrates ariadna-planner and ariadna-plan-checker agents. Research skipped by default (Rails conventions pre-loaded); use --research to force research for non-standard integrations.
|
|
3
3
|
</purpose>
|
|
4
4
|
|
|
5
5
|
<required_reading>
|
|
6
6
|
Read all files referenced by the invoking prompt's execution_context before starting.
|
|
7
7
|
|
|
8
8
|
@~/.claude/ariadna/references/ui-brand.md
|
|
9
|
+
@~/.claude/ariadna/references/rails-conventions.md
|
|
9
10
|
</required_reading>
|
|
10
11
|
|
|
11
12
|
<process>
|
|
@@ -26,7 +27,7 @@ Parse JSON for: `researcher_model`, `planner_model`, `checker_model`, `research_
|
|
|
26
27
|
|
|
27
28
|
## 2. Parse and Normalize Arguments
|
|
28
29
|
|
|
29
|
-
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--gaps`, `--skip-verify`).
|
|
30
|
+
Extract from $ARGUMENTS: phase number (integer or decimal like `2.1`), flags (`--research`, `--skip-research`, `--gaps`, `--skip-verify`, `--skip-context`).
|
|
30
31
|
|
|
31
32
|
**If no phase number:** Detect next unplanned phase from roadmap.
|
|
32
33
|
|
|
@@ -45,21 +46,55 @@ PHASE_INFO=$(ariadna-tools roadmap get-phase "${PHASE}")
|
|
|
45
46
|
|
|
46
47
|
**If `found` is false:** Error with available phases. **If `found` is true:** Extract `phase_number`, `phase_name`, `goal` from JSON.
|
|
47
48
|
|
|
48
|
-
## 4.
|
|
49
|
+
## 4. Inline Context Gathering (Replaces discuss-phase)
|
|
49
50
|
|
|
50
51
|
Use `context_content` from init JSON (already loaded via `--include context`).
|
|
51
52
|
|
|
52
|
-
**
|
|
53
|
+
**If `context_content` is not null:** Display: `Using phase context from: ${PHASE_DIR}/*-CONTEXT.md` and skip to step 5.
|
|
53
54
|
|
|
54
|
-
If `context_content` is
|
|
55
|
+
**If `context_content` is null AND no `--skip-context` flag:**
|
|
56
|
+
|
|
57
|
+
Analyze the phase goal from `roadmap_content` and determine if there are implementation decisions the user should weigh in on.
|
|
58
|
+
|
|
59
|
+
**Quick assessment — does this phase need context?**
|
|
60
|
+
|
|
61
|
+
- Pure infrastructure / setup / configuration → No context needed, skip
|
|
62
|
+
- Standard CRUD (models, controllers, views) → No context needed, skip
|
|
63
|
+
- User-facing features with UI/UX decisions → Context helpful
|
|
64
|
+
- Features with multiple valid approaches → Context helpful
|
|
65
|
+
|
|
66
|
+
**If context would be helpful:** Offer inline clarification with a single AskUserQuestion:
|
|
67
|
+
|
|
68
|
+
```
|
|
69
|
+
questions: [
|
|
70
|
+
{
|
|
71
|
+
header: "Context",
|
|
72
|
+
question: "Phase {X}: {Name} has some implementation choices. Want to discuss them before planning?",
|
|
73
|
+
multiSelect: false,
|
|
74
|
+
options: [
|
|
75
|
+
{ label: "Plan directly (Recommended)", description: "Planner will make reasonable choices, you review the plan" },
|
|
76
|
+
{ label: "Quick discussion", description: "Clarify 2-3 key decisions inline" },
|
|
77
|
+
{ label: "Full discussion", description: "Run /ariadna:discuss-phase for detailed context gathering" }
|
|
78
|
+
]
|
|
79
|
+
}
|
|
80
|
+
]
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
- **"Plan directly":** Continue to step 5. Planner will use its judgment for ambiguous areas.
|
|
84
|
+
- **"Quick discussion":** Identify 2-3 key gray areas and ask focused AskUserQuestion for each. Write a lightweight CONTEXT.md to the phase directory. Then continue to step 5.
|
|
85
|
+
- **"Full discussion":** Exit and tell user to run `/ariadna:discuss-phase {X}` first, then return.
|
|
86
|
+
|
|
87
|
+
**CRITICAL:** Use `context_content` from INIT — pass to planner and checker agents.
|
|
55
88
|
|
|
56
89
|
## 5. Handle Research
|
|
57
90
|
|
|
58
|
-
**Skip
|
|
91
|
+
**Default: Skip research.** Rails conventions are pre-loaded via `rails-conventions.md`.
|
|
92
|
+
|
|
93
|
+
**Skip if:** `--gaps` flag, or `research_enabled` is false (default) without `--research` override.
|
|
59
94
|
|
|
60
95
|
**If `has_research` is true (from init) AND no `--research` flag:** Use existing, skip to step 6.
|
|
61
96
|
|
|
62
|
-
**If
|
|
97
|
+
**If `--research` flag explicitly passed:**
|
|
63
98
|
|
|
64
99
|
Display banner:
|
|
65
100
|
```
|
|
@@ -179,6 +214,14 @@ IMPORTANT: If context exists below, it contains USER DECISIONS from /ariadna:dis
|
|
|
179
214
|
**Gap Closure (if --gaps):** {verification_content} {uat_content}
|
|
180
215
|
</planning_context>
|
|
181
216
|
|
|
217
|
+
<rails_context>
|
|
218
|
+
Use Rails conventions from your required reading (rails-conventions.md) for:
|
|
219
|
+
- Standard task decomposition patterns (model → migration+model+tests, controller → routes+controller+views+tests)
|
|
220
|
+
- Known domain detection (skip discovery for standard Rails work)
|
|
221
|
+
- Architecture patterns (MVC, concerns, service objects)
|
|
222
|
+
- Common pitfall prevention (N+1, mass assignment, fat controllers)
|
|
223
|
+
</rails_context>
|
|
224
|
+
|
|
182
225
|
<downstream_consumer>
|
|
183
226
|
Output consumed by /ariadna:execute-phase. Plans need:
|
|
184
227
|
- Frontmatter (wave, depends_on, files_modified, autonomous)
|
|
@@ -248,7 +291,7 @@ IMPORTANT: Plans MUST honor user decisions. Flag as issue if plans contradict.
|
|
|
248
291
|
|
|
249
292
|
<expected_output>
|
|
250
293
|
- ## VERIFICATION PASSED — all checks pass
|
|
251
|
-
- ## ISSUES FOUND — structured issue list
|
|
294
|
+
- ## ISSUES FOUND — structured issue list with severity (minor/major/blocker)
|
|
252
295
|
</expected_output>
|
|
253
296
|
```
|
|
254
297
|
|
|
@@ -264,58 +307,65 @@ Task(
|
|
|
264
307
|
## 11. Handle Checker Return
|
|
265
308
|
|
|
266
309
|
- **`## VERIFICATION PASSED`:** Display confirmation, proceed to step 13.
|
|
267
|
-
- **`## ISSUES FOUND`:**
|
|
268
|
-
|
|
269
|
-
## 12. Revision Loop (Max 3 Iterations)
|
|
310
|
+
- **`## ISSUES FOUND`:** Classify issues and proceed to step 12.
|
|
270
311
|
|
|
271
|
-
|
|
312
|
+
## 12. Handle Checker Issues (Inline Fix, No Revision Loop)
|
|
272
313
|
|
|
273
|
-
**
|
|
314
|
+
**Classify each issue by severity:**
|
|
274
315
|
|
|
275
|
-
|
|
316
|
+
### Minor Issues (orchestrator fixes inline)
|
|
317
|
+
Issues the orchestrator can fix directly with the Edit tool — no agent re-spawn needed:
|
|
318
|
+
- Missing requirement mapping in frontmatter
|
|
319
|
+
- Dependency ordering errors (wrong wave number)
|
|
320
|
+
- Missing `<verify>` or `<done>` elements in tasks
|
|
321
|
+
- Frontmatter field corrections
|
|
322
|
+
- must_haves adjustments
|
|
276
323
|
|
|
277
|
-
|
|
278
|
-
|
|
324
|
+
**For minor issues:** Fix the PLAN.md files directly using the Edit tool:
|
|
325
|
+
```
|
|
326
|
+
Read the PLAN.md file, apply the fix, write it back.
|
|
279
327
|
```
|
|
280
328
|
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
```markdown
|
|
284
|
-
<revision_context>
|
|
285
|
-
**Phase:** {phase_number}
|
|
286
|
-
**Mode:** revision
|
|
287
|
-
|
|
288
|
-
**Existing plans:** {plans_content}
|
|
289
|
-
**Checker issues:** {structured_issues_from_checker}
|
|
329
|
+
Display: `Fixed {N} minor issue(s) inline.`
|
|
290
330
|
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
331
|
+
### Major Issues (present to user)
|
|
332
|
+
Issues that require architectural decisions or significant plan restructuring:
|
|
333
|
+
- Missing requirements with no clear task mapping
|
|
334
|
+
- Incorrect decomposition (tasks too large or wrong scope)
|
|
335
|
+
- Contradictions with user decisions from CONTEXT.md
|
|
336
|
+
- Scope creep (tasks implementing deferred ideas)
|
|
295
337
|
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
338
|
+
**For major issues:** Present to user with AskUserQuestion:
|
|
339
|
+
```
|
|
340
|
+
questions: [
|
|
341
|
+
{
|
|
342
|
+
header: "Plan Issues",
|
|
343
|
+
question: "The plan checker found {N} issue(s) that need your input. How to proceed?",
|
|
344
|
+
multiSelect: false,
|
|
345
|
+
options: [
|
|
346
|
+
{ label: "Accept as-is", description: "Proceed despite issues" },
|
|
347
|
+
{ label: "Re-plan", description: "Spawn planner again with issue context" },
|
|
348
|
+
{ label: "Fix manually", description: "I'll edit the PLAN.md files myself" }
|
|
349
|
+
]
|
|
350
|
+
}
|
|
351
|
+
]
|
|
301
352
|
```
|
|
302
353
|
|
|
354
|
+
- **"Accept as-is":** Proceed to step 13.
|
|
355
|
+
- **"Re-plan":** Spawn planner in revision mode (single attempt, not a loop):
|
|
356
|
+
|
|
303
357
|
```
|
|
304
358
|
Task(
|
|
305
|
-
prompt="First, read ~/.claude/agents/ariadna-planner.md for your role and instructions.\n\n" +
|
|
359
|
+
prompt="First, read ~/.claude/agents/ariadna-planner.md for your role and instructions.\n\n" + revision_prompt_with_issues,
|
|
306
360
|
subagent_type="general-purpose",
|
|
307
361
|
model="{planner_model}",
|
|
308
362
|
description="Revise Phase {phase} plans"
|
|
309
363
|
)
|
|
310
364
|
```
|
|
311
365
|
|
|
312
|
-
After planner returns
|
|
313
|
-
|
|
314
|
-
**If iteration_count >= 3:**
|
|
315
|
-
|
|
316
|
-
Display: `Max iterations reached. {N} issues remain:` + issue list
|
|
366
|
+
After planner returns, proceed to step 13 (no re-check loop).
|
|
317
367
|
|
|
318
|
-
|
|
368
|
+
- **"Fix manually":** Display file paths and exit.
|
|
319
369
|
|
|
320
370
|
## 13. Present Final Status
|
|
321
371
|
|
|
@@ -337,8 +387,9 @@ Output this markdown directly (not as a code block):
|
|
|
337
387
|
| 1 | 01, 02 | [objectives] |
|
|
338
388
|
| 2 | 03 | [objective] |
|
|
339
389
|
|
|
340
|
-
|
|
341
|
-
|
|
390
|
+
Context: {Gathered inline | Used existing | Skipped}
|
|
391
|
+
Research: {Completed | Used existing | Skipped (Rails conventions loaded)}
|
|
392
|
+
Verification: {Passed | Passed with fixes | Skipped}
|
|
342
393
|
|
|
343
394
|
───────────────────────────────────────────────────────────────
|
|
344
395
|
|
|
@@ -363,14 +414,14 @@ Verification: {Passed | Passed with override | Skipped}
|
|
|
363
414
|
- [ ] .planning/ directory validated
|
|
364
415
|
- [ ] Phase validated against roadmap
|
|
365
416
|
- [ ] Phase directory created if needed
|
|
366
|
-
- [ ] CONTEXT.md
|
|
367
|
-
- [ ] Research
|
|
368
|
-
- [ ] ariadna-phase-researcher spawned with CONTEXT.md
|
|
417
|
+
- [ ] Context handled: existing CONTEXT.md used, inline gathering offered, or skipped
|
|
418
|
+
- [ ] Research skipped by default (Rails conventions in context), or completed if --research flag
|
|
369
419
|
- [ ] Existing plans checked
|
|
370
|
-
- [ ] ariadna-planner spawned with CONTEXT.md + RESEARCH.md
|
|
420
|
+
- [ ] ariadna-planner spawned with rails-conventions + any CONTEXT.md + RESEARCH.md
|
|
371
421
|
- [ ] Plans created (PLANNING COMPLETE or CHECKPOINT handled)
|
|
372
|
-
- [ ] ariadna-plan-checker spawned
|
|
373
|
-
- [ ]
|
|
422
|
+
- [ ] ariadna-plan-checker spawned (unless --skip-verify)
|
|
423
|
+
- [ ] Minor checker issues fixed inline by orchestrator (no revision loop)
|
|
424
|
+
- [ ] Major checker issues presented to user for decision
|
|
374
425
|
- [ ] User sees status between agent spawns
|
|
375
426
|
- [ ] User knows next steps
|
|
376
427
|
</success_criteria>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ariadna:new-project
|
|
3
3
|
description: Initialize a new project with deep context gathering and PROJECT.md
|
|
4
|
-
argument-hint: "[--auto]"
|
|
4
|
+
argument-hint: "[--auto] [--research]"
|
|
5
5
|
allowed-tools:
|
|
6
6
|
- Read
|
|
7
7
|
- Bash
|
|
@@ -11,27 +11,29 @@ allowed-tools:
|
|
|
11
11
|
---
|
|
12
12
|
<context>
|
|
13
13
|
**Flags:**
|
|
14
|
-
- `--auto` — Automatic mode.
|
|
14
|
+
- `--auto` — Automatic mode. Skips config questions, runs requirements → roadmap without further interaction. Expects idea document via @ reference.
|
|
15
|
+
- `--research` — Force domain research (4 parallel researchers + synthesizer). By default, research is skipped and Rails conventions are pre-loaded.
|
|
15
16
|
</context>
|
|
16
17
|
|
|
17
18
|
<objective>
|
|
18
|
-
Initialize a new project through
|
|
19
|
+
Initialize a new project through streamlined flow: questioning → requirements → roadmap. Research skipped by default (Rails conventions pre-loaded); use --research for non-standard domains.
|
|
19
20
|
|
|
20
21
|
**Creates:**
|
|
21
22
|
- `.planning/PROJECT.md` — project context
|
|
22
|
-
- `.planning/config.json` — workflow preferences
|
|
23
|
-
- `.planning/research/` — domain research (
|
|
23
|
+
- `.planning/config.json` — workflow preferences (opinionated defaults)
|
|
24
|
+
- `.planning/research/` — domain research (only with --research flag)
|
|
24
25
|
- `.planning/REQUIREMENTS.md` — scoped requirements
|
|
25
26
|
- `.planning/ROADMAP.md` — phase structure
|
|
26
27
|
- `.planning/STATE.md` — project memory
|
|
27
28
|
|
|
28
|
-
**After this command:** Run `/ariadna:plan-phase 1` to start
|
|
29
|
+
**After this command:** Run `/ariadna:plan-phase 1` to start planning.
|
|
29
30
|
</objective>
|
|
30
31
|
|
|
31
32
|
<execution_context>
|
|
32
33
|
@~/.claude/ariadna/workflows/new-project.md
|
|
33
34
|
@~/.claude/ariadna/references/questioning.md
|
|
34
35
|
@~/.claude/ariadna/references/ui-brand.md
|
|
36
|
+
@~/.claude/ariadna/references/rails-conventions.md
|
|
35
37
|
@~/.claude/ariadna/templates/project.md
|
|
36
38
|
@~/.claude/ariadna/templates/requirements.md
|
|
37
39
|
</execution_context>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: ariadna:plan-phase
|
|
3
3
|
description: Create detailed execution plan for a phase (PLAN.md) with verification loop
|
|
4
|
-
argument-hint: "[phase] [--research] [--skip-research] [--gaps] [--skip-verify]"
|
|
4
|
+
argument-hint: "[phase] [--research] [--skip-research] [--gaps] [--skip-verify] [--skip-context]"
|
|
5
5
|
agent: ariadna-planner
|
|
6
6
|
allowed-tools:
|
|
7
7
|
- Read
|
|
@@ -14,26 +14,28 @@ allowed-tools:
|
|
|
14
14
|
- mcp__context7__*
|
|
15
15
|
---
|
|
16
16
|
<objective>
|
|
17
|
-
Create executable phase prompts (PLAN.md files) for a roadmap phase
|
|
17
|
+
Create executable phase prompts (PLAN.md files) for a roadmap phase. Research skipped by default (Rails conventions pre-loaded). Includes optional inline context gathering (replaces separate discuss-phase step).
|
|
18
18
|
|
|
19
|
-
**Default flow:**
|
|
19
|
+
**Default flow:** Context (inline if needed) → Plan → Verify → Done
|
|
20
20
|
|
|
21
|
-
**Orchestrator role:** Parse arguments, validate phase,
|
|
21
|
+
**Orchestrator role:** Parse arguments, validate phase, offer inline context gathering, spawn ariadna-planner (with Rails conventions), verify with ariadna-plan-checker (single pass, inline fixes for minor issues), present results.
|
|
22
22
|
</objective>
|
|
23
23
|
|
|
24
24
|
<execution_context>
|
|
25
25
|
@~/.claude/ariadna/workflows/plan-phase.md
|
|
26
26
|
@~/.claude/ariadna/references/ui-brand.md
|
|
27
|
+
@~/.claude/ariadna/references/rails-conventions.md
|
|
27
28
|
</execution_context>
|
|
28
29
|
|
|
29
30
|
<context>
|
|
30
31
|
Phase number: $ARGUMENTS (optional — auto-detects next unplanned phase if omitted)
|
|
31
32
|
|
|
32
33
|
**Flags:**
|
|
33
|
-
- `--research` — Force
|
|
34
|
-
- `--skip-research` — Skip research, go straight to planning
|
|
34
|
+
- `--research` — Force research even if not enabled in config (for non-standard integrations)
|
|
35
|
+
- `--skip-research` — Skip research, go straight to planning (default behavior)
|
|
35
36
|
- `--gaps` — Gap closure mode (reads VERIFICATION.md, skips research)
|
|
36
|
-
- `--skip-verify` — Skip verification
|
|
37
|
+
- `--skip-verify` — Skip plan verification
|
|
38
|
+
- `--skip-context` — Skip inline context gathering, plan directly
|
|
37
39
|
|
|
38
40
|
Normalize phase input in step 2 before any directory lookups.
|
|
39
41
|
</context>
|
|
@@ -12,7 +12,7 @@ module Ariadna
|
|
|
12
12
|
"branching_strategy" => "none",
|
|
13
13
|
"phase_branch_template" => "ariadna/phase-{phase}-{slug}",
|
|
14
14
|
"milestone_branch_template" => "ariadna/{milestone}-{slug}",
|
|
15
|
-
"research" =>
|
|
15
|
+
"research" => false,
|
|
16
16
|
"plan_checker" => true,
|
|
17
17
|
"verifier" => true,
|
|
18
18
|
"parallelization" => true,
|
|
@@ -89,7 +89,7 @@ module Ariadna
|
|
|
89
89
|
phase_branch_template: "ariadna/phase-{phase}-{slug}",
|
|
90
90
|
milestone_branch_template: "ariadna/{milestone}-{slug}",
|
|
91
91
|
workflow: {
|
|
92
|
-
research:
|
|
92
|
+
research: false,
|
|
93
93
|
plan_check: true,
|
|
94
94
|
verifier: true
|
|
95
95
|
},
|
|
@@ -210,6 +210,8 @@ module Ariadna
|
|
|
210
210
|
key = key_match[2]
|
|
211
211
|
value = key_match[3].strip
|
|
212
212
|
|
|
213
|
+
next unless current[:obj].is_a?(Hash)
|
|
214
|
+
|
|
213
215
|
if value.empty? || value == "["
|
|
214
216
|
current[:obj][key] = value == "[" ? [] : {}
|
|
215
217
|
stack.push({ obj: current[:obj][key], key: nil, indent: indent })
|
data/lib/ariadna/version.rb
CHANGED
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ariadna
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 1.
|
|
4
|
+
version: 1.2.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jorge Alvarez
|
|
@@ -45,6 +45,7 @@ files:
|
|
|
45
45
|
- data/ariadna/references/phase-argument-parsing.md
|
|
46
46
|
- data/ariadna/references/planning-config.md
|
|
47
47
|
- data/ariadna/references/questioning.md
|
|
48
|
+
- data/ariadna/references/rails-conventions.md
|
|
48
49
|
- data/ariadna/references/tdd.md
|
|
49
50
|
- data/ariadna/references/ui-brand.md
|
|
50
51
|
- data/ariadna/references/verification-patterns.md
|