okstra 0.121.1 → 0.123.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.
- package/README.md +4 -2
- package/docs/architecture/storage-model.md +14 -0
- package/docs/architecture.md +38 -8
- package/docs/cli.md +45 -5
- package/docs/for-ai/README.md +2 -2
- package/docs/for-ai/skills/okstra-rollup.md +1 -1
- package/docs/for-ai/skills/{okstra-schedule.md → okstra-schedule-gen.md} +3 -3
- package/docs/project-structure-overview.md +4 -3
- package/docs/task-process/implementation-planning.md +33 -9
- package/docs/task-process/implementation.md +21 -2
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/workers/claude-worker.md +1 -1
- package/runtime/bin/lib/okstra/usage.sh +3 -3
- package/runtime/prompts/launch.template.md +9 -6
- package/runtime/prompts/lead/adapters/claude-code.md +104 -0
- package/runtime/prompts/lead/adapters/codex.md +45 -0
- package/runtime/prompts/lead/adapters/external.md +46 -0
- package/runtime/prompts/lead/context-loader.md +5 -5
- package/runtime/prompts/lead/convergence.md +11 -28
- package/runtime/prompts/lead/okstra-lead-contract.md +44 -94
- package/runtime/prompts/lead/plan-body-verification.md +50 -5
- package/runtime/prompts/lead/report-writer.md +59 -54
- package/runtime/prompts/lead/team-contract.md +33 -106
- package/runtime/prompts/profiles/_common-contract.md +3 -3
- package/runtime/prompts/profiles/_implementation-deliverable.md +3 -1
- package/runtime/prompts/profiles/_implementation-executor.md +6 -1
- package/runtime/prompts/profiles/_implementation-verifier.md +2 -2
- package/runtime/prompts/profiles/final-verification.md +2 -0
- package/runtime/prompts/profiles/implementation-planning.md +14 -4
- package/runtime/prompts/profiles/requirements-discovery.md +1 -1
- package/runtime/prompts/wizard/prompts.ko.json +44 -0
- package/runtime/python/okstra_ctl/codex_dispatch.py +23 -1
- package/runtime/python/okstra_ctl/design_prep.py +1462 -0
- package/runtime/python/okstra_ctl/design_surfaces.py +243 -0
- package/runtime/python/okstra_ctl/final_report_schema.py +33 -1
- package/runtime/python/okstra_ctl/implementation_stage.py +35 -0
- package/runtime/python/okstra_ctl/incremental_carry.py +294 -21
- package/runtime/python/okstra_ctl/incremental_scope.py +51 -5
- package/runtime/python/okstra_ctl/lead_runtime.py +4 -0
- package/runtime/python/okstra_ctl/material.py +1 -1
- package/runtime/python/okstra_ctl/model_discovery.py +98 -0
- package/runtime/python/okstra_ctl/models.py +8 -3
- package/runtime/python/okstra_ctl/render.py +81 -194
- package/runtime/python/okstra_ctl/report_views.py +22 -7
- package/runtime/python/okstra_ctl/run.py +53 -5
- package/runtime/python/okstra_ctl/team_reconcile.py +3 -1
- package/runtime/python/okstra_ctl/user_response.py +67 -2
- package/runtime/python/okstra_ctl/wizard.py +283 -3
- package/runtime/python/okstra_token_usage/report.py +11 -0
- package/runtime/schemas/final-report-v1.0.schema.json +339 -0
- package/runtime/skills/okstra-inspect/SKILL.md +2 -2
- package/runtime/skills/okstra-rollup/SKILL.md +1 -1
- package/runtime/skills/{okstra-schedule → okstra-schedule-gen}/SKILL.md +62 -20
- package/runtime/skills/okstra-user-response/SKILL.md +8 -6
- package/runtime/templates/reports/final-report.template.md +71 -4
- package/runtime/templates/reports/i18n/en.json +32 -1
- package/runtime/templates/reports/i18n/ko.json +32 -1
- package/runtime/validators/validate-run.py +515 -5
- package/runtime/validators/validate-schedule.py +11 -7
- package/runtime/validators/validate_session_conformance.py +58 -33
- package/src/cli-registry.mjs +14 -0
- package/src/commands/inspect/design-prep.mjs +23 -0
- package/src/commands/inspect/stage-map.mjs +100 -0
- package/src/commands/lifecycle/install.mjs +3 -0
- package/src/commands/lifecycle/uninstall.mjs +8 -23
- package/src/lib/skill-catalog.mjs +10 -1
|
@@ -368,12 +368,12 @@ Carried-forward plan items retain their prior verdicts verbatim; each such item
|
|
|
368
368
|
{{ t("implementationPlanning.planBodyBreakageLegend") }}
|
|
369
369
|
|
|
370
370
|
{% for item in implementationPlanning.planBodyVerification.planItems %}
|
|
371
|
-
**{{ item.id }} — {{ item.subject }}**{% if item.sourceSection %} ({{ t("implementationPlanning.planBodySourceLabel") }} {{ item.sourceSection }}){% endif %}{% if item.clarificationId %} — {{ t("implementationPlanning.planBodyBlockerLabel") }} {{ item.clarificationId }}{% endif %}
|
|
371
|
+
**{{ item.id }} — {{ item.subject }}**{% if item.sourceSection %} ({{ t("implementationPlanning.planBodySourceLabel") }} {{ item.sourceSection }}){% endif %}{% if item.clarificationId %} — {{ t("implementationPlanning.planBodyBlockerLabel") }} {{ item.clarificationId }}{% endif %}{% if item.selfFixNote %} — {{ item.selfFixNote }}{% endif %}
|
|
372
372
|
|
|
373
373
|
|
|
374
|
-
| Worker | Verdict | Breakage kind | Note |
|
|
375
|
-
|
|
376
|
-
{% for v in item.verdicts %}| {{ v.worker | mdcell }} | {{ v.verdict | mdcell }} | {{ (v.breakageKind or '--') | mdcell }} | {{ (v.note or '') | mdcell }} |
|
|
374
|
+
| Worker | Verdict | Breakage kind | Fixability | Note |
|
|
375
|
+
|--------|---------|---------------|------------|------|
|
|
376
|
+
{% for v in item.verdicts %}| {{ v.worker | mdcell }} | {{ v.verdict | mdcell }} | {{ (v.breakageKind or '--') | mdcell }} | {{ (v.fixability or '--') | mdcell }} | {{ (v.note or '') | mdcell }} |
|
|
377
377
|
{% endfor %}
|
|
378
378
|
|
|
379
379
|
{% endfor %}
|
|
@@ -387,6 +387,73 @@ Carried-forward plan items retain their prior verdicts verbatim; each such item
|
|
|
387
387
|
{% endfor %}
|
|
388
388
|
{%- endif %}
|
|
389
389
|
|
|
390
|
+
### 5.5.10 Implementation Design Preparation{% if t("implementationPlanning.designPreparation.heading") != "Implementation Design Preparation" %} ({{ t("implementationPlanning.designPreparation.heading") }}){% endif %}
|
|
391
|
+
|
|
392
|
+
- **{{ t("implementationPlanning.designPreparation.mode") }}:** `{{ implementationPlanning.designPreparation.mode }}`
|
|
393
|
+
- **{{ t("implementationPlanning.designPreparation.reason") }}:** {{ implementationPlanning.designPreparation.reason }}
|
|
394
|
+
|
|
395
|
+
{% if implementationPlanning.designPreparation["items"] | length == 0 -%}
|
|
396
|
+
{{ t("implementationPlanning.designPreparation.empty") }}
|
|
397
|
+
{%- else %}
|
|
398
|
+
{% for item in implementationPlanning.designPreparation["items"] %}
|
|
399
|
+
#### {{ item.id }} — {{ item.title }}
|
|
400
|
+
|
|
401
|
+
- **{{ t("implementationPlanning.designPreparation.kind") }}:** `{{ item.kind }}`
|
|
402
|
+
- **{{ t("implementationPlanning.designPreparation.status") }}:** `{{ item.status }}`
|
|
403
|
+
- **{{ t("implementationPlanning.designPreparation.stages") }}:** {{ item.stageRefs | join(", ") }}
|
|
404
|
+
- **{{ t("implementationPlanning.designPreparation.need") }}:** {{ item.need }}
|
|
405
|
+
{% if item.knownFacts %}
|
|
406
|
+
- **{{ t("implementationPlanning.designPreparation.knownFacts") }}:**
|
|
407
|
+
{% for fact in item.knownFacts %}
|
|
408
|
+
- {{ fact.statement }} — {{ fact.evidence }}
|
|
409
|
+
{% endfor %}
|
|
410
|
+
{% endif %}
|
|
411
|
+
{% if item.openQuestions %}
|
|
412
|
+
- **{{ t("implementationPlanning.designPreparation.openQuestions") }}:** {{ item.openQuestions | join("; ") }}
|
|
413
|
+
{% endif %}
|
|
414
|
+
- **{{ t("implementationPlanning.designPreparation.aiProposal") }}:** {{ item.aiProposal.summary }}
|
|
415
|
+
- **{{ t("implementationPlanning.designPreparation.proposalDetails") }}:** {{ item.aiProposal.details | join("; ") or t("implementationPlanning.designPreparation.none") }}
|
|
416
|
+
- **{{ t("implementationPlanning.designPreparation.proposalAssumptions") }}:** {{ item.aiProposal.assumptions | join("; ") or t("implementationPlanning.designPreparation.none") }}
|
|
417
|
+
- **{{ t("implementationPlanning.designPreparation.proposalEvidence") }}:** {{ item.aiProposal.evidence | join("; ") or t("implementationPlanning.designPreparation.none") }}
|
|
418
|
+
- **{{ t("implementationPlanning.designPreparation.proposalConfidence") }}:** `{{ item.aiProposal.confidence }}`
|
|
419
|
+
- **{{ t("implementationPlanning.designPreparation.humanConfirmation") }}:**
|
|
420
|
+
- **{{ t("implementationPlanning.designPreparation.confirmationRequired") }}:** `{% if item.humanConfirmation.required %}yes{% else %}no{% endif %}`
|
|
421
|
+
- **{{ t("implementationPlanning.designPreparation.confirmationReason") }}:** {{ item.humanConfirmation.reason }}
|
|
422
|
+
- **{{ t("implementationPlanning.designPreparation.suggestedAction") }}:** {{ item.humanConfirmation.suggestedAction }}
|
|
423
|
+
{% if item.replanTriggerFields %}
|
|
424
|
+
- **{{ t("implementationPlanning.designPreparation.replanTriggerFields") }}:** `{{ item.replanTriggerFields | join("`, `") }}`
|
|
425
|
+
{% endif %}
|
|
426
|
+
{% if item.workingAssumption %}
|
|
427
|
+
- **{{ t("implementationPlanning.designPreparation.workingAssumption") }}:** {{ item.workingAssumption }}
|
|
428
|
+
{% endif %}
|
|
429
|
+
{% if item.guardrails %}
|
|
430
|
+
- **{{ t("implementationPlanning.designPreparation.guardrails") }}:** {{ item.guardrails | join("; ") }}
|
|
431
|
+
{% endif %}
|
|
432
|
+
{% if item.reviewAt %}
|
|
433
|
+
{% if item.reviewAt.stage %}
|
|
434
|
+
- **{{ t("implementationPlanning.designPreparation.reviewAt") }}:** {{ item.reviewAt.phase }} — stage {{ item.reviewAt.stage }}
|
|
435
|
+
{% else %}
|
|
436
|
+
- **{{ t("implementationPlanning.designPreparation.reviewAt") }}:** {{ item.reviewAt.phase }}
|
|
437
|
+
{% endif %}
|
|
438
|
+
{% endif %}
|
|
439
|
+
{% if item.ifStillOpen %}
|
|
440
|
+
- **{{ t("implementationPlanning.designPreparation.ifStillOpen") }}:** `{{ item.ifStillOpen }}`
|
|
441
|
+
{% endif %}
|
|
442
|
+
{% if item.requestPath %}
|
|
443
|
+
- **{{ t("implementationPlanning.designPreparation.requestPath") }}:** `{{ item.requestPath }}`
|
|
444
|
+
{% endif %}
|
|
445
|
+
{% if item.blockReason %}
|
|
446
|
+
- **{{ t("implementationPlanning.designPreparation.blockReason") }}:** {{ item.blockReason }}
|
|
447
|
+
{% endif %}
|
|
448
|
+
{% if item.requiredDecision %}
|
|
449
|
+
- **{{ t("implementationPlanning.designPreparation.requiredDecision") }}:** {{ item.requiredDecision }}
|
|
450
|
+
{% endif %}
|
|
451
|
+
{% if item.notApplicableReason %}
|
|
452
|
+
- **{{ t("implementationPlanning.designPreparation.notApplicableReason") }}:** {{ item.notApplicableReason }}
|
|
453
|
+
{% endif %}
|
|
454
|
+
{% endfor %}
|
|
455
|
+
{%- endif %}
|
|
456
|
+
|
|
390
457
|
{% endif %}
|
|
391
458
|
{% if header.taskType == 'release-handoff' %}
|
|
392
459
|
## 5.6 Release Handoff Deliverables
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"implementationPlanning": {
|
|
105
105
|
"planBodyGateLegend": "Gate values — `passed`: agreed, no dissent · `passed-with-dissent`: a minority dissent remains but the gate passes (a majority dissent would block approval) · `blocked-by-disagreement`: majority dissent blocks approval · `aborted-non-result`: verification itself produced no result.",
|
|
106
106
|
"planBodyVerdictLegend": "Verdict — **AGREE**: executable as written and internally consistent with other items · **SUPPLEMENT**: item is sound but a dependency / edge case / precondition is missing · **DISAGREE**: has a defect (see Breakage kind) · **verification-error**: the worker produced no result.",
|
|
107
|
-
"planBodyBreakageLegend": "Breakage kind — a: cited file path/symbol mismatches another step or option · b: command is not executable or is ambiguous · c: validation signal is not observable · d: rollback violates commit/dependency order · e: contradicts the trade-off matrix · f: requirement-coverage row does not map to an option/stage/step that actually satisfies the requirement. (`--` = not applicable)",
|
|
107
|
+
"planBodyBreakageLegend": "Breakage kind — a: cited file path/symbol mismatches another step or option · b: command is not executable or is ambiguous · c: validation signal is not observable · d: rollback violates commit/dependency order · e: contradicts the trade-off matrix · f: requirement-coverage row does not map to an option/stage/step that actually satisfies the requirement. (`--` = not applicable) Fixability: planner-fixable = correctable from code + plan + brief; needs-user-input = requires an external decision.",
|
|
108
108
|
"planBodySourceLabel": "source §",
|
|
109
109
|
"planBodyBlockerLabel": "blocks approval →",
|
|
110
110
|
"optionInterfacesLabel": "Affected interfaces / public contracts / downstream consumers",
|
|
@@ -129,6 +129,37 @@
|
|
|
129
129
|
"decision": "Decision",
|
|
130
130
|
"consequences": "Consequences",
|
|
131
131
|
"alternativesConsidered": "Alternatives Considered"
|
|
132
|
+
},
|
|
133
|
+
"designPreparation": {
|
|
134
|
+
"heading": "Implementation Design Preparation",
|
|
135
|
+
"mode": "Mode",
|
|
136
|
+
"reason": "Reason",
|
|
137
|
+
"kind": "Kind",
|
|
138
|
+
"status": "Status",
|
|
139
|
+
"stages": "Stages",
|
|
140
|
+
"need": "Need",
|
|
141
|
+
"knownFacts": "Known facts",
|
|
142
|
+
"openQuestions": "Open questions",
|
|
143
|
+
"aiProposal": "AI proposal",
|
|
144
|
+
"proposalDetails": "Details",
|
|
145
|
+
"proposalAssumptions": "Assumptions",
|
|
146
|
+
"proposalEvidence": "Evidence",
|
|
147
|
+
"proposalConfidence": "Confidence",
|
|
148
|
+
"humanConfirmation": "Human confirmation",
|
|
149
|
+
"confirmationRequired": "Required",
|
|
150
|
+
"confirmationReason": "Confirmation reason",
|
|
151
|
+
"suggestedAction": "Suggested action",
|
|
152
|
+
"replanTriggerFields": "Replan trigger fields",
|
|
153
|
+
"workingAssumption": "Working assumption",
|
|
154
|
+
"guardrails": "Guardrails",
|
|
155
|
+
"reviewAt": "Review at",
|
|
156
|
+
"ifStillOpen": "If still open",
|
|
157
|
+
"requestPath": "Request path",
|
|
158
|
+
"blockReason": "Block reason",
|
|
159
|
+
"requiredDecision": "Required decision",
|
|
160
|
+
"notApplicableReason": "Not applicable reason",
|
|
161
|
+
"none": "(none)",
|
|
162
|
+
"empty": "No implementation design preparation items."
|
|
132
163
|
}
|
|
133
164
|
},
|
|
134
165
|
"releaseHandoff": {
|
|
@@ -104,7 +104,7 @@
|
|
|
104
104
|
"implementationPlanning": {
|
|
105
105
|
"planBodyGateLegend": "게이트 결과 값 뜻 — `passed`: 이견 없이 통과 · `passed-with-dissent`: 소수 워커의 반대가 남았으나 통과(반대가 다수였다면 승인 차단) · `blocked-by-disagreement`: 다수 반대로 승인 차단 · `aborted-non-result`: 검증 자체가 결과를 내지 못함.",
|
|
106
106
|
"planBodyVerdictLegend": "판정(Verdict) — **AGREE**: 적힌 대로 실행 가능하고 다른 항목과 내부적으로 일관됨 · **SUPPLEMENT**: 항목 자체는 타당하나 의존성·엣지케이스·전제조건이 누락됨 · **DISAGREE**: 결함이 있음(결함 유형 참조) · **verification-error**: 워커 검증이 결과를 내지 못함.",
|
|
107
|
-
"planBodyBreakageLegend": "결함 유형(Breakage kind) — a: 인용한 파일 경로/심볼이 다른 스텝·옵션과 불일치 · b: 명령이 실행 불가하거나 모호함 · c: 검증 신호가 관측 불가 · d: 롤백이 커밋/의존성 순서를 위반 · e: 트레이드오프 매트릭스와 모순 · f: 요구사항 커버리지 행이 요구사항을 실제로 충족하는 옵션/스테이지/스텝에 매핑되지 않음. (`--` = 해당 없음)",
|
|
107
|
+
"planBodyBreakageLegend": "결함 유형(Breakage kind) — a: 인용한 파일 경로/심볼이 다른 스텝·옵션과 불일치 · b: 명령이 실행 불가하거나 모호함 · c: 검증 신호가 관측 불가 · d: 롤백이 커밋/의존성 순서를 위반 · e: 트레이드오프 매트릭스와 모순 · f: 요구사항 커버리지 행이 요구사항을 실제로 충족하는 옵션/스테이지/스텝에 매핑되지 않음. (`--` = 해당 없음) · 자가수정 가능 여부(Fixability) — planner-fixable: 코드·계획·브리프만으로 수정 가능 · needs-user-input: 외부 결정 필요",
|
|
108
108
|
"planBodySourceLabel": "출처 §",
|
|
109
109
|
"planBodyBlockerLabel": "승인 차단 →",
|
|
110
110
|
"optionInterfacesLabel": "영향 인터페이스 / 공개 계약 / 다운스트림 소비자",
|
|
@@ -129,6 +129,37 @@
|
|
|
129
129
|
"decision": "결정",
|
|
130
130
|
"consequences": "결과",
|
|
131
131
|
"alternativesConsidered": "검토한 대안"
|
|
132
|
+
},
|
|
133
|
+
"designPreparation": {
|
|
134
|
+
"heading": "구현 설계 준비",
|
|
135
|
+
"mode": "모드",
|
|
136
|
+
"reason": "이유",
|
|
137
|
+
"kind": "종류",
|
|
138
|
+
"status": "상태",
|
|
139
|
+
"stages": "스테이지",
|
|
140
|
+
"need": "필요성",
|
|
141
|
+
"knownFacts": "확인된 사실",
|
|
142
|
+
"openQuestions": "열린 질문",
|
|
143
|
+
"aiProposal": "AI 제안",
|
|
144
|
+
"proposalDetails": "세부 내용",
|
|
145
|
+
"proposalAssumptions": "가정",
|
|
146
|
+
"proposalEvidence": "근거",
|
|
147
|
+
"proposalConfidence": "신뢰도",
|
|
148
|
+
"humanConfirmation": "사람 확인",
|
|
149
|
+
"confirmationRequired": "필수 여부",
|
|
150
|
+
"confirmationReason": "확인 이유",
|
|
151
|
+
"suggestedAction": "권장 조치",
|
|
152
|
+
"replanTriggerFields": "재계획 트리거 필드",
|
|
153
|
+
"workingAssumption": "작업 가정",
|
|
154
|
+
"guardrails": "가드레일",
|
|
155
|
+
"reviewAt": "검토 시점",
|
|
156
|
+
"ifStillOpen": "미해결 시",
|
|
157
|
+
"requestPath": "요청 경로",
|
|
158
|
+
"blockReason": "차단 이유",
|
|
159
|
+
"requiredDecision": "필요한 결정",
|
|
160
|
+
"notApplicableReason": "해당 없음 이유",
|
|
161
|
+
"none": "(없음)",
|
|
162
|
+
"empty": "구현 설계 준비 항목이 없습니다."
|
|
132
163
|
}
|
|
133
164
|
},
|
|
134
165
|
"releaseHandoff": {
|