ariadna 1.2.1 → 1.2.2
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-backend-executor.md +5 -5
- data/data/agents/ariadna-codebase-mapper.md +5 -5
- data/data/agents/ariadna-debugger.md +13 -13
- data/data/agents/ariadna-executor.md +5 -5
- data/data/agents/ariadna-frontend-executor.md +5 -5
- data/data/agents/ariadna-integration-checker.md +1 -1
- data/data/agents/ariadna-phase-researcher.md +1 -1
- data/data/agents/ariadna-planner.md +17 -17
- data/data/agents/ariadna-project-researcher.md +10 -10
- data/data/agents/ariadna-research-synthesizer.md +11 -11
- data/data/agents/ariadna-roadmapper.md +8 -8
- data/data/agents/ariadna-test-executor.md +5 -5
- data/data/agents/ariadna-verifier.md +4 -4
- data/data/ariadna/references/decimal-phase-calculation.md +2 -2
- data/data/ariadna/references/git-integration.md +4 -4
- data/data/ariadna/references/git-planning-commit.md +7 -7
- data/data/ariadna/references/model-profile-resolution.md +1 -1
- data/data/ariadna/references/model-profiles.md +2 -2
- data/data/ariadna/references/planning-config.md +13 -13
- data/data/ariadna/references/tdd.md +2 -2
- data/data/ariadna/templates/DEBUG.md +2 -2
- data/data/ariadna/templates/UAT.md +3 -3
- data/data/ariadna/templates/codebase/architecture.md +1 -1
- data/data/ariadna/templates/codebase/concerns.md +1 -1
- data/data/ariadna/templates/codebase/conventions.md +1 -1
- data/data/ariadna/templates/codebase/integrations.md +1 -1
- data/data/ariadna/templates/codebase/stack.md +1 -1
- data/data/ariadna/templates/codebase/structure.md +1 -1
- data/data/ariadna/templates/codebase/testing.md +1 -1
- data/data/ariadna/templates/context.md +2 -2
- data/data/ariadna/templates/continue-here.md +1 -1
- data/data/ariadna/templates/debug-subagent-prompt.md +2 -2
- data/data/ariadna/templates/discovery.md +2 -2
- data/data/ariadna/templates/milestone-archive.md +4 -4
- data/data/ariadna/templates/milestone.md +1 -1
- data/data/ariadna/templates/phase-prompt.md +19 -19
- data/data/ariadna/templates/planner-subagent-prompt.md +9 -9
- data/data/ariadna/templates/project.md +2 -2
- data/data/ariadna/templates/requirements.md +1 -1
- data/data/ariadna/templates/research-project/ARCHITECTURE.md +1 -1
- data/data/ariadna/templates/research-project/FEATURES.md +1 -1
- data/data/ariadna/templates/research-project/PITFALLS.md +1 -1
- data/data/ariadna/templates/research-project/STACK.md +1 -1
- data/data/ariadna/templates/research-project/SUMMARY.md +1 -1
- data/data/ariadna/templates/research.md +2 -2
- data/data/ariadna/templates/roadmap.md +1 -1
- data/data/ariadna/templates/state.md +4 -4
- data/data/ariadna/templates/summary.md +1 -1
- data/data/ariadna/templates/user-setup.md +2 -2
- data/data/ariadna/templates/verification-report.md +1 -1
- data/data/ariadna/workflows/add-phase.md +5 -5
- data/data/ariadna/workflows/add-todo.md +7 -7
- data/data/ariadna/workflows/audit-milestone.md +7 -7
- data/data/ariadna/workflows/check-todos.md +4 -4
- data/data/ariadna/workflows/complete-milestone.md +18 -18
- data/data/ariadna/workflows/diagnose-issues.md +4 -4
- data/data/ariadna/workflows/discovery-phase.md +4 -4
- data/data/ariadna/workflows/discuss-phase.md +2 -2
- data/data/ariadna/workflows/execute-phase.md +4 -4
- data/data/ariadna/workflows/execute-plan.md +19 -19
- data/data/ariadna/workflows/help.md +18 -18
- data/data/ariadna/workflows/insert-phase.md +6 -6
- data/data/ariadna/workflows/list-phase-assumptions.md +1 -1
- data/data/ariadna/workflows/map-codebase.md +22 -22
- data/data/ariadna/workflows/new-milestone.md +16 -16
- data/data/ariadna/workflows/new-project.md +39 -39
- data/data/ariadna/workflows/pause-work.md +4 -4
- data/data/ariadna/workflows/plan-milestone-gaps.md +4 -4
- data/data/ariadna/workflows/plan-phase.md +3 -3
- data/data/ariadna/workflows/progress.md +6 -6
- data/data/ariadna/workflows/quick.md +6 -6
- data/data/ariadna/workflows/remove-phase.md +3 -3
- data/data/ariadna/workflows/research-phase.md +4 -4
- data/data/ariadna/workflows/resume-project.md +9 -9
- data/data/ariadna/workflows/set-profile.md +2 -2
- data/data/ariadna/workflows/settings.md +4 -4
- data/data/ariadna/workflows/transition.md +11 -11
- data/data/ariadna/workflows/verify-phase.md +2 -2
- data/data/ariadna/workflows/verify-work.md +8 -8
- data/data/commands/ariadna/add-phase.md +2 -2
- data/data/commands/ariadna/add-todo.md +1 -1
- data/data/commands/ariadna/audit-milestone.md +6 -6
- data/data/commands/ariadna/check-todos.md +2 -2
- data/data/commands/ariadna/complete-milestone.md +11 -11
- data/data/commands/ariadna/debug.md +3 -3
- data/data/commands/ariadna/discuss-phase.md +2 -2
- data/data/commands/ariadna/execute-phase.md +2 -2
- data/data/commands/ariadna/insert-phase.md +2 -2
- data/data/commands/ariadna/list-phase-assumptions.md +2 -2
- data/data/commands/ariadna/map-codebase.md +7 -7
- data/data/commands/ariadna/new-milestone.md +10 -10
- data/data/commands/ariadna/new-project.md +6 -6
- data/data/commands/ariadna/pause-work.md +1 -1
- data/data/commands/ariadna/plan-milestone-gaps.md +5 -5
- data/data/commands/ariadna/quick.md +2 -2
- data/data/commands/ariadna/remove-phase.md +2 -2
- data/data/commands/ariadna/research-phase.md +6 -6
- data/data/commands/ariadna/verify-work.md +2 -2
- data/data/statusline/ariadna-statusline.sh +47 -0
- data/data/templates.md +1 -1
- data/exe/ariadna +2 -1
- data/lib/ariadna/installer.rb +30 -1
- data/lib/ariadna/tools/config_manager.rb +5 -5
- data/lib/ariadna/tools/git_integration.rb +2 -2
- data/lib/ariadna/tools/init.rb +61 -61
- data/lib/ariadna/tools/phase_manager.rb +11 -11
- data/lib/ariadna/tools/roadmap_analyzer.rb +5 -5
- data/lib/ariadna/tools/state_manager.rb +14 -14
- data/lib/ariadna/tools/template_filler.rb +5 -5
- data/lib/ariadna/tools/utilities.rb +4 -4
- data/lib/ariadna/tools/verification.rb +4 -4
- data/lib/ariadna/uninstaller.rb +17 -0
- data/lib/ariadna/version.rb +1 -1
- metadata +2 -1
data/lib/ariadna/tools/init.rb
CHANGED
|
@@ -88,14 +88,14 @@ module Ariadna
|
|
|
88
88
|
backend_executor_model: resolve_model(cwd, "ariadna-backend-executor"),
|
|
89
89
|
frontend_executor_model: resolve_model(cwd, "ariadna-frontend-executor"),
|
|
90
90
|
test_executor_model: resolve_model(cwd, "ariadna-test-executor"),
|
|
91
|
-
state_exists: path_exists?(cwd, ".
|
|
92
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
93
|
-
config_exists: path_exists?(cwd, ".
|
|
91
|
+
state_exists: path_exists?(cwd, ".ariadna_planning/STATE.md"),
|
|
92
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
93
|
+
config_exists: path_exists?(cwd, ".ariadna_planning/config.json")
|
|
94
94
|
}
|
|
95
95
|
|
|
96
|
-
result[:state_content] = safe_read_file(File.join(cwd, ".
|
|
97
|
-
result[:config_content] = safe_read_file(File.join(cwd, ".
|
|
98
|
-
result[:roadmap_content] = safe_read_file(File.join(cwd, ".
|
|
96
|
+
result[:state_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "STATE.md")) if includes.include?("state")
|
|
97
|
+
result[:config_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "config.json")) if includes.include?("config")
|
|
98
|
+
result[:roadmap_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "ROADMAP.md")) if includes.include?("roadmap")
|
|
99
99
|
|
|
100
100
|
Output.json(result, raw: raw)
|
|
101
101
|
end
|
|
@@ -124,13 +124,13 @@ module Ariadna
|
|
|
124
124
|
has_context: phase_info&.dig(:has_context) || false,
|
|
125
125
|
has_plans: (phase_info&.dig(:plans)&.length || 0) > 0,
|
|
126
126
|
plan_count: phase_info&.dig(:plans)&.length || 0,
|
|
127
|
-
planning_exists: path_exists?(cwd, ".
|
|
128
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
127
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning"),
|
|
128
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md")
|
|
129
129
|
}
|
|
130
130
|
|
|
131
|
-
result[:state_content] = safe_read_file(File.join(cwd, ".
|
|
132
|
-
result[:roadmap_content] = safe_read_file(File.join(cwd, ".
|
|
133
|
-
result[:requirements_content] = safe_read_file(File.join(cwd, ".
|
|
131
|
+
result[:state_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "STATE.md")) if includes.include?("state")
|
|
132
|
+
result[:roadmap_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "ROADMAP.md")) if includes.include?("roadmap")
|
|
133
|
+
result[:requirements_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "REQUIREMENTS.md")) if includes.include?("requirements")
|
|
134
134
|
|
|
135
135
|
if includes.include?("context") && phase_info&.dig(:directory)
|
|
136
136
|
phase_dir_full = File.join(cwd, phase_info[:directory])
|
|
@@ -181,13 +181,13 @@ module Ariadna
|
|
|
181
181
|
synthesizer_model: resolve_model(cwd, "ariadna-research-synthesizer"),
|
|
182
182
|
roadmapper_model: resolve_model(cwd, "ariadna-roadmapper"),
|
|
183
183
|
commit_docs: config["commit_docs"],
|
|
184
|
-
project_exists: path_exists?(cwd, ".
|
|
185
|
-
has_codebase_map: path_exists?(cwd, ".
|
|
186
|
-
planning_exists: path_exists?(cwd, ".
|
|
184
|
+
project_exists: path_exists?(cwd, ".ariadna_planning/PROJECT.md"),
|
|
185
|
+
has_codebase_map: path_exists?(cwd, ".ariadna_planning/codebase"),
|
|
186
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning"),
|
|
187
187
|
has_existing_code: has_code,
|
|
188
188
|
has_package_file: has_package_file,
|
|
189
189
|
is_brownfield: has_code || has_package_file,
|
|
190
|
-
needs_codebase_map: (has_code || has_package_file) && !path_exists?(cwd, ".
|
|
190
|
+
needs_codebase_map: (has_code || has_package_file) && !path_exists?(cwd, ".ariadna_planning/codebase"),
|
|
191
191
|
has_git: path_exists?(cwd, ".git")
|
|
192
192
|
}
|
|
193
193
|
|
|
@@ -207,9 +207,9 @@ module Ariadna
|
|
|
207
207
|
research_enabled: config["research"],
|
|
208
208
|
current_milestone: milestone[:version],
|
|
209
209
|
current_milestone_name: milestone[:name],
|
|
210
|
-
project_exists: path_exists?(cwd, ".
|
|
211
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
212
|
-
state_exists: path_exists?(cwd, ".
|
|
210
|
+
project_exists: path_exists?(cwd, ".ariadna_planning/PROJECT.md"),
|
|
211
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
212
|
+
state_exists: path_exists?(cwd, ".ariadna_planning/STATE.md")
|
|
213
213
|
}
|
|
214
214
|
|
|
215
215
|
Output.json(result, raw: raw)
|
|
@@ -221,7 +221,7 @@ module Ariadna
|
|
|
221
221
|
now = Time.now.utc
|
|
222
222
|
slug = description && !description.empty? ? generate_slug(description)&.slice(0, 40) : nil
|
|
223
223
|
|
|
224
|
-
quick_dir = File.join(cwd, ".
|
|
224
|
+
quick_dir = File.join(cwd, ".ariadna_planning", "quick")
|
|
225
225
|
next_num = 1
|
|
226
226
|
if File.directory?(quick_dir)
|
|
227
227
|
existing = Dir.children(quick_dir)
|
|
@@ -238,10 +238,10 @@ module Ariadna
|
|
|
238
238
|
description: description && !description.empty? ? description : nil,
|
|
239
239
|
date: now.strftime("%Y-%m-%d"),
|
|
240
240
|
timestamp: now.iso8601,
|
|
241
|
-
quick_dir: ".
|
|
242
|
-
task_dir: slug ? ".
|
|
243
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
244
|
-
planning_exists: path_exists?(cwd, ".
|
|
241
|
+
quick_dir: ".ariadna_planning/quick",
|
|
242
|
+
task_dir: slug ? ".ariadna_planning/quick/#{next_num}-#{slug}" : nil,
|
|
243
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
244
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning")
|
|
245
245
|
}
|
|
246
246
|
|
|
247
247
|
Output.json(result, raw: raw)
|
|
@@ -252,14 +252,14 @@ module Ariadna
|
|
|
252
252
|
config = ConfigManager.load_config(cwd)
|
|
253
253
|
|
|
254
254
|
interrupted_agent_id = nil
|
|
255
|
-
agent_file = File.join(cwd, ".
|
|
255
|
+
agent_file = File.join(cwd, ".ariadna_planning", "current-agent-id.txt")
|
|
256
256
|
interrupted_agent_id = File.read(agent_file).strip if File.exist?(agent_file)
|
|
257
257
|
|
|
258
258
|
result = {
|
|
259
|
-
state_exists: path_exists?(cwd, ".
|
|
260
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
261
|
-
project_exists: path_exists?(cwd, ".
|
|
262
|
-
planning_exists: path_exists?(cwd, ".
|
|
259
|
+
state_exists: path_exists?(cwd, ".ariadna_planning/STATE.md"),
|
|
260
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
261
|
+
project_exists: path_exists?(cwd, ".ariadna_planning/PROJECT.md"),
|
|
262
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning"),
|
|
263
263
|
has_interrupted_agent: !interrupted_agent_id.nil?,
|
|
264
264
|
interrupted_agent_id: interrupted_agent_id,
|
|
265
265
|
commit_docs: config["commit_docs"]
|
|
@@ -307,8 +307,8 @@ module Ariadna
|
|
|
307
307
|
has_plans: (phase_info&.dig(:plans)&.length || 0) > 0,
|
|
308
308
|
has_verification: phase_info&.dig(:has_verification) || false,
|
|
309
309
|
plan_count: phase_info&.dig(:plans)&.length || 0,
|
|
310
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
311
|
-
planning_exists: path_exists?(cwd, ".
|
|
310
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
311
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning")
|
|
312
312
|
}
|
|
313
313
|
|
|
314
314
|
Output.json(result, raw: raw)
|
|
@@ -319,7 +319,7 @@ module Ariadna
|
|
|
319
319
|
config = ConfigManager.load_config(cwd)
|
|
320
320
|
now = Time.now.utc
|
|
321
321
|
|
|
322
|
-
pending_dir = File.join(cwd, ".
|
|
322
|
+
pending_dir = File.join(cwd, ".ariadna_planning", "todos", "pending")
|
|
323
323
|
count = 0
|
|
324
324
|
todo_list = []
|
|
325
325
|
|
|
@@ -335,7 +335,7 @@ module Ariadna
|
|
|
335
335
|
count += 1
|
|
336
336
|
todo_list << {
|
|
337
337
|
file: File.basename(file), created: created, title: title, area: todo_area,
|
|
338
|
-
path: File.join(".
|
|
338
|
+
path: File.join(".ariadna_planning", "todos", "pending", File.basename(file))
|
|
339
339
|
}
|
|
340
340
|
end
|
|
341
341
|
end
|
|
@@ -347,11 +347,11 @@ module Ariadna
|
|
|
347
347
|
todo_count: count,
|
|
348
348
|
todos: todo_list,
|
|
349
349
|
area_filter: area,
|
|
350
|
-
pending_dir: ".
|
|
351
|
-
completed_dir: ".
|
|
352
|
-
planning_exists: path_exists?(cwd, ".
|
|
353
|
-
todos_dir_exists: path_exists?(cwd, ".
|
|
354
|
-
pending_dir_exists: path_exists?(cwd, ".
|
|
350
|
+
pending_dir: ".ariadna_planning/todos/pending",
|
|
351
|
+
completed_dir: ".ariadna_planning/todos/completed",
|
|
352
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning"),
|
|
353
|
+
todos_dir_exists: path_exists?(cwd, ".ariadna_planning/todos"),
|
|
354
|
+
pending_dir_exists: path_exists?(cwd, ".ariadna_planning/todos/pending")
|
|
355
355
|
}
|
|
356
356
|
|
|
357
357
|
Output.json(result, raw: raw)
|
|
@@ -362,7 +362,7 @@ module Ariadna
|
|
|
362
362
|
config = ConfigManager.load_config(cwd)
|
|
363
363
|
milestone = get_milestone_info(cwd)
|
|
364
364
|
|
|
365
|
-
phases_dir = File.join(cwd, ".
|
|
365
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
366
366
|
phase_count = 0
|
|
367
367
|
completed_phases = 0
|
|
368
368
|
|
|
@@ -375,7 +375,7 @@ module Ariadna
|
|
|
375
375
|
end
|
|
376
376
|
end
|
|
377
377
|
|
|
378
|
-
archive_dir = File.join(cwd, ".
|
|
378
|
+
archive_dir = File.join(cwd, ".ariadna_planning", "archive")
|
|
379
379
|
archived_milestones = []
|
|
380
380
|
if File.directory?(archive_dir)
|
|
381
381
|
archived_milestones = Dir.children(archive_dir).select { |e| File.directory?(File.join(archive_dir, e)) }
|
|
@@ -391,11 +391,11 @@ module Ariadna
|
|
|
391
391
|
all_phases_complete: phase_count > 0 && phase_count == completed_phases,
|
|
392
392
|
archived_milestones: archived_milestones,
|
|
393
393
|
archive_count: archived_milestones.length,
|
|
394
|
-
project_exists: path_exists?(cwd, ".
|
|
395
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
396
|
-
state_exists: path_exists?(cwd, ".
|
|
397
|
-
archive_exists: path_exists?(cwd, ".
|
|
398
|
-
phases_dir_exists: path_exists?(cwd, ".
|
|
394
|
+
project_exists: path_exists?(cwd, ".ariadna_planning/PROJECT.md"),
|
|
395
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
396
|
+
state_exists: path_exists?(cwd, ".ariadna_planning/STATE.md"),
|
|
397
|
+
archive_exists: path_exists?(cwd, ".ariadna_planning/archive"),
|
|
398
|
+
phases_dir_exists: path_exists?(cwd, ".ariadna_planning/phases")
|
|
399
399
|
}
|
|
400
400
|
|
|
401
401
|
Output.json(result, raw: raw)
|
|
@@ -405,7 +405,7 @@ module Ariadna
|
|
|
405
405
|
cwd = Dir.pwd
|
|
406
406
|
config = ConfigManager.load_config(cwd)
|
|
407
407
|
|
|
408
|
-
codebase_dir = File.join(cwd, ".
|
|
408
|
+
codebase_dir = File.join(cwd, ".ariadna_planning", "codebase")
|
|
409
409
|
existing_maps = []
|
|
410
410
|
existing_maps = Dir.children(codebase_dir).select { |f| f.end_with?(".md") } if File.directory?(codebase_dir)
|
|
411
411
|
|
|
@@ -414,11 +414,11 @@ module Ariadna
|
|
|
414
414
|
commit_docs: config["commit_docs"],
|
|
415
415
|
search_gitignored: config["search_gitignored"],
|
|
416
416
|
parallelization: config["parallelization"],
|
|
417
|
-
codebase_dir: ".
|
|
417
|
+
codebase_dir: ".ariadna_planning/codebase",
|
|
418
418
|
existing_maps: existing_maps,
|
|
419
419
|
has_maps: existing_maps.any?,
|
|
420
|
-
planning_exists: path_exists?(cwd, ".
|
|
421
|
-
codebase_dir_exists: path_exists?(cwd, ".
|
|
420
|
+
planning_exists: path_exists?(cwd, ".ariadna_planning"),
|
|
421
|
+
codebase_dir_exists: path_exists?(cwd, ".ariadna_planning/codebase")
|
|
422
422
|
}
|
|
423
423
|
|
|
424
424
|
Output.json(result, raw: raw)
|
|
@@ -429,7 +429,7 @@ module Ariadna
|
|
|
429
429
|
config = ConfigManager.load_config(cwd)
|
|
430
430
|
milestone = get_milestone_info(cwd)
|
|
431
431
|
|
|
432
|
-
phases_dir = File.join(cwd, ".
|
|
432
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
433
433
|
phases = []
|
|
434
434
|
current_phase = nil
|
|
435
435
|
next_phase = nil
|
|
@@ -463,7 +463,7 @@ module Ariadna
|
|
|
463
463
|
|
|
464
464
|
phase_entry = {
|
|
465
465
|
number: phase_number, name: phase_name,
|
|
466
|
-
directory: File.join(".
|
|
466
|
+
directory: File.join(".ariadna_planning", "phases", dir),
|
|
467
467
|
status: status, plan_count: plans.length,
|
|
468
468
|
summary_count: summaries.length, has_research: has_research
|
|
469
469
|
}
|
|
@@ -475,7 +475,7 @@ module Ariadna
|
|
|
475
475
|
end
|
|
476
476
|
|
|
477
477
|
paused_at = nil
|
|
478
|
-
state_path = File.join(cwd, ".
|
|
478
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
479
479
|
if File.exist?(state_path)
|
|
480
480
|
state_content = File.read(state_path)
|
|
481
481
|
pause_match = state_content.match(/\*\*Paused At:\*\*\s*(.+)/)
|
|
@@ -496,15 +496,15 @@ module Ariadna
|
|
|
496
496
|
next_phase: next_phase,
|
|
497
497
|
paused_at: paused_at,
|
|
498
498
|
has_work_in_progress: !current_phase.nil?,
|
|
499
|
-
project_exists: path_exists?(cwd, ".
|
|
500
|
-
roadmap_exists: path_exists?(cwd, ".
|
|
501
|
-
state_exists: path_exists?(cwd, ".
|
|
499
|
+
project_exists: path_exists?(cwd, ".ariadna_planning/PROJECT.md"),
|
|
500
|
+
roadmap_exists: path_exists?(cwd, ".ariadna_planning/ROADMAP.md"),
|
|
501
|
+
state_exists: path_exists?(cwd, ".ariadna_planning/STATE.md")
|
|
502
502
|
}
|
|
503
503
|
|
|
504
|
-
result[:state_content] = safe_read_file(File.join(cwd, ".
|
|
505
|
-
result[:roadmap_content] = safe_read_file(File.join(cwd, ".
|
|
506
|
-
result[:project_content] = safe_read_file(File.join(cwd, ".
|
|
507
|
-
result[:config_content] = safe_read_file(File.join(cwd, ".
|
|
504
|
+
result[:state_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "STATE.md")) if includes.include?("state")
|
|
505
|
+
result[:roadmap_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "ROADMAP.md")) if includes.include?("roadmap")
|
|
506
|
+
result[:project_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "PROJECT.md")) if includes.include?("project")
|
|
507
|
+
result[:config_content] = safe_read_file(File.join(cwd, ".ariadna_planning", "config.json")) if includes.include?("config")
|
|
508
508
|
|
|
509
509
|
Output.json(result, raw: raw)
|
|
510
510
|
end
|
|
@@ -514,7 +514,7 @@ module Ariadna
|
|
|
514
514
|
def self.find_phase_internal(cwd, phase)
|
|
515
515
|
return nil unless phase
|
|
516
516
|
|
|
517
|
-
phases_dir = File.join(cwd, ".
|
|
517
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
518
518
|
normalized = normalize_phase(phase)
|
|
519
519
|
|
|
520
520
|
return nil unless File.directory?(phases_dir)
|
|
@@ -544,7 +544,7 @@ module Ariadna
|
|
|
544
544
|
end
|
|
545
545
|
|
|
546
546
|
{
|
|
547
|
-
directory: File.join(".
|
|
547
|
+
directory: File.join(".ariadna_planning", "phases", match),
|
|
548
548
|
phase_number: phase_number,
|
|
549
549
|
phase_name: phase_name,
|
|
550
550
|
phase_slug: phase_slug,
|
|
@@ -560,7 +560,7 @@ module Ariadna
|
|
|
560
560
|
end
|
|
561
561
|
|
|
562
562
|
def self.get_milestone_info(cwd)
|
|
563
|
-
roadmap = File.read(File.join(cwd, ".
|
|
563
|
+
roadmap = File.read(File.join(cwd, ".ariadna_planning", "ROADMAP.md"))
|
|
564
564
|
version_match = roadmap.match(/v(\d+\.\d+)/)
|
|
565
565
|
name_match = roadmap.match(/## .*v\d+\.\d+[:\s]+([^\n(]+)/)
|
|
566
566
|
{
|
|
@@ -60,7 +60,7 @@ module Ariadna
|
|
|
60
60
|
Output.error("phase identifier required") unless phase
|
|
61
61
|
|
|
62
62
|
cwd = Dir.pwd
|
|
63
|
-
phases_dir = File.join(cwd, ".
|
|
63
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
64
64
|
normalized = normalize_phase_name(phase)
|
|
65
65
|
not_found = { found: false, directory: nil, phase_number: nil, phase_name: nil, plans: [], summaries: [] }
|
|
66
66
|
|
|
@@ -88,7 +88,7 @@ module Ariadna
|
|
|
88
88
|
|
|
89
89
|
result = {
|
|
90
90
|
found: true,
|
|
91
|
-
directory: File.join(".
|
|
91
|
+
directory: File.join(".ariadna_planning", "phases", match),
|
|
92
92
|
phase_number: phase_number,
|
|
93
93
|
phase_name: phase_name,
|
|
94
94
|
plans: plans,
|
|
@@ -104,7 +104,7 @@ module Ariadna
|
|
|
104
104
|
Output.error("phase required") unless phase
|
|
105
105
|
|
|
106
106
|
cwd = Dir.pwd
|
|
107
|
-
phases_dir = File.join(cwd, ".
|
|
107
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
108
108
|
normalized = normalize_phase_name(phase)
|
|
109
109
|
|
|
110
110
|
unless File.directory?(phases_dir)
|
|
@@ -154,7 +154,7 @@ module Ariadna
|
|
|
154
154
|
|
|
155
155
|
def self.list(options, raw: false)
|
|
156
156
|
cwd = Dir.pwd
|
|
157
|
-
phases_dir = File.join(cwd, ".
|
|
157
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
158
158
|
|
|
159
159
|
unless File.directory?(phases_dir)
|
|
160
160
|
key = options[:type] ? :files : :directories
|
|
@@ -192,7 +192,7 @@ module Ariadna
|
|
|
192
192
|
def self.next_decimal(base_phase, raw: false)
|
|
193
193
|
Output.error("base phase required") unless base_phase
|
|
194
194
|
cwd = Dir.pwd
|
|
195
|
-
phases_dir = File.join(cwd, ".
|
|
195
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
196
196
|
normalized = normalize_phase_name(base_phase)
|
|
197
197
|
|
|
198
198
|
unless File.directory?(phases_dir)
|
|
@@ -222,8 +222,8 @@ module Ariadna
|
|
|
222
222
|
def self.add(description, raw: false)
|
|
223
223
|
Output.error("description required") unless description && !description.empty?
|
|
224
224
|
cwd = Dir.pwd
|
|
225
|
-
phases_dir = File.join(cwd, ".
|
|
226
|
-
roadmap_path = File.join(cwd, ".
|
|
225
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
226
|
+
roadmap_path = File.join(cwd, ".ariadna_planning", "ROADMAP.md")
|
|
227
227
|
|
|
228
228
|
existing = if File.directory?(phases_dir)
|
|
229
229
|
Dir.children(phases_dir)
|
|
@@ -252,7 +252,7 @@ module Ariadna
|
|
|
252
252
|
def self.insert(after, description, raw: false)
|
|
253
253
|
Output.error("after phase and description required") unless after && description && !description.empty?
|
|
254
254
|
cwd = Dir.pwd
|
|
255
|
-
phases_dir = File.join(cwd, ".
|
|
255
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
256
256
|
normalized = normalize_phase_name(after)
|
|
257
257
|
|
|
258
258
|
# Calculate next decimal
|
|
@@ -277,7 +277,7 @@ module Ariadna
|
|
|
277
277
|
def self.remove(phase, force: false, raw: false)
|
|
278
278
|
Output.error("phase required") unless phase
|
|
279
279
|
cwd = Dir.pwd
|
|
280
|
-
phases_dir = File.join(cwd, ".
|
|
280
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
281
281
|
normalized = normalize_phase_name(phase)
|
|
282
282
|
|
|
283
283
|
unless File.directory?(phases_dir)
|
|
@@ -308,7 +308,7 @@ module Ariadna
|
|
|
308
308
|
def self.complete(phase, raw: false)
|
|
309
309
|
Output.error("phase required") unless phase
|
|
310
310
|
cwd = Dir.pwd
|
|
311
|
-
roadmap_path = File.join(cwd, ".
|
|
311
|
+
roadmap_path = File.join(cwd, ".ariadna_planning", "ROADMAP.md")
|
|
312
312
|
normalized = normalize_phase_name(phase)
|
|
313
313
|
|
|
314
314
|
# Mark in ROADMAP.md
|
|
@@ -327,7 +327,7 @@ module Ariadna
|
|
|
327
327
|
cwd = Dir.pwd
|
|
328
328
|
|
|
329
329
|
# Create milestone archive
|
|
330
|
-
archive_dir = File.join(cwd, ".
|
|
330
|
+
archive_dir = File.join(cwd, ".ariadna_planning", "milestones")
|
|
331
331
|
FileUtils.mkdir_p(archive_dir)
|
|
332
332
|
|
|
333
333
|
milestone_name = name || "v#{version}"
|
|
@@ -25,7 +25,7 @@ module Ariadna
|
|
|
25
25
|
Output.error("phase number required") unless phase_num
|
|
26
26
|
|
|
27
27
|
cwd = Dir.pwd
|
|
28
|
-
roadmap_path = File.join(cwd, ".
|
|
28
|
+
roadmap_path = File.join(cwd, ".ariadna_planning", "ROADMAP.md")
|
|
29
29
|
|
|
30
30
|
unless File.exist?(roadmap_path)
|
|
31
31
|
Output.json({ found: false, error: "ROADMAP.md not found" }, raw: raw, raw_value: "")
|
|
@@ -63,7 +63,7 @@ module Ariadna
|
|
|
63
63
|
|
|
64
64
|
def self.analyze(raw: false)
|
|
65
65
|
cwd = Dir.pwd
|
|
66
|
-
roadmap_path = File.join(cwd, ".
|
|
66
|
+
roadmap_path = File.join(cwd, ".ariadna_planning", "ROADMAP.md")
|
|
67
67
|
|
|
68
68
|
unless File.exist?(roadmap_path)
|
|
69
69
|
Output.json({ error: "ROADMAP.md not found", milestones: [], phases: [], current_phase: nil }, raw: raw)
|
|
@@ -71,7 +71,7 @@ module Ariadna
|
|
|
71
71
|
end
|
|
72
72
|
|
|
73
73
|
content = File.read(roadmap_path)
|
|
74
|
-
phases_dir = File.join(cwd, ".
|
|
74
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
75
75
|
|
|
76
76
|
phases = []
|
|
77
77
|
phase_pattern = /###\s*Phase\s+(\d+(?:\.\d+)?)\s*:\s*([^\n]+)/i
|
|
@@ -168,7 +168,7 @@ module Ariadna
|
|
|
168
168
|
|
|
169
169
|
def self.render_progress(format, raw: false)
|
|
170
170
|
cwd = Dir.pwd
|
|
171
|
-
phases_dir = File.join(cwd, ".
|
|
171
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
172
172
|
milestone = get_milestone_info(cwd)
|
|
173
173
|
|
|
174
174
|
phases = []
|
|
@@ -231,7 +231,7 @@ module Ariadna
|
|
|
231
231
|
end
|
|
232
232
|
|
|
233
233
|
def self.get_milestone_info(cwd)
|
|
234
|
-
roadmap = File.read(File.join(cwd, ".
|
|
234
|
+
roadmap = File.read(File.join(cwd, ".ariadna_planning", "ROADMAP.md"))
|
|
235
235
|
version_match = roadmap.match(/v(\d+\.\d+)/)
|
|
236
236
|
name_match = roadmap.match(/## .*v\d+\.\d+[:\s]+([^\n(]+)/)
|
|
237
237
|
{
|
|
@@ -44,7 +44,7 @@ module Ariadna
|
|
|
44
44
|
|
|
45
45
|
def self.history_digest(_argv, raw: false)
|
|
46
46
|
cwd = Dir.pwd
|
|
47
|
-
phases_dir = File.join(cwd, ".
|
|
47
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
48
48
|
digest = { phases: {}, decisions: [], tech_stack: [] }
|
|
49
49
|
|
|
50
50
|
unless File.directory?(phases_dir)
|
|
@@ -107,7 +107,7 @@ module Ariadna
|
|
|
107
107
|
|
|
108
108
|
def self.snapshot(_argv, raw: false)
|
|
109
109
|
cwd = Dir.pwd
|
|
110
|
-
state_path = File.join(cwd, ".
|
|
110
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
111
111
|
Output.error("STATE.md not found") unless File.exist?(state_path)
|
|
112
112
|
|
|
113
113
|
content = File.read(state_path)
|
|
@@ -122,7 +122,7 @@ module Ariadna
|
|
|
122
122
|
def self.load_state(raw: false)
|
|
123
123
|
cwd = Dir.pwd
|
|
124
124
|
config = ConfigManager.load_config(cwd)
|
|
125
|
-
planning_dir = File.join(cwd, ".
|
|
125
|
+
planning_dir = File.join(cwd, ".ariadna_planning")
|
|
126
126
|
|
|
127
127
|
state_raw = begin
|
|
128
128
|
File.read(File.join(planning_dir, "STATE.md"))
|
|
@@ -152,7 +152,7 @@ module Ariadna
|
|
|
152
152
|
|
|
153
153
|
def self.get(section, raw: false)
|
|
154
154
|
cwd = Dir.pwd
|
|
155
|
-
state_path = File.join(cwd, ".
|
|
155
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
156
156
|
content = File.read(state_path)
|
|
157
157
|
|
|
158
158
|
unless section
|
|
@@ -183,7 +183,7 @@ module Ariadna
|
|
|
183
183
|
Output.error("field and value required for state update") unless field && value
|
|
184
184
|
|
|
185
185
|
cwd = Dir.pwd
|
|
186
|
-
state_path = File.join(cwd, ".
|
|
186
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
187
187
|
content = File.read(state_path)
|
|
188
188
|
|
|
189
189
|
new_content = replace_field(content, field, value)
|
|
@@ -199,7 +199,7 @@ module Ariadna
|
|
|
199
199
|
|
|
200
200
|
def self.patch(patches, raw: false)
|
|
201
201
|
cwd = Dir.pwd
|
|
202
|
-
state_path = File.join(cwd, ".
|
|
202
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
203
203
|
content = File.read(state_path)
|
|
204
204
|
|
|
205
205
|
results = { updated: [], failed: [] }
|
|
@@ -221,7 +221,7 @@ module Ariadna
|
|
|
221
221
|
|
|
222
222
|
def self.advance_plan(raw: false)
|
|
223
223
|
cwd = Dir.pwd
|
|
224
|
-
state_path = File.join(cwd, ".
|
|
224
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
225
225
|
unless File.exist?(state_path)
|
|
226
226
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
227
227
|
return
|
|
@@ -254,7 +254,7 @@ module Ariadna
|
|
|
254
254
|
|
|
255
255
|
def self.record_metric(options, raw: false)
|
|
256
256
|
cwd = Dir.pwd
|
|
257
|
-
state_path = File.join(cwd, ".
|
|
257
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
258
258
|
unless File.exist?(state_path)
|
|
259
259
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
260
260
|
return
|
|
@@ -282,14 +282,14 @@ module Ariadna
|
|
|
282
282
|
|
|
283
283
|
def self.update_progress(raw: false)
|
|
284
284
|
cwd = Dir.pwd
|
|
285
|
-
state_path = File.join(cwd, ".
|
|
285
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
286
286
|
unless File.exist?(state_path)
|
|
287
287
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
288
288
|
return
|
|
289
289
|
end
|
|
290
290
|
|
|
291
291
|
content = File.read(state_path)
|
|
292
|
-
phases_dir = File.join(cwd, ".
|
|
292
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
293
293
|
total_plans = 0
|
|
294
294
|
total_summaries = 0
|
|
295
295
|
|
|
@@ -321,7 +321,7 @@ module Ariadna
|
|
|
321
321
|
|
|
322
322
|
def self.add_decision(options, raw: false)
|
|
323
323
|
cwd = Dir.pwd
|
|
324
|
-
state_path = File.join(cwd, ".
|
|
324
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
325
325
|
unless File.exist?(state_path)
|
|
326
326
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
327
327
|
return
|
|
@@ -350,7 +350,7 @@ module Ariadna
|
|
|
350
350
|
|
|
351
351
|
def self.add_blocker(text, raw: false)
|
|
352
352
|
cwd = Dir.pwd
|
|
353
|
-
state_path = File.join(cwd, ".
|
|
353
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
354
354
|
unless File.exist?(state_path)
|
|
355
355
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
356
356
|
return
|
|
@@ -374,7 +374,7 @@ module Ariadna
|
|
|
374
374
|
|
|
375
375
|
def self.resolve_blocker(text, raw: false)
|
|
376
376
|
cwd = Dir.pwd
|
|
377
|
-
state_path = File.join(cwd, ".
|
|
377
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
378
378
|
unless File.exist?(state_path)
|
|
379
379
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
380
380
|
return
|
|
@@ -399,7 +399,7 @@ module Ariadna
|
|
|
399
399
|
|
|
400
400
|
def self.record_session(options, raw: false)
|
|
401
401
|
cwd = Dir.pwd
|
|
402
|
-
state_path = File.join(cwd, ".
|
|
402
|
+
state_path = File.join(cwd, ".ariadna_planning", "STATE.md")
|
|
403
403
|
unless File.exist?(state_path)
|
|
404
404
|
Output.json({ error: "STATE.md not found" }, raw: raw)
|
|
405
405
|
return
|
|
@@ -135,7 +135,7 @@ module Ariadna
|
|
|
135
135
|
"- **Why:** [Why it matters for the phase goal]",
|
|
136
136
|
"- **Output:** [Concrete deliverable]", "",
|
|
137
137
|
"## Context",
|
|
138
|
-
"@.
|
|
138
|
+
"@.ariadna_planning/PROJECT.md", "@.ariadna_planning/ROADMAP.md", "@.ariadna_planning/STATE.md", "",
|
|
139
139
|
"## Tasks", "",
|
|
140
140
|
"<task type=\"code\">",
|
|
141
141
|
" <name>[Task name]</name>",
|
|
@@ -227,11 +227,11 @@ module Ariadna
|
|
|
227
227
|
Output.error("phase and name required for phase-dir scaffold") unless phase && name
|
|
228
228
|
slug = generate_slug(name)
|
|
229
229
|
dir_name = "#{padded}-#{slug}"
|
|
230
|
-
phases_parent = File.join(cwd, ".
|
|
230
|
+
phases_parent = File.join(cwd, ".ariadna_planning", "phases")
|
|
231
231
|
FileUtils.mkdir_p(phases_parent)
|
|
232
232
|
dir_path = File.join(phases_parent, dir_name)
|
|
233
233
|
FileUtils.mkdir_p(dir_path)
|
|
234
|
-
Output.json({ created: true, directory: ".
|
|
234
|
+
Output.json({ created: true, directory: ".ariadna_planning/phases/#{dir_name}", path: dir_path }, raw: raw, raw_value: dir_path)
|
|
235
235
|
return
|
|
236
236
|
else
|
|
237
237
|
Output.error("Unknown scaffold type: #{type}. Available: context, uat, verification, phase-dir")
|
|
@@ -250,7 +250,7 @@ module Ariadna
|
|
|
250
250
|
# --- Private helpers ---
|
|
251
251
|
|
|
252
252
|
def self.find_phase_internal(cwd, phase)
|
|
253
|
-
phases_dir = File.join(cwd, ".
|
|
253
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
254
254
|
normalized = normalize_phase(phase)
|
|
255
255
|
|
|
256
256
|
return nil unless File.directory?(phases_dir)
|
|
@@ -264,7 +264,7 @@ module Ariadna
|
|
|
264
264
|
phase_name = dir_match && !dir_match[2].empty? ? dir_match[2] : nil
|
|
265
265
|
phase_slug = phase_name ? phase_name.downcase.gsub(/[^a-z0-9]+/, "-").gsub(/\A-+|-+\z/, "") : nil
|
|
266
266
|
|
|
267
|
-
{ directory: File.join(".
|
|
267
|
+
{ directory: File.join(".ariadna_planning", "phases", match), phase_number: phase_number, phase_name: phase_name, phase_slug: phase_slug }
|
|
268
268
|
rescue StandardError
|
|
269
269
|
nil
|
|
270
270
|
end
|
|
@@ -31,7 +31,7 @@ module Ariadna
|
|
|
31
31
|
def self.list_todos(argv, raw: false)
|
|
32
32
|
area = argv.first
|
|
33
33
|
cwd = Dir.pwd
|
|
34
|
-
pending_dir = File.join(cwd, ".
|
|
34
|
+
pending_dir = File.join(cwd, ".ariadna_planning", "todos", "pending")
|
|
35
35
|
|
|
36
36
|
count = 0
|
|
37
37
|
todos = []
|
|
@@ -51,7 +51,7 @@ module Ariadna
|
|
|
51
51
|
created: created,
|
|
52
52
|
title: title,
|
|
53
53
|
area: todo_area,
|
|
54
|
-
path: File.join(".
|
|
54
|
+
path: File.join(".ariadna_planning", "todos", "pending", File.basename(file))
|
|
55
55
|
}
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -87,8 +87,8 @@ module Ariadna
|
|
|
87
87
|
def self.todo_complete(filename, raw: false)
|
|
88
88
|
Output.error("filename required") unless filename
|
|
89
89
|
cwd = Dir.pwd
|
|
90
|
-
pending = File.join(cwd, ".
|
|
91
|
-
completed_dir = File.join(cwd, ".
|
|
90
|
+
pending = File.join(cwd, ".ariadna_planning", "todos", "pending", filename)
|
|
91
|
+
completed_dir = File.join(cwd, ".ariadna_planning", "todos", "completed")
|
|
92
92
|
|
|
93
93
|
unless File.exist?(pending)
|
|
94
94
|
Output.json({ completed: false, reason: "not_found" }, raw: raw, raw_value: "false")
|
|
@@ -406,8 +406,8 @@ module Ariadna
|
|
|
406
406
|
|
|
407
407
|
def self.validate_consistency(raw: false)
|
|
408
408
|
cwd = Dir.pwd
|
|
409
|
-
roadmap_path = File.join(cwd, ".
|
|
410
|
-
phases_dir = File.join(cwd, ".
|
|
409
|
+
roadmap_path = File.join(cwd, ".ariadna_planning", "ROADMAP.md")
|
|
410
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
411
411
|
errors = []
|
|
412
412
|
warnings = []
|
|
413
413
|
|
|
@@ -499,7 +499,7 @@ module Ariadna
|
|
|
499
499
|
# --- Private helpers ---
|
|
500
500
|
|
|
501
501
|
def self.find_phase_internal(cwd, phase)
|
|
502
|
-
phases_dir = File.join(cwd, ".
|
|
502
|
+
phases_dir = File.join(cwd, ".ariadna_planning", "phases")
|
|
503
503
|
normalized = normalize_phase(phase)
|
|
504
504
|
|
|
505
505
|
return nil unless File.directory?(phases_dir)
|
|
@@ -512,7 +512,7 @@ module Ariadna
|
|
|
512
512
|
phase_number = dir_match ? dir_match[1] : normalized
|
|
513
513
|
phase_name = dir_match && !dir_match[2].empty? ? dir_match[2] : nil
|
|
514
514
|
|
|
515
|
-
{ directory: File.join(".
|
|
515
|
+
{ directory: File.join(".ariadna_planning", "phases", match), phase_number: phase_number, phase_name: phase_name }
|
|
516
516
|
rescue StandardError
|
|
517
517
|
nil
|
|
518
518
|
end
|