elspais 0.9.3__tar.gz → 0.11.0__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 (165) hide show
  1. {elspais-0.9.3 → elspais-0.11.0}/CHANGELOG.md +75 -0
  2. {elspais-0.9.3 → elspais-0.11.0}/PKG-INFO +33 -18
  3. {elspais-0.9.3 → elspais-0.11.0}/README.md +21 -17
  4. elspais-0.11.0/docs/commands.md +672 -0
  5. {elspais-0.9.3 → elspais-0.11.0}/docs/multi-repo.md +35 -8
  6. elspais-0.11.0/docs/trace-view.md +316 -0
  7. {elspais-0.9.3 → elspais-0.11.0}/pyproject.toml +20 -1
  8. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/cli.py +99 -1
  9. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/hash_cmd.py +72 -26
  10. elspais-0.11.0/src/elspais/commands/reformat_cmd.py +458 -0
  11. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/trace.py +157 -3
  12. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/validate.py +44 -16
  13. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/models.py +2 -0
  14. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/parser.py +68 -24
  15. elspais-0.11.0/src/elspais/reformat/__init__.py +50 -0
  16. elspais-0.11.0/src/elspais/reformat/detector.py +119 -0
  17. elspais-0.11.0/src/elspais/reformat/hierarchy.py +246 -0
  18. elspais-0.11.0/src/elspais/reformat/line_breaks.py +220 -0
  19. elspais-0.11.0/src/elspais/reformat/prompts.py +123 -0
  20. elspais-0.11.0/src/elspais/reformat/transformer.py +264 -0
  21. elspais-0.11.0/src/elspais/sponsors/__init__.py +432 -0
  22. elspais-0.11.0/src/elspais/trace_view/__init__.py +54 -0
  23. elspais-0.11.0/src/elspais/trace_view/coverage.py +183 -0
  24. elspais-0.11.0/src/elspais/trace_view/generators/__init__.py +12 -0
  25. elspais-0.11.0/src/elspais/trace_view/generators/base.py +329 -0
  26. elspais-0.11.0/src/elspais/trace_view/generators/csv.py +122 -0
  27. elspais-0.11.0/src/elspais/trace_view/generators/markdown.py +175 -0
  28. elspais-0.11.0/src/elspais/trace_view/html/__init__.py +31 -0
  29. elspais-0.11.0/src/elspais/trace_view/html/generator.py +1006 -0
  30. elspais-0.11.0/src/elspais/trace_view/html/templates/base.html +283 -0
  31. elspais-0.11.0/src/elspais/trace_view/html/templates/components/code_viewer_modal.html +14 -0
  32. elspais-0.11.0/src/elspais/trace_view/html/templates/components/file_picker_modal.html +20 -0
  33. elspais-0.11.0/src/elspais/trace_view/html/templates/components/legend_modal.html +69 -0
  34. elspais-0.11.0/src/elspais/trace_view/html/templates/components/review_panel.html +118 -0
  35. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/help/help-panel.json +244 -0
  36. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/help/onboarding.json +77 -0
  37. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/help/tooltips.json +237 -0
  38. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-comments.js +928 -0
  39. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-data.js +961 -0
  40. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-help.js +679 -0
  41. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-init.js +177 -0
  42. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-line-numbers.js +429 -0
  43. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-packages.js +1029 -0
  44. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-position.js +540 -0
  45. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-resize.js +115 -0
  46. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-status.js +659 -0
  47. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review/review-sync.js +992 -0
  48. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/review-styles.css +2238 -0
  49. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/scripts.js +1741 -0
  50. elspais-0.11.0/src/elspais/trace_view/html/templates/partials/styles.css +1756 -0
  51. elspais-0.11.0/src/elspais/trace_view/models.py +353 -0
  52. elspais-0.11.0/src/elspais/trace_view/review/__init__.py +60 -0
  53. elspais-0.11.0/src/elspais/trace_view/review/branches.py +1149 -0
  54. elspais-0.11.0/src/elspais/trace_view/review/models.py +1205 -0
  55. elspais-0.11.0/src/elspais/trace_view/review/position.py +609 -0
  56. elspais-0.11.0/src/elspais/trace_view/review/server.py +1056 -0
  57. elspais-0.11.0/src/elspais/trace_view/review/status.py +470 -0
  58. elspais-0.11.0/src/elspais/trace_view/review/storage.py +1367 -0
  59. elspais-0.11.0/src/elspais/trace_view/scanning.py +213 -0
  60. elspais-0.11.0/src/elspais/trace_view/specs/README.md +84 -0
  61. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00001-template-architecture.md +36 -0
  62. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00002-css-extraction.md +37 -0
  63. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00003-js-extraction.md +43 -0
  64. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00004-build-embedding.md +40 -0
  65. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00005-test-format.md +78 -0
  66. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00010-review-data-models.md +33 -0
  67. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00011-review-storage.md +33 -0
  68. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00012-position-resolution.md +33 -0
  69. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00013-git-branches.md +31 -0
  70. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00014-review-api-server.md +31 -0
  71. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00015-status-modifier.md +27 -0
  72. elspais-0.11.0/src/elspais/trace_view/specs/tv-d00016-js-integration.md +33 -0
  73. elspais-0.11.0/src/elspais/trace_view/specs/tv-p00001-html-generator.md +33 -0
  74. elspais-0.11.0/src/elspais/trace_view/specs/tv-p00002-review-system.md +29 -0
  75. {elspais-0.9.3 → elspais-0.11.0}/tests/test_parser_resilience.py +216 -0
  76. elspais-0.11.0/tests/test_sponsors.py +491 -0
  77. elspais-0.11.0/tests/test_trace_view/__init__.py +1 -0
  78. elspais-0.11.0/tests/test_trace_view/test_integration.py +225 -0
  79. {elspais-0.9.3 → elspais-0.11.0}/tests/test_validate_json.py +132 -1
  80. {elspais-0.9.3 → elspais-0.11.0}/.gitignore +0 -0
  81. {elspais-0.9.3 → elspais-0.11.0}/LICENSE +0 -0
  82. {elspais-0.9.3 → elspais-0.11.0}/docs/configuration.md +0 -0
  83. {elspais-0.9.3 → elspais-0.11.0}/docs/patterns.md +0 -0
  84. {elspais-0.9.3 → elspais-0.11.0}/docs/roadmap/llm-reformatting-integration.md +0 -0
  85. {elspais-0.9.3 → elspais-0.11.0}/docs/roadmap/new-format.md +0 -0
  86. {elspais-0.9.3 → elspais-0.11.0}/docs/roadmap/plantuml-diagram-support.md +0 -0
  87. {elspais-0.9.3 → elspais-0.11.0}/docs/roadmap/requirements-format-enhancements.md +0 -0
  88. {elspais-0.9.3 → elspais-0.11.0}/docs/rules.md +0 -0
  89. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/__init__.py +0 -0
  90. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/__main__.py +0 -0
  91. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/__init__.py +0 -0
  92. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/analyze.py +0 -0
  93. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/changed.py +0 -0
  94. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/config_cmd.py +0 -0
  95. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/edit.py +0 -0
  96. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/index.py +0 -0
  97. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/init.py +0 -0
  98. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/commands/rules_cmd.py +0 -0
  99. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/config/__init__.py +0 -0
  100. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/config/defaults.py +0 -0
  101. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/config/loader.py +0 -0
  102. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/__init__.py +0 -0
  103. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/content_rules.py +0 -0
  104. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/git.py +0 -0
  105. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/hasher.py +0 -0
  106. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/patterns.py +0 -0
  107. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/core/rules.py +0 -0
  108. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/mcp/__init__.py +0 -0
  109. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/mcp/__main__.py +0 -0
  110. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/mcp/context.py +0 -0
  111. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/mcp/serializers.py +0 -0
  112. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/mcp/server.py +0 -0
  113. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/testing/__init__.py +0 -0
  114. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/testing/config.py +0 -0
  115. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/testing/mapper.py +0 -0
  116. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/testing/result_parser.py +0 -0
  117. {elspais-0.9.3 → elspais-0.11.0}/src/elspais/testing/scanner.py +0 -0
  118. {elspais-0.9.3 → elspais-0.11.0}/tests/conftest.py +0 -0
  119. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/assertions/.elspais.toml +0 -0
  120. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/assertions/spec/dev-impl.md +0 -0
  121. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/assertions/spec/prd-sample.md +0 -0
  122. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/associated-repo/.elspais.toml +0 -0
  123. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/associated-repo/spec/dev-sponsor.md +0 -0
  124. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/associated-repo/spec/prd-sponsor.md +0 -0
  125. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/fda-style/.elspais.toml +0 -0
  126. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/fda-style/spec/dev-impl.md +0 -0
  127. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/fda-style/spec/prd-core.md +0 -0
  128. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/.elspais.toml +0 -0
  129. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/database/schema.sql +0 -0
  130. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/spec/INDEX.md +0 -0
  131. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/spec/dev-impl.md +0 -0
  132. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/spec/ops-deploy.md +0 -0
  133. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/hht-like/spec/prd-core.md +0 -0
  134. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/broken-links/.elspais.toml +0 -0
  135. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/broken-links/spec/broken.md +0 -0
  136. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/circular-deps/.elspais.toml +0 -0
  137. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/circular-deps/spec/circular.md +0 -0
  138. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/missing-hash/.elspais.toml +0 -0
  139. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/invalid/missing-hash/spec/missing.md +0 -0
  140. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/jira-style/.elspais.toml +0 -0
  141. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/jira-style/requirements/features.md +0 -0
  142. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/named-reqs/.elspais.toml +0 -0
  143. {elspais-0.9.3 → elspais-0.11.0}/tests/fixtures/named-reqs/spec/features.md +0 -0
  144. {elspais-0.9.3 → elspais-0.11.0}/tests/mcp/__init__.py +0 -0
  145. {elspais-0.9.3 → elspais-0.11.0}/tests/mcp/test_context.py +0 -0
  146. {elspais-0.9.3 → elspais-0.11.0}/tests/mcp/test_serializers.py +0 -0
  147. {elspais-0.9.3 → elspais-0.11.0}/tests/test_config.py +0 -0
  148. {elspais-0.9.3 → elspais-0.11.0}/tests/test_content_rules.py +0 -0
  149. {elspais-0.9.3 → elspais-0.11.0}/tests/test_doc_sync.py +0 -0
  150. {elspais-0.9.3 → elspais-0.11.0}/tests/test_edit.py +0 -0
  151. {elspais-0.9.3 → elspais-0.11.0}/tests/test_git.py +0 -0
  152. {elspais-0.9.3 → elspais-0.11.0}/tests/test_hash_bugs.py +0 -0
  153. {elspais-0.9.3 → elspais-0.11.0}/tests/test_hasher.py +0 -0
  154. {elspais-0.9.3 → elspais-0.11.0}/tests/test_models.py +0 -0
  155. {elspais-0.9.3 → elspais-0.11.0}/tests/test_parser.py +0 -0
  156. {elspais-0.9.3 → elspais-0.11.0}/tests/test_patterns.py +0 -0
  157. {elspais-0.9.3 → elspais-0.11.0}/tests/test_rules.py +0 -0
  158. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/__init__.py +0 -0
  159. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/fixtures/junit_results.xml +0 -0
  160. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/fixtures/pytest_results.json +0 -0
  161. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/fixtures/sample_test.py +0 -0
  162. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/test_config.py +0 -0
  163. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/test_mapper.py +0 -0
  164. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/test_result_parser.py +0 -0
  165. {elspais-0.9.3 → elspais-0.11.0}/tests/testing/test_scanner.py +0 -0
