specfact-cli 0.9.0__tar.gz → 0.9.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (116) hide show
  1. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/PKG-INFO +5 -5
  2. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/README.md +4 -4
  3. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/pyproject.toml +1 -1
  4. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-enforce.md +10 -2
  5. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-import-from-code.md +28 -41
  6. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-add-feature.md +18 -18
  7. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-add-story.md +2 -2
  8. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-compare.md +53 -44
  9. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-init.md +30 -28
  10. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-promote.md +11 -11
  11. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-review.md +36 -36
  12. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-select.md +69 -67
  13. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-update-feature.md +7 -7
  14. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-plan-update-idea.md +3 -3
  15. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-sync.md +76 -76
  16. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/__init__.py +1 -1
  17. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/__init__.py +1 -1
  18. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/cli.py +11 -5
  19. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/constitution.py +13 -11
  20. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/enforce.py +77 -17
  21. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/generate.py +95 -38
  22. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/import_cmd.py +30 -22
  23. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/plan.py +395 -227
  24. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/sync.py +25 -20
  25. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/bridge.py +137 -0
  26. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/project.py +71 -5
  27. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/__init__.py +1 -0
  28. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/bridge_probe.py +0 -1
  29. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/bridge_sync.py +18 -6
  30. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/bridge_watch.py +2 -3
  31. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/templates/__init__.py +0 -1
  32. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/templates/bridge_templates.py +0 -1
  33. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/bundle_loader.py +16 -6
  34. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/structure.py +92 -131
  35. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/.gitignore +0 -0
  36. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/LICENSE.md +0 -0
  37. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/mappings/node-async.yaml +0 -0
  38. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/mappings/python-async.yaml +0 -0
  39. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/mappings/speckit-default.yaml +0 -0
  40. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/prompts/specfact-repro.md +0 -0
  41. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/schemas/deviation.schema.json +0 -0
  42. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/schemas/plan.schema.json +0 -0
  43. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/schemas/protocol.schema.json +0 -0
  44. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/templates/github-action.yml.j2 +0 -0
  45. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/templates/plan.bundle.yaml.j2 +0 -0
  46. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/templates/pr-template.md.j2 +0 -0
  47. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/templates/protocol.yaml.j2 +0 -0
  48. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/resources/templates/telemetry.yaml.example +0 -0
  49. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/__init__.py +0 -0
  50. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/analyze_agent.py +0 -0
  51. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/base.py +0 -0
  52. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/plan_agent.py +0 -0
  53. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/registry.py +0 -0
  54. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/agents/sync_agent.py +0 -0
  55. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/__init__.py +0 -0
  56. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/ambiguity_scanner.py +0 -0
  57. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/code_analyzer.py +0 -0
  58. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/constitution_evidence_extractor.py +0 -0
  59. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/contract_extractor.py +0 -0
  60. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/control_flow_analyzer.py +0 -0
  61. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/requirement_extractor.py +0 -0
  62. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/analyzers/test_pattern_extractor.py +0 -0
  63. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/__init__.py +0 -0
  64. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/init.py +0 -0
  65. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/commands/repro.py +0 -0
  66. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/common/__init__.py +0 -0
  67. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/common/logger_setup.py +0 -0
  68. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/common/logging_utils.py +0 -0
  69. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/common/text_utils.py +0 -0
  70. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/common/utils.py +0 -0
  71. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/comparators/__init__.py +0 -0
  72. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/comparators/plan_comparator.py +0 -0
  73. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/enrichers/constitution_enricher.py +0 -0
  74. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/enrichers/plan_enricher.py +0 -0
  75. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/__init__.py +0 -0
  76. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/contract_generator.py +0 -0
  77. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/plan_generator.py +0 -0
  78. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/protocol_generator.py +0 -0
  79. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/report_generator.py +0 -0
  80. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/generators/workflow_generator.py +0 -0
  81. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/importers/__init__.py +0 -0
  82. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/importers/speckit_converter.py +0 -0
  83. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/importers/speckit_scanner.py +0 -0
  84. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/migrations/__init__.py +0 -0
  85. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/migrations/plan_migrator.py +0 -0
  86. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/__init__.py +0 -0
  87. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/deviation.py +0 -0
  88. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/enforcement.py +0 -0
  89. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/plan.py +0 -0
  90. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/protocol.py +0 -0
  91. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/models/sdd.py +0 -0
  92. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/modes/__init__.py +0 -0
  93. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/modes/detector.py +0 -0
  94. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/modes/router.py +0 -0
  95. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/resources/semgrep/async.yml +0 -0
  96. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/runtime.py +0 -0
  97. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/repository_sync.py +0 -0
  98. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/speckit_sync.py +0 -0
  99. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/sync/watcher.py +0 -0
  100. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/telemetry.py +0 -0
  101. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/__init__.py +0 -0
  102. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/acceptance_criteria.py +0 -0
  103. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/console.py +0 -0
  104. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/enrichment_parser.py +0 -0
  105. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/feature_keys.py +0 -0
  106. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/git.py +0 -0
  107. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/github_annotations.py +0 -0
  108. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/ide_setup.py +0 -0
  109. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/prompts.py +0 -0
  110. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/structured_io.py +0 -0
  111. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/utils/yaml_utils.py +0 -0
  112. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/validators/__init__.py +0 -0
  113. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/validators/contract_validator.py +0 -0
  114. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/validators/fsm.py +0 -0
  115. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/validators/repro_checker.py +0 -0
  116. {specfact_cli-0.9.0 → specfact_cli-0.9.2}/src/specfact_cli/validators/schema.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: specfact-cli
