@mstar-harness/opencode 1.5.5 → 1.5.6
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/CHANGELOG.md +6 -0
- package/harness-skills/mstar-harness-core/SKILL.md +1 -0
- package/harness-skills/mstar-iteration/SKILL.md +5 -1
- package/harness-skills/mstar-plan-artifacts/SKILL.md +2 -1
- package/harness-skills/mstar-plan-artifacts/references/status-and-residuals.md +37 -0
- package/harness-skills/mstar-review-qc/SKILL.md +5 -3
- package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +1 -0
- package/harness-skills/mstar-roles/references/project-manager/qa-trigger-matrix.md +2 -0
- package/harness-skills/mstar-roles/references/project-manager/qc-and-residuals.md +14 -1
- package/harness-skills/mstar-roles/references/project-manager.md +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,12 @@ All notable changes to the `@mstar-harness/opencode` package are documented in t
|
|
|
4
4
|
|
|
5
5
|
The monorepo root [CHANGELOG.md](../../CHANGELOG.md) summarizes cross-surface releases.
|
|
6
6
|
|
|
7
|
+
## 1.5.6
|
|
8
|
+
|
|
9
|
+
- Version alignment with harness **1.5.6** (bundled skills: `Findings cleanup: zero-residual` mode).
|
|
10
|
+
|
|
11
|
+
See root [CHANGELOG.md](../../CHANGELOG.md) **1.5.6**.
|
|
12
|
+
|
|
7
13
|
## 1.5.5
|
|
8
14
|
|
|
9
15
|
- Version alignment with harness **1.5.5** (bundled skills: control-path harness under default gitignore + `sdd-workspace` `MSTAR_CONTROL_ROOT`).
|
|
@@ -149,6 +149,7 @@ Read **`mstar-host`** after this skill; detect host per its table, then Read the
|
|
|
149
149
|
| `InProgress` 无 `execution_lease` 未恢复即可写派发 | `mstar-plan-artifacts` — orphan recovery |
|
|
150
150
|
| 混淆跨 plan lease 门控并行与单 plan 内 SDD 并行 implementer | `mstar-dispatch-gates` · `mstar-sdd` |
|
|
151
151
|
| residual 只写 plan 不写 SSOT | `mstar-plan-artifacts` |
|
|
152
|
+
| `zero-residual` 下把可修 findings 登记为 open R# / 草草 `Approve with residuals` | `mstar-plan-artifacts` Findings cleanup modes · `mstar-review-qc` |
|
|
152
153
|
| 角色文件塞流程长文 | 用专题 skill |
|
|
153
154
|
| 无证据宣称完成 | `mstar-coding-behavior` / verification |
|
|
154
155
|
| CreatePlan 不落盘 / 无 `{HARNESS_DIR}` mirror | `mstar-host` · `cursor-plan-mode-bridge` |
|
|
@@ -208,6 +208,8 @@ Phase 1 与 §1.6 须遵守 **`references/iteration-artifact-boundaries.md`**(
|
|
|
208
208
|
|
|
209
209
|
**本 Phase 是本 skill 的核心**——定义 per-plan 派发循环的完整流程:前置条件检查、session todos、backlog 读取、integration 分支管理、per-plan dispatch 循环(分支→实现→QC→**QA gate**→Done→合并)、dispatch-first 约束、push 纪律。PM 读取本 Phase 即可执行迭代。
|
|
210
210
|
|
|
211
|
+
**Findings cleanup(默认)**:Phase 2 每个 plan Assignment 默认 **`Findings cleanup: zero-residual`**(可修 findings 当轮 fix→re-review 清干净;仅真 blocker-defer + Durable Roadmap 可留 open R#)。compass 或 Assignment 可显式覆写为 `allow-residual`。SSOT → **`mstar-plan-artifacts`**「Findings cleanup modes」。
|
|
212
|
+
|
|
211
213
|
### 2.0 前置条件(五道闸)
|
|
212
214
|
|
|
213
215
|
进入 Autonomous Execute 前必须满足:
|
|
@@ -325,6 +327,7 @@ Iteration Phase 2 附加:
|
|
|
325
327
|
- PM **NEVER** 在 PM 线程实现产品代码(delegate dev;hotfix 例外见 **`mstar-phase-gates`**)
|
|
326
328
|
- `Subagent invokes issued: 0` 而 Assignment 已写出 → **`dispatch incomplete`**;下一条补发 invoke,禁止 PM 顶替
|
|
327
329
|
- QC 初轮:**SDD → N=3**;**inline → N=1**;plan QC tri 三席 **同条消息 N=3**(非 implement 轨数)
|
|
330
|
+
- **`Findings cleanup: zero-residual`(默认)**:QC 后可修 Warning/Suggestion → 继续 fix→targeted re-review,直至 clean `Approve` 或仅剩真 blocker-defer;**禁止**把可修项登记为 open residual 草草 `Approve with residuals`
|
|
328
331
|
|
|
329
332
|
### 2.6 Push 纪律(Autonomous Execute)
|
|
330
333
|
|
|
@@ -336,6 +339,7 @@ Iteration Phase 2 附加:
|
|
|
336
339
|
- 实际 Git ≠ `working_branch` → **同轮**更新 plan + status + `execution_lease.working_branch`(如适用)
|
|
337
340
|
- **跨 plan implement**(**无论** `Worktree mode: waived`):并行可写 implement 须满足 §2.0 #5 跨 plan 并行安全闸——same-host 独占写锁 + 每次协调变更持锁,或默认 **`Plan parallelism: serial`**(waived 时尤其优先),或用户本轮 `Cross-host lease race: accepted` + audit `notes`;**禁止**将 waived 当作无锁跨主机并行授权;未 waive 时另须 verified `execution_lease` + feature worktree。**integration merge 串行**(`integration_merge_lease` 或 waived 下无 lease 仍须串行 merge)
|
|
338
341
|
- plan 内 SDD task **串行** — 见 §2.4、§2.5、`mstar-sdd` Continuous execution
|
|
342
|
+
- **zero-residual(默认)**:单 plan QC findings 尽量在当轮清干净;仅真 blocker 才 defer 到后续迭代(须 Durable Roadmap)— 见 **`mstar-plan-artifacts`** Findings cleanup modes
|
|
339
343
|
|
|
340
344
|
---
|
|
341
345
|
|
|
@@ -370,7 +374,7 @@ PM 在迭代内全部 plan Done 后执行。**本 Phase 在 integration 分支
|
|
|
370
374
|
**STOP**: 打印下方 checklist,且全部为 `[x]` 后,才可进入 §3.2 Compound。
|
|
371
375
|
|
|
372
376
|
- [ ] 所有 compass 中登记的 plan 在 `{HARNESS_DIR}/status.json` 均为 `Done`
|
|
373
|
-
- [ ] 所有 plan 的 residual findings
|
|
377
|
+
- [ ] 所有 plan 的 residual findings 已收口:优先 empty open 列表;若仍有 open R#,须均为 Phase 2 `zero-residual` 允许的 blocker-defer + roadmap,或已 closed/accepted/waived 归档(见 `mstar-plan-artifacts` Findings cleanup modes)
|
|
374
378
|
- [ ] compass `## Plans` 表状态列已与 `status.json` 同步
|
|
375
379
|
- [ ] 迭代 `## Acceptance Criteria` 已达成或显式豁免(compass 或对话记录原因)
|
|
376
380
|
- [ ] compass shape 已满足(frontmatter + `## Roadmap Position` + close 占位节)
|
|
@@ -26,9 +26,10 @@ description: "Morning Star plan harness artifacts — `{PLAN_DIR}` main plans an
|
|
|
26
26
|
- **`{HARNESS_DIR}/status.json`**: `plans[]` row status + root **`residual_findings[<plan-id>]`** (open list **SSOT**).
|
|
27
27
|
- **Canonical**: register new findings only at root `residual_findings`; **`metadata.residual_findings`** is legacy read-only — **do not** dual-write.
|
|
28
28
|
- **Lifecycle**: open → verified close → **`archived/residuals/<plan-id>.json`**; machine **`severity`** enum in reference.
|
|
29
|
+
- **Findings cleanup**: Assignment **`Findings cleanup: zero-residual | allow-residual`** (+ optional `metadata.findings_cleanup`); iteration Phase 2 defaults to **`zero-residual`** → **`references/status-and-residuals.md`** (“Findings cleanup modes”).
|
|
29
30
|
- **`notes.json`**, optional **`tech_debt_summary`** (rollup view; compute via **`scripts/tech-debt-rollup.sh`**).
|
|
30
31
|
- **Iteration Phase 2 leases** (`metadata.control_worktree_path`, `plans[].execution_lease`, `metadata.integration_merge_lease`): claim-before-`InProgress`, resume vs steal, orphan recovery → **`references/status-and-residuals.md`** (“Iteration execution leases”).
|
|
31
32
|
|
|
32
|
-
Field semantics, severity mapping, archive flow, and `jq` examples → **`references/status-and-residuals.md`**.
|
|
33
|
+
Field semantics, severity mapping, findings cleanup modes, archive flow, and `jq` examples → **`references/status-and-residuals.md`**.
|
|
33
34
|
|
|
34
35
|
**Templates (this skill):** `templates/status.empty.json`, `templates/notes.empty.json` — copy into `{HARNESS_DIR}/` (`templates/README.md`).
|
|
@@ -106,10 +106,47 @@ In old JSON, **`"severity": "warning"`** is read and rolled up as **`low`**. **F
|
|
|
106
106
|
|
|
107
107
|
---
|
|
108
108
|
|
|
109
|
+
## Findings cleanup modes
|
|
110
|
+
|
|
111
|
+
Plan-level policy for whether non-blocking QC/QA findings may remain as open residuals or must be cleared in the current plan session.
|
|
112
|
+
|
|
113
|
+
### Assignment + metadata
|
|
114
|
+
|
|
115
|
+
| Surface | Values |
|
|
116
|
+
| ------- | ------ |
|
|
117
|
+
| Assignment **`Findings cleanup`** | `zero-residual` \| `allow-residual` |
|
|
118
|
+
| `plans[].metadata.findings_cleanup` | same strings (optional mirror; Assignment wins when both set) |
|
|
119
|
+
|
|
120
|
+
**Defaults**
|
|
121
|
+
|
|
122
|
+
| Context | Default |
|
|
123
|
+
| ------- | ------- |
|
|
124
|
+
| Formal **iteration Phase 2** (Autonomous Execute) | `zero-residual` (compass or Assignment may override to `allow-residual`) |
|
|
125
|
+
| Standalone `/pm`, hotfix, `Execution mode: inline` | `allow-residual` |
|
|
126
|
+
|
|
127
|
+
### `zero-residual` (clean-session)
|
|
128
|
+
|
|
129
|
+
Intent: clear findings in the current plan session whenever possible. Open residuals only for **true blocker-defers**.
|
|
130
|
+
|
|
131
|
+
1. After QC: default path is **fix-now + targeted re-review**, not `Approve with residuals`.
|
|
132
|
+
2. Do **not** register open R# for items that can be fixed in this session.
|
|
133
|
+
3. **`nit`**: fix in-session **or** drop with no R# (existing “no tracking needed”); **never** open residual for style-only nits.
|
|
134
|
+
4. **`Approve with residuals`** only when every remaining open item is a true blocker-defer (`decision: defer`, `target` = next iteration/milestone, Durable Roadmap Gate written).
|
|
135
|
+
5. **True defer** only: external dependency; product/scope decision for a later iteration; or explicit **current-turn** user defer — plus Durable Roadmap Gate.
|
|
136
|
+
6. **`waived` / `risk-accepted`**: still require PM + user/architect alignment; **close/archive** (do not leave open). Prefer a cheap fix over waive-as-shortcut.
|
|
137
|
+
7. Plan **Done**: prefer empty `residual_findings[<plan_id>]`. If any open R# remain, **every** entry must be blocker-defer + roadmap; otherwise keep `InReview` / `Blocked`.
|
|
138
|
+
|
|
139
|
+
### `allow-residual` (legacy default)
|
|
140
|
+
|
|
141
|
+
Non-blocking Warning/Suggestion may ship with open R# registration and `Approve with residuals` when no unresolved Critical remains (existing residual lifecycle unchanged).
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
109
145
|
## `plans[].metadata` standard optional fields
|
|
110
146
|
|
|
111
147
|
| Key | Type | Purpose |
|
|
112
148
|
| --- | --- | --- |
|
|
149
|
+
| `findings_cleanup` | `zero-residual` \| `allow-residual` | Mirror of Assignment **`Findings cleanup`**; see **Findings cleanup modes** |
|
|
113
150
|
| `working_branch` | string | Implementation branch; aligns with Assignment **`Working branch`** (SSOT) |
|
|
114
151
|
| `spec_integration_branch` | string | (Multi-plan same **Spec**) integration branch name; created from root `metadata.iteration_base_branch`; plan branches merge here before final PR (`mstar-plan-conventions`) |
|
|
115
152
|
| `merge_target` | string | Next merge target; multi-plan + Spec → usually `spec_integration_branch`; final PR target is root `metadata.target_branch` |
|
|
@@ -28,11 +28,13 @@ description: "Morning Star QC orchestration — **SDD mandatory plan QC tri-revi
|
|
|
28
28
|
|
|
29
29
|
## Residual Findings 留档门禁(PM)
|
|
30
30
|
|
|
31
|
-
-
|
|
31
|
+
- 先读 Assignment **`Findings cleanup`**(及可选 `plans[].metadata.findings_cleanup`)→ **`mstar-plan-artifacts/references/status-and-residuals.md`**「Findings cleanup modes」。
|
|
32
|
+
- **`Findings cleanup: zero-residual`**(iteration Phase 2 默认):可修 **Warning / Suggestion / Critical** → **fix-now + targeted re-review**,**禁止**把可修项登记为 open R# 或用 `Approve with residuals` 收口;**`nit`** 当场修或丢弃(无 R#)。仅 **真 blocker-defer**(外部依赖 / 须下轮产品决策 / 用户本轮显式 defer + Durable Roadmap)可登记 open R#(`decision: defer`)。此时 `Approve with residuals` **仅**允许剩余项全是该类 defer。
|
|
33
|
+
- **`Findings cleanup: allow-residual`**(standalone / hotfix / inline 默认):阻断项修复后仍有 **Warning / Suggestion** 或技术债 → 必须留档;**`Approve with residuals`** 仅当无 open **Critical**;PM 汇总结论须含 residual 清单与跟踪位置。
|
|
34
|
+
- **`severity`** 仅允许 `mstar-plan-artifacts/references/status-and-residuals.md` 枚举。
|
|
32
35
|
- **Open SSOT**:`{HARNESS_DIR}/status.json` 根级 **`residual_findings[<plan-id>]`**;PM 在 consolidated 决策分配 **R1…** 并写入。关闭 → **`{HARNESS_DIR}/archived/residuals/<plan-id>.json`**。
|
|
33
36
|
- 主 plan 仅作人类索引;不得作为唯一 SSOT。
|
|
34
|
-
-
|
|
35
|
-
- 未完成 residual 留档 → 不得进入 plan **Done**。
|
|
37
|
+
- 未完成 residual 留档(`allow-residual`)或未清干净可修 findings(`zero-residual`)→ 不得进入 plan **Done**。
|
|
36
38
|
|
|
37
39
|
### Residual 关闭与验证
|
|
38
40
|
|
|
@@ -98,6 +98,7 @@ The **`**You are a leaf executor. You MUST NOT:**`** section (previously just pr
|
|
|
98
98
|
**QA gate**: mandatory | pm-acceptance | report-only — see `references/project-manager/qa-trigger-matrix.md`
|
|
99
99
|
**QA gate reason**: <tier label, e.g. hotfix-inline | small-feature-clean-qc | mandatory-medium-feature>
|
|
100
100
|
**QA mode**: acceptance-only | full | report-only | N/A — required when `QA gate: mandatory` or `report-only`
|
|
101
|
+
**Findings cleanup**: zero-residual | allow-residual — **default `zero-residual` on formal iteration Phase 2**; **default `allow-residual`** for standalone `/pm`, hotfix, `Execution mode: inline` (override via Assignment or `plans[].metadata.findings_cleanup`; SSOT → `mstar-plan-artifacts` Findings cleanup modes)
|
|
101
102
|
**Why this agent**: <role-fit>
|
|
102
103
|
**PM Task Board coverage**: <task ids>
|
|
103
104
|
**Roadmap / deferred scope**: <required when staged, partial, or temporary; otherwise N/A>
|
|
@@ -34,6 +34,8 @@ Set **`QA gate`** on the **first implement Assignment** (or plan frontmatter) an
|
|
|
34
34
|
|
|
35
35
|
**Upgrade rule:** If conditions change mid-round (e.g. QC becomes `Approve with residuals`, UI scope added, open R# registered), change `QA gate` from `pm-acceptance` to `mandatory` before `Done`.
|
|
36
36
|
|
|
37
|
+
**Findings cleanup note:** Under Assignment **`Findings cleanup: zero-residual`** (iteration Phase 2 default), prefer clean QC `Approve` with **no open R#** — that restores the small-feature `pm-acceptance` path when other tier rules allow. Any remaining open R# (even blocker-defer) still force **`QA gate: mandatory`** like the residual row above. See `mstar-plan-artifacts` Findings cleanup modes.
|
|
38
|
+
|
|
37
39
|
## PM acceptance checklist (required before `Done` when `QA gate: pm-acceptance`)
|
|
38
40
|
|
|
39
41
|
PM completes this in **Status Update** (or plan closure note). PM **does not** run bash tests or reproduction in the orchestration thread.
|
|
@@ -34,6 +34,7 @@ Use this reference when PM is dispatching QC, consolidating review verdicts, or
|
|
|
34
34
|
- **NEVER** dispatch only QC#2 and QC#3 while skipping QC#1 on initial SDD tri wave — full **N=3** cross-review required (all three seats).
|
|
35
35
|
- **NEVER** consolidate tri-review into `Approve` when any QC report's alignment fields differ from Assignment (character-level).
|
|
36
36
|
- **NEVER** register or rewrite residual `severity` outside `mstar-plan-artifacts` machine enum.
|
|
37
|
+
- **NEVER** under `Findings cleanup: zero-residual`, use `Approve with residuals` or open R# for fixable findings — fix-now + re-review; residual only for true blocker-defer + roadmap.
|
|
37
38
|
- **NEVER** drop residual tracking to chat-only when `Approve with residuals` applies.
|
|
38
39
|
- **NEVER** treat "two of three QC reports arrived" as sufficient — missing seat → `Blocked`.
|
|
39
40
|
- **NEVER** re-dispatch all three after routine fix when only one or two had blockers — **targeted re-review** unless `QC re-review: full tri-review`.
|
|
@@ -59,6 +60,18 @@ Use this reference when PM is dispatching QC, consolidating review verdicts, or
|
|
|
59
60
|
|
|
60
61
|
## Residual Findings (Mandatory)
|
|
61
62
|
|
|
63
|
+
Read Assignment **`Findings cleanup`** first (`mstar-plan-artifacts` — Findings cleanup modes).
|
|
64
|
+
|
|
65
|
+
### When `Findings cleanup: zero-residual`
|
|
66
|
+
|
|
67
|
+
- Prefer **fix-now + targeted re-review** for Critical / Warning / Suggestion that can be fixed this session.
|
|
68
|
+
- **NEVER** park fixable findings as open R# or use `Approve with residuals` for them.
|
|
69
|
+
- Register open R# **only** for true blocker-defers (`decision: defer` + Durable Roadmap + `target` next iteration/milestone).
|
|
70
|
+
- `nit`: fix or drop (no R#).
|
|
71
|
+
- Plan Done: prefer empty open list; any remaining open R# must all be blocker-defer + roadmap.
|
|
72
|
+
|
|
73
|
+
### When `Findings cleanup: allow-residual` (or unset outside iteration Phase 2)
|
|
74
|
+
|
|
62
75
|
When blocking issues are fixed but non-blocking warnings/suggestions remain:
|
|
63
76
|
|
|
64
77
|
- Must register residual findings (do not leave as chat-only).
|
|
@@ -70,7 +83,7 @@ Each residual record should include:
|
|
|
70
83
|
|
|
71
84
|
- `id`, `title`, `severity`, `source`, `scope`, `decision`, `owner`, `target milestone/date`, `tracking link`
|
|
72
85
|
|
|
73
|
-
`Approve with residuals` is only valid when no unresolved blocking items remain.
|
|
86
|
+
`Approve with residuals` is only valid when no unresolved blocking items remain (and under `zero-residual`, only when leftovers are blocker-defers).
|
|
74
87
|
|
|
75
88
|
## Residual Closure & Archive
|
|
76
89
|
|
|
@@ -115,6 +115,7 @@ If any item below matches, fix the dispatch/plan state or mark `Blocked`—do **
|
|
|
115
115
|
- **NEVER** split a required **parallel batch** of `N >= 2` invokes across multiple assistant messages when the host requires a single dispatch turn with all `N` calls.
|
|
116
116
|
- **NEVER** register residuals only inside the plan narrative while skipping root `{HARNESS_DIR}/status.json` `residual_findings[<plan_id>]` when plan conventions require the SSOT field.
|
|
117
117
|
- **NEVER** write non-canonical residual `severity` strings—use only the machine enum from `mstar-plan-artifacts`.
|
|
118
|
+
- **NEVER** under `Findings cleanup: zero-residual`, park fixable Critical/Warning/Suggestion as open R# or use `Approve with residuals` for them — fix-now + re-review; open residual only for true blocker-defer + Durable Roadmap (`mstar-plan-artifacts` Findings cleanup modes).
|
|
118
119
|
- **NEVER** use `Task category: quick` to skip mandatory Prepare (`specify → clarify → plan`) for substantive work (`mstar-harness-core` hard rule).
|
|
119
120
|
- **NEVER** dispatch same-repo **≥2 concurrent writable implement** tracks without **`references/parallel-writable-pre-dispatch.md`**(per-track worktree + absolute **`Worktree path`**;**N invokes ≠ isolation** — also `mstar-dispatch-gates` dual-gate table).
|
|
120
121
|
- **NEVER** point QC at a single dev worktree/`Review cwd` that cannot contain **all** claimed changes from parallel tracks until Git integration lands on one `Working branch` `HEAD` (`mstar-branch-worktree` QC/QA alignment).
|