@mandors/cli 0.3.9 → 0.3.11
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.
- package/README.md +282 -612
- package/binaries/darwin-arm64/mandor +0 -0
- package/binaries/darwin-arm64.tar.gz +0 -0
- package/binaries/linux-arm64/mandor +0 -0
- package/binaries/linux-arm64.tar.gz +0 -0
- package/mandor-cli +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -60,9 +60,9 @@ Workspace
|
|
|
60
60
|
|
|
61
61
|
| Type | Purpose | Status Values |
|
|
62
62
|
|------|---------|---------------|
|
|
63
|
-
| **Task** | Work items within a feature | ready, in_progress, done, blocked, cancelled |
|
|
63
|
+
| **Task** | Work items within a feature | pending, ready, in_progress, done, blocked, cancelled |
|
|
64
64
|
| **Feature** | Logical grouping of related tasks | draft, active, done, blocked, cancelled |
|
|
65
|
-
| **Issue** | Problems, bugs, or improvement requests | ready, in_progress, resolved, wontfix, blocked |
|
|
65
|
+
| **Issue** | Problems, bugs, or improvement requests | open, ready, in_progress, resolved, wontfix, blocked, cancelled |
|
|
66
66
|
|
|
67
67
|
### Dependency Types
|
|
68
68
|
|
|
@@ -74,9 +74,8 @@ Workspace
|
|
|
74
74
|
|
|
75
75
|
**Tasks:**
|
|
76
76
|
```
|
|
77
|
-
ready → in_progress → done
|
|
78
|
-
ready → blocked
|
|
79
|
-
blocked → ready (dependencies resolved)
|
|
77
|
+
pending → ready → in_progress → done
|
|
78
|
+
pending → ready → blocked → ready
|
|
80
79
|
ready → cancelled
|
|
81
80
|
cancelled → ready (reopen)
|
|
82
81
|
```
|
|
@@ -91,12 +90,13 @@ cancelled → draft (reopen)
|
|
|
91
90
|
|
|
92
91
|
**Issues:**
|
|
93
92
|
```
|
|
94
|
-
ready → in_progress → resolved
|
|
95
|
-
ready → in_progress → wontfix
|
|
96
|
-
ready → blocked
|
|
97
|
-
blocked → ready (dependencies resolved)
|
|
93
|
+
open → ready → in_progress → resolved
|
|
94
|
+
open → ready → in_progress → wontfix
|
|
95
|
+
open → ready → blocked → ready
|
|
98
96
|
resolved → ready (reopen)
|
|
99
97
|
wontfix → ready (reopen)
|
|
98
|
+
open → cancelled
|
|
99
|
+
cancelled → open (reopen)
|
|
100
100
|
```
|
|
101
101
|
|
|
102
102
|
---
|
|
@@ -106,15 +106,22 @@ wontfix → ready (reopen)
|
|
|
106
106
|
### Build from Source
|
|
107
107
|
|
|
108
108
|
```bash
|
|
109
|
-
git clone https://github.com/
|
|
109
|
+
git clone https://github.com/sanxzy/mandor.git
|
|
110
110
|
cd mandor
|
|
111
|
-
go build -o ./
|
|
111
|
+
go build -o ./mandor ./cmd/mandor
|
|
112
112
|
```
|
|
113
113
|
|
|
114
114
|
### Use from Binaries
|
|
115
115
|
|
|
116
116
|
```bash
|
|
117
|
-
./
|
|
117
|
+
./mandor --help
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
### Install from npm
|
|
121
|
+
|
|
122
|
+
```bash
|
|
123
|
+
npm install -g @mandors/cli
|
|
124
|
+
mandor --help
|
|
118
125
|
```
|
|
119
126
|
|
|
120
127
|
---
|
|
@@ -124,7 +131,6 @@ go build -o ./binaries/mandor ./cmd/mandor
|
|
|
124
131
|
### 1. Initialize Workspace
|
|
125
132
|
|
|
126
133
|
```bash
|
|
127
|
-
export MANDOR_ENV=development
|
|
128
134
|
mandor init "My Project"
|
|
129
135
|
```
|
|
130
136
|
|
|
@@ -147,7 +153,7 @@ mandor feature create "Authentication" --project api \
|
|
|
147
153
|
|
|
148
154
|
```bash
|
|
149
155
|
# Create first task (no dependencies)
|
|
150
|
-
mandor task create api-feature-xxx
|
|
156
|
+
mandor task create "JWT Parser" --feature api-feature-xxx \
|
|
151
157
|
--goal "Parse and validate JWT tokens in incoming requests with expiry and signature verification" \
|
|
152
158
|
--implementation-steps "Setup crypto library|Add token validation|Handle expiry|Return errors" \
|
|
153
159
|
--test-cases "Valid token accepted|Expired token rejected|Invalid signature rejected" \
|
|
@@ -156,7 +162,7 @@ mandor task create api-feature-xxx "JWT Parser" \
|
|
|
156
162
|
--priority P1
|
|
157
163
|
|
|
158
164
|
# Create dependent task (depends on JWT Parser)
|
|
159
|
-
mandor task create api-feature-xxx
|
|
165
|
+
mandor task create "Login Endpoint" --feature api-feature-xxx \
|
|
160
166
|
--goal "Accept user credentials and return JWT token with refresh token flow" \
|
|
161
167
|
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Return tokens" \
|
|
162
168
|
--test-cases "Valid creds return token|Invalid creds rejected|Tokens properly formatted" \
|
|
@@ -170,16 +176,13 @@ mandor task create api-feature-xxx "Login Endpoint" \
|
|
|
170
176
|
|
|
171
177
|
```bash
|
|
172
178
|
# See all tasks in feature
|
|
173
|
-
mandor task list api-feature-xxx
|
|
179
|
+
mandor task list --feature api-feature-xxx
|
|
174
180
|
|
|
175
181
|
# See tasks ready to work on
|
|
176
|
-
mandor task ready api-feature-xxx
|
|
182
|
+
mandor task ready --feature api-feature-xxx
|
|
177
183
|
|
|
178
184
|
# See blocked/waiting tasks
|
|
179
|
-
mandor task blocked api-feature-xxx
|
|
180
|
-
|
|
181
|
-
# See summary grouped by status
|
|
182
|
-
mandor task summary api-feature-xxx
|
|
185
|
+
mandor task blocked --feature api-feature-xxx
|
|
183
186
|
```
|
|
184
187
|
|
|
185
188
|
### 6. Mark Tasks Complete
|
|
@@ -190,7 +193,7 @@ mandor task update <task-id> --status in_progress
|
|
|
190
193
|
mandor task update <task-id> --status done
|
|
191
194
|
|
|
192
195
|
# Dependent tasks auto-transition to "ready"
|
|
193
|
-
mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
|
|
196
|
+
mandor task ready --feature api-feature-xxx # Now shows "Login Endpoint" as ready
|
|
194
197
|
```
|
|
195
198
|
|
|
196
199
|
---
|
|
@@ -201,627 +204,274 @@ mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
|
|
|
201
204
|
|
|
202
205
|
```bash
|
|
203
206
|
# Initialize a new workspace
|
|
204
|
-
mandor init --workspace-name
|
|
207
|
+
mandor init [--workspace-name <name>] [-y]
|
|
205
208
|
|
|
206
|
-
# View workspace status
|
|
207
|
-
mandor status
|
|
209
|
+
# View workspace and project status
|
|
210
|
+
mandor status [--project <id>] [--summary] [--json]
|
|
211
|
+
|
|
212
|
+
# Display feature summary grouped by priority
|
|
213
|
+
mandor summary [--project <id>]
|
|
208
214
|
|
|
209
215
|
# Manage configuration
|
|
210
216
|
mandor config get <key>
|
|
211
217
|
mandor config set <key> <value>
|
|
218
|
+
mandor config list
|
|
212
219
|
mandor config reset <key>
|
|
220
|
+
|
|
221
|
+
# Display all commands and best practices
|
|
222
|
+
mandor populate [--markdown|--json]
|
|
223
|
+
|
|
224
|
+
# Show version
|
|
225
|
+
mandor version
|
|
226
|
+
|
|
227
|
+
# Generate shell completions
|
|
228
|
+
mandor completion [bash|zsh|fish]
|
|
213
229
|
```
|
|
214
230
|
|
|
215
231
|
### Project Commands
|
|
216
232
|
|
|
217
233
|
```bash
|
|
218
234
|
# Create a project
|
|
219
|
-
mandor project create <id> --name
|
|
235
|
+
mandor project create <id> --name <name> --goal <goal> [OPTIONS]
|
|
220
236
|
|
|
221
237
|
# List projects
|
|
222
|
-
mandor project list
|
|
238
|
+
mandor project list [--json]
|
|
223
239
|
|
|
224
240
|
# Show project details
|
|
225
241
|
mandor project detail <project-id>
|
|
226
242
|
|
|
227
|
-
#
|
|
228
|
-
mandor project
|
|
243
|
+
# Update project
|
|
244
|
+
mandor project update <project-id> --name <name> [--goal <goal>]
|
|
245
|
+
|
|
246
|
+
# Delete project (soft delete)
|
|
247
|
+
mandor project delete <project-id> [--hard]
|
|
248
|
+
|
|
249
|
+
# Reopen a soft-deleted project
|
|
250
|
+
mandor project reopen <project-id>
|
|
229
251
|
```
|
|
230
252
|
|
|
231
253
|
### Feature Commands
|
|
232
254
|
|
|
233
255
|
```bash
|
|
234
256
|
# Create a feature
|
|
235
|
-
mandor feature create
|
|
257
|
+
mandor feature create <name> --project <id> --goal <goal> [--scope <scope>] [--priority <priority>] [--depends <ids>]
|
|
236
258
|
|
|
237
259
|
# List features
|
|
238
|
-
mandor feature list --project <id> [--
|
|
260
|
+
mandor feature list --project <id> [--json] [--include-deleted]
|
|
239
261
|
|
|
240
262
|
# Show feature details
|
|
241
|
-
mandor feature detail <feature-id> --project <id>
|
|
263
|
+
mandor feature detail <feature-id> --project <id>
|
|
242
264
|
|
|
243
265
|
# Update feature
|
|
244
|
-
mandor feature update <id> --project <id> [--status <
|
|
266
|
+
mandor feature update <feature-id> --project <id> [--name <text>] [--goal <goal>] [--scope <scope>] [--priority <priority>] [--status <status>] [--depends <ids>] [--cancel --reason <text>] [--reopen] [--dry-run]
|
|
245
267
|
|
|
246
|
-
#
|
|
247
|
-
mandor feature
|
|
268
|
+
# List features by status filter
|
|
269
|
+
mandor feature list --project <id> [--status <status>]
|
|
248
270
|
```
|
|
249
271
|
|
|
250
272
|
### Task Commands
|
|
251
273
|
|
|
252
274
|
```bash
|
|
253
|
-
# Create a task
|
|
254
|
-
mandor task create <
|
|
255
|
-
--
|
|
256
|
-
--
|
|
257
|
-
--
|
|
258
|
-
--derivable-files "file1.go|file2.go" \
|
|
259
|
-
--library-needs "lib1|lib2" \
|
|
260
|
-
[--priority <P0-P5>] \
|
|
261
|
-
[--depends-on <task-id>]
|
|
262
|
-
|
|
263
|
-
# List tasks in a feature (positional argument: feature_id)
|
|
264
|
-
mandor task list <feature_id> [--status <value>] [--priority <value>] [--json]
|
|
275
|
+
# Create a task
|
|
276
|
+
mandor task create <name> --feature <id> --goal <goal> \
|
|
277
|
+
--implementation-steps <steps> --test-cases <cases> \
|
|
278
|
+
--derivable-files <files> --library-needs <libs> \
|
|
279
|
+
[--priority <priority>] [--depends-on <ids>] [-y]
|
|
265
280
|
|
|
266
|
-
#
|
|
267
|
-
mandor task
|
|
281
|
+
# List tasks in a feature
|
|
282
|
+
mandor task list --feature <id> [--status <status>] [--priority <priority>] [--json] [--include-deleted] [--sort <field>] [--order <asc|desc>]
|
|
268
283
|
|
|
269
|
-
# Show
|
|
270
|
-
mandor task
|
|
284
|
+
# Show ready tasks
|
|
285
|
+
mandor task ready --feature <id> [--priority <priority>] [--json]
|
|
271
286
|
|
|
272
|
-
# Show
|
|
273
|
-
mandor task
|
|
287
|
+
# Show blocked tasks
|
|
288
|
+
mandor task blocked --feature <id> [--priority <priority>] [--json]
|
|
274
289
|
|
|
275
290
|
# Show task details
|
|
276
|
-
mandor task detail <task-id>
|
|
291
|
+
mandor task detail <task-id>
|
|
277
292
|
|
|
278
|
-
# Update task
|
|
279
|
-
mandor task update <id> --
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
# Mark task complete (auto-unblocks dependents)
|
|
285
|
-
mandor task update <id> --status done
|
|
286
|
-
|
|
287
|
-
# Block task manually (external dependency)
|
|
288
|
-
mandor task update <id> --status blocked --reason "Waiting on API response"
|
|
289
|
-
|
|
290
|
-
# Cancel task
|
|
291
|
-
mandor task update <id> --cancel --reason "Superseded by feature X"
|
|
292
|
-
|
|
293
|
-
# Reopen cancelled task
|
|
294
|
-
mandor task update <id> --reopen
|
|
293
|
+
# Update task
|
|
294
|
+
mandor task update <task-id> [--name <text>] [--goal <goal>] [--priority <priority>] \
|
|
295
|
+
[--implementation-steps <steps>] [--test-cases <cases>] [--derivable-files <files>] \
|
|
296
|
+
[--library-needs <libs>] [--status <status>] [--depends <ids>] [--depends-add <ids>] \
|
|
297
|
+
[--depends-remove <ids>] [--cancel --reason <text>] [--reopen] [--dry-run] [--force]
|
|
295
298
|
```
|
|
296
299
|
|
|
297
300
|
### Issue Commands
|
|
298
301
|
|
|
299
302
|
```bash
|
|
300
303
|
# Create an issue
|
|
301
|
-
mandor issue create <
|
|
302
|
-
--
|
|
303
|
-
--
|
|
304
|
-
--
|
|
305
|
-
--affected-tests "test1|test2" \
|
|
306
|
-
--implementation-steps "step1|step2" \
|
|
307
|
-
[--priority <P0-P5>] \
|
|
308
|
-
[--depends-on <issue-id>]
|
|
309
|
-
|
|
310
|
-
# List issues in a project
|
|
311
|
-
mandor issue list <project_id> [--status <value>] [--type <value>] [--json]
|
|
304
|
+
mandor issue create <name> --project <id> --type <type> --goal <goal> \
|
|
305
|
+
--affected-files <files> --affected-tests <tests> \
|
|
306
|
+
--implementation-steps <steps> \
|
|
307
|
+
[--priority <priority>] [--depends-on <ids>] [--library-needs <libs>] [-y]
|
|
312
308
|
|
|
313
|
-
#
|
|
314
|
-
mandor issue
|
|
309
|
+
# List issues in project
|
|
310
|
+
mandor issue list [--project <id>] [--type <type>] [--status <status>] [--priority <priority>] [--json] [--sort <field>] [--order <asc|desc>] [--verbose]
|
|
315
311
|
|
|
316
|
-
# Show
|
|
317
|
-
mandor issue
|
|
312
|
+
# Show ready issues
|
|
313
|
+
mandor issue ready [--project <id>] [--type <type>] [--priority <priority>] [--json]
|
|
318
314
|
|
|
319
|
-
# Show
|
|
320
|
-
mandor issue
|
|
315
|
+
# Show blocked issues
|
|
316
|
+
mandor issue blocked [--project <id>] [--type <type>] [--priority <priority>] [--json]
|
|
321
317
|
|
|
322
318
|
# Show issue details
|
|
323
|
-
mandor issue detail <issue-id> [--
|
|
324
|
-
|
|
325
|
-
# Update issue status
|
|
326
|
-
mandor issue update <id> --status <value>
|
|
319
|
+
mandor issue detail <issue-id> [--project <id>]
|
|
327
320
|
|
|
328
|
-
#
|
|
329
|
-
mandor issue update <id> --
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
# Mark issue as won't fix
|
|
335
|
-
mandor issue update <id> --wontfix --reason "Working as intended"
|
|
336
|
-
|
|
337
|
-
# Reopen a resolved/wontfix issue
|
|
338
|
-
mandor issue update <id> --reopen
|
|
339
|
-
|
|
340
|
-
# Block issue manually
|
|
341
|
-
mandor issue update <id> --status blocked --reason "Waiting on infrastructure"
|
|
342
|
-
|
|
343
|
-
# Cancel issue (duplicate/no longer relevant)
|
|
344
|
-
mandor issue update <id> --cancel --reason "Duplicate of issue #123"
|
|
321
|
+
# Update issue
|
|
322
|
+
mandor issue update <issue-id> [--project <id>] [--name <text>] [--goal <goal>] [--type <type>] [--priority <priority>] \
|
|
323
|
+
[--status <status>] [--reason <text>] [--depends-on <ids>] [--depends-add <ids>] [--depends-remove <ids>] \
|
|
324
|
+
[--affected-files <files>] [--affected-tests <tests>] [--implementation-steps <steps>] [--library-needs <libs>] \
|
|
325
|
+
[--start] [--resolve] [--wontfix] [--reopen] [--cancel] [--force] [--dry-run]
|
|
345
326
|
```
|
|
346
327
|
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
## Configuration
|
|
350
|
-
|
|
351
|
-
### Available Config Keys
|
|
328
|
+
### AI Commands
|
|
352
329
|
|
|
353
330
|
```bash
|
|
354
|
-
#
|
|
355
|
-
mandor
|
|
356
|
-
|
|
357
|
-
# Strict mode for dependency rules
|
|
358
|
-
mandor config set strict_mode true
|
|
331
|
+
# Generate AGENTS.md for multi-agent coordination
|
|
332
|
+
mandor ai agents
|
|
359
333
|
|
|
360
|
-
#
|
|
361
|
-
mandor
|
|
362
|
-
mandor config get strict_mode
|
|
363
|
-
|
|
364
|
-
# Reset to defaults
|
|
365
|
-
mandor config reset default_priority
|
|
334
|
+
# Generate CLAUDE.md for the project
|
|
335
|
+
mandor ai claude
|
|
366
336
|
```
|
|
367
337
|
|
|
368
|
-
### Priority Values
|
|
369
|
-
|
|
370
|
-
| Priority | Use Case |
|
|
371
|
-
|----------|----------|
|
|
372
|
-
| P0 | Critical / Security |
|
|
373
|
-
| P1 | High / Blocker |
|
|
374
|
-
| P2 | Medium-High |
|
|
375
|
-
| P3 | Medium (default) |
|
|
376
|
-
| P4 | Medium-Low |
|
|
377
|
-
| P5 | Low / Nice to have |
|
|
378
|
-
|
|
379
|
-
### Scope Values
|
|
380
|
-
|
|
381
|
-
Valid scope values for features: `frontend`, `backend`, `fullstack`, `cli`, `desktop`, `android`, `flutter`, `react-native`, `ios`, `swift`
|
|
382
|
-
|
|
383
|
-
### Issue Types
|
|
384
|
-
|
|
385
|
-
Valid issue types: `bug`, `improvement`, `debt`, `security`, `performance`
|
|
386
|
-
|
|
387
338
|
---
|
|
388
339
|
|
|
389
|
-
##
|
|
390
|
-
|
|
391
|
-
### Creating Dependencies
|
|
392
|
-
|
|
393
|
-
```bash
|
|
394
|
-
# Task depends on another task
|
|
395
|
-
mandor task create "Task B" --feature f1 \
|
|
396
|
-
--depends-on task-a-id
|
|
397
|
-
|
|
398
|
-
# Issue depends on another issue
|
|
399
|
-
mandor issue create "Issue B" --project p1 \
|
|
400
|
-
--depends-on issue-a-id
|
|
401
|
-
|
|
402
|
-
# Feature depends on another feature
|
|
403
|
-
mandor feature create "Feature B" --project p1 \
|
|
404
|
-
--depends-on feature-a-id
|
|
405
|
-
```
|
|
406
|
-
|
|
407
|
-
### Managing Dependencies
|
|
408
|
-
|
|
409
|
-
```bash
|
|
410
|
-
# Add dependencies
|
|
411
|
-
mandor task update <task-id> --depends-add "id1|id2"
|
|
412
|
-
|
|
413
|
-
# Replace all dependencies
|
|
414
|
-
mandor task update <task-id> --depends "id1|id2"
|
|
415
|
-
|
|
416
|
-
# Remove dependencies
|
|
417
|
-
mandor task update <task-id> --depends-remove "id1"
|
|
418
|
-
```
|
|
419
|
-
|
|
420
|
-
### Dependency Behaviors
|
|
421
|
-
|
|
422
|
-
- **Auto-blocking**: Entities start `blocked` if dependencies aren't `done`
|
|
423
|
-
- **Auto-unblocking**: When a dependency becomes `done`, dependents automatically transition to `ready`
|
|
424
|
-
- **Cross-project**: Dependencies can span projects if enabled in project config
|
|
340
|
+
## Common Workflows
|
|
425
341
|
|
|
426
|
-
###
|
|
342
|
+
### Replace This (Markdown Plan Files)
|
|
427
343
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
# Restrict to same-project only (default)
|
|
435
|
-
mandor project create p2 --task-dep same_project_only
|
|
436
|
-
```
|
|
437
|
-
|
|
438
|
-
### Circular Dependency Prevention
|
|
439
|
-
|
|
440
|
-
Mandor automatically prevents:
|
|
441
|
-
- Self-dependencies (A → A)
|
|
442
|
-
- Two-node cycles (A → B → A)
|
|
443
|
-
- N-node cycles (A → B → C → A)
|
|
444
|
-
- Cross-project cycles
|
|
445
|
-
|
|
446
|
-
---
|
|
447
|
-
|
|
448
|
-
## Status Management
|
|
449
|
-
|
|
450
|
-
### Checking Status
|
|
451
|
-
|
|
452
|
-
```bash
|
|
453
|
-
# List blocked tasks
|
|
454
|
-
mandor task list --feature <id> --status blocked
|
|
455
|
-
|
|
456
|
-
# List ready tasks
|
|
457
|
-
mandor task list --feature <id> --status ready
|
|
458
|
-
|
|
459
|
-
# List all tasks
|
|
460
|
-
mandor task list --feature <id>
|
|
461
|
-
```
|
|
462
|
-
|
|
463
|
-
### Transitioning Status
|
|
464
|
-
|
|
465
|
-
```bash
|
|
466
|
-
# Task workflow
|
|
467
|
-
mandor task update <id> --status in_progress
|
|
468
|
-
mandor task update <id> --status done
|
|
469
|
-
|
|
470
|
-
# Feature workflow
|
|
471
|
-
mandor feature update <id> --project <pid> --status active
|
|
472
|
-
mandor feature update <id> --project <pid> --status done
|
|
473
|
-
|
|
474
|
-
# Issue workflow
|
|
475
|
-
mandor issue update <id> --start
|
|
476
|
-
mandor issue update <id> --resolve
|
|
477
|
-
# or
|
|
478
|
-
mandor issue update <id> --wontfix --reason "Reason"
|
|
479
|
-
```
|
|
480
|
-
|
|
481
|
-
### Cancel and Reopen
|
|
482
|
-
|
|
483
|
-
```bash
|
|
484
|
-
# Cancel (soft delete)
|
|
485
|
-
mandor task update <id> --cancel --reason "Why cancelled"
|
|
486
|
-
mandor feature update <id> --project <pid> --cancel --reason "Why cancelled"
|
|
487
|
-
mandor issue update <id> --wontfix --reason "Why wontfix"
|
|
488
|
-
|
|
489
|
-
# Reopen
|
|
490
|
-
mandor task update <id> --reopen
|
|
491
|
-
mandor feature update <id> --project <pid> --reopen
|
|
492
|
-
mandor issue update <id> --reopen
|
|
493
|
-
```
|
|
494
|
-
|
|
495
|
-
**Note**: Cancelled entities can be viewed with `--include-deleted` flag.
|
|
496
|
-
|
|
497
|
-
---
|
|
498
|
-
|
|
499
|
-
## Filtering and Querying
|
|
500
|
-
|
|
501
|
-
### Filter by Status
|
|
344
|
+
```markdown
|
|
345
|
+
# PLAN.md
|
|
346
|
+
## Phase 1: Authentication
|
|
347
|
+
- [ ] JWT parser (depends on cryptography)
|
|
348
|
+
- [ ] Login endpoint (depends on JWT parser)
|
|
349
|
+
- [ ] Refresh token (depends on JWT parser)
|
|
502
350
|
|
|
503
|
-
|
|
504
|
-
mandor task list --feature <id> --status ready
|
|
505
|
-
mandor task list --feature <id> --status blocked
|
|
506
|
-
mandor task list --feature <id> --status done
|
|
351
|
+
Status: Last updated 3 days ago (probably stale!)
|
|
507
352
|
```
|
|
508
353
|
|
|
509
|
-
###
|
|
354
|
+
### With This (Mandor)
|
|
510
355
|
|
|
511
356
|
```bash
|
|
512
|
-
|
|
513
|
-
mandor
|
|
514
|
-
|
|
515
|
-
|
|
516
|
-
### Filter by Scope (Features)
|
|
357
|
+
# Create structured plan
|
|
358
|
+
mandor feature create "Authentication" --project api \
|
|
359
|
+
--goal "Implement JWT and login endpoints" \
|
|
360
|
+
--scope backend
|
|
517
361
|
|
|
518
|
-
|
|
519
|
-
mandor
|
|
520
|
-
|
|
521
|
-
|
|
362
|
+
# Create tasks with explicit dependencies
|
|
363
|
+
mandor task create "JWT Parser" --feature auth-feature-id \
|
|
364
|
+
--goal "Validate JWT tokens..." \
|
|
365
|
+
--implementation-steps "Step 1|Step 2" \
|
|
366
|
+
--test-cases "Test invalid tokens|Test expired" \
|
|
367
|
+
--derivable-files "jwt.go|jwt_test.go" \
|
|
368
|
+
--library-needs "jsonwebtoken" \
|
|
369
|
+
--priority P1
|
|
522
370
|
|
|
523
|
-
|
|
371
|
+
mandor task create "Login Endpoint" --feature auth-feature-id \
|
|
372
|
+
--goal "Accept credentials and return JWT..." \
|
|
373
|
+
--depends-on jwt-parser-task-id \
|
|
374
|
+
--priority P1
|
|
524
375
|
|
|
525
|
-
|
|
526
|
-
mandor
|
|
527
|
-
mandor
|
|
376
|
+
# Real-time progress queries
|
|
377
|
+
mandor task ready --feature auth-feature-id # See what's available now
|
|
378
|
+
mandor task blocked --feature auth-feature-id # See what's waiting
|
|
528
379
|
```
|
|
529
380
|
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
### Event Types
|
|
539
|
-
|
|
540
|
-
| Event | Description |
|
|
541
|
-
|-------|-------------|
|
|
542
|
-
| entity_created | New entity created |
|
|
543
|
-
| status_changed | Status transitioned |
|
|
544
|
-
| dependency_added | Dependency added |
|
|
545
|
-
| dependency_removed | Dependency removed |
|
|
546
|
-
| dependent_unblocked | Dependent entity became ready |
|
|
547
|
-
| entity_reopened | Cancelled entity reopened |
|
|
548
|
-
| entity_cancelled | Entity cancelled |
|
|
381
|
+
**Benefits:**
|
|
382
|
+
- No file sync required
|
|
383
|
+
- Dependencies auto-validated
|
|
384
|
+
- Blocking tasks auto-detected
|
|
385
|
+
- Reproducible state (`events.jsonl`)
|
|
386
|
+
- Queryable via CLI or JSON
|
|
387
|
+
- Works in CI/CD pipelines
|
|
549
388
|
|
|
550
|
-
###
|
|
389
|
+
### Dependency Management
|
|
551
390
|
|
|
552
391
|
```bash
|
|
553
|
-
# View
|
|
554
|
-
mandor
|
|
555
|
-
|
|
556
|
-
# Events are also shown in default detail view
|
|
557
|
-
mandor task detail <id>
|
|
558
|
-
```
|
|
559
|
-
|
|
560
|
-
---
|
|
392
|
+
# View all projects and their status
|
|
393
|
+
mandor status
|
|
561
394
|
|
|
562
|
-
|
|
395
|
+
# Check a specific project
|
|
396
|
+
mandor status --project api
|
|
563
397
|
|
|
564
|
-
|
|
398
|
+
# View feature dependencies
|
|
399
|
+
mandor feature list --project api
|
|
565
400
|
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
|
|
570
|
-
|
|
571
|
-
|
|
401
|
+
# Create tasks with dependencies
|
|
402
|
+
mandor task create "Step 2" --feature feature-id \
|
|
403
|
+
--goal "..." \
|
|
404
|
+
--implementation-steps "..." \
|
|
405
|
+
--test-cases "..." \
|
|
406
|
+
--derivable-files "..." \
|
|
407
|
+
--library-needs "..." \
|
|
408
|
+
--depends-on task-id-1|task-id-2
|
|
572
409
|
|
|
573
|
-
|
|
410
|
+
# See what's blocking progress
|
|
411
|
+
mandor task blocked --feature feature-id
|
|
574
412
|
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
cat .mandor/events.jsonl
|
|
413
|
+
# Mark as done (auto-unblocks dependents)
|
|
414
|
+
mandor task update task-id --status done
|
|
578
415
|
|
|
579
|
-
#
|
|
580
|
-
|
|
581
|
-
|
|
582
|
-
# Count events by type
|
|
583
|
-
grep '"type":"status_changed"' .mandor/events.jsonl | wc -l
|
|
416
|
+
# Dependents auto-transition to ready
|
|
417
|
+
mandor task ready --feature feature-id
|
|
584
418
|
```
|
|
585
419
|
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
## Examples
|
|
589
|
-
|
|
590
|
-
### Complete Feature Workflow
|
|
420
|
+
### Issue Tracking
|
|
591
421
|
|
|
592
422
|
```bash
|
|
593
|
-
#
|
|
594
|
-
|
|
595
|
-
|
|
596
|
-
|
|
597
|
-
|
|
598
|
-
|
|
599
|
-
|
|
600
|
-
--
|
|
601
|
-
--
|
|
602
|
-
|
|
603
|
-
# Create first task (no dependencies)
|
|
604
|
-
mandor task create api-feature-xxx "JWT Parser" \
|
|
605
|
-
--goal "Parse and validate JWT tokens with signature verification and expiry checks" \
|
|
606
|
-
--implementation-steps "Import crypto library|Implement token parsing|Add signature validation|Handle expiry" \
|
|
607
|
-
--test-cases "Valid token accepted|Invalid signature rejected|Expired token rejected" \
|
|
608
|
-
--derivable-files "jwt_parser.go|jwt_parser_test.go" \
|
|
609
|
-
--library-needs "golang-jwt" \
|
|
610
|
-
--priority P1
|
|
611
|
-
|
|
612
|
-
# Create dependent task
|
|
613
|
-
mandor task create api-feature-xxx "JWT Validator" \
|
|
614
|
-
--goal "Create middleware to validate JWT tokens in incoming requests" \
|
|
615
|
-
--implementation-steps "Create middleware|Validate token|Check expiry|Return errors" \
|
|
616
|
-
--test-cases "Valid requests pass|Invalid requests rejected|Error responses correct" \
|
|
617
|
-
--derivable-files "auth_middleware.go|auth_middleware_test.go" \
|
|
618
|
-
--library-needs "none" \
|
|
619
|
-
--depends-on <jwt-parser-id> \
|
|
620
|
-
--priority P1
|
|
621
|
-
|
|
622
|
-
# Create another dependent task
|
|
623
|
-
mandor task create api-feature-xxx "Login Endpoint" \
|
|
624
|
-
--goal "Accept credentials and return JWT token pair with refresh token" \
|
|
625
|
-
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Store refresh token|Return tokens" \
|
|
626
|
-
--test-cases "Valid creds return tokens|Invalid creds rejected|Tokens formatted correctly" \
|
|
627
|
-
--derivable-files "login_handler.go|login_handler_test.go" \
|
|
628
|
-
--library-needs "none" \
|
|
629
|
-
--depends-on <jwt-parser-id> \
|
|
630
|
-
--priority P1
|
|
423
|
+
# Create a bug issue
|
|
424
|
+
mandor issue create "Fix memory leak in auth" \
|
|
425
|
+
--project api \
|
|
426
|
+
--type bug \
|
|
427
|
+
--priority P0 \
|
|
428
|
+
--goal "Goroutine leak in token refresh handler..." \
|
|
429
|
+
--affected-files "src/handlers/auth.go|src/middleware/auth.go" \
|
|
430
|
+
--affected-tests "src/handlers/auth_test.go" \
|
|
431
|
+
--implementation-steps "Identify leak|Add cleanup|Test|Verify"
|
|
631
432
|
|
|
632
|
-
#
|
|
633
|
-
mandor
|
|
634
|
-
mandor task ready api-feature-xxx # Only JWT Parser is ready
|
|
635
|
-
mandor task blocked api-feature-xxx # Validator and Login waiting on Parser
|
|
636
|
-
mandor task summary api-feature-xxx # Grouped summary
|
|
433
|
+
# List open issues
|
|
434
|
+
mandor issue list --project api --status open
|
|
637
435
|
|
|
638
|
-
#
|
|
639
|
-
mandor
|
|
640
|
-
mandor task update <jwt-parser-id> --status done
|
|
436
|
+
# Filter by type and priority
|
|
437
|
+
mandor issue list --project api --type bug --priority P0
|
|
641
438
|
|
|
642
|
-
#
|
|
643
|
-
mandor
|
|
439
|
+
# See ready issues
|
|
440
|
+
mandor issue ready --project api --type bug
|
|
644
441
|
|
|
645
|
-
#
|
|
646
|
-
mandor
|
|
647
|
-
mandor task update <jwt-validator-id> --status done
|
|
442
|
+
# Start working
|
|
443
|
+
mandor issue update issue-id --start
|
|
648
444
|
|
|
649
|
-
|
|
650
|
-
mandor
|
|
445
|
+
# Mark as resolved
|
|
446
|
+
mandor issue update issue-id --resolve
|
|
651
447
|
|
|
652
|
-
# Mark
|
|
653
|
-
mandor
|
|
654
|
-
mandor feature update api-feature-xxx --project api --status done
|
|
448
|
+
# Mark as won't fix with reason
|
|
449
|
+
mandor issue update issue-id --wontfix --reason "Working as intended"
|
|
655
450
|
```
|
|
656
451
|
|
|
657
|
-
###
|
|
452
|
+
### Configuration
|
|
658
453
|
|
|
659
454
|
```bash
|
|
660
|
-
#
|
|
661
|
-
mandor
|
|
662
|
-
--goal "Shared database and utility libraries"
|
|
663
|
-
mandor project create api --name "API Service" \
|
|
664
|
-
--goal "REST API service" --task-dep cross_project_allowed
|
|
665
|
-
|
|
666
|
-
# Create shared library feature and task
|
|
667
|
-
mandor feature create "Database Layer" --project core \
|
|
668
|
-
--goal "Connection pool and query builder for database access" \
|
|
669
|
-
--scope backend
|
|
670
|
-
|
|
671
|
-
mandor task create core-feature-xxx "Database Connection Pool" \
|
|
672
|
-
--goal "Implement connection pool with health checks and auto-reconnect" \
|
|
673
|
-
--implementation-steps "Create pool|Setup health check|Auto-reconnect|Connection limits" \
|
|
674
|
-
--test-cases "Pool creates connections|Health check works|Reconnect on failure" \
|
|
675
|
-
--derivable-files "db_pool.go|db_pool_test.go" \
|
|
676
|
-
--library-needs "pgx|pgxpool" \
|
|
677
|
-
--priority P0
|
|
678
|
-
|
|
679
|
-
# Create API feature depending on core library task
|
|
680
|
-
mandor feature create "User Endpoints" --project api \
|
|
681
|
-
--goal "User CRUD endpoints backed by database" \
|
|
682
|
-
--scope backend
|
|
683
|
-
|
|
684
|
-
mandor task create api-feature-xxx "User API Handler" \
|
|
685
|
-
--goal "Create REST endpoints for user CRUD operations" \
|
|
686
|
-
--implementation-steps "Setup handler|Implement GET|Implement POST|Implement DELETE" \
|
|
687
|
-
--test-cases "GET returns user|POST creates user|DELETE removes user" \
|
|
688
|
-
--derivable-files "user_handler.go|user_handler_test.go" \
|
|
689
|
-
--library-needs "gin|none" \
|
|
690
|
-
--depends-on <db-pool-task-id> \
|
|
691
|
-
--priority P0
|
|
692
|
-
|
|
693
|
-
# Check progress
|
|
694
|
-
mandor task list core-feature-xxx # DB Pool ready to start
|
|
695
|
-
mandor task blocked api-feature-xxx # User Handler blocked on DB Pool
|
|
696
|
-
|
|
697
|
-
# Complete core task, dependents auto-unblock
|
|
698
|
-
mandor task update <db-pool-task-id> --status in_progress
|
|
699
|
-
mandor task update <db-pool-task-id> --status done
|
|
700
|
-
|
|
701
|
-
# API task now ready
|
|
702
|
-
mandor task ready api-feature-xxx # User Handler now ready
|
|
703
|
-
```
|
|
704
|
-
|
|
705
|
-
### Issue Tracking with Dependencies
|
|
706
|
-
|
|
707
|
-
```bash
|
|
708
|
-
# Create blocker issues
|
|
709
|
-
mandor issue create api "Data Validation Bug" \
|
|
710
|
-
--type bug \
|
|
711
|
-
--goal "Fix data validation allowing invalid emails to pass through" \
|
|
712
|
-
--affected-files "validate.go|email_validator.go" \
|
|
713
|
-
--affected-tests "validate_test.go|email_validator_test.go" \
|
|
714
|
-
--implementation-steps "Add email regex|Add domain check|Add test cases" \
|
|
715
|
-
--priority P0
|
|
716
|
-
|
|
717
|
-
mandor issue create api "Cache Consistency Issue" \
|
|
718
|
-
--type bug \
|
|
719
|
-
--goal "Fix race condition in cache invalidation causing stale data" \
|
|
720
|
-
--affected-files "cache.go|invalidation.go" \
|
|
721
|
-
--affected-tests "cache_test.go" \
|
|
722
|
-
--implementation-steps "Add mutex|Refactor invalidation|Add concurrency tests" \
|
|
723
|
-
--priority P0
|
|
724
|
-
|
|
725
|
-
# Create dependent issue (depends on blockers)
|
|
726
|
-
mandor issue create api "High Memory Usage in Production" \
|
|
727
|
-
--type bug \
|
|
728
|
-
--goal "Fix memory leak causing OOM errors in production due to cache and validation issues" \
|
|
729
|
-
--affected-files "main.go|memory.go" \
|
|
730
|
-
--affected-tests "memory_test.go" \
|
|
731
|
-
--implementation-steps "Profile memory|Identify leaks|Fix validation and cache" \
|
|
732
|
-
--depends-on <data-validation-bug-id>|<cache-issue-id> \
|
|
733
|
-
--priority P0
|
|
734
|
-
|
|
735
|
-
# Check status
|
|
736
|
-
mandor issue ready api # Both blockers ready
|
|
737
|
-
mandor issue blocked api # Memory issue blocked
|
|
738
|
-
|
|
739
|
-
# Resolve blocking issues (order doesn't matter)
|
|
740
|
-
mandor issue update <data-validation-bug-id> --start
|
|
741
|
-
mandor issue update <data-validation-bug-id> --resolve
|
|
742
|
-
|
|
743
|
-
mandor issue update <cache-issue-id> --start
|
|
744
|
-
mandor issue update <cache-issue-id> --resolve
|
|
745
|
-
|
|
746
|
-
# Check progress
|
|
747
|
-
mandor issue ready api # Memory issue now ready
|
|
748
|
-
mandor issue summary api # See all status groups
|
|
749
|
-
|
|
750
|
-
# Fix dependent issue
|
|
751
|
-
mandor issue update <memory-issue-id> --start
|
|
752
|
-
mandor issue update <memory-issue-id> --resolve
|
|
753
|
-
```
|
|
455
|
+
# Set default priority
|
|
456
|
+
mandor config set default_priority P2
|
|
754
457
|
|
|
755
|
-
|
|
458
|
+
# Enable strict mode
|
|
459
|
+
mandor config set strict_mode true
|
|
756
460
|
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
mandor feature create "OAuth2 Investigation" --project api \
|
|
760
|
-
--goal "Research OAuth2 integration options" \
|
|
761
|
-
--scope backend
|
|
461
|
+
# View all configuration
|
|
462
|
+
mandor config list
|
|
762
463
|
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
--implementation-steps "Create comparison spreadsheet|Evaluate pros/cons|Estimate effort" \
|
|
766
|
-
--test-cases "Evaluation complete|Team consensus reached" \
|
|
767
|
-
--derivable-files "oauth2_comparison.md" \
|
|
768
|
-
--library-needs "none" \
|
|
769
|
-
--priority P2
|
|
464
|
+
# Get specific value
|
|
465
|
+
mandor config get default_priority
|
|
770
466
|
|
|
771
|
-
|
|
772
|
-
|
|
773
|
-
--implementation-steps "Setup oauth lib|Create login flow|Test flow" \
|
|
774
|
-
--test-cases "Login works|Token refresh works" \
|
|
775
|
-
--derivable-files "poc_oauth.go|poc_oauth_test.go" \
|
|
776
|
-
--library-needs "none" \
|
|
777
|
-
--priority P2
|
|
778
|
-
|
|
779
|
-
# List tasks
|
|
780
|
-
mandor task list api-feature-xxx # Show feature tasks
|
|
781
|
-
|
|
782
|
-
# Change requirements, decide not to pursue OAuth2
|
|
783
|
-
mandor feature update api-feature-xxx --project api \
|
|
784
|
-
--cancel --reason "Sticking with JWT, OAuth2 adds too much complexity"
|
|
785
|
-
|
|
786
|
-
# Try to create new task (fails)
|
|
787
|
-
mandor task create api-feature-xxx "Integration Tests" \
|
|
788
|
-
--goal "Add integration tests" \
|
|
789
|
-
--implementation-steps "none" \
|
|
790
|
-
--test-cases "none" \
|
|
791
|
-
--derivable-files "none" \
|
|
792
|
-
--library-needs "none"
|
|
793
|
-
# Error: "Cannot create task for cancelled feature"
|
|
794
|
-
|
|
795
|
-
# Change mind - reopen the feature to continue research
|
|
796
|
-
mandor feature update api-feature-xxx --project api --reopen
|
|
797
|
-
|
|
798
|
-
# Can now create tasks again
|
|
799
|
-
mandor task list api-feature-xxx # Previous tasks still exist
|
|
800
|
-
mandor task create api-feature-xxx "Hybrid Approach" \
|
|
801
|
-
--goal "Combine JWT with optional OAuth2 for third-party apps" \
|
|
802
|
-
--implementation-steps "Design hybrid flow|Implement dual auth|Test both flows" \
|
|
803
|
-
--test-cases "JWT still works|OAuth2 works|Both interoperable" \
|
|
804
|
-
--derivable-files "hybrid_auth.go" \
|
|
805
|
-
--library-needs "oauth2lib" \
|
|
806
|
-
--priority P3
|
|
467
|
+
# Reset to default
|
|
468
|
+
mandor config reset default_priority
|
|
807
469
|
```
|
|
808
470
|
|
|
809
471
|
---
|
|
810
472
|
|
|
811
473
|
## Best Practices
|
|
812
474
|
|
|
813
|
-
### Mandor vs. Markdown Plan Files
|
|
814
|
-
|
|
815
|
-
| Problem | Markdown Plans | Mandor |
|
|
816
|
-
|---------|---|---|
|
|
817
|
-
| Single source of truth | ❌ Scattered across multiple files | ✓ Centralized `events.jsonl` |
|
|
818
|
-
| Dependency tracking | ❌ Manual, often wrong | ✓ Automatic status transitions |
|
|
819
|
-
| Progress visibility | ❌ Requires manual updates | ✓ Real-time status queries |
|
|
820
|
-
| Audit trail | ❌ Git history only | ✓ Immutable event log |
|
|
821
|
-
| Blocking detection | ❌ Must review files | ✓ `mandor task blocked <id>` |
|
|
822
|
-
| Schema validation | ❌ Free-form text | ✓ Enforced structure |
|
|
823
|
-
| Automation | ❌ Parse text with regex | ✓ JSON queryable for scripts |
|
|
824
|
-
|
|
825
475
|
### 1. Use Meaningful IDs
|
|
826
476
|
|
|
827
477
|
Project and feature IDs should be:
|
|
@@ -839,17 +489,27 @@ mandor project create p1
|
|
|
839
489
|
mandor feature create f123
|
|
840
490
|
```
|
|
841
491
|
|
|
842
|
-
### 2.
|
|
492
|
+
### 2. Write Clear Goals
|
|
843
493
|
|
|
844
|
-
|
|
494
|
+
Goals should include:
|
|
495
|
+
- What is being built/fixed
|
|
496
|
+
- Why it matters
|
|
497
|
+
- Technical requirements
|
|
498
|
+
- Acceptance criteria
|
|
845
499
|
|
|
846
500
|
```bash
|
|
847
|
-
|
|
501
|
+
# Good
|
|
502
|
+
--goal "Implement JWT-based authentication with login and refresh flows for secure API access"
|
|
503
|
+
|
|
504
|
+
# Avoid
|
|
505
|
+
--goal "Add authentication"
|
|
848
506
|
```
|
|
849
507
|
|
|
850
508
|
### 3. Use Scopes for Features
|
|
851
509
|
|
|
852
|
-
|
|
510
|
+
Organize by scope:
|
|
511
|
+
- `frontend`, `backend`, `fullstack`
|
|
512
|
+
- `cli`, `desktop`, `android`, `flutter`, `react-native`, `ios`, `swift`
|
|
853
513
|
|
|
854
514
|
```bash
|
|
855
515
|
mandor feature create "Login UI" --project api --scope frontend
|
|
@@ -858,83 +518,91 @@ mandor feature create "Login API" --project api --scope backend
|
|
|
858
518
|
|
|
859
519
|
### 4. Keep Dependencies Shallow
|
|
860
520
|
|
|
861
|
-
Deep dependency chains (>5 levels)
|
|
521
|
+
Deep dependency chains (>5 levels) are hard to manage. Consider breaking into smaller features.
|
|
522
|
+
|
|
523
|
+
```bash
|
|
524
|
+
# Good: tasks depend on other tasks in same feature
|
|
525
|
+
mandor task create "Task B" --feature feature-id --depends-on task-a-id
|
|
862
526
|
|
|
863
|
-
|
|
527
|
+
# Consider splitting if: task chains exceed 5 levels
|
|
528
|
+
```
|
|
864
529
|
|
|
865
|
-
|
|
866
|
-
|
|
530
|
+
### 5. Use Issues for Bugs, Tasks for Features
|
|
531
|
+
|
|
532
|
+
- **Tasks**: Feature work, implementation, refactoring
|
|
533
|
+
- **Issues**: Bugs, improvements, technical debt, security, performance
|
|
534
|
+
|
|
535
|
+
```bash
|
|
536
|
+
# Feature work
|
|
537
|
+
mandor task create "Add OAuth2" --feature api-auth
|
|
538
|
+
|
|
539
|
+
# Bug fix
|
|
540
|
+
mandor issue create "Fix auth timeout" --project api --type bug
|
|
541
|
+
```
|
|
867
542
|
|
|
868
543
|
### 6. Document Cancellation Reasons
|
|
869
544
|
|
|
870
545
|
Always provide clear reasons when cancelling:
|
|
871
546
|
|
|
872
547
|
```bash
|
|
873
|
-
mandor task update
|
|
548
|
+
mandor task update task-id --cancel --reason "Superseded by feature X"
|
|
549
|
+
mandor feature update feature-id --project api --cancel --reason "Sticking with JWT, OAuth2 adds too much complexity"
|
|
874
550
|
```
|
|
875
551
|
|
|
876
|
-
### 7.
|
|
552
|
+
### 7. Use Pipe-Separated Lists
|
|
553
|
+
|
|
554
|
+
For flags accepting multiple values, use pipe separators:
|
|
877
555
|
|
|
878
556
|
```bash
|
|
879
|
-
|
|
557
|
+
# Implementation steps
|
|
558
|
+
--implementation-steps "Step 1|Step 2|Step 3"
|
|
559
|
+
|
|
560
|
+
# Test cases
|
|
561
|
+
--test-cases "Case 1|Case 2|Case 3"
|
|
562
|
+
|
|
563
|
+
# Dependencies
|
|
564
|
+
--depends-on task-1|task-2|task-3
|
|
880
565
|
```
|
|
881
566
|
|
|
882
|
-
### 8. Use
|
|
567
|
+
### 8. Use --dry-run to Preview Changes
|
|
883
568
|
|
|
884
|
-
|
|
569
|
+
Before making significant updates, preview with `--dry-run`:
|
|
885
570
|
|
|
886
571
|
```bash
|
|
887
|
-
mandor
|
|
888
|
-
mandor
|
|
572
|
+
mandor task update task-id --status done --cancel --dry-run
|
|
573
|
+
mandor feature update feature-id --project api --cancel --reason "..." --dry-run
|
|
889
574
|
```
|
|
890
575
|
|
|
891
|
-
### 9.
|
|
576
|
+
### 9. Set Configuration Early
|
|
892
577
|
|
|
893
|
-
|
|
578
|
+
Configure workspace defaults at the start:
|
|
894
579
|
|
|
895
|
-
```
|
|
896
|
-
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
- [ ] Login endpoint (depends on JWT parser)
|
|
900
|
-
- ...
|
|
901
|
-
# Status: Last updated 3 days ago
|
|
580
|
+
```bash
|
|
581
|
+
mandor init "Project Name"
|
|
582
|
+
mandor config set default_priority P2
|
|
583
|
+
mandor config set strict_mode true
|
|
902
584
|
```
|
|
903
585
|
|
|
904
|
-
|
|
586
|
+
### 10. Review Status Regularly
|
|
905
587
|
|
|
906
588
|
```bash
|
|
907
|
-
#
|
|
908
|
-
mandor
|
|
909
|
-
--goal "Implement JWT and login endpoints" \
|
|
910
|
-
--scope backend
|
|
589
|
+
# Workspace overview
|
|
590
|
+
mandor status
|
|
911
591
|
|
|
912
|
-
#
|
|
913
|
-
mandor
|
|
914
|
-
-g "Validate JWT tokens..." \
|
|
915
|
-
--implementation-steps "Step 1|Step 2" \
|
|
916
|
-
--test-cases "Test invalid tokens|Test expired" \
|
|
917
|
-
--library-needs "jsonwebtoken" \
|
|
918
|
-
--priority P1
|
|
592
|
+
# Project summary
|
|
593
|
+
mandor status --project api
|
|
919
594
|
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
--depends-on jwt-parser-id \
|
|
923
|
-
--priority P1
|
|
595
|
+
# Feature priorities
|
|
596
|
+
mandor summary --project api
|
|
924
597
|
|
|
925
|
-
#
|
|
926
|
-
mandor task ready
|
|
927
|
-
mandor
|
|
928
|
-
mandor task summary auth-xxx # See grouped status
|
|
929
|
-
```
|
|
598
|
+
# See ready work
|
|
599
|
+
mandor task ready --feature feature-id
|
|
600
|
+
mandor issue ready --project api
|
|
930
601
|
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
- Reproducible state (`events.jsonl`)
|
|
936
|
-
- Queryable via CLI or JSON
|
|
937
|
-
- Works in CI/CD pipelines
|
|
602
|
+
# See blockers
|
|
603
|
+
mandor task blocked --feature feature-id
|
|
604
|
+
mandor issue blocked --project api
|
|
605
|
+
```
|
|
938
606
|
|
|
939
607
|
---
|
|
940
608
|
|
|
@@ -950,7 +618,7 @@ export PATH="$HOME/.local/bin:$PATH"
|
|
|
950
618
|
|
|
951
619
|
### "Project not found"
|
|
952
620
|
|
|
953
|
-
Check the project ID and ensure you're in the correct workspace
|
|
621
|
+
Check the project ID and ensure you're in the correct workspace:
|
|
954
622
|
|
|
955
623
|
```bash
|
|
956
624
|
mandor project list
|
|
@@ -962,6 +630,7 @@ Verify the entity ID exists:
|
|
|
962
630
|
|
|
963
631
|
```bash
|
|
964
632
|
mandor task list --feature <feature-id>
|
|
633
|
+
mandor issue list --project <project-id>
|
|
965
634
|
```
|
|
966
635
|
|
|
967
636
|
### "Cross-project dependency detected"
|
|
@@ -973,7 +642,7 @@ The project doesn't allow cross-project dependencies:
|
|
|
973
642
|
mandor project detail <project-id>
|
|
974
643
|
|
|
975
644
|
# Create new project with cross-project enabled
|
|
976
|
-
mandor project create <id> --task-dep cross_project_allowed
|
|
645
|
+
mandor project create <id> --name "..." --goal "..." --task-dep cross_project_allowed
|
|
977
646
|
```
|
|
978
647
|
|
|
979
648
|
### "Invalid status transition"
|
|
@@ -981,8 +650,9 @@ mandor project create <id> --task-dep cross_project_allowed
|
|
|
981
650
|
The transition isn't allowed by the state machine:
|
|
982
651
|
|
|
983
652
|
```bash
|
|
984
|
-
# Tasks: ready
|
|
985
|
-
# Features: draft
|
|
653
|
+
# Tasks: pending → ready → in_progress → done
|
|
654
|
+
# Features: draft → active → done
|
|
655
|
+
# Issues: open → ready → in_progress → resolved
|
|
986
656
|
```
|
|
987
657
|
|
|
988
658
|
### "Cannot create task for cancelled feature"
|
|
@@ -995,37 +665,37 @@ mandor feature update <id> --project <pid> --reopen
|
|
|
995
665
|
|
|
996
666
|
---
|
|
997
667
|
|
|
668
|
+
## Configuration Keys
|
|
669
|
+
|
|
670
|
+
| Key | Type | Default | Description |
|
|
671
|
+
|-----|------|---------|-------------|
|
|
672
|
+
| `default_priority` | string | P3 | Default priority for new entities (P0-P5) |
|
|
673
|
+
| `strict_mode` | boolean | false | Enable strict dependency validation |
|
|
674
|
+
|
|
675
|
+
---
|
|
676
|
+
|
|
998
677
|
## File Structure
|
|
999
678
|
|
|
1000
679
|
```
|
|
1001
|
-
mandor/
|
|
1002
|
-
├──
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
│ ├── workspace.json # Workspace config
|
|
1012
|
-
│ └── projects/ # Projects directory
|
|
1013
|
-
│ └── <project>/
|
|
1014
|
-
│ ├── project.json
|
|
1015
|
-
│ ├── features/
|
|
1016
|
-
│ ├── tasks/
|
|
1017
|
-
│ ├── issues/
|
|
1018
|
-
│ └── events.jsonl
|
|
1019
|
-
└── binaries/
|
|
1020
|
-
└── mandor # Built binary
|
|
680
|
+
.mandor/
|
|
681
|
+
├── workspace.json # Workspace metadata
|
|
682
|
+
├── config.json # Workspace configuration
|
|
683
|
+
└── projects/
|
|
684
|
+
└── <project-id>/
|
|
685
|
+
├── project.json # Project metadata
|
|
686
|
+
├── features.jsonl # Feature event log
|
|
687
|
+
├── tasks.jsonl # Task event log
|
|
688
|
+
├── issues.jsonl # Issue event log
|
|
689
|
+
└── events.jsonl # All events
|
|
1021
690
|
```
|
|
1022
691
|
|
|
1023
692
|
---
|
|
1024
693
|
|
|
1025
694
|
## Support
|
|
1026
695
|
|
|
1027
|
-
- Issues: https://github.com/
|
|
696
|
+
- Issues: https://github.com/sanxzy/mandor/issues
|
|
1028
697
|
- Documentation: `/docs` directory
|
|
698
|
+
- Repository: https://github.com/sanxzy/mandor
|
|
1029
699
|
|
|
1030
700
|
---
|
|
1031
701
|
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/mandor-cli
CHANGED
|
Binary file
|