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.
Files changed (115) hide show
  1. checksums.yaml +4 -4
  2. data/data/agents/ariadna-backend-executor.md +5 -5
  3. data/data/agents/ariadna-codebase-mapper.md +5 -5
  4. data/data/agents/ariadna-debugger.md +13 -13
  5. data/data/agents/ariadna-executor.md +5 -5
  6. data/data/agents/ariadna-frontend-executor.md +5 -5
  7. data/data/agents/ariadna-integration-checker.md +1 -1
  8. data/data/agents/ariadna-phase-researcher.md +1 -1
  9. data/data/agents/ariadna-planner.md +17 -17
  10. data/data/agents/ariadna-project-researcher.md +10 -10
  11. data/data/agents/ariadna-research-synthesizer.md +11 -11
  12. data/data/agents/ariadna-roadmapper.md +8 -8
  13. data/data/agents/ariadna-test-executor.md +5 -5
  14. data/data/agents/ariadna-verifier.md +4 -4
  15. data/data/ariadna/references/decimal-phase-calculation.md +2 -2
  16. data/data/ariadna/references/git-integration.md +4 -4
  17. data/data/ariadna/references/git-planning-commit.md +7 -7
  18. data/data/ariadna/references/model-profile-resolution.md +1 -1
  19. data/data/ariadna/references/model-profiles.md +2 -2
  20. data/data/ariadna/references/planning-config.md +13 -13
  21. data/data/ariadna/references/tdd.md +2 -2
  22. data/data/ariadna/templates/DEBUG.md +2 -2
  23. data/data/ariadna/templates/UAT.md +3 -3
  24. data/data/ariadna/templates/codebase/architecture.md +1 -1
  25. data/data/ariadna/templates/codebase/concerns.md +1 -1
  26. data/data/ariadna/templates/codebase/conventions.md +1 -1
  27. data/data/ariadna/templates/codebase/integrations.md +1 -1
  28. data/data/ariadna/templates/codebase/stack.md +1 -1
  29. data/data/ariadna/templates/codebase/structure.md +1 -1
  30. data/data/ariadna/templates/codebase/testing.md +1 -1
  31. data/data/ariadna/templates/context.md +2 -2
  32. data/data/ariadna/templates/continue-here.md +1 -1
  33. data/data/ariadna/templates/debug-subagent-prompt.md +2 -2
  34. data/data/ariadna/templates/discovery.md +2 -2
  35. data/data/ariadna/templates/milestone-archive.md +4 -4
  36. data/data/ariadna/templates/milestone.md +1 -1
  37. data/data/ariadna/templates/phase-prompt.md +19 -19
  38. data/data/ariadna/templates/planner-subagent-prompt.md +9 -9
  39. data/data/ariadna/templates/project.md +2 -2
  40. data/data/ariadna/templates/requirements.md +1 -1
  41. data/data/ariadna/templates/research-project/ARCHITECTURE.md +1 -1
  42. data/data/ariadna/templates/research-project/FEATURES.md +1 -1
  43. data/data/ariadna/templates/research-project/PITFALLS.md +1 -1
  44. data/data/ariadna/templates/research-project/STACK.md +1 -1
  45. data/data/ariadna/templates/research-project/SUMMARY.md +1 -1
  46. data/data/ariadna/templates/research.md +2 -2
  47. data/data/ariadna/templates/roadmap.md +1 -1
  48. data/data/ariadna/templates/state.md +4 -4
  49. data/data/ariadna/templates/summary.md +1 -1
  50. data/data/ariadna/templates/user-setup.md +2 -2
  51. data/data/ariadna/templates/verification-report.md +1 -1
  52. data/data/ariadna/workflows/add-phase.md +5 -5
  53. data/data/ariadna/workflows/add-todo.md +7 -7
  54. data/data/ariadna/workflows/audit-milestone.md +7 -7
  55. data/data/ariadna/workflows/check-todos.md +4 -4
  56. data/data/ariadna/workflows/complete-milestone.md +18 -18
  57. data/data/ariadna/workflows/diagnose-issues.md +4 -4
  58. data/data/ariadna/workflows/discovery-phase.md +4 -4
  59. data/data/ariadna/workflows/discuss-phase.md +2 -2
  60. data/data/ariadna/workflows/execute-phase.md +4 -4
  61. data/data/ariadna/workflows/execute-plan.md +19 -19
  62. data/data/ariadna/workflows/help.md +18 -18
  63. data/data/ariadna/workflows/insert-phase.md +6 -6
  64. data/data/ariadna/workflows/list-phase-assumptions.md +1 -1
  65. data/data/ariadna/workflows/map-codebase.md +22 -22
  66. data/data/ariadna/workflows/new-milestone.md +16 -16
  67. data/data/ariadna/workflows/new-project.md +39 -39
  68. data/data/ariadna/workflows/pause-work.md +4 -4
  69. data/data/ariadna/workflows/plan-milestone-gaps.md +4 -4
  70. data/data/ariadna/workflows/plan-phase.md +3 -3
  71. data/data/ariadna/workflows/progress.md +6 -6
  72. data/data/ariadna/workflows/quick.md +6 -6
  73. data/data/ariadna/workflows/remove-phase.md +3 -3
  74. data/data/ariadna/workflows/research-phase.md +4 -4
  75. data/data/ariadna/workflows/resume-project.md +9 -9
  76. data/data/ariadna/workflows/set-profile.md +2 -2
  77. data/data/ariadna/workflows/settings.md +4 -4
  78. data/data/ariadna/workflows/transition.md +11 -11
  79. data/data/ariadna/workflows/verify-phase.md +2 -2
  80. data/data/ariadna/workflows/verify-work.md +8 -8
  81. data/data/commands/ariadna/add-phase.md +2 -2
  82. data/data/commands/ariadna/add-todo.md +1 -1
  83. data/data/commands/ariadna/audit-milestone.md +6 -6
  84. data/data/commands/ariadna/check-todos.md +2 -2
  85. data/data/commands/ariadna/complete-milestone.md +11 -11
  86. data/data/commands/ariadna/debug.md +3 -3
  87. data/data/commands/ariadna/discuss-phase.md +2 -2
  88. data/data/commands/ariadna/execute-phase.md +2 -2
  89. data/data/commands/ariadna/insert-phase.md +2 -2
  90. data/data/commands/ariadna/list-phase-assumptions.md +2 -2
  91. data/data/commands/ariadna/map-codebase.md +7 -7
  92. data/data/commands/ariadna/new-milestone.md +10 -10
  93. data/data/commands/ariadna/new-project.md +6 -6
  94. data/data/commands/ariadna/pause-work.md +1 -1
  95. data/data/commands/ariadna/plan-milestone-gaps.md +5 -5
  96. data/data/commands/ariadna/quick.md +2 -2
  97. data/data/commands/ariadna/remove-phase.md +2 -2
  98. data/data/commands/ariadna/research-phase.md +6 -6
  99. data/data/commands/ariadna/verify-work.md +2 -2
  100. data/data/statusline/ariadna-statusline.sh +47 -0
  101. data/data/templates.md +1 -1
  102. data/exe/ariadna +2 -1
  103. data/lib/ariadna/installer.rb +30 -1
  104. data/lib/ariadna/tools/config_manager.rb +5 -5
  105. data/lib/ariadna/tools/git_integration.rb +2 -2
  106. data/lib/ariadna/tools/init.rb +61 -61
  107. data/lib/ariadna/tools/phase_manager.rb +11 -11
  108. data/lib/ariadna/tools/roadmap_analyzer.rb +5 -5
  109. data/lib/ariadna/tools/state_manager.rb +14 -14
  110. data/lib/ariadna/tools/template_filler.rb +5 -5
  111. data/lib/ariadna/tools/utilities.rb +4 -4
  112. data/lib/ariadna/tools/verification.rb +4 -4
  113. data/lib/ariadna/uninstaller.rb +17 -0
  114. data/lib/ariadna/version.rb +1 -1
  115. metadata +2 -1
