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,244 @@
1
+ {
2
+ "version": "1.0",
3
+ "helpPanel": {
4
+ "id": "spec-review-help",
5
+ "title": "Spec Review Help",
6
+ "sections": [
7
+ {
8
+ "id": "how-to",
9
+ "title": "How Do I...",
10
+ "icon": "question-circle",
11
+ "items": [
12
+ {
13
+ "id": "start-review",
14
+ "question": "How do I start reviewing?",
15
+ "answer": "1. Set your username in the header field\n2. Enable **Review Mode** using the toggle\n3. Select or create a review package\n4. Click on a REQ to start adding comments"
16
+ },
17
+ {
18
+ "id": "add-comment",
19
+ "question": "How do I add a comment?",
20
+ "answer": "1. Select a REQ in the tree\n2. Click **Add Comment** in the review panel\n3. Choose a position type (General, Line, Block, or Word)\n4. Write your comment using Markdown\n5. Click **Submit**"
21
+ },
22
+ {
23
+ "id": "comment-on-line",
24
+ "question": "How do I comment on a specific line?",
25
+ "answer": "1. Click on the line number in the content view, or\n2. Select **Line** position type and enter the line number\n\nThe comment will be anchored to that line."
26
+ },
27
+ {
28
+ "id": "see-others-comments",
29
+ "question": "How do I see other reviewers' comments?",
30
+ "answer": "Click **Fetch All** in the sync controls. This consolidates comments from all reviewers working on the same package."
31
+ },
32
+ {
33
+ "id": "resolve-thread",
34
+ "question": "How do I resolve a comment thread?",
35
+ "answer": "Find the thread in the review panel and click **Resolve**. The thread will be marked as resolved but remains visible (faded)."
36
+ },
37
+ {
38
+ "id": "create-package",
39
+ "question": "How do I create a review package?",
40
+ "answer": "1. Open the **Review Packages** panel\n2. Click **+ New Package**\n3. Enter a name and description\n4. Click **Create**\n\nYour review branch will be created automatically. You must create a package before adding comments."
41
+ },
42
+ {
43
+ "id": "add-req-to-package",
44
+ "question": "How do I add a REQ to my package?",
45
+ "answer": "**Method 1**: Click \"Set to Review\" on any REQ to add it to your active package.\n\n**Method 2**: Use the package controls to manually add/remove REQs."
46
+ },
47
+ {
48
+ "id": "request-status-change",
49
+ "question": "How do I change a REQ's status?",
50
+ "answer": "For **Draft → Review**: Click \"Set to Review\" directly.\n\nFor other transitions: Click \"Request Status Change\", select the target status, provide justification, and wait for required approvals."
51
+ },
52
+ {
53
+ "id": "see-original-file",
54
+ "question": "How do I see a file as it was when a comment was made?",
55
+ "answer": "When a file has been modified since a comment was made, you'll see a **Modified** badge. Click **Show Original** to view the file at the exact commit when the comment was created."
56
+ },
57
+ {
58
+ "id": "view-archived-package",
59
+ "question": "How do I view an archived package?",
60
+ "answer": "1. Scroll to the **Archived Packages** section in the packages panel\n2. Click on any archived package to open the archive viewer\n3. The viewer shows all threads and comments in read-only mode\n\n**Note**: Archived packages cannot be modified or reopened."
61
+ },
62
+ {
63
+ "id": "archive-package-manually",
64
+ "question": "How do I archive a package manually?",
65
+ "answer": "1. Click the **Archive** button on the package\n2. Confirm the archival\n\nThe package and all its threads will be moved to the archive. This cannot be undone, but the data is preserved for audit purposes."
66
+ }
67
+ ]
68
+ },
69
+ {
70
+ "id": "indicators",
71
+ "title": "What Does It Mean When...",
72
+ "icon": "info-circle",
73
+ "items": [
74
+ {
75
+ "id": "modified-badge",
76
+ "question": "A thread shows 'Modified' (orange badge)?",
77
+ "answer": "The file has been changed since the comment was made. Line numbers may have shifted.\n\n**Tip**: Click **Show Original** to see the file exactly as it was when the comment was created."
78
+ },
79
+ {
80
+ "id": "position-shifted",
81
+ "question": "A position shows 'may have shifted'?",
82
+ "answer": "The file was edited after the comment was made, and line insertions or deletions may have changed the actual line number.\n\nThe system tries to estimate the new position, but click **Show Original** for certainty."
83
+ },
84
+ {
85
+ "id": "version-lost",
86
+ "question": "A thread shows 'Version Lost' (gray badge)?",
87
+ "answer": "The original git commit cannot be found. This usually means the commit was part of a branch that was deleted or force-pushed.\n\nThe comment content is preserved, but the original file version cannot be retrieved."
88
+ },
89
+ {
90
+ "id": "sync-pending",
91
+ "question": "The sync indicator shows 'Pending' (yellow)?",
92
+ "answer": "You have local changes that haven't been pushed to the remote yet. Click **Push** to sync your changes."
93
+ },
94
+ {
95
+ "id": "sync-behind",
96
+ "question": "The sync indicator shows 'Behind' (blue arrow)?",
97
+ "answer": "The remote has changes you haven't fetched yet. Click **Fetch** to pull the latest changes."
98
+ },
99
+ {
100
+ "id": "unanchored-position",
101
+ "question": "A comment position shows as 'General' unexpectedly?",
102
+ "answer": "The original anchor (line, block, or word) could not be found due to significant file changes. The comment was \"unanchored\" and now applies to the whole REQ.\n\nClick **Show Original** to see where the comment was originally placed."
103
+ },
104
+ {
105
+ "id": "thread-resolved",
106
+ "question": "A thread appears faded?",
107
+ "answer": "The thread has been resolved. It's still visible for reference but the issue has been addressed.\n\nClick **Reopen** if further discussion is needed."
108
+ },
109
+ {
110
+ "id": "approval-pending",
111
+ "question": "A status request shows 'Pending'?",
112
+ "answer": "The status change is awaiting approvals from required approvers. Check the request details to see who needs to approve."
113
+ },
114
+ {
115
+ "id": "package-archived",
116
+ "question": "A package shows 'Archived'?",
117
+ "answer": "The package has been archived and is read-only. Packages are archived when:\n\n- All threads are resolved (auto-archive)\n- The package was manually archived\n- The package was deleted\n\nView archived packages in the **Archived Packages** section."
118
+ },
119
+ {
120
+ "id": "read-only-notice",
121
+ "question": "I see 'Read Only' in the review panel?",
122
+ "answer": "You are viewing an archived package. Archived packages preserve the complete review history but cannot be modified.\n\nTo continue reviewing, select an active package or create a new one."
123
+ }
124
+ ]
125
+ },
126
+ {
127
+ "id": "troubleshooting",
128
+ "title": "Troubleshooting",
129
+ "icon": "exclamation-triangle",
130
+ "items": [
131
+ {
132
+ "id": "cant-see-comments",
133
+ "question": "I can't see other users' comments",
134
+ "answer": "1. Click **Fetch All** to consolidate from all branches\n2. Ensure other reviewers have pushed their changes\n3. Verify you're on the correct package\n4. Check the **Contributors** list to see who has reviewed"
135
+ },
136
+ {
137
+ "id": "sync-failing",
138
+ "question": "Git sync is failing",
139
+ "answer": "1. Check your network connection\n2. Verify git credentials are configured\n3. Try manual sync: `git push origin HEAD`\n4. Check for merge conflicts in `.reviews/` directory\n5. Contact your team lead if issues persist"
140
+ },
141
+ {
142
+ "id": "wrong-position",
143
+ "question": "My comment is showing at the wrong position",
144
+ "answer": "The file was likely modified after your comment was made.\n\n1. Click **Show Original** to see the exact original position\n2. Check the **diff** info to understand what changed\n3. Create a new comment at the correct position if needed"
145
+ },
146
+ {
147
+ "id": "status-wont-change",
148
+ "question": "I can't change a REQ's status",
149
+ "answer": "1. Some transitions require approvals - check if you need to request rather than directly change\n2. Verify you have permission for this transition\n3. Check if there's already a pending request for this REQ\n4. Review the **Status Transitions** table for allowed transitions"
150
+ },
151
+ {
152
+ "id": "package-not-visible",
153
+ "question": "I can't find my package",
154
+ "answer": "1. Check the **Review Packages** panel (left sidebar)\n2. Ensure Review Mode is enabled\n3. Try clicking **Fetch** to pull remote branches\n4. The package may have been deleted by another user"
155
+ },
156
+ {
157
+ "id": "comment-disappeared",
158
+ "question": "My comment seems to have disappeared",
159
+ "answer": "1. Check if you're on the correct package/branch\n2. Click **Fetch** to sync with remote\n3. Verify the comment was successfully submitted (check for error messages)\n4. The thread may have been resolved - check the resolved threads section"
160
+ },
161
+ {
162
+ "id": "branch-conflict",
163
+ "question": "I'm getting git conflicts",
164
+ "answer": "Each reviewer should work on their own branch: `reviews/{package}/{username}`\n\nIf you see conflicts:\n1. Check if someone else used your username\n2. Pull and resolve conflicts manually\n3. Contact your team to coordinate"
165
+ }
166
+ ]
167
+ },
168
+ {
169
+ "id": "concepts",
170
+ "title": "Key Concepts",
171
+ "icon": "book",
172
+ "items": [
173
+ {
174
+ "id": "what-is-package",
175
+ "question": "What is a review package?",
176
+ "answer": "A **package** groups related REQs for a review session. Examples:\n\n- Sprint reviews\n- Release preparation\n- Feature-specific reviews\n\nEach package has its own set of branches, one per reviewer."
177
+ },
178
+ {
179
+ "id": "what-is-thread",
180
+ "question": "What is a comment thread?",
181
+ "answer": "A **thread** is a conversation about a specific part of a REQ. It includes:\n\n- **Position**: Where in the REQ (line, block, word, or general)\n- **Comments**: One or more replies\n- **Resolved Status**: Whether the issue is addressed\n- **Version Info**: Git commit when created"
182
+ },
183
+ {
184
+ "id": "position-types",
185
+ "question": "What are the position types?",
186
+ "answer": "- **General**: Comment on the whole REQ\n- **Line**: Comment on a specific line number\n- **Block**: Comment on a range of lines (start to end)\n- **Word**: Comment on a specific word or phrase"
187
+ },
188
+ {
189
+ "id": "branch-model",
190
+ "question": "How does the branch model work?",
191
+ "answer": "Each reviewer works on their own branch:\n\n```\nreviews/{package-id}/alice\nreviews/{package-id}/bob\nreviews/{package-id}/charlie\n```\n\nThis prevents merge conflicts during active review. Use **Fetch All** to see consolidated comments."
192
+ },
193
+ {
194
+ "id": "version-tracking",
195
+ "question": "How does version tracking work?",
196
+ "answer": "When you create a comment, the system records the git commit and file hash.\n\nIf the file changes later:\n- A **Modified** badge appears\n- Line positions may shift\n- You can click **Show Original** to see the file at the comment's commit\n- Diff info shows lines added/removed"
197
+ },
198
+ {
199
+ "id": "status-workflow",
200
+ "question": "What is the status workflow?",
201
+ "answer": "REQs progress through statuses:\n\n**Draft** → **Review** → **Active** → **Deprecated**\n\n- Draft → Review: Direct (adds to package)\n- Review → Active: Requires approvals\n- Active → Deprecated: Requires approval"
202
+ },
203
+ {
204
+ "id": "approvals",
205
+ "question": "How do approvals work?",
206
+ "answer": "Some status transitions require approvals from designated approvers:\n\n- **product_owner**: Business decisions\n- **tech_lead**: Technical validation\n\nWhen you request a status change, required approvers are notified and must approve before the change is applied."
207
+ },
208
+ {
209
+ "id": "what-is-archive",
210
+ "question": "What happens when a package is archived?",
211
+ "answer": "**Archival** preserves the complete review history:\n\n- All threads and comments are saved\n- Git audit trail (branch, commits) is recorded\n- The reason for archival is noted\n\n**Auto-archive triggers**:\n- All threads resolved → reason: \"resolved\"\n- Package deleted → reason: \"deleted\"\n- Manual archive → reason: \"manual\"\n\nArchived data is stored in `.reviews/archive/` and visible in the Archived Packages section."
212
+ },
213
+ {
214
+ "id": "git-audit-trail",
215
+ "question": "What is the git audit trail?",
216
+ "answer": "Each package tracks:\n\n- **Branch Name**: The review branch\n- **Creation Commit**: Git hash when package was created\n- **Last Review Commit**: Most recent commit with review activity\n\nThis enables tracing reviews back to specific code versions.\n\n**Note**: Commits may be squashed on merge. The recorded hashes may no longer exist in the main branch history."
217
+ }
218
+ ]
219
+ }
220
+ ],
221
+ "footer": {
222
+ "text": "Need more help? See the full documentation.",
223
+ "links": [
224
+ {
225
+ "label": "User Guide",
226
+ "url": "docs/spec-review-user-guide.md"
227
+ },
228
+ {
229
+ "label": "Quick Start",
230
+ "url": "docs/spec-review-quick-start.md"
231
+ },
232
+ {
233
+ "label": "Reference",
234
+ "url": "docs/spec-review-reference.md"
235
+ }
236
+ ]
237
+ },
238
+ "settings": {
239
+ "searchable": true,
240
+ "collapsible": true,
241
+ "defaultExpanded": ["how-to"]
242
+ }
243
+ }
244
+ }
@@ -0,0 +1,77 @@
1
+ {
2
+ "version": "1.0",
3
+ "wizard": {
4
+ "id": "spec-review-onboarding",
5
+ "title": "Welcome to Spec Review",
6
+ "steps": [
7
+ {
8
+ "id": "welcome",
9
+ "title": "Welcome to Spec Review!",
10
+ "content": "This tool helps teams collaborate on requirement documents through comments, status changes, and approval workflows.\n\nAll your work is automatically saved and synced via git.",
11
+ "highlight": null,
12
+ "position": "center",
13
+ "buttons": {
14
+ "next": "Get Started"
15
+ }
16
+ },
17
+ {
18
+ "id": "username",
19
+ "title": "Set Your Username",
20
+ "content": "Your username identifies your comments and creates your personal review branch.\n\nEnter your name or handle in the username field.\n\nYour branch will be: reviews/{package}/{username}",
21
+ "highlight": "#username-field",
22
+ "position": "below",
23
+ "buttons": {
24
+ "back": "Back",
25
+ "next": "Next"
26
+ }
27
+ },
28
+ {
29
+ "id": "packages",
30
+ "title": "Review Packages",
31
+ "content": "Packages group related REQs for review. Common uses:\n\n- Sprint reviews\n- Release preparation\n- Feature-specific reviews\n\nCreate a package first, then add REQs and comments to it. Packages can be archived when complete.",
32
+ "highlight": ".review-packages-panel",
33
+ "position": "right",
34
+ "buttons": {
35
+ "back": "Back",
36
+ "next": "Next"
37
+ }
38
+ },
39
+ {
40
+ "id": "comments",
41
+ "title": "Adding Comments",
42
+ "content": "Click any REQ, then use the review panel to add comments.\n\nComment types:\n- **General**: Whole REQ\n- **Line**: Specific line\n- **Block**: Line range\n- **Word**: Specific text\n\nComments are git-backed and collaborative!",
43
+ "highlight": ".rs-panel",
44
+ "position": "left",
45
+ "buttons": {
46
+ "back": "Back",
47
+ "next": "Next"
48
+ }
49
+ },
50
+ {
51
+ "id": "collaboration",
52
+ "title": "Working Together",
53
+ "content": "Each reviewer has their own branch:\n\n reviews/my-package/alice\n reviews/my-package/bob\n\nClick \"Fetch All\" to see everyone's comments merged together.\n\nResolve threads when issues are addressed.",
54
+ "highlight": ".rs-sync-controls",
55
+ "position": "below",
56
+ "buttons": {
57
+ "back": "Back",
58
+ "next": "Start Reviewing"
59
+ }
60
+ }
61
+ ],
62
+ "completion": {
63
+ "title": "You're Ready!",
64
+ "content": "You've completed the quick tour. Here are some tips:\n\n- Click the **?** icon anytime for help\n- Hover over controls for tooltips\n- Check the User Guide for detailed info\n\nHappy reviewing!",
65
+ "buttons": {
66
+ "close": "Start Reviewing",
67
+ "docs": "View User Guide"
68
+ }
69
+ },
70
+ "settings": {
71
+ "showOnFirstVisit": true,
72
+ "canSkip": true,
73
+ "canReplay": true,
74
+ "storageKey": "spec-review-onboarding-complete"
75
+ }
76
+ }
77
+ }
@@ -0,0 +1,237 @@
1
+ {
2
+ "version": "1.0",
3
+ "tooltips": {
4
+ "header": {
5
+ "review-mode-toggle": {
6
+ "title": "Review Mode",
7
+ "text": "Enable to access comment threads, status changes, and collaborative review features."
8
+ },
9
+ "username-field": {
10
+ "title": "Your Username",
11
+ "text": "Your username identifies your comments and creates your personal review branch: reviews/{package}/{username}"
12
+ },
13
+ "package-context-badge": {
14
+ "title": "Active Package",
15
+ "text": "Shows which review package you're currently working in. All comments will be associated with this package."
16
+ },
17
+ "package-filter-toggle": {
18
+ "title": "Package Filter",
19
+ "text": "When enabled, only shows REQs that are in the active package."
20
+ }
21
+ },
22
+ "packages-panel": {
23
+ "packages-header": {
24
+ "title": "Review Packages",
25
+ "text": "Packages group related REQs for review. Create packages for sprints, releases, or feature reviews."
26
+ },
27
+ "new-package-button": {
28
+ "title": "Create Package",
29
+ "text": "Create a new review package. You'll be prompted for a name and description."
30
+ },
31
+ "package-item": {
32
+ "title": "Package",
33
+ "text": "Click to activate this package. Your branch will switch to reviews/{package-id}/{username}."
34
+ },
35
+ "package-req-count": {
36
+ "title": "REQ Count",
37
+ "text": "Number of requirements included in this package."
38
+ },
39
+ "archive-button": {
40
+ "title": "Archive Package",
41
+ "text": "Move this package to the archive. All threads and comments are preserved for audit purposes."
42
+ },
43
+ "archived-packages-section": {
44
+ "title": "Archived Packages",
45
+ "text": "Previously archived packages. Click to view in read-only mode."
46
+ },
47
+ "archive-reason-resolved": {
48
+ "title": "Archived: Resolved",
49
+ "text": "This package was automatically archived when all threads were resolved."
50
+ },
51
+ "archive-reason-deleted": {
52
+ "title": "Archived: Deleted",
53
+ "text": "This package was archived when deleted. The review data is preserved."
54
+ },
55
+ "archive-reason-manual": {
56
+ "title": "Archived: Manual",
57
+ "text": "This package was manually archived by a user."
58
+ }
59
+ },
60
+ "comment-form": {
61
+ "position-type-general": {
62
+ "title": "General Position",
63
+ "text": "Comment applies to the entire requirement. Use for high-level feedback."
64
+ },
65
+ "position-type-line": {
66
+ "title": "Line Position",
67
+ "text": "Anchor your comment to a specific line number. Click a line in the content view to pre-fill."
68
+ },
69
+ "position-type-block": {
70
+ "title": "Block Position",
71
+ "text": "Anchor your comment to a range of lines. Enter start and end line numbers."
72
+ },
73
+ "position-type-word": {
74
+ "title": "Word Position",
75
+ "text": "Anchor your comment to a specific word or phrase. Enter the exact text to find."
76
+ },
77
+ "line-number-input": {
78
+ "title": "Line Number",
79
+ "text": "Enter the 1-based line number. You can also click directly on a line in the content view."
80
+ },
81
+ "block-start-input": {
82
+ "title": "Start Line",
83
+ "text": "First line of the block you're commenting on."
84
+ },
85
+ "block-end-input": {
86
+ "title": "End Line",
87
+ "text": "Last line of the block you're commenting on."
88
+ },
89
+ "keyword-input": {
90
+ "title": "Keyword/Phrase",
91
+ "text": "Enter the exact word or phrase to anchor to. Case-sensitive."
92
+ },
93
+ "occurrence-input": {
94
+ "title": "Occurrence",
95
+ "text": "If the word appears multiple times, which occurrence? (1 = first occurrence)"
96
+ },
97
+ "comment-body": {
98
+ "title": "Comment Text",
99
+ "text": "Write your comment using Markdown formatting. Preview is shown below."
100
+ },
101
+ "submit-button": {
102
+ "title": "Submit Comment",
103
+ "text": "Save your comment. It will be committed to git and synced automatically."
104
+ }
105
+ },
106
+ "thread-display": {
107
+ "position-label": {
108
+ "title": "Comment Position",
109
+ "text": "Click to highlight this location in the REQ content."
110
+ },
111
+ "position-warning": {
112
+ "title": "Position May Be Stale",
113
+ "text": "The file has changed since this comment was made. The line number may have shifted."
114
+ },
115
+ "version-badge-modified": {
116
+ "title": "File Modified",
117
+ "text": "The file has changed since this comment was made. Click 'Show Original' to see the original context."
118
+ },
119
+ "version-badge-unavailable": {
120
+ "title": "Version Unavailable",
121
+ "text": "Cannot retrieve the original file version. The git commit may no longer exist."
122
+ },
123
+ "show-original-button": {
124
+ "title": "Show Original",
125
+ "text": "View the file exactly as it was when this comment was made."
126
+ },
127
+ "show-current-button": {
128
+ "title": "Show Current",
129
+ "text": "Return to viewing the current version of the file."
130
+ },
131
+ "resolve-button": {
132
+ "title": "Resolve Thread",
133
+ "text": "Mark this thread as resolved when the issue has been addressed."
134
+ },
135
+ "reopen-button": {
136
+ "title": "Reopen Thread",
137
+ "text": "Reopen this resolved thread if further discussion is needed."
138
+ },
139
+ "reply-button": {
140
+ "title": "Reply",
141
+ "text": "Add a response to this thread."
142
+ }
143
+ },
144
+ "status-panel": {
145
+ "current-status": {
146
+ "title": "Current Status",
147
+ "text": "The current status of this REQ as recorded in the spec file."
148
+ },
149
+ "set-to-review-button": {
150
+ "title": "Set to Review",
151
+ "text": "Change status to 'Review' and add this REQ to your active package."
152
+ },
153
+ "request-status-change": {
154
+ "title": "Request Status Change",
155
+ "text": "Request a formal status change that requires approval from designated approvers."
156
+ },
157
+ "pending-request": {
158
+ "title": "Pending Request",
159
+ "text": "A status change has been requested and is awaiting approvals."
160
+ },
161
+ "approve-button": {
162
+ "title": "Approve",
163
+ "text": "Approve this status change request."
164
+ },
165
+ "reject-button": {
166
+ "title": "Reject",
167
+ "text": "Reject this status change request."
168
+ }
169
+ },
170
+ "sync-controls": {
171
+ "sync-status-synced": {
172
+ "title": "Synced",
173
+ "text": "All your changes have been committed and pushed to the remote."
174
+ },
175
+ "sync-status-pending": {
176
+ "title": "Changes Pending",
177
+ "text": "You have local changes that haven't been pushed yet."
178
+ },
179
+ "sync-status-behind": {
180
+ "title": "Behind Remote",
181
+ "text": "The remote has changes you haven't fetched yet."
182
+ },
183
+ "fetch-button": {
184
+ "title": "Fetch",
185
+ "text": "Pull the latest changes from the remote for your branch."
186
+ },
187
+ "push-button": {
188
+ "title": "Push",
189
+ "text": "Push your local changes to the remote."
190
+ },
191
+ "fetch-all-button": {
192
+ "title": "Fetch All",
193
+ "text": "Fetch and merge comments from all contributors to this package."
194
+ },
195
+ "contributors-list": {
196
+ "title": "Contributors",
197
+ "text": "Users who have contributed to reviewing this package."
198
+ }
199
+ },
200
+ "original-view": {
201
+ "original-banner": {
202
+ "title": "Original View",
203
+ "text": "You are viewing the file as it was when the comment was made. This is read-only."
204
+ },
205
+ "diff-stats": {
206
+ "title": "Changes Since Comment",
207
+ "text": "Shows how many lines were added and removed since the comment was made."
208
+ }
209
+ },
210
+ "archive-viewer": {
211
+ "archive-badge": {
212
+ "title": "Archived",
213
+ "text": "This package has been archived and is read-only."
214
+ },
215
+ "archive-meta-branch": {
216
+ "title": "Branch",
217
+ "text": "The git branch where this review was conducted."
218
+ },
219
+ "archive-meta-created": {
220
+ "title": "Created",
221
+ "text": "Git commit hash when the package was created."
222
+ },
223
+ "archive-meta-last-reviewed": {
224
+ "title": "Last Reviewed",
225
+ "text": "Git commit hash of the most recent review activity."
226
+ },
227
+ "commit-squash-warning": {
228
+ "title": "Commit Hash Warning",
229
+ "text": "This commit may have been squashed during merge. The hash may no longer exist in the main branch."
230
+ },
231
+ "archive-close-button": {
232
+ "title": "Close Archive Viewer",
233
+ "text": "Return to the active review panel."
234
+ }
235
+ }
236
+ }
237
+ }