@arvorco/relentless 0.1.0 → 0.1.6

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 (53) hide show
  1. package/README.md +30 -13
  2. package/bin/relentless.ts +1 -1
  3. package/package.json +3 -2
  4. package/.claude/commands/relentless.plan.old.md +0 -89
  5. package/.claude/settings.local.json +0 -23
  6. package/.claude/skills/analyze/SKILL.md +0 -149
  7. package/.claude/skills/checklist/SKILL.md +0 -173
  8. package/.claude/skills/checklist/templates/checklist-template.md +0 -40
  9. package/.claude/skills/clarify/SKILL.md +0 -174
  10. package/.claude/skills/constitution/SKILL.md +0 -150
  11. package/.claude/skills/constitution/templates/constitution-template.md +0 -228
  12. package/.claude/skills/implement/SKILL.md +0 -141
  13. package/.claude/skills/plan/SKILL.md +0 -179
  14. package/.claude/skills/plan/templates/plan-template.md +0 -104
  15. package/.claude/skills/prd/SKILL.md +0 -242
  16. package/.claude/skills/relentless/SKILL.md +0 -265
  17. package/.claude/skills/specify/SKILL.md +0 -220
  18. package/.claude/skills/specify/scripts/bash/check-prerequisites.sh +0 -166
  19. package/.claude/skills/specify/scripts/bash/common.sh +0 -156
  20. package/.claude/skills/specify/scripts/bash/create-new-feature.sh +0 -305
  21. package/.claude/skills/specify/scripts/bash/setup-plan.sh +0 -61
  22. package/.claude/skills/specify/scripts/bash/update-agent-context.sh +0 -799
  23. package/.claude/skills/specify/templates/spec-template.md +0 -115
  24. package/.claude/skills/tasks/SKILL.md +0 -202
  25. package/.claude/skills/tasks/templates/tasks-template.md +0 -251
  26. package/.claude/skills/taskstoissues/SKILL.md +0 -97
  27. package/.specify/memory/constitution.md +0 -50
  28. package/.specify/scripts/bash/check-prerequisites.sh +0 -166
  29. package/.specify/scripts/bash/common.sh +0 -156
  30. package/.specify/scripts/bash/create-new-feature.sh +0 -297
  31. package/.specify/scripts/bash/setup-plan.sh +0 -61
  32. package/.specify/scripts/bash/update-agent-context.sh +0 -799
  33. package/.specify/templates/agent-file-template.md +0 -28
  34. package/.specify/templates/checklist-template.md +0 -40
  35. package/.specify/templates/plan-template.md +0 -104
  36. package/.specify/templates/spec-template.md +0 -115
  37. package/.specify/templates/tasks-template.md +0 -251
  38. package/CHANGES_SUMMARY.md +0 -255
  39. package/CLAUDE.md +0 -92
  40. package/GEMINI_SETUP.md +0 -256
  41. package/REFACTOR_SUMMARY.md +0 -267
  42. package/bun.lock +0 -352
  43. package/prompt.md +0 -108
  44. package/ralph.sh +0 -80
  45. package/relentless/features/ghsk-ideas/prd.json +0 -229
  46. package/relentless/features/ghsk-ideas/prd.md +0 -191
  47. package/relentless/features/ghsk-ideas/progress.txt +0 -408
  48. package/relentless/prompt.md +0 -79
  49. package/skills/checklist/SKILL.md +0 -349
  50. package/skills/clarify/SKILL.md +0 -476
  51. package/skills/prd/SKILL.md +0 -242
  52. package/skills/relentless/SKILL.md +0 -268
  53. package/skills/tasks/SKILL.md +0 -577
@@ -1,265 +0,0 @@
1
- ---
2
- name: relentless
3
- description: "Convert PRDs to prd.json format for the Relentless autonomous agent system. Use when you have an existing PRD and need to convert it to Relentless JSON format. Triggers on: convert this prd, turn this into relentless format, create prd.json from this, relentless json."
4
- ---
5
-
6
- # Relentless PRD Converter
7
-
8
- Converts existing PRDs to the prd.json format that Relentless uses for autonomous execution with any AI coding agent.
9
-
10
- ---
11
-
12
- ## The Job
13
-
14
- Take a PRD (markdown file or text) and convert it to `relentless/prd.json` in your project directory.
15
-
16
- **Important:** All relentless files are stored in the `relentless/` subdirectory.
17
-
18
- ---
19
-
20
- ## Output Format
21
-
22
- ```json
23
- {
24
- "project": "[Project Name]",
25
- "branchName": "relentless/[feature-name-kebab-case]",
26
- "description": "[Feature description from PRD title/intro]",
27
- "userStories": [
28
- {
29
- "id": "US-001",
30
- "title": "[Story title]",
31
- "description": "As a [user], I want [feature] so that [benefit]",
32
- "acceptanceCriteria": [
33
- "Criterion 1",
34
- "Criterion 2",
35
- "Typecheck passes"
36
- ],
37
- "priority": 1,
38
- "passes": false,
39
- "notes": ""
40
- }
41
- ]
42
- }
43
- ```
44
-
45
- ---
46
-
47
- ## Story Size: The Number One Rule
48
-
49
- **Each story must be completable in ONE Relentless iteration (one context window).**
50
-
51
- Relentless spawns a fresh AI agent instance per iteration with no memory of previous work. If a story is too big, the LLM runs out of context before finishing and produces broken code.
52
-
53
- ### Right-sized stories:
54
- - Add a database column and migration
55
- - Add a UI component to an existing page
56
- - Update a server action with new logic
57
- - Add a filter dropdown to a list
58
-
59
- ### Too big (split these):
60
- - "Build the entire dashboard" - Split into: schema, queries, UI components, filters
61
- - "Add authentication" - Split into: schema, middleware, login UI, session handling
62
- - "Refactor the API" - Split into one story per endpoint or pattern
63
-
64
- **Rule of thumb:** If you cannot describe the change in 2-3 sentences, it is too big.
65
-
66
- ---
67
-
68
- ## Story Ordering: Dependencies First
69
-
70
- Stories execute in priority order. Earlier stories must not depend on later ones.
71
-
72
- **Correct order:**
73
- 1. Schema/database changes (migrations)
74
- 2. Server actions / backend logic
75
- 3. UI components that use the backend
76
- 4. Dashboard/summary views that aggregate data
77
-
78
- **Wrong order:**
79
- 1. UI component (depends on schema that does not exist yet)
80
- 2. Schema change
81
-
82
- ---
83
-
84
- ## Acceptance Criteria: Must Be Verifiable
85
-
86
- Each criterion must be something the agent can CHECK, not something vague.
87
-
88
- ### Good criteria (verifiable):
89
- - "Add `status` column to tasks table with default 'pending'"
90
- - "Filter dropdown has options: All, Active, Completed"
91
- - "Clicking delete shows confirmation dialog"
92
- - "Typecheck passes"
93
- - "Tests pass"
94
-
95
- ### Bad criteria (vague):
96
- - "Works correctly"
97
- - "User can do X easily"
98
- - "Good UX"
99
- - "Handles edge cases"
100
-
101
- ### Always include as final criterion:
102
- ```
103
- "Typecheck passes"
104
- ```
105
-
106
- For stories with testable logic, also include:
107
- ```
108
- "Tests pass"
109
- ```
110
-
111
- ### For stories that change UI, also include:
112
- ```
113
- "Verify in browser"
114
- ```
115
-
116
- Frontend stories are NOT complete until visually verified.
117
-
118
- ---
119
-
120
- ## Conversion Rules
121
-
122
- 1. **Each user story becomes one JSON entry**
123
- 2. **IDs**: Sequential (US-001, US-002, etc.)
124
- 3. **Priority**: Based on dependency order, then document order
125
- 4. **All stories**: `passes: false` and empty `notes`
126
- 5. **branchName**: Derive from feature name, kebab-case, prefixed with `relentless/`
127
- 6. **Always add**: "Typecheck passes" to every story's acceptance criteria
128
-
129
- ---
130
-
131
- ## Splitting Large PRDs
132
-
133
- If a PRD has big features, split them:
134
-
135
- **Original:**
136
- > "Add user notification system"
137
-
138
- **Split into:**
139
- 1. US-001: Add notifications table to database
140
- 2. US-002: Create notification service for sending notifications
141
- 3. US-003: Add notification bell icon to header
142
- 4. US-004: Create notification dropdown panel
143
- 5. US-005: Add mark-as-read functionality
144
- 6. US-006: Add notification preferences page
145
-
146
- Each is one focused change that can be completed and verified independently.
147
-
148
- ---
149
-
150
- ## Example
151
-
152
- **Input PRD:**
153
- ```markdown
154
- # Task Status Feature
155
-
156
- Add ability to mark tasks with different statuses.
157
-
158
- ## Requirements
159
- - Toggle between pending/in-progress/done on task list
160
- - Filter list by status
161
- - Show status badge on each task
162
- - Persist status in database
163
- ```
164
-
165
- **Output prd.json:**
166
- ```json
167
- {
168
- "project": "TaskApp",
169
- "branchName": "relentless/task-status",
170
- "description": "Task Status Feature - Track task progress with status indicators",
171
- "userStories": [
172
- {
173
- "id": "US-001",
174
- "title": "Add status field to tasks table",
175
- "description": "As a developer, I need to store task status in the database.",
176
- "acceptanceCriteria": [
177
- "Add status column: 'pending' | 'in_progress' | 'done' (default 'pending')",
178
- "Generate and run migration successfully",
179
- "Typecheck passes"
180
- ],
181
- "priority": 1,
182
- "passes": false,
183
- "notes": ""
184
- },
185
- {
186
- "id": "US-002",
187
- "title": "Display status badge on task cards",
188
- "description": "As a user, I want to see task status at a glance.",
189
- "acceptanceCriteria": [
190
- "Each task card shows colored status badge",
191
- "Badge colors: gray=pending, blue=in_progress, green=done",
192
- "Typecheck passes",
193
- "Verify in browser"
194
- ],
195
- "priority": 2,
196
- "passes": false,
197
- "notes": ""
198
- },
199
- {
200
- "id": "US-003",
201
- "title": "Add status toggle to task list rows",
202
- "description": "As a user, I want to change task status directly from the list.",
203
- "acceptanceCriteria": [
204
- "Each row has status dropdown or toggle",
205
- "Changing status saves immediately",
206
- "UI updates without page refresh",
207
- "Typecheck passes",
208
- "Verify in browser"
209
- ],
210
- "priority": 3,
211
- "passes": false,
212
- "notes": ""
213
- },
214
- {
215
- "id": "US-004",
216
- "title": "Filter tasks by status",
217
- "description": "As a user, I want to filter the list to see only certain statuses.",
218
- "acceptanceCriteria": [
219
- "Filter dropdown: All | Pending | In Progress | Done",
220
- "Filter persists in URL params",
221
- "Typecheck passes",
222
- "Verify in browser"
223
- ],
224
- "priority": 4,
225
- "passes": false,
226
- "notes": ""
227
- }
228
- ]
229
- }
230
- ```
231
-
232
- ---
233
-
234
- ## Running Relentless
235
-
236
- After creating relentless/prd.json, run the orchestrator:
237
-
238
- ```bash
239
- # With Claude Code (default)
240
- ./relentless/bin/relentless.sh
241
-
242
- # With a specific agent
243
- ./relentless/bin/relentless.sh --agent amp
244
- ./relentless/bin/relentless.sh --agent codex
245
- ./relentless/bin/relentless.sh --agent gemini
246
-
247
- # Smart routing (auto-select best agent per story)
248
- ./relentless/bin/relentless.sh --agent auto
249
-
250
- # Custom max iterations
251
- ./relentless/bin/relentless.sh --max-iterations 30
252
- ```
253
-
254
- ---
255
-
256
- ## Checklist Before Saving
257
-
258
- Before writing prd.json, verify:
259
-
260
- - [ ] Each story is completable in one iteration (small enough)
261
- - [ ] Stories are ordered by dependency (schema to backend to UI)
262
- - [ ] Every story has "Typecheck passes" as criterion
263
- - [ ] UI stories have "Verify in browser" as criterion
264
- - [ ] Acceptance criteria are verifiable (not vague)
265
- - [ ] No story depends on a later story
@@ -1,220 +0,0 @@
1
- ---
2
- name: specify
3
- description: "Create feature specification from natural language description. Use when starting a new feature or creating a spec. Triggers on: create spec, specify feature, new feature spec."
4
- ---
5
-
6
- # Feature Specification Generator
7
-
8
- Create structured feature specifications from natural language descriptions.
9
-
10
- ---
11
-
12
- ## The Job
13
-
14
- 1. Receive feature description from user
15
- 2. Generate short name and feature number
16
- 3. Create branch and feature directory in `relentless/features/NNN-feature-name/`
17
- 4. Generate specification using template
18
- 5. Validate specification quality
19
- 6. Save to `spec.md`
20
-
21
- ---
22
-
23
- ## Step 1: Create Feature Structure
24
-
25
- Run the create-new-feature script to set up the branch and directory:
26
-
27
- ```bash
28
- .claude/skills/specify/scripts/bash/create-new-feature.sh --json "FEATURE_DESCRIPTION"
29
- ```
30
-
31
- This will output JSON with:
32
- - `BRANCH_NAME`: e.g., "003-user-auth"
33
- - `SPEC_FILE`: Full path to spec.md
34
- - `FEATURE_DIR`: Full path to feature directory
35
- - `FEATURE_NUM`: e.g., "003"
36
-
37
- **Important:** Parse this JSON and use these paths for all subsequent operations.
38
-
39
- ---
40
-
41
- ## Step 2: Load Constitution & Context
42
-
43
- 1. Read `relentless/constitution.md` for project governance
44
- 2. Note any MUST/SHOULD rules that apply to specifications
45
- 3. Keep these principles in mind while generating the spec
46
-
47
- ---
48
-
49
- ## Step 3: Generate Specification
50
-
51
- Using the template at `templates/spec-template.md`, create a specification with:
52
-
53
- ### Required Sections:
54
-
55
- **1. Feature Overview**
56
- - One-paragraph summary
57
- - User value proposition
58
- - Problem being solved
59
-
60
- **2. User Scenarios & Testing**
61
- - Concrete user stories
62
- - Step-by-step flows
63
- - Expected outcomes
64
-
65
- **3. Functional Requirements**
66
- - What the system must do
67
- - Testable requirements (no implementation details)
68
- - Clear success criteria
69
-
70
- **4. Success Criteria**
71
- - Measurable, technology-agnostic outcomes
72
- - Quantitative metrics (time, performance, volume)
73
- - Qualitative measures (user satisfaction, task completion)
74
-
75
- **5. Key Entities (if applicable)**
76
- - Data models and relationships
77
- - Fields and types (logical, not implementation)
78
-
79
- **6. Dependencies & Assumptions**
80
- - External systems required
81
- - Prerequisites
82
- - Assumptions made
83
-
84
- **7. Out of Scope**
85
- - What this feature explicitly does NOT include
86
- - Future considerations
87
-
88
- ---
89
-
90
- ## Step 4: Handle Ambiguities
91
-
92
- If aspects are unclear:
93
- - Make informed guesses based on context
94
- - Only mark `[NEEDS CLARIFICATION: specific question]` if:
95
- - Choice significantly impacts scope or UX
96
- - Multiple reasonable interpretations exist
97
- - No reasonable default exists
98
- - **LIMIT: Maximum 3 clarifications**
99
-
100
- If clarifications needed, present to user:
101
-
102
- ```markdown
103
- ## Clarification Needed
104
-
105
- **Q1: [Topic]**
106
- Context: [Quote spec section]
107
- Question: [Specific question]
108
-
109
- Options:
110
- A. [Option 1] - [Implications]
111
- B. [Option 2] - [Implications]
112
- C. Custom - [Your answer]
113
-
114
- Your choice: _
115
- ```
116
-
117
- ---
118
-
119
- ## Step 5: Validate Quality
120
-
121
- Check the specification against:
122
-
123
- - [ ] No implementation details (languages, frameworks, APIs)
124
- - [ ] Focused on user value and business needs
125
- - [ ] All requirements are testable
126
- - [ ] Success criteria are measurable
127
- - [ ] User scenarios cover primary flows
128
- - [ ] Dependencies identified
129
- - [ ] Scope clearly bounded
130
- - [ ] No more than 3 `[NEEDS CLARIFICATION]` markers
131
-
132
- If validation fails, revise and re-check (max 3 iterations).
133
-
134
- ---
135
-
136
- ## Step 6: Save & Report
137
-
138
- 1. Write complete specification to `SPEC_FILE` from JSON output
139
- 2. Create progress.txt if it doesn't exist:
140
- ```markdown
141
- ---
142
- feature: FEATURE_NAME
143
- started: DATE
144
- last_updated: DATE
145
- stories_completed: 0
146
- ---
147
-
148
- # Progress Log: FEATURE_NAME
149
- ```
150
-
151
- 3. Report to user:
152
- - Branch created: `BRANCH_NAME`
153
- - Spec saved: `SPEC_FILE`
154
- - Quality validation: PASSED/FAILED
155
- - Next step: `/relentless.plan` or `/relentless.clarify`
156
-
157
- ---
158
-
159
- ## Example Output
160
-
161
- ```markdown
162
- # Feature: User Authentication
163
-
164
- ## Overview
165
- Enable users to create accounts and log in securely using email/password.
166
-
167
- ## User Scenarios
168
-
169
- ### Scenario 1: New User Registration
170
- 1. User visits signup page
171
- 2. Enters email and password
172
- 3. Submits form
173
- 4. Receives confirmation email
174
- 5. Clicks confirmation link
175
- 6. Account is activated
176
-
177
- **Expected Outcome:** User has active account and can log in.
178
-
179
- ## Functional Requirements
180
-
181
- **REQ-1:** System must validate email format
182
- **REQ-2:** System must require passwords ≥ 8 characters
183
- **REQ-3:** System must send confirmation email within 1 minute
184
- **REQ-4:** System must hash passwords before storage
185
-
186
- ## Success Criteria
187
-
188
- 1. 95% of signups complete within 60 seconds
189
- 2. Zero plaintext passwords in database
190
- 3. Email confirmation rate > 80%
191
-
192
- ## Key Entities
193
-
194
- **User**
195
- - email: string (unique)
196
- - password_hash: string
197
- - confirmed: boolean
198
- - created_at: timestamp
199
-
200
- ## Dependencies
201
-
202
- - Email service provider (e.g., SendGrid, Mailgun)
203
- - Session management system
204
-
205
- ## Out of Scope
206
-
207
- - Social login (OAuth)
208
- - Two-factor authentication
209
- - Password reset (separate feature)
210
- ```
211
-
212
- ---
213
-
214
- ## Notes
215
-
216
- - Always run the script first to get proper paths
217
- - Use absolute paths from JSON output
218
- - Validate before marking complete
219
- - Keep specification technology-agnostic
220
- - Focus on WHAT, not HOW
@@ -1,166 +0,0 @@
1
- #!/usr/bin/env bash
2
-
3
- # Consolidated prerequisite checking script
4
- #
5
- # This script provides unified prerequisite checking for Spec-Driven Development workflow.
6
- # It replaces the functionality previously spread across multiple scripts.
7
- #
8
- # Usage: ./check-prerequisites.sh [OPTIONS]
9
- #
10
- # OPTIONS:
11
- # --json Output in JSON format
12
- # --require-tasks Require tasks.md to exist (for implementation phase)
13
- # --include-tasks Include tasks.md in AVAILABLE_DOCS list
14
- # --paths-only Only output path variables (no validation)
15
- # --help, -h Show help message
16
- #
17
- # OUTPUTS:
18
- # JSON mode: {"FEATURE_DIR":"...", "AVAILABLE_DOCS":["..."]}
19
- # Text mode: FEATURE_DIR:... \n AVAILABLE_DOCS: \n ✓/✗ file.md
20
- # Paths only: REPO_ROOT: ... \n BRANCH: ... \n FEATURE_DIR: ... etc.
21
-
22
- set -e
23
-
24
- # Parse command line arguments
25
- JSON_MODE=false
26
- REQUIRE_TASKS=false
27
- INCLUDE_TASKS=false
28
- PATHS_ONLY=false
29
-
30
- for arg in "$@"; do
31
- case "$arg" in
32
- --json)
33
- JSON_MODE=true
34
- ;;
35
- --require-tasks)
36
- REQUIRE_TASKS=true
37
- ;;
38
- --include-tasks)
39
- INCLUDE_TASKS=true
40
- ;;
41
- --paths-only)
42
- PATHS_ONLY=true
43
- ;;
44
- --help|-h)
45
- cat << 'EOF'
46
- Usage: check-prerequisites.sh [OPTIONS]
47
-
48
- Consolidated prerequisite checking for Spec-Driven Development workflow.
49
-
50
- OPTIONS:
51
- --json Output in JSON format
52
- --require-tasks Require tasks.md to exist (for implementation phase)
53
- --include-tasks Include tasks.md in AVAILABLE_DOCS list
54
- --paths-only Only output path variables (no prerequisite validation)
55
- --help, -h Show this help message
56
-
57
- EXAMPLES:
58
- # Check task prerequisites (plan.md required)
59
- ./check-prerequisites.sh --json
60
-
61
- # Check implementation prerequisites (plan.md + tasks.md required)
62
- ./check-prerequisites.sh --json --require-tasks --include-tasks
63
-
64
- # Get feature paths only (no validation)
65
- ./check-prerequisites.sh --paths-only
66
-
67
- EOF
68
- exit 0
69
- ;;
70
- *)
71
- echo "ERROR: Unknown option '$arg'. Use --help for usage information." >&2
72
- exit 1
73
- ;;
74
- esac
75
- done
76
-
77
- # Source common functions
78
- SCRIPT_DIR="$(CDPATH="" cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
79
- source "$SCRIPT_DIR/common.sh"
80
-
81
- # Get feature paths and validate branch
82
- eval $(get_feature_paths)
83
- check_feature_branch "$CURRENT_BRANCH" "$HAS_GIT" || exit 1
84
-
85
- # If paths-only mode, output paths and exit (support JSON + paths-only combined)
86
- if $PATHS_ONLY; then
87
- if $JSON_MODE; then
88
- # Minimal JSON paths payload (no validation performed)
89
- printf '{"REPO_ROOT":"%s","BRANCH":"%s","FEATURE_DIR":"%s","FEATURE_SPEC":"%s","IMPL_PLAN":"%s","TASKS":"%s"}\n' \
90
- "$REPO_ROOT" "$CURRENT_BRANCH" "$FEATURE_DIR" "$FEATURE_SPEC" "$IMPL_PLAN" "$TASKS"
91
- else
92
- echo "REPO_ROOT: $REPO_ROOT"
93
- echo "BRANCH: $CURRENT_BRANCH"
94
- echo "FEATURE_DIR: $FEATURE_DIR"
95
- echo "FEATURE_SPEC: $FEATURE_SPEC"
96
- echo "IMPL_PLAN: $IMPL_PLAN"
97
- echo "TASKS: $TASKS"
98
- fi
99
- exit 0
100
- fi
101
-
102
- # Validate required directories and files
103
- if [[ ! -d "$FEATURE_DIR" ]]; then
104
- echo "ERROR: Feature directory not found: $FEATURE_DIR" >&2
105
- echo "Run /relentless.specify first to create the feature structure." >&2
106
- exit 1
107
- fi
108
-
109
- if [[ ! -f "$IMPL_PLAN" ]]; then
110
- echo "ERROR: plan.md not found in $FEATURE_DIR" >&2
111
- echo "Run /relentless.plan first to create the implementation plan." >&2
112
- exit 1
113
- fi
114
-
115
- # Check for tasks.md if required
116
- if $REQUIRE_TASKS && [[ ! -f "$TASKS" ]]; then
117
- echo "ERROR: tasks.md not found in $FEATURE_DIR" >&2
118
- echo "Run /relentless.tasks first to create the task list." >&2
119
- exit 1
120
- fi
121
-
122
- # Build list of available documents
123
- docs=()
124
-
125
- # Always check these optional docs
126
- [[ -f "$RESEARCH" ]] && docs+=("research.md")
127
- [[ -f "$DATA_MODEL" ]] && docs+=("data-model.md")
128
-
129
- # Check contracts directory (only if it exists and has files)
130
- if [[ -d "$CONTRACTS_DIR" ]] && [[ -n "$(ls -A "$CONTRACTS_DIR" 2>/dev/null)" ]]; then
131
- docs+=("contracts/")
132
- fi
133
-
134
- [[ -f "$QUICKSTART" ]] && docs+=("quickstart.md")
135
-
136
- # Include tasks.md if requested and it exists
137
- if $INCLUDE_TASKS && [[ -f "$TASKS" ]]; then
138
- docs+=("tasks.md")
139
- fi
140
-
141
- # Output results
142
- if $JSON_MODE; then
143
- # Build JSON array of documents
144
- if [[ ${#docs[@]} -eq 0 ]]; then
145
- json_docs="[]"
146
- else
147
- json_docs=$(printf '"%s",' "${docs[@]}")
148
- json_docs="[${json_docs%,}]"
149
- fi
150
-
151
- printf '{"FEATURE_DIR":"%s","AVAILABLE_DOCS":%s}\n' "$FEATURE_DIR" "$json_docs"
152
- else
153
- # Text output
154
- echo "FEATURE_DIR:$FEATURE_DIR"
155
- echo "AVAILABLE_DOCS:"
156
-
157
- # Show status of each potential document
158
- check_file "$RESEARCH" "research.md"
159
- check_file "$DATA_MODEL" "data-model.md"
160
- check_dir "$CONTRACTS_DIR" "contracts/"
161
- check_file "$QUICKSTART" "quickstart.md"
162
-
163
- if $INCLUDE_TASKS; then
164
- check_file "$TASKS" "tasks.md"
165
- fi
166
- fi