3
- Version: 0.9.0
3
+ Version: 0.9.2
4
4
  Summary: Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions.
5
5
  Project-URL: Homepage, https://github.com/nold-ai/specfact-cli
6
6
  Project-URL: Repository, https://github.com/nold-ai/specfact-cli.git
@@ -353,13 +353,13 @@ pip install specfact-cli
353
353
 
354
354
  ```bash
355
355
  # Modernizing legacy code? (Recommended)
356
- specfact import from-code --repo . --name my-project
356
+ specfact import from-code my-project --repo .
357
357
 
358
358
  # Starting a new project?
359
- specfact plan init --interactive
359
+ specfact plan init my-project --interactive
360
360
 
361
- # Using GitHub Spec-Kit?
362
- specfact import from-spec-kit --repo ./my-project --dry-run
361
+ # Using GitHub Spec-Kit or other tools?
362
+ specfact import from-bridge --repo ./my-project --adapter speckit --write
363
363
  ```
364
364
 
365
365
  That's it! 🎉
@@ -87,13 +87,13 @@ pip install specfact-cli
87
87
 
88
88
  ```bash
89
89
  # Modernizing legacy code? (Recommended)
90
- specfact import from-code --repo . --name my-project
90
+ specfact import from-code my-project --repo .
91
91
 
92
92
  # Starting a new project?
93
- specfact plan init --interactive
93
+ specfact plan init my-project --interactive
94
94
 
95
- # Using GitHub Spec-Kit?
96
- specfact import from-spec-kit --repo ./my-project --dry-run
95
+ # Using GitHub Spec-Kit or other tools?
96
+ specfact import from-bridge --repo ./my-project --adapter speckit --write
97
97
  ```
98
98
 
99
99
  That's it! 🎉
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
4
4
 
5
5
  [project]
6
6
  name = "specfact-cli"
7
- version = "0.9.0"
7
+ version = "0.9.2"
8
8
  description = "Brownfield-first CLI: Reverse engineer legacy Python → specs → enforced contracts. Automate legacy code documentation and prevent modernization regressions."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -53,7 +53,12 @@ You **MUST** consider the user input before proceeding (if not empty).
53
53
 
54
54
  ## Goal
55
55
 
56
- Configure quality gates and enforcement modes for contract validation. This command sets the enforcement preset that determines how contract violations are handled (minimal, balanced, strict).
56
+ Configure quality gates and enforcement modes for contract validation. This command has two subcommands:
57
+
58
+ 1. **`enforce stage`** - Sets the enforcement preset that determines how contract violations are handled (minimal, balanced, strict)
59
+ 2. **`enforce sdd`** - Validates SDD manifest against project bundle and contracts (requires bundle name)
60
+
61
+ This prompt focuses on **`enforce stage`**. For SDD validation, see the `enforce sdd` command which requires a project bundle name.
57
62
 
58
63
  ## Operating Constraints
59
64
 
@@ -61,6 +66,8 @@ Configure quality gates and enforcement modes for contract validation. This comm
61
66
 
62
67
  **Command**: `specfact enforce stage`
63
68
 
69
+ **Note**: This prompt covers `enforce stage` only. The `enforce sdd` subcommand requires a project bundle name (e.g., `specfact enforce sdd legacy-api`) and validates SDD manifests against project bundles.
70
+
64
71
  **Mode Auto-Detection**: The CLI automatically detects operational mode (CI/CD or CoPilot) based on environment. No need to specify `--mode` flag.
65
72
 
66
73
  ## What This Command Does
@@ -141,7 +148,8 @@ specfact enforce stage --preset strict
141
148
  | LOW | Log |
142
149
 
143
150
  **Next Steps**:
144
- - Run validation: `/specfact-cli/specfact-repro`
151
+ - Run validation: `specfact repro`
152
+ - Validate SDD: `specfact enforce sdd <bundle-name>` (requires project bundle)
145
153
  - Review configuration: Check `.specfact/config/enforcement.yaml`