@@ -32,10 +32,10 @@ Extract implementation decisions that downstream agents need — researcher and
32
32
  Phase number: $ARGUMENTS (required)
33
33
 
34
34
  **Load project state:**
35
- @.planning/STATE.md
35
+ @.ariadna_planning/STATE.md
36
36
 
37
37
  **Load roadmap:**
38
- @.planning/ROADMAP.md
38
+ @.ariadna_planning/ROADMAP.md
39
39
  </context>
40
40
 
41
41
  <process>
@@ -44,8 +44,8 @@ Phase: $ARGUMENTS
44
44
  - `--team` — Use team-based execution with domain-specialized agents instead of wave-based execution.
45
45
  - `--no-team` — Force wave-based execution even when auto-detection would choose team mode.
46
46
 
47
- @.planning/ROADMAP.md
48
- @.planning/STATE.md
47
+ @.ariadna_planning/ROADMAP.md
48
+ @.ariadna_planning/STATE.md
49
49
  </context>
50
50
 
51
51
  <process>
@@ -23,8 +23,8 @@ Purpose: Handle urgent work discovered during execution without renumbering enti
23
23
  <context>
24
24
  Arguments: $ARGUMENTS (format: <after-phase-number> <description>)
25
25
 
26
- @.planning/ROADMAP.md
27
- @.planning/STATE.md
26
+ @.ariadna_planning/ROADMAP.md
27
+ @.ariadna_planning/STATE.md
28
28
  </context>