@@ -7,6 +7,81 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.11.0] - 2026-01-15
11
+
12
+ ### Added
13
+ - **Cross-repo hierarchy support** for `reformat-with-claude` command
14
+ - Resolves parent requirements from associated/sponsor repositories
15
+ - New `--core-repo` flag to specify core repository path
16
+ - Builds complete hierarchy graph across repository boundaries
17
+
18
+ ### Changed
19
+ - **Performance optimization** for reformat command: Uses validation to filter requirements before reformatting instead of processing all files
20
+ - Reformat module now uses core modules directly for consistent behavior
21
+
22
+ ### Fixed
23
+ - Hash update robustness improved with better error handling and INFO logging
24
+ - `normalize_req_id()` now uses config-based `PatternValidator` for consistent ID normalization
25
+ - Associated prefix case is now preserved in normalized requirement IDs
26
+
27
+ ## [0.10.0] - 2026-01-10
28
+
29
+ ### Added
30
+ - **trace-view integration**: Enhanced traceability visualization with optional dependencies
31
+ - Interactive HTML generation with Jinja2 templates (`elspais[trace-view]`)
32
+ - Collaborative review server with Flask REST API (`elspais[trace-review]`)
33
+ - New CLI flags: `--view`, `--embed-content`, `--edit-mode`, `--review-mode`, `--server`, `--port`
34
+ - **New `trace_view` package** (`src/elspais/trace_view/`)
35
+ - `TraceViewRequirement` adapter wrapping core `Requirement` model
36
+ - Coverage calculation and orphan detection
37
+ - Implementation file scanning
38
+ - Generators for HTML, Markdown, and CSV output
39
+ - **Review system** for collaborative requirement feedback
40
+ - Comment threads with nested replies
41
+ - Review flags and status change requests
42
+ - Git branch management for review workflows
43
+ - JSON-based persistence in `.elspais/reviews/`
44
+ - **AI-assisted requirement reformatting** with `reformat-with-claude` command
45
+ - Transforms legacy "Acceptance Criteria" format to assertion-based format
46
+ - Format detection and validation
47
+ - Line break normalization
48
+ - Claude CLI integration with structured JSON output
49
+ - **New `reformat` module** (`src/elspais/reformat/`)
50
+ - `detect_format()`, `needs_reformatting()` - format analysis
51
+ - `reformat_requirement()`, `assemble_new_format()` - AI transformation
52
+ - `normalize_line_breaks()`, `fix_requirement_line_breaks()` - cleanup
53
+ - `RequirementNode`, `build_hierarchy()` - requirement traversal
54
+ - New optional dependency extras in pyproject.toml:
55
+ - `elspais[trace-view]`: jinja2 for HTML generation
56
+ - `elspais[trace-review]`: flask, flask-cors for review server
57
+ - `elspais[all]`: all optional features
58
+ - New documentation: `docs/trace-view.md` user guide
59
+ - 18 new integration tests for trace-view features
60
+
61
+ ### Changed
62
+ - `elspais trace` command now delegates to trace-view when enhanced features requested
63
+ - CLAUDE.md updated with trace-view architecture documentation
64
+
65
+ ## [0.9.4] - 2026-01-08
66
+
67
+ ### Added
68
+ - **Roadmap conflict entries**: When duplicate requirement IDs exist (e.g., same ID in spec/ and spec/roadmap/), both requirements are now visible in output
69
+ - Duplicate entries stored with `__conflict` suffix key (e.g., `REQ-p00001__conflict`)
70
+ - New `is_conflict` and `conflict_with` fields on Requirement model
71
+ - Conflict entries treated as orphaned (`implements=[]`) for clear visibility
72
+ - Warning generated for each duplicate (surfaced as `id.duplicate` rule)
73
+ - **Sponsor/associated repository spec scanning**: New `--mode` flag and sponsor configuration support
74
+ - `elspais validate --mode core`: Scan only core spec directories
75
+ - `elspais validate --mode combined`: Include sponsor specs (default)
76
+ - New `sponsors` module with zero-dependency YAML parser
77
+ - Configuration via `.github/config/sponsors.yml` with local override support
78
+ - `traceability.include_associated` config option (default: true)
79
+ - 29 new tests for conflict entries and sponsor scanning
80
+
81
+ ### Changed
82
+ - Parser now keeps both requirements when duplicates found (instead of ignoring second)
83
+ - JSON output includes conflict metadata for both original and conflict entries
84
+
10
85
  ## [0.9.3] - 2026-01-05