146
154
  ```
147
155
 
@@ -58,18 +58,18 @@ You **MUST** consider the user input before proceeding (if not empty).
58
58
 
59
59
  **For updating features** (after enrichment):
60
60
 
61
- - `specfact plan update-feature --key <key> --title <title> --outcomes <outcomes> --acceptance <acceptance> --constraints <constraints> --confidence <confidence> --draft <true/false> --plan <path>`
61
+ - `specfact plan update-feature --bundle <bundle-name> --key <key> --title <title> --outcomes <outcomes> --acceptance <acceptance> --constraints <constraints> --confidence <confidence> --draft/--no-draft`
62
62
  - Updates existing feature metadata (title, outcomes, acceptance criteria, constraints, confidence, draft status)
63
63
  - Works in CI/CD, Copilot, and interactive modes
64
- - Example: `specfact plan update-feature --key FEATURE-001 --title "New Title" --outcomes "Outcome 1, Outcome 2"`
64
+ - Example: `specfact plan update-feature --bundle legacy-api --key FEATURE-001 --title "New Title" --outcomes "Outcome 1, Outcome 2"`
65
65
 
66
66
  **For adding features**:
67
67
 
68
- - `specfact plan add-feature --key <key> --title <title> --outcomes <outcomes> --acceptance <acceptance> --plan <path>`
68
+ - `specfact plan add-feature --bundle <bundle-name> --key <key> --title <title> --outcomes <outcomes> --acceptance <acceptance>`
69
69
 
70
70
  **For adding stories**:
71
71
 
72
- - `specfact plan add-story --feature <feature-key> --key <story-key> --title <title> --acceptance <acceptance> --story-points <points> --value-points <points> --plan <path>`
72
+ - `specfact plan add-story --bundle <bundle-name> --feature <feature-key> --key <story-key> --title <title> --acceptance <acceptance> --story-points <points> --value-points <points>`
73
73
 
74
74
  **❌ FORBIDDEN**: Direct Python code manipulation like:
75
75
 
@@ -85,7 +85,7 @@ generator.generate(plan_bundle, plan_path) # Bypassing CLI
85
85
 
86
86
  ```bash
87
87
  # ✅ ALWAYS DO THIS:
88
- specfact plan update-feature --key FEATURE-001 --title "New Title" --plan <path>
88
+ specfact plan update-feature --bundle legacy-api --key FEATURE-001 --title "New Title"
89
89
  ```
90
90
 
91
91
  ## ⏸️ Wait States: User Input Required
@@ -197,8 +197,8 @@ specfact import from-code --repo <path> --name <name> --entry-point <subdirector
197
197
  **Apply enrichments via CLI using the `--enrichment` flag**:
198
198
 
199
199
  ```bash
200
- # Apply enrichment report to refine the auto-detected plan bundle
201
- specfact import from-code --repo <path> --name <name> --enrichment <enrichment-report-path>
200
+ # Apply enrichment report to refine the auto-detected project bundle
201
+ specfact import from-code <bundle-name> --repo <path> --enrichment <enrichment-report-path>
202
202
  ```
203
203
 
204
204
  **The `--enrichment` flag**:
@@ -250,9 +250,8 @@ specfact import from-code --repo <path> --name <name> --enrichment <enrichment-r
250
250
  Extract arguments from user input:
251
251
 
252
252
  - `--repo PATH` - Repository path (default: current directory)
253
- - `--name NAME` - Custom plan name (will be sanitized for filesystem, optional, default: "auto-derived")
253
+ - `BUNDLE_NAME` - Project bundle name (required positional argument, e.g., `legacy-api`, `auth-module`)
254
254
  - `--confidence FLOAT` - Minimum confidence score (0.0-1.0, default: 0.5)
255
- - `--out PATH` - Output plan bundle path (optional, default: `.specfact/plans/<name>-<timestamp>.bundle.<format>`)
256
255
  - `--report PATH` - Analysis report path (optional, default: `.specfact/reports/brownfield/analysis-<timestamp>.md`)
257
256
  - `--shadow-only` - Observe mode without enforcing (optional)
258
257
  - `--key-format {classname|sequential}` - Feature key format (default: `classname`)
@@ -262,13 +261,13 @@ Extract arguments from user input:
262
261
  - Incremental modernization: Modernize one part of the codebase at a time
263
262
  - Example: `--entry-point projects/api-service` analyzes only `projects/api-service/` and its subdirectories
264
263
 
265
- **Important**: If `--name` is not provided, **ask the user interactively** for a meaningful plan name and **WAIT for their response**. The name will be automatically sanitized (lowercased, spaces/special chars removed) for filesystem persistence.
264
+ **Important**: Bundle name is **required**. If not provided, **ask the user interactively** for a bundle name and **WAIT for their response**. Use kebab-case (e.g., `legacy-api`, `auth-module`).
266
265
 
267
- **WAIT STATE**: If `--name` is missing, you MUST:
266
+ **WAIT STATE**: If bundle name is missing, you MUST:
268
267
 
269
- 1. Ask: "What name would you like to use for this plan? (e.g., 'API Client v2', 'User Authentication', 'Payment Processing')"
268
+ 1. Ask: "What bundle name would you like to use? (e.g., 'legacy-api', 'auth-module', 'payment-service')"
270
269
  2. **STOP and WAIT** for user response
271
- 3. **DO NOT continue** until user provides a name
270
+ 3. **DO NOT continue** until user provides a bundle name
272
271
 
273
272
  For single quotes in args like "I'm Groot", use escape syntax: e.g `'I'\''m Groot'` (or double-quote if possible: `"I'm Groot"`).
274
273
 
@@ -278,17 +277,17 @@ For single quotes in args like "I'm Groot", use escape syntax: e.g `'I'\''m Groo
278
277
 
279
278
  ```bash
280
279
  # Full repository analysis
281
- specfact import from-code --repo <repo_path> --name <plan_name> --confidence <confidence>
280
+ specfact import from-code <bundle-name> --repo <repo_path> --confidence <confidence>
282
281
 
283
282
  # Partial repository analysis (analyze only specific subdirectory)
