elspais 0.9.1__py3-none-any.whl → 0.11.0__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 (75) hide show
  1. elspais/cli.py +123 -1
  2. elspais/commands/changed.py +160 -0
  3. elspais/commands/hash_cmd.py +72 -26
  4. elspais/commands/reformat_cmd.py +458 -0
  5. elspais/commands/trace.py +157 -3
  6. elspais/commands/validate.py +81 -18
  7. elspais/core/git.py +352 -0
  8. elspais/core/models.py +2 -0
  9. elspais/core/parser.py +68 -24
  10. elspais/reformat/__init__.py +50 -0
  11. elspais/reformat/detector.py +119 -0
  12. elspais/reformat/hierarchy.py +246 -0
  13. elspais/reformat/line_breaks.py +220 -0
  14. elspais/reformat/prompts.py +123 -0
  15. elspais/reformat/transformer.py +264 -0
  16. elspais/sponsors/__init__.py +432 -0
  17. elspais/trace_view/__init__.py +54 -0
  18. elspais/trace_view/coverage.py +183 -0
  19. elspais/trace_view/generators/__init__.py +12 -0
  20. elspais/trace_view/generators/base.py +329 -0
  21. elspais/trace_view/generators/csv.py +122 -0
  22. elspais/trace_view/generators/markdown.py +175 -0
  23. elspais/trace_view/html/__init__.py +31 -0
  24. elspais/trace_view/html/generator.py +1006 -0
  25. elspais/trace_view/html/templates/base.html +283 -0
  26. elspais/trace_view/html/templates/components/code_viewer_modal.html +14 -0
  27. elspais/trace_view/html/templates/components/file_picker_modal.html +20 -0
  28. elspais/trace_view/html/templates/components/legend_modal.html +69 -0
  29. elspais/trace_view/html/templates/components/review_panel.html +118 -0
  30. elspais/trace_view/html/templates/partials/review/help/help-panel.json +244 -0
  31. elspais/trace_view/html/templates/partials/review/help/onboarding.json +77 -0
  32. elspais/trace_view/html/templates/partials/review/help/tooltips.json +237 -0
  33. elspais/trace_view/html/templates/partials/review/review-comments.js +928 -0
  34. elspais/trace_view/html/templates/partials/review/review-data.js +961 -0
  35. elspais/trace_view/html/templates/partials/review/review-help.js +679 -0
  36. elspais/trace_view/html/templates/partials/review/review-init.js +177 -0
  37. elspais/trace_view/html/templates/partials/review/review-line-numbers.js +429 -0
  38. elspais/trace_view/html/templates/partials/review/review-packages.js +1029 -0
  39. elspais/trace_view/html/templates/partials/review/review-position.js +540 -0
  40. elspais/trace_view/html/templates/partials/review/review-resize.js +115 -0
  41. elspais/trace_view/html/templates/partials/review/review-status.js +659 -0
  42. elspais/trace_view/html/templates/partials/review/review-sync.js +992 -0
  43. elspais/trace_view/html/templates/partials/review-styles.css +2238 -0
  44. elspais/trace_view/html/templates/partials/scripts.js +1741 -0
  45. elspais/trace_view/html/templates/partials/styles.css +1756 -0
  46. elspais/trace_view/models.py +353 -0
  47. elspais/trace_view/review/__init__.py +60 -0
  48. elspais/trace_view/review/branches.py +1149 -0
  49. elspais/trace_view/review/models.py +1205 -0
  50. elspais/trace_view/review/position.py +609 -0
  51. elspais/trace_view/review/server.py +1056 -0
  52. elspais/trace_view/review/status.py +470 -0
  53. elspais/trace_view/review/storage.py +1367 -0
  54. elspais/trace_view/scanning.py +213 -0
  55. elspais/trace_view/specs/README.md +84 -0
  56. elspais/trace_view/specs/tv-d00001-template-architecture.md +36 -0
  57. elspais/trace_view/specs/tv-d00002-css-extraction.md +37 -0
  58. elspais/trace_view/specs/tv-d00003-js-extraction.md +43 -0
  59. elspais/trace_view/specs/tv-d00004-build-embedding.md +40 -0
  60. elspais/trace_view/specs/tv-d00005-test-format.md +78 -0
  61. elspais/trace_view/specs/tv-d00010-review-data-models.md +33 -0
  62. elspais/trace_view/specs/tv-d00011-review-storage.md +33 -0
  63. elspais/trace_view/specs/tv-d00012-position-resolution.md +33 -0
  64. elspais/trace_view/specs/tv-d00013-git-branches.md +31 -0
  65. elspais/trace_view/specs/tv-d00014-review-api-server.md +31 -0
  66. elspais/trace_view/specs/tv-d00015-status-modifier.md +27 -0
  67. elspais/trace_view/specs/tv-d00016-js-integration.md +33 -0
  68. elspais/trace_view/specs/tv-p00001-html-generator.md +33 -0
  69. elspais/trace_view/specs/tv-p00002-review-system.md +29 -0
  70. {elspais-0.9.1.dist-info → elspais-0.11.0.dist-info}/METADATA +78 -26
  71. elspais-0.11.0.dist-info/RECORD +101 -0
  72. elspais-0.9.1.dist-info/RECORD +0 -38
  73. {elspais-0.9.1.dist-info → elspais-0.11.0.dist-info}/WHEEL +0 -0
  74. {elspais-0.9.1.dist-info → elspais-0.11.0.dist-info}/entry_points.txt +0 -0
  75. {elspais-0.9.1.dist-info → elspais-0.11.0.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,15 +1,14 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: elspais
3
- Version: 0.9.1
3
+ Version: 0.11.0
4
4
  Summary: Requirements validation and traceability tools - L-Space connects all libraries
5
- Home-page: https://github.com/anspar/elspais
6
- Author: Anspar
7
- Author-email: dev@anspar.io
8
- License: MIT
5
+ Project-URL: Homepage, https://github.com/anspar/elspais
9
6
  Project-URL: Documentation, https://github.com/anspar/elspais#readme
10
7
  Project-URL: Repository, https://github.com/anspar/elspais
11
8
  Project-URL: Issues, https://github.com/anspar/elspais/issues
12
9
  Project-URL: Changelog, https://github.com/anspar/elspais/blob/main/CHANGELOG.md
10
+ Author-email: Anspar <dev@anspar.io>
11
+ License-File: LICENSE
13
12
  Keywords: documentation,requirements,specifications,traceability,validation
14
13
  Classifier: Development Status :: 4 - Beta
15
14
  Classifier: Environment :: Console
@@ -25,6 +24,11 @@ Classifier: Topic :: Software Development :: Documentation
25
24
  Classifier: Topic :: Software Development :: Quality Assurance
26
25
  Classifier: Typing :: Typed
27
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'
28
32
  Provides-Extra: binary
29
33
  Requires-Dist: pyinstaller>=6.0; extra == 'binary'
30
34
  Provides-Extra: dev
@@ -35,6 +39,12 @@ Requires-Dist: pytest>=7.0; extra == 'dev'
35
39
  Requires-Dist: ruff>=0.1.0; extra == 'dev'
36
40
  Provides-Extra: mcp
37
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'
38
48
  Description-Content-Type: text/markdown
39
49
 
40
50
  # elspais
@@ -57,18 +67,50 @@ Description-Content-Type: text/markdown
57
67
 
58
68
  ## Installation
59
69
 
70
+ ### For End Users
71
+
60
72
  ```bash
73
+ # Recommended: Isolated installation with pipx
74
+ pipx install elspais
75
+
76
+ # Or standard pip installation
61
77
  pip install elspais
62
78
  ```
63
79
 
64
- Or install from source:
80
+ ### For Development
65
81
 
66
82
  ```bash
67
83
  git clone https://github.com/anspar/elspais.git
68
84
  cd elspais
69
- pip install -e .
85
+ pip install -e ".[dev]"
86
+ ```
87
+
88
+ ### For Docker and CI/CD
89
+
90
+ For faster installation in containerized environments, consider [uv](https://github.com/astral-sh/uv):
91
+
92
+ ```dockerfile
93
+ # Example Dockerfile
94
+ FROM python:3.11-slim
95
+
96
+ # Copy uv binary
97
+ COPY --from=ghcr.io/astral-sh/uv:latest /uv /usr/local/bin/uv
98
+
99
+ # Install elspais (10-100x faster than pip)
100
+ RUN uv pip install --system --no-cache elspais==0.9.3
70
101
  ```
71
102
 
103
+ ```yaml
104
+ # Example GitHub Actions
105
+ - name: Install uv
106
+ uses: astral-sh/setup-uv@v2
107
+
108
+ - name: Install elspais
109
+ run: uv pip install --system elspais==0.9.3
110
+ ```
111
+
112
+ **Note:** For regulated/medical software projects, always pin the exact version for reproducibility.
113
+
72
114
  ## Quick Start
73
115
 
74
116
  ### Initialize a Repository
@@ -185,22 +227,28 @@ See [docs/configuration.md](docs/configuration.md) for full reference.
185
227
  elspais expects requirements in Markdown format:
186
228
 
187
229
  ```markdown
188
- ### REQ-d00001: Requirement Title
230
+ # REQ-d00001: Requirement Title
231
+
232
+ **Level**: Dev | **Status**: Active | **Implements**: REQ-p00001
189
233
 
190
- **Level**: Dev | **Implements**: p00001 | **Status**: Active
234
+ ## Assertions
191
235
 
192
- The system SHALL provide user authentication.
236
+ A. The system SHALL provide user authentication via email/password.
237
+ B. Sessions SHALL expire after 30 minutes of inactivity.
193
238
 
194
- **Rationale**: Security requires identity verification.
239
+ ## Rationale
195
240
 
196
- **Acceptance Criteria**:
197
- - Users can log in with email/password
198
- - Session expires after 30 minutes of inactivity
241
+ Security requires identity verification.
199
242
 
200
243
  *End* *Requirement Title* | **Hash**: a1b2c3d4
201
244
  ---
202
245
  ```
203
246
 
247
+ Key format elements:
248
+ - **Assertions section**: Labeled A-Z, each using SHALL for normative statements
249
+ - **One-way traceability**: Children reference parents via `Implements:`
250
+ - **Hash footer**: SHA-256 hash for change detection
251
+
204
252
  ## ID Pattern Examples
205
253
 
206
254
  elspais supports multiple ID formats:
@@ -328,19 +376,23 @@ Options:
328
376
  --help Show help
329
377
 
330
378
  Commands:
331
- validate Validate requirements format, links, hashes
332
- trace Generate traceability matrix
333
- hash Manage requirement hashes (verify, update)
334
- index Validate or regenerate INDEX.md
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
- mcp MCP server commands (requires elspais[mcp])
340
- version Show version and check for updates
341
- 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
342
392
  ```
343
393
 
394
+ See [docs/commands.md](docs/commands.md) for comprehensive command documentation.
395
+
344
396
  ## Development
345
397
 
346
398
  ```bash
@@ -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=ZPhYfPednJsLLqIkJOenJ58lEodlsfLVsbmbTz2xdnE,17866
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.0.dist-info/METADATA,sha256=G0pBJOA3mjBhwFEHLxj3kQjpr-Kwgrs7Db_-VkrVrT0,11457
98
+ elspais-0.11.0.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
99
+ elspais-0.11.0.dist-info/entry_points.txt,sha256=yWZZEfn2fBSKSzGoS-fMQ9YoTkyeu6-i7Oht6NsdKpk,45
100
+ elspais-0.11.0.dist-info/licenses/LICENSE,sha256=x_dNMsy_askp2MmKXZFL2bKW_tDiJHcRTyAg0TY1RMI,1063
101
+ elspais-0.11.0.dist-info/RECORD,,
@@ -1,38 +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=yJ8Bs_LfDA9hFvlowYgKOQGx9EoM5-9M2bAphYhrSHc,14098
4
- elspais/commands/__init__.py,sha256=jS7ry2ez7xri-fUlYUw9fGKJi5yTHtVN4PU8voHjgLI,155
5
- elspais/commands/analyze.py,sha256=5hE6YRL8AoAz2ukkR1rj6aiD2TNJi63UHYVJXmKoOUs,7135
6
- elspais/commands/config_cmd.py,sha256=KnH7vISH4041rqQrFftgffYLIujmIllZ_NCl5hIvCnE,13943
7
- elspais/commands/edit.py,sha256=Ey42VCAsV2G1WzCZ3qy1IAoG88zeba3O0iZjiodJZZA,16054
8
- elspais/commands/hash_cmd.py,sha256=pPKvhS99Nb-AEO5JrLUJQNQbXkfCJ0vVQE_L8PZW5NQ,5686
9
- elspais/commands/index.py,sha256=_jPGt_LnGI6gGJLonzOoM978YpTj14GWDCCemtSIah4,5283
10
- elspais/commands/init.py,sha256=y2vxR5pvd0gmONJYjX3GtGbMfmJU11k_zRKWCm7O6Qo,3870
11
- elspais/commands/rules_cmd.py,sha256=b2d0l-rn-WTd6ULJWsjAebBTcKv_yndO7pVNc29QEoo,3415
12
- elspais/commands/trace.py,sha256=xXpXD_ZDsr2B0YA342V4RJpV0zeRrq_l-gxwvO8NKHo,7651
13
- elspais/commands/validate.py,sha256=JItxCp9LjfJ-jD11C08NcnF37JFcfNacIYJCP3SV-2M,13083
14
- elspais/config/__init__.py,sha256=NkQEonHWWiXXCDrfehOCrsEYSuhj75KYj8oBQ7FuS4c,292
15
- elspais/config/defaults.py,sha256=6GddebKwrDAiTp0tGzkNSEuGM_HeA846o8CQPYS4yz8,5177
16
- elspais/config/loader.py,sha256=MnG_j2W1pOSRTTUHAOvu5xcJUAzDFNPvRjloFXpM15w,13827
17
- elspais/core/__init__.py,sha256=OTQ1TOf7iLN4czmlkrV5tiaxpAat0VcrWpxYbfonAys,576
18
- elspais/core/content_rules.py,sha256=4UoA_SUJK5R2MG9NE0Z8sNzMVPq3beEJGKEtX_NAeTk,4515
19
- elspais/core/hasher.py,sha256=X3Ry_M6zgs2pZPZ3UFItlvM0mRW6aPS0SKPhCYeaFUE,4259
20
- elspais/core/models.py,sha256=G08Yg9_69SSrdfGCgZJmya6DESiCijS2Y228q32m0l8,9558
21
- elspais/core/parser.py,sha256=LlureFW9dbpf26VsSF8yP7IvHcZC4zaJ_YPWgqx9sdc,22140
22
- elspais/core/patterns.py,sha256=wEkzIjBRDDFyR3LZ-Lbm0a2IaU6Pdi80a9UUqb_S_aQ,13082
23
- elspais/core/rules.py,sha256=WIn41JupkZannGgEfhqK__aomsJVU9aqpq__s2ZpZgU,19036
24
- elspais/mcp/__init__.py,sha256=5yYWJpYkRu8AyJHUkbIP1HVngdyGEygzonJjdypAKb0,1143
25
- elspais/mcp/__main__.py,sha256=oqpwTiE14vr5AGnP0MxRzILx_hYqonUMMK96dX-EXVw,134
26
- elspais/mcp/context.py,sha256=MmYsDFA6nEVmgRffCQlqJMQjI0joQQJh1tFFPEeUeCA,5538
27
- elspais/mcp/serializers.py,sha256=FuSJT_Qg5BTQEwdER0G7ES2IJYZw7mDqyQqQIZ6_3FA,2832
28
- elspais/mcp/server.py,sha256=tgmeodGIqzz3vvGunDI6NhY0avQKn0F0yOiF7sbjJ-I,10416
29
- elspais/testing/__init__.py,sha256=hJB3V28HoeZUnIexi2mkaBwo0bQ7uSxBs-IZmcmpFtQ,879
30
- elspais/testing/config.py,sha256=PQkrnuk_p8pObc-Nio3s3mIKLO4AfB-2eiwXruXTw0Y,1620
31
- elspais/testing/mapper.py,sha256=EGund_KgeYbAnWRRcnuVs0xCzlf7EvJ-qiluSmvRIso,5649
32
- elspais/testing/result_parser.py,sha256=u-TI5oytCqxz769AyU7WF9mOOULSzZAArvBg6JXwG1Q,9280
33
- elspais/testing/scanner.py,sha256=PEn0qJCE2eX2SCru3Cc-v18mf81q7BNkPYE-MZ3m8CM,7037
34
- elspais-0.9.1.dist-info/METADATA,sha256=3AtcIz9g0uMkL_txPwM638E5NBPSWA-jujYGwNahIAU,9682
35
- elspais-0.9.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
36
- elspais-0.9.1.dist-info/entry_points.txt,sha256=yWZZEfn2fBSKSzGoS-fMQ9YoTkyeu6-i7Oht6NsdKpk,45
37
- elspais-0.9.1.dist-info/licenses/LICENSE,sha256=x_dNMsy_askp2MmKXZFL2bKW_tDiJHcRTyAg0TY1RMI,1063
38
- elspais-0.9.1.dist-info/RECORD,,