29
29
 
30
30
  <process>
@@ -24,10 +24,10 @@ Output: Conversational output only (no file creation) - ends with "What do you t
24
24
  Phase number: $ARGUMENTS (required)
25
25
 
26
26
  **Load project state first:**
27
- @.planning/STATE.md
27
+ @.ariadna_planning/STATE.md
28
28
 
29
29
  **Load roadmap:**
30
- @.planning/ROADMAP.md
30
+ @.ariadna_planning/ROADMAP.md
31
31
  </context>
32
32
 
33
33
  <process>
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: ariadna:map-codebase
3
- description: Analyze codebase with parallel mapper agents to produce .planning/codebase/ documents
3
+ description: Analyze codebase with parallel mapper agents to produce .ariadna_planning/codebase/ documents
4
4
  argument-hint: "[optional: specific area to map, e.g., 'api' or 'auth']"
5
5
  allowed-tools:
6
6
  - Read
@@ -14,9 +14,9 @@ allowed-tools:
14
14
  <objective>
15
15
  Analyze existing codebase using parallel ariadna-codebase-mapper agents to produce structured codebase documents.
16
16
 
17
- Each mapper agent explores a focus area and **writes documents directly** to `.planning/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
17
+ Each mapper agent explores a focus area and **writes documents directly** to `.ariadna_planning/codebase/`. The orchestrator only receives confirmations, keeping context usage minimal.
18
18
 
19
- Output: .planning/codebase/ folder with 7 structured documents about the codebase state.
19
+ Output: .ariadna_planning/codebase/ folder with 7 structured documents about the codebase state.
20
20
  </objective>
21
21
 
22
22
  <execution_context>
@@ -27,7 +27,7 @@ Output: .planning/codebase/ folder with 7 structured documents about the codebas
27
27
  Focus area: $ARGUMENTS (optional - if provided, tells agents to focus on specific subsystem)
28
28
 
29
29
  **Load project state if exists:**
30
- Check for .planning/STATE.md - loads context if project already initialized
30
+ Check for .ariadna_planning/STATE.md - loads context if project already initialized
31
31
 
32
32
  **This command can run:**
33
33
  - Before /ariadna:new-project (brownfield codebases) - creates codebase map first
@@ -49,8 +49,8 @@ Check for .planning/STATE.md - loads context if project already initialized
49
49
  </when_to_use>
50
50
 
51
51
  <process>
52
- 1. Check if .planning/codebase/ already exists (offer to refresh or skip)
53
- 2. Create .planning/codebase/ directory structure
52
+ 1. Check if .ariadna_planning/codebase/ already exists (offer to refresh or skip)
53
+ 2. Create .ariadna_planning/codebase/ directory structure
54
54
  3. Spawn 4 parallel ariadna-codebase-mapper agents:
55
55
  - Agent 1: tech focus → writes STACK.md, INTEGRATIONS.md
56
56
  - Agent 2: arch focus → writes ARCHITECTURE.md, STRUCTURE.md
@@ -63,7 +63,7 @@ Check for .planning/STATE.md - loads context if project already initialized
63
63
  </process>
64
64
 
65
65
  <success_criteria>
66
- - [ ] .planning/codebase/ directory created
66
+ - [ ] .ariadna_planning/codebase/ directory created
67
67
  - [ ] All 7 codebase documents written by mapper agents
68
68
  - [ ] Documents follow template structure
69
69
  - [ ] Parallel agents completed without errors
@@ -15,11 +15,11 @@ Start a new milestone: questioning → research (optional) → requirements →
15
15
  Brownfield equivalent of new-project. Project exists, PROJECT.md has history. Gathers "what's next", updates PROJECT.md, then runs requirements → roadmap cycle.
16
16
 
17
17
  **Creates/Updates:**
18
- - `.planning/PROJECT.md` — updated with new milestone goals
19
- - `.planning/research/` — domain research (optional, NEW features only)
20
- - `.planning/REQUIREMENTS.md` — scoped requirements for this milestone
21
- - `.planning/ROADMAP.md` — phase structure (continues numbering)
22
- - `.planning/STATE.md` — reset for new milestone
18
+ - `.ariadna_planning/PROJECT.md` — updated with new milestone goals
19
+ - `.ariadna_planning/research/` — domain research (optional, NEW features only)
20
+ - `.ariadna_planning/REQUIREMENTS.md` — scoped requirements for this milestone
21
+ - `.ariadna_planning/ROADMAP.md` — phase structure (continues numbering)
22
+ - `.ariadna_planning/STATE.md` — reset for new milestone
23
23
 
24
24
  **After:** `/ariadna:plan-phase [N]` to start execution.
25
25
  </objective>
@@ -36,13 +36,13 @@ Brownfield equivalent of new-project. Project exists, PROJECT.md has history. Ga
36
36
  Milestone name: $ARGUMENTS (optional - will prompt if not provided)
37
37
 
38
38
  **Load project context:**
39
- @.planning/PROJECT.md
40
- @.planning/STATE.md
41
- @.planning/MILESTONES.md
42
- @.planning/config.json
39
+ @.ariadna_planning/PROJECT.md
40
+ @.ariadna_planning/STATE.md
41
+ @.ariadna_planning/MILESTONES.md
42
+ @.ariadna_planning/config.json
43
43
 
44
44
  **Load milestone context (if exists, from /ariadna:discuss-milestone):**
45
- @.planning/MILESTONE-CONTEXT.md
45
+ @.ariadna_planning/MILESTONE-CONTEXT.md
46
46
  </context>
47
47
 
48
48
  <process>
@@ -19,12 +19,12 @@ allowed-tools:
19
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.
20
20
 
21
21
  **Creates:**
22
- - `.planning/PROJECT.md` — project context
23
- - `.planning/config.json` — workflow preferences (opinionated defaults)
24
- - `.planning/research/` — domain research (only with --research flag)
25
- - `.planning/REQUIREMENTS.md` — scoped requirements
26
- - `.planning/ROADMAP.md` — phase structure
27
- - `.planning/STATE.md` — project memory
22
+ - `.ariadna_planning/PROJECT.md` — project context
23
+ - `.ariadna_planning/config.json` — workflow preferences (opinionated defaults)
24
+ - `.ariadna_planning/research/` — domain research (only with --research flag)
25
+ - `.ariadna_planning/REQUIREMENTS.md` — scoped requirements
26
+ - `.ariadna_planning/ROADMAP.md` — phase structure
27
+ - `.ariadna_planning/STATE.md` — project memory
28
28
 
29
29
  **After this command:** Run `/ariadna:plan-phase 1` to start planning.
30
30
  </objective>
@@ -19,7 +19,7 @@ Routes to the pause-work workflow which handles:
19
19
  </objective>
20
20
 
21
21
  <execution_context>
22
- @.planning/STATE.md
22
+ @.ariadna_planning/STATE.md
23
23
  @~/.claude/ariadna/workflows/pause-work.md
24
24
  </execution_context>
25
25
 
@@ -23,15 +23,15 @@ One command creates all fix phases — no manual `/ariadna:add-phase` per gap.
23
23
 
24
24
  <context>
25
25
  **Audit results:**
26
- Glob: .planning/v*-MILESTONE-AUDIT.md (use most recent)
26
+ Glob: .ariadna_planning/v*-MILESTONE-AUDIT.md (use most recent)
27
27
 
28
28
  **Original intent (for prioritization):**
29
- @.planning/PROJECT.md
30
- @.planning/REQUIREMENTS.md
29
+ @.ariadna_planning/PROJECT.md
30
+ @.ariadna_planning/REQUIREMENTS.md
31
31
 
32
32
  **Current state:**
33
- @.planning/ROADMAP.md
34
- @.planning/STATE.md
33
+ @.ariadna_planning/ROADMAP.md
34
+ @.ariadna_planning/STATE.md
35
35
  </context>
36
36
 
37
37
  <process>
@@ -18,7 +18,7 @@ Execute small, ad-hoc tasks with Ariadna guarantees (atomic commits, STATE.md tr
18
18
  Quick mode is the same system with a shorter path:
19
19
  - Spawns ariadna-planner (quick mode) + ariadna-executor(s)
20
20
  - Skips ariadna-phase-researcher, ariadna-plan-checker, ariadna-verifier
21
- - Quick tasks live in `.planning/quick/` separate from planned phases
21
+ - Quick tasks live in `.ariadna_planning/quick/` separate from planned phases
22
22
  - Updates STATE.md "Quick Tasks Completed" table (NOT ROADMAP.md)
23
23
 
24
24
  Use when: You know exactly what to do and the task is small enough to not need research or verification.
@@ -29,7 +29,7 @@ Use when: You know exactly what to do and the task is small enough to not need r
29
29
  </execution_context>
30
30
 
31
31
  <context>
32
- @.planning/STATE.md
32
+ @.ariadna_planning/STATE.md
33
33
  </context>
34
34
 
35
35
  <process>
@@ -22,8 +22,8 @@ Output: Phase deleted, all subsequent phases renumbered, git commit as historica
22
22
  <context>
23
23
  Phase: $ARGUMENTS
24
24
 
25
- @.planning/ROADMAP.md
26
- @.planning/STATE.md
25
+ @.ariadna_planning/ROADMAP.md
26
+ @.ariadna_planning/STATE.md
27
27
  </context>
28
28
 
29
29
  <process>
@@ -55,7 +55,7 @@ PHASE_INFO=$(ariadna-tools roadmap get-phase "${phase_number}")
55
55
  ## 2. Check Existing Research
56
56
 
57
57
  ```bash
