okstra 0.8.0 → 0.9.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.kr.md +14 -3
- package/README.md +14 -3
- package/docs/kr/architecture.md +8 -3
- package/docs/kr/cli.md +55 -1
- package/docs/superpowers/plans/2026-05-12-ticket-id-in-reports.md +638 -0
- package/docs/superpowers/specs/2026-05-12-ticket-id-in-reports-design.md +131 -0
- package/package.json +1 -1
- package/runtime/BUILD.json +2 -2
- package/runtime/agents/SKILL.md +13 -0
- package/runtime/agents/workers/claude-worker.md +2 -0
- package/runtime/agents/workers/codex-worker.md +2 -0
- package/runtime/agents/workers/gemini-worker.md +2 -0
- package/runtime/agents/workers/report-writer-worker.md +1 -0
- package/runtime/prompts/launch.template.md +11 -0
- package/runtime/prompts/profiles/implementation.md +10 -0
- package/runtime/prompts/profiles/release-handoff.md +97 -0
- package/runtime/python/lib/okstra/cli.sh +1 -1
- package/runtime/python/okstra_ctl/render.py +9 -2
- package/runtime/python/okstra_ctl/run.py +30 -0
- package/runtime/python/okstra_ctl/workflow.py +30 -2
- package/runtime/python/okstra_ctl/worktree.py +235 -0
- package/runtime/skills/okstra-context-loader/SKILL.md +1 -1
- package/runtime/skills/okstra-convergence/SKILL.md +11 -5
- package/runtime/skills/okstra-report-finder/SKILL.md +1 -0
- package/runtime/skills/okstra-report-writer/SKILL.md +6 -0
- package/runtime/skills/okstra-run/SKILL.md +2 -1
- package/runtime/skills/okstra-status/SKILL.md +3 -1
- package/runtime/skills/okstra-team-contract/SKILL.md +19 -0
- package/runtime/skills/okstra-time-summary/SKILL.md +1 -0
- package/runtime/templates/reports/error-analysis-input.template.md +1 -0
- package/runtime/templates/reports/final-report.template.md +129 -18
- package/runtime/templates/reports/implementation-input.template.md +1 -0
- package/runtime/templates/reports/implementation-planning-input.template.md +1 -0
- package/runtime/templates/reports/quick-input.template.md +1 -0
- package/runtime/templates/reports/release-handoff-input.template.md +73 -0
- package/runtime/templates/reports/task-brief.template.md +5 -0
- package/runtime/validators/validate-run.py +6 -1
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# OKSTRA Release Handoff Input
|
|
2
|
+
|
|
3
|
+
## Identity
|
|
4
|
+
|
|
5
|
+
- Project ID:
|
|
6
|
+
- Task Group:
|
|
7
|
+
- Task ID:
|
|
8
|
+
- Related Tasks:
|
|
9
|
+
- Issue / Ticket:
|
|
10
|
+
- Task Type: `release-handoff`
|
|
11
|
+
- Requested Outcome:
|
|
12
|
+
|
|
13
|
+
## Source Verification Report
|
|
14
|
+
|
|
15
|
+
- Path (project-relative) to the `final-verification` final-report whose verdict authorises this handoff:
|
|
16
|
+
- Verbatim quoted line from that report's `## 2. Final Verdict` (MUST read exactly `accepted`):
|
|
17
|
+
- Run timestamp of that final-verification run:
|
|
18
|
+
|
|
19
|
+
> If this section is empty or cites a verdict other than `accepted`, the lead MUST end the run immediately and route back to `final-verification`. Release-handoff never operates on `conditional-accept` or `blocked` outcomes.
|
|
20
|
+
|
|
21
|
+
## Working-Tree Snapshot (filled at run start)
|
|
22
|
+
|
|
23
|
+
- Feature branch (`git rev-parse --abbrev-ref HEAD`):
|
|
24
|
+
- `git status --short` output at run start:
|
|
25
|
+
- Existing PR for this head, if any (`gh pr list --head <branch> --state open --json url --jq '.[0].url'`):
|
|
26
|
+
|
|
27
|
+
## Candidate PR Base Branches
|
|
28
|
+
|
|
29
|
+
- Default options offered to the user: `staging` | `preprod` | `prod` | `main` | `dev` | 직접 입력
|
|
30
|
+
- Repo-specific preference, if known (e.g. `main` is the integration branch):
|
|
31
|
+
- Branches that MUST NOT be used as a base in this repo (security / freeze rules):
|
|
32
|
+
|
|
33
|
+
## Commit Message Drafter Inputs
|
|
34
|
+
|
|
35
|
+
- Commit type convention this repo follows (`release-please` types, plain conventional commits, free-form):
|
|
36
|
+
- `git diff <base>..HEAD --stat` (or equivalent change summary) for the drafter to ground its message on:
|
|
37
|
+
- Files known to be part of the prior `implementation` run's approved plan:
|
|
38
|
+
- Files appearing in the diff that were in the prior run's `Out-of-plan edits` block:
|
|
39
|
+
|
|
40
|
+
## PR Body Drafter Inputs
|
|
41
|
+
|
|
42
|
+
- Linked issues / tickets the PR should reference (URLs):
|
|
43
|
+
- Test plan items the prior `implementation` run already validated:
|
|
44
|
+
- Reviewer hints (teams or individuals the PR should request review from):
|
|
45
|
+
|
|
46
|
+
## User-Selection Defaults (advisory only — the user still chooses interactively)
|
|
47
|
+
|
|
48
|
+
- Suggested action (Q1): `commit only` | `commit + PR` | `skip`
|
|
49
|
+
- Suggested base (Q2): one of the candidate base branches above
|
|
50
|
+
- Suggested message handling (Q3): `use as-is` | `edit then proceed`
|
|
51
|
+
|
|
52
|
+
> These suggestions help the lead phrase its `AskUserQuestion` prompts. They are NOT pre-approvals — every mutating command still requires an explicit user pick at run time.
|
|
53
|
+
|
|
54
|
+
## Out of Scope
|
|
55
|
+
|
|
56
|
+
- Actions deliberately excluded from this handoff:
|
|
57
|
+
- Items that look related but belong to a separate handoff or release task:
|
|
58
|
+
- Reason for exclusion (different release window, separate owner, deferred decision):
|
|
59
|
+
|
|
60
|
+
> The lead MUST NOT extend handoff actions into items listed here. If an excluded item should ship in this PR, edit this section before the run starts — do not silently fold it in.
|
|
61
|
+
|
|
62
|
+
## Questions for Drafter Worker
|
|
63
|
+
|
|
64
|
+
1. What commit type and scope best describe the cumulative diff?
|
|
65
|
+
2. What single subject line summarises the change in under 72 characters?
|
|
66
|
+
3. What changed at a behavioural level (not just file-level) that reviewers need to know?
|
|
67
|
+
4. Which prior commits in this feature branch should be referenced or amended by this commit?
|
|
68
|
+
5. Does the diff include any change that requires a follow-up PR (migration squash, config split, etc.) — and if so, should that be noted in the PR body's `## Follow-ups` block?
|
|
69
|
+
|
|
70
|
+
## Conversion Note
|
|
71
|
+
|
|
72
|
+
- This input can be used as the release-handoff brief before creating `okstra-task-brief.md`.
|
|
73
|
+
- Reuse the same `Task Group` and `Task ID` as the originating implementation / final-verification runs so the handoff stays attached to the same task history.
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
- Task Key: `<project-id>:<task-group>:<task-id>`
|
|
10
10
|
- Related Tasks:
|
|
11
11
|
- Issue / Ticket:
|
|
12
|
+
- 값이 비면 워커는 `Task ID`로 폴백한다 (prefix 없이 `8852`처럼). 한 run이 여러 ticket을 동시에 다루면 콤마로 구분 (`TICKET-123, TICKET-456`). 어느 쪽으로도 식별 불가하면 `unknown`을 허용한다.
|
|
12
13
|
- Task Type:
|
|
13
14
|
- Requested Outcome:
|
|
14
15
|
- Owner:
|
|
@@ -96,6 +97,10 @@
|
|
|
96
97
|
2.
|
|
97
98
|
3.
|
|
98
99
|
|
|
100
|
+
### Standing Ticket-Tagging Rule (always applied by every worker)
|
|
101
|
+
|
|
102
|
+
- 모든 항목 및 표 행에 ticket을 명시한다. 표 형식은 `Ticket ID` 컬럼, bullet/번호목록·섹션 헤더는 `[TICKETID: <id>]` 태그를 사용한다. 채움 우선순위·폴백·다중 ticket 규칙은 `okstra-team-contract` SKILL의 Ticket Tagging 절을 따른다.
|
|
103
|
+
|
|
99
104
|
### Standing Scope-Discipline Questions (always answered by every worker)
|
|
100
105
|
|
|
101
106
|
- Which adjacent changes did you consider and **deliberately exclude** from this run? List each with a one-line reason.
|
|
@@ -37,7 +37,11 @@ def default_next_phase(task_type: str) -> str:
|
|
|
37
37
|
"error-analysis": "implementation-planning",
|
|
38
38
|
"implementation-planning": "implementation",
|
|
39
39
|
"implementation": "final-verification",
|
|
40
|
-
|
|
40
|
+
# final-verification 의 다음 phase 는 verdict 에 따라 갈리므로
|
|
41
|
+
# 정적 매핑은 `pending-release-handoff` 로 두고, 실제 진입은
|
|
42
|
+
# release-handoff profile 의 entry gate (`accepted` 확인) 에서 강제한다.
|
|
43
|
+
"final-verification": "pending-release-handoff",
|
|
44
|
+
"release-handoff": "done-or-follow-up",
|
|
41
45
|
}
|
|
42
46
|
return mapping.get(task_type, "unknown")
|
|
43
47
|
|
|
@@ -84,6 +88,7 @@ def update_workflow_metadata(
|
|
|
84
88
|
"implementation-planning",
|
|
85
89
|
"implementation",
|
|
86
90
|
"final-verification",
|
|
91
|
+
"release-handoff",
|
|
87
92
|
]
|
|
88
93
|
|
|
89
94
|
phase_states = workflow.get("phaseStates", {})
|