@mstar-harness/dsh 3.8.1 → 3.8.3
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.i18n.yaml +2 -2
- package/README.md +16 -6
- package/README.zh.md +16 -6
- package/dist/client/panel/engine-status-client.d.ts +84 -6
- package/dist/client/panel/graph/project-graph.d.ts +26 -13
- package/dist/client/panel/guards.d.ts +41 -1
- package/dist/client/panel/locale.d.ts +1 -1
- package/dist/client/panel/pages/AgentListPage.d.ts +1 -1
- package/dist/client/panel/sidebar.d.ts +3 -2
- package/dist/client/panel/state-section.d.ts +25 -3
- package/dist/client/panel/use-mstar-engine-status.d.ts +28 -4
- package/dist/client.js +346 -48
- package/dist/engine-status-endpoint.d.ts +85 -8
- package/dist/engine-status-store.d.ts +91 -1
- package/dist/engine-status-wire.d.ts +9 -0
- package/dist/gates/_shared.d.ts +61 -9
- package/dist/gates/adapter.d.ts +32 -2
- package/dist/gates/agent-flow.d.ts +312 -60
- package/dist/gates/catalog.d.ts +58 -37
- package/dist/gates/dispatch.d.ts +11 -2
- package/dist/gates/goal-bridge.d.ts +10 -130
- package/dist/gates/plan-mode-bridge.d.ts +20 -11
- package/dist/gates/role-persona.d.ts +16 -0
- package/dist/gates/steering.d.ts +41 -0
- package/dist/gates/workflow-ledger.d.ts +31 -4
- package/dist/gates/workflow-selection.d.ts +41 -20
- package/dist/index.js +1206 -392
- package/dist/types.d.ts +36 -11
- package/harness-commands/amazing-e2e-check.md +10 -0
- package/harness-commands/amazing-pr-review.md +2 -0
- package/harness-commands/codebase-audit.md +2 -0
- package/harness-commands/iteration-drive.md +1 -1
- package/harness-skills/mstar-artifacts/references/plan-files-and-reports.md +2 -2
- package/harness-skills/mstar-artifacts/references/plan-quality-bar.md +14 -12
- package/harness-skills/mstar-artifacts/templates/plan.main.md +19 -6
- package/harness-skills/mstar-audit/SKILL.md +5 -5
- package/harness-skills/mstar-coding-behavior/SKILL.md +8 -8
- package/harness-skills/mstar-dispatch-gates/SKILL.md +9 -7
- package/harness-skills/mstar-e2e/SKILL.md +40 -0
- package/harness-skills/mstar-e2e/references/report-template.md +32 -0
- package/harness-skills/mstar-engine-legacy/references/qc-seat-n-restatements.md +3 -3
- package/harness-skills/mstar-harness-core/SKILL.md +14 -1
- package/harness-skills/mstar-host/SKILL.md +3 -1
- package/harness-skills/mstar-host/references/_shared/host-role-binding-core.md +1 -1
- package/harness-skills/mstar-host/references/cursor.md +1 -1
- package/harness-skills/mstar-host/references/dsh-workflow-scripts.md +424 -0
- package/harness-skills/mstar-host/references/dsh.md +180 -51
- package/harness-skills/mstar-host/references/kimi.md +3 -3
- package/harness-skills/mstar-host/references/omp.md +3 -3
- package/harness-skills/mstar-host/references/parallel-dispatch.md +6 -6
- package/harness-skills/mstar-host/references/zcode.md +4 -4
- package/harness-skills/mstar-iteration/SKILL.md +1 -1
- package/harness-skills/mstar-iteration/references/phase-1-prepare.md +2 -2
- package/harness-skills/mstar-iteration/references/phase-2-worktree-lease.md +3 -3
- package/harness-skills/mstar-review-qc/SKILL.md +4 -4
- package/harness-skills/mstar-review-qc/references/review-responsibility-boundaries.md +9 -7
- package/harness-skills/mstar-roles/SKILL.md +2 -0
- package/harness-skills/mstar-roles/references/_shared/leaf-executor-core.md +9 -0
- package/harness-skills/mstar-roles/references/ops-engineer.md +3 -0
- package/harness-skills/mstar-roles/references/project-manager/dispatch-and-assignment.md +12 -9
- package/harness-skills/mstar-roles/references/project-manager/qa-trigger-matrix.md +7 -5
- package/harness-skills/mstar-roles/references/project-manager/qc-and-residuals.md +2 -2
- package/harness-skills/mstar-roles/references/project-manager/routing-and-dev-allocation.md +2 -2
- package/harness-skills/mstar-roles/references/project-manager.md +4 -2
- package/harness-skills/mstar-roles/references/qa-engineer/acceptance-gate.md +12 -13
- package/harness-skills/mstar-roles/references/qa-engineer.md +5 -4
- package/harness-skills/mstar-roles/references/qc-specialist/deep-review-lenses.md +5 -5
- package/harness-skills/mstar-roles/references/qc-specialist/report-template.md +2 -0
- package/harness-skills/mstar-roles/references/qc-specialist/reviewer-checklist.md +1 -1
- package/harness-skills/mstar-roles/references/qc-specialist/reviewer-workflow.md +5 -4
- package/harness-skills/mstar-roles/references/qc-specialist-shared.md +3 -1
- package/harness-skills/mstar-sdd/SKILL.md +17 -9
- package/harness-skills/mstar-sdd/references/file-handoffs.md +40 -20
- package/harness-skills/mstar-sdd/references/implementer-continuation-prompt.md +9 -4
- package/harness-skills/mstar-sdd/references/implementer-prompt.md +11 -6
- package/harness-skills/mstar-sdd/references/sticky-implementer-session.md +4 -2
- package/harness-skills/mstar-sdd/references/task-reviewer-prompt.md +8 -4
- package/package.json +2 -2
|
@@ -119,9 +119,9 @@ or a custom profile).
|
|
|
119
119
|
doneAt — deterministic, documented heuristic, only provably
|
|
120
120
|
cross-iteration events are dropped, no historical back-scan of resumed
|
|
121
121
|
long logs; the sidebar chip title is captured at open time; a docked
|
|
122
|
-
body renders nothing while `tab.visible === false`.
|
|
123
|
-
|
|
124
|
-
|
|
122
|
+
body renders nothing while `tab.visible === false`. Routine panel QA uses affected unit evidence only. Real-browser rebuilt-bundle
|
|
123
|
+
verification or user-restart GUI acceptance belongs to an explicitly requested
|
|
124
|
+
independent **`mstar-e2e`** workflow (`/amazing-e2e-check`), never an iteration QA gate.
|
|
125
125
|
|
|
126
126
|
## Skill loading
|
|
127
127
|
|
|
@@ -138,6 +138,7 @@ or a custom profile).
|
|
|
138
138
|
| dsh tool | Harness use |
|
|
139
139
|
|----------|-------------|
|
|
140
140
|
| **`subagent`** | Primary dispatch — the model-facing delegation tool the dispatch gate matches (default `toolName`; a renamed instance must be declared via Config `dispatchTools`) |
|
|
141
|
+
| **`workflow`** | Read-only N≥3 fan-out — one run, one conversation `workflow-run` node (§ Read-only fan-out via the `workflow` tool; scripts → `references/dsh-workflow-scripts.md`) |
|
|
141
142
|
| **`mstar_iteration_gate`** | Evaluate the iteration phase gate in-app (`evaluatePhaseGate` — `mstar iteration gate` parity) |
|
|
142
143
|
| **`mstar_sdd_workspace`** / **`mstar_sdd_task_brief`** | SDD workspace resolve + task brief extraction (`mstar sdd …` parity) |
|
|
143
144
|
| **`mstar_*_validate`** | On-demand seam validators (design-md / audit / compound / roles) |
|
|
@@ -208,59 +209,107 @@ tab's `EventLogPage` log page are pure consumers of this evidence.
|
|
|
208
209
|
`beforeDispatch` followed by the identical text as an in-loop subagent tool
|
|
209
210
|
call) records two dispatch events — the surfaces are mutually exclusive by
|
|
210
211
|
design; the double record is documented, not deduplicated.
|
|
211
|
-
- **File / bounds**: events append to
|
|
212
|
-
Lines, one event per
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
212
|
+
- **File / bounds**: events append to the ACTIVE workflow dir —
|
|
213
|
+
`{HARNESS_DIR}/workflows/<id>/agent-flow.jsonl` (JSON Lines, one event per
|
|
214
|
+
line; harness dirs are gitignored by convention) — never the harness root:
|
|
215
|
+
with no active lifecycle the record is SKIPPED with a one-time warn. The
|
|
216
|
+
append and the size-gated truncating read-modify-write form ONE critical
|
|
217
|
+
section behind a per-workflow lockdir, so a second dsh session sharing the
|
|
218
|
+
active lifecycle cannot silently drop the other writer's lines (steady state
|
|
219
|
+
stays one writer per workflow dir); any loss only under-reports actual flow
|
|
220
|
+
in the panel, never a gate impact. After each append the file truncates to
|
|
221
|
+
the most recent **500** events; truncation is size-gated (≈500 lines'
|
|
222
|
+
typical size — small files stay append-only) and performed as an atomic
|
|
223
|
+
temp-file rename. The catalog read returns the latest-first view with a
|
|
224
|
+
default window of **50** and a role × outcome summary. A MISSING file reads
|
|
225
|
+
as the empty view ("no actual dispatches yet" — recording starts at plan
|
|
226
|
+
merge); an unreadable file is absent evidence; malformed lines are skipped,
|
|
227
|
+
never fatal.
|
|
224
228
|
- **Settle = real completion pairing, never faked**: `tools/post-execute`
|
|
225
229
|
IS part of the
|
|
226
230
|
verified dsh-tools registry surface (`runPostExecute` dispatches the
|
|
227
231
|
waterfall for every tool call — verified against the upstream source and
|
|
228
232
|
pinned by a real-call probe). The pairing listener matches dispatch TOOLS
|
|
229
|
-
(Config `dispatchTools`, default `['subagent']`), looks up
|
|
230
|
-
|
|
231
|
-
result shapes:
|
|
232
|
-
- `{ kind: 'background',
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
233
|
+
(Config `dispatchTools`, default `['subagent', 'subagent_fork']`), looks up
|
|
234
|
+
the exec's agent-namespaced call key in the apply-scoped pairing store, and
|
|
235
|
+
branches on the verified result shapes:
|
|
236
|
+
- `{ kind: 'background', jobId }` (the registry job id, `<kind>-N`) → store
|
|
237
|
+
`jobId → dispatchRef` and the bounded job id as the ref's `taskRef`; the
|
|
238
|
+
REAL settle arrives via `ctx.inject(['jobs'])` → `jobs.onJobDone`
|
|
239
|
+
(terminal mapping completed → ok / killed → denied / failed → error,
|
|
240
|
+
`durationMs` when available). A background value without a valid `jobId` →
|
|
241
|
+
nothing mappable (no settle).
|
|
236
242
|
- `{ kind: 'continuable', subagentId }` → no terminal signal this round →
|
|
237
|
-
no settle (documented limit — the child owns its turns)
|
|
243
|
+
no settle (documented limit — the child owns its turns); the value
|
|
244
|
+
authorizes the child-identity join below and nothing is copied onto a
|
|
245
|
+
settle.
|
|
238
246
|
- any other successful value (foreground included) → settle `ok`; a failed
|
|
239
|
-
result (`isError`) → settle `error`.
|
|
247
|
+
result (`isError` or an `error` payload) → settle `error`. A returned
|
|
248
|
+
foreground `runId` is the settle's `childId`, extracted independently of
|
|
249
|
+
the outcome (an error settle keeps its identity without becoming `ok`).
|
|
240
250
|
Pairing is apply-scoped (in-memory `callId → dispatchRef` /
|
|
241
|
-
`
|
|
251
|
+
`jobId → dispatchRef` maps created in the entry `apply`; an HMR restart
|
|
242
252
|
resets them, and completions outside the window stay unpaired). Every
|
|
243
253
|
PAIRED settle carries the paired dispatch's identity (`role`/`planId`/
|
|
244
254
|
`taskId` — same field names + semantics as the dispatch event; the registry
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
window) record NOTHING — the
|
|
248
|
-
fabricated settle.
|
|
255
|
+
job id is never written as `taskId` — `taskId` stays the Assignment `Task N`
|
|
256
|
+
tag, `taskRef` is reserved for the registry id). Unpaired payloads
|
|
257
|
+
(non-dispatch tools, calls outside the pairing window) record NOTHING — the
|
|
258
|
+
ledger stays dispatch-only, never a fabricated settle.
|
|
259
|
+
- **Child identity (`subagent-link`, nonterminal)**: the child session id is
|
|
260
|
+
published upstream as a PARENT-OWNED `subagent/catalog` session event
|
|
261
|
+
(`{ version: 0, childId, childCreatedAt, mode, label }`; `label` = the
|
|
262
|
+
delegation `description`), appended by the tool body — for the continuable
|
|
263
|
+
path BEFORE the tool returns. The join spans a per-dispatch CALL WINDOW: the
|
|
264
|
+
pre-execute reserves the first raw-label slot under the live parent Session
|
|
265
|
+
object and captures its `seq` as the window start; a valid `background` /
|
|
266
|
+
`continuable` result at `tools/post-execute` makes that exact candidate
|
|
267
|
+
eligible (every other outcome retires it to a tombstone; a duplicate label
|
|
268
|
+
was already refused a candidate at reservation). Eligibility walks
|
|
269
|
+
`eventAt(seq)` over `[fromSeq, end)`, where `end` is the session's `seq`
|
|
270
|
+
CAPTURED when the candidate became eligible — recovering a catalog appended
|
|
271
|
+
before the tool returned — while ONE root-context `session/event` observer
|
|
272
|
+
feeds the same matcher for later arrivals against the session's CURRENT
|
|
273
|
+
`seq`: only that live observer follows the session forward, so a catalog
|
|
274
|
+
appended after eligibility still joins through it (the catch-up scan stays
|
|
275
|
+
frozen at its captured endpoint). A matched
|
|
276
|
+
candidate is consumed once and appends `{ v: 1, ts, kind: 'subagent-link',
|
|
277
|
+
agent?, childId, label, role, planId?, taskId?, taskRef? }` to the
|
|
278
|
+
DISPATCH's own workflow dir (`ts` = observation time), correlating the
|
|
279
|
+
catalog child back to the dispatch identity mstar recorded. It is an
|
|
280
|
+
IDENTITY record, NOT a completion: no `outcome`, no `verdict`, no `paired`
|
|
281
|
+
marker. A background one-shot link also carries its registry `taskRef`; a
|
|
282
|
+
continuable link omits it. Settle rows carry an optional `childId` — a
|
|
283
|
+
foreground `runId`, or for background only when the join has already
|
|
284
|
+
supplied one.
|
|
285
|
+
- **Join bounds (honest degrade)**: NO row when the label is missing/empty,
|
|
286
|
+
the dispatch unpaired, a background result carries no valid `jobId` (the
|
|
287
|
+
reserved candidate is retired — nothing mappable: no settle, no link),
|
|
288
|
+
the catalog version unknown, the mode not matching the result kind,
|
|
289
|
+
a continuable catalog naming a different child than the tool returned,
|
|
290
|
+
the slot map at capacity (500 labels per parent Session), or the slot
|
|
291
|
+
already consumed. The join is apply-scoped: no whole-history cold
|
|
292
|
+
scan and no `session/created` backfill — a catalog written before apply
|
|
293
|
+
(constructor seeds) can never label a new dispatch. Duplicate labels are
|
|
294
|
+
deterministic best-effort (first reservation + first matching catalog wins),
|
|
295
|
+
NOT proof of unique ownership. Not every provider emits a catalog — a remote
|
|
296
|
+
run without a `localAgent` produces none, so a dispatch may legitimately
|
|
297
|
+
have no link row.
|
|
249
298
|
- **Catalog**: `state.agentFlow` carries the ledger view (`events` ≤ 50,
|
|
250
299
|
latest-first, + `summary`); the model-facing `<mstar_engine_status>` text
|
|
251
300
|
renders ONE compact `agent flow: …` line only when events > 0 (role totals
|
|
252
301
|
top-5 + latest dispatch with HH:MM — the event detail lives in the
|
|
253
|
-
structured source, never the model text). A ledger record
|
|
254
|
-
invalidates the affected workspace's TTL cache entry
|
|
255
|
-
(apply-scoped `harnessDir → cache key` reverse map +
|
|
256
|
-
→ the next pre-step rebuilds and (digest
|
|
257
|
-
|
|
258
|
-
|
|
302
|
+
structured source, never the model text). A ledger record
|
|
303
|
+
(dispatch/settle/link) invalidates the affected workspace's TTL cache entry
|
|
304
|
+
IMMEDIATELY (apply-scoped `harnessDir → cache key` reverse map +
|
|
305
|
+
invalidation closure) → the next pre-step rebuilds and (digest text change)
|
|
306
|
+
re-injects the row — the 60 s TTL no longer bounds ledger-change latency; it
|
|
307
|
+
still bounds non-ledger staleness.
|
|
259
308
|
- **Maintainer view**: change the ledger shape (event schema, bounds, settle
|
|
260
309
|
seam) and update the projections together — `gates/agent-flow.ts` (record /
|
|
261
|
-
read / settle
|
|
262
|
-
view) and `client/panel/graph/project-graph.ts` (the ZoneView
|
|
263
|
-
projection) — the panel renders ONLY what the evidence shows.
|
|
310
|
+
read / settle / catalog-join listeners), `gates/catalog.ts` (agent-flow line
|
|
311
|
+
+ `source` view) and `client/panel/graph/project-graph.ts` (the ZoneView
|
|
312
|
+
flow/agents projection) — the panel renders ONLY what the evidence shows.
|
|
264
313
|
|
|
265
314
|
## PM dispatch
|
|
266
315
|
|
|
@@ -299,22 +348,102 @@ the "queued messages" dock instead of reaching the parent (observed on dsh).
|
|
|
299
348
|
The closing message is the guaranteed delivery channel; reserve `report` for
|
|
300
349
|
MID-turn findings that change what the parent should do next.
|
|
301
350
|
|
|
351
|
+
### Progress discipline — native workflow, never `/goal`
|
|
352
|
+
|
|
353
|
+
dsh progress is driven by the **native workflow**: the workflow snapshot phases
|
|
354
|
+
+ the dispatch gates + **subagent settle notifications**. mstar **stops arming**
|
|
355
|
+
a goal on dsh — the surviving bridge is advisory-only (no `create` / `edit` /
|
|
356
|
+
`complete` / `pause` / `resume`, no goal read) — so no goal round loop drives
|
|
357
|
+
mstar work here. Never drive a dsh session with a `/goal` objective or a goal
|
|
358
|
+
round loop: `goal-round-driver` opens a round whenever the goal is active +
|
|
359
|
+
armed and the agent is idle, and it knows nothing about running subagents, so
|
|
360
|
+
an operator who arms `/goal` manually can still get rounds firing while a
|
|
361
|
+
dispatched child owns the critical path.
|
|
362
|
+
|
|
363
|
+
**Phase 2 continuous execution is a PM-local loop**: dispatch → **wait for the
|
|
364
|
+
child's settle notification** → next dispatch. When a dispatched child owns the
|
|
365
|
+
critical path, the correct action is to **wait** — not to open another unit of
|
|
366
|
+
work against the same worktree.
|
|
367
|
+
|
|
302
368
|
### QC default
|
|
303
369
|
|
|
304
|
-
- **`Execution mode: sdd`**: **N=3**
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
`
|
|
310
|
-
|
|
370
|
+
- **`Execution mode: sdd`**: **N=3** seats — one per QC seat (`qc-specialist`,
|
|
371
|
+
`qc-specialist-2`, `qc-specialist-3`), each body **Act as** the respective QC
|
|
372
|
+
role + QC skill load. Read-only fan-out of N≥3 on dsh uses the native
|
|
373
|
+
**`workflow`** tool (the `mstar-qc-tri` script — § Read-only fan-out via the
|
|
374
|
+
`workflow` tool): one run, three concurrent children, one conversation
|
|
375
|
+
`workflow-run` node. When the tool is not mounted (the `ptc` preset hides it),
|
|
376
|
+
fall back to the `subagent` path below. **The `subagent` path MUST dispatch all
|
|
377
|
+
three with `run_in_background: true` in one message** → the seats run
|
|
378
|
+
CONCURRENTLY (background children; wall ≈ single seat); foreground (no
|
|
379
|
+
`run_in_background`) runs serially (wall ≈ 3× single seat) and does NOT count
|
|
380
|
+
as parallel tri. Cannot emit required **N** → **`Blocked`**.
|
|
311
381
|
- **`inline`**: **N=1**.
|
|
312
382
|
|
|
313
|
-
### SDD implement
|
|
314
|
-
|
|
315
|
-
- **`Execution mode: sdd`**: one implementer `subagent` dispatch per task id;
|
|
316
|
-
|
|
317
|
-
|
|
383
|
+
### SDD implement
|
|
384
|
+
|
|
385
|
+
- **`Execution mode: sdd`**: one implementer `subagent` dispatch per ready task id;
|
|
386
|
+
independent tasks use isolated tracks and `run_in_background: true` before
|
|
387
|
+
waiting, per **`mstar-sdd`** § Ready-task scheduling. Task reviewer is a fresh
|
|
388
|
+
separate dispatch; sticky resume is limited to one sequential owner track
|
|
389
|
+
with a recorded continuable-subagent id.
|
|
390
|
+
|
|
391
|
+
## Read-only fan-out via the `workflow` tool
|
|
392
|
+
|
|
393
|
+
dsh also exposes the upstream **`workflow`** tool
|
|
394
|
+
(`@deepseek-ai/dsh-tool-workflow`, mounted by the shipped agent presets; the
|
|
395
|
+
`ptc` preset disables it in favour of its own orchestration surface). It runs a
|
|
396
|
+
model-written plain-JavaScript script that fans children out inside ONE run; the
|
|
397
|
+
run is recorded as durable `tool-workflow/*` session events and the stock dsh UI
|
|
398
|
+
(`dsh-client-ui-workflow-run`) folds them into one conversation **`workflow-run`**
|
|
399
|
+
node the operator expands by phase and member. Use it for **read-only fan-out of
|
|
400
|
+
N ≥ 3 seats** — plan QC tri, large-repo audit categories, `/amazing-pr-review
|
|
401
|
+
deep` seats — and copy the `script` + `meta` + `args` from this skill →
|
|
402
|
+
`references/dsh-workflow-scripts.md`. For **1–2** delegations keep **`subagent`**
|
|
403
|
+
(the tool's own guidance): the two-seat default tier of `/amazing-pr-review`
|
|
404
|
+
shows two subagent cards and no `workflow-run` node, and that is expected.
|
|
405
|
+
|
|
406
|
+
**Read-only only.** A workflow child is a delegated child (the shipped `spawn`
|
|
407
|
+
provider pins `approval: never` for the whole delegation), and the run has **no
|
|
408
|
+
per-child pre-start veto seam** — so a script is never the channel for writable
|
|
409
|
+
work; writable fan-out stays on `subagent` behind the dispatch and lease gates.
|
|
410
|
+
Seats return findings in their result payload and must never depend on writing
|
|
411
|
+
files — the caller persists the seat reports.
|
|
412
|
+
|
|
413
|
+
**Every `agent()` prompt starts with the Assignment header** — `## Assignment`
|
|
414
|
+
plus `Execute as` / `Delegation` / `Task category` as the first lines:
|
|
415
|
+
|
|
416
|
+
```markdown
|
|
417
|
+
## Assignment
|
|
418
|
+
|
|
419
|
+
Execute as: qc-specialist
|
|
420
|
+
Delegation: forbidden
|
|
421
|
+
Task category: audit
|
|
422
|
+
```
|
|
423
|
+
|
|
424
|
+
Role binding on dsh is prompt-only (there is no `agent` field), and the same
|
|
425
|
+
engine grammar is what the role-persona channel parses
|
|
426
|
+
(`packages/dsh/src/gates/role-persona.ts` reads only the header region) — so
|
|
427
|
+
`Execute as: qc-specialist` resolves the QC role persona for that child. Keep
|
|
428
|
+
body-quoted field examples out of the header region, and never pass the deferred
|
|
429
|
+
`agentType` option: the engine rejects it loudly.
|
|
430
|
+
|
|
431
|
+
| Operator types | N | Tool | `meta.name` | Operator sees |
|
|
432
|
+
|---|---|---|---|---|
|
|
433
|
+
| `/codebase-audit` (large repo) | ≥3 | native `workflow` | `mstar-audit-fanout` | conversation `workflow-run` node |
|
|
434
|
+
| `/amazing-pr-review deep` | ≥3 | native `workflow` | `mstar-pr-seats` | same |
|
|
435
|
+
| `/amazing-pr-review` default tier | 2 | `subagent` | — | two subagent cards, no node (expected) |
|
|
436
|
+
| Plan QC tri (PM already in session, no extra slash) | 3 | native `workflow` | `mstar-qc-tri` | conversation `workflow-run` node |
|
|
437
|
+
| Any 1–2 read-only delegation | 1–2 | `subagent` | — | expected |
|
|
438
|
+
|
|
439
|
+
`meta.name` is the gate identity — keep it kebab-case and on the recommended
|
|
440
|
+
list. With the default Config (`workflowNames` unset) every name is *unknown*,
|
|
441
|
+
which under the default `workflowGate: warn` is one `workflow.name.unknown`
|
|
442
|
+
**advisory that the run survives** — acceptable on a first run, not a failure. A
|
|
443
|
+
production overlay may set `workflowNames: ['mstar-qc-tri', 'mstar-audit-fanout',
|
|
444
|
+
'mstar-pr-seats']` (and, separately, `workflowGate: hard`); both are operator
|
|
445
|
+
choices, never mstar defaults. The same run also reaches the panel's 事件记录 tab
|
|
446
|
+
through the agent-flow ledger (§ Agent-flow ledger).
|
|
318
447
|
|
|
319
448
|
## Commands and skills paths
|
|
320
449
|
|
|
@@ -97,10 +97,10 @@ Harness **dispatch** on Kimi = **one or more `Agent` tool calls** with correct *
|
|
|
97
97
|
|
|
98
98
|
Cannot emit required **N** → **`Blocked`**.
|
|
99
99
|
|
|
100
|
-
### SDD implement
|
|
100
|
+
### SDD implement
|
|
101
101
|
|
|
102
|
-
- **`Execution mode: sdd`**: one implementer **`Agent`** per task id; task reviewer = new **`Agent`** with **Act as `code-reviewer`** (Kimi L2 review; not qc-specialist*), always via generic fallback `subagent_type: "coder"` per C5 — no sticky resume unless host adds it later.
|
|
103
|
-
-
|
|
102
|
+
- **`Execution mode: sdd`**: one implementer **`Agent`** per task id; task reviewer = new **`Agent`** with **Act as `code-reviewer`** (Kimi L2 review; not qc-specialist*), always via generic fallback `subagent_type: "coder"` per C5 — no sticky resume unless host adds it later. Ready-task scheduling → **`parallel-dispatch.md`** § SDD implement.
|
|
103
|
+
- Independent ready implementers use isolated parallel tracks; never share a writable worktree or session.
|
|
104
104
|
|
|
105
105
|
## Clarify
|
|
106
106
|
|
|
@@ -188,10 +188,10 @@ Harness **dispatch** on omp = **one or more `task` tool calls** with correct **`
|
|
|
188
188
|
|
|
189
189
|
Cannot emit required **N** → **`Blocked`**.
|
|
190
190
|
|
|
191
|
-
### SDD implement
|
|
191
|
+
### SDD implement
|
|
192
192
|
|
|
193
|
-
- **`Execution mode: sdd`**: one implementer `task` entry per task id with `agent` matching the implementer role when listed; task reviewer = new entry with `agent: "code-reviewer"` (omp L2 review; not qc-specialist*) or `agent: "reviewer"`/`"task"` as fallback + C5b — no sticky resume unless host resume/id is available and recorded.
|
|
194
|
-
-
|
|
193
|
+
- **`Execution mode: sdd`**: one implementer `task` entry per task id with `agent` matching the implementer role when listed; task reviewer = new entry with `agent: "code-reviewer"` (omp L2 review; not qc-specialist*) or `agent: "reviewer"`/`"task"` as fallback + C5b — no sticky resume unless host resume/id is available and recorded. Ready-task scheduling → **`parallel-dispatch.md`** § SDD implement.
|
|
194
|
+
- Independent ready implementers use isolated parallel tracks; never share a writable worktree or session.
|
|
195
195
|
|
|
196
196
|
## Clarify
|
|
197
197
|
|
|
@@ -46,16 +46,16 @@ Formal iteration Phase 2 uses the same SDD + tri rule — not a separate carve-o
|
|
|
46
46
|
|
|
47
47
|
(**SDD 默认**已在上一节;本节仅覆盖显式 tri 的非 SDD 场景。)
|
|
48
48
|
|
|
49
|
-
## SDD implement
|
|
49
|
+
## SDD implement
|
|
50
50
|
|
|
51
|
-
- **`
|
|
52
|
-
-
|
|
53
|
-
-
|
|
51
|
+
- Follow **`mstar-sdd`** § Ready-task scheduling: independent ready tasks run concurrently after per-track worktree and artifact isolation; fresh implementers, one fresh reviewer per task.
|
|
52
|
+
- Serialize only actual dependencies, overlapping writers, one sticky session, and integration merges. PM alone updates shared progress.
|
|
53
|
+
- When the host only exposes separate asynchronous starts, issue every ready call before waiting for any result; same-message packaging is required only when supported.
|
|
54
54
|
|
|
55
55
|
## QC targeted re-review (after fixes)
|
|
56
56
|
|
|
57
57
|
- Assignment: **`QC re-review: targeted — reviewers: <role-ids>`** → **N** = listed seats only (1–3), **one** dispatch turn with **N** invocations.
|
|
58
|
-
- Do **not** default to three invocations after a routine fix round.
|
|
58
|
+
- Do **not** default to three invocations after a routine fix round. Each listed seat receives only its findings and fix delta; tri seat count never expands review scope.
|
|
59
59
|
- Post-dispatch: verify only **dispatched** seats returned; PM updates same bundle `qc-consolidated.md` and durable plan summary (see `mstar-artifacts/references/plan-files-and-reports.md`).
|
|
60
60
|
|
|
61
61
|
## Self-check before send
|
|
@@ -65,4 +65,4 @@ Formal iteration Phase 2 uses the same SDD + tri rule — not a separate carve-o
|
|
|
65
65
|
3. Dispatch message contains **exactly `N`** invocation calls?
|
|
66
66
|
4. **Each** invocation carries its role-binding field set to **`Execute as`** (omp `agent` / Cursor `subagent_type` / OpenCode `subagent` / Kimi·ZCode `subagent_type`)? A bare `task`/prompt item with no role field = **incomplete**, even at **N=1**.
|
|
67
67
|
5. QC initial: **`Execution mode: sdd`** → **N=3**? **`inline`** → **N=1**? Targeted re-review → **N** = Assignment reviewer count?
|
|
68
|
-
6. SDD implement →
|
|
68
|
+
6. SDD implement → independent ready tasks isolated and concurrent? Sticky resume limited to one sequential owner track?
|
|
@@ -67,7 +67,7 @@ ZCode C5/C5b SSOT is **this file** — do **not** load `_shared/host-role-bindin
|
|
|
67
67
|
3. **Skill load list** — instruct the subagent to read `mstar-roles` → `references/<role-id>.md` (or shared reference + parameters) and topic skills per that reference.
|
|
68
68
|
4. **`subagent_type`** — bare Morning Star role id per C5; `general-purpose` fallback.
|
|
69
69
|
|
|
70
|
-
Paste-only Assignment **without** an invoke call is **not** dispatch. Anti-recursion NEVER: leaf executors are already `Execute as` — no recursive invoke of the same role; Assignment wins (`Delegation: forbidden` unless stated).
|
|
70
|
+
Paste-only Assignment **without** an invoke call is **not** dispatch. Anti-recursion NEVER: leaf executors are already `Execute as` — no recursive invoke of the same role; Assignment wins (`Delegation: forbidden` unless stated). Independent ready implementers may run concurrently after isolation; scheduling → **`parallel-dispatch.md`** § SDD implement.
|
|
71
71
|
|
|
72
72
|
ZCode invoke shape (same turn):
|
|
73
73
|
|
|
@@ -119,10 +119,10 @@ Harness **dispatch** on ZCode = **one or more `Agent` tool calls** with correct
|
|
|
119
119
|
|
|
120
120
|
Cannot emit required **N** → **`Blocked`**.
|
|
121
121
|
|
|
122
|
-
### SDD implement
|
|
122
|
+
### SDD implement
|
|
123
123
|
|
|
124
|
-
- **`Execution mode: sdd`**: one implementer **`Agent`** per task id (bare role id per C5, `general-purpose` fallback); task reviewer = new **`Agent`** with **Act as `code-reviewer`** (`subagent_type: "code-reviewer"`, `general-purpose` fallback; ZCode L2 review; not qc-specialist*), always with C5b prompt binding — no sticky resume unless host adds it later.
|
|
125
|
-
-
|
|
124
|
+
- **`Execution mode: sdd`**: one implementer **`Agent`** per task id (bare role id per C5, `general-purpose` fallback); task reviewer = new **`Agent`** with **Act as `code-reviewer`** (`subagent_type: "code-reviewer"`, `general-purpose` fallback; ZCode L2 review; not qc-specialist*), always with C5b prompt binding — no sticky resume unless host adds it later. Ready-task scheduling → **`parallel-dispatch.md`** § SDD implement.
|
|
125
|
+
- Independent ready implementers use isolated parallel tracks; never share a writable worktree or session.
|
|
126
126
|
|
|
127
127
|
## Clarify
|
|
128
128
|
|
|
@@ -81,7 +81,7 @@ Phase 5: PR merge-ready loop —— 至 mergeable + CI 全绿 + reviews resolved
|
|
|
81
81
|
- 未知 → 读 `mstar-*`;仅 **`Blocked`**、secrets、不可逆范围缺口、branch metadata 缺失、或 Phase 5 多轮仍 blocked 时升级用户
|
|
82
82
|
- 实际 Git ≠ `working_branch` → **同轮**更新 plan + snapshot + `execution_lease.working_branch`(如适用)
|
|
83
83
|
- **跨 plan implement 并行安全闸**与 **integration merge 串行** → `references/phase-2-worktree-lease.md` §2.0 #5 /「Multi-plan parallelism」(**无论** `Worktree mode: waived`)
|
|
84
|
-
- plan 内 SDD
|
|
84
|
+
- plan 内 SDD 独立 ready tasks **并行**,真实依赖与共享写目标串行 — phase-2 reference §2.4、§2.5、`mstar-sdd` Ready-task scheduling
|
|
85
85
|
- **zero-residual(默认)**:单 plan QC findings 尽量当轮清干净;仅真 blocker 才 defer(须 Durable Roadmap)— 见 **`mstar-artifacts`** Findings cleanup modes
|
|
86
86
|
- iteration 命令共享的 PM invariants / preflight / todos / STOP → **`references/command-shared-invariants.md`**
|
|
87
87
|
|
|
@@ -145,10 +145,10 @@ Phase 1 与 §1.6 须遵守 **`references/iteration-artifact-boundaries.md`**(
|
|
|
145
145
|
派发机制 → **`mstar-dispatch-gates`**(specialist review-and-edit dispatch,**顺序链**)。PM **不得**将迭代 harness 文档 commit 到 `spec_integration_branch`,直到:
|
|
146
146
|
|
|
147
147
|
1. **product-manager** → **architect** → **writing-specialist** 已按序 invoke 编辑 compass、plans、`{SPECS_DIR}/` 与 **`{ITERATION_DIR}/<iteration-id>/`** package(guides/specs,按需);**不得**在 start 链向 `{KNOWLEDGE_DIR}/` 新增
|
|
148
|
-
2. **writing-specialist** 完成 **corpus hygiene
|
|
148
|
+
2. **writing-specialist** 完成 **corpus hygiene**:仅本轮修改的 `{SPECS_DIR}/` / iteration package 与直接相关 knowledge 引用;错放迁回 **`<iteration-id>/`** package;细则 → **`iteration-corpus-hygiene.md`**、**`iteration-artifact-boundaries.md`**
|
|
149
149
|
3. PM 将 compass `status` 设为 `locked`,并确认各 plan 的 Prepare gate(specify / clarify / plan)
|
|
150
150
|
|
|
151
|
-
**顺序理由**:产品范围与优先级 → 架构与长期契约(specs)→
|
|
151
|
+
**顺序理由**:产品范围与优先级 → 架构与长期契约(specs)→ 行文、规格库卫生与错放纠正(在 PM/architect 定稿后核对受影响文档)。本共享产物链存在真实依赖;独立文档可按 ownership 隔离并行。早期全局探索的既有结果复用,不因每次编辑重新扫全库。OpenCode:plain role id — **`mstar-host/references/opencode.md`** § Role-mention hygiene。
|
|
152
152
|
|
|
153
153
|
**完成证据** = 磁盘上的 compass / plans / specs / iteration 文档修订 + specs(与既有 knowledge)卫生/归档(如有)+ 索引与 metadata 更新 + compass `status: locked`。**不**要求单独的迭代审查报告——迭代审查的 SSOT 是被编辑的文档本身,无 per-plan QC 式审计链。
|
|
154
154
|
|
|
@@ -149,14 +149,14 @@ mismatch → **STOP**.
|
|
|
149
149
|
2. **Plan start — feature worktree + branch**:创建/校验 dedicated feature worktree(默认 `<repoRoot>/.worktrees/<plan-id>-<slug>`);Assignment 须含绝对 `Worktree path` + `Working branch`(与 lease 一致)。plan 内多可写并行轨 → **`mstar-branch-worktree`** **`references/parallel-writable-pre-dispatch.md`**
|
|
150
150
|
3. **Implement → InReview**(产品编辑在 feature worktree;plans / snapshot / iterations / SDD 经 control 绝对路径):
|
|
151
151
|
- **默认 `Execution mode: sdd`**(多 task plan;hotfix 可 `inline`)。
|
|
152
|
-
- PM 载入 **`mstar-sdd`**
|
|
152
|
+
- PM 载入 **`mstar-sdd`** 后,按依赖与 ownership 派发 **独立 ready tasks 并行** 的 per-task 循环(**不是**一次派发 dev 做全部 tasks):
|
|
153
153
|
1. `mstar sdd workspace <plan-id>` → `{SDD_DIR}`
|
|
154
154
|
2. `mstar sdd task-brief <plan-file> N` → `{SDD_DIR}/task-N-brief.md`;记录 `BASE_SHA`
|
|
155
155
|
3. Dispatch **one** implementer subagent(`references/implementer-prompt.md`:brief 路径 + report 路径 + `Model tier`;**禁止**贴整份 plan)
|
|
156
156
|
4. Implementer `DONE` → `mstar sdd review-package BASE HEAD` → task diff 文件
|
|
157
157
|
5. Dispatch **one** task reviewer subagent(brief + report + diff + Global Constraints)
|
|
158
158
|
6. Fix loop 直至 review clean;append `{SDD_DIR}/progress.md`;更新 snapshot plan 行 / plan checkbox
|
|
159
|
-
7.
|
|
159
|
+
7. 放行已满足依赖的 next task;不等待无依赖任务,PM 独占共享 progress / snapshot 写入
|
|
160
160
|
- 每次 Completion Report 后更新 snapshot(`workflows/<id>/snapshot.json`)+ 主 plan
|
|
161
161
|
4. **QC → QA gate**(plan 保持 **`InReview`**;**保留** `execution_lease`):per-plan 审查链 → **`mstar-sdd`**(L1–L2)+ **`mstar-review-qc/references/review-responsibility-boundaries.md`**(L3 tri / inline 单席;raw reports in `{SDD_DIR}/review/`,durable summary in main plan/snapshot)+ **`QA gate`**(`mandatory` → `qa-engineer`;`pm-acceptance` → PM checklist)。**禁止**在 integration merge 成功前设 `Done` 或删除 `execution_lease`。
|
|
162
162
|
5. **Plan complete — serial merge back**(§2.0 #5 未 waive):自 **control worktree** claim/resume snapshot 顶层 `integration_merge_lease` → 将 plan feature branch 合并入 `spec_integration_branch`(仅 merge-lease holder;细则 → 下方「Integration merge lease」)→ 记录 merge commit 证据 → 释放 merge lease;**同轮**设 `Done` 并删除 `execution_lease`。merge 失败:保持 `InReview` + 保留 lease,不得标 `Done`。
|
|
@@ -177,7 +177,7 @@ mismatch → **STOP**.
|
|
|
177
177
|
|
|
178
178
|
| 规则 | 说明 |
|
|
179
179
|
|------|------|
|
|
180
|
-
|
|
|
180
|
+
| 并行 | 独立 ready tasks 各自 fresh implementer + 隔离 worktree;单一 canonical per-plan SDD root 内分离 task artifact 路径,context/progress 仅 PM 串行写;leaf 直接消费不可变绝对路径,不调用共享 context helper;每 task 后一位 fresh reviewer;真实依赖与 merge 串行(`mstar-sdd`) |
|
|
181
181
|
| Sticky(可选) | Assignment **`SDD implementer session: sticky`** + `implementer-session.json`;implementer **resume**,reviewer **fresh** — `mstar-sdd/references/sticky-implementer-session.md` |
|
|
182
182
|
| 文件交接 | brief / report / diff / `progress.md` 在 `{SDD_DIR}`;dispatch prompt **只给路径**,不贴 plan 全文或 task 历史 |
|
|
183
183
|
| Assignment 字段 | 每个 implement dispatch 须含 `Execution mode: sdd`、`SDD dir`、`Model tier`;§2.0 #5 未 waive 时还须含绝对 `Worktree path` + verified `execution_lease`;**禁止**省略 `Model tier` |
|
|
@@ -13,16 +13,16 @@ description: "Morning Star QC orchestration — **SDD mandatory plan QC tri-revi
|
|
|
13
13
|
|
|
14
14
|
## L3 是什么(派发前对齐)
|
|
15
15
|
|
|
16
|
-
- Plan QC seats are **reviewers**:
|
|
16
|
+
- Plan QC seats are **reviewers**: assigned changed **diff / logic / risk** lenses and directly affected interfaces — same family as PR review, not a parallel QA test lane.
|
|
17
17
|
- **Do not** instruct QC in Assignment to “run the suite / build / lint to confirm” on shared tri cwd; that causes peer `Blocked` and collapses L3 into L4.
|
|
18
|
-
- Runtime proof stays with **implementer evidence** and **`QA gate`** (`
|
|
18
|
+
- Runtime proof stays with scoped **implementer evidence** and **`QA gate`** (targeted unit evidence only). `full tri-review` describes seats, not full-repository review. Scope SSOT → **`mstar-harness-core`** § 定向执行与验证边界; QC never broadens exploration or repeats unchanged L2 evidence.
|
|
19
19
|
|
|
20
20
|
## 分派时机(与 plan / batch 对齐)
|
|
21
21
|
|
|
22
22
|
- **`Execution mode: sdd`**:全部 task + L2 task reviewers 完成后 → **强制 tri-review**(`QC mode: full tri-review`,**N=3**)。Assignment 须含 **branch review-package** 路径与 `{SDD_DIR}/review/qcN.md` report paths。PM 汇总 `{SDD_DIR}/review/qc-consolidated.md` 并回写主 plan durable summary。
|
|
23
23
|
- **`Execution mode: inline`**:单席 `qc-specialist` → `{SDD_DIR}/review/qc.md`(**N=1**),或按 hotfix 路由跳过。
|
|
24
24
|
- **After `Request Changes` (default)**:**Targeted re-review** — PM dispatches only seats that **raised** blocking findings; each updates **the same** `{SDD_DIR}/review/qcN.md` (`## Revalidation`, update verdict). **Do not** spawn `qcN-rev2.md` for targeted re-review. Naming → **`mstar-artifacts/references/plan-files-and-reports.md`** § QC 三审触发时机.
|
|
25
|
-
- **
|
|
25
|
+
- **Three-seat re-review**:only when all three seats have affected findings. `QC re-review: full tri-review` denotes seat count, never broader scope; each seat still checks its findings and fix delta. New wave basenames may distinguish reports, but do not reopen unchanged review coverage.
|
|
26
26
|
|
|
27
27
|
> **Engine check (when available):** run `mstar review seats <assignment-file> [--mode sdd|inline|targeted] [--reviewers <role1,role2,...>]` (or `import { executionModeToN, assertTriIdentity } from "@mstar-harness/engine"` in a host hook) to map `Execution mode` to its QC seat count N above and assert tri identity. On `fail` -> do not proceed; fix and re-run. Skill text below remains authoritative when the runtime is absent.
|
|
28
28
|
|
|
@@ -55,7 +55,7 @@ Leaf reviewers apply verdict per **`mstar-roles/references/qc-specialist/report-
|
|
|
55
55
|
|
|
56
56
|
### 覆盖语义(未提及 = 未审查)
|
|
57
57
|
|
|
58
|
-
- **未提及 = 未审查**:某 finding / severity 项 / 声明未被任何席位报告提及 → 不得在汇总中标记为已解决或通过;如实标注 `unreviewed
|
|
58
|
+
- **未提及 = 未审查**:某 finding / severity 项 / 声明未被任何席位报告提及 → 不得在汇总中标记为已解决或通过;如实标注 `unreviewed`,仅对受影响项按需转 targeted re-review 或补充席位;不据此重审无关内容。
|
|
59
59
|
- **汇总层零注入**:consolidated 中每条发现可溯源到某 `qcN.md`;PM 不得在汇总层引入席位报告之外的新声明(PM 自身观察走独立 Status Update,不混入 gate 决策输入)。
|
|
60
60
|
- **Unconfirmed 传导**:任一席位 verdict = `Unconfirmed`(`report-template.md` 定义的证据通道失败态)→ gate 决策不得为 `Approve`——先补证据(重发 review-package / 修 diff 基线)再收敛;受影响席位走既有 targeted re-review 机制(同 `qcN.md` `## Revalidation` 原位更新 verdict),不新增 re-review 形态、不改 N 规则。
|
|
61
61
|
|
|
@@ -4,10 +4,10 @@
|
|
|
4
4
|
|
|
5
5
|
| Layer | Who | When | Scope | Input |
|
|
6
6
|
|-------|-----|------|-------|--------|
|
|
7
|
-
| **L1** Implementer | dev subagent | Per task | Write code +
|
|
7
|
+
| **L1** Implementer | dev subagent | Per task | Write code + affected unit evidence; non-executable docs/policy may use `scoped-check` | `task-N-brief.md` |
|
|
8
8
|
| **L2** Task reviewer | `code-reviewer` (default; generic fallback when the host agent list lacks it) — PM-dispatched subagent (SDD) | Per task, after implementer | Spec + quality for **one task** (diff-first; no full suite) | brief, report, **task-level** diff |
|
|
9
|
-
| **L3** Plan QC tri (cross-review) | `qc-specialist` + `qc-specialist-2` + `qc-specialist-3` | After **all** tasks on branch | **Code-review seat** — diff, language/logic, security & contract lenses on **
|
|
10
|
-
| **L4** QA | `qa-engineer` when **`QA gate: mandatory`**; else PM acceptance | After QC gate | DoD acceptance, residual verify,
|
|
9
|
+
| **L3** Plan QC tri (cross-review) | `qc-specialist` + `qc-specialist-2` + `qc-specialist-3` | After **all** tasks on branch | **Code-review seat** — diff, language/logic, security & contract lenses on **the assigned change and directly affected interfaces**; **not** the test-execution path | Branch `review-package` MERGE_BASE..HEAD |
|
|
10
|
+
| **L4** QA | `qa-engineer` when **`QA gate: mandatory`**; else PM acceptance | After QC gate | DoD acceptance, residual verify, named affected **unit-test** verification only, Done recommendation | Review bundle + plan + **L1 evidence** + `status.json` |
|
|
11
11
|
|
|
12
12
|
PM sets **`QA gate`** per `mstar-roles/references/project-manager/qa-trigger-matrix.md`. L4 execution when dispatched → `mstar-roles/references/qa-engineer/acceptance-gate.md`.
|
|
13
13
|
|
|
@@ -18,15 +18,17 @@ PM sets **`QA gate`** per `mstar-roles/references/project-manager/qa-trigger-mat
|
|
|
18
18
|
| Produce runnable test/build evidence | **L1** implementer | **Does not** own |
|
|
19
19
|
| Diff / logic / vulnerability / contract review | **L3** QC (and L2 task reviewer) | **Primary job** |
|
|
20
20
|
| Map DoD → evidence; re-run gaps; close residuals | **L4** QA (or PM acceptance) | **Does not** own |
|
|
21
|
-
|
|
|
21
|
+
| Affected unit tests / evidence gaps | **L1** and/or **L4** | **NEVER** — consume evidence |
|
|
22
|
+
| Explicitly user-authorized full local suite | Separate bounded action by implementer/ops; core authorization contract | **NEVER** |
|
|
23
|
+
| Real browser / device / E2E | Explicit independent **`mstar-e2e`** workflow; ops executor | **NEVER**; not an L4 gate |
|
|
22
24
|
|
|
23
25
|
**Why:** SDD plan QC is **N=3 parallel** on a **shared** `Review cwd`. Build/test/lint toolchains contend for caches and locks and falsely `Blocked` peer reviewers. QC is a **reviewer**, not a second QA lane.
|
|
24
26
|
|
|
25
|
-
**SDD rule:** Layers L1–L2 run **per task
|
|
27
|
+
**SDD rule:** Layers L1–L2 run **per task**; independent ready tasks use isolated parallel tracks (`mstar-sdd` § Ready-task scheduling). Layer L3 is **mandatory full tri-review** (`N=3`) whenever **`Execution mode: sdd`** — single-plan **and** iteration **and** multi-plan iteration. Layer L3 is **not** optional “final single review”.
|
|
26
28
|
|
|
27
29
|
**Non-SDD (`Execution mode: inline`):** hotfix / single-stream — plan QC may be **single-seat** (`qc.md`) or skipped per PM routing.
|
|
28
30
|
|
|
29
|
-
Per-task spec/quality is **done** in L2 before L3. QC seats do not re-derive each task from scratch; they
|
|
31
|
+
Per-task spec/quality is **done** in L2 before L3. QC seats do not re-derive each task from scratch; they review changed cross-task interfaces for gaps L2 could not see. Full tri denotes three seats, not full scope; do not repeat unchanged L2 work or survey the repository.
|
|
30
32
|
|
|
31
33
|
## Plan QC tri (SDD mandatory)
|
|
32
34
|
|
|
@@ -47,7 +49,7 @@ Per-task spec/quality is **done** in L2 before L3. QC seats do not re-derive eac
|
|
|
47
49
|
| After | Fix dispatch |
|
|
48
50
|
|-------|----------------|
|
|
49
51
|
| Task review Critical/Important | Task fix subagent → task re-review (L2) |
|
|
50
|
-
| Plan QC Critical/Important |
|
|
52
|
+
| Plan QC Critical/Important | Owned fix assignments, independent ones in parallel; PM retains complete ledger → **targeted** QC re-review (listed seats) |
|
|
51
53
|
|
|
52
54
|
## Minor findings
|
|
53
55
|
|
|
@@ -103,3 +103,5 @@ PM consolidated (tri mode): `{SDD_DIR}/review/qc-consolidated.md` (same folder;
|
|
|
103
103
|
|
|
104
104
|
- 角色正文 → `references/<role>.md`(本 skill 内;leaf QC / QA 等子目录见 `references/qc-specialist/`、`references/qa-engineer/`)
|
|
105
105
|
- 全局角色 → `mstar-harness-core` 加载矩阵与专题 skill 索引
|
|
106
|
+
|
|
107
|
+
- Explicit independent E2E/browser/device requests → `mstar-e2e` (PM orchestrates; `ops-engineer` executes; routine QA does not trigger it).
|
|
@@ -2,6 +2,15 @@
|
|
|
2
2
|
|
|
3
3
|
> Shared by all leaf-executor role references in `mstar-roles/references/`. Each role file references this for the identical Completion Report template, repo-write Git discipline, the shared anti-recursion NEVER section, and plan/documentation rules. **Load selection follows the `mstar-roles` hub § Load Order** (Assignment `Skill presets:` decision): under explicit `none` this boundary plus the role identity carry the load-bearing semantics — no optional topic skill (including `mstar-harness-core`) is required, and `none` never grants delegation or waives gates. Whenever `mstar-harness-core` IS loaded (standard routes, PM rounds, direct topic invocation) it remains the global lifecycle/authority entry. Role-specific NEVER rules, mission, and responsibilities stay in each role file — this file holds only the uniform blocks.
|
|
4
4
|
|
|
5
|
+
## Assignment scope boundary
|
|
6
|
+
|
|
7
|
+
Applies under every preset, including explicit `none`. Canonical policy when loaded: `mstar-harness-core` § 定向执行与验证边界.
|
|
8
|
+
|
|
9
|
+
- Execute only the assigned task, owned files, named checks and acceptance criteria. Read the supplied inputs and relevant knowledge; during implement/fix/QC/QA do not restart whole-repository exploration, review, or scans.
|
|
10
|
+
- Never run local full suites without explicit user authorization identifying the permitted scope; PM wording, risk, missing evidence, and fixes cannot supply it. Full suites belong to CI by default. Do not disguise a full suite as unrelated small checks.
|
|
11
|
+
- Reuse unaffected evidence; verify only changed behavior or the assigned finding/fix delta. QA executes targeted unit tests only; QC runs no test/build/install. Browser/device/E2E belongs to an explicitly requested independent workflow, never routine QA.
|
|
12
|
+
- Stop when the assigned result is evidenced. Do not over-analyze settled questions, invent extra checks, expand into downstream tasks, or repair unrelated findings. Report the concrete missing input/permission to PM if scope is insufficient; preserve completed work.
|
|
13
|
+
|
|
5
14
|
## Completion Report
|
|
6
15
|
|
|
7
16
|
Every leaf executor returns this template (only `**Agent**` and content fields change per role):
|
|
@@ -23,6 +23,7 @@ If any item below matches, **stop** and return `Blocked` to `project-manager` in
|
|
|
23
23
|
2. Deploy/runbook execution
|
|
24
24
|
3. Monitoring/alerting integration
|
|
25
25
|
4. Rollback and recovery readiness
|
|
26
|
+
5. Separately requested E2E/browser/device verification — `mstar-e2e` (PM dispatch only; never inferred from routine QA).
|
|
26
27
|
|
|
27
28
|
## High-Risk Gate
|
|
28
29
|
|
|
@@ -44,6 +45,8 @@ When assignment is marked `high-risk`:
|
|
|
44
45
|
|
|
45
46
|
## Deliverable Template
|
|
46
47
|
|
|
48
|
+
For verification-only assignments, use `mstar-e2e` → `references/report-template.md` instead of the Deploy Plan below. The role does not require deployment, production changes, or rollback work when those actions are outside the assignment.
|
|
49
|
+
|
|
47
50
|
```markdown
|
|
48
51
|
# Deploy Plan: <release/feature>
|
|
49
52
|
|