58
- ls .planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
58
+ ls .ariadna_planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
59
59
  ```
60
60
 
61
61
  **If exists:** Offer: 1) Update research, 2) View existing, 3) Skip. Wait for response.
@@ -67,9 +67,9 @@ ls .planning/phases/${PHASE}-*/RESEARCH.md 2>/dev/null
67
67
  ```bash
68
68
  # Phase section already loaded in PHASE_INFO
69
69
  echo "$PHASE_INFO" | jq -r '.section'
70
- cat .planning/REQUIREMENTS.md 2>/dev/null
71
- cat .planning/phases/${PHASE}-*/*-CONTEXT.md 2>/dev/null
72
- grep -A30 "### Decisions Made" .planning/STATE.md 2>/dev/null
70
+ cat .ariadna_planning/REQUIREMENTS.md 2>/dev/null
71
+ cat .ariadna_planning/phases/${PHASE}-*/*-CONTEXT.md 2>/dev/null
72
+ grep -A30 "### Decisions Made" .ariadna_planning/STATE.md 2>/dev/null
73
73
  ```
74
74
 
75
75
  Present summary with phase description, requirements, prior decisions.
@@ -129,7 +129,7 @@ Before declaring complete, verify:
129
129
  </quality_gate>
130
130
 
131
131
  <output>
132
- Write to: .planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
132
+ Write to: .ariadna_planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
133
133
  </output>
134
134
  ```
