@mandors/cli 0.3.7 → 0.3.9
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 +390 -118
- 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
|
|
|
@@ -106,34 +125,72 @@ go build -o ./binaries/mandor ./cmd/mandor
|
|
|
106
125
|
|
|
107
126
|
```bash
|
|
108
127
|
export MANDOR_ENV=development
|
|
109
|
-
|
|
128
|
+
mandor init "My Project"
|
|
110
129
|
```
|
|
111
130
|
|
|
112
131
|
### 2. Create a Project
|
|
113
132
|
|
|
114
133
|
```bash
|
|
115
|
-
|
|
116
|
-
--goal "Build REST API endpoints"
|
|
134
|
+
mandor project create api --name "API Development" \
|
|
135
|
+
--goal "Build REST API service with authentication and endpoints"
|
|
117
136
|
```
|
|
118
137
|
|
|
119
138
|
### 3. Create a Feature
|
|
120
139
|
|
|
121
140
|
```bash
|
|
122
|
-
|
|
123
|
-
--goal "Implement authentication
|
|
141
|
+
mandor feature create "Authentication" --project api \
|
|
142
|
+
--goal "Implement JWT-based authentication with login and refresh flows for secure API access" \
|
|
124
143
|
--scope backend
|
|
125
144
|
```
|
|
126
145
|
|
|
127
|
-
### 4. Create Tasks
|
|
146
|
+
### 4. Create Tasks with Dependencies
|
|
128
147
|
|
|
129
148
|
```bash
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
--goal "Parse and validate JWT tokens" \
|
|
133
|
-
--implementation-steps "
|
|
134
|
-
--test-cases "
|
|
135
|
-
--derivable-files "
|
|
136
|
-
--library-needs "
|
|
149
|
+
# Create first task (no dependencies)
|
|
150
|
+
mandor task create api-feature-xxx "JWT Parser" \
|
|
151
|
+
--goal "Parse and validate JWT tokens in incoming requests with expiry and signature verification" \
|
|
152
|
+
--implementation-steps "Setup crypto library|Add token validation|Handle expiry|Return errors" \
|
|
153
|
+
--test-cases "Valid token accepted|Expired token rejected|Invalid signature rejected" \
|
|
154
|
+
--derivable-files "jwt_validator.go|jwt_test.go" \
|
|
155
|
+
--library-needs "golang-jwt" \
|
|
156
|
+
--priority P1
|
|
157
|
+
|
|
158
|
+
# Create dependent task (depends on JWT Parser)
|
|
159
|
+
mandor task create api-feature-xxx "Login Endpoint" \
|
|
160
|
+
--goal "Accept user credentials and return JWT token with refresh token flow" \
|
|
161
|
+
--implementation-steps "Setup endpoint|Validate credentials|Generate JWT|Return tokens" \
|
|
162
|
+
--test-cases "Valid creds return token|Invalid creds rejected|Tokens properly formatted" \
|
|
163
|
+
--derivable-files "login_handler.go|login_test.go" \
|
|
164
|
+
--library-needs "none" \
|
|
165
|
+
--depends-on api-task-xxx-001 \
|
|
166
|
+
--priority P1
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### 5. View Task Progress
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
# See all tasks in feature
|
|
173
|
+
mandor task list api-feature-xxx
|
|
174
|
+
|
|
175
|
+
# See tasks ready to work on
|
|
176
|
+
mandor task ready api-feature-xxx
|
|
177
|
+
|
|
178
|
+
# 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
|
|
183
|
+
```
|
|
184
|
+
|
|
185
|
+
### 6. Mark Tasks Complete
|
|
186
|
+
|
|
187
|
+
```bash
|
|
188
|
+
# Get task ID from list
|
|
189
|
+
mandor task update <task-id> --status in_progress
|
|
190
|
+
mandor task update <task-id> --status done
|
|
191
|
+
|
|
192
|
+
# Dependent tasks auto-transition to "ready"
|
|
193
|
+
mandor task ready api-feature-xxx # Now shows "Login Endpoint" as ready
|
|
137
194
|
```
|
|
138
195
|
|
|
139
196
|
---
|
|
@@ -193,52 +250,98 @@ mandor feature update <id> --project <id> --cancel --reason "Reason"
|
|
|
193
250
|
### Task Commands
|
|
194
251
|
|
|
195
252
|
```bash
|
|
196
|
-
# Create a task
|
|
197
|
-
mandor task create
|
|
198
|
-
--
|
|
199
|
-
--
|
|
200
|
-
--
|
|
253
|
+
# Create a task (positional arguments: feature_id, name)
|
|
254
|
+
mandor task create <feature_id> "<name>" \
|
|
255
|
+
--goal "Task description (min 500 chars)" \
|
|
256
|
+
--implementation-steps "step1|step2|step3" \
|
|
257
|
+
--test-cases "test1|test2|test3" \
|
|
258
|
+
--derivable-files "file1.go|file2.go" \
|
|
201
259
|
--library-needs "lib1|lib2" \
|
|
202
260
|
[--priority <P0-P5>] \
|
|
203
261
|
[--depends-on <task-id>]
|
|
204
262
|
|
|
205
|
-
# List tasks
|
|
206
|
-
mandor task list
|
|
263
|
+
# List tasks in a feature (positional argument: feature_id)
|
|
264
|
+
mandor task list <feature_id> [--status <value>] [--priority <value>] [--json]
|
|
265
|
+
|
|
266
|
+
# Show ready tasks (available to work on)
|
|
267
|
+
mandor task ready <feature_id> [--priority <P0-P5>] [--json]
|
|
268
|
+
|
|
269
|
+
# Show blocked tasks (waiting on dependencies)
|
|
270
|
+
mandor task blocked <feature_id> [--priority <P0-P5>] [--json]
|
|
271
|
+
|
|
272
|
+
# Show task summary (grouped by status)
|
|
273
|
+
mandor task summary <feature_id>
|
|
207
274
|
|
|
208
275
|
# Show task details
|
|
209
276
|
mandor task detail <task-id> [--include-deleted] [--events] [--dependencies]
|
|
210
277
|
|
|
211
|
-
# Update task
|
|
212
|
-
mandor task update <id>
|
|
213
|
-
[--cancel --reason] [--reopen] \
|
|
214
|
-
[--depends <ids>] [--depends-add <ids>] [--depends-remove <ids>]
|
|
278
|
+
# Update task status
|
|
279
|
+
mandor task update <id> --status <value>
|
|
215
280
|
|
|
216
|
-
#
|
|
281
|
+
# Transition task to work on it
|
|
217
282
|
mandor task update <id> --status in_progress
|
|
283
|
+
|
|
284
|
+
# Mark task complete (auto-unblocks dependents)
|
|
218
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
|
|
219
295
|
```
|
|
220
296
|
|
|
221
297
|
### Issue Commands
|
|
222
298
|
|
|
223
299
|
```bash
|
|
224
300
|
# Create an issue
|
|
225
|
-
mandor issue create
|
|
226
|
-
--
|
|
227
|
-
--
|
|
228
|
-
--
|
|
301
|
+
mandor issue create <project_id> "<name>" \
|
|
302
|
+
--type <type> \
|
|
303
|
+
--goal "Issue description (min 200 chars)" \
|
|
304
|
+
--affected-files "file1|file2" \
|
|
305
|
+
--affected-tests "test1|test2" \
|
|
306
|
+
--implementation-steps "step1|step2" \
|
|
229
307
|
[--priority <P0-P5>] \
|
|
230
308
|
[--depends-on <issue-id>]
|
|
231
309
|
|
|
232
|
-
# List issues
|
|
233
|
-
mandor issue list
|
|
310
|
+
# List issues in a project
|
|
311
|
+
mandor issue list <project_id> [--status <value>] [--type <value>] [--json]
|
|
312
|
+
|
|
313
|
+
# Show ready issues (available to fix)
|
|
314
|
+
mandor issue ready <project_id> [--type <type>] [--priority <P0-P5>] [--json]
|
|
315
|
+
|
|
316
|
+
# Show blocked issues (waiting on dependencies)
|
|
317
|
+
mandor issue blocked <project_id> [--type <type>] [--priority <P0-P5>] [--json]
|
|
318
|
+
|
|
319
|
+
# Show issue summary (grouped by status)
|
|
320
|
+
mandor issue summary <project_id>
|
|
234
321
|
|
|
235
322
|
# Show issue details
|
|
236
323
|
mandor issue detail <issue-id> [--include-deleted]
|
|
237
324
|
|
|
238
|
-
# Update issue
|
|
239
|
-
mandor issue update <id>
|
|
240
|
-
|
|
241
|
-
|
|
325
|
+
# Update issue status
|
|
326
|
+
mandor issue update <id> --status <value>
|
|
327
|
+
|
|
328
|
+
# Start working on an issue
|
|
329
|
+
mandor issue update <id> --start
|
|
330
|
+
|
|
331
|
+
# Mark issue resolved
|
|
332
|
+
mandor issue update <id> --resolve
|
|
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"
|
|
242
345
|
```
|
|
243
346
|
|
|
244
347
|
---
|
|
@@ -487,117 +590,238 @@ grep '"type":"status_changed"' .mandor/events.jsonl | wc -l
|
|
|
487
590
|
### Complete Feature Workflow
|
|
488
591
|
|
|
489
592
|
```bash
|
|
490
|
-
#
|
|
491
|
-
|
|
492
|
-
mandor
|
|
493
|
-
mandor
|
|
593
|
+
# Initialize and create project
|
|
594
|
+
export MANDOR_ENV=development
|
|
595
|
+
mandor init "API Project"
|
|
596
|
+
mandor project create api --name "REST API" --goal "Build production REST API with authentication"
|
|
494
597
|
|
|
495
|
-
# Create
|
|
496
|
-
mandor
|
|
497
|
-
|
|
498
|
-
--
|
|
598
|
+
# Create feature (structured epic)
|
|
599
|
+
mandor feature create "Authentication" --project api \
|
|
600
|
+
--goal "Implement JWT-based auth with login, logout, and token refresh flows" \
|
|
601
|
+
--scope backend
|
|
499
602
|
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
--
|
|
503
|
-
--
|
|
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
|
|
631
|
+
|
|
632
|
+
# View progress and blocking status
|
|
633
|
+
mandor task list api-feature-xxx # See all tasks
|
|
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
|
|
504
637
|
|
|
505
638
|
# Execute workflow
|
|
506
|
-
mandor task update jwt-parser-id --status in_progress
|
|
507
|
-
mandor task update jwt-parser-id --status done
|
|
639
|
+
mandor task update <jwt-parser-id> --status in_progress
|
|
640
|
+
mandor task update <jwt-parser-id> --status done
|
|
641
|
+
|
|
642
|
+
# Now Validator and Login auto-transition to ready
|
|
643
|
+
mandor task ready api-feature-xxx # Both now ready to start
|
|
644
|
+
|
|
645
|
+
# Work on dependent tasks
|
|
646
|
+
mandor task update <jwt-validator-id> --status in_progress
|
|
647
|
+
mandor task update <jwt-validator-id> --status done
|
|
508
648
|
|
|
509
|
-
|
|
510
|
-
mandor task update
|
|
511
|
-
mandor task update jwt-validator-id --status done
|
|
649
|
+
mandor task update <login-endpoint-id> --status in_progress
|
|
650
|
+
mandor task update <login-endpoint-id> --status done
|
|
512
651
|
|
|
513
|
-
# Mark feature
|
|
514
|
-
mandor feature update
|
|
515
|
-
mandor feature update
|
|
652
|
+
# Mark feature complete
|
|
653
|
+
mandor feature update api-feature-xxx --project api --status active
|
|
654
|
+
mandor feature update api-feature-xxx --project api --status done
|
|
516
655
|
```
|
|
517
656
|
|
|
518
657
|
### Multi-Project Dependencies
|
|
519
658
|
|
|
520
659
|
```bash
|
|
521
|
-
# Create projects with cross-project enabled
|
|
522
|
-
mandor project create core --name "Core
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
--
|
|
660
|
+
# Create projects with cross-project dependencies enabled
|
|
661
|
+
mandor project create core --name "Core Library" \
|
|
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
|
|
530
670
|
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
-
|
|
535
|
-
--
|
|
536
|
-
--
|
|
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
|
|
537
683
|
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
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
|
|
541
703
|
```
|
|
542
704
|
|
|
543
705
|
### Issue Tracking with Dependencies
|
|
544
706
|
|
|
545
707
|
```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
|
-
|
|
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
|
|
568
753
|
```
|
|
569
754
|
|
|
570
755
|
### Cancel and Reopen Workflow
|
|
571
756
|
|
|
572
757
|
```bash
|
|
573
|
-
# Create feature and tasks
|
|
574
|
-
mandor feature create "
|
|
575
|
-
|
|
576
|
-
--
|
|
577
|
-
--derivable-files "none" --library-needs "none"
|
|
758
|
+
# Create experimental feature and tasks
|
|
759
|
+
mandor feature create "OAuth2 Investigation" --project api \
|
|
760
|
+
--goal "Research OAuth2 integration options" \
|
|
761
|
+
--scope backend
|
|
578
762
|
|
|
579
|
-
|
|
580
|
-
|
|
763
|
+
mandor task create api-feature-xxx "Compare OAuth2 Libraries" \
|
|
764
|
+
--goal "Research and compare auth0, okta, and open-source options" \
|
|
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
|
|
770
|
+
|
|
771
|
+
mandor task create api-feature-xxx "Proof of Concept" \
|
|
772
|
+
--goal "Build minimal OAuth2 integration demo" \
|
|
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
|
|
581
778
|
|
|
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"
|
|
779
|
+
# List tasks
|
|
780
|
+
mandor task list api-feature-xxx # Show feature tasks
|
|
587
781
|
|
|
588
|
-
#
|
|
589
|
-
mandor feature update
|
|
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"
|
|
590
785
|
|
|
591
|
-
#
|
|
592
|
-
mandor task create
|
|
593
|
-
--
|
|
594
|
-
--
|
|
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
|
|
595
807
|
```
|
|
596
808
|
|
|
597
809
|
---
|
|
598
810
|
|
|
599
811
|
## Best Practices
|
|
600
812
|
|
|
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
|
+
|
|
601
825
|
### 1. Use Meaningful IDs
|
|
602
826
|
|
|
603
827
|
Project and feature IDs should be:
|
|
@@ -664,6 +888,54 @@ mandor config set default_priority P2
|
|
|
664
888
|
mandor config set strict_mode true
|
|
665
889
|
```
|
|
666
890
|
|
|
891
|
+
### 9. Stop Writing Markdown Plan Files
|
|
892
|
+
|
|
893
|
+
Replace this workflow:
|
|
894
|
+
|
|
895
|
+
```markdown
|
|
896
|
+
# PLAN.md
|
|
897
|
+
## Phase 1: Authentication
|
|
898
|
+
- [ ] JWT parser (depends on cryptography)
|
|
899
|
+
- [ ] Login endpoint (depends on JWT parser)
|
|
900
|
+
- ...
|
|
901
|
+
# Status: Last updated 3 days ago
|
|
902
|
+
```
|
|
903
|
+
|
|
904
|
+
With this:
|
|
905
|
+
|
|
906
|
+
```bash
|
|
907
|
+
# Create structured plan
|
|
908
|
+
mandor feature create "Authentication" --project api \
|
|
909
|
+
--goal "Implement JWT and login endpoints" \
|
|
910
|
+
--scope backend
|
|
911
|
+
|
|
912
|
+
# Create tasks with explicit dependencies
|
|
913
|
+
mandor task create "JWT Parser" --feature auth-xxx \
|
|
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
|
|
919
|
+
|
|
920
|
+
mandor task create "Login Endpoint" --feature auth-xxx \
|
|
921
|
+
-g "Accept credentials and return JWT..." \
|
|
922
|
+
--depends-on jwt-parser-id \
|
|
923
|
+
--priority P1
|
|
924
|
+
|
|
925
|
+
# Real-time progress queries
|
|
926
|
+
mandor task ready auth-xxx # See what's available now
|
|
927
|
+
mandor task blocked auth-xxx # See what's waiting
|
|
928
|
+
mandor task summary auth-xxx # See grouped status
|
|
929
|
+
```
|
|
930
|
+
|
|
931
|
+
Benefits:
|
|
932
|
+
- No file sync required
|
|
933
|
+
- Dependencies auto-validated
|
|
934
|
+
- Blocking tasks auto-detected
|
|
935
|
+
- Reproducible state (`events.jsonl`)
|
|
936
|
+
- Queryable via CLI or JSON
|
|
937
|
+
- Works in CI/CD pipelines
|
|
938
|
+
|
|
667
939
|
---
|
|
668
940
|
|
|
669
941
|
## Troubleshooting
|
package/bin/mandor
CHANGED
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/mandor-test
ADDED
|
Binary file
|