@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 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>Deterministic JSONL output | Streaming-native architecture | Schema-driven task management</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 based on dependencies
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
- export MANDOR_ENV=development
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
- ./binaries/mandor project create api --name "API Development" \
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
- ./binaries/mandor feature create "Auth Feature" --project api \
123
- --goal "Implement authentication system" \
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
- ./binaries/mandor task create "JWT Parser" \
131
- --feature api-feature-xxx \
132
- --goal "Parse and validate JWT tokens" \
133
- --implementation-steps "none" \
134
- --test-cases "none" \
135
- --derivable-files "none" \
136
- --library-needs "none"
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 "Name" --feature <id> -g "Goal" \
198
- --implementation-steps "step1|step2" \
199
- --test-cases "test1|test2" \
200
- --derivable-files "file1|file2" \
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 --feature <id> [--status <value>] [--priority <value>]
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> [--status <value>] \
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
- # Complete a task (in_progress done)
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 "Name" --project <id> -t <type> -g "Goal" \
226
- --affected-files "file1" \
227
- --affected-tests "test1" \
228
- --implementation-steps "step1" \
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 --project <id> [--status <value>] [--type <value>]
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> [--status <value>] [--start] [--resolve] \
240
- [--wontfix --reason] [--reopen] \
241
- [--depends-on <ids>]
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
- # Setup
491
- mandor init --workspace-name "API Project"
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 tasks with dependencies
496
- mandor task create "JWT Parser" --feature auth-xxx \
497
- -g "Parse JWT tokens" --implementation-steps "none" \
498
- --test-cases "none" --derivable-files "none" --library-needs "none"
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
- mandor task create "JWT Validator" --feature auth-xxx \
501
- -g "Validate JWT tokens" --implementation-steps "none" \
502
- --test-cases "none" --derivable-files "none" --library-needs "none" \
503
- --depends-on jwt-parser-task-id
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
- # Validator automatically becomes ready
510
- mandor task update jwt-validator-id --status in_progress
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 done
514
- mandor feature update auth-xxx --project api --status active
515
- mandor feature update auth-xxx --project api --status done
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" --goal "Core library"
523
- mandor project create api --name "API" --goal "API layer" --task-dep cross_project_allowed
524
-
525
- # Create task in core
526
- mandor feature create lib --project core --goal "Core library"
527
- mandor task create "DB Connection" --feature lib-xxx \
528
- -g "Database connection" --implementation-steps "none" \
529
- --test-cases "none" --derivable-files "none" --library-needs "none"
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
- # Create task in api depending on core task
532
- mandor feature create endpoints --project api --goal "API endpoints"
533
- mandor task create "User Endpoint" --feature endpoints-xxx \
534
- -g "User API endpoint" --implementation-steps "none" \
535
- --test-cases "none" --derivable-files "none" --library-needs "none" \
536
- --depends-on db-connection-task-id
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
- # Complete core task, api task becomes ready
539
- mandor task update db-connection-id --status in_progress
540
- mandor task update db-connection-id --status done
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 blocking issues
547
- mandor issue create "Data Validation Bug" --project api -t bug \
548
- -g "Fix data validation" --affected-files "validate.js" \
549
- --affected-tests "validate_test.js" --implementation-steps "step1"
550
-
551
- mandor issue create "Cache Issue" --project api -t bug \
552
- -g "Fix cache issue" --affected-files "cache.js" \
553
- --affected-tests "cache_test.js" --implementation-steps "step1"
554
-
555
- # Create dependent issue
556
- mandor issue create "Database Crash" --project api -t bug \
557
- -g "Fix crash" --affected-files "db.js" \
558
- --affected-tests "db_test.js" --implementation-steps "step1" \
559
- --depends-on data-validation-id|cache-issue-id
560
-
561
- # Resolve blocking issues
562
- mandor issue update data-validation-id --resolve
563
- mandor issue update cache-issue-id --resolve
564
-
565
- # Dependent issue automatically becomes ready
566
- mandor issue update database-crash-id --start
567
- mandor issue update database-crash-id --resolve
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 "Experiment" --project api --goal "Try something"
575
- mandor task create "Try X" --feature experiment-xxx -g "Test X" \
576
- --implementation-steps "none" --test-cases "none" \
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
- # Cancel the feature
580
- mandor feature update experiment-xxx --project api --cancel --reason "Not needed"
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
- # Cannot create new tasks in cancelled feature
583
- mandor task create "Try Y" --feature experiment-xxx -g "Test Y" \
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
- # Reopen the feature
589
- mandor feature update experiment-xxx --project api --reopen
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
- # Can create tasks again
592
- mandor task create "Try Y" --feature experiment-xxx -g "Test Y" \
593
- --implementation-steps "none" --test-cases "none" \
594
- --derivable-files "none" --library-needs "none"
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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mandors/cli",
3
- "version": "0.3.7",
3
+ "version": "0.3.10",
4
4
  "description": "Event-based task manager CLI for AI agent workflows",
5
5
  "main": "npm/lib/index.js",
6
6
  "bin": {