135
135
 
@@ -158,7 +158,7 @@ Continue research for Phase {phase_number}: {phase_name}
158
158
  </objective>
159
159
 
160
160
  <prior_state>
161
- Research file: @.planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
161
+ Research file: @.ariadna_planning/phases/${PHASE}-{slug}/${PHASE}-RESEARCH.md
162
162
  </prior_state>
163
163
 
164
164
  <checkpoint_response>
@@ -29,8 +29,8 @@ Phase: $ARGUMENTS (optional)
29
29
  - If provided: Test specific phase (e.g., "4")
30
30
  - If not provided: Check for active sessions or prompt for phase
31
31
 
32
- @.planning/STATE.md
33
- @.planning/ROADMAP.md
32
+ @.ariadna_planning/STATE.md
33
+ @.ariadna_planning/ROADMAP.md
34
34
  </context>
35
35
 
36
36
  <process>
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env bash
2
+ # Ariadna statusline for Claude Code
3
+
4
+ input=$(cat)
5
+
6
+ # Require jq
7
+ if ! command -v jq &>/dev/null; then
8
+ echo "ariadna: jq required for statusline"
9
+ exit 0
10
+ fi
11
+
12
+ MODEL=$(echo "$input" | jq -r '.model.display_name // "unknown"')
13
+ PCT=$(echo "$input" | jq -r '.context_window.used_percentage // 0' | cut -d. -f1)
14
+ CWD=$(echo "$input" | jq -r '.cwd // ""')
15
+
16
+ # Scale to 80% effective limit (Claude Code compresses at ~80%)
17
+ SCALED=$(( PCT * 100 / 80 ))
18
+ [ "$SCALED" -gt 100 ] && SCALED=100
19
+
20
+ # Color based on scaled percentage
21
+ if [ "$SCALED" -ge 80 ]; then
22
+ COLOR='\033[31m' # Red
23
+ elif [ "$SCALED" -ge 60 ]; then
24
+ COLOR='\033[33m' # Yellow
25
+ else
26
+ COLOR='\033[32m' # Green
27
+ fi
28
+
29
+ # Progress bar (10 chars)
30
+ FILLED=$(( SCALED / 10 ))
31
+ EMPTY=$(( 10 - FILLED ))
32
+ BAR=$(printf "%${FILLED}s" | tr ' ' '█')$(printf "%${EMPTY}s" | tr ' ' '░')
33
+
34
+ # Phase info from STATE.md
35
+ PHASE=""
36
+ if [ -n "$CWD" ] && [ -f "$CWD/.ariadna_planning/STATE.md" ]; then
37
+ PHASE=$(grep -m1 '^Phase:' "$CWD/.ariadna_planning/STATE.md" | sed 's/^Phase:[[:space:]]*//')
38
+ fi
39
+
40
+ # Build output
41
+ DIM='\033[2m'
42
+ RESET='\033[0m'
43
+ if [ -n "$PHASE" ]; then
44
+ echo -e "${DIM}${MODEL}${RESET} │ ${PHASE} ${COLOR}${BAR}${RESET} ${PCT}%"
45
+ else
46
+ echo -e "${DIM}${MODEL}${RESET} ${COLOR}${BAR}${RESET} ${PCT}%"
47
+ fi
data/data/templates.md CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  ## Context
4
4
 
