@mandors/cli 0.3.7 → 0.3.10
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 +389 -119
- package/bin/mandor +0 -0
- 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-test +0 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,12 +1,17 @@
|
|
|
1
1
|
# Mandor - Event-Based Task Manager CLI for AI Agent Workflows
|
|
2
2
|
|
|
3
3
|
<p align="center">
|
|
4
|
-
<strong>
|
|
4
|
+
<strong>Stop writing markdown plans. Start shipping features with deterministic task tracking.</strong>
|
|
5
|
+
</p>
|
|
6
|
+
|
|
7
|
+
<p align="center">
|
|
8
|
+
<strong>Event-sourced | Dependency-aware | CLI-native | Built for AI agents</strong>
|
|
5
9
|
</p>
|
|
6
10
|
|
|
7
11
|
<p align="center">
|
|
8
12
|
<a href="#installation">Installation</a> •
|
|
9
13
|
<a href="#quick-start">Quick Start</a> •
|
|
14
|
+
<a href="#why-mandor">Why Mandor</a> •
|
|
10
15
|
<a href="#core-concepts">Core Concepts</a> •
|
|
11
16
|
<a href="#commands">Commands</a> •
|
|
12
17
|
<a href="#examples">Examples</a>
|
|
@@ -14,14 +19,28 @@
|
|
|
14
19
|
|
|
15
20
|
---
|
|
16
21
|
|
|
22
|
+
## Why Mandor
|
|
23
|
+
|
|
24
|
+
**No More Markdown Plan Files**
|
|
25
|
+
|
|
26
|
+
Traditional workflows scatter task state across markdown files, spreadsheets, and Slack messages. Dependencies are manual, status is fiction, and progress is invisible until code review.
|
|
27
|
+
|
|
28
|
+
Mandor brings **deterministic task management** to AI agent workflows:
|
|
29
|
+
|
|
30
|
+
- **Single Source of Truth**: All state in `events.jsonl`—queryable, reproducible, auditable
|
|
31
|
+
- **Automatic Dependency Resolution**: Mark tasks done → dependents auto-transition to ready
|
|
32
|
+
- **Schema-Driven**: Enforce implementation steps, test cases, and library needs upfront
|
|
33
|
+
- **CLI-Native**: Works in terminal, scripts, and CI/CD pipelines
|
|
34
|
+
- **Event-Sourced**: Full audit trail of every status change
|
|
35
|
+
|
|
17
36
|
## Overview
|
|
18
37
|
|
|
19
38
|
Mandor is a CLI tool for managing tasks, features, and issues in AI agent workflows:
|
|
20
39
|
|
|
21
|
-
- **Event-Based Architecture**: All changes logged in `events.jsonl`
|
|
22
|
-
- **JSONL Format**: Deterministic, append-only storage
|
|
23
|
-
- **Dependency Tracking**: Automatic status
|
|
24
|
-
- **Cross-Platform**: Go binary for macOS, Linux, Windows
|
|
40
|
+
- **Event-Based Architecture**: All changes logged in `events.jsonl` with immutable timestamps
|
|
41
|
+
- **JSONL Format**: Deterministic, append-only storage for reproducibility
|
|
42
|
+
- **Dependency Tracking**: Automatic status transitions when dependencies complete
|
|
43
|
+
- **Cross-Platform**: Go binary for macOS, Linux, Windows (arm64 & x64)
|
|
25
44
|
|
|
26
45
|
---
|
|
27
46
|
|
|
@@ -105,35 +124,72 @@ go build -o ./binaries/mandor ./cmd/mandor
|
|
|
105
124
|
### 1. Initialize Workspace
|
|
106
125
|
|
|
107
126
|
```bash
|
|
108
|
-
|
|
109
|
-
./binaries/mandor init --workspace-name "My Project"
|
|
127
|
+
mandor init "My Project"
|
|
110
128
|
```
|
|
111
129
|
|
|
112
130
|
### 2. Create a Project
|
|
113
131
|
|
|
114
132
|
```bash
|
|
115
|
-
|
|
116
|
-
--goal "Build REST API endpoints"
|
|
133
|
+
mandor project create api --name "API Development" \
|
|
134
|
+
--goal "Build REST API service with authentication and endpoints"
|
|
117
135
|
```
|
|
118
136
|
|
|
119
137
|
### 3. Create a Feature
|
|
120
138
|
|
|
121
139
|
```bash
|
|
122
|
-
|
|
123
|
-
--goal "Implement authentication
|
|
140
|
+
mandor feature create "Authentication" --project api \
|
|
141
|
+
--goal "Implement JWT-based authentication with login and refresh flows for secure API access" \
|
|
124
142
|
--scope backend
|
|
125
143
|
```
|
|
126
144
|
|
|
127
|
-
### 4. Create Tasks
|
|
145
|
+
### 4. Create Tasks with Dependencies
|
|
128
146
|
|
|
129
147
|
```bash
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
--goal "Parse and validate JWT tokens" \
|
|
133
|
-
--implementation-steps "
|
|
134
|
-
--test-cases "
|
|
135
|
-
--derivable-files "
|
|
136
|
-
--library-needs "
|
|
148
|
+
# Create first task (no dependencies)
|
|
149
|
+
mandor task create api-feature-xxx "JWT Parser" \
|
|
150
|
+
--goal "Parse and validate JWT tokens in incoming requests with expiry and signature verification" \
|
|
151
|
+
--implementation-steps "Setup crypto library|Add token validation|Handle expiry|Return errors" \
|
|
152
|
+
--test-cases "Valid token accepted|Expired token rejected|Invalid signature rejected" \
|
|
153
|
+
--derivable-files "jwt_validator.go|jwt_test.go" \
|
|
154
|
+
--library-needs "golang-jwt" \
|
|
155
|
+
--priority P1
|
|
156
|
+
|
|
157
|
+
# Create dependent task (depends on JWT Parser)
|
|
158
|
+
mandor task create api-feature-xxx "Login Endpoint" \
|
|
159
|
+
--goal "Accept user credentials and return JWT token with refresh token flow" \
|
|
160
|
+
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Return tokens" \
|
|
161
|
+
--test-cases "Valid creds return token|Invalid creds rejected|Tokens properly formatted" \
|
|
162
|
+
--derivable-files "login_handler.go|login_test.go" \
|
|
163
|
+
--library-needs "none" \
|
|
164
|
+
--depends-on api-task-xxx-001 \
|
|
165
|
+
--priority P1
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
### 5. View Task Progress
|
|
169
|
+
|
|
170
|
+
```bash
|
|
171
|
+
# See all tasks in feature
|
|
172
|
+
mandor task list api-feature-xxx
|
|
173
|
+
|
|
174
|
+
# See tasks ready to work on
|
|
175
|
+
mandor task ready api-feature-xxx
|
|
176
|
+
|
|
177
|
+
# See blocked/waiting tasks
|
|
178
|
+
mandor task blocked api-feature-xxx
|
|
179
|
+
|
|
180
|
+
# See summary grouped by status
|
|
181
|
+
mandor task summary api-feature-xxx
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### 6. Mark Tasks Complete
|
|
185
|
+
|
|
186
|
+
```bash
|
|
187
|
+
# Get task ID from list
|
|
188
|
+
mandor task update <task-id> --status in_progress
|
|
189
|
+
mandor task update <task-id> --status done
|
|
190
|
+
|
|
191
|
+
# Dependent tasks auto-transition to "ready"
|
|
192
|
+
mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
|
|
137
193
|
```
|
|
138
194
|
|
|
139
195
|
---
|
|
@@ -193,52 +249,98 @@ mandor feature update <id> --project <id> --cancel --reason "Reason"
|
|
|
193
249
|
### Task Commands
|
|
194
250
|
|
|
195
251
|
```bash
|
|
196
|
-
# Create a task
|
|
197
|
-
mandor task create
|
|
198
|
-
--
|
|
199
|
-
--
|
|
200
|
-
--
|
|
252
|
+
# Create a task (positional arguments: feature_id, name)
|
|
253
|
+
mandor task create <feature_id> "<name>" \
|
|
254
|
+
--goal "Task description (min 500 chars)" \
|
|
255
|
+
--implementation-steps "step1|step2|step3" \
|
|
256
|
+
--test-cases "test1|test2|test3" \
|
|
257
|
+
--derivable-files "file1.go|file2.go" \
|
|
201
258
|
--library-needs "lib1|lib2" \
|
|
202
259
|
[--priority <P0-P5>] \
|
|
203
260
|
[--depends-on <task-id>]
|
|
204
261
|
|
|
205
|
-
# List tasks
|
|
206
|
-
mandor task list
|
|
262
|
+
# List tasks in a feature (positional argument: feature_id)
|
|
263
|
+
mandor task list <feature_id> [--status <value>] [--priority <value>] [--json]
|
|
264
|
+
|
|
265
|
+
# Show ready tasks (available to work on)
|
|
266
|
+
mandor task ready <feature_id> [--priority <P0-P5>] [--json]
|
|
267
|
+
|
|
268
|
+
# Show blocked tasks (waiting on dependencies)
|
|
269
|
+
mandor task blocked <feature_id> [--priority <P0-P5>] [--json]
|
|
270
|
+
|
|
271
|
+
# Show task summary (grouped by status)
|
|
272
|
+
mandor task summary <feature_id>
|
|
207
273
|
|
|
208
274
|
# Show task details
|
|
209
275
|
mandor task detail <task-id> [--include-deleted] [--events] [--dependencies]
|
|
210
276
|
|
|
211
|
-
# Update task
|
|
212
|
-
mandor task update <id>
|
|
213
|
-
[--cancel --reason] [--reopen] \
|
|
214
|
-
[--depends <ids>] [--depends-add <ids>] [--depends-remove <ids>]
|
|
277
|
+
# Update task status
|
|
278
|
+
mandor task update <id> --status <value>
|
|
215
279
|
|
|
216
|
-
#
|
|
280
|
+
# Transition task to work on it
|
|
217
281
|
mandor task update <id> --status in_progress
|
|
282
|
+
|
|
283
|
+
# Mark task complete (auto-unblocks dependents)
|
|
218
284
|
mandor task update <id> --status done
|
|
285
|
+
|
|
286
|
+
# Block task manually (external dependency)
|
|
287
|
+
mandor task update <id> --status blocked --reason "Waiting on API response"
|
|
288
|
+
|
|
289
|
+
# Cancel task
|
|
290
|
+
mandor task update <id> --cancel --reason "Superseded by feature X"
|
|
291
|
+
|
|
292
|
+
# Reopen cancelled task
|
|
293
|
+
mandor task update <id> --reopen
|
|
219
294
|
```
|
|
220
295
|
|
|
221
296
|
### Issue Commands
|
|
222
297
|
|
|
223
298
|
```bash
|
|
224
299
|
# Create an issue
|
|
225
|
-
mandor issue create
|
|
226
|
-
--
|
|
227
|
-
--
|
|
228
|
-
--
|
|
300
|
+
mandor issue create <project_id> "<name>" \
|
|
301
|
+
--type <type> \
|
|
302
|
+
--goal "Issue description (min 200 chars)" \
|
|
303
|
+
--affected-files "file1|file2" \
|
|
304
|
+
--affected-tests "test1|test2" \
|
|
305
|
+
--implementation-steps "step1|step2" \
|
|
229
306
|
[--priority <P0-P5>] \
|
|
230
307
|
[--depends-on <issue-id>]
|
|
231
308
|
|
|
232
|
-
# List issues
|
|
233
|
-
mandor issue list
|
|
309
|
+
# List issues in a project
|
|
310
|
+
mandor issue list <project_id> [--status <value>] [--type <value>] [--json]
|
|
311
|
+
|
|
312
|
+
# Show ready issues (available to fix)
|
|
313
|
+
mandor issue ready <project_id> [--type <type>] [--priority <P0-P5>] [--json]
|
|
314
|
+
|
|
315
|
+
# Show blocked issues (waiting on dependencies)
|
|
316
|
+
mandor issue blocked <project_id> [--type <type>] [--priority <P0-P5>] [--json]
|
|
317
|
+
|
|
318
|
+
# Show issue summary (grouped by status)
|
|
319
|
+
mandor issue summary <project_id>
|
|
234
320
|
|
|
235
321
|
# Show issue details
|
|
236
322
|
mandor issue detail <issue-id> [--include-deleted]
|
|
237
323
|
|
|
238
|
-
# Update issue
|
|
239
|
-
mandor issue update <id>
|
|
240
|
-
|
|
241
|
-
|
|
324
|
+
# Update issue status
|
|
325
|
+
mandor issue update <id> --status <value>
|
|
326
|
+
|
|
327
|
+
# Start working on an issue
|
|
328
|
+
mandor issue update <id> --start
|
|
329
|
+
|
|
330
|
+
# Mark issue resolved
|
|
331
|
+
mandor issue update <id> --resolve
|
|
332
|
+
|
|
333
|
+
# Mark issue as won't fix
|
|
334
|
+
mandor issue update <id> --wontfix --reason "Working as intended"
|
|
335
|
+
|
|
336
|
+
# Reopen a resolved/wontfix issue
|
|
337
|
+
mandor issue update <id> --reopen
|
|
338
|
+
|
|
339
|
+
# Block issue manually
|
|
340
|
+
mandor issue update <id> --status blocked --reason "Waiting on infrastructure"
|
|
341
|
+
|
|
342
|
+
# Cancel issue (duplicate/no longer relevant)
|
|
343
|
+
mandor issue update <id> --cancel --reason "Duplicate of issue #123"
|
|
242
344
|
```
|
|
243
345
|
|
|
244
346
|
---
|
|
@@ -487,117 +589,237 @@ grep '"type":"status_changed"' .mandor/events.jsonl | wc -l
|
|
|
487
589
|
### Complete Feature Workflow
|
|
488
590
|
|
|
489
591
|
```bash
|
|
490
|
-
#
|
|
491
|
-
mandor init
|
|
492
|
-
mandor project create api --name "API" --goal "Build REST API"
|
|
493
|
-
mandor feature create "Auth" --project api --goal "Authentication" --scope backend
|
|
592
|
+
# Initialize and create project
|
|
593
|
+
mandor init "API Project"
|
|
594
|
+
mandor project create api --name "REST API" --goal "Build production REST API with authentication"
|
|
494
595
|
|
|
495
|
-
# Create
|
|
496
|
-
mandor
|
|
497
|
-
|
|
498
|
-
--
|
|
596
|
+
# Create feature (structured epic)
|
|
597
|
+
mandor feature create "Authentication" --project api \
|
|
598
|
+
--goal "Implement JWT-based auth with login, logout, and token refresh flows" \
|
|
599
|
+
--scope backend
|
|
499
600
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
--
|
|
503
|
-
--
|
|
601
|
+
# Create first task (no dependencies)
|
|
602
|
+
mandor task create api-feature-xxx "JWT Parser" \
|
|
603
|
+
--goal "Parse and validate JWT tokens with signature verification and expiry checks" \
|
|
604
|
+
--implementation-steps "Import crypto library|Implement token parsing|Add signature validation|Handle expiry" \
|
|
605
|
+
--test-cases "Valid token accepted|Invalid signature rejected|Expired token rejected" \
|
|
606
|
+
--derivable-files "jwt_parser.go|jwt_parser_test.go" \
|
|
607
|
+
--library-needs "golang-jwt" \
|
|
608
|
+
--priority P1
|
|
609
|
+
|
|
610
|
+
# Create dependent task
|
|
611
|
+
mandor task create api-feature-xxx "JWT Validator" \
|
|
612
|
+
--goal "Create middleware to validate JWT tokens in incoming requests" \
|
|
613
|
+
--implementation-steps "Create middleware|Validate token|Check expiry|Return errors" \
|
|
614
|
+
--test-cases "Valid requests pass|Invalid requests rejected|Error responses correct" \
|
|
615
|
+
--derivable-files "auth_middleware.go|auth_middleware_test.go" \
|
|
616
|
+
--library-needs "none" \
|
|
617
|
+
--depends-on <jwt-parser-id> \
|
|
618
|
+
--priority P1
|
|
619
|
+
|
|
620
|
+
# Create another dependent task
|
|
621
|
+
mandor task create api-feature-xxx "Login Endpoint" \
|
|
622
|
+
--goal "Accept credentials and return JWT token pair with refresh token" \
|
|
623
|
+
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Store refresh token|Return tokens" \
|
|
624
|
+
--test-cases "Valid creds return tokens|Invalid creds rejected|Tokens formatted correctly" \
|
|
625
|
+
--derivable-files "login_handler.go|login_handler_test.go" \
|
|
626
|
+
--library-needs "none" \
|
|
627
|
+
--depends-on <jwt-parser-id> \
|
|
628
|
+
--priority P1
|
|
629
|
+
|
|
630
|
+
# View progress and blocking status
|
|
631
|
+
mandor task list api-feature-xxx # See all tasks
|
|
632
|
+
mandor task ready api-feature-xxx # Only JWT Parser is ready
|
|
633
|
+
mandor task blocked api-feature-xxx # Validator and Login waiting on Parser
|
|
634
|
+
mandor task summary api-feature-xxx # Grouped summary
|
|
504
635
|
|
|
505
636
|
# Execute workflow
|
|
506
|
-
mandor task update jwt-parser-id --status in_progress
|
|
507
|
-
mandor task update jwt-parser-id --status done
|
|
637
|
+
mandor task update <jwt-parser-id> --status in_progress
|
|
638
|
+
mandor task update <jwt-parser-id> --status done
|
|
639
|
+
|
|
640
|
+
# Now Validator and Login auto-transition to ready
|
|
641
|
+
mandor task ready api-feature-xxx # Both now ready to start
|
|
642
|
+
|
|
643
|
+
# Work on dependent tasks
|
|
644
|
+
mandor task update <jwt-validator-id> --status in_progress
|
|
645
|
+
mandor task update <jwt-validator-id> --status done
|
|
508
646
|
|
|
509
|
-
|
|
510
|
-
mandor task update
|
|
511
|
-
mandor task update jwt-validator-id --status done
|
|
647
|
+
mandor task update <login-endpoint-id> --status in_progress
|
|
648
|
+
mandor task update <login-endpoint-id> --status done
|
|
512
649
|
|
|
513
|
-
# Mark feature
|
|
514
|
-
mandor feature update
|
|
515
|
-
mandor feature update
|
|
650
|
+
# Mark feature complete
|
|
651
|
+
mandor feature update api-feature-xxx --project api --status active
|
|
652
|
+
mandor feature update api-feature-xxx --project api --status done
|
|
516
653
|
```
|
|
517
654
|
|
|
518
655
|
### Multi-Project Dependencies
|
|
519
656
|
|
|
520
657
|
```bash
|
|
521
|
-
# Create projects with cross-project enabled
|
|
522
|
-
mandor project create core --name "Core
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
--
|
|
658
|
+
# Create projects with cross-project dependencies enabled
|
|
659
|
+
mandor project create core --name "Core Library" \
|
|
660
|
+
--goal "Shared database and utility libraries"
|
|
661
|
+
mandor project create api --name "API Service" \
|
|
662
|
+
--goal "REST API service" --task-dep cross_project_allowed
|
|
663
|
+
|
|
664
|
+
# Create shared library feature and task
|
|
665
|
+
mandor feature create "Database Layer" --project core \
|
|
666
|
+
--goal "Connection pool and query builder for database access" \
|
|
667
|
+
--scope backend
|
|
530
668
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
-
|
|
535
|
-
--
|
|
536
|
-
--
|
|
669
|
+
mandor task create core-feature-xxx "Database Connection Pool" \
|
|
670
|
+
--goal "Implement connection pool with health checks and auto-reconnect" \
|
|
671
|
+
--implementation-steps "Create pool|Setup health check|Auto-reconnect|Connection limits" \
|
|
672
|
+
--test-cases "Pool creates connections|Health check works|Reconnect on failure" \
|
|
673
|
+
--derivable-files "db_pool.go|db_pool_test.go" \
|
|
674
|
+
--library-needs "pgx|pgxpool" \
|
|
675
|
+
--priority P0
|
|
676
|
+
|
|
677
|
+
# Create API feature depending on core library task
|
|
678
|
+
mandor feature create "User Endpoints" --project api \
|
|
679
|
+
--goal "User CRUD endpoints backed by database" \
|
|
680
|
+
--scope backend
|
|
537
681
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
682
|
+
mandor task create api-feature-xxx "User API Handler" \
|
|
683
|
+
--goal "Create REST endpoints for user CRUD operations" \
|
|
684
|
+
--implementation-steps "Setup handler|Implement GET|Implement POST|Implement DELETE" \
|
|
685
|
+
--test-cases "GET returns user|POST creates user|DELETE removes user" \
|
|
686
|
+
--derivable-files "user_handler.go|user_handler_test.go" \
|
|
687
|
+
--library-needs "gin|none" \
|
|
688
|
+
--depends-on <db-pool-task-id> \
|
|
689
|
+
--priority P0
|
|
690
|
+
|
|
691
|
+
# Check progress
|
|
692
|
+
mandor task list core-feature-xxx # DB Pool ready to start
|
|
693
|
+
mandor task blocked api-feature-xxx # User Handler blocked on DB Pool
|
|
694
|
+
|
|
695
|
+
# Complete core task, dependents auto-unblock
|
|
696
|
+
mandor task update <db-pool-task-id> --status in_progress
|
|
697
|
+
mandor task update <db-pool-task-id> --status done
|
|
698
|
+
|
|
699
|
+
# API task now ready
|
|
700
|
+
mandor task ready api-feature-xxx # User Handler now ready
|
|
541
701
|
```
|
|
542
702
|
|
|
543
703
|
### Issue Tracking with Dependencies
|
|
544
704
|
|
|
545
705
|
```bash
|
|
546
|
-
# Create
|
|
547
|
-
mandor issue create "Data Validation Bug"
|
|
548
|
-
|
|
549
|
-
--
|
|
550
|
-
|
|
551
|
-
|
|
552
|
-
-
|
|
553
|
-
--
|
|
554
|
-
|
|
555
|
-
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
--affected-
|
|
559
|
-
--
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
564
|
-
|
|
565
|
-
|
|
566
|
-
|
|
567
|
-
|
|
706
|
+
# Create blocker issues
|
|
707
|
+
mandor issue create api "Data Validation Bug" \
|
|
708
|
+
--type bug \
|
|
709
|
+
--goal "Fix data validation allowing invalid emails to pass through" \
|
|
710
|
+
--affected-files "validate.go|email_validator.go" \
|
|
711
|
+
--affected-tests "validate_test.go|email_validator_test.go" \
|
|
712
|
+
--implementation-steps "Add email regex|Add domain check|Add test cases" \
|
|
713
|
+
--priority P0
|
|
714
|
+
|
|
715
|
+
mandor issue create api "Cache Consistency Issue" \
|
|
716
|
+
--type bug \
|
|
717
|
+
--goal "Fix race condition in cache invalidation causing stale data" \
|
|
718
|
+
--affected-files "cache.go|invalidation.go" \
|
|
719
|
+
--affected-tests "cache_test.go" \
|
|
720
|
+
--implementation-steps "Add mutex|Refactor invalidation|Add concurrency tests" \
|
|
721
|
+
--priority P0
|
|
722
|
+
|
|
723
|
+
# Create dependent issue (depends on blockers)
|
|
724
|
+
mandor issue create api "High Memory Usage in Production" \
|
|
725
|
+
--type bug \
|
|
726
|
+
--goal "Fix memory leak causing OOM errors in production due to cache and validation issues" \
|
|
727
|
+
--affected-files "main.go|memory.go" \
|
|
728
|
+
--affected-tests "memory_test.go" \
|
|
729
|
+
--implementation-steps "Profile memory|Identify leaks|Fix validation and cache" \
|
|
730
|
+
--depends-on <data-validation-bug-id>|<cache-issue-id> \
|
|
731
|
+
--priority P0
|
|
732
|
+
|
|
733
|
+
# Check status
|
|
734
|
+
mandor issue ready api # Both blockers ready
|
|
735
|
+
mandor issue blocked api # Memory issue blocked
|
|
736
|
+
|
|
737
|
+
# Resolve blocking issues (order doesn't matter)
|
|
738
|
+
mandor issue update <data-validation-bug-id> --start
|
|
739
|
+
mandor issue update <data-validation-bug-id> --resolve
|
|
740
|
+
|
|
741
|
+
mandor issue update <cache-issue-id> --start
|
|
742
|
+
mandor issue update <cache-issue-id> --resolve
|
|
743
|
+
|
|
744
|
+
# Check progress
|
|
745
|
+
mandor issue ready api # Memory issue now ready
|
|
746
|
+
mandor issue summary api # See all status groups
|
|
747
|
+
|
|
748
|
+
# Fix dependent issue
|
|
749
|
+
mandor issue update <memory-issue-id> --start
|
|
750
|
+
mandor issue update <memory-issue-id> --resolve
|
|
568
751
|
```
|
|
569
752
|
|
|
570
753
|
### Cancel and Reopen Workflow
|
|
571
754
|
|
|
572
755
|
```bash
|
|
573
|
-
# Create feature and tasks
|
|
574
|
-
mandor feature create "
|
|
575
|
-
|
|
576
|
-
--
|
|
577
|
-
--derivable-files "none" --library-needs "none"
|
|
756
|
+
# Create experimental feature and tasks
|
|
757
|
+
mandor feature create "OAuth2 Investigation" --project api \
|
|
758
|
+
--goal "Research OAuth2 integration options" \
|
|
759
|
+
--scope backend
|
|
578
760
|
|
|
579
|
-
|
|
580
|
-
|
|
761
|
+
mandor task create api-feature-xxx "Compare OAuth2 Libraries" \
|
|
762
|
+
--goal "Research and compare auth0, okta, and open-source options" \
|
|
763
|
+
--implementation-steps "Create comparison spreadsheet|Evaluate pros/cons|Estimate effort" \
|
|
764
|
+
--test-cases "Evaluation complete|Team consensus reached" \
|
|
765
|
+
--derivable-files "oauth2_comparison.md" \
|
|
766
|
+
--library-needs "none" \
|
|
767
|
+
--priority P2
|
|
768
|
+
|
|
769
|
+
mandor task create api-feature-xxx "Proof of Concept" \
|
|
770
|
+
--goal "Build minimal OAuth2 integration demo" \
|
|
771
|
+
--implementation-steps "Setup oauth lib|Create login flow|Test flow" \
|
|
772
|
+
--test-cases "Login works|Token refresh works" \
|
|
773
|
+
--derivable-files "poc_oauth.go|poc_oauth_test.go" \
|
|
774
|
+
--library-needs "none" \
|
|
775
|
+
--priority P2
|
|
581
776
|
|
|
582
|
-
#
|
|
583
|
-
mandor task
|
|
584
|
-
--implementation-steps "none" --test-cases "none" \
|
|
585
|
-
--derivable-files "none" --library-needs "none"
|
|
586
|
-
# Error: "Cannot create task for cancelled feature"
|
|
777
|
+
# List tasks
|
|
778
|
+
mandor task list api-feature-xxx # Show feature tasks
|
|
587
779
|
|
|
588
|
-
#
|
|
589
|
-
mandor feature update
|
|
780
|
+
# Change requirements, decide not to pursue OAuth2
|
|
781
|
+
mandor feature update api-feature-xxx --project api \
|
|
782
|
+
--cancel --reason "Sticking with JWT, OAuth2 adds too much complexity"
|
|
590
783
|
|
|
591
|
-
#
|
|
592
|
-
mandor task create
|
|
593
|
-
--
|
|
594
|
-
--
|
|
784
|
+
# Try to create new task (fails)
|
|
785
|
+
mandor task create api-feature-xxx "Integration Tests" \
|
|
786
|
+
--goal "Add integration tests" \
|
|
787
|
+
--implementation-steps "none" \
|
|
788
|
+
--test-cases "none" \
|
|
789
|
+
--derivable-files "none" \
|
|
790
|
+
--library-needs "none"
|
|
791
|
+
# Error: "Cannot create task for cancelled feature"
|
|
792
|
+
|
|
793
|
+
# Change mind - reopen the feature to continue research
|
|
794
|
+
mandor feature update api-feature-xxx --project api --reopen
|
|
795
|
+
|
|
796
|
+
# Can now create tasks again
|
|
797
|
+
mandor task list api-feature-xxx # Previous tasks still exist
|
|
798
|
+
mandor task create api-feature-xxx "Hybrid Approach" \
|
|
799
|
+
--goal "Combine JWT with optional OAuth2 for third-party apps" \
|
|
800
|
+
--implementation-steps "Design hybrid flow|Implement dual auth|Test both flows" \
|
|
801
|
+
--test-cases "JWT still works|OAuth2 works|Both interoperable" \
|
|
802
|
+
--derivable-files "hybrid_auth.go" \
|
|
803
|
+
--library-needs "oauth2lib" \
|
|
804
|
+
--priority P3
|
|
595
805
|
```
|
|
596
806
|
|
|
597
807
|
---
|
|
598
808
|
|
|
599
809
|
## Best Practices
|
|
600
810
|
|
|
811
|
+
### Mandor vs. Markdown Plan Files
|
|
812
|
+
|
|
813
|
+
| Problem | Markdown Plans | Mandor |
|
|
814
|
+
|---------|---|---|
|
|
815
|
+
| Single source of truth | ❌ Scattered across multiple files | ✓ Centralized `events.jsonl` |
|
|
816
|
+
| Dependency tracking | ❌ Manual, often wrong | ✓ Automatic status transitions |
|
|
817
|
+
| Progress visibility | ❌ Requires manual updates | ✓ Real-time status queries |
|
|
818
|
+
| Audit trail | ❌ Git history only | ✓ Immutable event log |
|
|
819
|
+
| Blocking detection | ❌ Must review files | ✓ `mandor task blocked <id>` |
|
|
820
|
+
| Schema validation | ❌ Free-form text | ✓ Enforced structure |
|
|
821
|
+
| Automation | ❌ Parse text with regex | ✓ JSON queryable for scripts |
|
|
822
|
+
|
|
601
823
|
### 1. Use Meaningful IDs
|
|
602
824
|
|
|
603
825
|
Project and feature IDs should be:
|
|
@@ -664,6 +886,54 @@ mandor config set default_priority P2
|
|
|
664
886
|
mandor config set strict_mode true
|
|
665
887
|
```
|
|
666
888
|
|
|
889
|
+
### 9. Stop Writing Markdown Plan Files
|
|
890
|
+
|
|
891
|
+
Replace this workflow:
|
|
892
|
+
|
|
893
|
+
```markdown
|
|
894
|
+
# PLAN.md
|
|
895
|
+
## Phase 1: Authentication
|
|
896
|
+
- [ ] JWT parser (depends on cryptography)
|
|
897
|
+
- [ ] Login endpoint (depends on JWT parser)
|
|
898
|
+
- ...
|
|
899
|
+
# Status: Last updated 3 days ago
|
|
900
|
+
```
|
|
901
|
+
|
|
902
|
+
With this:
|
|
903
|
+
|
|
904
|
+
```bash
|
|
905
|
+
# Create structured plan
|
|
906
|
+
mandor feature create "Authentication" --project api \
|
|
907
|
+
--goal "Implement JWT and login endpoints" \
|
|
908
|
+
--scope backend
|
|
909
|
+
|
|
910
|
+
# Create tasks with explicit dependencies
|
|
911
|
+
mandor task create "JWT Parser" --feature auth-xxx \
|
|
912
|
+
-g "Validate JWT tokens..." \
|
|
913
|
+
--implementation-steps "Step 1|Step 2" \
|
|
914
|
+
--test-cases "Test invalid tokens|Test expired" \
|
|
915
|
+
--library-needs "jsonwebtoken" \
|
|
916
|
+
--priority P1
|
|
917
|
+
|
|
918
|
+
mandor task create "Login Endpoint" --feature auth-xxx \
|
|
919
|
+
-g "Accept credentials and return JWT..." \
|
|
920
|
+
--depends-on jwt-parser-id \
|
|
921
|
+
--priority P1
|
|
922
|
+
|
|
923
|
+
# Real-time progress queries
|
|
924
|
+
mandor task ready auth-xxx # See what's available now
|
|
925
|
+
mandor task blocked auth-xxx # See what's waiting
|
|
926
|
+
mandor task summary auth-xxx # See grouped status
|
|
927
|
+
```
|
|
928
|
+
|
|
929
|
+
Benefits:
|
|
930
|
+
- No file sync required
|
|
931
|
+
- Dependencies auto-validated
|
|
932
|
+
- Blocking tasks auto-detected
|
|
933
|
+
- Reproducible state (`events.jsonl`)
|
|
934
|
+
- Queryable via CLI or JSON
|
|
935
|
+
- Works in CI/CD pipelines
|
|
936
|
+
|
|
667
937
|
---
|
|
668
938
|
|
|
669
939
|
## Troubleshooting
|
package/bin/mandor
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/mandor-test
ADDED
|
Binary file
|