284
- specfact import from-code --repo <repo_path> --name <plan_name> --entry-point <subdirectory> --confidence <confidence>
283
+ specfact import from-code <bundle-name> --repo <repo_path> --entry-point <subdirectory> --confidence <confidence>
285
284
  ```
286
285
 
287
286
  **Note**: Mode is auto-detected by the CLI. No need to specify `--mode` flag.
288
287
 
289
288
  **Capture CLI output**:
290
289
 
291
- - Plan bundle path: `.specfact/plans/<name>-<timestamp>.bundle.<format>`
290
+ - Project bundle directory: `.specfact/projects/<bundle-name>/`
292
291
  - Analysis report path: `.specfact/reports/brownfield/analysis-<timestamp>.md`
293
292
  - Metadata: feature counts, story counts, average confidence, execution time
294
293
  - **Deduplication summary**: "✓ Removed N duplicate features from plan bundle" (if duplicates were found during import)
@@ -340,12 +339,8 @@ The CLI automatically deduplicates features during import using normalized key m
340
339
  - Semantic insights and recommendations
341
340
 
342
341
  4. **Save enrichment report** to the proper location:
343
- - Extract the plan bundle path from CLI output (e.g., `.specfact/plans/specfact-cli.2025-11-17T09-26-47.bundle.<format>`)
344
- - Derive enrichment report path by:
345
- - Taking the plan bundle filename (e.g., `specfact-cli.2025-11-17T09-26-47.bundle.<format>`)
346
- - Replacing `.bundle.<format>` with `.enrichment.md` (e.g., `specfact-cli.2025-11-17T09-26-47.enrichment.md`)
347
- - Placing it in `.specfact/reports/enrichment/` directory
348
- - Full path example: `.specfact/reports/enrichment/specfact-cli.2025-11-17T09-26-47.enrichment.md`
342
+ - Use bundle name from CLI output (e.g., `legacy-api`)
343
+ - Derive enrichment report path: `.specfact/reports/enrichment/<bundle-name>-<timestamp>.enrichment.md`
349
344
  - **Ensure the directory exists**: Create `.specfact/reports/enrichment/` if it doesn't exist
350
345
 
351
346
  **What NOT to do**:
@@ -360,29 +355,24 @@ The CLI automatically deduplicates features during import using normalized key m
360
355
 
361
356
  **If enrichment was generated**:
362
357
 
363
- 1. **Save enrichment report** to the enrichment reports directory with a name that matches the plan bundle:
358
+ 1. **Save enrichment report** to the enrichment reports directory:
364
359
  - Location: `.specfact/reports/enrichment/`
365
- - Naming: Use the same name and timestamp as the plan bundle, replacing `.bundle.<format>` with `.enrichment.md`
366
- - Example: If plan bundle is `specfact-cli.2025-11-17T09-26-47.bundle.<format>`, save enrichment as `specfact-cli.2025-11-17T09-26-47.enrichment.md`
367
- - Full path: `.specfact/reports/enrichment/specfact-cli.2025-11-17T09-26-47.enrichment.md`
360
+ - Naming: `<bundle-name>-<timestamp>.enrichment.md`
361
+ - Example: `.specfact/reports/enrichment/legacy-api-2025-11-17T09-26-47.enrichment.md`
368
362
 
369
363
  2. **Execute CLI with `--enrichment` flag**:
370
364
 
371
365
  ```bash
372
- specfact import from-code --repo <repo_path> --name <plan_name> --enrichment <enrichment-report-path>
366
+ specfact import from-code <bundle-name> --repo <repo_path> --enrichment <enrichment-report-path>
373
367
  ```
374
368
 
375
369
  3. **The CLI will**:
376
- - Load the original plan bundle (if it exists, derived from enrichment report path)
370
+ - Load the original project bundle from `.specfact/projects/<bundle-name>/`
377
371
  - Parse the enrichment report
378
- - Apply missing features to the plan bundle
372
+ - Apply missing features to the project bundle
379
373
  - Adjust confidence scores
380
374
  - Add business context
381
- - Validate and write the enriched plan bundle as a **new file** with clear naming:
382
- - Format: `<name>.<original-timestamp>.enriched.<enrichment-timestamp>.bundle.<format>`
383
- - Example: `specfact-cli.2025-11-17T09-26-47.enriched.2025-11-17T11-15-29.bundle.<format>`
384
- - The original plan bundle remains unchanged
385
- - The enriched plan is stored as a separate file for comparison and versioning
375
+ - Validate and save the enriched project bundle (updates existing bundle)
386
376
 
387
377
  **If no enrichment**:
388
378
 
@@ -410,11 +400,9 @@ If `--report` is provided, generate a Markdown import report:
410
400
 
411
401
  ### 6. Present Results
412
402
 
413
- **Present the CLI-generated plan bundle** to the user:
403
+ **Present the CLI-generated project bundle** to the user:
414
404
 
415
- - **Plan bundle location**: Show where the CLI wrote the YAML file
416
- - **Original plan** (if enrichment was applied): Show the original plan bundle path
417
- - **Enriched plan** (if enrichment was applied): Show the enriched plan bundle path with clear naming
405
+ - **Project bundle location**: `.specfact/projects/<bundle-name>/`
418
406
  - **Feature summary**: List features from CLI output with confidence scores
419
407
  - **Story summary**: List stories from CLI output per feature
420
408
  - **CLI metadata**: Execution time, file counts, validation results
@@ -425,8 +413,7 @@ If `--report` is provided, generate a Markdown import report:
425
413
  ```markdown