11
86
 
12
87
  ### Added
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elspais
3
- Version: 0.9.3
3
+ Version: 0.11.0
4
4
  Summary: Requirements validation and traceability tools - L-Space connects all libraries
5
5
  Project-URL: Homepage, https://github.com/anspar/elspais
6
6
  Project-URL: Documentation, https://github.com/anspar/elspais#readme
@@ -24,6 +24,11 @@ Classifier: Topic :: Software Development :: Documentation
24
24
  Classifier: Topic :: Software Development :: Quality Assurance
25
25
  Classifier: Typing :: Typed
26
26
  Requires-Python: >=3.9
27
+ Provides-Extra: all
28
+ Requires-Dist: flask-cors>=4.0; extra == 'all'
29
+ Requires-Dist: flask>=2.0; extra == 'all'
30
+ Requires-Dist: jinja2>=3.0; extra == 'all'
31
+ Requires-Dist: mcp>=1.0; extra == 'all'
27
32
  Provides-Extra: binary
28
33
  Requires-Dist: pyinstaller>=6.0; extra == 'binary'
29
34
  Provides-Extra: dev
@@ -34,6 +39,12 @@ Requires-Dist: pytest>=7.0; extra == 'dev'
34
39
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
35
40
  Provides-Extra: mcp
36
41
  Requires-Dist: mcp>=1.0; extra == 'mcp'
