elspais 0.9.3__py3-none-any.whl → 0.11.1__py3-none-any.whl

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 (73) hide show
  1. elspais/cli.py +141 -10
  2. elspais/commands/hash_cmd.py +72 -26
  3. elspais/commands/reformat_cmd.py +458 -0
  4. elspais/commands/trace.py +157 -3
  5. elspais/commands/validate.py +44 -16
  6. elspais/core/models.py +2 -0
  7. elspais/core/parser.py +68 -24
  8. elspais/reformat/__init__.py +50 -0
  9. elspais/reformat/detector.py +119 -0
  10. elspais/reformat/hierarchy.py +246 -0
  11. elspais/reformat/line_breaks.py +220 -0
  12. elspais/reformat/prompts.py +123 -0
  13. elspais/reformat/transformer.py +264 -0
  14. elspais/sponsors/__init__.py +432 -0
  15. elspais/trace_view/__init__.py +54 -0
  16. elspais/trace_view/coverage.py +183 -0
  17. elspais/trace_view/generators/__init__.py +12 -0
  18. elspais/trace_view/generators/base.py +329 -0
  19. elspais/trace_view/generators/csv.py +122 -0
  20. elspais/trace_view/generators/markdown.py +175 -0
  21. elspais/trace_view/html/__init__.py +31 -0
  22. elspais/trace_view/html/generator.py +1006 -0
  23. elspais/trace_view/html/templates/base.html +283 -0
  24. elspais/trace_view/html/templates/components/code_viewer_modal.html +14 -0
  25. elspais/trace_view/html/templates/components/file_picker_modal.html +20 -0
  26. elspais/trace_view/html/templates/components/legend_modal.html +69 -0
  27. elspais/trace_view/html/templates/components/review_panel.html +118 -0
  28. elspais/trace_view/html/templates/partials/review/help/help-panel.json +244 -0
  29. elspais/trace_view/html/templates/partials/review/help/onboarding.json +77 -0
  30. elspais/trace_view/html/templates/partials/review/help/tooltips.json +237 -0
  31. elspais/trace_view/html/templates/partials/review/review-comments.js +928 -0
  32. elspais/trace_view/html/templates/partials/review/review-data.js +961 -0
  33. elspais/trace_view/html/templates/partials/review/review-help.js +679 -0
  34. elspais/trace_view/html/templates/partials/review/review-init.js +177 -0
  35. elspais/trace_view/html/templates/partials/review/review-line-numbers.js +429 -0
  36. elspais/trace_view/html/templates/partials/review/review-packages.js +1029 -0
  37. elspais/trace_view/html/templates/partials/review/review-position.js +540 -0
  38. elspais/trace_view/html/templates/partials/review/review-resize.js +115 -0
  39. elspais/trace_view/html/templates/partials/review/review-status.js +659 -0
  40. elspais/trace_view/html/templates/partials/review/review-sync.js +992 -0
  41. elspais/trace_view/html/templates/partials/review-styles.css +2238 -0
  42. elspais/trace_view/html/templates/partials/scripts.js +1741 -0
  43. elspais/trace_view/html/templates/partials/styles.css +1756 -0
  44. elspais/trace_view/models.py +353 -0
  45. elspais/trace_view/review/__init__.py +60 -0
  46. elspais/trace_view/review/branches.py +1149 -0
  47. elspais/trace_view/review/models.py +1205 -0
  48. elspais/trace_view/review/position.py +609 -0
  49. elspais/trace_view/review/server.py +1056 -0
  50. elspais/trace_view/review/status.py +470 -0
  51. elspais/trace_view/review/storage.py +1367 -0
  52. elspais/trace_view/scanning.py +213 -0
  53. elspais/trace_view/specs/README.md +84 -0
  54. elspais/trace_view/specs/tv-d00001-template-architecture.md +36 -0
  55. elspais/trace_view/specs/tv-d00002-css-extraction.md +37 -0
  56. elspais/trace_view/specs/tv-d00003-js-extraction.md +43 -0
  57. elspais/trace_view/specs/tv-d00004-build-embedding.md +40 -0
  58. elspais/trace_view/specs/tv-d00005-test-format.md +78 -0
  59. elspais/trace_view/specs/tv-d00010-review-data-models.md +33 -0
  60. elspais/trace_view/specs/tv-d00011-review-storage.md +33 -0
  61. elspais/trace_view/specs/tv-d00012-position-resolution.md +33 -0
  62. elspais/trace_view/specs/tv-d00013-git-branches.md +31 -0
  63. elspais/trace_view/specs/tv-d00014-review-api-server.md +31 -0
  64. elspais/trace_view/specs/tv-d00015-status-modifier.md +27 -0
  65. elspais/trace_view/specs/tv-d00016-js-integration.md +33 -0
  66. elspais/trace_view/specs/tv-p00001-html-generator.md +33 -0
  67. elspais/trace_view/specs/tv-p00002-review-system.md +29 -0
  68. {elspais-0.9.3.dist-info → elspais-0.11.1.dist-info}/METADATA +36 -18
  69. elspais-0.11.1.dist-info/RECORD +101 -0
  70. elspais-0.9.3.dist-info/RECORD +0 -40
  71. {elspais-0.9.3.dist-info → elspais-0.11.1.dist-info}/WHEEL +0 -0
  72. {elspais-0.9.3.dist-info → elspais-0.11.1.dist-info}/entry_points.txt +0 -0
  73. {elspais-0.9.3.dist-info → elspais-0.11.1.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,31 @@
1
+ # REQ-tv-d00014: Review API Server
2
+
3
+ **Level**: Dev | **Status**: Draft | **Implements**: REQ-tv-p00002
4
+
5
+ ## Assertions
6
+
7
+ A. The API server SHALL be implemented as a Flask application with a `create_app(repo_root, static_dir)` factory function.
8
+
9
+ B. Thread endpoints SHALL support: `POST /api/reviews/reqs/{id}/threads` (create), `POST /api/reviews/reqs/{id}/threads/{tid}/comments` (add comment), `POST /api/reviews/reqs/{id}/threads/{tid}/resolve` (resolve), `POST /api/reviews/reqs/{id}/threads/{tid}/unresolve` (unresolve).
10
+
11
+ C. Status endpoints SHALL support: `GET /api/reviews/reqs/{id}/status` (get status), `POST /api/reviews/reqs/{id}/status` (change status in spec file), `GET /api/reviews/reqs/{id}/requests` (list requests), `POST /api/reviews/reqs/{id}/requests` (create request), `POST /api/reviews/reqs/{id}/requests/{rid}/approvals` (add approval).
12
+
13
+ D. Package endpoints SHALL support: `GET /api/reviews/packages` (list), `POST /api/reviews/packages` (create), `GET/PUT/DELETE /api/reviews/packages/{id}` (CRUD), `POST/DELETE /api/reviews/packages/{id}/reqs/{req_id}` (membership), `GET/PUT /api/reviews/packages/active` (active package).
14
+
15
+ E. Sync endpoints SHALL support: `GET /api/reviews/sync/status` (sync status), `POST /api/reviews/sync/push` (commit and push), `POST /api/reviews/sync/fetch` (fetch from remote), `POST /api/reviews/sync/fetch-all-package` (fetch all user branches).
16
+
17
+ F. The server SHALL enable CORS for cross-origin requests from the HTML viewer.
18
+
19
+ G. The server SHALL serve static files from the configured static directory at the root path.
20
+
21
+ H. All write endpoints SHALL optionally trigger auto-sync based on configuration.
22
+
23
+ I. Error responses SHALL use appropriate HTTP status codes and include JSON error details.
24
+
25
+ J. The server SHALL provide a `/api/health` endpoint for health checks.
26
+
27
+ ## Rationale
28
+
29
+ The Flask API provides a lightweight HTTP interface for the review UI. The endpoint structure follows REST conventions with resource-oriented URLs. Auto-sync enables automatic git commits on each change for users who prefer immediate persistence, while manual sync is available for batched workflows.
30
+
31
+ *End* *Review API Server* | **Hash**: 00000000
@@ -0,0 +1,27 @@
1
+ # REQ-tv-d00015: Status Modifier
2
+
3
+ **Level**: Dev | **Status**: Draft | **Implements**: REQ-tv-p00002
4
+
5
+ ## Assertions
6
+
7
+ A. `find_req_in_file(file_path, req_id)` SHALL locate a requirement in a spec file and return the status line information.
8
+
9
+ B. `get_req_status(repo_root, req_id)` SHALL read and return the current status value from the spec file.
10
+
11
+ C. `change_req_status(repo_root, req_id, new_status, user)` SHALL update the status value in the spec file atomically.
12
+
13
+ D. Status values SHALL be validated against the allowed set: Draft, Active, Deprecated.
14
+
15
+ E. The status modifier SHALL preserve all other content and formatting when changing status.
16
+
17
+ F. The status modifier SHALL update the requirement's content hash footer after status changes.
18
+
19
+ G. Failed status changes SHALL NOT leave the spec file in a corrupted or partial state.
20
+
21
+ ## Rationale
22
+
23
+ The status modifier enables the review workflow to complete the cycle by applying approved status changes directly to the spec files. This maintains the spec files as the authoritative source while the review system provides the approval workflow around changes.
24
+
25
+ Atomic updates ensure that interrupted operations don't corrupt spec files, which are the source of truth for requirements.
26
+
27
+ *End* *Status Modifier* | **Hash**: 00000000
@@ -0,0 +1,33 @@
1
+ # REQ-tv-d00016: Review JavaScript Integration
2
+
3
+ **Level**: Dev | **Status**: Draft | **Implements**: REQ-tv-p00002
4
+
5
+ ## Assertions
6
+
7
+ A. Review JavaScript modules SHALL be organized under the `TraceView.review` namespace to integrate with existing TraceView code.
8
+
9
+ B. The review panel SHALL support opening, closing, and stacking requirement cards for multi-requirement review sessions.
10
+
11
+ C. Thread UI SHALL support creating, viewing, resolving, unresolving, and replying to comment threads.
12
+
13
+ D. Sync operations SHALL handle git push/fetch with conflict detection and user feedback via UI indicators.
14
+
15
+ E. Package management UI SHALL support selecting, creating, editing, and deleting review packages.
16
+
17
+ F. Position highlighting SHALL visually indicate comment anchor locations in the requirement content.
18
+
19
+ G. Auto-sync functionality SHALL be configurable via the review panel settings.
20
+
21
+ H. Event-driven architecture SHALL use custom DOM events (`traceview:thread-created`, `traceview:comment-added`, etc.) for component communication.
22
+
23
+ I. The review panel SHALL integrate with the existing TraceView side panel system.
24
+
25
+ J. Mode toggle buttons SHALL allow switching between View, Edit, and Review modes.
26
+
27
+ ## Rationale
28
+
29
+ Integrating with the existing TraceView namespace ensures consistent patterns and enables reuse of existing panel management, event handling, and UI components. The event-driven architecture decouples components and enables extensibility.
30
+
31
+ Position highlighting helps reviewers understand the spatial context of comments, especially when positions have drifted due to content changes.
32
+
33
+ *End* *Review JavaScript Integration* | **Hash**: 00000000
@@ -0,0 +1,33 @@
1
+ # REQ-tv-p00001: HTML Generator Maintainability
2
+
3
+ **Level**: PRD | **Status**: Draft | **Implements**: -
4
+
5
+ ## Assertions
6
+
7
+ A. The HTML generator SHALL produce a single, self-contained HTML file that can be opened in any modern browser without requiring a web server.
8
+
9
+ B. The HTML generator SHALL support two operational modes: standalone mode with embedded requirement data, and link-only mode with relative URLs to source files.
10
+
11
+ C. The HTML generator SHALL produce output that is functionally equivalent to the current implementation for all existing use cases.
12
+
13
+ D. The HTML generator codebase SHALL separate concerns such that HTML structure, CSS styling, and JavaScript behavior can be modified independently.
14
+
15
+ E. The HTML generator SHALL support IDE syntax highlighting and autocomplete for HTML, CSS, and JavaScript content.
16
+
17
+ F. The HTML generator SHALL maintain backward compatibility with existing command-line interfaces and configuration options.
18
+
19
+ G. The HTML generator SHALL support optional edit mode UI for batch requirement operations.
20
+
21
+ ## Rationale
22
+
23
+ The current HTMLGenerator class in `trace_view/html/generator.py` is a 3,420-line monolith that mixes HTML, CSS, JavaScript, and Python logic. This makes the code difficult to maintain, test, and extend.
24
+
25
+ The current implementation has several challenges that motivate this refactoring:
26
+ - No IDE support for embedded HTML/CSS/JS (all are Python strings)
27
+ - Single 1,268-line method (`_generate_html`) with cyclomatic complexity of 598
28
+ - Tight coupling prevents independent modification of presentation layers
29
+ - Difficult to test components in isolation
30
+
31
+ The refactoring preserves all current functionality while enabling better developer experience and maintainability.
32
+
33
+ *End* *HTML Generator Maintainability* | **Hash**: 5dc964a5
@@ -0,0 +1,29 @@
1
+ # REQ-tv-p00002: Collaborative Requirement Review System
2
+
3
+ **Level**: PRD | **Status**: Draft | **Implements**: REQ-tv-p00001
4
+
5
+ ## Assertions
6
+
7
+ A. The system SHALL support threaded comments anchored to specific positions within requirement text.
8
+
9
+ B. The system SHALL support status change workflows with approval gates for transitions between Draft, Active, and Deprecated states.
10
+
11
+ C. Comment positions SHALL survive content changes through hash-based drift detection and fallback resolution strategies.
12
+
13
+ D. Review data SHALL be stored in git branches following the `reviews/{package}/{user}` naming convention.
14
+
15
+ E. Review packages SHALL group related requirements for coordinated review workflows.
16
+
17
+ F. The system SHALL function offline with git-based synchronization when connectivity is available.
18
+
19
+ G. The system SHALL provide a Flask API server for real-time review operations.
20
+
21
+ H. The review UI SHALL integrate with the existing trace_view HTML output as a collapsible panel.
22
+
23
+ ## Rationale
24
+
25
+ The collaborative review system enables teams to review requirements without modifying the source specification files. By using git branches and JSON storage, the system maintains full audit trails compatible with FDA 21 CFR Part 11 requirements. Position-anchored comments allow precise feedback that survives requirement edits through intelligent re-anchoring.
26
+
27
+ The package system supports sprint-based or topic-based review workflows, while the branch-per-user model enables offline work with eventual consistency through git merge operations.
28
+
29
+ *End* *Collaborative Requirement Review System* | **Hash**: 00000000
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: elspais
3
- Version: 0.9.3
3
+ Version: 0.11.1
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, and hashes
380
+ trace Generate traceability matrix
381
+ hash Manage requirement hashes (verify, update)
382
+ index Manage INDEX.md file (validate, regenerate)
383
+ analyze Analyze requirement hierarchy (hierarchy, orphans, coverage)
384
+ changed Detect git changes to spec files
385
+ version Show version and check for updates
386
+ init Create .elspais.toml configuration
387
+ edit Edit requirements in-place (implements, status, move)
388
+ config View and modify configuration (show, get, set, ...)
389
+ rules View and manage content rules (list, show)
390
+ reformat-with-claude Reformat requirements using AI (Acceptance Criteria -> Assertions)
391
+ mcp MCP server commands (requires elspais[mcp])
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
@@ -386,6 +401,9 @@ git clone https://github.com/anspar/elspais.git
386
401
  cd elspais
387
402
  pip install -e ".[dev]"
388
403
 
404
+ # Enable git hooks (verifies docs stay in sync before push)
405
+ git config core.hooksPath .githooks
406
+
389
407
  # Run tests
390
408
  pytest
391
409
 
@@ -0,0 +1,101 @@
1
+ elspais/__init__.py,sha256=grQHU0RmRQChHUEb_cH_OuGmxADj5fDSNNayhXEQco4,1014
2
+ elspais/__main__.py,sha256=rCMaObqJeT_6dhyfND7S4dh_lv30j7Ww3Z7992YYwaE,130
3
+ elspais/cli.py,sha256=v6iFpfLe3_E5m74Hhyudq_qphp6TPSmIEvTI3z5JdmM,19530
4
+ elspais/commands/__init__.py,sha256=jS7ry2ez7xri-fUlYUw9fGKJi5yTHtVN4PU8voHjgLI,155
5
+ elspais/commands/analyze.py,sha256=5hE6YRL8AoAz2ukkR1rj6aiD2TNJi63UHYVJXmKoOUs,7135
6
+ elspais/commands/changed.py,sha256=H0v95I6eXqcYXfqIUHKb3rP_2jMiH52bkXMe0TXM6y8,4872
7
+ elspais/commands/config_cmd.py,sha256=KnH7vISH4041rqQrFftgffYLIujmIllZ_NCl5hIvCnE,13943
8
+ elspais/commands/edit.py,sha256=Ey42VCAsV2G1WzCZ3qy1IAoG88zeba3O0iZjiodJZZA,16054
9
+ elspais/commands/hash_cmd.py,sha256=XX_IbHkuJD3bc2MLxVEp2Tj5zAttDSKtpY0ZjxeKBjg,7844
10
+ elspais/commands/index.py,sha256=_jPGt_LnGI6gGJLonzOoM978YpTj14GWDCCemtSIah4,5283
11
+ elspais/commands/init.py,sha256=y2vxR5pvd0gmONJYjX3GtGbMfmJU11k_zRKWCm7O6Qo,3870
12
+ elspais/commands/reformat_cmd.py,sha256=j2pzd6ok_wcL9GXLMPrZM8HAgqtt8NVNlNb09ua0gQg,14843
13
+ elspais/commands/rules_cmd.py,sha256=b2d0l-rn-WTd6ULJWsjAebBTcKv_yndO7pVNc29QEoo,3415
14
+ elspais/commands/trace.py,sha256=6yqsfq1L3UYPkZE0Pscfzg9Ml3-fKNqoouqiZL1RnFI,12622
15
+ elspais/commands/validate.py,sha256=pzTEHhqLzpcL1YPa9wlJ4i0YvanK_jvhm2pB-Xr1z8E,15708
16
+ elspais/config/__init__.py,sha256=NkQEonHWWiXXCDrfehOCrsEYSuhj75KYj8oBQ7FuS4c,292
17
+ elspais/config/defaults.py,sha256=6GddebKwrDAiTp0tGzkNSEuGM_HeA846o8CQPYS4yz8,5177
18
+ elspais/config/loader.py,sha256=MnG_j2W1pOSRTTUHAOvu5xcJUAzDFNPvRjloFXpM15w,13827
19
+ elspais/core/__init__.py,sha256=OTQ1TOf7iLN4czmlkrV5tiaxpAat0VcrWpxYbfonAys,576
20
+ elspais/core/content_rules.py,sha256=4UoA_SUJK5R2MG9NE0Z8sNzMVPq3beEJGKEtX_NAeTk,4515
21
+ elspais/core/git.py,sha256=oM0jQUuqdMYc95j2Q1xqEH8a3X33u0Xe57TsTDUrhH4,11213
22
+ elspais/core/hasher.py,sha256=X3Ry_M6zgs2pZPZ3UFItlvM0mRW6aPS0SKPhCYeaFUE,4259
23
+ elspais/core/models.py,sha256=qwi9rVEUGLW2bJABW2s2-2OzyI3hdl3rdvkWRuTl908,9719
24
+ elspais/core/parser.py,sha256=uPYDjt4KWAbKzxCEgZucnc6cvTH8pj8W25LEVPyG8-w,23901
25
+ elspais/core/patterns.py,sha256=wEkzIjBRDDFyR3LZ-Lbm0a2IaU6Pdi80a9UUqb_S_aQ,13082
26
+ elspais/core/rules.py,sha256=WIn41JupkZannGgEfhqK__aomsJVU9aqpq__s2ZpZgU,19036
27
+ elspais/mcp/__init__.py,sha256=5yYWJpYkRu8AyJHUkbIP1HVngdyGEygzonJjdypAKb0,1143
28
+ elspais/mcp/__main__.py,sha256=oqpwTiE14vr5AGnP0MxRzILx_hYqonUMMK96dX-EXVw,134
29
+ elspais/mcp/context.py,sha256=MmYsDFA6nEVmgRffCQlqJMQjI0joQQJh1tFFPEeUeCA,5538
30
+ elspais/mcp/serializers.py,sha256=FuSJT_Qg5BTQEwdER0G7ES2IJYZw7mDqyQqQIZ6_3FA,2832
31
+ elspais/mcp/server.py,sha256=tgmeodGIqzz3vvGunDI6NhY0avQKn0F0yOiF7sbjJ-I,10416
32
+ elspais/reformat/__init__.py,sha256=nkEBuz9AYsQxAeI7KZ1yHW8tk0Vj2cT-YrJMMc9GRSM,1256
33
+ elspais/reformat/detector.py,sha256=DbR7JCRsUynajJPO_yrR1RrPgxozL02yTdRPzBJpNu4,3559
34
+ elspais/reformat/hierarchy.py,sha256=bYwB37jVXvcYLge-_-AxDolBLnkUU2YeoIMhXXu-gNA,8079
35
+ elspais/reformat/line_breaks.py,sha256=KLQ6AC5TclOLiopJoBzC-AQLea_LBW8Gg92hb_jE5Ko,6269
36
+ elspais/reformat/prompts.py,sha256=JH4-XJJvDci4JEkFMsR_zsozFfRhUQOTi4pfVIULaj0,4356
37
+ elspais/reformat/transformer.py,sha256=vsN2Zz5yehh_f-G5riaD6Znnac2E-3BKTqYldvo3CjY,8105
38
+ elspais/sponsors/__init__.py,sha256=2DFEaB4U7IxeIX96CnWnpstFIzUgPoHie-cbiiINaW8,13109
39
+ elspais/testing/__init__.py,sha256=hJB3V28HoeZUnIexi2mkaBwo0bQ7uSxBs-IZmcmpFtQ,879
40
+ elspais/testing/config.py,sha256=PQkrnuk_p8pObc-Nio3s3mIKLO4AfB-2eiwXruXTw0Y,1620
41
+ elspais/testing/mapper.py,sha256=EGund_KgeYbAnWRRcnuVs0xCzlf7EvJ-qiluSmvRIso,5649
42
+ elspais/testing/result_parser.py,sha256=u-TI5oytCqxz769AyU7WF9mOOULSzZAArvBg6JXwG1Q,9280
43
+ elspais/testing/scanner.py,sha256=PEn0qJCE2eX2SCru3Cc-v18mf81q7BNkPYE-MZ3m8CM,7037
44
+ elspais/trace_view/__init__.py,sha256=kffaqkRynNOaK3wn98WmrF6QIpNiaKSEYvlJaB6GDqM,1802
45
+ elspais/trace_view/coverage.py,sha256=35nrB6NAQWpcyvz-Q4hYB5hQAiEPKNv7cQtrSSdlSdY,6136
46
+ elspais/trace_view/models.py,sha256=s0iddIfpNCFvzYFMPUjYzSPiC_xkWdKjkWDXUJ83pu8,11295
47
+ elspais/trace_view/scanning.py,sha256=c4zxj9_wI5aYhUHb2boiI5kG0OXvhs8rFaJ2Gc229ls,7511
48
+ elspais/trace_view/generators/__init__.py,sha256=-A9RfO8ar-FxENLNCwtLKzWZDyhZIY510btJhdN6tek,424
49
+ elspais/trace_view/generators/base.py,sha256=5dsK0H_1W_slN7XzUoIa151j5FJSgYtX6-NwE7aS7Cc,12377
50
+ elspais/trace_view/generators/csv.py,sha256=2Pp3fxLA0XYpPB1d4s9rdEpQ2-UfXa-ICD4aK3PSBiM,3541
51
+ elspais/trace_view/generators/markdown.py,sha256=4AaPQiHDKrPsR_o2NfJcFM6Xp6q8m3201GL13yBnjaQ,5765
52
+ elspais/trace_view/html/__init__.py,sha256=zW4iO173LGlYt18pIrgBhgMdRYHghXA_8nJMT8o8RjE,806
53
+ elspais/trace_view/html/generator.py,sha256=qTFUG-0C2phJgilOgtDebUgV8Z6extdWqQDEa5ejuC4,45927
54
+ elspais/trace_view/html/templates/base.html,sha256=hy2G-Gw7qDCu7FEdt5VeBlIwoV9vJoKk1J5LDwEH8og,13176
55
+ elspais/trace_view/html/templates/components/code_viewer_modal.html,sha256=7S_ocNo2mfWMimXGlhhUWR7IUhdAiASdecsUPWmCdEw,736
56
+ elspais/trace_view/html/templates/components/file_picker_modal.html,sha256=hb7W0Gfkl_FFAz42wvVzPwHplWgRuU_0-NPmU5XM8rg,1182
57
+ elspais/trace_view/html/templates/components/legend_modal.html,sha256=S7j_KY6O3kgYusJBLF5uT22S3TnRahLtHSFgZlnGM7Y,3562
58
+ elspais/trace_view/html/templates/components/review_panel.html,sha256=8DDa5eZXpLMklGZBPV5N54VaxaqZlD1s3bbQPS59D2o,5592
59
+ elspais/trace_view/html/templates/partials/review-styles.css,sha256=8lh_Wf8Gc5BxAniL9tiHuKfDHnQI0UMMbSLqmQnhvUs,42833
60
+ elspais/trace_view/html/templates/partials/scripts.js,sha256=3qaZkFJj3oNg_p16cvpHKiE6rtPIWoM3LrFHx7TGJyQ,72717
61
+ elspais/trace_view/html/templates/partials/styles.css,sha256=csqKjs6RPrnIYm3kq-0BhXWi8shpeYiGPJ61Kvl6OXg,33321
62
+ elspais/trace_view/html/templates/partials/review/review-comments.js,sha256=sYT4r9At4qlWQMLchRfpfl8V7xY3jV8B4m97dkpRz_g,38903
63
+ elspais/trace_view/html/templates/partials/review/review-data.js,sha256=0tPPMBzoNoTeB-wWVmwR2gRDvOT8iK-iSigZA1ddT1E,32644
64
+ elspais/trace_view/html/templates/partials/review/review-help.js,sha256=Sy77ioN6stmdCR7OK4dYOdKLkzD3DJI8VCfPjFWGIyY,24047
65
+ elspais/trace_view/html/templates/partials/review/review-init.js,sha256=guLPdd4iH2bxAOi3GiDULQk7XDNzmvVOLx5UJlt9eU0,6435
66
+ elspais/trace_view/html/templates/partials/review/review-line-numbers.js,sha256=j8tU7lxqFljt6rBF7VU6j00qIhrpvA8EVXIsxCbfJCI,15855
67
+ elspais/trace_view/html/templates/partials/review/review-packages.js,sha256=QxLZXfpWK2xp4qrDy0dgTx7TuQBnkGmWb9jNM4clHHA,39754
68
+ elspais/trace_view/html/templates/partials/review/review-position.js,sha256=nRRcSLbM-OAxUQADbFbRN5XJtEcIER2gzoL-_9pLf-Y,19182
69
+ elspais/trace_view/html/templates/partials/review/review-resize.js,sha256=fS081RfoiJAe9QRoEkQfSvdZotPQcPG45s-WDCxIbsE,3136
70
+ elspais/trace_view/html/templates/partials/review/review-status.js,sha256=WgK2p56v1HKZpwuSX6zOv1KpfGAKLfpdb66qIRXsi2Q,26235
71
+ elspais/trace_view/html/templates/partials/review/review-sync.js,sha256=xr4qrNRmkRSb7YO3ErBjckJltSLbbAy5NfnYba50GrE,31541
72
+ elspais/trace_view/html/templates/partials/review/help/help-panel.json,sha256=A592sy3spIjvTBj87Yl_Ow8bm09s2JY-SAWc2Ac_jjU,14518
73
+ elspais/trace_view/html/templates/partials/review/help/onboarding.json,sha256=uqqLXdD1rgR8bobnBFTAkgcMbbrWeyRnk5jX-1vbvHI,2942
74
+ elspais/trace_view/html/templates/partials/review/help/tooltips.json,sha256=P9VfihRKL7BamrYfXRI855J51KMU29wbwpQGa5hO0y8,8714
75
+ elspais/trace_view/review/__init__.py,sha256=ZpMAJFu2q9VTLtTD5ThMo-RYaZ6pDDo9dnReyg779RA,1307
76
+ elspais/trace_view/review/branches.py,sha256=souMSF3WggcOwqsD_Kx_trVfpdWRIuOGF6acKn05-f8,36560
77
+ elspais/trace_view/review/models.py,sha256=7l_NoALci77TVM29KeBpjKx-jp8qzNgoIpXvzVC_3iM,40714
78
+ elspais/trace_view/review/position.py,sha256=Ep9IlcAeL0u46u-xks0o6qRQTMJnTCgf10W4FxCmwRo,20974
79
+ elspais/trace_view/review/server.py,sha256=yOyzyn8MrrR0OxwU-xCHp8TQDx1L3DVL4CDEm0aP13w,36363
80
+ elspais/trace_view/review/status.py,sha256=Q_uwm6Fe14eXSYduaGOCfHDuVXTt3lpl047q8W6T76o,15534
81
+ elspais/trace_view/review/storage.py,sha256=grirLOGFUIzj0AseOIUkjciLR8ge38vPb3dtZwL5H70,38193
82
+ elspais/trace_view/specs/README.md,sha256=LY3Ilp1RNYJYxAFV3KRTp2ASp5nyUhkFkgPFY2BEdEU,3282
83
+ elspais/trace_view/specs/tv-d00001-template-architecture.md,sha256=WUnD2cYSnGqaAtzaCzYQdMV2S_iWUF-aHb6-UYmW_5E,1753
84
+ elspais/trace_view/specs/tv-d00002-css-extraction.md,sha256=28KeqYDFrCsms8AXjKKiA8yn85_kT4nZOOqIlMB553c,1653
85
+ elspais/trace_view/specs/tv-d00003-js-extraction.md,sha256=R65UQhgIW8uyUqyAo2ZPUEeLZqO7sOH8RsKVsB1TL5w,2068
86
+ elspais/trace_view/specs/tv-d00004-build-embedding.md,sha256=2vI-zNi7Ibxnxwf0hvhLZh-JbrwBrUU68tp18wLXjQ4,1901
87
+ elspais/trace_view/specs/tv-d00005-test-format.md,sha256=7XeJmQdSG_5OJiwFxshmnzfaQlIFvhhbwqNe9w7EaIs,2804
88
+ elspais/trace_view/specs/tv-d00010-review-data-models.md,sha256=Yr8Pntii7bn-gXSPJGRSCBbui3dehc9_xi6ocWtslf8,1875
89
+ elspais/trace_view/specs/tv-d00011-review-storage.md,sha256=fjqz0tQ2QqIYXAIpCUbtU09ajMTqARPJTWCgnjQaeXA,2051
90
+ elspais/trace_view/specs/tv-d00012-position-resolution.md,sha256=GpW78rhbCoU-Ipo31MBdFgRHB_DRmZC2cVnSx3iLvxw,1885
91
+ elspais/trace_view/specs/tv-d00013-git-branches.md,sha256=TFNrgBJqalDGpU9avjMMJZ9DCo8zO5UJ7N4sJQcVfD8,1565
92
+ elspais/trace_view/specs/tv-d00014-review-api-server.md,sha256=1efAzKT-R2vrouEG0K6vW1byGSYyNoHnpQwOxg84ZgM,2189
93
+ elspais/trace_view/specs/tv-d00015-status-modifier.md,sha256=MK7YwLWr0KFZXImJefFV171vBeNbTdtaWCVgyxSXqec,1285
94
+ elspais/trace_view/specs/tv-d00016-js-integration.md,sha256=wofQ4qkCCILpjzFTtAKIwL7FB47KGoPpW9ox2k-BQ7c,1658
95
+ elspais/trace_view/specs/tv-p00001-html-generator.md,sha256=tv4cP0CynaRPxHKTzGN3r9CXqQBbioVX2ESOcOBKnUI,1792
96
+ elspais/trace_view/specs/tv-p00002-review-system.md,sha256=JQJSwNbZ_Hkqk43QQ9JKKhTBsfI0rF1Hp_3RIR6hS-4,1609
97
+ elspais-0.11.1.dist-info/METADATA,sha256=ysGy8f5kiNLFOeqFbL5EM9Z73OO3-scXK9OqlAQhvoE,11634
98
+ elspais-0.11.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
99
+ elspais-0.11.1.dist-info/entry_points.txt,sha256=yWZZEfn2fBSKSzGoS-fMQ9YoTkyeu6-i7Oht6NsdKpk,45
100
+ elspais-0.11.1.dist-info/licenses/LICENSE,sha256=x_dNMsy_askp2MmKXZFL2bKW_tDiJHcRTyAg0TY1RMI,1063
101
+ elspais-0.11.1.dist-info/RECORD,,
@@ -1,40 +0,0 @@
1
- elspais/__init__.py,sha256=grQHU0RmRQChHUEb_cH_OuGmxADj5fDSNNayhXEQco4,1014
2
- elspais/__main__.py,sha256=rCMaObqJeT_6dhyfND7S4dh_lv30j7Ww3Z7992YYwaE,130
3
- elspais/cli.py,sha256=krVJcjCVXAuxniRWFPIIjBd7znQSD6egrJIN2YWuHYQ,14770
4
- elspais/commands/__init__.py,sha256=jS7ry2ez7xri-fUlYUw9fGKJi5yTHtVN4PU8voHjgLI,155
5
- elspais/commands/analyze.py,sha256=5hE6YRL8AoAz2ukkR1rj6aiD2TNJi63UHYVJXmKoOUs,7135
6
- elspais/commands/changed.py,sha256=H0v95I6eXqcYXfqIUHKb3rP_2jMiH52bkXMe0TXM6y8,4872
7
- elspais/commands/config_cmd.py,sha256=KnH7vISH4041rqQrFftgffYLIujmIllZ_NCl5hIvCnE,13943
8
- elspais/commands/edit.py,sha256=Ey42VCAsV2G1WzCZ3qy1IAoG88zeba3O0iZjiodJZZA,16054
9
- elspais/commands/hash_cmd.py,sha256=pPKvhS99Nb-AEO5JrLUJQNQbXkfCJ0vVQE_L8PZW5NQ,5686
10
- elspais/commands/index.py,sha256=_jPGt_LnGI6gGJLonzOoM978YpTj14GWDCCemtSIah4,5283
11
- elspais/commands/init.py,sha256=y2vxR5pvd0gmONJYjX3GtGbMfmJU11k_zRKWCm7O6Qo,3870
12
- elspais/commands/rules_cmd.py,sha256=b2d0l-rn-WTd6ULJWsjAebBTcKv_yndO7pVNc29QEoo,3415
13
- elspais/commands/trace.py,sha256=xXpXD_ZDsr2B0YA342V4RJpV0zeRrq_l-gxwvO8NKHo,7651
14
- elspais/commands/validate.py,sha256=dIjDUU3zKfgnVB9rFggGr6_W9i1X6NVqRhfWoTkP7f0,14346
15
- elspais/config/__init__.py,sha256=NkQEonHWWiXXCDrfehOCrsEYSuhj75KYj8oBQ7FuS4c,292
16
- elspais/config/defaults.py,sha256=6GddebKwrDAiTp0tGzkNSEuGM_HeA846o8CQPYS4yz8,5177
17
- elspais/config/loader.py,sha256=MnG_j2W1pOSRTTUHAOvu5xcJUAzDFNPvRjloFXpM15w,13827
18
- elspais/core/__init__.py,sha256=OTQ1TOf7iLN4czmlkrV5tiaxpAat0VcrWpxYbfonAys,576
19
- elspais/core/content_rules.py,sha256=4UoA_SUJK5R2MG9NE0Z8sNzMVPq3beEJGKEtX_NAeTk,4515
20
- elspais/core/git.py,sha256=oM0jQUuqdMYc95j2Q1xqEH8a3X33u0Xe57TsTDUrhH4,11213
21
- elspais/core/hasher.py,sha256=X3Ry_M6zgs2pZPZ3UFItlvM0mRW6aPS0SKPhCYeaFUE,4259
22
- elspais/core/models.py,sha256=G08Yg9_69SSrdfGCgZJmya6DESiCijS2Y228q32m0l8,9558
23
- elspais/core/parser.py,sha256=LlureFW9dbpf26VsSF8yP7IvHcZC4zaJ_YPWgqx9sdc,22140
24
- elspais/core/patterns.py,sha256=wEkzIjBRDDFyR3LZ-Lbm0a2IaU6Pdi80a9UUqb_S_aQ,13082
25
- elspais/core/rules.py,sha256=WIn41JupkZannGgEfhqK__aomsJVU9aqpq__s2ZpZgU,19036
26
- elspais/mcp/__init__.py,sha256=5yYWJpYkRu8AyJHUkbIP1HVngdyGEygzonJjdypAKb0,1143
27
- elspais/mcp/__main__.py,sha256=oqpwTiE14vr5AGnP0MxRzILx_hYqonUMMK96dX-EXVw,134
28
- elspais/mcp/context.py,sha256=MmYsDFA6nEVmgRffCQlqJMQjI0joQQJh1tFFPEeUeCA,5538
29
- elspais/mcp/serializers.py,sha256=FuSJT_Qg5BTQEwdER0G7ES2IJYZw7mDqyQqQIZ6_3FA,2832
30
- elspais/mcp/server.py,sha256=tgmeodGIqzz3vvGunDI6NhY0avQKn0F0yOiF7sbjJ-I,10416
31
- elspais/testing/__init__.py,sha256=hJB3V28HoeZUnIexi2mkaBwo0bQ7uSxBs-IZmcmpFtQ,879
32
- elspais/testing/config.py,sha256=PQkrnuk_p8pObc-Nio3s3mIKLO4AfB-2eiwXruXTw0Y,1620
33
- elspais/testing/mapper.py,sha256=EGund_KgeYbAnWRRcnuVs0xCzlf7EvJ-qiluSmvRIso,5649
34
- elspais/testing/result_parser.py,sha256=u-TI5oytCqxz769AyU7WF9mOOULSzZAArvBg6JXwG1Q,9280
35
- elspais/testing/scanner.py,sha256=PEn0qJCE2eX2SCru3Cc-v18mf81q7BNkPYE-MZ3m8CM,7037
36
- elspais-0.9.3.dist-info/METADATA,sha256=Le09mH3JQg_AZEPTcI5fmmIGpawHRp6IrZOOfAvffno,10642
37
- elspais-0.9.3.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
38
- elspais-0.9.3.dist-info/entry_points.txt,sha256=yWZZEfn2fBSKSzGoS-fMQ9YoTkyeu6-i7Oht6NsdKpk,45
39
- elspais-0.9.3.dist-info/licenses/LICENSE,sha256=x_dNMsy_askp2MmKXZFL2bKW_tDiJHcRTyAg0TY1RMI,1063
40
- elspais-0.9.3.dist-info/RECORD,,