426
414
  ✓ Import complete!
427
415
 
428
- Original plan: specfact-cli.2025-11-17T09-26-47.bundle.<format>
429
- Enriched plan: specfact-cli.2025-11-17T09-26-47.enriched.2025-11-17T11-15-29.bundle.<format>
416
+ Project bundle: .specfact/projects/legacy-api/
430
417
 
431
418
  CLI Analysis Results:
432
419
  - Features identified: 19
@@ -604,7 +591,7 @@ When comparing imported plans with main plans:
604
591
 
605
592
  To compare plans, normalize feature keys by removing prefixes and underscores, then match by normalized key.
606
593
 
607
- **Important**: This is a **one-way import** - it imports from code into SpecFact format. It does NOT perform consistency checking on Spec-Kit artifacts. For Spec-Kit artifact consistency checking, use Spec-Kit's `/speckit.analyze` command instead.
594
+ **Important**: This is a **one-way import** - it imports from code into SpecFact modular project bundle format. For external tool integration (Spec-Kit, Linear, Jira), use `specfact import from-bridge --adapter <adapter>` instead.
608
595
 
609
596
  ## Constitution Bootstrap (Optional)
610
597
 
@@ -67,13 +67,13 @@ Add a new feature to an existing plan bundle. The feature will be added with the
67
67
 
68
68
  The `specfact plan add-feature` command:
69
69
 
70
- 1. **Loads** the existing plan bundle (default: `.specfact/plans/main.bundle.<format>` or active plan)
71
- 2. **Validates** the plan bundle structure
70
+ 1. **Loads** the existing project bundle from `.specfact/projects/<bundle-name>/`
71
+ 2. **Validates** the project bundle structure
72
72
  3. **Checks** if the feature key already exists (prevents duplicates)
73
73
  4. **Creates** a new feature with specified metadata
74
- 5. **Adds** the feature to the plan bundle
75
- 6. **Validates** the updated plan bundle
76
- 7. **Saves** the updated plan bundle
74
+ 5. **Adds** the feature to the project bundle (saves to `features/FEATURE-XXX.yaml`)
75
+ 6. **Validates** the updated project bundle
76
+ 7. **Saves** the updated project bundle
77
77
 
78
78
  ## Execution Steps
79
79
 
@@ -81,11 +81,11 @@ The `specfact plan add-feature` command:
81
81
 
82
82
  **Parse user input** to extract:
83
83
 
84
+ - `--bundle <bundle-name>` - Project bundle name (required, e.g., `legacy-api`)
84
85
  - Feature key (required, e.g., `FEATURE-001`)
85
86
  - Feature title (required)
86
87
  - Outcomes (optional, comma-separated)
87
88
  - Acceptance criteria (optional, comma-separated)
88
- - Plan bundle path (optional, defaults to active plan or `.specfact/plans/main.bundle.<format>`)
89
89
 
90
90
  **WAIT STATE**: If required arguments are missing, ask the user:
91
91
 
@@ -100,17 +100,17 @@ Please provide these values:
100
100
 
101
101
  ### 2. Check Plan Bundle Existence
102
102
 
103
- **Execute CLI** to check if plan exists:
103
+ **WAIT STATE**: If `--bundle` is missing, ask user for bundle name and **WAIT**:
104
104
 
105
- ```bash
106
- # Check if default plan exists
107
- specfact plan select
105
+ ```text
106
+ "Which project bundle should I use? (e.g., 'legacy-api', 'auth-module')
107
+ [WAIT FOR USER RESPONSE - DO NOT CONTINUE]"
108
108
  ```
109
109
 
110
- **If plan doesn't exist**:
110
+ **If bundle doesn't exist**:
111
111
 
112
- - Report error: "Default plan not found. Create one with: `specfact plan init --interactive`"
113
- - **WAIT STATE**: Ask user if they want to create a new plan or specify a different path
112
+ - Report error: "Project bundle not found. Create one with: `specfact plan init <bundle-name>`"
113
+ - **WAIT STATE**: Ask user if they want to create a new bundle or specify a different bundle name
114
114
 
115
115
  ### 3. Execute Add Feature Command
116
116
 
@@ -118,15 +118,15 @@ specfact plan select
118
118
 
119
119
  ```bash
120
120
  # Basic usage
121
- specfact plan add-feature --key FEATURE-001 --title "Feature Title" --plan <plan_path>
121
+ specfact plan add-feature --bundle <bundle-name> --key FEATURE-001 --title "Feature Title"
122
122
 
123
123
  # With outcomes and acceptance
124
124
  specfact plan add-feature \
125
+ --bundle <bundle-name> \
125
126
  --key FEATURE-001 \
126
127
  --title "Feature Title" \
127
128
  --outcomes "Outcome 1, Outcome 2" \