5
- The templates in `data/ariadna/templates/codebase/` are used by Ariadna's codebase mapping agents to generate `.planning/codebase/` documents when analyzing a Rails project. Currently, all templates except `architecture.md` are generic/framework-agnostic with JavaScript/TypeScript examples (Next.js, Vitest, npm, etc.). Since Ariadna is targeting Ruby on Rails applications, these templates should use Rails-specific terminology, examples, tools, and patterns.
5
+ The templates in `data/ariadna/templates/codebase/` are used by Ariadna's codebase mapping agents to generate `.ariadna_planning/codebase/` documents when analyzing a Rails project. Currently, all templates except `architecture.md` are generic/framework-agnostic with JavaScript/TypeScript examples (Next.js, Vitest, npm, etc.). Since Ariadna is targeting Ruby on Rails applications, these templates should use Rails-specific terminology, examples, tools, and patterns.
6
6
 
7
7
  `architecture.md` has already been updated and serves as the reference for style and approach.
8
8
 
data/exe/ariadna CHANGED
@@ -9,6 +9,7 @@ case command
9
9
  when "install"
10
10
  global = ARGV.include?("--global") || ARGV.include?("-g")
11
11
  local = ARGV.include?("--local") || ARGV.include?("-l")
12
+ force_statusline = ARGV.include?("--force-statusline")
12
13
 