42
+ Provides-Extra: trace-review
43
+ Requires-Dist: flask-cors>=4.0; extra == 'trace-review'
44
+ Requires-Dist: flask>=2.0; extra == 'trace-review'
45
+ Requires-Dist: jinja2>=3.0; extra == 'trace-review'
46
+ Provides-Extra: trace-view
47
+ Requires-Dist: jinja2>=3.0; extra == 'trace-view'
37
48
  Description-Content-Type: text/markdown
38
49
 
39
50
  # elspais
@@ -59,11 +70,11 @@ Description-Content-Type: text/markdown
59
70
  ### For End Users
60
71
 
61
72
  ```bash
62
- # Standard installation
63
- pip install elspais
64
-
65
- # Recommended for CLI tools: Isolated installation
73
+ # Recommended: Isolated installation with pipx
66
74
  pipx install elspais
75
+
76
+ # Or standard pip installation
77
+ pip install elspais
67
78
  ```
68
79
 
69
80
  ### For Development
@@ -86,7 +97,7 @@ FROM python:3.11-slim
86
97
  COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
87
98
 
88
99
  # Install elspais (10-100x faster than pip)
89
- RUN uv pip install --system --no-cache elspais==0.9.1
100
+ RUN uv pip install --system --no-cache elspais==0.9.3
90
101
  ```
91
102
 
92
103
  ```yaml