128
- --acceptance "Criterion 1, Criterion 2" \
129
- --plan <plan_path>
129
+ --acceptance "Criterion 1, Criterion 2"
130
130
  ```
131
131
 
132
132
  **Capture from CLI**:
@@ -141,7 +141,7 @@ specfact plan add-feature \
141
141
  **Common errors**:
142
142
 
143
143
  - **Feature key already exists**: Report error and suggest using `specfact plan update-feature` instead
144
- - **Plan bundle not found**: Report error and suggest creating plan with `specfact plan init`
144
+ - **Project bundle not found**: Report error and suggest creating bundle with `specfact plan init <bundle-name>`
145
145
  - **Invalid plan structure**: Report validation error
146
146
 
147
147
  ### 5. Report Completion
@@ -155,7 +155,7 @@ specfact plan add-feature \
155
155
  **Title**: Feature Title
156
156
  **Outcomes**: Outcome 1, Outcome 2
157
157
  **Acceptance**: Criterion 1, Criterion 2
158
- **Plan Bundle**: `.specfact/plans/main.bundle.<format>`
158
+ **Project Bundle**: `.specfact/projects/<bundle-name>/`
159
159
 
160
160
  **Next Steps**:
161
161
  - Add stories to this feature: `/specfact-cli/specfact-plan-add-story`
@@ -133,7 +133,7 @@ specfact plan add-story \
133
133
  --feature FEATURE-001 \
134
134
  --key STORY-001 \
135
135
  --title "Story Title" \
136
- --plan <plan_path>
136
+ --bundle <bundle-name>
137
137
 
138
138
  # With acceptance criteria and points
139
139
  specfact plan add-story \
@@ -143,7 +143,7 @@ specfact plan add-story \
143
143
  --acceptance "Criterion 1, Criterion 2" \
144
144
  --story-points 5 \
145
145
  --value-points 3 \
146
- --plan <plan_path>
146
+ --bundle <bundle-name>
147
147
  ```
148
148
 
149
149
  **Capture from CLI**:
@@ -18,7 +18,7 @@ You **MUST** consider the user input before proceeding (if not empty).
18
18
  ### Rules
19
19
 
20
20
  1. **ALWAYS execute CLI first**: Run `specfact plan compare` before any comparison - execute the CLI command before any other operations
21
- 2. **ALWAYS use non-interactive mode for CI/CD**: When executing CLI commands, use `--non-interactive` flag to avoid interactive prompts that can cause timeouts in Copilot environments
21
+ 2. **ALWAYS use non-interactive mode for CI/CD**: When executing CLI commands, use `--no-interactive` flag to avoid interactive prompts that can cause timeouts in Copilot environments
22
22
  3. **ALWAYS use tools for read/write**: Use file reading tools (e.g., `read_file`) to read artifacts for display purposes only. Use CLI commands for all write operations. Never use direct file manipulation.
23
23
  4. **NEVER modify .specfact folder directly**: Do NOT create, modify, or delete any files in `.specfact/` folder directly. All operations must go through the CLI.
24
24
  5. **NEVER write code**: Do not implement comparison logic - the CLI handles this
@@ -52,9 +52,9 @@ You **MUST** consider the user input before proceeding (if not empty).
52
52
 
53
53
  ## Goal
54
54
 
55
- Compare a manual plan bundle with an auto-derived plan bundle to detect deviations, mismatches, and missing features. This command helps identify gaps between planned features and actual implementation, ensuring alignment between specification and code.
55
+ Compare two project bundles (or legacy plan bundles) to detect deviations, mismatches, and missing features. This command helps identify gaps between planned features and actual implementation, ensuring alignment between specification and code.
56
56
 
57
- **Note**: This is a **read-only comparison** operation - it generates comparison reports but does not modify plan bundles.
57
+ **Note**: This is a **read-only comparison** operation - it generates comparison reports but does not modify bundles. Works with both modular project bundles (`.specfact/projects/<bundle-name>/`) and legacy monolithic bundles (`.specfact/plans/*.bundle.<format>`).
58
58
 
59
59
  ## Action Required
60
60
 
@@ -75,10 +75,11 @@ Compare a manual plan bundle with an auto-derived plan bundle to detect deviatio
75
75
  - Parse the CLI table output to get plan names for the specified numbers
76
76
  - Extract the full plan file names from the table
77
77
 
78
- - **For CI/CD/non-interactive use**: Use `--non-interactive` with filters:
79
- ```
80
- specfact plan select --non-interactive --current
81
- specfact plan select --non-interactive --last 1
78
+ - **For CI/CD/non-interactive use**: Use `--no-interactive` with filters:
79
+
80
+ ```bash
81
+ specfact plan select --no-interactive --current
82
+ specfact plan select --no-interactive --last 1
82
83
  ```
83
84
 
84
85
  2. **Get full plan paths using CLI**:
@@ -87,13 +88,14 @@ Compare a manual plan bundle with an auto-derived plan bundle to detect deviatio
87
88
  specfact plan select <plan_number>
88
89
  ```
89
90
 
90
- - This will output the full plan name/path
91
- - Use this to construct the full path: `.specfact/plans/<plan_name>`
91
+ - This will output the full bundle name/path
92
+ - Use this to construct the full path: `.specfact/projects/<bundle-name>/` (for project bundles) or `.specfact/plans/<plan_name>` (for legacy bundles)
92
93
 
