okstra 0.149.0 → 0.151.0

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 (57) hide show
  1. package/docs/architecture.md +1 -1
  2. package/docs/cli.md +2 -2
  3. package/docs/project-structure-overview.md +1 -1
  4. package/package.json +3 -2
  5. package/runtime/BUILD.json +2 -2
  6. package/runtime/agents/workers/report-writer-worker.md +8 -0
  7. package/runtime/agents/workers/translator-worker.md +67 -0
  8. package/runtime/bin/okstra-render-final-report.py +0 -11
  9. package/runtime/bin/okstra-report-translate.py +191 -0
  10. package/runtime/prompts/lead/adapters/claude-code.md +1 -1
  11. package/runtime/prompts/lead/okstra-lead-contract.md +1 -0
  12. package/runtime/prompts/lead/plan-body-verification.md +1 -1
  13. package/runtime/prompts/lead/report-writer.md +16 -15
  14. package/runtime/prompts/lead/team-contract.md +2 -2
  15. package/runtime/prompts/wizard/prompts.ko.json +17 -1
  16. package/runtime/python/okstra_ctl/analysis_inputs.py +24 -9
  17. package/runtime/python/okstra_ctl/analysis_packet.py +23 -1
  18. package/runtime/python/okstra_ctl/clarification_items.py +241 -44
  19. package/runtime/python/okstra_ctl/codex_dispatch.py +2 -1
  20. package/runtime/python/okstra_ctl/convergence.py +15 -1
  21. package/runtime/python/okstra_ctl/dispatch_core.py +2 -2
  22. package/runtime/python/okstra_ctl/dispatch_state.py +12 -1
  23. package/runtime/python/okstra_ctl/final_report_paths.py +22 -1
  24. package/runtime/python/okstra_ctl/i18n.py +12 -7
  25. package/runtime/python/okstra_ctl/render_final_report.py +18 -17
  26. package/runtime/python/okstra_ctl/report_finalize.py +18 -0
  27. package/runtime/python/okstra_ctl/report_html/filters.py +15 -77
  28. package/runtime/python/okstra_ctl/report_html/render.py +44 -2
  29. package/runtime/python/okstra_ctl/report_translation.py +469 -0
  30. package/runtime/python/okstra_ctl/report_views.py +23 -9
  31. package/runtime/python/okstra_ctl/run.py +1 -1
  32. package/runtime/python/okstra_ctl/user_response.py +11 -6
  33. package/runtime/python/okstra_ctl/wizard.py +100 -25
  34. package/runtime/python/okstra_ctl/worker_liveness.py +130 -36
  35. package/runtime/templates/reports/html/base.template.html +12 -12
  36. package/runtime/templates/reports/html/i18n/en.json +395 -0
  37. package/runtime/templates/reports/html/i18n/ko.json +395 -0
  38. package/runtime/templates/reports/html/macros/forms.html +16 -16
  39. package/runtime/templates/reports/html/macros/visualizations.html +2 -2
  40. package/runtime/templates/reports/html/tasks/change-impact-analysis.template.html +17 -17
  41. package/runtime/templates/reports/html/tasks/error-analysis.template.html +12 -12
  42. package/runtime/templates/reports/html/tasks/feature-analysis.template.html +16 -16
  43. package/runtime/templates/reports/html/tasks/final-verification.template.html +12 -12
  44. package/runtime/templates/reports/html/tasks/implementation-planning.template.html +37 -37
  45. package/runtime/templates/reports/html/tasks/implementation.template.html +18 -18
  46. package/runtime/templates/reports/html/tasks/improvement-discovery.template.html +7 -7
  47. package/runtime/templates/reports/html/tasks/project-analysis.template.html +29 -29
  48. package/runtime/templates/reports/html/tasks/release-handoff.template.html +13 -13
  49. package/runtime/templates/reports/html/tasks/requirements-discovery.template.html +14 -14
  50. package/runtime/templates/reports/report.js +8 -5
  51. package/runtime/validators/validate-report-views.py +1 -1
  52. package/runtime/validators/validate-run.py +59 -31
  53. package/src/cli-registry.mjs +11 -0
  54. package/src/commands/inspect/worker-liveness.mjs +9 -7
  55. package/src/commands/report/translate.mjs +31 -0
  56. package/src/lib/helper-scripts.mjs +1 -0
  57. package/runtime/templates/reports/i18n/ko.json +0 -273