@@ -95,7 +106,7 @@ RUN uv pip install --system --no-cache elspais==0.9.1
95
106
  uses: astral-sh/setup-uv@v2
96
107
 
97
108
  - name: Install elspais
98
- run: uv pip install --system elspais==0.9.1
109
+ run: uv pip install --system elspais==0.9.3
99
110
  ```
100
111
 
101
112
  **Note:** For regulated/medical software projects, always pin the exact version for reproducibility.
@@ -365,19 +376,23 @@ Options:
365
376
  --help Show help
366
377
 
367
378
  Commands:
368
- validate Validate requirements format, links, hashes
369
- trace Generate traceability matrix
370
- hash Manage requirement hashes (verify, update)
371
- index Validate or regenerate INDEX.md
372
- analyze Analyze requirement hierarchy
373
- edit Edit requirements in-place (status, implements, move)
374
- config View and modify configuration
375
- rules View and manage content rules
376
- mcp MCP server commands (requires elspais[mcp])
377
- version Show version and check for updates
378
- init Create .elspais.toml configuration
379
+ validate Validate requirements format, links, hashes
380
+ trace Generate traceability matrix
381
+ hash Manage requirement hashes (verify, update)
382
+ reformat-with-claude Transform requirements using AI (Acceptance Criteria → Assertions)
383
+ changed Detect git changes to spec files
384
+ analyze Analyze requirement hierarchy
385
+ edit Edit requirements in-place (status, implements, move)
386
+ config View and modify configuration
387
+ rules View and manage content rules
388
+ index Validate or regenerate INDEX.md
389
+ init Create .elspais.toml configuration
390
+ mcp MCP server commands (requires elspais[mcp])
391
+ version Show version and check for updates
379
392
  ```