93
- - **For CI/CD/non-interactive use**: Use `--non-interactive` with filters:
94
- ```
95
- specfact plan select --non-interactive --current
96
- specfact plan select --non-interactive --last 1
94
+ - **For CI/CD/non-interactive use**: Use `--no-interactive` with filters:
95
+
96
+ ```bash
97
+ specfact plan select --no-interactive --current
98
+ specfact plan select --no-interactive --last 1
97
99
  ```
98
100
 
99
101
  **If user input contains plan names** (e.g., "main.bundle.<format> vs auto-derived.bundle.<format>"):
@@ -105,10 +107,10 @@ Compare a manual plan bundle with an auto-derived plan bundle to detect deviatio
105
107
 
106
108
  **If arguments missing**: Ask user interactively for each missing argument and **WAIT for their response**:
107
109
 
108
- 1. **Manual plan path**: "Which manual plan to compare? (Enter plan number, plan name, or path. Default: .specfact/plans/main.bundle.<format>)"
110
+ 1. **Manual bundle path**: "Which manual bundle to compare? (Enter bundle name, plan number, or path. Default: active bundle or .specfact/projects/main/)"
109
111
  - **[WAIT FOR USER RESPONSE - DO NOT CONTINUE]**
110
112
 
111
- 2. **Auto plan path**: "Which auto-derived plan to compare? (Enter plan number, plan name, or path. Default: latest in .specfact/plans/)"
113
+ 2. **Auto bundle path**: "Which auto-derived bundle to compare? (Enter bundle name, plan number, or path. Default: latest in .specfact/projects/)"
112
114
  - **[WAIT FOR USER RESPONSE - DO NOT CONTINUE]**
113
115
 
114
116
  3. **Output format**: "Output format? (1) Markdown, (2) JSON, (3) YAML (default: markdown)"
@@ -133,7 +135,7 @@ Compare a manual plan bundle with an auto-derived plan bundle to detect deviatio
133
135
  ## Command
134
136
 
135
137
  ```bash