@@ -0,0 +1,395 @@
1
+ {
2
+ "_meta": {
3
+ "lang": "en",
4
+ "note": "Fixed strings of the human HTML report. Keys are shared with ko.json; a key present in one must exist in the other."
5
+ },
6
+ "enum": {
7
+ "coverage": {
8
+ "covered": "A break fails a test",
9
+ "partial": "Partly covered",
10
+ "gap": "No test",
11
+ "risk": "Passes without proving"
12
+ },
13
+ "effort": {
14
+ "S": "Small",
15
+ "M": "Medium",
16
+ "L": "Large",
17
+ "XL": "Very large"
18
+ },
19
+ "versionSource": {
20
+ "manifest-range": "Manifest range",
21
+ "lockfile-pinned": "Lockfile pin",
22
+ "container-image": "Container image",
23
+ "runtime-config": "Runtime config",
24
+ "declared-doc": "Declared in docs"
25
+ },
26
+ "interfaceKind": {
27
+ "port": "Port",
28
+ "adapter": "Adapter",
29
+ "service-api": "Service API",
30
+ "module-export": "Module export",
31
+ "event": "Event"
32
+ },
33
+ "toolKind": {
34
+ "packageManager": "Package manager",
35
+ "build": "Build",
36
+ "test": "Test",
37
+ "lint": "Lint",
38
+ "typecheck": "Type check",
39
+ "format": "Format",
40
+ "ci": "CI",
41
+ "container": "Container"
42
+ },
43
+ "lens": {
44
+ "candidate-found": "Candidate found",
45
+ "no-candidate": "Nothing found"
46
+ },
47
+ "rejectionSource": {
48
+ "brief-desired-outcome": "Brief · desired outcome",
49
+ "brief-out-of-scope": "Brief · out of scope",
50
+ "brief-source-material": "Brief · source material",
51
+ "clarification-raised": "Raised as a question",
52
+ "absent-not-material": "Absent · does not change the call"
53
+ },
54
+ "termSource": {
55
+ "glossary": "Glossary",
56
+ "decision-record": "Decision record",
57
+ "brief": "Brief",
58
+ "clarification": "Your answer"
59
+ },
60
+ "handoffMode": {
61
+ "whole-task": "Whole task",
62
+ "stage-group": "Selected stages"
63
+ }
64
+ },
65
+ "enumHint": {
66
+ "coverage": {
67
+ "covered": "Break this area and a test fails.",
68
+ "partial": "Tests exist, but part of the area runs through none of them.",
69
+ "gap": "No test runs through this area at all.",
70
+ "risk": "Tests run and pass, but they skip or assert nothing, so passing is not evidence that the area works. More dangerous than 'No test', because the suite reports success."
71
+ }
72
+ },
73
+ "base": {
74
+ "skip-to-report-content": "Skip to report content",
75
+ "task": "Task",
76
+ "task-key": "Task key",
77
+ "written": "Written",
78
+ "elapsed": "Elapsed",
79
+ "evidence-ledger": "Evidence ledger",
80
+ "source-confidence": "Source · confidence",
81
+ "export-my-answers": "Export my answers",
82
+ "copy": "Copy",
83
+ "dismiss": "Dismiss",
84
+ "export-downloads": "Export downloads",
85
+ "drop-that-file-into": ". Drop that file into",
86
+ "and-the-next-run-picks-your-answers-up-on-it": "and the next run picks your answers up on its own."
87
+ },
88
+ "macros": {
89
+ "forms": {
90
+ "review-this-analysis": "Review this analysis",
91
+ "verdict": "Verdict",
92
+ "accept": "Accept",
93
+ "request-changes": "Request changes",
94
+ "reject": "Reject",
95
+ "affected-ids": "Affected ids",
96
+ "why": "Why",
97
+ "further-evidence": "Further evidence",
98
+ "scope-change-requested": "Scope change requested",
99
+ "approve-this-plan": "Approve this plan",
100
+ "implementation-option": "Implementation option",
101
+ "i-approve-this-plan": "I approve this plan.",
102
+ "approval-is-held": "Approval is held:",
103
+ "the-code-alone-could-not-settle-these-fill-i": "The code alone could not settle these. Fill in your answers, then press",
104
+ "export-my-answers": "Export my answers",
105
+ "at-the-foot-of-the-page": "at the foot of the page.",
106
+ "answer-as": "Answer as",
107
+ "questions-waiting-on-you": "Questions waiting on you"
108
+ },
109
+ "visualizations": {
110
+ "component": "Component",
111
+ "what-it-does": "What it does",
112
+ "paths": "Paths",
113
+ "from": "From",
114
+ "to": "To",
115
+ "relation": "Relation"
116
+ }
117
+ },
118
+ "tasks": {
119
+ "change-impact-analysis": {
120
+ "change-overview": "Change overview",
121
+ "what-the-change-touches-and-where-it-stops": "What the change touches, and where it stops",
122
+ "what-it-touches": "What it touches",
123
+ "where-the-change-stops": "Where the change stops",
124
+ "blast-radius": "Blast radius",
125
+ "tests-operations-compatibility": "Tests, operations, compatibility",
126
+ "compatibility": "Compatibility",
127
+ "migration": "Migration",
128
+ "rollback": "Rollback",
129
+ "security-and-performance": "Security and performance",
130
+ "plan-readiness": "Plan readiness",
131
+ "behaviour-that-must-not-change": "Behaviour that must not change",
132
+ "body": "Body",
133
+ "evidence": "Evidence",
134
+ "no-behaviour-is-pinned": "No behaviour is pinned.",
135
+ "what-this-does-to-the-tests": "What this does to the tests",
136
+ "scope": "Scope",
137
+ "action-needed": "Action needed",
138
+ "tests-targeted": "Tests targeted",
139
+ "no-test-is-affected": "No test is affected.",
140
+ "what-this-does-to-operations": "What this does to operations",
141
+ "area": "Area",
142
+ "impact": "Impact",
143
+ "there-is-no-operational-impact": "There is no operational impact."
144
+ },
145
+ "error-analysis": {
146
+ "what-you-saw": "What you saw",
147
+ "reproduction": "Reproduction",
148
+ "cause-candidates": "Cause candidates",
149
+ "no-cause-candidate-has-been-established-yet": "No cause candidate has been established yet.",
150
+ "what-cannot-be-settled-yet": "What cannot be settled yet",
151
+ "confidence-now": "Confidence now:",
152
+ "disproof-attempted": "Disproof attempted:",
153
+ "how-to-disprove-this": "How to disprove this:",
154
+ "the-one-diagnostic-to-run-next": "The one diagnostic to run next",
155
+ "signal-to-check": "Signal to check:",
156
+ "signal-that-rejects-it": "Signal that rejects it:",
157
+ "next-step": "Next step",
158
+ "recommended-task": "Recommended task",
159
+ "the-cause-this-rests-on": "The cause this rests on"
160
+ },
161
+ "feature-analysis": {
162
+ "feature-overview": "Feature overview",
163
+ "subject": "Subject:",
164
+ "how-a-user-moves-through-it": "How a user moves through it",
165
+ "rules-and-state-changes": "Rules and state changes",
166
+ "domain-rules": "Domain rules",
167
+ "state-change": "State change",
168
+ "external-interactions": "External interactions",
169
+ "tests-and-gaps": "Tests and gaps",
170
+ "precondition": "Precondition",
171
+ "body": "Body",
172
+ "evidence": "Evidence",
173
+ "nothing-was-recorded": "Nothing was recorded.",
174
+ "state-once-it-is-done": "State once it is done",
175
+ "permissions-and-flags": "Permissions and flags",
176
+ "non-functional-concerns": "Non-functional concerns"
177
+ },
178
+ "final-verification": {
179
+ "verification-verdict": "Verification verdict",
180
+ "result-per-requirement": "Result per requirement",
181
+ "what-blocks-acceptance": "What blocks acceptance",
182
+ "nothing-is-holding-acceptance": "Nothing is holding acceptance.",
183
+ "residual-risk": "Residual risk",
184
+ "owner": "Owner:",
185
+ "escalation-condition": "Escalation condition:",
186
+ "no-residual-risk-was-recorded": "No residual risk was recorded.",
187
+ "manual-user-test-results": "Manual user test results",
188
+ "what-was-verified": "What was verified",
189
+ "implementation-report": "Implementation report",
190
+ "worktree": "Worktree",
191
+ "base-commit": "Base commit",
192
+ "diff-summary": "Diff summary",
193
+ "uncommitted-state": "Uncommitted state",
194
+ "per-stage-reports": "Per-stage reports",
195
+ "release-path": "Release path",
196
+ "the-current-verdict-does-not-allow-release-h": "The current verdict does not allow release-handoff to start. Clear the blocker or the condition first."
197
+ },
198
+ "implementation-planning": {
199
+ "what-the-plan-is-for": "What the plan is for",
200
+ "implementation-options-compared": "Implementation options compared",
201
+ "interface": "Interface:",
202
+ "blast-radius": "Blast radius:",
203
+ "option": "Option",
204
+ "complexity": "Complexity",
205
+ "risk": "Risk",
206
+ "reversibility": "Reversibility",
207
+ "test-cost": "Test cost",
208
+ "rollout-cost": "Rollout cost",
209
+ "recommended": "Recommended",
210
+ "options-not-taken": "Options not taken:",
211
+ "stage-map": "Stage map",
212
+ "exit-contract": "Exit contract:",
213
+ "verification": "Verification:",
214
+ "design-preparation": "Design preparation",
215
+ "design-item": "Design item",
216
+ "what-it-needs": "What it needs",
217
+ "open-questions": "Open questions",
218
+ "where-implementations-diverge": "Where implementations diverge",
219
+ "action": "Action",
220
+ "implementations": "Implementations",
221
+ "extraction-call": "Extraction call",
222
+ "evidence": "Evidence",
223
+ "step-by-step-execution": "Step-by-step execution",
224
+ "files": "Files",
225
+ "command-test": "Command / test",
226
+ "expected": "Expected",
227
+ "verification-and-rollback": "Verification and rollback",
228
+ "validation-checklist": "Validation checklist",
229
+ "check": "Check",
230
+ "command": "Command",
231
+ "how-each-requirement-gets-met": "How each requirement gets met",
232
+ "requirement": "Requirement",
233
+ "body": "Body",
234
+ "covered-by": "Covered by",
235
+ "cross-project-dependencies": "Cross-project dependencies",
236
+ "dependency": "Dependency",
237
+ "work-needed": "Work needed",
238
+ "signal-to-check": "Signal to check",
239
+ "how-to-start": "How to start",
240
+ "dependency-and-migration-risk": "Dependency and migration risk",
241
+ "item": "Item",
242
+ "impact": "Impact",
243
+ "mitigation": "Mitigation",
244
+ "rollback-strategy": "Rollback strategy",
245
+ "plan-body-verification": "Plan body verification",
246
+ "verdict": "Verdict",
247
+ "what-it-blocked": "What it blocked",
248
+ "plan-item": "Plan item",
249
+ "subject": "Subject",
250
+ "dissent-left-standing": "Dissent left standing",
251
+ "what-your-answers-overturned": "What your answers overturned",
252
+ "answer": "Answer",
253
+ "statement-overturned": "Statement overturned",
254
+ "replaced-with": "Replaced with",
255
+ "no-answer-overturned-anything": "No answer overturned anything.",
256
+ "scope-restated": "Scope, restated",
257
+ "stages-verified-again": "Stages verified again",
258
+ "stages-carried-over-as-they-were": "Stages carried over as they were",
259
+ "decision-record-draft": "Decision record draft",
260
+ "context": "Context",
261
+ "decision": "Decision",
262
+ "result": "Result",
263
+ "there-is-no-decision-draft-to-record": "There is no decision draft to record.",
264
+ "what-was-deliberately-not-recorded": "What was deliberately not recorded",
265
+ "topic": "Topic",
266
+ "why": "Why",
267
+ "open-decisions-before-approval": "Open decisions before approval",
268
+ "no-open-decision-is-holding-approval": "No open decision is holding approval."
269
+ },
270
+ "implementation": {
271
+ "what-was-delivered": "What was delivered",
272
+ "what-changed": "What changed",
273
+ "requirement-coverage": "Requirement coverage",
274
+ "requirement": "Requirement",
275
+ "body": "Body",
276
+ "implemented-by": "Implemented by",
277
+ "verification-result": "Verification result",
278
+ "independent-check": "Independent check:",
279
+ "what-is-left": "What is left",
280
+ "nothing-was-changed-outside-the-plan": "Nothing was changed outside the plan.",
281
+ "commits-delivered": "Commits delivered",
282
+ "there-are-no-commits": "There are no commits.",
283
+ "commit": "Commit",
284
+ "subject": "Subject",
285
+ "files": "Files",
286
+ "approved-plan": "Approved plan",
287
+ "approval-evidence": "Approval evidence",
288
+ "worktree": "Worktree",
289
+ "can-this-be-rolled-back": "Can this be rolled back",
290
+ "rollback-command": "Rollback command",
291
+ "how-to-verify": "How to verify",
292
+ "result": "Result",
293
+ "no-rollback-check-was-recorded": "No rollback check was recorded.",
294
+ "stage-carry-over": "Stage carry-over",
295
+ "manual-user-test": "Manual user test",
296
+ "environment": "Environment:",
297
+ "expected": "Expected:",
298
+ "next-step": "Next step"
299
+ },
300
+ "improvement-discovery": {
301
+ "improvements-found": "Improvements found",
302
+ "lens": "Lens",
303
+ "detail": "Detail",
304
+ "evidence": "Evidence",
305
+ "ranked-candidates": "Ranked candidates",
306
+ "next-step": "Next step:",
307
+ "there-is-no-improvement-candidate-to-pick": "There is no improvement candidate to pick.",
308
+ "impact-and-effort": "Impact and effort",
309
+ "how-to-choose": "How to choose",
310
+ "selection-cap": "Selection cap:"
311
+ },
312
+ "project-analysis": {
313
+ "project-overview": "Project overview",
314
+ "architecture-and-dependencies": "Architecture and dependencies",
315
+ "infrastructure": "Infrastructure",
316
+ "tech-stack": "Tech stack",
317
+ "language": "Language",
318
+ "version": "Version",
319
+ "version-source": "Version source",
320
+ "files": "Files",
321
+ "lines": "Lines",
322
+ "framework": "Framework",
323
+ "role": "Role",
324
+ "evidence": "Evidence",
325
+ "tool": "Tool",
326
+ "command": "Command",
327
+ "internal-interfaces": "Internal interfaces",
328
+ "interface": "Interface",
329
+ "signature": "Signature",
330
+ "consumers": "Consumers",
331
+ "workflows": "Workflows",
332
+ "starts-with": "Starts with",
333
+ "result": "Result",
334
+ "order": "Order",
335
+ "action": "Action",
336
+ "component": "Component",
337
+ "external-system": "External system",
338
+ "system-boundaries": "System boundaries",
339
+ "paths-read": "paths read ·",
340
+ "entry-point": "Entry point",
341
+ "path": "Path",
342
+ "data-stores": "Data stores",
343
+ "store": "Store",
344
+ "reads": "Reads",
345
+ "writes": "Writes",
346
+ "hotspots-to-look-at-first": "Hotspots to look at first",
347
+ "quality-and-test-coverage": "Quality and test coverage",
348
+ "area": "Area",
349
+ "detail": "Detail",
350
+ "feature-map": "Feature map",
351
+ "what-to-do-next": "What to do next",
352
+ "blockers": "Blockers"
353
+ },
354
+ "release-handoff": {
355
+ "handoff-outcome": "Handoff outcome",
356
+ "handoff-scope": "Handoff scope",
357
+ "the-behaviour-you-chose": "The behaviour you chose",
358
+ "handoff-mode": "Handoff mode",
359
+ "conflict-check": "Conflict check",
360
+ "pr-body": "PR Body",
361
+ "branch-and-pr": "Branch and PR",
362
+ "branch": "Branch:",
363
+ "pr-result": "PR Result:",
364
+ "pull-request-open": "Pull request Open",
365
+ "conflict-verdict": "Conflict verdict",
366
+ "commits-delivered": "Commits delivered",
367
+ "there-are-no-commits": "There are no commits.",
368
+ "commit": "Commit",
369
+ "subject": "Subject",
370
+ "files": "Files",
371
+ "the-verification-report-this-rests-on": "The verification report this rests on",
372
+ "what-to-do-next": "What to do next"
373
+ },
374
+ "requirements-discovery": {
375
+ "the-request-as-understood": "The request as understood",
376
+ "your-request-verbatim": "Your request, verbatim",
377
+ "how-the-system-reads-it": "How the system reads it",
378
+ "what-would-prove-this-wrong": "What would prove this wrong",
379
+ "the-requester-left-no-rejection-criteria-eve": "The requester left no rejection criteria, even if there had been, neither the classification nor the next step would change.",
380
+ "terms-settled": "Terms settled",
381
+ "as-the-brief-put-it": "As the brief put it",
382
+ "settled-term": "Settled term",
383
+ "settled-by": "Settled by",
384
+ "evidence": "Evidence",
385
+ "no-term-was-ambiguous": "No term was ambiguous.",
386
+ "settled-and-unsettled-requirements": "Settled and unsettled requirements",
387
+ "nothing-is-left-unsettled": "Nothing is left unsettled.",
388
+ "next-tasks-and-dependencies": "Next tasks and dependencies",
389
+ "next-task": "Next task:",
390
+ "this-requirements-task-stands-alone-nothing": "This requirements task stands alone; nothing else feeds it.",
391
+ "decisions-that-are-yours": "Decisions that are yours",
392
+ "no-further-decision-is-needed": "No further decision is needed."
393
+ }
394
+ }
395
+ }