380
393
 
394
+ See [docs/commands.md](docs/commands.md) for comprehensive command documentation.
395
+
381
396
  ## Development
382
397
 
383
398
  ```bash
@@ -21,11 +21,11 @@
21
21
  ### For End Users
22
22
 
23
23
  ```bash
24
- # Standard installation
25
- pip install elspais
26
-
27
- # Recommended for CLI tools: Isolated installation
24
+ # Recommended: Isolated installation with pipx
28
25
  pipx install elspais
26
+
27
+ # Or standard pip installation
28
+ pip install elspais
29
29
  ```
30
30
 
31
31
  ### For Development
@@ -48,7 +48,7 @@ FROM python:3.11-slim
48
48
  COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
49
49
 
50
50
  # Install elspais (10-100x faster than pip)
51
- RUN uv pip install --system --no-cache elspais==0.9.1
51
+ RUN uv pip install --system --no-cache elspais==0.9.3
52
52
  ```
53
53
 
54
54
  ```yaml
@@ -57,7 +57,7 @@ RUN uv pip install --system --no-cache elspais==0.9.1
57
57
  uses: astral-sh/setup-uv@v2
58
58
 
59
59
  - name: Install elspais
60
- run: uv pip install --system elspais==0.9.1
60
+ run: uv pip install --system elspais==0.9.3
61
61
  ```
62
62
 
63
63
  **Note:** For regulated/medical software projects, always pin the exact version for reproducibility.
@@ -327,19 +327,23 @@ Options:
327
327
  --help Show help
328
328
 
329
329
  Commands:
330
- validate Validate requirements format, links, hashes
331
- trace Generate traceability matrix
332
- hash Manage requirement hashes (verify, update)
333
- index Validate or regenerate INDEX.md
334
- analyze Analyze requirement hierarchy
335
- edit Edit requirements in-place (status, implements, move)
336
- config View and modify configuration
337
- rules View and manage content rules
338
- mcp MCP server commands (requires elspais[mcp])
339
- version Show version and check for updates
340
- init Create .elspais.toml configuration
330
+ validate Validate requirements format, links, hashes
331
+ trace Generate traceability matrix
332
+ hash Manage requirement hashes (verify, update)
333
+ reformat-with-claude Transform requirements using AI (Acceptance Criteria → Assertions)
334
+ changed Detect git changes to spec files
335
+ analyze Analyze requirement hierarchy
336
+ edit Edit requirements in-place (status, implements, move)
337
+ config View and modify configuration
338
+ rules View and manage content rules
339
+ index Validate or regenerate INDEX.md
340
+ init Create .elspais.toml configuration
341
+ mcp MCP server commands (requires elspais[mcp])
342
+ version Show version and check for updates
341
343
  ```
342
344
 
345
+ See [docs/commands.md](docs/commands.md) for comprehensive command documentation.
346
+
343
347
  ## Development
344
348
 
345
349
  ```bash