136
- specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yaml}] [--out PATH]
138
+ specfact plan compare [--manual PATH] [--auto PATH] [--output-format {markdown|json|yaml}] [--out PATH]
137
139
  ```
138
140
 
139
141
  **Note**: Mode is auto-detected by the CLI. No need to specify `--mode` flag.
@@ -144,11 +146,16 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
144
146
 
145
147
  **Arguments:**
146
148
 
147
- - `--manual PATH` - Manual plan bundle path (default: `.specfact/plans/main.bundle.<format>`) - **ASK USER if default not found**
148
- - `--auto PATH` - Auto-derived plan bundle path (default: latest in `.specfact/reports/brownfield/`) - **ASK USER if default not found**
149
- - `--format {markdown|json|yaml}` - Output format (default: `markdown`) - **ASK USER if not specified**
149
+ - `--manual PATH` - Manual bundle path (project bundle directory or legacy plan file). Default: active bundle or `.specfact/projects/main/` - **ASK USER if default not found**
150
+ - `--auto PATH` - Auto-derived bundle path (project bundle directory or legacy plan file). Default: latest in `.specfact/projects/` - **ASK USER if default not found**
151
+ - `--output-format {markdown|json|yaml}` - Output format (default: `markdown`) - **ASK USER if not specified**
150
152
  - `--out PATH` - Output file path (optional, default: auto-generated in `.specfact/reports/comparison/`)
151
153
 
154
+ **Note**: Paths can be:
155
+
156
+ - Project bundle directories: `.specfact/projects/<bundle-name>/` (modular format)
157
+ - Legacy plan files: `.specfact/plans/*.bundle.<format>` (monolithic format, for backward compatibility)
158
+
152
159
  **What it does:**
153
160
 
154
161
  1. Loads and validates both plan bundles (manual and auto-derived)
@@ -181,13 +188,14 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
181
188
  specfact plan select <plan_number>
182
189
  ```
183
190
 
184
- - Parse the CLI output to get the full plan name
185
- - Construct full path: `.specfact/plans/<plan_name>`
191
+ - Parse the CLI output to get the full bundle name
192
+ - Construct full path: `.specfact/projects/<bundle-name>/` (for project bundles) or `.specfact/plans/<plan_name>` (for legacy bundles)
186
193
 
187
- - **For CI/CD/non-interactive use**: Use `--non-interactive` with filters:
188
- ```
189
- specfact plan select --non-interactive --current
190
- specfact plan select --non-interactive --last 1
194
+ - **For CI/CD/non-interactive use**: Use `--no-interactive` with filters:
195
+
196
+ ```bash
197
+ specfact plan select --no-interactive --current
198
+ specfact plan select --no-interactive --last 1
191
199
  ```
192
200
 
193
201
  - **If user input contains plan names** (e.g., "main.bundle.<format> vs auto-derived.bundle.<format>"):
@@ -198,14 +206,14 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
198
206
 
199
207
  **Step 2**: Resolve manual plan path.
200
208
 
201
- - **If plan number/name provided**: Use CLI to resolve (see Step 1)
202
- - **If missing**: Check if default path (`.specfact/plans/main.bundle.<format>`) exists using CLI
203
- - **Verify using CLI**: Attempt to use the path with `specfact plan compare` - if it fails, the file doesn't exist
209
+ - **If bundle name/plan number provided**: Use CLI to resolve (see Step 1)
210
+ - **If missing**: Check if default path (`.specfact/projects/main/` or `.specfact/plans/main.bundle.<format>`) exists using CLI
211
+ - **Verify using CLI**: Attempt to use the path with `specfact plan compare` - if it fails, the bundle doesn't exist
204
212
  - **If not exists**: Ask user and **WAIT**:
205
213
 
206
214
  ```text
207
- "Manual plan not found at default location. Enter plan number, plan name, or path to manual plan bundle,
208
- or create one with `specfact plan init --interactive`?
215
+ "Manual bundle not found at default location. Enter bundle name, plan number, or path to manual bundle,
216
+ or create one with `specfact plan init <bundle-name>`?
209
217
  [WAIT FOR USER RESPONSE - DO NOT CONTINUE]"
210
218
  ```
211
219
 
@@ -220,7 +228,7 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
220
228
  ```
221
229
 
222
230
  - **Parse CLI output** to find latest auto-derived plan (by modification date)
223
- - **For CI/CD/non-interactive**: Use `specfact plan select --non-interactive --last 1` to get most recent plan
231
+ - **For CI/CD/non-interactive**: Use `specfact plan select --no-interactive --last 1` to get most recent plan
224
232
  - **If found**: Ask user and **WAIT**:
225
233
 
226
234
  ```text
@@ -231,12 +239,12 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
231
239
  - **If not found**: Ask user and **WAIT**:
232
240
 
233
241
  ```text
234
- "No auto-derived plans found. Enter plan number, plan name, or path to auto-derived plan bundle,
235
- or generate one with `specfact import from-code --repo . --name my-project`?
242
+ "No auto-derived bundles found. Enter bundle name, plan number, or path to auto-derived bundle,
243
+ or generate one with `specfact import from-code <bundle-name> --repo .`?
236
244
  [WAIT FOR USER RESPONSE - DO NOT CONTINUE]"
237
245
  ```
238
246
 
239
- **Step 3**: Check if `--format` is specified.
247
+ **Step 3**: Check if `--output-format` is specified.
240
248
 
241
249
  - **If missing**: Ask user and **WAIT**:
242
250
 
@@ -278,15 +286,16 @@ specfact plan compare [--manual PATH] [--auto PATH] [--format {markdown|json|yam
278
286
  **⚠️ CRITICAL**: Use the resolved file paths (not plan numbers) in the CLI command:
279
287
 
280
288
  ```bash
281
- specfact plan compare --manual <MANUAL_PATH> --auto <AUTO_PATH> --format <FORMAT> --out <OUT_PATH>
289
+ specfact plan compare --manual <MANUAL_PATH> --auto <AUTO_PATH> --output-format <FORMAT> --out <OUT_PATH>
282
290
  ```
283
291
 
284
- **Example**: If user said "19 vs 20", and CLI resolved them to:
292
+ **Example**: If user said "legacy-api vs modernized-api", execute:
285
293
 
286
- - Plan 19: `specfact-import-test-v2.2025-11-17T13-53-31.bundle.<format>`
287
- - Plan 20: `specfact-import-test-v2.2025-11-17T13-53-31.enriched.2025-11-17T13-55-40.bundle.<format>`
294
+ ```bash
295
+ specfact plan compare --manual .specfact/projects/legacy-api/ --auto .specfact/projects/modernized-api/
296
+ ```
288
297
 
289
- Then execute:
298
+ **Example**: If user said "19 vs 20" (legacy plan numbers), and CLI resolved them to legacy plan files:
290
299
 
291
300
  ```bash
292
301
  specfact plan compare --manual .specfact/plans/specfact-import-test-v2.2025-11-17T13-53-31.bundle.<format> --auto .specfact/plans/specfact-import-test-v2.2025-11-17T13-53-31.enriched.2025-11-17T13-55-40.bundle.<format>
@@ -306,14 +315,14 @@ specfact plan compare --manual .specfact/plans/specfact-import-test-v2.2025-11-1
306
315
  ```bash
307
316
  SpecFact CLI - Plan Comparator
308
317
 
309
- Manual Plan: .specfact/plans/main.bundle.<format>
310
- Auto Plan: .specfact/reports/brownfield/auto-derived-2025-11-02T12-00-00.bundle.<format>
318
+ Manual Bundle: .specfact/projects/main/
319
+ Auto Bundle: .specfact/projects/legacy-api/
311
320
  Total Deviations: 15
312
321
 
313
322
  Comparison Results
314
323
 
315
- Manual Plan: .specfact/plans/main.bundle.<format>
316
- Auto Plan: .specfact/reports/brownfield/auto-derived-2025-11-02T12-00-00.bundle.<format>
324
+ Manual Bundle: .specfact/projects/main/
325
+ Auto Bundle: .specfact/projects/legacy-api/
317
326
  Total Deviations: 15
318
327
 
319
328
  Deviation Summary:
@@ -358,7 +367,7 @@ Fix the blocking deviations or adjust enforcement config
358
367
  **ALWAYS execute the specfact CLI** to perform the comparison:
359
368
 
360
369
  ```bash
361
- specfact plan compare --manual <manual_path> --auto <auto_path> --format <format> --out <output_path>
370
+ specfact plan compare --manual <manual_path> --auto <auto_path> --output-format <format> --out <output_path>
362
371
  ```
363
372
 
364
373
  **The CLI performs**: