okstra 0.48.0 → 0.50.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 (60) hide show
  1. package/docs/kr/architecture.md +8 -8
  2. package/docs/kr/cli.md +2 -2
  3. package/docs/project-structure-overview.md +3 -3
  4. package/docs/superpowers/plans/2026-06-05-compact-markdown-report-tables.md +323 -0
  5. package/docs/superpowers/plans/2026-06-05-wizard-batch-prompts.md +559 -0
  6. package/docs/superpowers/specs/2026-06-05-compact-markdown-report-tables-design.md +87 -0
  7. package/docs/superpowers/specs/2026-06-05-wizard-batch-prompts-design.md +121 -0
  8. package/docs/task-process/error-analysis.md +1 -1
  9. package/docs/task-process/final-verification.md +1 -1
  10. package/docs/task-process/release-handoff.md +1 -1
  11. package/docs/task-process/requirements-discovery.md +1 -1
  12. package/package.json +1 -1
  13. package/runtime/BUILD.json +2 -2
  14. package/runtime/agents/SKILL.md +3 -3
  15. package/runtime/agents/workers/claude-worker.md +1 -1
  16. package/runtime/agents/workers/codex-worker.md +1 -1
  17. package/runtime/agents/workers/gemini-worker.md +1 -1
  18. package/runtime/agents/workers/report-writer-worker.md +3 -3
  19. package/runtime/bin/lib/okstra/tmux-pane.sh +40 -0
  20. package/runtime/bin/okstra-codex-exec.sh +17 -21
  21. package/runtime/bin/okstra-gemini-exec.sh +12 -15
  22. package/runtime/bin/okstra-render-report-views.py +1 -1
  23. package/runtime/bin/okstra-trace-cleanup.sh +13 -1
  24. package/runtime/prompts/launch.template.md +1 -1
  25. package/runtime/prompts/profiles/_common-contract.md +15 -15
  26. package/runtime/prompts/profiles/_implementation-deliverable.md +1 -1
  27. package/runtime/prompts/profiles/_implementation-executor.md +1 -1
  28. package/runtime/prompts/profiles/_implementation-verifier.md +1 -1
  29. package/runtime/prompts/profiles/error-analysis.md +1 -1
  30. package/runtime/prompts/profiles/final-verification.md +2 -2
  31. package/runtime/prompts/profiles/implementation-planning.md +9 -9
  32. package/runtime/prompts/profiles/improvement-discovery.md +5 -5
  33. package/runtime/prompts/profiles/release-handoff.md +2 -2
  34. package/runtime/prompts/profiles/requirements-discovery.md +2 -2
  35. package/runtime/python/okstra_ctl/clarification_items.py +11 -11
  36. package/runtime/python/okstra_ctl/render.py +1 -1
  37. package/runtime/python/okstra_ctl/render_final_report.py +1 -1
  38. package/runtime/python/okstra_ctl/report_views.py +26 -39
  39. package/runtime/python/okstra_ctl/run.py +3 -3
  40. package/runtime/python/okstra_ctl/wizard.py +90 -3
  41. package/runtime/python/okstra_ctl/workflow.py +1 -1
  42. package/runtime/skills/okstra-brief/SKILL.md +1 -1
  43. package/runtime/skills/okstra-convergence/SKILL.md +8 -8
  44. package/runtime/skills/okstra-report-writer/SKILL.md +22 -22
  45. package/runtime/skills/okstra-run/SKILL.md +2 -0
  46. package/runtime/skills/okstra-team-contract/SKILL.md +1 -1
  47. package/runtime/templates/project-docs/task-index.template.md +1 -8
  48. package/runtime/templates/reports/final-report.template.md +194 -198
  49. package/runtime/templates/reports/i18n/en.json +16 -17
  50. package/runtime/templates/reports/i18n/ko.json +16 -17
  51. package/runtime/templates/reports/implementation-planning-input.template.md +1 -1
  52. package/runtime/templates/reports/release-handoff-input.template.md +1 -1
  53. package/runtime/templates/reports/schedule.template.md +3 -7
  54. package/runtime/templates/reports/user-response.template.md +1 -1
  55. package/runtime/templates/worker-prompt-preamble.md +1 -1
  56. package/runtime/validators/lib/fixtures.sh +2 -2
  57. package/runtime/validators/validate-implementation-plan-stages.py +9 -9
  58. package/runtime/validators/validate-report-views.py +10 -10
  59. package/runtime/validators/validate-run.py +36 -36
  60. package/runtime/validators/validate_improvement_report.py +8 -8
@@ -205,9 +205,9 @@ def _check_candidates_table(
205
205
  body: str, brief_frontmatter: dict, errors: list[str]
206
206
  ) -> None:
207
207
  """Items 1–7 coordinator — parse table, check header, delegate cap and rows."""
208
- rows = _read_section_table(body, "4.9 Improvement Candidates")
208
+ rows = _read_section_table(body, "5.9 Improvement Candidates")
209
209
  if not rows:
210
- errors.append("missing or empty `## 4.9 Improvement Candidates` table")
210
+ errors.append("missing or empty `## 5.9 Improvement Candidates` table")
211
211
  return
212
212
  header, *data = rows
213
213
  expected_columns = [
@@ -216,7 +216,7 @@ def _check_candidates_table(
216
216
  ]
217
217
  if header != expected_columns:
218
218
  errors.append(
219
- f"`## 4.9 Improvement Candidates` header must be {expected_columns}, "
219
+ f"`## 5.9 Improvement Candidates` header must be {expected_columns}, "
220
220
  f"got {header}"
221
221
  )
222
222
  _check_candidates_cap(len(data), brief_frontmatter, errors)
@@ -228,18 +228,18 @@ def _check_candidates_table(
228
228
  def _check_final_verdict(
229
229
  body: str, errors: list[str]
230
230
  ) -> list[list[str]]:
231
- """Item 8 — ## 2. Final Verdict verdict token is in enum.
231
+ """Item 8 — ## 7. Final Verdict verdict token is in enum.
232
232
 
233
233
  Returns the parsed final_verdict_rows (empty list when absent).
234
234
  """
235
- final_verdict_rows = _read_section_table(body, "2. Final Verdict")
235
+ final_verdict_rows = _read_section_table(body, "7. Final Verdict")
236
236
  if not final_verdict_rows:
237
- errors.append("missing `## 2. Final Verdict` block")
237
+ errors.append("missing `## 7. Final Verdict` block")
238
238
  return []
239
239
  token_cell = final_verdict_rows[-1][0] if final_verdict_rows[-1] else ""
240
240
  if token_cell not in _VERDICT_TOKENS:
241
241
  errors.append(
242
- f"`## 2. Final Verdict` Verdict Token '{token_cell}' must be one of {_VERDICT_TOKENS}"
242
+ f"`## 7. Final Verdict` Verdict Token '{token_cell}' must be one of {_VERDICT_TOKENS}"
243
243
  )
244
244
  return final_verdict_rows
245
245
 
@@ -253,7 +253,7 @@ def _check_verdict_card(
253
253
  errors.append("missing `## Verdict Card` block")
254
254
  return
255
255
  if final_verdict_rows and verdict_card_rows[-1] != final_verdict_rows[-1]:
256
- errors.append("Verdict Card row must byte-match `## 2. Final Verdict` row")
256
+ errors.append("Verdict Card row must byte-match `## 7. Final Verdict` row")
257
257
 
258
258
 
259
259
  def validate_improvement_report(