13
14
  unless global || local
14
15
  warn "Usage: ariadna install --global (install to ~/.claude/)"
@@ -16,7 +17,7 @@ when "install"
16
17
  exit 1
17
18
  end
18
19
 
19
- Ariadna::Installer.new(local: local).install
20
+ Ariadna::Installer.new(local: local, force_statusline: force_statusline).install
20
21
  when "uninstall"
21
22
  require "ariadna/uninstaller"
22
23
  global = ARGV.include?("--global") || ARGV.include?("-g")
@@ -7,9 +7,10 @@ module Ariadna
7
7
  MANIFEST_NAME = "ariadna-manifest.json"
8
8
  PATCHES_DIR = "ariadna-local-patches"
9
9
 
10
- def initialize(target_dir: nil, local: false)
10
+ def initialize(target_dir: nil, local: false, force_statusline: false)
11
11
  @local = local
12
12
  @target_dir = target_dir || default_target_dir
13
+ @force_statusline = force_statusline
13
14
  end
14
15
 
15
16
  def install
@@ -23,6 +24,7 @@ module Ariadna
23
24
  copy_guides
24
25
  copy_content
25
26
  write_version
27
+ install_statusline
26
28
  write_manifest
27
29
 
28
30
  report_local_patches
@@ -135,6 +137,7 @@ module Ariadna
135
137
  keys << rel
136
138
  end
137
139
  end
140
+ keys << "ariadna-statusline.sh"
138
141
  keys
139
142
  end
140
143
 
@@ -154,6 +157,28 @@ module Ariadna
154
157
  end
155
158
  end
156
159
 
160
+ # --- Statusline ---
161
+
162
+ def install_statusline
163
+ src = File.join(source_dir, "statusline", "ariadna-statusline.sh")
164
+ dest = File.join(@target_dir, "ariadna-statusline.sh")
165
+
166
+ FileUtils.cp(src, dest)
167
+ FileUtils.chmod(0o755, dest)
168
+
169
+ settings_path = File.join(@target_dir, "settings.json")
170
+ settings = File.exist?(settings_path) ? JSON.parse(File.read(settings_path)) : {}
171
+
172
+ if settings.key?("statusLine") && !@force_statusline
173
+ puts " i Existing statusLine config found \u2014 skipping (use --force-statusline to replace)"
174
+ return
175
+ end
176
+
177
+ settings["statusLine"] = { "type" => "command", "command" => dest }
178
+ File.write(settings_path, JSON.pretty_generate(settings))
179
+ puts " \u2713 Installed statusline"
180
+ end
181
+
157
182
  # --- Copy operations ---
158
183
 
159
184
  def copy_commands
@@ -226,6 +251,10 @@ module Ariadna
226
251
  entries[rel] = Digest::SHA256.file(file).hexdigest
227
252
  end
228
253
  end
254
+
255
+ statusline_path = File.join(@target_dir, "ariadna-statusline.sh")
256
+ entries["ariadna-statusline.sh"] = Digest::SHA256.file(statusline_path).hexdigest if File.exist?(statusline_path)
257
+
229
258
  entries
230
259
  end
231
260
 
@@ -21,7 +21,7 @@ module Ariadna
21
21
  }.freeze
22
22
 
23
23
  def self.load_config(cwd = Dir.pwd)
24
- config_path = File.join(cwd, ".planning", "config.json")
24
+ config_path = File.join(cwd, ".ariadna_planning", "config.json")
25
25
  return DEFAULTS.dup unless File.exist?(config_path)
26
26
 
27
27
  raw = File.read(config_path)
@@ -77,8 +77,8 @@ module Ariadna
77
77
 
78
78
  def self.ensure_section(argv, raw: false)
79
79
  cwd = Dir.pwd
80
- config_path = File.join(cwd, ".planning", "config.json")
81
- planning_dir = File.join(cwd, ".planning")
80
+ config_path = File.join(cwd, ".ariadna_planning", "config.json")
81
+ planning_dir = File.join(cwd, ".ariadna_planning")
82
82
 
83
83
  FileUtils.mkdir_p(planning_dir) unless File.directory?(planning_dir)
84
84
 
@@ -105,7 +105,7 @@ module Ariadna
105
105
  }
106
106
 
107
107
  File.write(config_path, JSON.pretty_generate(defaults))
108
- Output.json({ created: true, path: ".planning/config.json" }, raw: raw, raw_value: "created")
108
+ Output.json({ created: true, path: ".ariadna_planning/config.json" }, raw: raw, raw_value: "created")
109
109
  end
110
110
 
111
111
  def self.set(argv, raw: false)
@@ -114,7 +114,7 @@ module Ariadna
114
114
  Output.error("Usage: config-set <key.path> <value>") unless key_path
115
115
 
116
116
  cwd = Dir.pwd
117
- config_path = File.join(cwd, ".planning", "config.json")
117
+ config_path = File.join(cwd, ".ariadna_planning", "config.json")
118
118
 
119
119
  config = {}
120
120
  if File.exist?(config_path)
@@ -22,14 +22,14 @@ module Ariadna
22
22
  return
23
23
  end
24
24
 
25
- if git_ignored?(cwd, ".planning")
25
+ if git_ignored?(cwd, ".ariadna_planning")
26
26
  Output.json({ committed: false, hash: nil, reason: "skipped_gitignored" }, raw: raw, raw_value: "skipped")
27
27
  return
28
28
  end
29
29
 
30
30
  # Stage files
31
31
  if files.empty?
32
- exec_git(cwd, ["add", ".planning/"])
32
+ exec_git(cwd, ["add", ".ariadna_planning/"])
33
33
  else
34
34
  files.each { |f| exec_git(cwd, ["add", f]) }
35
35
  end