btspoony/morning-star-harness
Morning Star — Agent Plugin for harness engineering workflows: a TS Harness Workflow Engine (@mstar-harness/engine) that enforces deterministic workflow gates, plus mstar-* judgment skills for multi-agent code delivery across OpenCode, Cursor, Codex, Kimi Code, ZCode, and omp.
Changelog
Chinese summary: CHANGELOG_CN.md.
All notable changes to this repository are documented here. Every published harness surface ships the same version.
Package-specific histories: packages/cli/CHANGELOG.md, packages/opencode/CHANGELOG.md, packages/engine/CHANGELOG.md.
[Unreleased]
[3.11.2] - 2026-09-19
Harness
- Moved the coordinator model-handoff arm to the direction lock: a new iteration now arms
@slowonce the direction is locked and before the Phase 1 draft is written, instead of after workflow registration — so the arm always takes the unregistered reservation path, which is the expected state for a new iteration (no register row, no snapshot, no compass) and never a reason to defer the call. No arm/fire logic, refusal code, authority derivation or tool schema changed. - Renamed the shared new-iteration anchor
iteration-entry→direction-lockand moved its carrier to the §1.2 tail: the anchor now fires once the direction is locked and before the compass/plans draft is written, and the three Phase 1 entry routes bind it at that boundary — the interactive route in its own step between the lock and the draft, the autonomous and host-Plan routes through their pre-commit checklists.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.11.2.
[3.11.1] - 2026-09-18
Harness
- Host session identity now reaches the engine on OMP: the
@mstar-harness/ompmodel-handoff extension revises everybashtool call of its session to carry the host session id inMSTAR_HOST_SESSION_ID— overwriting any caller-supplied value under that name,bashonly, nothing injected for a host session with no id, and no engine or harness write, notice or state — and a freshmstar plan bindresolves its identity--session-id→MSTAR_HOST_SESSION_ID→ the engine-generated id — the injected variable is the fallback (trimmed; empty or whitespace-only counts as absent) — so the engine session id and the host session id are one identifier for the readiness and start-authority comparisons. The generated default and every comparison are unchanged: an absent or foreign association still refuses (the readinessbinding-invalidcode, the existing start-authority codes), and--resumenever re-identifies — it refuses--session-idas a usage error. bindPlanSessionadopts a caller-suppliedsessionIdon both fresh-bind variants (coordinator and plan scope), keepingrandomUUID()when none is supplied. The id names the session envelope's file, role-scoped at{WORKFLOW_DIR}/<workflow-id>/sessions/<role>-<session-id>.json(<role>∈coordinator/plan-pm) — so one host session may hold the coordinator envelope and a plan-pm envelope of one workflow under the same shared id — and is therefore validated as a single safe path component (non-empty, no separator, not./.., at most 128 characters) and refused with the new, additivecoordination.invalid-session-idbefore any write; a re-used id is still refused by the exclusive envelope creation with the existingcoordination.session-mismatch.- Updated
skills/mstar-host/references/omp.mdwith the anchor-side session-identity association contract.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.11.1.
[3.11.0] - 2026-09-18
Harness
- Full codebase audit reports now close with a Coverage table: one row per material review question (surface × boundary/invariant × subsystem × category), with exactly five final statuses —
coveredrequires a reviewedfile:lineplus the invariant checked and the observed result; every non-covered row requires a concrete reason, and blocked-before-read or prior-evidence-only rows are represented honestly instead of forced into false evidence. Statuses arecovered(examined, not clean),blocked,deferred,out_of_scope, andnot_applicable; the closing summary names gaps already in the table with no numeric tallies or aggregate path ledgers. Coverage is reviewer-checked markdown: themstar audit scaffoldcommand rebuilds the index without preserving or validating it, so prior coverage must be read and re-reconciled after each scaffold, and no engine shape validation is claimed. - Audit scaffold findings files now preserve what the auditor supplied: the CLI parser maps
description→impact, keeps explicitconfidenceandevidence(previously discarded), and accepts optionalfingerprint,trace, andseveritymetadata plus structured{file, line?, description}evidence locations, with documented absent-field defaults (MEDconfidence,[]evidence). A new deterministic engine gatevalidateAuditFindingGates(fingerprint grammar/uniqueness/ordering,severity.overall ≤ severity.impact, trace topology, safe typed paths, visible-text predicates, credential rejection on opaque fields) runs insidescaffoldAuditPlanbefore any file is written; invalid findings exit 2 with field-path diagnostics and no partial output. Legacy string-evidence input remains supported. The durable field contract is published inskills/mstar-audit/references/finding-format.md(§ Machine-readable findings file), the scaffold engine-check callout inreferences/codebase-audit.mdwas updated for the real gates and their limits, and the five-state attack wording inmstar-auditSKILL.md was tightened to its four actual dispositions. - Contracted the Phase 1 PM draft (
mstar-iteration§1.3): it is the context carrier a dispatched role reads from disk, never from the PM's conversation, so it must now carry the locked direction, the settled decisions, the open questions with their owners, the non-goal rationale, the constraint sources, the acceptance seed and the branch policy — while option analysis, module/interface detail, per-task decomposition and plan-level technical design may legitimately stay coarse. - Sanctioned exactly one unfinished form during Prepare: the owned
TODO(owner: <role-id>)marker, defined once in §1.3 with its owner vocabulary limited to the Phase 1 chain —product-manager/architect/writing-specialist/PM. Only a marker pointing at an owner may stand in for unfinished detail, and it must be cleared — or explicitly re-owned toPMand raised to the user — before the compass reachesstatus: locked. An unownedTBD/.../etc.remains forbidden at every stage. - Added two required compass sections,
## Decisions(decision + rationale + source) and## Open Questions(each item with an owner and a blocking flag;Nonewhen empty), immediately after## Scopein both the template and the §1.3 inline scaffold, with their## Fields guiderows. - Gave every Phase 1 editing role a marker-clearing duty (§1.6 and the artifact-boundaries table): a role discharges the markers naming it in its own edit pass, re-owns to
PMwhatever it cannot close, and reports the cleared/re-owned counts;writing-specialistadditionally runs the closing no-marker check that precedes the compass lock. - Stated the Prepare-writing bar in
mstar-artifacts/references/plan-quality-bar.mdas the mirror image of "write for a zero-context executor" — the draft and the compass are the context carrier, and no role-owned marker survives the compass lock.mstar-phase-gatesnow names the gate timing: the no-placeholder judgment runs atplan(locked), while the marker clearing deadline is the compassstatus: locked; the ban itself is unchanged. - Required a Phase 1 review-and-edit Assignment's
Inputsto carry the draft path, the direction decisions (or a pointer to compass## Decisions), the open questions with their owners, the non-goal rationale, and the list of markers the role owns — and added "dispatch an editing role without decisions / open questions" to the anti-pattern list, since such a role can only re-derive context it cannot see. - Removed the Assignment
Model tierfield. It was unenforceable — a skill document cannot observe which model a host actually runs — and nothing machine-checked it: neither the engine nor the CLI required it, so removing it needed no runtime change. - Deleted the field's two host-mapping tables and every producer/consumer reference with them: the
mstar-sddtier section (including its "always name model on dispatch" rule), theModel:lines in the three SDD dispatch-prompt templates and the sticky-session header line, thefile-handoffsrequired-field bullet, the Phase 2 per-task dispatch step and the Assignment-field clause that forbade omitting it, the Assignment template field and its SDD NEVER mention, the routing-eval expectation string, and the tier section inmstar-host/references/cursor.md. The never-omit clauses that named the field now cover onlyExecution mode/SDD dir. - Host-native model selection is left to the host and the session, where it already lived: Cursor's Task
modelargument is documented as an optional host slug for the session's own model policy that prescribes no mstar tier, and the dshagent()and omp model-handoff capabilities keep their existing descriptions. - The security-review deep-dive (
skills/mstar-audit/references/security-review.md) expands its coverage and false-positive discipline: §2 gains explicit severity anchors (informational → critical) plus anti-strengthening rules; §8 hunting angles gain concreteSignal:clauses; the §9a–§9h category folds gain item-level exclusions and new checks (OAuth/SAML binding, WebAuthn, supply-chain/CI trust, infra/IAM, data isolation, AI/LLM trust); three new folds — §9i desktop/mobile/local IPC, §9j memory safety & binary (source review only), §9k availability & resource exhaustion; new §12 "Static evidence required" rule; new §13 "Per-class exclusion rules" (self-injection, existing-permission-check, crypto-error/write-only-validation) with a pointer line routing every other false-positive signal class to its owning section; and new §14 protocol/RPC/messaging invariants.
Changed
- Documented the producer of the prepared Assignment in the OMP host reference: the
reserve-launchadmission clause and the optional transport section now namemstar plan prepareas the coordinator step that writescoordination.preparedand its pinnedcoordination.prepared.assignment_path, define the transport placeholder as that absolute path, add an ordered summary of the extra-primary route (registeredTodorow → existing feature worktree → coordinator bound → prepare →reserve-launch→ the journaled record-before-side-effect transitions and pane/start/submission sequence), and state the admission windows — row admission closes with Phase 1 (earlier once any row starts preparation or execution), while an already-registered eligible row may still be prepared during Phase 2. - Added the host-agnostic precondition to the scoped-plan PM transport note: a conditional extra-primary launch is available only for a plan row the coordinator has already registered and prepared, and whose feature worktree exists — a row that does not yet exist cannot be launched, because row admission closes with Phase 1.
- Added the six-item scoped-route dispatch checklist to the OMP host reference's optional transport section: a fresh target session, a prepared (not merely registered) row, handover content frozen before preparation with only the Assignment hash re-checked at bind (
coordination.assignment-stale), a single initial submission, readback-confirmed execution with single-key recovery only, and post-bind steering — bounding exactly once to the initial command. The trailing-Enter behavior stays a field observation of a transport CLI this repository does not own. - Named the supported cross-session dispatch path in the shared dispatch gates: concurrency across separate primary sessions or terminals has exactly one supported form — the scoped route with a prepared Assignment as a fresh session's first instruction; a coordinator-authored leaf Assignment sent through a terminal prompt is unsupported because it bypasses scoped boot, lease ownership and handoff.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.11.0.
[3.10.3] - 2026-09-17
Harness
- Added the
mstar-use-cliskill as the agent-facing CLI SSOT: a task→command-family index, the precondition ladder (harness-root resolution, control root vs feature worktree, neutral cwd, session envelope, revision and byte tokens), the two canonical sequences (versioned read-modify-write, plan completion), and how to read exit0/1/2— including the argument parser's exit1for a missing required argument. Flags are never restated: each command's own--helpowns them. - Retired
docs/cli.mdby splitting it by audience instead of redirecting: its two install-only sections (Codex agent files, install path layout) moved intoINSTALL.md, where its own install cross-references pluspackages/cli/AGENTS.mdand.cursor/LOCAL-VALIDATION.mdnow resolve to in-file anchors. The CLI-contract pointers —README/README_CN,docs/commands.md, and the runtime skill references — now point at themstar-use-cliskill. The old file is deleted outright: no redirect page and no compatibility layer. - Extended the drift guard's CLI inventory past the CLI entry module into the plan / workflow / sdd registration modules — 16 command paths that were previously invisible, including 13
planverbs — so citing those verbs is now checked instead of silently passing. The same check (declared bin prefix plus a real command path) now also scans the new skill's own markdown, not only the Engine-check callouts. - Registered the skill in the runtime load surface: implementers, reviewers and QA, operations, architecture, harness-text work, and PM load
mstar-use-cliin their preset menus / load table when the round runs or interprets CLI commands. - Granted the QC seats and
code-reviewerread-only CLI validators in their bash allowlist (qc validate-report,lint,dispatch validate,worktree qc-alignment,status validate,lease verify), removing the contradiction where a skill required a machine-checked gate the seat had no permission to run. - Updated the host support tiers in the README pair:
dsh = omp ≥ ZCode = OpenCode = Cursor > Kimi > Codex. ZCode now shares a tier with OpenCode and Cursor: its plugin hooks enforce the default-branch commit guard, the bare-force-push guard and the engine-backed coordination-write gate at tool-call time — runtime integration in the same class as OpenCode's. Worktree isolation stays skill guidance rather than a hook-enforced check.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.10.3.
[3.10.2] - 2026-09-17
Harness
- The engine now refuses delivery-tail evidence (
compound, PR identity,merge) at therecordWorkflowDeliverywrite seam while any plan row is notDone— enforcing the order the lifecycle contract already declared. The gate is write-time only: idempotent re-records skip it and existing snapshots that already carry evidence are unchanged. - The plan template, PM required reading, and PM self-review now carry the scoped engine lifecycle sequence and the evidence order (
compound/ PR /mergerecorded only after the row isDone). - Standalone
developmentplans now declare the read-only phase-6 gate output as a merge-ready precondition; iteration workflows keep their Phase 4/5 exit checklist unchanged. - Residual R2 (standalone plans cannot reach
Donewithout integration anchors) remains open — the template states the honest stop at a submitted/accepted handoff instead of fabricating a terminal state.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.10.2.
[3.10.1] - 2026-09-17
Harness
- Added a host-agnostic host hook anchor contract to the host-adapter skill —
iteration-entry,phase-1-lock,phase-2-entry,rescheduling-checkpoint— each carried by a marker in the shared lifecycle references and resolved by the active host reference. - The OMP host reference now declares, per anchor, the coordinator calls that were previously documented but never wired, so a coordinator session actually executes them.
- Removed shared-corpus host-name leaks from the four densest files; the relocated per-host role-binding field and engine-scope detail now lives in the host references.
- The remaining corpus cleanup is tracked as a roadmap goal (
host-seam-corpus-cleanup).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.10.1.
[3.10.0] - 2026-09-16
Harness
- Landed four register-driven docs fixes: restored the
zero-residualscope qualifier in the Phase-6 blocking sentence, fixed the Session-todos pointer wording, switched the L4 QA residual-verify input citation to the project register, and aligned the plan-templateMain worktree branchheader with the parser-documented form. - Flipped the formal-iteration Phase 2 findings-cleanup default from zero-residual to allow-residual with hard register-and-disclose duties: every open finding carries id + severity + tracking location across QC decisions, Completion/Status reports and leaf/SDD report formats; close-time surfaces (main-plan Review Gate Summary, compass Quality Gate Summary, PR body) add the blocker-defer flag. Explicit
zero-residualopt-in, unresolved-critical blocking and Phase-6 no-manufactured-closure rules are unchanged. - Added the Task budget (implement / ops rounds) field to the canonical Assignment contract: SDD fresh/continuation prompts require the header before task-body markers and repeat the overrun escalation with the mandatory no-shortened-verification rule from
plan-quality-bar.mditem 7; a previous task's budget is not inherited. - Budget overrun on
NEEDS_CONTEXT/BLOCKEDnow routes to PM split/re-dispatch under plan-quality-bar item 7 inmstar-sdd;mstar-review-qcandmstar-dispatch-gatesengine-check notes point to the same presence-only requirement. - Added the implementer task-capacity criterion (
Task shape / session fit) as plan-quality-bar item 7: one implementer round must close a task's Files and gates, with a named split point when it cannot; budget pressure never shortens assigned scoped verification. - Wired the criterion into
mstar-phase-gates(tasks bullet, self-review question, quick-check item) and added per-task Effort (agent-oriented) / Split point slots to the main plan template;effort-estimation.mdnow points task-level sizing at item 7. - Documented the phase-transition
todorefresh discipline as a host-agnostic rule: refresh session todos at every phase/gate transition before the next action or dispatch, close only completed entries, preserve pending gates and seed the next phase — todos stay a projection of the snapshot/plan state, never a second store. - Added a named
Rescheduling checkpointto the authoritative Phase 2 procedure (mstar-iteration/references/phase-2-worktree-lease.md§2.4): five frozen reasons (before-wait,result-settled,dependency-changed,ownership-changed,capacity-changed) and a six-step decision procedure that starts every authorized independent ready task before waiting for an unrelated running child, keeps true dependencies blocked until reviewed commits are in the dependent's assigned base, and allows one reasoned native wait without polling or repeated reminders. Short pointers added inmstar-sdd§ Ready-task scheduling and the PM role; no new scheduler, ready-state register or engine schema. - Added the six
phase2-*routing-eval cases (version 30, 62 cases) with their regression signals (each pointing at the §2.4 home), and documented the before/after behavioural evidence for them plus the affectedplan-scope-duplicate/plan-scope-last-plan/plan-scope-leafcases. That evidence is single-sample with no per-call model identity attested, so it establishes neither model compliance nor a behavioural gain. - Wired the per-plan delivery tail into the normal route (frozen contract
mstar-artifacts/references/plan-workflow-lifecycle-contract.md): register at commitment → pre-lock knowledge-recall receipt → execute/acceptance → compound disposition (created/updated/reasonedskipped) → development PR submission → merge-ready milestone → verified merge → terminal close/unregister. Standalone development plans now reach the same delivery lifecycle; iteration plan rows and plan-scoped session authority are unchanged. - This repository no longer tracks its own harness specs.
.mstar/specs/is local-only here again (.gitignoreback to a single.mstar/rule), so an iteration sweep can no longer commit local plan artifacts into the history of the harness source repository. Downstream repositories are unaffected: themstar harness scaffoldsnippet, the coordination write gate, and the resolver chain still treat{HARNESS_DIR}/specs/as a tracked result. - The plan-workflow lifecycle contract now lives in the skill corpus. Its semantics — delivery-kind declaration, lifecycle stages, evidence contracts and the engine seam inventory — are the skill reference
mstar-artifacts/references/plan-workflow-lifecycle-contract.md. Engine module comments, CLI help text, tests and the runtime skills that cite it point at that path instead of a repository-local harness spec. - Two process specs stayed in the project corpus.
omp-phase2-instances.mdandphase2-proactive-scheduling.mdare the process sources behind runtime guidance that already exists (mstar-host/references/omp.md§ Phase-2 plan instances;mstar-iteration/references/phase-2-worktree-lease.md§2.4), so they were kept as project references rather than duplicated into the skill corpus — their citations now point at those runtime homes.
Changed
- Added the opt-in coordinator model handoff to
@mstar-harness/omp: a new extension entry (extensions/model-handoff.js, published through manifestomp.extensions, engine inlined, its single host import resolved by the running host) plus native plugin settingsmodelHandoff(off by default) andhandoffTarget(@default|@smol). A new Morning Star iteration start in the bound coordinator session arms@slowbefore substantive Prepare, and a complete Phase 1 — specialist returns, locked Prepare, distinct matching integration checkout, verified required push — switches that one session to the saved target once. Ordinary chat, leaf and plan-scoped sessions stay inert; no role mapping, goal objective or workflow state is written, and a manual model change while the switch waits cancels it for that session only. - Pinned the package's OMP host contract: optional peer and development dependency
@oh-my-pi/pi-coding-agent@18.2.1, Bun floor>=1.3.14, and abundle-smokecase that unpacks the published tarball and drives it through the host's own plugin discovery, extension loader and custom-tool loader in a disposable host root with no engine package installed. It replaces the previous source-text bundle assertions (emitted symbol, no bare engine import) with that runtime behaviour. - Documented the native
/settings→ Plugins path, persistence and its user-scope limitation (a project-only install has no native settings row), supported entries and modes, coordinator binding, full-Phase-1 readiness, cancellation, replay and failure semantics in the OMP host reference and the package README. - Added opt-in Phase-2 plan instances to
@mstar-harness/omp: a new extension entry (extensions/phase2-orchestration.js, published through manifestomp.extensions, engine inlined, its one host import resolved by the running host) plus native plugin settingsphase2PlanInstances(off by default; gates extra primary launches only) and user-configurablemaxPlanInstances(positive safe integer, default 2, minimum 1, no ceiling of 2; a malformed present value fails visibly and authorizes no launch). A Phase-2-only coordinator session gets at most one bounded advisory per changed opportunity observation — the observation key is recorded before the message, identical unchanged state never re-fires, there is no timer or polling, and native completion delivery stays authoritative. - Added the
mstar_phase2bookkeeping tool with its local transport-intent journal (<workflow dir>/omp-launches.json, version 1):bind(the coordinator's first Phase-2 host action),checkpoint(acknowledges the shared rescheduling checkpoint against the sample taken then, with the frozen five reasons), andreserve-launch/record-launch— strictreserved → starting → created → submitting → submittedtransitions, each persisted before its pane / OMP-start / prompt side effect, with occupancy counted once per plan id as owned pending intents ∪ active plan primaries against the latest cap, andrefused/uncertainnever blindly retried. Compiled code admits and records only: it never spawns, merges, rewrites workflow state or releases leases. - Documented the native
/settings→ Plugins path (with its user-scope limitation — a project-only install has no native settings row), the launch-only opt-in, capacity semantics, the explicit bind/checkpoint/intent call sequence and the optional skill-driven Herdr/tmux transport in the OMP host reference, the package README and the scoped-plan PM transport note: prerequisite gating (skill actually present and read + CLI + matching managed environment; tmux stays unavailable while no tmux skill exists), non-focus pane creation at the prepared worktree, verbatim returned opaque targets, one absolute/iteration-drive --assignmentsubmission with no coordinator credentials, and terminal handling ofagent_not_ready, a timeout or a stalled submission. Transport evidence is explicitly marked simulated, not native E2E.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.10.0.
[3.9.4] - 2026-09-15
Harness
- The protected
mstar persistkinds (status,snapshot,residuals) now have exactly one writer:--expect-version <absent|sha256:<hex>>routes the put through the engine's lockedreplaceCoordinatedArtifact(same-host CAS), a coordinatedsnapshotreplacement additionally requires--session <coordinator envelope>, an injected--storemodule is refused because it cannot honour that contract, and a bare (un-versioned)putordeleteof a protected kind is refused before anything is written. A missing / invalid / mixed flag fails closed as a usage error (exit2) before anything is read, and a version or session mismatch is an engine refusal (exit1) with the bytes intact. mstar persist get <protected> --versionedprints{payload,version}: thesha256:byte version of the exact bytes read, or theabsenttoken with anullpayload for a missing document, so a read-modify-write isget --versioned→put --expect-versionand the reported token is passed back as--expect-version.- Added the
mstar planscoped coordination transport:bind(coordinator / workflow+plan / Assignment /--resume),show,prepare,progress,residual-add,residual-close,handoff,accept,return,integration-start,integration-accept,completeandreconcile, with JSON on stdout, diagnostics on stderr and the0ok /1engine refusal /2usage exit contract. - Scoped verbs pin the active
FsStoreto the engine's resolved root before every call, so a process inside a linked feature checkout resolves the main worktree's harness instead of its own.mstar. mstar harness scaffoldawaits the now-async, store-routed engine bootstrap and pins the store root it resolves.- Coordinator transition verbs now carry the
--handoffid into the engine, which re-checks it against the row inside its own lock: a handoff replaced between the CLI's read and the mutation can no longer be transitioned by a command that named the old one. The CLI pre-check stays as an early, friendlier refusal. - Git reads refuse an unanswerable environment as
coordination.git-unavailable(with the path, command and cause) instead of reporting integration divergence, and are bounded by a 10s timeout so a blockedgitcan no longer pin the row lock until every other writer times out. - The integration proof reads the first-parent path in one
git rev-listcall instead of one subprocess per commit, keeping the lock hold constant on a busy integration branch. - The findings-cleanup gate is evaluated while holding the register write lock (snapshot → register order), and the workflow merge lease is compared by plan and source branch, so a foreign lease is never reused or released.
- The
mstar planrow verbs now act on the row's live handoff:--handoff <id>is validated against the handoff the engine reports (a different live id is refused ascoordination.handoff-mismatch, exit1, nothing written) andplan show --jsonreportshandoff_idalongside the row'sstate/attempt, so a recovery step can read the id after a crashed caller lost it. - Added a plan-scoped primary entry to
/iteration-drive:--assignment <absolute-md-path>,--workflow <id> --plan <id>and the explicit--resume <absolute-session-json-path>form drive one prepared plan in an independent primary session. That session stops at a durable handoff —Doneand both lease releases stay with the iteration coordinator after it verifies the merge. A second fresh entry for the same plan fails as a duplicate holder; malformed nonempty arguments fail closed, and no arguments keep the whole-iteration route. - The scoped session owns one plan row: it reads with
showand writes onlyprogress,residual-add,residual-closeandhandoff, leaving sibling rows, lifecycle anchors, the root register, the shared indexes, the iteration PR and Phase 3–6 to the coordinator. User guide:docs/commands.md— the unified command reference this change ships, with the scoped session as its/iteration-drivesection; CLI flags and exit codes:docs/cli.md. - The scoped terminal is transport, not a dependency: any terminal works, and Herdr / tmux are optional — ownership never reads pane state, TTL or terminal labels.
- Added seven
plan-scope-*cases to the PM routing-eval corpus covering both addressing forms, duplicate entry, unknown arguments, last-plan stop,Done-before-integration refusal, the no-argument route and the leaf boundary. Themstar plantransport itself is recorded in.changes/unreleased/plan-coordination.md. - Because
/iteration-drivenow advertises its argument shapes in the command frontmatter, the dsh client-claim table that pins everyinput:hint (packages/dsh/tests/commands.spec.ts) moved to the new hint, so the composer ghost text offers the scoped forms instead of executing the bare command. mstar status workflow-closecloses a workflow through the engine's locked snapshot writer and takes--session <absolute coordinator envelope>: a coordinated workflow now refuses to close from a plan session (snapshot <path> is coordinated — close requires --session <coordinator envelope>, exit1, nothing written) before it judges the plan rows, so an unfinished-row refusal can no longer be mistaken for a session problem.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.9.4.
[3.9.3] - 2026-09-15
Harness
- Added a provenance guard to drift-lint: the tracked repo text face (
.mdfull text,.tscomment lines — leading comment lines plus trailing//comments, detected after masking string and template literals via the shared comment mask and with no whitespace requirement, with://URL sequences excluded) is scanned with the engine provenance finder, and dated plan/iteration ids or dated local-harness paths on it now fail CI with afile:linerow. The walk intersects withgit ls-files, so untracked local files never fail the guard (.mstar/sdd/…deeplinks remain under the skill-lint ephemeral check, which covers the skills corpus). Assembled release surfaces (.changes/archive/,CHANGELOG*.md) are exempt as historical record. - Scoped the E2E evidence boundary to development plans:
mstar-harness-core§ 定向执行与验证边界,mstar-phase-gates§ 最小证据要求,mstar-artifactsplan-quality-bar +plan.main.md, andmstar-e2enow agree that real-browser / device / installed-deployment E2E is never a development plan's task nor any gate's evidence obligation — it lives only in a separately requestedmstar-e2eworkflow, whose named scenario rows are that workflow's own plan rows, while each layer proves itself through its own unit/integration tests.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.9.3.
[3.9.2] - 2026-09-14
Harness
- Added a round-bounding dispatch gate: when
Execute asis a review seat (qc-specialist,qc-specialist-2,qc-specialist-3,code-reviewer,qa-engineer) orTask categoryisaudit, the Assignment must declare bothBudget (review / QC seats)andReturn shape (review / QC seats).mstar dispatch validatenow fails such an Assignment when either field is absent, empty, orN/A, naming the missing field; implement / ops / docs rounds are unaffected. Only field presence is checked — the field values are prose and are never parsed. - Added
validateQcReport(@mstar-harness/engine) andmstar qc validate-report <report.md>for plan-QC seat reports. The gate checks that the report opens with---frontmatter carrying the requiredqcfields, that the frontmatterverdictis an enum member and agrees with the body verdict line, that each## Summarytally matches the number of entries in its## Findingssection, that the verdict follows from those counts (noApprovewith an open Critical or Warning; anyUnconfirmedcount requires theUnconfirmedverdict), and that a presentTruncated coverage:line is never reported asUnconfirmed— a cap stop is a scope cut, not a failed evidence channel. Undecidable cases stay silent rather than guessing. - The report gate reads the last verdict line, and
## Summaryis the report's single current count — an in-place revalidation refreshes## Summaryand## Findingsrather than appending a second tally, so a revalidated report is judged on its current state and every count rule shares one source. - Both gates read only the Assignment header region / the report's frontmatter: the dispatch gate stops at the first
## Taskheading,---rule or single-#heading, so field lines quoted in the task body neither satisfy it nor disable it (a body**Execute as**: scoutno longer turns the writable gate off); the report gate reportsqcreview.report.unclosed-frontmatter(high) when the opening---is never closed, since the body would otherwise be read as frontmatter and the field and body rules could not be decided. - Wired the checks into the runtime skills: one Engine-check callout in
mstar-review-qc§ 席位预算与截断, pointers fromqc-specialist-shared.mdand the QC report template, and the round-bounding bullet inmstar-harness-core§ 定向执行与验证边界 now names both required Assignment fields. - No audit-chain behaviour, verdict vocabulary, severity semantics, register schema, or existing report contract was changed.
- Added a review-seat termination contract in
mstar-harness-core§ 定向执行与验证边界: read-only review / QC / L2 seats are bounded by a default seat budget, stop there instead of expanding until a human steers, and declareTruncated coverage:— which stays distinct fromUnconfirmed. - Extended the canonical Assignment template with
Budget/Return shape/Severity bar/Input provenancefor review / QC rounds, plus a quantitative-stop dispatch invariant, an unbounded-negative-acceptance anti-pattern, and two PM self-check rules for artifact claims andpath:linecitations. - Threaded the rule through the seat side (
qc-specialist-shared,reviewer-workflow,report-template,mstar-sddtask reviewer) and PM orchestration (mstar-review-qc): a truncated seat stops and declares its coverage, and a gate decision on uncovered scope is not an approval. Tightened the residual severity bar inmstar-artifacts:criticalvshighnow turns on whether the unsafe outcome is reachable on this merge, independently of the QC report section the finding was filed under, so an unsafe reachable finding cannot rideApprove with residuals; grading is by consequence, not uncertainty, and a documentation defect grades by its own consequence when it would drive an unsafe outcome — removing the "when unsure, usehigh" default that turned non-blocking documentation findings into blocking ones. - Unified the harness's blocking judgement behind one reachability axis: the cross-chain vocabulary table (register
severity/ audit Merge class / plan-QC report section / L2 task review) now lives in the register SSOT —mstar-artifactsreferences/status-and-residuals.md§5 Cross-chain vocabulary. mstar-auditreferences/pr-review.md§ Merge class now qualifiesmust-fixas the same class as registercritical(unsafe and reachable in the reviewed change) and placesshould-fixon the same axis (unreachable-unsafe / significant tech debt / substantive non-blocking), with a pointer to that table instead of a restated definition.- Gave
Critical/Important/Minortheir missing definition atmstar-rolesreferences/code-reviewer.md§ Issue severity (Mode A) — thresholds keyed to the axis,Critical/Importantas per-task fix-loop drivers,Minorhanded to## Minor (for plan QC)— and pointed the L2 dispatch prompt (mstar-sddreferences/task-reviewer-prompt.md) at it. Mode C (PR review) stays the only Merge-class consumer; Mode B (audit) keeps its own finding format (Impact/Effort/Risk/Confidence, plans ranked byPriority). - No enum, verdict rule, tally/score rule, tier or budget mechanic, or routing behaviour changed — labels remain projections of the one judgement.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.9.2.
[3.9.1] - 2026-09-14
Fixed
mstar worktree cleanupno longer aborts on an unrelated workflow's broken snapshot, and no longer drops that snapshot's safeguards. A sibling whose JSON parses but fails validation enters the safety set in degraded form — only protective declarations survive (branch base/integration/target, lifecycle worktree path, merge/execution leases, row ownership metadata) with lifecycle and row states forced non-terminal, so it can only ADD keep/refuse verdicts. A sibling that cannot be parsed at all leaves the safety set incomplete, so every removal is withheld ascleanup.refuse.unreadable-snapshot(the plan still prints whole) unless the operator asserts--ignore-unreadable-snapshots. The selected snapshot stays fail-loud (exit 1), and no broken snapshot is ever repaired, rewritten or removed. Contract documented inmstar-branch-worktree「Worktree / branch cleanup」.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.9.1.
[3.9.0] - 2026-09-13
Testing
- Generated the synthetic audit password before interpolating the test document, preserving random secret-detection coverage while preventing a source scanner from mistaking the nested expression for a hardcoded credential.
- Isolated the evidence output-cap test in a captured CLI subprocess, verifying complete forwarding and capped log storage without flooding the test runner's live output.
- Updated exact drift-regression counts to include the validated cleanup and post-merge close gate callouts: 48 Engine-check callouts and 46 CLI citations.
Fixed
- Cleanup now re-probes local branches released by deferred integration worktree removal, deleting merged branches in one apply while preserving refusal guards and evidence-base deletion ordering.
- Updated dsh headless guidance to retain restricted permissions for unattended work, verify effective session permissions, and move operations requiring approval to the web profile instead of removing sandbox restrictions.
- Escaped remaining Unicode literals in worktree validation, SDD discovery and evidence diagnostics without changing runtime text or matching behavior, restoring the ASCII source gate.
- Escaped em dashes in worktree check and cleanup CLI literals to satisfy ASCII source checks while preserving runtime messages.
- Regenerated the bundled write-gate hook from the current engine and canonical hook source to restore bundle freshness.
Harness
- Install Codex custom agent TOMLs as regular files so discovered roles can load. Re-running init replaces expected legacy links and backs up differing regular files before refresh; doctor detects links and source drift. Update installation and dispatch guidance to require successful named-role invocation.
- Added the Phase 6 post-merge close engine gate (
evaluatePostMergeClose): a pure, additive local-state check over the terminal snapshot shape, leftover leases and root-status unregister, with stablePHASE6_*codes;mstar iteration gate --phase 6 --workflow <id>evaluates it without--compass. - The Phase 6 gate now validates the root
status.jsonwith the full v2 root validator (validateStatusV2, structure-only): a malformed registry (non-v2 version, missingupdated_at, malformedworkflows[]entries) fails closed asPHASE6_INVALID_ROOTinstead of false-PASSing when the workflow id is absent;/iteration-startand the README commands table now state the auto-continue completion at Phase 6 post-merge close (same Done definition as/iteration-drive). - Build the real DSH plugin entry with frozen dependencies before security scanning, and preserve the scanner's complete JSON findings with an untruncated job summary.
- Streamlined repository maintenance instructions: removed duplicated runtime loading rules and historical release details, updated package routing, and aligned authoring guidance and scoped verification with current harness contracts.
- Removed the mandatory full-diff approval gate for repository maintenance; agents can continue already-authorized work without separate approval for each complete diff.
- Added the guarded
mstar worktree cleanupverb with the pureplanWorktreeCleanupengine planner: dry-run by default printsverdict | kind | ref | reasonper worktree/branch candidate;--applyremoves eligible worktrees (ordinarygit worktree remove, never force), re-probes/re-plans, then deletes newly unchecked-out branches (git branch -d, never-D) and runs expected-OID--force-with-leaseremote compare-and-delete. Active leases, branches checked out anywhere and foreign ownership refuse; protected refs are never removed (default andbranch.baserefs are kept, non-terminal owners refuse); merged evidence is a hard precondition (squash-only residue is retained and reported, never force-deleted). - Wired the two cleanup timing lanes into the skill corpus: a new
mstar-branch-worktree「Worktree / branch cleanup」 contract home (ownership from snapshot row metadata/retained track Assignments or verified--worktreeassertions — never naming inference), a same-round post-merge call inmstar-iterationPhase 2 (a Done plan is eligible while its parent iteration still runs), and the Phase 6 §6.4 call after terminal close + PR merged. - Worktree dirtiness now counts ignored files: an ignored-content worktree (e.g. a local-only
.env) is refused (cleanup.refuse.dirty-worktree) instead of being removed. --applydefers the branch-deletion cwd host (typically the terminal integration worktree) to a last removal pass: other eligible worktrees are removed first, thengit branch -druns from the evidence-base checkout, and the deferred integration worktrees are removed last — plan branches merged only into the integration branch (squash-merge era) now delete instead of refusing on the main worktree.- Unify active lifecycle branch checks across hosts, retain parallel track ownership, bound SDD Git probes, and preserve integration-cwd workflow selection.
- Keep the dedicated integration checkout under feature-worktree waivers, record retained parallel-track branches, and centralize L1 refusal semantics.
- Renamed the workflow-snapshot integration field
control_worktree_pathtointegration_worktree_path: writers emit only the canonical key, the canonical reader accepts the v1 alias with a medium migration advisory (normalized in memory, never rewritten in place), strict validation refuses documents carrying both keys, andmstar migratelifts the rename. mstar worktree checknow validates main-worktree residency — the process SSOT (status.json/workflows/) resolves from the verified main worktree root and is never recorded in the snapshot.- Renamed the
worktree checkflag--controlto--integration;--controlremains as a deprecated alias for one release (stderr migration notice). - Cut the dsh / omp / opencode host surfaces (gates, tools, hooks) over to the canonical write model.
- Rewrote the runtime skill corpus to the three-domain worktree write model (control / feature / integration residency) and refreshed all bundled mirrors.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.9.0.
[3.8.3] - 2026-09-12
Harness
- Scope local verification and review to changed behavior, parallelize independent work, and keep routine QA on targeted unit evidence; full local suites require explicit user authorization.
- Accept explicit
scoped-checkevidence for documentation and policy changes without invented test files, while preserving executable-change test evidence. - Add the independent
mstar-e2eworkflow and/amazing-e2e-checkentry, including Codex project command installation, for explicitly requested browser, device, and installed-deployment scenarios.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.8.3.
[3.8.2] - 2026-09-12
Changed
- dsh docs: the package README now documents the recommended
workflowNamesallowlist for the native read-only fan-out path on dsh —mstar-qc-tri(plan QC tri),mstar-audit-fanout(large-repo/codebase-audit),mstar-pr-seats(/amazing-pr-review deep) — with the production-overlay note in the same place: with the shipped empty allowlist every name is unknown, which the defaultworkflowGate: 'warn'turns into one survivableworkflow.name.unknownadvisory; a deployment that also wants unknown names vetoed setsworkflowGate: 'hard'in the profile layer. No default changed —workflowGatestays'warn'andworkflowNamesstays unset (operator overlays, never mstar defaults). - dsh read-only fan-out (docs):
skills/mstar-host/references/dsh.mdgains the Read-only fan-out via theworkflowtool section andreferences/dsh-workflow-scripts.mdships the copy-pasteablescript+metatemplates for the three names;commands/codebase-audit.mdandcommands/amazing-pr-review.mdcarry the dsh-conditional sentence (slash → nativeworkflowtool → conversationworkflow-runnode, other hosts unchanged), andskills/mstar-sdd/SKILL.mdnotes the plan QC tri MAY run through the qc-tri script while per-task implementers stay serialsubagent.
Harness
- dsh host: mstar progress on dsh is now defined as native-workflow driving — the workflow snapshot phases, the dispatch gates, and subagent settle notifications — and the goal bridge is advisory-only, so a human
/goal pausecan no longer be overridden by mstar's own dispatch edges.mstar-hostscopes its host-agnostic/goalrule with an explicit dsh exception (other hosts keep the complete-flow objective rule),mstar-host/references/dsh.mdgains a progress-discipline section (a dispatched child owning the critical path means wait for its settle notification, not another work unit), and PM required reading carries a dsh pointer. - dsh host: shared steering helpers (
isRootLikeAgent,rootAgentOf,steeringCompass) moved togates/steering.tsin the dsh plugin — planMode behavior unchanged.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.8.2.
[3.8.1] - 2026-09-11
Harness
- dsh plugin: the workflow panel migrated from the conversation-area view ring to the dsh right Sidebar — the panel now registers as a first-class page tab type (
kind: 'mstar-workflow') through the sidebar's public two-stage seat contract, with a guide-page capsule as its entry point (opening expands the column, a second pick focuses the existing tab) and the panel body + chip title as keyed seats. The oldconversation.viewtab is removed (a migration, not a second surface); the tab chip title is captured at open time and no longer follows a mid-session locale switch; while the column is collapsed or another pane tab is active the body renders nothing. - dsh plugin: the panel is re-laid out for the narrow docked column — a single-column shell with exactly one scroll owner (
[data-mstar-scroll]; the per-page scrollers and the workspace-digest's nested scroller are retired), width driven by container queries instead of viewport media queries (compact rhythm below 480px container width; the group grid spreads to two columns at 720px+), and the agent-execution canvas replaced by a vertical grouped list: the SVG edge layer, card ports, and pointer pan are deleted — flow order is carried by the fixed phase/stage/sub-bucket group headings, entity cards become full-width flow rows keeping the role chip, status point, ×N count, emphasis tiers, done ✓ (off-tier excluded), evidence/idle placeholders, and the on-demand badge; the tasks tab's plan board stacks into five groups with a vertical stepper, and the event log's partitions become flow content. - dsh plugin (behavior change): the emitted engine-status catalog anchor identity is renamed
mstar-engine-status→mstar-engine(thekind: 'plugin'/form: 'catalog'source shape is unchanged). Rows already emitted by shipped builds persist the legacy identity in their session logs, so the panel's anchor reader accepts both identities; any otherpluginvalue is not an anchor and the session degrades to the explicitwaitingstate.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.8.1.
[3.8.0] - 2026-09-10
Harness
- dsh plugin: the engine-status catalog row's persisted
sourceis now the first-partypluginarm — exactly{ kind: 'plugin', plugin: 'mstar-engine-status', form: 'catalog' }, with no other member. The previous customkind: 'mstar-engine-status'plus its five payload members made every pre-V3 session log that ever ran the plugin unopenable in the Web GUI (the released session-format V2→V3 classifier refuses the whole log withcannot safely transform unclassified message source), and the extra members are refused by all three released historical edges as soon as aplugin-arm source is member-audited. A new regression test asserts the exact three-member source on the real composition row, so neither the custom kind nor a "just add one field" edit can return. - dsh plugin: the payload no longer rides the message
sourceat all. The exact emitted payload is snapshotted per session at{HARNESS_DIR}/snapshots/engine-status.jsonin the same digest-gated emission that appends the row, and the workflow panel fetches that session's snapshot on demand from the host's shared/apitypert gateway (mstar/engineStatus; browser halfconnection.rpc.call('/api', 'mstar/engineStatus', { args: { sessionId, cwd } }), the host validating the asserted session and answering its stored record). A missing, unknown-version, torn or foreign snapshot renders an explicitunavailablereason — no panel field silently degrades to an empty state. The endpoint is unauthenticated: a caller that can reach the local/apigateway and knows a(sessionId, cwd)pair is served (the payload is a workspace digest, not a secret), while every answer stays scoped to the requested session — the stored record'scwdmust match the asserted and the server-resolved workspace, and the client re-checks the echoed id and workspace before rendering. - Docs synced to the new contract: the
packages/dshREADME pair +bundle/README.md, the dsh host reference, and themstar-artifactsresidual fail-loud handoff clause (which now names thedecisionenum alongsideseverity, and the whole-register refusal a lifecycle value such as"resolved"triggers there).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.8.0.
[3.7.3] - 2026-09-10
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.7.3.
[3.7.2] - 2026-09-09
Harness
- Moved the
mode: primaryproject-manageragent shell out of the sharedagents/subagent surface intopackages/opencode/agents/(OpenCode-only). Host plugin surfaces (ZCode / omp / Claude-plugin manifests) no longer register PM as a subagent — PM entry stays via thepmskill; OpenCode bundling merges the shell intoharness-agents/. - Updated omp/dsh mirror contracts and host docs to match.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.7.2.
[3.7.1] - 2026-09-09
Harness
- CLI ↔ plugin version drift is now visible in one command, for every supported host:
mstar-harness doctor --target <host>compares the running CLI version against the installed Morning Star plugin with per-host local discovery (opencode package cache, cursor plugin checkout manifest, codex/ompplugin list --json, zcode plugin cache, dsh profile node_modules across all profiles, kimi$KIMI_CODE_HOME/plugins/managed; highest semver wins) and prints one directional prompt — CLI newer → per-host plugin update hint, plugin newer → update the global CLI (npm i -g @mstar-harness/cli@latest) — as an informational note that never becomes a doctor error or changes the exit code; themstar-harness-coreversion-drift contract now states all-host coverage. kimijoins the supported install targets with a minimal adapter: doctor reports the resolved$KIMI_CODE_HOME/plugins/managedlocation without requiring the kimi binary; init is notes-only — plugin install and update go through the Kimi TUI/plugins install.- Marketplace manifests now pin the plugin version.
.claude-plugin/marketplace.jsonand the rootmarketplace.jsoncarryversionon themorning-star-harnessplugin entry, and both manifests joined the release version surfaces —release:preparebumps them atplugins[0].versionandrelease:validategates them there, so a ZCode marketplace refresh can detect newer releases. - ZCode bootstrap marketplace entry carries
version. The CLI seeds the entry with the CLI release version; ZCode's marketplace refresh overwrites the seed with the repo-shipped manifest. Doctor deliberately does not gate on version skew — a snapshot newer or older than the installed CLI is the update signal itself, not an unhealthy marketplace. - Worktree gates now distinguish Git checkout identity from physical path nesting. A real linked worktree created inside the control checkout (the documented
.worktreeslayout) passes the L1 pre-dispatch check and the bound SDD execution context; the same control checkout, a plain subdirectory of it, or a symlink alias of it is refused — even when the declared branch equals the control branch. Git-probe failure fails closed with the existing bounded timeout. - The control checkout root is derived by git probe, not
dirname(harness).resolveSddExecutionContextresolves the real repository top-level of the declared harness root (git rev-parse --show-toplevel, bounded and fail-closed), so a.mstarc/override nested harness like<control>/state/.mstargates the same-checkout isolation identically in standalone and active-lease contexts; an unresolvable root fails closed. - One shared checkout-identity predicate.
l1PreDispatchCheck,assertControlVsFeaturePathandresolveSddExecutionContext(thesdd.context.feature-in-controlgate) shareisDistinctCheckout(canonical per-worktree git dir comparison) — no.worktreesname special-case, no duplicated containment rule, and the control-harness-inside-feature, path-escape, lease and branch protections are unchanged. - ZCode coordination-write gate: new engine-backed PreToolUse (
Write|Edit) process hookhooks/mstar-write-gate.mjs— hard-enforced repos block writes to harness coordination documents (status.json, workflow snapshots, project registers) with exit 2 plus an actionable stderr reason (stdout stays empty); soft-mode and non-harness writes pass silently; disable per session withMSTAR_WRITE_GATE=off. - Edits validate the reconstructed post-edit result (ZCode host): deterministic Edits (
old_string+new_stringwith a unique match, orreplace_all) are validated against the reconstructed content instead of the pre-edit on-disk state — a deterministic corrupting edit now blocks under hard enforcement; ambiguous or non-reconstructible edits keep the pre-edit fallback. - Oversized coordination docs are now a violation on the ZCode host: content or on-disk targets beyond the 2 MiB validation budget yield
status.oversized(hard-mode block naming the escape hatch instead of a silent pass; omp keeps the default silent pass). - omp hook lazy loaders removed (versioned divergence): the engine is inlined at build, so a stale engine dist now fails the omp build instead of silently degrading; Gate-1 block/pass decisions and reason strings are unchanged (golden fixture matrix).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, the portable Agent Plugins manifest, and both marketplace manifests: → 3.7.1.
[3.7.0] - 2026-09-08
Harness
- Iteration skill (mstar-iteration) restructured for progressive disclosure: main SKILL.md is now a 122-line phase router (one route map + universal invariants; 408 lines before); Phase 1 start detail moved to new
skills/mstar-iteration/references/phase-1-prepare.md, Phase 2 loop detail merged intoreferences/phase-2-worktree-lease.md, and each start/drive/resume/close/PR route names exactly one phase reference — structural per-route byte reduction of 23–56% (route sets pinned by 37 closure tests; byte accounting in the plan's eval evidence, not observed model loads). - Commands (
iteration-start/drive/loop), PM role reference, and helper-discovery pointers retargeted to the phase references; no lifecycle rule duplicated (phase route map is the single dispatch table; §2.6 stays in main as the cross-phase SSOT). - Frozen 30-case skill-eval corpus (v28) gains five adversarial phase-transition cases (parallel review chain, Phase 3 collapse, early-PR jump, wrong-phase resume, overridden pause) folded into existing case ids plus ordered product→architect→writing-specialist chain pin; Cursor routing-evals bumped to v28 with five matching regression cases.
- Evidence: paired dev comparison complete on the shared 30-case corpus (candidate
cef1675cvs original baselineec7cc1bc: 17/20 vs 17/20, identical failure sets, zero candidate-side regressions, 0 infra); frozen three-repeat heldout incomplete at 24/60 — real-model runs were capped by a user quota directive and remaining validation is user-run via the plan's eval RUNBOOK; observed reads inspected from traces (first-run + resume; synthetic fixtures keep skill closures unmaterialized, so route-load reduction stays a structural-bytes claim, not a causal model-load claim); drift/standalone green. - Root-caused the legacy plugin-scanner
SHELL_INJECTION_PATTERNfalse positives instead of suppressing them:packages/dshcommand-frontmatter parsing now matches labels line-by-line against a static value regex (noRegExpassembled from label strings), and the engine audit child-process test assembles its script by plain concatenation (no template literal nearBun.spawnSync). The repo-root.plugin-scanner.tomlnow downgrades onlyUNICODE_OBFUSCATED_INSTRUCTIONtomedium— the unfixable remainder: cisco's obfuscated-instruction signature regex has no word boundaries ("readability→token", "ready→environment"), so ordinary Chinese text in bilingual skill docs trips it under the awesome-ai-plugins legacy stack (plugin-scanner2.0.1116 +cisco-ai-skill-scanner2.0.14). Our pinned stack (scanner 3.0.104 + cisco 2.0.12) is unaffected, and our own CI ignores repo config (trust_repository_policy: false); findings stay visible, only the legacyhighgate is unblocked. - Removed local-harness provenance citations (plan/iteration/QC-report references) from tracked code comments, test names, and migration fixtures.
- Hardened CLI path handling after a deep static-security scan: relative
--outputvalues containing..segments are now rejected instead of escaping the project root; agent-plugin install validation requires the plugin root to be a real directory and builds manifest/MCP/skill component paths by literal joins; lint target collection and tracked-file listing build child paths from guarded readdir entry names; owned PR-review artifact paths are constructed as single-segment names beside the worktree. - skill-eval is now fully automated / test-driven: the argv CLI dispatchers (
scripts/skill-eval/index.ts, themanifest.tsstage entry) were removed and the harness is invoked programmatically through its exported stage functions (prepareManifest,executeManifest, report builders); process spawn stays isolated in thenode-launch.tsadapter withmanifest.cli.pathvalidated (absolute local path, no URL scheme or control characters) and realpath-normalized before launch;canonicalJsonkey ordering no longer relies on arraysort()and is pinned by byte-stability equivalence tests. - SDD handoffs now carry an absolute destination contract: fresh/resume/reviewer prompts cite the absolute control harness root, feature worktree/cwd, plan, brief/report and context file; native hosted subagents observe pwd/branch before writing, and the handoff states explicitly that a later deliberate
chdir, absolute-path write, or host-native edit tool (apply_patch) is not blocked. - New bound SDD execution surface (spec A3):
mstar sdd exec --context <context.json> -- <argv>launches CLI children with cwd bound to the feature worktree (no shell, exit 1 gate / 2 usage / 127 not-found / 128+n signals);mstar sdd check-contextgatessource|artifact|launchseams;task-brief/review-packageaccept--contextto validate destinations before mkdir/write and emit absolute paths. A causal replay suite reruns the historical relative-source write raw (wrong-primary reproduced) vs bound (feature-only) on disposable fixtures. - Engine exports:
resolveSddExecutionContext,checkSddAction,runInSddContext— bounded action checks reusing the existing lease/branch/path machinery; no new global hardening and no sandbox claim. - Added a maintenance-only skill evaluation harness under
scripts/skill-eval/: a frozen 30-case corpus (5 routes x 6, dev4/heldout2, first-run/resume and false-pass/wrong-checkout traps), an immutable manifestpreparestage (zero model calls, exit 0/2), an argv-array subprocessrunstage (real CLI execution, evidence capture, resumable scheduler, honest pass/fail/unverified/infrastructure grading with exit 0/1/2), and areportstage that aggregates recorded evidence without rerunning a model. - Real smoke baseline recorded: harness mechanics verified on codex-cli 0.144.1 (closure-sentinel reads, isolated workspace-write diffs, exact session-id resume); observed model identity absent from event streams and usage attribution left unverified — both recorded as explicit nulls, so no fixed-model efficacy claim is made.
- Evidence-gated hot-path skill thinning: removed duplicated and model-native generic guidance from the four standard-preset hot-path files (
mstar-harness-core,mstar-coding-behavior,mstar-dispatch-gates,mstar-roles/_shared/leaf-executor-core.md) — 8 bounded ablation batches, −8,419 bytes (−14.5%) on the subject-file set — with every removal row carrying provenance, a removal basis, a restore record, and a surviving owner in the frozenscripts/skill-eval/ablations.jsoninventory. - Behavior evidence recorded, not claimed: each batch was adopted only after a fixed paired dev run showed zero new critical (authorization / wrong-checkout / false-pass) failures and no normal-success regression (17/20 vs 17/20 passes); the final candidate was re-frozen (baseline
c4e338a0, candidate4a750601) for the interleaved three-repeat baseline/candidate/minimal comparison with heldout grades reserved for independent QA adjudication. Token-level load effect stays unverified (usageBasis=unknown); no efficacy or cost claim is made. - Protected semantics untouched: user policies #109/#144/#153/#156/#167, the engine-legacy conditional archive, engine-absent fallback reachability under
Skill presets: none, and all negative-constraint owners are preserved and pinned byscripts/skill-eval/closure.test.ts(24 tests);validation:driftstays exit 0. - One skill-lint classification policy across hosts: CLI
mstar skill lint, dsh skill-lint gate and drift Guard 5 now consume the shared Engine classifierclassifySkillLint(exactmstar-harness-core→ five-question exempt,mstar-skill-authoring→ strict authoring, othermstar-*→ runtime aliases, everything else → strict authoring). Identity is the resolved skill-directory basename — never the YAMLname— so shipped runtime skills no longer receive conflicting dsh/CLI judgments; frontmatter and ephemeral-citation checks stay active in every profile and dsh content-blind repair behavior is unchanged. - Real-corpus parity + drift sensitivity evidence: before/after lint decisions recorded on the shipped corpus (pre-fix dsh failed 15/20
mstar-*skills in authoring mode; candidate dsh, CLI and Guard 5 all pass the 18 runtime skills with 0 violations), plus red probes proving an intentionally mismatched classification or a removed real heading fails the corpus guard. - Made
mstar-rolesthe single load-selection authority: the roles hub owns theSkill presets:decision (identity-first; explicitnone/ omitted-standard / named preset / trivial routes; unknown preset refuses instead of guessing), andmstar-harness-coreremains the lifecycle/authorization authority while pointing to the hub instead of mandating universal core reads. - Made
Skill presets: nonecoherent: role identity, the shared leaf safety boundary, and role-owned QC/QA evidence obligations stay reachable without optional topics;nonenever grants delegation or waives gates. - Removed duplicated preset-interpretation prose from role references (each now lists only its preset members) and narrowed the Engine
lintLoadOrdercontract: the roles-hub bootstrap is the single recognized exception — arbitrary topic exemptions still fail. - ZCode plugin cards now show the Morning Star icon and display name: the repo-shipped marketplace manifests (
.claude-plugin/marketplace.json, rootmarketplace.json) and the CLIzcodebootstrap snapshot carryicon+displayNamefor themorning-star-harnessentry. - Bundled ZCode plugin hooks (
hooks/hooks.json): SessionStart injects a compact harness-workspace context ({HARNESS_DIR} +status.jsonsummary +mstar-harness-coreload pointer; silent no-op outside harness workspaces), and PreToolUse (Bash) adds a deterministic git gate backingmstar-branch-worktree— blocks direct commits on the default protected branch (MSTAR_ALLOW_DEFAULT_BRANCH_COMMIT=1escape) and baregit push --force(--force-with-leaserequired;MSTAR_BRANCH_GUARD=offdisables the hook). - Documented the icon + hooks behavior in
INSTALL.md(ZCode sections) andmstar-host→references/zcode.md.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.7.0.
[3.6.3] - 2026-09-06
Harness
- Replaced static synthetic credentials in security tests with locally generated disposable values (random tokens, locally signed JWTs, in-memory RSA and OpenSSH keys), preserving every detection and redaction assertion without requiring an OpenSSH executable. CLI coverage now also asserts a tracked token is found and its value never printed.
- Reworded the placeholder-masking comment in the engine audit source and the mstar-audit prompt-injection rules to state the invariant without quoting attack phrasing; paired before/after classification checks keep the defensive behavior identical.
- Hardened repository contribution readiness: pinned all GitHub Actions to immutable commit SHAs, restricted ordinary CI to read-only permissions without persisted checkout credentials, added weekly GitHub Actions and Bun workspace dependency updates, and published a bilingual security disclosure policy. Release write permissions and push authentication are unchanged.
- Aligned Kimi plugin interface metadata with Kimi Code's supported display fields and added the project website link. Removed unsupported Codex-style capabilities, starter prompts, and visual metadata from the Kimi manifest only; skills, commands, and session-start behavior are unchanged.
- Added an advisory HOL Plugin Security Scan workflow for pull requests, main-branch pushes, and manual runs, with a pinned Action, explicit Cisco skill analysis, an 80-point/high-severity target, and reports preserved on threshold failure. Repository-owned suppressions remain untrusted.
- Included the MIT license and a link to the shared security disclosure policy in the dsh package distribution.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.3.
[3.6.2] - 2026-09-05
Harness
- Added a
collectFoldedseat-prompt option toprReviewSeatPrompt(Stage-2 only; a Stage 1 seat combined with it throws): one fold bullet after the## Budgetblock tells a deep-tier domain seat to do its own collection — pinned diff pack first, then in-domain changed files, within the budget block; reachable from the CLI via the newmstar pr-review seat-prompt --collect-foldedflag (engine guards surface as command errors). - Deep PR review now runs two waves by default when the pinned diff pack exists — the Stage 1 collect wave folds into the Stage 2 domain seats (
collectFolded), and the collect wave is kept only in the exceptions (nodiffFilesnapshot, PM judgment), declared in the report- notes:ascollect wave folded (pack)/collect wave kept (no pack / PM judgment: <reason>); the independent cross-domain security seat is never folded. - Tightened pack-first bounded seat reads: seats read the pinned diff pack first, then targeted in-domain opens within
fileOpenCap, anddeepfan-out wording stays consistent across themstar-auditprose and the/amazing-pr-reviewcommand. - Hardened
collectFoldedfail-loud guards (mirroring the Stage-1 contradiction guard):collectFoldednow requires a pinned diff snapshot (diffFile) and is refused on the independent cross-domain security seat (never folded) — both throwTypeError;prReviewSizing.collectSeats/mstar pr-review sizedocs carry the kept-wave qualifier (collect seats apply only when the deep collect wave is kept), and the deep-tier glosses inpr-review.mdwere reconciled with the fold default. - PR review synthesis now uses a tiered three-way vet: must-fix / should-fix findings get the full attack (counter-example, simpler explanation, evidence verifiability); nits get evidence-verify only (open the cited file, confirm
file:linesupports the claim). Domain seats keep their full three-way attack — tiering applies to the main-agent synthesis pass only. - Stage 2 domain seats now return a fixed findings block per finding in the result payload — field names verbatim from
finding-format.md,Merge classimmediately afterConfidence(lint-enforced), a one-lineFix sketch— staying lint-compatible with the single validator (mstar lint --type finding --pr-variant→validateFindingDoc), and declare truncated coverage in the payload tail when a budget cap stopped expansion. - The posted review body gains a soft cap (~150 lines) triggering degradation ③ of the time-budget ladder: past the cap, nits fold into the summary body (display only — findings are never dropped) and the fold is declared in the report
- notes:. - Added an optional
elapsedfield to the PR-review report frontmatter:validatePrReviewReportaccepts a non-negative integer minutes value (absent = valid for legacy reports; malformed = violation), and the/amazing-pr-reviewcommand records the start time at worktree-setup and writes the measured wall-clock minutes into the frontmatter. - Added a PR review time-budget system: engine constant table
PR_REVIEW_TIER_BUDGETS(wall-clock target + per-seat caps per tier) is the numeric SSOT, rendered as a budget block inprReviewSeatPromptseat prompts. - Added a
mstar pr-review budgetCLI command printing the per-tier budget table (quick/default/deep) for humans and drift checks. - Added a Budget column and a time-budget degradation ladder (①read-depth ②seat topology ③display, with a never-degrade list) to
mstar-auditPR-review prose and the/amazing-pr-reviewcommand.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.2.
[3.6.1] - 2026-09-03
Harness
- Removed the INSTALL.md marketplace version anchor and its release tooling:
release:prepareno longer bumps a quoted"version"field in INSTALL.md andrelease:validateno longer requires one — the ZCode marketplace example (and the marketplace catalogs) are version-less; install-time versions come from.zcode-plugin/plugin.json. Follow-up to #183/#184: the anchor's only purpose was being bumped by the release tooling, so it was removed together with the tooling instead of restored. - Converted all 14 repo-root agent shells (
agents/*.md) to single-line quoted Englishdescriptionfrontmatter. ZCode's flat agent frontmatter parser does not support|-block scalars — it parsed the literal string|-as the description and silently dropped the nestedtools/permissionmaps, leaving plugin agent entries with a broken trigger description. Wording is unchanged (the existing English line is reused verbatim);mode/tools/permissionare preserved for OpenCode semantics. - Corrected the ZCode host contract (
mstar-host): current ZCode does register Morning Star role agents (agents/*.md) as callablesubagent_typevalues — dispatch now prefers the bare role id (e.g.fullstack-dev), keepsgeneral-purposeas the universal fallback, keeps C5b prompt + skill-load binding required because the role shells are thin, and carries its own C5/C5b SSOT (the shared role-binding doc is re-scoped to Kimi-only;zcode.mdno longer loads it). Documents the ZCode frontmatter constraint (single-line quoted Englishdescription;|-blocks and nestedtools/permissionare silently mangled/dropped) and that direct marketplace add works now that the repo ships.claude-plugin/marketplace.json. - Shipped repo-side ZCode marketplace manifests (
.claude-plugin/marketplace.json, with rootmarketplace.jsonas fallback) so ZCode'sgithub-source marketplace refresh can discover the catalog in-repo — previously refresh failed withMarketplace manifest not found in GitHub repo. Plugin entries use thegithubsource with no pinned version; install-time versions come from.zcode-plugin/plugin.json. - Aligned the
zcodeadapter: the local marketplace snapshot written byinitno longer pins a plugin version, anddoctoraccepts version-less plugin entries (a successful ZCode refresh overwrites the snapshot with the repo manifest).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.1.
[3.6.0] - 2026-09-03
Harness
- New
@mstar-harness/ompnpm package:omp plugin install @mstar-harness/ompnow works without any local build — the omp hook + sixmstar_*tools are bundled with the engine inlined (zero runtime@mstar-harness/engineresolution), fixingCannot find package '@mstar-harness/engine'on third-party installs. Docs (INSTALL.md,README.md/README_CN.md,mstar-hostomp reference) and the CLI omp adapter now prefer the npm install path; the maintaineromp plugin linkpath is<repo>/packages/omp(needsbun install && bun run engine:build && bun run --cwd packages/omp buildin the checkout). - BREAKING (intended): repo-root
hooks/andtools/moved intopackages/omp/src/— the omp hook/tools are now omp-only package surfaces. Anyone relying on repo-roothooks/pre/mstar-gates.ts/tools/mstar_*paths must use the package (packages/omp/src/…sources,<pkg>/hooks/+<pkg>/tools/in the installed npm tree). The maintaineromp plugin linkpath is now<repo>/packages/omp(built) — linking the repo root no longer provides the runtime gates.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.0.
[3.6.0-alpha.4] - 2026-09-03
Harness
- PR review diff snapshot:
mstar pr-review worktree-setupnow pins the review diff basis to a snapshot file beside the sidecar (<parent-of-worktree>/.<wt-dirname>.prreview.diff, printed asdiffFilein setup output;nullfor--diff/--working-treemodes) so every Stage 1/2 seat reads one pinned diff instead of re-running git —mstar pr-review seat-promptpasses it through as--diff-fileand the prompt gains a "read the pinned diff snapshot FIRST" ingredient; cleanup removes the snapshot with the sidecar, and snapshot capture is wrapped in the worktree rollback so a failed setup never orphans a worktree. - Worktree convention + ownership: review worktrees now default under
<repoRoot>/.worktrees/review-…(themstar-branch-worktreeconvention;.worktrees/is added to.git/info/excludewhen the target repo does not ignore it) instead of a sibling directory beside the repo, andworktree-cleanuponly deletes files whose identity (dev/ino/mtime, link count) matches the snapshot recorded at setup — a replaced or foreign file at the snapshot path is left in place, and a pre-existing sidecar makes setup refuse with aworktree-cleanuphint instead of deleting it. - Slimmed the
amazing-pr-reviewcommand to a thin launcher: all procedure contracts now live inmstar-audit/references/pr-review.md(tier ladder, three-stage pipeline, worktree isolation, posting, report archive, batch), removing duplicated rule text from the command body.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.0-alpha.4.
[3.6.0-alpha.3] - 2026-08-31
CLI
- Codex installs now use a repo-bundled marketplace: the harness repo ships
.agents/plugins/marketplace.json(namemstar-repo, plugin root = repo root), andnpx @mstar-harness/cli init --target codexregisters it viacodex plugin marketplace add btspoony/mstar-harness --ref main. Install withcodex plugin add morning-star-harness@mstar-repo; refresh snapshots withcodex plugin marketplace upgrade.doctor --target codexvalidates the marketplace registration via the codex CLI and reports legacypersonalmarketplace entries as a migration note; Codex custom-agent.tomlsymlinks continue to come from the shared~/.mstar/harnesscheckout.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.0-alpha.3.
[3.6.0-alpha.2] - 2026-08-31
Harness
- Fixed iteration-close (Phase 3) commit anchor: the §3.5 close commit is now branch-anchored and fail-closed — before any
git add, PM must verifygit branch --show-currentequalsspec_integration_branch(from snapshotbranch.integration/ compass); on mismatch STOP and redo tracked writes (knowledge/,specs/,CONCEPTS.md) on the integration checkout, instead of committing compound products onto the control branch (main). Engineiteration gatebranch probes (--branch/--integration/--target) wired into the §3.5 pre-commit verification.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.0-alpha.2.
[3.6.0-alpha.1] - 2026-08-31
Harness
mstar-harness-corenow carries a "核心研发守则" (core engineering rules) section: seven global engineering invariants — no backward-compatibility layers (remove obsolete paths), simplest implementation over speculative abstraction/configuration/indirection, grow the system in layers on top of a working product, modular components with separated concerns, prefer established well-maintained libraries, lean on existing project dependencies before adding packages, and make architectural decisions for the long term (no intended-to-be-replaced stopgaps). Injected into the mandatory entry skill so every role loads them; operational detail remains inmstar-coding-behavior, whose Simplicity First section now links up to these invariants to keep the two layers drift-free.- Rules provenance recorded in
ATTRIBUTION.md(source: a post by Marcos Hernanz on X). - Prerelease versions (
X.Y.Z-suffix, e.g.3.6.0-alpha.1) now flow throughrelease:prepare/release:validate/ publish: npm publishes under the dist-tagalpha(neverlatest), the GitHub Release is flagged prerelease, and the INSTALL.md marketplace example stays on the last stable release.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.6.0-alpha.1.
[3.5.1] - 2026-08-28
Harness
- Fixed git/hosted installs (
omp plugin install github:btspoony/mstar-harness,bun add github:…) failing at dependency resolution: the root manifest's@mstar-harness/enginedependency used the pack-time-onlyworkspace:*protocol, unresolvable outside the monorepo. It is now^3.5.0, fetched from npm on hosted installs, while dev checkouts still link the workspace member.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.5.1.
[3.5.0] - 2026-08-28
Harness
- Added a pluggable ArtifactStore for JSON coordination docs:
status.json, workflow snapshots, and project residuals now persist throughArtifactStore.put/get(defaultFsStorekeeps the existing{HARNESS_DIR}paths and atomic-write semantics). Integrations can mount their own store in-process viasetArtifactStoreor per-command viaMSTAR_STORE_MODULE/--store— filesystem paths only, URI schemes are rejected beforeimport(). - Added
mstar-harness persist <kind> --key <key> [--file <path>|--stdin] [--store <module>] [--schema <id>]andmstar-harness persist get <kind> --key <key> [--store <module>]forstatus/snapshot/residuals/review/json, running the existing kind validators before put. mstar-harness initnow auto-installs the matching-version@mstar-harness/cliglobally after a successful run, so themstar-harnessbinary lands on PATH for engine-check commands. The install is skipped when the PATH version already matches, is fail-soft on npm errors (init still exits 0), and can be opted out with--no-global-cli;--dry-runprints the would-runnpm i -gcommand without executing it.mstar-harness doctornow prints a non-fatal CLI-on-PATH note (missing / mismatch / match) for every target.- mstar-dispatch-gates: role-binding field check now resolves the host column via
mstar-host§Detect active host tool-shape detection; config paths and repo content are explicitly forbidden as host signals (prevents applying another host's dispatch key, e.g. OpenCodesubagent, to an omp session whose task tool schema usesagent). - Added a first-class review JSON kind (
mstar.review/v1):synthesizeReviewfolds vetted findings into a validated envelope (verdict/tally fromcomputePrTally),mstar-harness persist reviewvalidates the envelope before put (inspector M1 vocab rejected), andpr-deep-review/amazing-pr-reviewStage 3 must persist the envelope — the Markdown report is the optional human copy.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.5.0.
[3.4.1] - 2026-08-27
Harness
- Anti-recursion precheck re-scoped to CALLER semantics (fixes #156):
composeDispatchGateno longer feeds the host role-binding field intoantiRecursionPrecheckas if it were the dispatching agent — on omp/OpenCode/Cursor that field (agent/subagent/subagent_type) carries the spawn TARGET, and target ==Execute asis the documented compliant C5 dispatch pattern, so underEnforcement: hardevery correct dispatch hard-blocked ondispatch.anti-recursion.self-type, while omitting the field hard-blocked ondispatch.anti-recursion.empty-binding(no spec-compliant binding existed). The composition now takescaller(the dispatching agent's OWN role) +callerRequired; the precheck runs only when a caller binding exists, and fails closed on an empty one only where the host contract mandates the binding (dsh). Theagentoption is removed — migrate callers tocaller. - omp plugin: Gate 2 (task dispatch) no longer runs the anti-recursion leg (omp's
tool_callevent carries no caller identity; the NEVER red line stays prompt-level viamstar-dispatch-gates), so the documentedagent: "<Execute as role-id>"pattern passes under hard. The dispatch gate now ALSO honors the repo-level.mstarc/ compassenforcement: hard(previously header-flag-only — a hard compass left Gate 2 unhardened, diverging from Gate 1 and dshresolveDispatchHard), and soft-mode dispatch violations are warn-logged through the extension logger instead of silently dropped (opencode parity; the silent drop is why the #156 pincer stayed latent for five iterations). - OpenCode surface:
validateDispatchAssignmentdrops thesubagentTypeplumbing (the spawn target is not an anti-recursion signal) and composes the repo-level.mstarc/compass hard setting below the Assignment header flag, matching the status-write gate and dsh. Compliant dispatches no longer warnself-type/empty-binding; a hard repo now escalates flag-less dispatch violations to error-level +hardBlocked. - dsh surface:
dispatchGateCorepassescaller: config.dispatchBinding ?? ''withcallerRequired: true— behavior unchanged (self-recursion critical; unset binding fails closed under hard).mstar_dispatch_validate'sagentparam is nowcaller(the DISPATCHING agent's own role; omit when unknown). - Docs:
mstar-dispatch-gatesrecords the caller-vs-target engine scope;mstar-host/references/omp.mdgains the Gate 2 anti-recursion scope note; stale dshdispatchBinding"precheck skipped" rows corrected to the fail-closed contract.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.4.1.
[3.4.0] - 2026-08-27
Harness
- Renamed
/pr-deep-review→/amazing-pr-reviewwith a clean cutover (no alias) and added three review strengths:quick(single-pass, 1 seat, collect + review in one pass) /default(the no-flag landing tier — 2 domain seats, collection folded in, reduced seats) /deep(the former full three-stage pipeline: collect → domain review → main-agent synthesis, 4–7 seats). The tier is chosen by an explicit keyword or inferred from the change shape; the default tier no longer fans out the full seat plan. - Deterministic static checks from the audit security review are now mechanical engine code with CLI entry points:
mstar audit secret-scan [path]walks git-tracked files read-only throughscanSecretsand prints{file, line, type}findings (never values), exiting 1 on any hit; patterns cover provider key shapes (AKIA/ASIA, sk-ant-, ghp_/github_pat_, sk_live_, sk-, xox[baprs]-, JWT, private-key blocks), never-commit filenames (.env*,*.pem,*.key,id_rsa, credentials/service-account JSON, git-credentials), CI/IaC leak shapes (Actions plaintextenv:map entries and same-line assignments, DockerENV/ARG, Terraformpassword =), while safe placeholders (${ENV_VAR},process.env.X) are excluded.mstar audit supply-chain [path]runssupplyChainChecks: lockfile-missing / lockfile-duplicate across the known lockfile set,action-unpinned(@main/@latest, trailing-comment tolerant, SHA pins clean), andpull_request_target-headPR-head checkout; reachability triage stays with the reviewer. - Credential patterns now have a single source of truth:
WHOLE_MATCH_PATTERNS/VALUE_PATTERNSinpackages/engine/src/audit.tsback bothredactSecretsandscanSecrets, reconciling the engine-vs-prose drift — the engine table gained fine-grained GitHub PATs (github_pat_) and Stripe live keys (sk_live_).scaffoldAuditPlanwiresredactSecretsover finding evidence/description so scaffolded plans honor the redaction promise, andsecurity-review.md§6 collapses its duplicated pattern list to an engine-check pointer atmstar audit secret-scan, keeping only discipline prose. - Programmatic deferred-PR backlog registration:
mstar status backlog-register/mstar status backlog-closereplace the hand-rolled python lock protocol inskills/mstar-audit/references/pr-review.md. The engineappendProjectRegisterEntries/closeProjectRegisterEntryrun insidewithStatusWriteLockwith atomic temp+rename writes (crash-safe, fail-loud validation); same-day key bump (-2,-3, …) and entry-id uniqueness are enforced inside the lock (B-9). - Role references: Add a shared coding-philosophy line to dev-role Role Missions (
fullstack-dev,fullstack-dev-2,frontend-dev): "YAGNI is your coding philosophy; PDCA is your behavioral discipline." - Role references: Unify executor Role Mission phrasing to the second-person "You are …" convention (
qa-engineer,prompt-engineer,ops-engineer,fullstack-dev-shared);project-managerkeeps its Identity section as orchestrator exception. - Added npm total downloads badges for
@mstar-harness/cli,@mstar-harness/dsh, and@mstar-harness/opencodeto the README badge row (before the Last commit badge). - Reworked
amazing-pr-reviewbatch semantics to one session = one PR: when multiple PRs are passed in, only the first runs the full three-stage deep review; the rest are registered as audit todos in{PROJECT_DIR}/_default/residuals.json(decision: defer,target: next session,tracking: pr-deep-review backlog) and the report suggests opening one session per remaining PR. The old four-seat N/4 batch fan-out is removed. - Reworked single-PR deep review into a three-stage pipeline (collect → domain review → synthesis): lightweight read-only collect seats fan out by domain, mstar built-in roles review code + security per domain, and the main agent dedupes, three-way vets, and publishes the single GitHub Review. Posting ownership moved to the main agent — review seats never post. Fan-out is scale-driven, reusing the existing ~300-line sizing band.
- Synced the three-stage pipeline and one session = one PR semantics across skill core, roles, and user-facing docs:
mstar-auditSKILL.md (prvariant dispatch + Hard Rule 2),mstar-rolesshared Audit Mode andcode-reviewer.mdMode C (every seat — collect or domain — returns evidence / findings in its result payload: any seat may be write-blocked, and the main agent writes / consolidates the evidence files; seats produce no verdict, never post), and README.md / README_CN.md / docs/cli.md. Posting ownership is unified on the main agent across all surfaces — review seats never post. - PR-review deterministic arithmetic and naming contracts moved from LLM hand-computation into tested engine code, exposed as the new
mstar pr-reviewcommand group:tally(locked-formula tally/verdict/score + verbatim two-line chat header from accepted findings JSON),report-path(local-report/evidence filename resolver with same-day-r2/-r3collision escalation and never-fabricated SHAs), andvalidate-report(saved-report frontmatter validation: verdict-from-tally, score recompute, comments tri-state).mstar-audit/references/pr-review.md§ Tally / § Local report archive naming / § Output shape now carry engine-check callouts pointing at these commands. - PR-review external side effects became tested engine code behind new
mstar pr-reviewcommands:post(builds the GitHub Review plan viaplanReviewPost— owner/repo parsed from the PR url only, neverheadRepository;eventlocked to the literalCOMMENT;commit_id = headRefOid; at-most-once 422 fallback folding exactly the rejected inline comments into the body),worktree-setup/worktree-cleanup(collision-free branch naming viapickReviewBranchName, explicit-refspec fetches,preflightChangesetgates where untracked-only changesets count, sidecar-guarded cleanup that removes the tree, prunes and deletes exactly the recorded review branch behind the report-saved gate),size(prReviewSizing~100/~300/~1000 bands + Stage-1 seat plan, split advice, file-size watch) andseat-prompt(prReviewSeatPromptskeletons: Hard Rules 4/5 verbatim, payload-return contract, no-verdict/no-post clauses,<domain>-<seat>slugs). Finding docs gained a programmatic hook:mstar lint --type findingbacked byvalidateFindingDoc(### [CATEGORY-NN]numbering, category/effort/risk/confidence enums, evidencepath:lineshape; Merge-class presence/enum/placement with--pr-variant). - Drop the root
postinstallhook (opencode:bundle-assets&&dsh:bundle-assets) flagged by static security scanning as an install-time code-execution surface ([high] R10). Asset mirrors are now synced only when explicitly runningbun run <pkg>:bundle-assetsor via each package's build/prepublish chain.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.4.0.
[3.3.0] - 2026-08-25
Harness
mstar-auditreview-process hardening:pr-review.mdgains input modes for uncommitted working-tree and single-commit reviews, sizing bands with change-shape escalation (schema/API/framework/performance/security surfaces), originating-spec discovery (score every acceptance criterion against the diff), a standards precedence and twelve-smell baseline with binding rules, presumptive-structural merge classes, and a matter-of-fact tone contract;audit-playbook.mdgains Chesterton's Fence / over-simplification guards and dependency add/upgrade discipline;codebase-audit.mdrequires behavior-preservation gates on simplification plans;finding-format.mdgains remedy-named Fix sketches (structural remedies).- Added
mstar harness scaffold [path](default cwd): one-shot harness bootstrap — enginescaffoldHarnessnow also prebuildsprojects/_default/(roadmap.mdwith validvalidateRoadmapfrontmatter +## Directionplaceholder, and an emptyresiduals.jsonpassingvalidateProjectRegister); the CLI appends the canonical.gitignoresnippet when absent, writes a minimal.mstar/AGENTS.mdwhen absent, and prints a created/skipped summary. Idempotent — re-running on an initialized tree only creates missing pieces. mstar harness scaffoldis now.mstarc-aware: it scaffolds into the.mstarc-declaredharness_dir(or theMSTAR_HARNESS_DIRoverride), landsprojects/_default/under the resolvedproject_dir, and prints the resolved harness/project dirs. The canonical.gitignoresnippet is appended only for the default.mstar/layout — custom harness layouts skip it. The fence now splices.mstar/**BEFORE existing!.mstar/…re-includes when the broad rule is missing (gitignore last-match-wins), keeping the re-includes effective.mstar path resolvefailure guidance now points tomstar harness scaffoldinstead ofmstar init.mstar-audit: newreferences/security-review.mddeep-dive for the Security category — exploitability bar (concrete attack scenarios), attacker-vs-server-controlled input triage, framework-mitigated false-positive tables, cross-file data-flow sweep, hunting angles, and expanded surfaces (auth/session, business logic, client-side, AI/LLM, supply chain/CI-CD, infra configs, privacy retention). Playbook §2 rewired to point at it; audit index template gains Needs verification and Hardening & checked notes sections so every security disposition has a defined landing place; third-party provenance consolidated in rootATTRIBUTION.md(skill files stay link-free).mstar-rolesrole references are now identity-first: mission, scope, and NEVER rules lead each leaf role file; topicmstar-*skills moved from top-of-file "Required Skill Dependencies" into a trailing Skill Preset (PM-Activated) section. Skills are presets the PM controls via a new canonical AssignmentSkill presets:field — omitted on an implementation / QC / QA round defaults to the role'sstandardpreset; explicitnone(or a trivial route) runs identity-only without topic skills. QC/QA role-owned procedure files (references/qc-specialist/*,acceptance-gate.md) are never preset-gated.project-managerkeeps its required-reading list unchanged as core orchestrator.- dsh plugin: the fallbacks seed mandatory-load line now matches the preset model —
Load mstar-roles (references/<role-id>.md) first — identity comes before skills; load topic skills only when the Assignment activates them via its Skill presets field.(mirrored intests/fallbacks-seeds.spec.tsand both READMEs; pairing hashes re-recorded).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.3.0.
[3.2.6] - 2026-08-24
Harness
- PR deep-review report template hardening: the
Considered & rejectedplaceholder no longer embeds the bullet dash inside angle brackets (a posted review rendered literal<finding>wrappers verbatim); rejected entries now use- **<short title>**: rejected — <reason>with an explicit "never render brackets" rule stated at the template top; empty Plan-to-fix sections collapse to a barenoneinstead of prose.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.6.
[3.2.5] - 2026-08-24
Harness
- PR deep-review lists every finding by default: the
[full]flag is removed from/pr-deep-review— complete findings (all merge classes, nits included) are now always listed in the chat output and GitHub Review; nothing is truncated. README command signature updated.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.5.
[3.2.4] - 2026-08-24
Harness
- PR deep-review local report archive: each
pr-variant review now saves a durable markdown report under{PROJECT_DIR}/<project-id>/reports/pr-review/(_defaultwhen project-less) — YAML frontmatter metadata (PR, head SHA, verdict, score, tally, review URL) plus the posted GitHub Review body verbatim; bare branch/diff reviews archive the chat display instead. Written via the primary checkout (never inside the review worktree), saved before worktree cleanup regardless of POST outcome; new- report:field in the Completion Report output shape. - Docs describe current state only: removed truly retired-path prose from runtime skills —
{PLAN_DIR}/reports/(legacy report location; no code or migration path references it) and the retired{HARNESS_DIR}/notes.json(no code creates or reads it; runtime notes live inworkflows/<id>/notes.jsonl). Compat behaviors verified against shipped code and kept:designs/read-only{SPECS_DIR}fallback (resolveSpecsDir), legacy flat delivery-compass read/migrate directives,.agents/discovery chain, and all v1→v2 migration guards.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.4.
[3.2.3] - 2026-08-24
Harness
- PR deep-review report template: the GitHub Review body now follows a fixed three-section report — Verdict (verdict token + confidence score + four-class emoji findings table), Review (PR summary, ranked findings with merge class, linked-issue AC, verified checks, considered & rejected), and a collapsible Plan to fix section holding the fix plan in a fenced ```md block. Chat display contract unchanged.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.3.
[3.2.2] - 2026-08-24
Harness
- Dropped the root changelog Published harness surfaces version table. Every published surface already ships the same version, so the header table and the release-prep step that rewrote it are gone. Per-release
### Version alignmentblocks are unchanged. mstar-harness-coreguardrail is now host-neutral: "do not modifyopencode.json, credentials, orsecrets.envwithout user consent" → "do not modify host config files and user credentials without user consent" — the shared skill no longer names a single host's config file./pr-deep-reviewnow emits a merge signal computed from the finding tally: the middle verdict token is renamedneeds review→needs fixes, each accepted PR finding carries aMerge class(must-fix|should-fix|nit), and the output shape gains- score_pct:(derived,max(0, 100 - 40*must_fix - 15*should_fix - 3*nit - 10*unverified), floor 0) and- tally:with four counts. The verdict is derived from the tally (must-fix ≥ 1→blocked, elseshould-fix ≥ 1→needs fixes, elseship it); leftover linked-issueunmetACs incrementshould_fix(ormust_fixwhen unsafe-to-ship) before that mapping and are not extra findings.score_pctis display-only and never overrides it. Chat and the GitHub Reviewbodyopen with{verdict} · {score_pct}%plus the tally line;eventremainsCOMMENT. The list cut now applies to nits only — everymust-fix/should-fixis listed. Formula and rules are SSOT'd inskills/mstar-audit/references/pr-review.md§ Verdict synthesis / Tally and derived score.- Release prep now opens a new
release vX.Y.ZPR when the previous one for that branch is closed or merged. It no longer treatsgh pr viewsuccess on a closed PR as “update in place” (that left #131 closed and no new 3.2.2 PR).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.2.
[3.2.1] - 2026-08-24
Harness
/pr-deep-reviewnow requires posting a GitHub Review when a PR number exists: theprvariant always leavesCOMMENT-event comments on the PR (inline comments on diff-line findings, summary body folds any already-written follow-up plans into a<details>section), and the output shape gains a- comments:field with the review URL. Posting procedure is SSOT'd inskills/mstar-audit/references/pr-review.md§ Comment posting;mstar-auditHard Rule 2 and the Audit-Mode contract now carve out only this required GitHub Review POST (Git stays read-only, no commits).code-reviewergains Mode C (PR review) loadingpr-review.md.commands/pr-deep-review.mddrops the "optional / separate explicit step" wording. Chat-only verdict is no longer complete for PR seats.- README Use section regrouped into three entry shapes: General (without iteration), Iteration, and Audit & review — the third groups
/codebase-auditand/pr-deep-reviewinto one table under one heading, with a shared read-only advisory intro naming bothmstar-auditvariants (both were previously parallel top-level sections; per-row SSOT tails folded into the intro). Bilingual counterpart applied (README.md / README_CN.md).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.1.
[3.2.0] - 2026-08-23
Harness
- Hoisted the shared plan-output contract out of
references/codebase-audit.mdinto themstar-auditSKILL.md core as## Plan output (all variants): write-only-on-selection boundary,{PLAN_DIR}/audit-<date>/layout (README index + numbered plan files),plan.main.md+ plan-quality-bar enrichment, Status-block fields + status values,git rev-parse --short HEADcommit stamp, and the four handoff steps (promote / state machine / fast-track Prepare / SDD or inline dispatch). Both variants (codebase-audit,pr-review) and both commands (/codebase-audit,/pr-deep-review) now cite the core section;pr-review.md§ Plan output carries nocodebase-audit.mdcites. Engine audit Status-block and scaffold validators repoint their spec cites tomstar-audit SKILL.md § Plan output, andpr-review.md§ Evidence rules now citesfinding-format.md§ What disqualifies a finding. Closes residual R1 (hoist when a third variant arrives — that condition is now met by theprvariant) early. - Restructured
mstar-auditinto a variant carrier: SKILL.md now holds the common core (hard rules, recon, attack-and-vet discipline, variant dispatch table, output-format contract), with full codebase-audit detail moved verbatim toreferences/codebase-audit.md(Phase 2 category fan-out + subagent-prompt requirements, effort table, scope variants, Phase 4 plan writing, audit index / plan-file output templates,mstar audit scaffoldcallout, handoff to execution).pr-deep-reviewno longer loads full-audit-only content; pointer surfaces (references/pr-review.md, both commands,code-reviewerrole,mstar-harness-coreindex) cite the common core + the correct variant reference. - Added a generic deep PR review command (
pr-deep-review) +mstar-auditprscope variant: worktree-isolated, evidence-first, verdict-producing review with concern lenses, linked-issue hygiene, and batch sibling-PR support. - Renamed
mstar-plan-conventions→mstar-conventionsandmstar-plan-artifacts→mstar-artifacts: the two skills are general harness conventions (paths, artifacts), not plan-specific, so theplan-prefix was dropped. All live surfaces swept (skills/**load orders, index rows and cross-cites,commands/**,AGENTS.md,README.md+README_CN.mdskill tables,docs/cli.md,.cursor/routing-eval fixtures + local validation,scripts/guards, engine/dsh/cli source comments and path literals, dsh test expectations). Historical changelogs and engine test-fixture prose are untouched — old names there are correct as historical record.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.2.0.
[3.1.3] - 2026-08-23
Harness
mstar audit promote(CLI): selected audit plans can now enter the v2 workflow lifecycle astype: plan—promoteAuditPlanswrites the workflow snapshot ({HARNESS_DIR}/workflows/<id>/snapshot.json, one TodoPlanRowper selected plan,id+title+file) before registering the workflow in rootstatus.json, so the snapshot-before-register invariant holds.--plansaccepts the README Plan column id, stem, or basename;--workflowdefaults to theaudit-<date>dir basename;--harnessdefaults to the resolved{HARNESS_DIR}. Promote stays an explicit post-selection action — the audit itself never registers (advisory contract preserved).- Engine:
promoteAuditPlansexported from@mstar-harness/engine(titles come from the audit README index, falling back toreadPlanFileSummary). - Harness skills:
mstar-auditHandoff step 1 now namesmstar audit promote <audit-dir> --plans <ids>as the first-class v2 path (manualmstar-plan-artifactswording kept as fallback). - Unified the three CLI
execFileSyncwrappers into a singlerunCliCommandhelper (packages/cli/src/exec.ts):runCommand(shared-install),runOmp(omp), andrunDsh(dsh) are now thin calls with today's defaults — no public signature or behavior change. Timeout / env / dry-run can no longer drift independently across the wrappers;runDshkeeps itsenv: process.env+timeoutcontract (dsh PATH injection in tests). - Engine git env-pin regression test (test-only):
packages/engine/test/exec-env.test.tsnow detects any gitexecFileSynccall whose options carry an empty env (env: {}/env: { PATH: "" }) acrosspath.ts/sdd.ts/worktree.ts— production env handling is untouched. - dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.1-rc.2line (^0.1.1-rc.2;@deepseek-ai/cordisstays^4.0.1;dsh-llm-fallbacksstays^0.3.0— its 0.3.3 peers are^0.1.1-rc.1, satisfied by the rc.2 line). Verified against the0.1.1-rc.1 → 0.1.1-rc.2diff (deepseek-harness @b150a55): the change is the unified image/Files request pipeline plus the permission-preset copy-and-default revert — the plugin consumes none of those surfaces (no image region reads, no attachment request payloads, no permission-preset default-copy helpers; the onlypreset/permissionreferences are thedsh-llm-fallbacksrole-seed registry and a dsh-core/permissioncommand precedent), so zero adapter-code changes. Lock re-resolved to a single0.1.1-rc.2line — zero0.1.1-rc.1(and older) copies anywhere, nodsh-client-web-reactholdover. - Engine public surface:
redactSecretsis no longer re-exported from the@mstar-harness/enginebarrel (breaking for downstream imports of the bare package); the audit-module utility is now reachable via the new@mstar-harness/engine/src/auditsubpath, and theRedactResult/SecretFindingtypes stay in the barrel. Barrel importers must migrate to the subpath. - dsh: the audit seam (
packages/dsh/src/gates/seams.ts) now importsredactSecretsfrom the./src/auditsubpath instead of the barrel. - Thinned the iteration slash commands (
/iteration-start,/iteration-drive,/iteration-loop) into wrappers: shared PM invariants, session todos, the continuous-execution STOP list, and the assignment-preflight bash (warn-only +enforcement: hardfail-fast) now live once inskills/mstar-iteration/references/command-shared-invariants.md, andmstar-iterationpoints at it. Frontmatter (name/description/agent/input) and each command's unique bits (start grill-me, drive helper discovery, loop do-not-load-grill-me) are unchanged. - Trigger-strong
mstar-iterationdescription: the skill now loads for "start an iteration" / "drive the iteration" / "run an autonomous loop" even when no/iteration-*slash command fires; phase labels no longer treat command names as phase names. - Skill pointer + callout hygiene:
mstar-auditHandoff step 1 now registers the workflow + plan rows in{WORKFLOW_DIR}/<id>/snapshot.json(rootstatus.jsonv2 holds the workflows registry only); the plan-conventions R# sentence names{PROJECT_DIR}/<id>/residuals.jsonas the open-state SSOT. - Load-condition fix:
mstar-design-mdis now an on-demand skill (UI / design-token plans only) in thearchitectandproduct-managerrole references;mstar-compound-refreshno longer claims STRATEGY.md creation (delegated tomstar-strategy). - Callout-dedup guard:
scripts/drift-lint.tsgainscheckCalloutDuplication— normalized (whitespace + bilingual-variant) Engine-check callout bodies now fail when duplicated across files; lease (mstar-plan-artifacts) and review-seats (mstar-review-qc) callouts are canonical with one-line pointers elsewhere. - Shared anti-recursion NEVER: the five conceptual anti-recursion bullets now live once in
_shared/leaf-executor-core.mdwith role-specific pointers kept in each role reference. - Strategy thin:
mstar-strategycreate/maintain prose is replaced by a pointer toproject-knowledge-bootstrap.mdPhase 2 (six-section table + engine check retained). - Knowledge usage gate: harness entry, iteration §1.1,
iteration-startResearch, phase-gates implement, andknowledge-and-designs.mdnow discover{KNOWLEDGE_DIR}/README.mdby default — implementers scan the index and read relevant Active rows even whenplans[].metadatahas no knowledge link (registered metadata links stay mandatory). - No
audit promoteCLI is added (a separate promote plan owns it). - audit-004 validator CLI surface closure verification: the five validator commands (
mstar status tech-debt,mstar status findings-cleanup <plan-id>,mstar lease verify-integration,mstar worktree qc-alignment,mstar host skill-root) were smoke-verified runnable against the repo fixtures from the dist build (node packages/cli/dist/mstar-harness.js), each exiting per its documented semantics; no command code changed. Residual20260816-audit-004-validator-cli-surfacemoves to in-placelifecycle: resolvedwith the smoke evidence referenced.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.1.3.
[3.1.2] - 2026-08-21
Harness
- Anti-recursion fails closed on an empty host binding:
dispatch.antiRecursionPrechecknow returns a criticaldispatch.anti-recursion.empty-bindingviolation when the host role-binding field (omp task entry agent/ opencodesubagent/ cursorsubagent_type/ dshdispatchBinding) is empty, omitted, or whitespace-only — the host cannot prove the dispatching agent is not recursing, so the dispatch must not proceed as if the NEVER red line held.composeDispatchGateno longer skips the precheck for empty bindings (theif (agent !== "")skip is removed); the precheck is the single decision point and runs for every Assignment-shaped text, including read-only (scout/explore) Assignments (no carve-out). A set binding equal toExecute askeeps the existing criticaldispatch.anti-recursion.self-type; a set binding with an emptyExecute asstays ok on the anti-recursion leg (field presence remainsvalidateAssignmentFields' job). - OpenCode surface:
validateDispatchAssignment(viacomposeDispatchGate) now warnsdispatch.anti-recursion.empty-bindingat critical severity when the task tool carries nosubagent/subagent_typekey; under the Assignment's own**Enforcement**: hardthe empty binding hard-blocks (hardBlocked: true). Nosrcchange — the hook already flows the default""binding through the engine composition. - dsh surface:
dispatchGateCorepassesconfig.dispatchBinding ?? ''into the engine composition, so an unset binding now emitsdispatch.anti-recursion.empty-binding(critical) on every Assignment-shaped dispatch — advisory in warn mode,PreToolDecision { kind: 'deny' }under hard. The boot-time warn string no longer claims the precheck is "skipped": an unsetdispatchBindingunder hard enforcement now fails closed until the binding is set. The ZoddispatchBindingschema is untouched. - dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.1-rc.1line (^0.1.1-rc.1;@deepseek-ai/cordisstays^4.0.1;dsh-llm-fallbacksre-aligned^0.2.0→^0.3.0so its peers land on^0.1.1-rc.1). Verified against the0.1.0-rc.8 → 0.1.1-rc.1diff (deepseek-harness @528c682e06): every consumed server-side package changed docs/package.json only, client-side consumed surface changed additively, and the__ModuleLoader__handoff survives — zero adapter-code changes. No checklist seam (credentials records, pi-ai auth, index-inject, session-projection) is consumed. Lock re-resolved to a single0.1.1-rc.1line — zero0.1.0-rc.8copies anywhere, and thedsh-client-web-reactrc.7 holdover is eliminated (fallbacks 0.3.3 dropped that peer);@oh-my-pi/*/@bufbuild/protobufresolutions are unchanged from the previous lock. No previously blocked mstar-dsh goals were unblocked by this line. - Plan-Writing Path Gate closes the symlink-escape gap:
assertPlanWritingPathnow compares the canonical path of an existing plan file against the canonical{PLAN_DIR}(the plans dir itself may legitimately be a symlink). A plan path that lexically sits under{PLAN_DIR}butrealpaths outside it now returns a highplan-path.symlink-escapeviolation instead ofplan-path.ok; internal aliases (plans/alias.md→plans/real.md) and whole-dirplans/symlink layouts still pass. Missing files (first write) stay lexical-only, and unexpected fs errors (EACCES etc.) degrade to the lexical verdict — the gate never throws.plan-path.outside-plan-dirandplan-path.no-harnesssemantics are unchanged.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.1.2.
[3.1.1] - 2026-08-20
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.1.1.
[3.1.0] - 2026-08-20
Harness
- Agent-flow ledger tail read:
readAgentFlownow reads large ledgers (above the 64 KiB read gate) as a bounded latest-first tail — seek from EOF, align the window start to a line boundary, and double the window backward until it holdslimitcomplete lines — so the catalog pays O(window) at the byte layer instead of parsing every historical line. Small ledgers keep the existing full-read path verbatim; both paths feed the same parse funnel, so tail/full parity is structural. Write path (append + 500-line truncation under the per-workflow lock) is untouched. - Project-scoped research corpus: theme research (surveys, epic roadmaps, third-party notes) now lives under
{PROJECT_DIR}/<id>/references/— named as current bymstar-project-governance(Scope table),artifact-storage-paths.md(new path-SSOT row), andknowledge-and-designs.md(boundary: research ≠ specs ≠ knowledge ≠ iteration guides). - Engine filename listing:
PROJECT_REFERENCES_DIR+listProjectReferenceFiles(projectDir)inpackages/engine/src/project.ts— sorted relative paths (root files + one-level subdirectory files; skipsroadmap.md/residuals.jsonstrays; missing dir →[]); directory metadata only, never file bodies, never a markdown schema.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.1.0.
[3.0.1] - 2026-08-20
Harness
- CI runs dsh test + typecheck again: the link-farm era
dsh:linkcall and the source-tree availability gate (DSH_SOURCE_DIR/~/.dsh/source/current) are gone — the rc.8 seam packages resolve from the public npm registry, so the dsh suite runs unconditionally in CI. The install e2e specs keep their self-skip when nodshbin is on PATH. Test fixtures updated for the v3.0.0MstarHarnessState.projectfield (5 sites across 4 specs), which had lefttypecheck:testsred on main.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.0.1.
[3.0.0] - 2026-08-20
Harness
- dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.0-rc.8line (^0.1.0-rc.8;@deepseek-ai/cordisstays^4.0.1). Local rc.7→rc.8 source review of consumed seams found no adapter-code break: the only consumed-surface change isdsh-commandsCommandRuntime.executegaining a requiredimagesargument (plugin registrations unaffected; test call sites updated) and an additiveCommandInvocation.attachmentsfield. Lock freshly resolved to a single rc.8 hoist (dsh-client-web-reactstays at rc.7 — the latest published);dsh-llm-fallbacksmoved 0.2.0 → 0.2.2 with the 9-key service-surface drift STOP gate updated in kind. - Harness dir is uniformly
.mstar/across the repo: maintenance docs moved under.mstar/docs/, the legacy maintenance root is gone, and probe/override docs no longer reference a legacy root name.harnessDir/MSTAR_HARNESS_DIRsemantics unchanged — explicit override wins; probe order stays.mstar/→.agents/→.plans//plans/. drift-lintroadmap-citation exemption now recognizes.mstar/-prefixed citations (gitignored roadmap/ADR docs); engine/dsh/opencode source citations updated to the new path..mstarcnow supports every harness directory symbol under[config]:plan_dir,sdd_dir(per-plan base),iteration_dir,knowledge_dir,specs_dir(authoritative — skips the candidate chain) alongsideharness_dir. The engine resolvers (resolvePlanDir/resolveSddDir/resolveIterationDir/resolveKnowledgeDir/resolveSpecsDir) honor them from the nearest.mstarcat the harness dir or its parent;mstar_path_resolvereports the knowledge dir too..mstarc[config] enforcement=hard|softdeclares the repo hard-gate policy (invalid values ignored). Precedence: explicit Config > AssignmentEnforcement: hardheader flag (dispatch only) >.mstarc> iteration compass > warn-only —.mstarcsoftis a local rollback against a hard compass,hardhardens flag-less dispatches and gates. New engineresolveMstarcEnforcement/resolveRepoEnforcement; dsh gates, opencode hook and omp hook now compose the repo policy.- New gitignored repo-local config
.mstarc([config] harness_dir=<dir>) lets repos with a non-default harness root declare it programmatically —resolveHarnessDirhonors it above probing (explicitopts.harnessDir/MSTAR_HARNESS_DIRstill win),sddWorkspacefollows, and the canonical.gitignoresnippets (engine / CLI init fence / plan-conventions) ignore.mstarcby default. Resolution order SSOT updated inmstar-plan-conventions§ {HARNESS_DIR} 解析顺序. - Tracked
*.ts/*.mdfiles no longer cite gitignored harness artifacts (paths under.mstar/— status.json, plans/, sdd/, iterations/, knowledge/, references/, archived/, docs/): engine/host/test comments and docs now reference{HARNESS_DIR}/ the consumer default or drop the local path; the drift-lint.mstar/-citation exemption is removed (the guard now enforces the rule), and AGENTS.md codifies it. - v3 workflow lifecycle schema (engine): lifecycle state moved from root
status.jsonplans[]/residual_findingsinto per-workflow snapshots ({HARNESS_DIR}/workflows/<id>/snapshot.json,validateWorkflowSnapshot) and project registers ({HARNESS_DIR}/projects/<id>/residuals.json,validateProjectRegister); the v2 root keeps onlyversion/updated_at/ activeworkflows[]. New dir resolversresolveWorkflowDir/resolveProjectDir. mstar migrate(CLI): one-shot v1→v2 tree migration (migrateHarnessTree/applyMigratePlan) — archives the v1 root toarchived/status.v1.json, lifts every lifecycle intoworkflows/<id>/snapshot.json, seeds the project register + roadmap, replaces the root with the v2 commit point; idempotent re-run no-op;--dry-runprints the step plan and surfaces apply-time validator violations as warnings; exit codes 0/1/2;--pathdefaults to the resolved{HARNESS_DIR}.- CLI/tools/hook hard cutover to v2 inputs:
status validate(v2 root or snapshot),status tech-debt/status findings-cleanup(project register),lease verify/lease verify-integration/iteration gate/worktree check(workflow snapshot via--workflow <id>),path resolve(+ workflow/project dirs);status archive-residualsremoved (error stub names the register close flow);tools/mstar_*and the omp/opencode Gate 1 hooks validate the three v3 coordination documents, with lazy-loaded P1-only engine exports so a stale published engine degrades to a warning instead of dropping the hook/tool. - Skills v2 surfaces: retired
done-compaction/plans-done/notes.emptyartifacts and scrubbed all references; rewrote status/residual/lease/convention surfaces acrossmstar-*skills to v2 addresses (workflows/<id>/snapshot.json,projects/<id>/residuals.json,mstar status validate/findings-cleanup/tech-debt,mstar lease verify --workflow <id>,mstar iteration gate --workflow <id>). mstar-engine-legacy(new): conditional contract archive for engine-absent hosts — status v1→v2 field history, lease protocol, per-host QC seat N=3/N=1 restatements, anti-recursion checklists, engine-check boilerplate; not loaded when engine constraints are active.mstar-project-governance(new):projects/<id>/roadmap.mdauthoring conventions (frontmatter schema + body conventions, warnings-only) andresiduals.jsonregister lifecycle (open → verified close in place, severity enum, provenance fields,_defaultfallback); schema verbatim with the engineproject.tsvalidators.- Docs sync: README.md / README_CN.md layout description and workflow diagram updated to v2 state surfaces (workflow snapshot / project register;
workflow_dir/project_dir.mstarckeys); routing-eval scenario set re-pointed to v2 artifact addresses.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 3.0.0.
[2.4.1] - 2026-08-17
Harness
- dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.0-rc.7line (^0.1.0-rc.7;@deepseek-ai/cordisstays^4.0.1). Local rc.6→rc.7 source review of consumed seams found no adapter-code break (createUserMessage/ToolExecution/PreToolDecision/PreStepDecision/FsWriteIntent/ dump-configdisabled: trueunchanged;apps/cli/srcversion-only). Lock purged every entry below0.1.0-rc.7— 62 unique@deepseek-ai/dsh-*packages, single hoisted copy each, 0 nested copies. Rootdependenciesstays engine-only. - README readability: Install Command cells wrap with
<br>;npm i -g @mstar-harness/cliis a standalone fenced command; Iteration / Codebase audit tables use Command (full signatures) and wrap When.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.4.1.
[2.4.0] - 2026-08-17
Changed
- dsh install target:
npx @mstar-harness/cli init --target dshnow installs the full dsh capability in one command — it runs two independentdsh plugin --profile web addcalls (@mstar-harness/dshfirst, thendsh-llm-fallbacks; never folded into a patch file).doctor --target dshreports each plugin row asuninstalled/disabled/mountedand exits non-zero on any uninstalled or disabled row.--no-fallbacks(dsh target only) skips thedsh-llm-fallbacksrow;--dry-runpreviews without probing or executing; re-runs are idempotent (already-installed rows skipped). README pair,INSTALL.md, anddocs/cli.mdupdated. - CLI
mstarbin alias:@mstar-harness/clinow installs a second executable,mstar, alongside the canonicalmstar-harness— both map to the samedist/mstar-harness.jsentry, so the two names are interchangeable (pinned by a new manifest test).commands/citations now usemstar-harness(version-proof: the long name exists in every released version; the short alias ships with this release), anddocs/cli.mdplus the README pair note the alias. Caution:mstaris a shared bin namespace — an unrelated third-party npm package namedmstarclaims the same command name, so barenpx mstar …only resolves to this CLI where@mstar-harness/cliis installed; keep the canonicalmstar-harnessin scripts and use the long name on any collision. Existing global installs obtain themstarshim on their next upgrade:npm i -g @mstar-harness/cli@latest(or the bun equivalent) re-links all declared bins. - Drift-lint bin-prefix guard:
validation:driftnow checks the binary prefix of every backticked CLI citation in Engine-check callouts against the declaredbinnames frompackages/cli/package.json(the manifest is SSOT), so citing a nonexistent executable (e.g. a typo likemstarr) fails drift-lint instead of silently passing while the subcommand paths validate.
Harness
- dsh full support (docs): the
packages/dshREADME triple's Install section now documents the one-command CLI entry (init --target dsh— the twodsh plugin --profile web addinstalls, orchestrated) and what a user gets zero-config once both rows are installed: the 13mode: subagentmstar role seeds with mirror-default personas (revertible in settings; runtime advisory reports overrides), plus a fresh-publishminimumReleaseAgewindow note (re-run init or pin the version). The installed-deployment e2e closes the loop: a real CLI install into a tempDSH_HOME, booted from the installed artifacts, asserts all 13 roles seeded with non-empty personas. Root README pair adds the dsh full-support one-liner. - Five-question lint runtime mode:
lintFiveQuestion(body, mode?)now supportsmode: "runtime"(default"authoring", non-breaking) with a lockedRUNTIME_HEADING_ALIASEStable — heading synonyms (e.g.process/playbookfor Workflow,hard rules/门禁for Decision Rules,output format/证据for Evidence,dependencies/关系for References) that count as the canonical sections for shipped topic skills.mstar skill lintselects runtime mode formstar-*skill dirs exceptmstar-skill-authoring(always authoring/strict);mstar-harness-coreprints an explicit exempt row for the five-question checklist. Greenfield (authoring) lint still demands canonical headings. - Runtime corpus alignment: 15 shipped
mstar-*topic skills gained minimal annotations/thin sections (Evidence ×13, Workflow ×9, References ×6, plusmstar-host's load-order/decision-rules gaps) derived from existing material — every runtime skill now passes runtime-mode five-question lint;mstar-auditneeded zero edits.skills/mstar-skill-authoring/SKILL.mddocuments the alias map (runtime-mode semantics stay SSOT: aliases exempt mechanical lint, not content). - drift-lint Guard 5 (five-question corpus smoke):
bun run validation:driftnow loads every shipped runtimeskills/mstar-*/SKILL.md(excludingmstar-harness-coreandmstar-skill-authoring), strips frontmatter, and runslintFiveQuestionin runtime mode — deleting a Step-3 aligned heading or losing runtime alias coverage fails CI (audit finding 5). mstar-skill-authoringstrict self-lint: the fence-aware heading scan exposed the standard's ownSKILL.mdas a fence false-green (five-question coverage came only from the## 默认 Body 结构template code fence), so real## Workflow/## 6 条作者原则(Decision Rules,必须遵守)/## 验证门控(Evidence,原则 4 + 6)sections now answer the five questions honestly andmstar skill lint skills/mstar-skill-authoringpasses strict (authoring) mode.- Fail-loud fragment validation:
scripts/prepare-release.tsnow validates each changelog fragment'spackages:tokens against the release-surface enum (root | cli | opencode | engine | dsh). A typo'd or unknown token (e.g.clii,scripts) previously matched no changelog target and silently dropped the fragment's bullets from every changelog; release prep now prints one error line per bad token to stderr and exits 1 before any changelog mutation or fragment archival.validateFragmentPackagesis exported for tests. mstar roles validate: new CLI command exposing the mstar-roles skill-dir checks — a thin mirror of the dsh seamvalidateRolesState:validateRoleMappingon the roles dir pluslintLoadOrderover every siblingmstar-*skill, with unreadable siblings skipped best-effort. Defaults resolve through the project-root path resolution (--roles-dir→skills/mstar-roles,--skills-dir→ its parent); exit 0 prints OK + counts, violations exit 1 with one row each.skills/mstar-roles/SKILL.mdengine-check callout now cites the CLI command.- drift-lint Guard 4: roles/load-order corpus guard in
scripts/drift-lint.ts(plan 003 Task 2) —lintLoadOrderover everyskills/mstar-*/SKILL.mdtext (each must declaremstar-harness-corein a Load Order / First action section) plusvalidateRoleMappingonskills/mstar-roles(mapping / parameter tables must resolve against the on-diskreferences/*.mdlayout); CI drift-lint now fails on role-table or load-order regressions.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.4.0.
[2.3.0] - 2026-08-16
Harness
- SDD fix-round mechanics:
mstar-sddgains four mechanical rules for PM fix-wave dispatch and close-out — an unverified round counts (a fix round without verification evidence — reviewer not confirmed / report not on disk — is not clean; re-check and count the round, never enter the convergence branch), full re-entry (the next fix dispatch carries all open findings, including last round's unverified items; never slice a subset), capped cross-round excerpt (from round ≥2 the dispatch brief carries an excerpt of prior rounds' findings and dispositions — advisory ~500 words/round, ~1500 total, suggested values not hard limits), and honest non-convergence (open findings at wave close are listed in detail with an explicit re-feed-to-next-round or transfer-to-residual disposition — never silently closed). Folds Candidate C5 intomstar-sddSKILL.md "After all tasks" +references/file-handoffs.mdcross-reference (the per-task fix loop applies the same mechanics). - Residual fail-loud handoff contract:
mstar-plan-artifactsstatus-and-residuals.mdnow requires findings to pass engine validation before R# registration —validateResidualper entry andvalidateStatusfor the whole file; malformed entries (non-object, missing any of the nine required fields id/title/severity/source/scope/decision/owner/target/tracking, or severity outside the enum) are rejected — fix and rewrite, never silent pass-through, downgrade-write, or write-then-patch. Folds Candidate C6; the architect-verified D-3 branch (covered-but-untested) is closed by backfilled non-object rejection regression tests inpackages/engineat both thevalidateResiduallevel and thevalidateStatusaggregate level (engine suite 658 pass / 0 fail) — zero source diff, no new public API. - CLI
dispatch validatenon-ASCII literal fix: bun-executed CLI bundles misdecode raw multi-byte UTF-8 in regex/string literals, so a legalBranch policy: direct on main — <reason>(em-dash) was reported as two false violations. Source literals across 20packages/engine+packages/clisrc files are escaped to\uXXXX, a post-build dist escaper guarantees bundle-level ASCII (bun build re-normalizes string escapes), a bundle-smoke regression test covers em-dash + ASCII separators, andbun run lint:ascii-literalsplus a CI step guard against recurrence. The guard coverspackages/engine+packages/clisource and the CLI dist bundle; the opencode dist bundle is not wired to the escaper — it is not run as a large bun bundle. - Regression-fixation paired-evidence reference: new
mstar-skill-authoring/references/regression-fixation.md— real artifact as test subject (built bundle / command sequences, not a source import), mock host hooks, dual-path assertion consistency, and fix solidification (reproduce → FAIL → fix → PASS → into the regression set); zero external dependencies, explicitly an optional heavy weapon (default stays P6 before/after + application case). SKILL.md gains the References pointer and syncs its verdict enum to the 4-value SSOT (Approve | Request Changes | Needs Discussion | Unconfirmed). - Dataflow-directed debugging protocol:
mstar-coding-behavior§4 Debugging gains a compact diagnosis procedure — map the data flow before judging (input → processing → storage → output, who writes/reads at each step; a bug is a state deviation from expectation at a flow point), four verifiable cross-checks (re-run the repro / log comparison / input-output comparison / dual-path comparison — a hypothesis that cannot be verified on the spot is not a conclusion), and falsify the fix (after fixing, re-run the original repro and compare with expectation; report "verification failed" explicitly instead of pretending success) — cross-referencing, not restating, the existing root-cause and repro-test bullets. - QC report evidence contract +
Unconfirmedverdict:qc-specialistreport-template findings entries now requireVerification+Expected vs observedon every severity class — Critical/Warning may use the four cross-checks (or adiff/read/grepanchor), Suggestion isdiff/read/grepanchor only — backed by two hard rules (no verifiable cross-check → do not report the finding; a failed evidence channel is not "no problem" — mark the affected scope Unconfirmed); the verdict enum gainsUnconfirmedfor evidence-channel failure;deep-review-lenses.mdnow requires every lens finding to carry a diff/read/grep anchor + expected vs observed (no anchor, no report). - Audit red-team attack pass before vet:
mstar-auditPhase 3 gains an attack sub-step before the human vet — take the top candidate findings (by leverage; count scales to finding volume) and run a three-way attack on each (counter-example / simpler explanation / evidence verifiability); survivors pass to vet unchanged, refuted findings are dropped and recorded in the index's "considered and rejected" section (- <finding>: not worth doing because <one line>), hallucinated claims surfaced by the attack are discarded and logged as red-team record lines (never into the findings table, and they do not occupy a "considered and rejected" slot), and findings the attack did not reach are treated as unreviewed and kept for vet — with a one-line boundary reference to the vet step (the attack decides whether a claim stands on its face; vet keeps open-cited-code confirmation and by-design / mis-attribution / duplicate disposition). - QC consolidated coverage semantics +
Unconfirmedpropagation:mstar-review-qc's PM consolidated section now requires — unmentioned = unreviewed (a finding / severity item / claim not raised by any seat must be markedunreviewedand routed to targeted re-review, never silently treated as covered); zero injection at the consolidation layer (every consolidated entry must trace to aqcN.md; the PM's own observations go to a separate Status Update); and any seat verdictUnconfirmed→ the gate decision must not beApproveuntil the evidence gap is closed (existing targeted re-review path — sameqcN.md## Revalidationin-place verdict update; no new re-review form, N rules unchanged). The PMConsolidated Decision Templateverdict enum is synced to the 4-value set (Approve | Request Changes | Needs Discussion | Unconfirmed). - Added a DSHFIND badge to the README header linking to the plugin directory listing.
- Ephemeral-citation lint (engine): new
findEphemeralCitationsscans skill text for short-lived citations — concrete task artifacts (task-<digits>-(brief|report|fix-report|diff), incl. dot formtask-N.diff) and SDD deeplinks (.mstar/sdd//.agents/sdd/+ concrete first segment) — while discriminating placeholder forms (task-N-report,<plan-id>,{SDD_DIR}/…,.mstar/sdd/**path globs): zero false positives on the currentskills/corpus. - CLI
skill lint: third checklistskill lint (ephemeral citations)wired intomstar skill lintafter the five-question checklist; each citation reports as askill.ephemeral.<kind>violation (line + match + placeholder rewrite fix) and sets exit 1. - drift-lint guards: docs audit-enum set-equality (docs/cli.md
<category>row and README category-focus lists vs the engineAUDIT_CATEGORIES— catches fabricated tokens likedepsand omissions likebug/direction), README.md / README_CN.md same-commit bilingual pairing over the push range, and a skills-corpus ephemeral guard reusingfindEphemeralCitations; plus acitesKnowledgeConventionsexemption for harness-local knowledge citations. - History-rewrite push safety:
mstar-branch-worktreegains a "History rewrite 与推送安全" section — any history rewrite of an already-pushed branch must firstgit fetchand record the remote exact OID, then publish with--force-with-lease=<branch>:<observed-oid>(bare--forceprohibited); after the rewrite, prior review threads / approvals / check results are no longer current evidence and must be re-reviewed before merging;mstar-iteration's phase-4-5 reference now points at that section as the SSOT for rewrite / force-with-lease / evidence-invalidation rules. - Authoring devices library:
skillsbench-authoring.mdgains 6 small composable authoring techniques (calibrated examples file, recall batteries, overcorrection traps, required-explicit-input, questions ≠ write authority, invocation boundary), each mapped onto one or two SkillsBench principles with in-harness instances. - Bilingual minimal-update rule:
AGENTS.mdCore Rules now require the minimal counterpart edit for paired docs (README.md/README_CN.md, packages/dsh README triplets) — never re-translate a document to apply an update — with pairing hashes re-recorded (git hash-object) in the same change set. - Knowledge-doc prose hygiene:
mstar-compoundworkflow gains §3.5 — a HEAD-resolvability quality gate (a reader at HEAD — no chat transcripts, dispatch prompts, or unmerged drafts — can resolve every reference and verify every claim) with an mstar-adapted leakage taxonomy (dead session citations, change narration, review choreography, hedges withoutsimplify:/temporarymarkers, authoring-language slips) and sanctioned keep rules (R#/finding ids in review bundles, issue references, measured bounds, iteration/plan ids);writing-specialistOutput Guidance points to the SSOT without duplicating it. - Future-decision-value classification:
mstar-compound-refreshPhase 2 gains a second axis — docs whose rationale / alternatives considered / negative guarantees / reintroduction conditions still guide a future change are kept regardless of length — plus a guardrail (a captured rejected approach stays only while the losing idea remains a tempting, meaningful mistake) and an explicit exclusion of frozen-archive seal machinery (rule 6 delete-don't-archive intact). - Editorial rubric for writing-specialist: Output Guidance adds the complete-proposition rule (enumerate actor+action / condition / modality / negative guarantee / ownership before trimming; trim only when every factual clause survives), a coverage-by-artifact table over the six mstar surfaces (knowledge docs / plans / review bundles / SKILL.md / README / completion reports), and doc standards (atomic-move rule, tutorial-vs-reference classification).
- QC deep-review lenses:
deep-review-lenses.mdgains 5 new lenses — Lifecycle & Concurrency, Ownership / Derived-State, Bounds, Enforcement-Path, Real-Entry-Path — each with 2–4 structured questions answerable via diff/read/grep, plus deepened Testing / Contract lenses and signal-map seats (QC3 default += Enforcement-Path / Ownership; QC2 default += Bounds / Real-Entry-Path). - Audit playbook probes:
mstar-auditplaybook §1/§2/§4/§5 gain 8 codebase-level probes (derived-state drift, bounds covering the final operation, enforcement bypass, real entry path, externally observable state, user-visible output is behavior, public-but-one-caller, unjustified defaults/public options); §5 adds the prove-or-reject methodology for DEBT findings (consumer three-way classification, hand-rolled vs dependency swap bar, mirrored-fact test, strong-candidate families, guards). /codebase-audit simplify: newsimplifyscope variant routes through the existing command — a DEBT-focused deep pass whose findings use Category DEBT and never inline TODOs.- Documented
/codebase-auditusage and keyword parameters (effort levels, category focus,branch,next/roadmap,simplify) in README.md/README_CN.md and docs/cli.md. - Internal
@mstar-harness/enginedevDependencies in cli/opencode/dsh now use theworkspace:*protocol; the release-prep engine-spec sync step was removed.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.3.0.
[2.2.0] - 2026-08-13
Harness
- dsh plugin: the context catalog now carries an
agentFlowevidence row — the actual subagent dispatch/settle ledger ({HARNESS_DIR}/agent-flow.jsonl, bounded JSONL truncated to ~500 events; single recording coreDshHostAdapter.dispatchGatebehind both thetools/pre-executelistener and thebeforeDispatchhost hook; real settle recording —tools/post-executeis a VERIFIED registry seam (dispatched for every tool call) settling foreground dispatch calls, background tasks settle viactx.tasks.onTaskDoneterminals, paired by exact dispatch identity — settlement is never fabricated, unpaired calls record nothing). The workflow panel's main graph adds the expected-vs-actual subagent flow pipeline: a third column of stage boxes lit by dispatch evidence, a collapsible event-detail footer strip (role → planId#taskId, all five status colors, settled ✓), and the flow-expected / flow-actual / flow-unexpected legend. - dsh plugin: the ledger's missing-file state now reads as an EMPTY view (the panel shows the "no actual dispatches yet" empty state from plan merge — not an evidence-missing degrade); the ledger append path is documented single-writer and size-gated with an atomic truncation replace.
- dsh plugin: fix the unified
mstar-engine-statuscatalog row breaking the session round (session event "user/message" carries non-JSON-serializable data) when the iteration-gate section cannot be built — nostatus.json, no active steering compass, or an unreadable control doc. The optionaliterationkey is now omitted instead of present-as-undefined, keeping the appended message losslessly JSON-serializable at theSession.appendboundary. - dsh plugin: fixed the broken
@mstar-harness/dshbuild gate — the web client bundle (dist/client.js) is now emitted by the full build. Root causes:tsconfig.jsontypesomittedreact(TS7026: noJSX.IntrinsicElementsfor the panel.tsxsources) and the@deepseek-ai/dsh-client-*peer-stub workspace links were missing fromnode_modules(TS2307), which failed the build's finalbunx tscstep and left the client bundle absent. The typecheck gate is green again;dsh --profile webboots with the plugin's/plugins/@mstar-harness/dsh/client.jsregistered and served. - dsh plugin: mstar slash commands (
/iteration-start,/iteration-drive,/iteration-loop,/codebase-audit) now declare aninputhint (new frontmatterinput:incommands/*.md), so the dsh web client claims them on menu pick instead of executing immediately:/nameis inserted into the composer with the command highlight, the arg hint shows as ghost text, and the line submits only on Enter — the same interaction as/plan//goal//advisor. User-typed args are appended to the steered command message as a## User inputsection; quoted frontmatter values (description/input) now register unquoted. Updatedmstar-host/references/dsh.md. - dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.0-rc.3line (^0.1.0-rc.3;@deepseek-ai/cordis^4.0.1— same-class alignment with the dsh-advisor upstream bump,dsh-external/dsh-advisor#14); every installed version below0.1.0-rc.3(old0.0.1-rc.x/0.1.0-rc.2lock entries and nested copies) was purged frombun.lock+node_modules. The monorepo root gains abunoverridesentry pinning@deepseek-ai/dsh-llmto^0.1.0-rc.3: bun otherwise installs same-version nested peer copies for each dependent dsh package, and TS 5.9 package-id resolution treats the copies as distinct modules — the plugin'sMessageSourceMapaugmentation (mstar-engine-statuscatalog kind) no longer merges into the union dsh-agent/dsh-session see, breakingcreateUserMessagetyping at theagent/pre-stepcatalog push.tests/peer-deps.spec.tspins^0.1.0-rc.3. - dsh plugin: dev-time
@deepseek-ai/dsh-*seam resolution switched from the local link farm to the npm registry at0.0.1-rc.5(bun auto-installs peers via the monorepo-root.npmrc${NPM_TOKEN}). Removedscripts/setup-dsh-links.ts+dsh:link/dsh:link:check(prepareis now build-only); droppedpeerDependenciesMeta.optional(the old skip-unpublished-peers workaround) and completed the peer set —dsh-client-runtime/dsh-client-locale/dsh-client-ui-conversation/dsh-client-ui-slots/dsh-invariants/dsh-jobsjoined the existing peers (all^0.0.1-rc.5); addedkeywords: ["dsh", "dsh-plugin"]andtests/peer-deps.spec.ts(registry peer contract, peers-not-optional regression). - dsh plugin:
@deepseek-ai/dsh-*peers upgraded to the0.1.0-rc.6line (^0.1.0-rc.6;@deepseek-ai/cordisstays^4.0.1) — every lock entry below0.1.0-rc.6(0.1.0-rc.3pins and any0.0.1-rc.xleftovers) was purged frombun.lock; the whole dsh tree now resolves at0.1.0-rc.6(60 lock entries, single hoisted copy per package). The monorepo-rootbunoverridesentry for@deepseek-ai/dsh-llmis removed: with every dsh package on the same^0.1.0-rc.6range bun dedupes to one copy, so the rc.3-era nested-copy workaround is no longer needed (verified: 1 lock entry, 0 nesteddsh-llmcopies; theMessageSourceMapaugmentation typecheck passes). Rootdependenciesstays engine-only. Seam-resolution docs updated for the public-registry reality (the root.npmrcauth token was dropped in 0c884d47):packages/dshREADME (EN/zh) andtests/peer-deps.spec.tsno longer claim a root.npmrc/${NPM_TOKEN}— the spec now asserts no scoped-registry mapping comes back and the installeddsh-llmresolves to exactly0.1.0-rc.6. Caveat:@deepseek-ai/*publishesdist-tags.latest = 0.0.1-rc.1(an ancient line whose packages reference never-published peers likedsh-user-interaction), sobun update @deepseek-ai/...must not be used — it downgrades to that line and 404s; the lock-purge +bun installpath is the supported upgrade route. - dsh plugin: dev-time dependency strategy for the
@deepseek-ai/dsh-*seams switched from committedpeer-stubs/stand-ins to a link farm (packages/dsh/scripts/setup-dsh-links.ts, dsh-advisor pattern): the REAL packages from a local dsh source tree ($DSH_SOURCE_DIR→$DSH_HOME/source/current→~/.dsh/source/current) are symlinked into the repo-rootnode_modules/@deepseek-ai/(idempotent;bun run dsh:link/dsh:link:check; wired intopreparebefore the build).peerDependenciesstay declared (the host provides them at runtime; marked optional so bun 1.2 does not 404 on the private registry); thepeer-stubs/workspace was removed. - dsh plugin: CI (validate job) now detects dsh source-tree availability (
$DSH_SOURCE_DIR/~/.dsh/source/current) and skips the dsh test/typecheck steps when absent — dsh is not run in CI. - dsh plugin:
src/index.tsslimmed from a 3184-line monolith to a module index oversrc/gates/*(pure refactor, zero behavior change — the 27-name export surface is frozen identical bytests/export-surface.spec.ts, and the export-surface type layer now runs in CI viatypecheck:tests(bunx tsc --noEmit -p tests/tsconfig.json)). - dsh plugin:
HarnessResolver.forWorkspacenow passesworkspaceRoot = the session cwd(the probe start) — the{HARNESS_DIR}probe stops AT the session workspace and never walks up beyond it, so a harness dir above the workspace (e.g. the global~/.mstarCLI-install root) is never adopted. The dsh boundary deliberately diverges from the CLI's git-top-level boundary. Explicitconfig.harnessDirstill wins outright. - dsh plugin: the pre-step catalog is now ONE unified
mstar-engine-statusmessage — watermark (version, harness dir, enforcement) + iteration phase-gate section (when a steering compass resolves) + workspace-state digest section (plan registry, open residuals, branch/policy anchors, active leases, knowledge summary, compass direction — when the workspace has astatus.json) — all from one cachedstatus.json/compass/knowledge read. - dsh plugin: the catalog row is TTL-refreshed per workspace (Config
catalogTtlMs, default 60000 ms — mid-session plan/compass/residual changes land within one interval while the hot path stays a timestamp compare + cache hit) and digest-gated (injected once per turn, re-injected only when it changed — a long turn shows the catalog once, not per step). - Unify local scratch layout: temp files →
.tmp/*, git worktrees →.worktrees/*(both gitignored); documented in AGENTS.md. - dsh plugin: the web client workflow panel is now "MStar 工作流" / "MStar Workflow" — a reworked layout (header with version / harness dir / enforcement evenly spread; fixed right sidebar for plans / residuals / knowledge / leases / branches+policy / direction; main body = a react-flow cyclic workflow graph) with an upgraded visual system (dsw-token spacing ramp, type hierarchy, dark mode, motion). The graph projects the
mstar-engine-statuscatalog through a pureprojectGraphfunction (schema constants strictly separated from catalog evidence; never throws; explicit degraded states): a phase ring (iteration-start → autonomous-execute → iteration-close → pr-delivery → merge-ready, loop edge) + plan state machine (Todo → InProgress → InReview → Done / InProgress ⇄ Blocked / unknown bucket), with current-phase highlight, legend, zoom/pan and fitView.@xyflow/react@^12.11.2is inlined intodist/client.js(MIT; license/size reviewed in guides); the build script now asserts the bundle carries noimport.meta/ ESM statements — the web loader executes plugin bundles as classic<script>s, so a zustand v4import.meta.envread (which would break the panel at parse time) is defined away. Local install re-verified: profile add → web boot → client.js route serves the built bundle byte-identical (sha1). - dsh plugin: fixed the unstyled MStar workflow panel — CSS Modules hash class names in the web client bundle could start with a digit (FNV-1a → 8-hex, ~62.5% digit-leading), producing illegal selectors (
.20fd0e45_root) that browsers silently drop (the whole rule is discarded). The client bundle build now escapes digit-leading class selectors at the CSS text layer (WHATWGCSS.escape, e.g..20fd0e45_root→.\32 0fd0e45_root; DOM class names unchanged) and adds a build-time two-layer assertion (transform + emitted artifact) that no unescaped digit-leading hash selector remains — a regression guard so silent style loss cannot slip through again. - dsh public release prep: removed the
preparescript from@mstar-harness/dsh(fresh-checkoutbun installno longer fails on the gitignored enginedist/; the monorepo builds packages explicitly, matching cli/opencode), wired dsh into the release pipeline (release-surfaces.tsversion surface + changelog,release.ymlbuild/publish), and made the READMEs public — the private dsh-provider block and the private-mirror repo-URL install (dsh-external/mstar-workflow) are gone, replaced by the registry formdsh plugin --profile web add @mstar-harness/dsh(plus local-checkout dev install). Dropped a stray committed.pnpm-store/(gitignored now). - dsh plugin: fixed ReactFlow v12 silently dropping every edge whose endpoint node exposes no connection-point
<Handle>— all 17 graph edges (phase ring 5 + state machine 5 + connector 1 + pipeline 6) render again in the real browser. - dsh plugin: synced
packages/dshto the dsh0.0.1-rc.2rename wave — seam package renames consumed (@deepseek-ai/dsh-skill-local→@deepseek-ai/dsh-skill-filesystem; test-onlydsh-tasks/dsh-tasks-fake→dsh-jobs/dsh-jobs-fake), peerDependencies bumped^0.0.1-rc.1→^0.0.1-rc.2, and renamed API symbols (SkillService→SkillRegistry; the optional background-seam surfacectx.tasks/onTaskDone/TaskId/TaskDoneListener/TaskSnapshot→ctx.jobs/onJobDone/JobId/JobDoneListener/JobSnapshot; clientLocaleService→LocaleRuntime,SlotsService→SlotRegistry). Docs/READMEskill-localprose renamed toskill-filesystem. - dsh plugin: the
<mstar_engine_status>watermark now shows one unifiedmstar versionline instead of separate engine/plugin versions (single-version invariant — the bundled engine and the plugin share one version). - Removed local-maintenance path references from user-facing skills:
mstar-host/references/dsh.mdandmstar-iteration/references/phase-2-worktree-lease.mdnow reference only runtime consumer contracts (verified zero residual paths). - Aligned
mstar-branch-worktreefeature-worktree naming to the workspace root.worktrees/<plan-id>-<slug>convention (AGENTS.md「Local scratch layout」), gitignored by repo convention. - dsh plugin: the web client module manifest moved from the top-level
dshClientfield to the nesteddsh.client(platform: 'web'+ declared inject faces), matching upstreamclient-modulesdiscovery (dsh.client+exports["./client"]). The legacy top-level key is removed — upstream has no compatibility fallback, so the old field silently un-discovered the client half and dropped the workflow panel from the web boot manifest (window.__DSH_BOOT__.entries). A manifest-contract regression test now freezes the new contract and fails first if upstream renames the field again. - dsh plugin: version aligned to
2.0.5(single-version invariant — the@mstar-harness/enginedevDependency is pinned exact2.0.5and the engine version assertions in the dsh suites now expect2.0.5), restoring the unifiedmstar versionwatermark after the upstream v2.0.5 merge. - dsh plugin: version bumped to
2.1.1(single-version invariant — the@mstar-harness/enginedevDependency is pinned exact2.1.1and the engine version assertions in the dsh suites now expect2.1.1), restoring the unifiedmstar versionwatermark after the upstream v2.1.1 sync (QC F-001: the shipped bundle and the workspace source now report the same version). - dsh plugin: the
@mstar-harness/dshpackage now ships a web client plugin (workflow panel) on the samemstarbundle row —dsh.client+exports["./client"]discover the client half automatically (no separate profile layer or install step). The plugin registers aconversation.viewview-ring tab (id: 'mstar-workflow',order: 20) rendering the latestmstar-engine-statuscatalog row as a structured panel: watermark (version / harness dir / enforcement), iteration phase-gate section (transition, all-plans-done, gate verdict + violations, status/compass anchors), workspace-state section (plan board, residuals, branch/policy anchors, leases, knowledge, direction) and a freshness marker; refresh follows the session snapshot (no polling). Bundle ships as a closure-factory CJS artifact (dist/client.js) served at/plugins/@mstar-harness/dsh/client.js; local install into thewebprofile is verified. - dsh plugin: Known limitations — the panel is a structured segmented presentation this iteration; the graphical workflow canvas (react-flow DAG) is the NEXT iteration scope (compass Roadmap Position). No react-flow dependency or panel render-shape change lands here.
- dsh plugin:
{HARNESS_DIR}now resolves per session workspace — the probe starts from the session cwd (never the launch/process cwd), so the engine-status watermark and the gates follow the workspace the session actually works in; an explicitharnessDirconfig still wins outright. - dsh host: concurrent subagent dispatch now requires background mode — any N≥2 dispatch that needs parallel execution (QC tri-review, dual-track) MUST invoke every
subagentcall withrun_in_background: truein one message; foreground N≥2 invokes run serially (fail-closedexclusivetool classification) and do not satisfy an N-parallel requirement (dispatch-incomplete /Blocked). Updatedmstar-host/references/dsh.md(PM dispatch + QC default). - dsh plugin: agent-canvas legend + Phase layout simplification (plan
20260813-panel-agent-canvas-legend-layout) — (1) the canvas legend is simplified to the 3 role-card status entries (agent-runningrunning glow /agent-settledsettled — the standalone GREEN done frame + ✓, never on off-tier roles /agent-idleidle dashed); the 7 collaboration-edge / layout entries (flow-actual/port/group/sub-bucket/supervise/on-demand/unknown) are removed from the legend copy (the canvas itself keeps the edges / ports / partitions — only the legend copy drops them); (2) the Phase 1 / Phase 2 groups now sit SIDE BY SIDE — Phase 1 (review-edit-chain) on the LEFT, Phase 2 (sdd-implement → qc-tri → qa-gate) on the RIGHT, top-aligned — instead of stacked top/bottom, saving vertical canvas space. Docs synced: dsh.md SSOT + bundle mirrors + README.md / README.zh.md / bundle/README.md. - dsh plugin: the 代理执行 tab (spec F1.4) is now a draggable agent canvas (replacing the stage-column AgentFlowZone, which is deleted): a native pointer-event pan surface (pointerdown/move/up +
setPointerCapture, translate-only — no zoom, no third-party deps,touch-action: none) with the coordinate-space content layer exposing the pan state asdata-canvas-pan(transform: translate(xpx, ypx); the grid background moves with the content). Every KNOWN_AGENTS roster member renders an entity card — title = the agent name (session id / task tag are auxiliary record fields); un-evidenced agents show the muted idle card (dashed frame,data-agent-idle), evidenced agents light by the honest status priority (running business glow ring / settled ✓ / error / denied / advisory). Collaboration edges reuse theAgentEdgemodel: dim dashed expected stage skeleton, business actual handoffs, and the animated "next" edge (@keyframes canvas-dash-flow, disabled underprefers-reduced-motion— engine-verified). The Legend re-mounts on the canvas with the idle swatch (data-mstar-legend-item="agent-idle") + the collaboration-edge swatches; the canvas degradation note now distinguishes the settle-only ledger (data-canvas-note="settle-only") from empty/degraded, and the dead AgentFlowZone styles were removed fromzones.module.css. - dsh plugin: the agent canvas was verified in the browser harness on light + dark themes — entity cards (idle dashed / running glow / settled ✓), legend swatches (incl. the idle swatch), and the next-edge stroke were probed for computed styles in both themes (host token flip observable, zero bare colors of any form across the panel/zones/canvas css,
prefers-reduced-motionrun asserts the next-edge and running-card animations compute tonone); a real pointer-drag sequence (CDPInput.dispatchMouseEvent) moved thedata-canvas-pantransform fromtranslate(0px, 0px)totranslate(60px, 30px)with pointer capture released — the drag contract verified end to end; evidence in{SDD_DIR}/review/harness/(browser-checklist.md + browser-results.txt). - dsh plugin: the MStar workflow panel's agent-execution zone now renders the real subagent flow — the six EXPECTED_ROLE_FLOW stage/phase columns with entity cards aggregated from actual dispatch evidence (agent display name / role chip / task tag
planId#taskId/ status point / ×N count; running entities get a business glow-pulse highlight, un-evidenced stages show a dashed "pending" placeholder with their expected role chips, and the header carries theN executing · M pendingsummary). Flow arrows: dim expected skeleton arrows between consecutive columns, small in-column handoff arrows between same-column cards, and an animated "next" edge — a business dash-flow arrow (@keyframes agent-dash-flow, disabled underprefers-reduced-motion) from the latest running entity's stage to the next constant-order column, drawn only while a running entity exists. The zone degrades to muted empty states (never orange warn boxes) when the ledger is missing/empty/settle-only. - dsh plugin: the agent zone and the agent-flow event dock were verified in the browser harness on light + dark themes — entity cards, status points, pending placeholders, the next-edge dash animation (declaration + computed
animation-name) and the dock's event-row status colors were probed for computed styles in both themes, including aprefers-reduced-motionrun asserting the animations are disabled; evidence in the iteration guideiter-20260810-panel-zones/guides/agent-flow-zone-dual-theme-verification.md. - dsh plugin: the MStar workflow panel canvas was rebuilt as an HTML/CSS zone dashboard — the react-flow cyclic graph (the
@xyflow/reactrendering layer, its plain-.csstext loader, and the devDependency) is removed, and the build now asserts the emitteddist/client.jscarries noxyflow/reactflowmarkers (the bundle dropped from ~468 KB to ~85 KB raw). The canvas fills the Tab (no page-level scroll): an iteration zone (Step 1–5 stepper +Step N/5badge, active-highlight / inactive dimmed states, branch panel: iteration base / target / spec integration — rendered only while active), a tasks zone (6-column kanban: Todo / InProgress / InReview / Done / Blocked / unknown with count badges, Done ≤5 ++N more), an agent-execution zone (pending skeleton — entities + flow arrows land in plan20260810-panel-agent-flow-zone), a bottom fixed footer bar (zone legend + gate summary with collapsible violations) and a canvas-corner AgentEventDock (agent-flow event strip, mounted only when events exist — hidden entirely at 0 events). The three orange warn frames are gone — degraded states render as muted empty states, never orange boxes. - dsh plugin: the zone dashboard is fully token-driven (zero bare colors of any form) and verified in the browser harness on light + dark themes — zone backgrounds / borders, status colors and the muted empty states were probed for computed styles in both themes (
prefers-reduced-motionrespected, motion ≤200ms); evidence in the iteration guideiter-20260810-panel-zones/guides/canvas-zones-dual-theme-verification.md. - dsh plugin: the 事件记录 tab (spec F1.5) is now a non-canvas log page —
EventLogPagerenders two partitions from the projectedZoneViewslices (consumed unchanged, zero projection changes): Agent 流转事件 (view.events≤50 latest-first; off-pipeline unexpected dispatches fold in once viaexpected: false— never double-appended) and 违规记录 (view.violations, gate violations with severity/code/message). Every row is an expandable native<details>(no-JS, keyboard-accessible): the summary IS the toggle (role/agent, stage,planId#taskIdtag, HH:MM time, token-colored status chip, settled ✓, duration, unexpected badge) and the expanded body shows the full catalog fields (role/agent/stage/plan/task/category/time/kind/status/expected/settled/duration; violations: severity/code/message) — a missing field renders muted 「—」, never a fabricated value. Empty/degraded states are muted (both-empty → one「暂无记录」note; mixed empty degrades each partition independently) — never an orange warn frame. The canvas-cornerAgentEventDockis removed (无双份日志, spec §5): its row layout + status colors migrated into this page, and the header TabNav already is the jump to the tab — zerodata-agent-event-dockanchors remain. Newdata-event-log-*test anchors (section/row/details/field/missing/empty), 23 newevent-log.*locale keys (zh/en symmetric) in thePanelKeyunion, and a new token-drivenevent-log.module.css(zero bare colors — dark mode is the host token flip; the<details>disclosure chevron is a token-colored::beforethat rotates 90° on expand; 150ms hover/rotation sits in the 120–150ms window; motion killed by the panel rootprefers-reduced-motionrule). - dsh plugin: the event-log page was verified in the browser harness on light + dark themes with a real
<summary>click expanding a row's<details>(open state + detail-body computed styles asserted): partition frames (bg/border), log-row summaries, status chips (business/warn/error/success), severity chips (error/warn), the disclosure chevron (caption token, rotates on open), and the muted empty state were probed in both themes (host token flip observable, zero bare colors of any form across the panel/zones/canvas/event-log css, no panel-side dark overrides); aprefers-reduced-motionrun asserts the row hover transition computes to0s; evidence in{SDD_DIR}/review/harness/(browser-checklist.md + browser-results.txt + dual-theme screenshots with one row expanded). - dsh plugin: QC fix wave (plan
20260811-panel-event-logre-review): the unexpected-role badge is now dispatch-only — settle rows (completion records) never flag as unexpected and render「—」in the detail expected-role seat;formatEventTime/formatEventTimeFullno longer throw RangeError on a finite-but-out-of-Date-rangets(it degrades to「—」like any missing value); the events partition title moved to the symmetricevent-log.section.eventslocale key; the READMEs/dsh guide now attribute the fixed footer bar's removal to the tabs-shell plan (this plan removed only theAgentEventDock). - dsh plugin: panel F2 quickfix (plan
20260811-panel-f2-quickfix) — (1) the 任务迭代 tab's step row now renders 5 equal full-width unit blocks (flex1 1 0, centered content,--mstar-space-*gap) with pure-number badges andn/totalsummary — the connector bars (data-step-connector*) are removed and zh/en carry no 步骤/Step wording; (2)KNOWN_AGENTSis now exactly 14 roles —project-manager(the primary orchestration agent, never an assignable subagent) is removed from the 代理执行 roster; (3) the agent canvas drops theops-on-demandpipeline stage (5 stages,qa-gateterminal), movesops-engineer/prompt-engineerinto a separate on-demand column (projection-ownedzone, no expected/next arrows into it, localized label + legend entry), and renders the SDD implement ↔ task-review loop back-edge (sdd-task-review → sdd-implement) as a visually distinct curved double-arrow with its owndata-agent-edge-loopanchor —pendingsemantics follow (11 in-flow roles). - dsh plugin: panel F3 agent-general model (plan
20260811-panel-f3-agent-general) — (1) the 代理执行 canvas pipeline drops from 5 to 4 stages (review-edit-chain → sdd-implement → qc-tri → qa-gate,qa-gateterminal; thesdd-task-reviewstage is removed and its SDD L2 reviewer moves off-pipeline); (2)KNOWN_AGENTSis now exactly 13 roles —generalPurposebecomes thegeneralbucket (its own trailing column,stage: null),exploreis removed (no card, no column — a strayexploredispatch folds intogeneral),ops-engineer/prompt-engineerkeep the on-demand column,project-managerstays out of the roster; (3) entity cards now aggregate by role instead of by session — the same role across sessions folds into one card ×N, and every off-roster dispatch (formergeneralPurposereviewer,scout, anonymousrole === '') folds into the singlegeneralentity (agent/taskbecome record fields); (4) the SDD loop back-edge is redrawn assdd-implement↔general— a curved double-arrow below the column band (anchored at the column bottoms, true bezier extremum 16px below the lowest column bottom,data-agent-edge-loop="autonomous-execute:sdd-implement->general"); (5)AgentZoneis'flow' | 'on-demand' | 'general'(theunexpectedtrack is removed; columns = 4 stages + on-demand + general); (6) the 事件记录 (Event Log) page now renders its two partitions side by side in a locked-height two-column grid (repeat(2, minmax(0, 1fr))— no whole-page scroll; each partition pins its title and scrolls internally), falling back to stacked rows below 1200px, with alldata-event-log-*anchors preserved (event-logunexpectedbadge semantics unchanged —expected⟺ role ∈ EXPECTED_ROLE_FLOW union). - dsh plugin: panel F4.2 agent-view layout (plan
20260811-panel-f4-agent-view) — the 代理执行 canvas drops the standalone general bucket column (5 columns now: 4 stages + on-demand;data-canvas-columnnever emitsgeneral): the singlegeneralbucket card renders at the bottom INSIDE thesdd-implementcolumn (stable partition — dev cards first, general card below — with a dashed separator + small in-bucketgenerallabel, idle placeholder preserved,data-agent-bucket="general"); thesdd-implement↔generalSDD loop back-edge is removed — no more curved double-arrow below the column band and nodata-agent-edge-loopanchor (AgentEdge.loop/solveLoopBow/LOOP_BOW_MARGIN/GENERAL_COLUMNdead code cleaned); the 3 forward skeleton arrows, in-column handoff arrows and the animated next edge are unchanged, and the on-demand column (ops-engineer / prompt-engineer) is untouched. Evidence-driven "dynamic lines" for the review cycle are a later roadmap iteration. - dsh plugin: panel F4.3 iteration-zone (plan
20260811-panel-f4-iteration-zone) — the 任务迭代页 expanded head is now a LEFT-RIGHT SPLIT: the branch panel (data-iteration-head-branches) sits in the small left half and the Steps row (data-iteration-head-steps) in the large right half (data-iteration-head-split, DOM order branches-before-steps; narrow widths stack at the existing 860px breakpoint; no branch panel when there is no active iteration). The current step is now compass-driven: while the steering compass isstatus: active(Phase 1 in flight — catalogcompassStatusfield), Step 1 (iteration-start) renders CURRENT with verdictunknownand NO PASS/FAIL badge (Phase 1 has no gate verdict), next = Step 2;locked/ missingcompassStatuskeeps the existing gate-transition-driven Step 2→4 + gate badge. Every step reserves a fixed-height verdict seat (data-step-verdict-seat) so centered content groups align — the PASS/FAIL badge no longer skews the step blocks. Docs synced (dsh.md SSOT + bundle mirror + READMEs + knowledge update-only). - dsh plugin: panel F4.1 timeliness (plan
20260811-panel-f4-timeliness) — the 代理执行 canvas now reflects REAL subagent completion: settles are recorded only from verified completion signals —tools/post-execute(the dsh-tools registry dispatches it for every tool call, verified against the upstream source) settles foreground dispatch-tool calls, andctx.tasks.onTaskDoneterminals settle background subagents (completed → ok/killed → denied/failed → error); every paired settle carries its dispatch's identity (role/planId/taskId, same fields + semantics as the dispatch event), so under QC-tri N=3 concurrency each card settles on its own, theN 执行中count derives from the ledger, and unpaired/non-dispatch calls record nothing (never fabricated). A ledger record (dispatch/settle) now invalidates the workspace's TTL-cached catalog row immediately, so the panel refreshes per step during active orchestration instead of waiting up to the 60 s TTL (idle gaps keep the last snapshot — documented limit). - dsh plugin: panel F5 agent-layout rework (plan
20260812-panel-f5-agent-layout) — the 代理执行 canvas now renders 4 stage columns + a rightmostunknowncolumn (thegeneralbucket gets its OWN rightmost column, user 2026-08-12 decision — the former F4.2 "bottom insidesdd-implement" placement is superseded); thesdd-implementcolumn splits into sub-buckets by the projectedentity.bucket— implementor above (flow roles in stage order, then the on-demand roles ops-engineer / prompt-engineer carrying an on-demand badge; the standalone on-demand column is removed) and sdd-reviewer below (code-reviewer, the SDD L2 task reviewer — v2.1.1, the formergeneralPurposeseat), with implementor / sdd-reviewer caption labels; a bidirectional supervise line (implementor ↔ sdd-reviewer — the mstar-sdd mutual-supervision contract) runs inside thesdd-implementcolumn, dim dashed by default and lit business only when the projectedevidencedflag is true (evidence-driven lighting, never a fabricated activation);KNOWN_AGENTSgrows 13 → 14 roles (code-reviewerjoins the pipeline roster); the no-harness branch renders a centered inactive-state card (folder icon + 「No Morning Star harness detected」 title + hint — no tabs, no sidebar, activates automatically once a harness is detected). Docs synced: dsh.md SSOT + bundle mirror + README.md / README.zh.md / bundle/README.md. - dsh plugin: panel F5 design system (plan
20260812-panel-f5-design-system) — the 代理执行 canvas now implements the user-approved design system (design doc v3, two 2026-08-12 review rounds): (1) emphasis opacity tiers — every entity card carries a projectedemphasis: 'current' | 'next' | 'off' | nulltier derived from the iteration's current phase (current-phase roles 100% chrome, later-phase expected roles 75%, already-passed / stage-less on-demand + general roles 45%,null= no iteration → NO override); the tier is always a chrome alpha mix (--mstar-canvas-emphasis-*tokens), never a whole-cardopacity, so the status point + running glow stay fully opaque. (2) edge rework — a strict 4-column layout with NO standalone unknown column (thegeneralbucket sinks into an unknown sub-partition at the bottom of theqa-gatecolumn); theexpectedstage skeleton arrows and the ANIMATEDnextedge are REMOVED (flow order implied by the fixed column order + labels, current position by the running glow + status point), leaving TWO semantic kinds: evidence-drivenactualhandoff edges drawn as bezierCcurves anchored to card ports (4 edge-midpoint ports — north/south/east/west, static-invisible, hover-revealed) with the arrow tip pulled back to a 10px standoff off the port, plus the bidirectional supervise line re-anchored to the side-gap vertical anchor (x = card right edge + 18px, vertical bezier flow); two line RULES — H1 arrow follows the line's local tangent, H2 no line crosses any text. Cards are a single rounded element (glow on the rounded.card-body, no square outline). Docs synced: dsh.md SSOT (incl. leaf report-tool discipline — leaf completion goes in the closing message, not thereporttool, whose default quiet delivery strands in the parent's next-step queue) + bundle mirror + README.md / README.zh.md / bundle/README.md. - dsh plugin (v4, user round 4): the agent canvas lands the round-4 design revisions (plan Task 8, design doc v4): (1) Phase 1/2 groups + current-plan annotation — the 4 columns split into TWO stacked bands (Phase 1 review-edit-chain ABOVE — the sequential Review & Edit chain; Phase 2 sdd-implement → qc-tri → qa-gate BELOW — the iterative plan loop), each with a group label row, and the Phase-2 label annotates the CURRENT plan (projected
activePlanId= the first InProgressstate.plans[]row;+N morewhen several run in parallel, muted「无进行中 plan」when none). (2) settled green done frame + ✓ with the off-tier exclusion — a settled entity withemphasis ≠ 'off'gets a standalone full-strength green frame (success border + 1px ring on the rounded card body) + the green ✓; an off-tier role (already-passed / stage-less on-demand + general) renders a muted dot and NEVER the completion marker (the v3 leak — the ✓ survived the off-tier low transparency — is fixed). (3) shared iteration info section — the tasks and agents tabs render the SAMEIterationInfoSectioncomponent from the sameview.iterationdata (one implementation, two mounts). Inter-band handoff edges (Phase 1 ↔ Phase 2) reroute via the side-gap vertical anchor so no line crosses the group label rows (H2). Docs synced: DESIGN.md / DESIGN.dark.md v4 (Phase groups, done-frame token, plan annotation, shared section) + dsh.md SSOT + README.md / README.zh.md / bundle/README.md. - dsh plugin: panel F5 iteration-zone fixes (plan
20260812-panel-f5-iteration-zone-fix) — (1) the iteration Steps now carry a four-state machine (current/next/done/idle): every step BEFORE the current one projectsdone「已完成」 (completed — a finished Step 1 no longer reads as idle「待命」 while Step 2 is current;nextstays the single forward target,idleis schema-only), with a quiet passed treatment — success-tinted badge border + muted chip text with a leading ✓ (data-step-state="done", projection-derived, never UI-guessed); (2) the branch panel in the expanded split head is width-capped (flex: 0 1 260px+max-width: 280px— it no longer stretches with the container; the Steps row absorbs the remaining width, and the <860px column stack resets to content height).current/next/verdict semantics, the Phase-1 no-badge rule and the Step-5-never-current limitation are all preserved (Step 5 rendersnextonly while Step 4 (pr-delivery) is current — docs corrected to match). Docs synced: dsh.md SSOT + bundle mirror + README.md / README.zh.md / bundle/README.md. - dsh plugin — panel quick fixes (plan
20260813-panel-quick-fixes): the workflow panel's three tabs land the 2026-08-13 quick fixes. (1) 任务迭代 tab — the kanban is now 5 columns (Todo / InProgress / InReview / Done /blocked-unknown— the Blocked state and the former unknown catch-all fold into ONE merged column titled「受阻/未知」/「Blocked / Unknown」); every column caps its rendered rows atPLAN_CAPand shows a clickable 「更多」/「收起」 expand button (data-kanban-moreanchor) that unfolds the full column — the projection keeps ALL plan rows (the cap is a render concern, never a discard). (2) 代理执行 tab — the canvas filters dispatch evidence to the current iteration's plans only (the steering compassiterationId, else the nearest iteration via the catalogplans[].iterationRefs— most-recent plan by 8-digit id date prefix + doneAt); provably cross-iteration events produce no entity/edge while the roster keeps its idle cards, and plan-less / unknown-plan / standalone dispatches are never hidden;advisoryis no longer terminal — a soft-enforcement dispatch falls through to its paired settle (green ✓ completed when a settle exists,runningwhen none),deniedstays terminal, and the advisory verdict still renders in the event log; edge routing is tightened (H1/H2 — same-column vertical flows reroute into the LEFT side gap when the center-x line would cross an in-between card body, forward AND reverse; reverse horizontal beziers keep direction-aware control points BETWEEN the endpoints, no card/seat hits) and the legend moved below the canvas viewport. (3) 事件记录 tab — the row list now scrolls INSIDE the panel partition: the panel root opts into the hostdata-conversation-composer-overlay(full-height opt-in) so.rowList'soverflow-y: autoengages and the host page no longer scrolls, with bottom clearance reserving the floating composer via the host-published--dsh-composer-height. - Updated
skills/mstar-host/references/dsh.md+packages/dsh/README.md/README.zh.md/bundle/README.md. Theharness-skills/mirrors are gitignored and regenerated bybun run bundle-assets(not hand-committed). - dsh plugin: the MStar workflow panel sidebar was reworked (info-layout direction #1) — the header row is gone, version + harness dir now live in a bottom fixed meta dock (small muted, does not scroll with the sidebar digest); the sidebar is capped and reordered (plans ≤5 in time-desc order +
+N more, open residual findings ≤10 with severity chips + overflow hint, policy with enforcement first then push / worktree / control worktree, leases, knowledge, direction); the branches block moved out of the sidebar to the iteration zone (plan20260810-panel-canvas-zones). Catalog evidence:HarnessPlanView.doneAt(fromdone_at) andMstarHarnessState.residualFindings(open-lifecycle filtered, severity-ordered, capped at 10) — model-visible text stays compact. - dsh plugin: the sidebar / bottom meta dock theme audit is locked in — every color-family declaration in
panel.module.cssresolves through a--dsw-*token (zero bare colors of any form, including CSS Color 4color()), spacing rides the--mstar-space-*ramp, motion 120–200ms withprefers-reduced-motionoff-switch; dark mode is the host'sbody[data-ds-dark-theme]token flip (no panel-side theme overrides). Verified by a browser harness run (light + dark computed-style probes on sidebar / bottom meta dock background, text, border and status colors — 46 PASS / 0 FAIL, evidence in the iteration guide). - dsh plugin: the MStar workflow panel moved from the single-page zone dashboard to a Tabs + Content layout — a resident right sidebar (shared by all tabs: plans / residuals / policy / leases / knowledge / direction + the bottom version/harness meta dock) and a fixed header nav with the 3 MenuTabs 任务迭代 / 代理执行 / 事件记录 (default = 任务迭代, D1) switching the main content. The 任务迭代 tab is a full re-org (spec F1.3): a Content Head carries the iteration info (iterationId / gate verdict / branches) with the 5 iteration Steps laid out horizontally (current step highlighted, the connector into it lit — no "completed" checkmarks, honest to the schema's current/next/idle states); 未启动(
active === false)时整体收拢为一行摘要(可展开),启动后展开完整 Steps,且同一挂载实例在实时 catalog 更新把active从 false 翻转为 true 时会自动展开(用户已激活后手动收拢不被覆盖)。下方任务区为全宽标准 Kanban(6 列 Todo/InProgress/InReview/Done/Blocked/unknown,Done 溢出沿用 PLAN_CAP,content 区内独立滚动——不再被 canvas 高度压成小坨);代理执行 / 事件记录两 tab 落 muted 占位页(真实页面由agent-canvas/event-logplan 交付)。zone dashboard 布局随之收敛:WorkflowCanvas/IterationZone删除,其 zone 级图例项与 footer/gate-summary 样式一并移除,bundle 负向 xyflow 断言保持。 - dsh plugin: the Tabs+Content panel was verified in the browser harness on light + dark themes — iteration head / horizontal steps / full-width kanban / resident sidebar / tab nav / muted placeholder pages were probed for computed styles in both themes (token flip observable, zero bare colors,
prefers-reduced-motionrun asserts the root kill rule zeroes every transition); the layout invariants were pinned in-browser: page never scrolls, the content area is the only vertical scroll body, the sidebar stays resident across tab switches, and the kanban columns spread the content width (a real layout finding — the kanban columnmin-widthis now border-box so the six columns fit at desktop widths instead of overflowing behind the internal scrollbar); evidence in the harness under{SDD_DIR}/review/harness/(browser-checklist.md + browser-results.txt). - Sync upstream v2.1.1: merged the upstream
mstar-harnessv2.1.1 line into the dev-dsh branch — adds thecode-reviewerrole (read-only L2 SDD task reviewer / audit executor; replacesgeneralPurposeas the SDD per-task review seat, with generic fallback only when the role agent is absent on the host), ships the canonical default-ignore harness.gitignoreformat (.mstar/**+ tracked re-includesAGENTS.md/knowledge//specs/) across the engine, CLIinitfence and bundled skills, and aligns all 11 version surfaces to 2.1.1. - engine:
emitGitignoreSnippet/validateGitignore/HARNESS_PROCESS_GITIGNOREnow emit the default-ignore + re-include format instead of the flat per-directory ignore list;ROLE_MAPPINGgrows to 14 ids withcode-reviewer. - bundle-assets: re-synced
packages/dsh/harness-skills/harness-commandsfrom the mergedskills/tree — the 6+ upstream-touched bundled skills and allmstar-host/references/*.mdhost adapters (cursor/kimi/omp/opencode/zcode) now carry the v2.1.1 wording (SDD task reviewer →code-reviewer).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine,@mstar-harness/dsh, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.2.0.
[2.1.1] - 2026-08-12
Harness
- Canonical
.gitignoresnippet now default-ignores the whole harness dir (<dir>/**) and re-includes only the tracked results (AGENTS.md, knowledge/, specs/) — new process subdirectories are ignored automatically.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.1.1.
[2.1.0] - 2026-08-12
Harness
- Added a
code-reviewerrole (L2): a read-only seat for SDD per-task review andTask category: audit/mstar-auditexecution. PM entry stays/codebase-audit; large-repo fan-out uses read-onlyscout/explorevia AssignmentDelegation: allowed (scout/explore only, read-only). - Wired
code-reviewerinto SDD per-task dispatch (named L2 reviewer id,genericfallback), audit routing (mstar-harness-core,commands/codebase-audit.md), engineROLE_MAPPING(13→14), and the bilingual README role tables;qc-specialist*(L3) / QA (L4) semantics unchanged.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.1.0.
[2.0.6] - 2026-08-10
Harness
- Added a host-agnostic full-flow goal rule in
mstar-host: any host exposing a/goalcommand (Codex Goal Mode, omp, future code agents) must set the goal to running the complete flow to its end — whether advancing an iteration (start → per-plan cycles → close → PR delivery → merge-ready loop) or non-iteration work (specify → clarify → plan → tasks → implement → plan QC tri + QA gate → Done) — never a sub-stage goal. - Removed the Codex-specific
references/codex-plan-goal-mode-bridge.md; goal text rules now live host-agnostically inmstar-hostSKILL.md, and Codex Plan Mode readsreferences/_shared/plan-mode-bridge-core.mddirectly.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.6.
[2.0.5] - 2026-08-10
Harness
/iteration-start: accepts an optionaldirectionhint (constrains §2 candidates, seeds §3 grill-me — start stays interactive) and apauseflag; auto-continues into Phase 2→5 (execute → close → PR → merge-ready) after Phase 1 lock + integration branch, by default./iteration-driveremains standalone for re-entry/resume on an already-locked iteration. Updatediteration-loopvs-commands table, README/README_CN command tables + workflow diagrams, OpenCode package quick start; added routing evaliteration-start-auto-continue-phase2.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.5.
[2.0.4] - 2026-08-09
Harness
- omp plugin: engine-version compatibility — the blocking hook and
mstar_dispatch_validateno longer statically importcomposeDispatchGate; on engines predating the export the task dispatch gate (Gate 2) is skipped with a one-time warning while the status gate stays active, and the dispatch tool reports an explicit upgrade error instead of silently vanishing (parity withmstar_iteration_gate).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.4.
[2.0.3] - 2026-08-09
Harness
- omp plugin: in-process engine binding — model-callable mstar_* validator tools + blocking tool_call gate hook (Enforcement: hard only; commands shell-out stays as fallback).
- engine:
iteration.parseCompassFrontmattermoved from CLI (shared single parser; CLI re-imports from engine).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.3.
[2.0.2] - 2026-08-08
Fixed
- OpenCode plugin entry now default-exports
{ server: MorningStarHarnessPlugin }so helper function exports are not registered as plugins (fixesplugin config hook failed: N.config/N.disposeon startup).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.2.
[2.0.1] - 2026-08-08
Fixed
- OpenCode plugin hooks no longer abort-log on non-string
task/writeargs: Assignment andstatus.jsonvalidators refuse non-string input before.match/path.resolve, and thetool.execute.beforehook snapshotsprompt/filePathonce (avoids getter/Proxy type flips).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.1.
[2.0.0] - 2026-08-08
Harness
- Bash SDD/rollup scripts removed (engine CLI is the documented path):
skills/mstar-sdd/scripts/{sdd-workspace,task-brief,review-package}andskills/mstar-plan-artifacts/scripts/tech-debt-rollup.share deleted. Skill text now documentsmstar sdd workspace|task-brief|review-packageand the enginetechDebtRollupimport (mstar status validateremains the schema gate); parity tests compare engine output against stored golden fixtures captured from the byte-proven ports (slice 2). - Added the
@mstar-harness/enginepackage scaffold: a version-aligned workspace library (zod+ajv,node:*only, nobin) with a typedValidationResult+readHarnessVersion()placeholder core, wired into the release surface list (10 → 11), changelog assembly, and root workspaces. - Engine hardening (QC fix wave, slice 1): lease location/orphan/dual-write verify (
lease.verify.*) moved into@mstar-harness/engine(CLImstar lease verifyis now a thin wrapper);archiveResidualsgained a plan-id path-traversal guard, the status write lock, and append dedup;withStatusWriteLockgained an ownership guard (never removes another writer's lockdir), aholder.pidcrash-diagnosis file, and fast-fail reentrancy detection;readHarnessVersionreads the module's own manifest first (published installs no longer regress to0.0.0);tech-debt-rollupparity now mirrors jq//exactly (false/0edges tested against the bash oracle); residual closed-lifecycle completeness (closed_at+closure_note) and plan-rowDone⇒ no-lease invariants added. Release prep now ensures the@mstar-harness/engineregistry row + package-history link in root changelog heads. - Harness Workflow Engine positioning (iteration v2.0.0): unified engine-first descriptions across the 7 plugin manifests and the 4 package manifests; added
workflow-engine/workflow-enforcement/deterministic-workflow/harness-workflowkeywords to the root plugin manifest; re-framed README.md / README_CN.md around deterministic workflow gates enforced by a TS engine (not prompts alone) with judgment staying inmstar-*skills, plus a What-ships table (Harness Workflow Engine / mstar CLI /mstar-*skills / host adapters).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli,@mstar-harness/engine, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 2.0.0.
[1.8.9] - 2026-08-07
Harness
- Added a portable Agent Plugins v1.0.0 manifest (
plugin.json) at the repo root, aligned with the CLI release surface (skills/is the Agent Skills component), plusmstar-harness plugin validateto check the package (includingmcp.json/skills/) against the Agent Plugins v1.0.0 spec. - Phase 5 checkout: merge-ready product fixes edit directly on the control /
spec_integration_branchcheckout; forbid opening a separate Phase 5 feature/fix worktree or applying Phase 2's "no product edits on control" rule. SSOT stays inmstar-iteration(phase-4-5-pr-delivery§5.0); not in the generalmstar-branch-worktreeskill.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests, and the portable Agent Plugins manifest: → 1.8.9.
[1.8.8] - 2026-08-06
Harness
mstar-skill-authoring: fold the skill-writer 6 principles into the runtime authoring skill — expert process first, compact 5-question body, 1–3 skill routing, per model+harness validation, encode only model gaps, every edit as paired experiment. Body stays the executable gate; full writer loop / output template / anti-patterns →references/skillsbench-authoring.md(progressive disclosure).- Tightened
descriptiontrigger contract with exclusions; keep purpose test / frontmatter / progressive disclosure / review template as reusable SSOT. - Reframe as general skill-authoring guidance (any domain/repo): drop Morning Star /
mstar-*-only branding from body; keep minimal harness hooks (Load Order +mstar-hostpath resolve) only when working in this repo. - Restored
## Skill-relative script and asset pathsheading somstar-host§ cross-reference stays valid (Post-Skill-Change stale-ref checklist). - Keep changelog SSOT tight in
AGENTS.md: §1 owns the fragment rule (including no hand-edit of assembledCHANGELOG*); Quality Gate #6 stays the executable check; remove copy-paste repeats elsewhere.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests: → 1.8.8.
[1.8.7] - 2026-08-06
Harness
- Made the SDD dispatch templates host-neutral so they no longer prime a single host's tool schema:
implementer-prompt.md,task-reviewer-prompt.md, andimplementer-continuation-prompt.mdnow useDispatch:/Role:/Name:/Prompt body:labels with an inline host-field map (omp agent / Cursor subagent_type / OpenCode subagent → mstar-host C5) instead of Cursor-only fields (subagent_type,description,prompt). The L2 task reviewer template now states the ompagentvalue directly (reviewerortask+ C5b), closing the mapping confusion that produced generic-worker fallbacks under SDD. - Trimmed the envelope-first rationale repeated across
mstar-host/references/omp.mdandparallel-dispatch.mdto a one-line mechanical rule + SSOT pointer (the long-body prose was itself contributing to attention crowding), and added the L2 revieweragentmapping to the omp SDD section.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp/Claude plugin manifests: → 1.8.7.
[1.8.6] - 2026-08-06
Harness (dispatch fidelity — invoke field-completeness gate)
- Added a per-item field-completeness gate at the dispatch self-check: every Task/subagent invoke must carry the role-binding field matching
Execute as(ompagent/ Cursorsubagent_type/ OpenCodesubagent/ Kimi·ZCodesubagent_type). A missing field (e.g. omp omittingagent⇒ silent generictaskfallback) is now dispatch incomplete — same severity as paste-only zero-invoke — so a baretasks:[{task:"…"}]no longer passes just because invoke count = N. N=1 sequential Review-&-Edit chains are explicitly covered (count gate is vacuous there). mstar-dispatch-gates: pre-send self-check line + anti-pattern bullet;mstar-host/references/parallel-dispatch.md: hard rule + self-check step;mstar-host/references/omp.md: Review-&-Edit example now shows a fulltask(...)block per pass (architect / writing-specialist) withagentset, plus an N=1 gotcha..cursor/skills/mstar-routing-eval: regression signal for "invoke role field missing ⇒ silent generic fallback".
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.6.
[1.8.5] - 2026-08-06
Harness (skill path discovery — runtime surfaces)
- Closed remaining cwd-looking
skills/mstar-*traps on shipped runtime surfaces: Cursorrules/mstar-entry.mdcandrules/mstar-cursor-plan-mode.mdc, plus omp CLI post-install note inpackages/cli/src/adapters/omp.ts(nowmstar-host → references/omp.md/skill://…). mstar-host: new § Resolve loaded skill root (per-host prefer + filesystem fallback: ompskill://, Cursor plugin checkouts, OpenCodeharness-skills/, Codex/Kimi/ZCode plugin mounts). Host references point at the table;mstar-skill-authoringdocuments the same anti-pattern for rules/CLI notes.- INSTALL /
docs/cli.mdHost adapter bullets use the same skill-relative form (not consumer-cwdskills/mstar-host/references/…).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.5.
[1.8.4] - 2026-08-06
Harness (skill script path discovery)
- Skill-relative script naming: runtime docs now reference executables as skill
mstar-sdd→scripts/<name>(or<mstar-sdd>/scripts/…), not as consumer-cwd paths likeskills/mstar-sdd/scripts/…. Agents were searching the literal repo-relative path under app checkouts and missing the loaded skill / plugin install location. - Updated
mstar-sdd(SKILL +file-handoffs),mstar-plan-artifacts(tech-debt-rollup),mstar-plan-conventions,mstar-iteration, PM AssignmentSDD dircue, andmstar-skill-authoring(new “Skill-relative script and asset paths” convention). - Maintainer
.cursor/LOCAL-VALIDATION.mdkeepsskills/…smoke commands only for this harness repo root, with an explicit note.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.4.
[1.8.3] - 2026-08-05
Harness (omp role-agent dispatch)
- omp C5 corrected: after plugin install/link, discovered
agents/*.mdrole ids (product-manager,architect,fullstack-dev,qc-specialist*, …) are valid livetask.agentvalues. Preferagent: "<Execute as role-id>"; use generictask/scout/ … only as fallback when the role is absent from the live schema. Usingagent: "task"while the matching role agent is listed is an anti-pattern. - C5b retained: even when
agentalready matches the role id, Assignment still requires Act as + skill load (agent shell ≠ full Morning Star role prompt). - Updated
skills/mstar-host/references/omp.md(self-contained C5 + C5b);_shared/host-role-binding-core.mdis Kimi/ZCode only (no omp rows/mentions — other hosts use their own references), plusparallel-dispatch.mdandmstar-hostskill description; aligned INSTALL /docs/cli.md. Dropped the README “Host notes / 宿主说明” aside so the Use section stays entry-only.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.3.
[1.8.2] - 2026-08-05
Docs (README + host detection)
- README (
README.md+README_CN.md): reorder all host tables to the recommended host order (omp > OpenCode > Cursor > Kimi = ZCode > Codex); reorganize Use section into General (without iteration) → Iteration → Codebase audit. mstar-host: rewrite the host detection table to use session tool shapes / available commands only —*-plugin/plugin.jsonfiles cannot identify the host (they coexist in this source repo and in any multi-host install). Merge the duplicate Cursor detection rows into one keyed onsubagent_type.- Host references: strip the same plugin-marker clauses from the
Load whentrigger lines ofcodex.md/kimi.md/zcode.md/omp.md; keep tool-shape / observable-command signals only. Path-reference context lines and bridgeplugin is installedprerequisites are left as documentation (not detection triggers). - omp: document native internal URL schemes (
skill://,local://,agent://,artifact://,history://) inreferences/omp.md.
CLI
zcodeadapter no longer hardcodes aPLUGIN_VERSIONconstant (it had drifted to1.6.0). Marketplace entry generation anddoctor's ZCode version check now derive the version frompackages/cli/package.jsonvia a sharedreadHarnessVersion()helper inutils.ts(same helperindex.tsnow uses for--version). Fixed stale1.5.6/1.6.0version strings inINSTALL.mdand the ZCode adapter.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.2.
[1.8.1] - 2026-08-05
Harness (skills + commands optimization)
- Lossless optimization of
skills/andcommands/per SkillsBench principles (compact bodies, progressive disclosure, dedup to SSOT). No rule, gate, field name, or NEVER bullet altered or dropped — rules move or compress, never disappear. - Extract to
references/:mstar-iterationPhase 3 →phase-3-iteration-close.md, Phase 4/5 →phase-4-5-pr-delivery.md(body 574 → 384 lines);mstar-compoundQ1–Q8 + Phase 1–7 →compound-workflow.md(275 → 103). - Compress:
mstar-coding-behavior216 → 142 (kept The Ladder,simplify:marker, minimal-check);qc-specialist/deep-review-lenses.md11 lens checklists → one-liners (155 → 94). - Dedup: anti-pattern lists →
mstar-harness-coreindex; new_shared/leaf-executor-core.md(Completion Report + Git NEVER across 9 leaf roles); new_shared/host-role-binding-core.md+_shared/plan-mode-bridge-core.md(de-clone kimi/zcode/omp host files + 5 plan-mode bridges). - Commands → thin orchestrators: 4 commands 943 → 388 lines (−59%); new
mstar-iteration/references/phase5-helper-discovery.md. - Descriptions: tightened
coding-behavior,branch-worktree,phase-gatesfrontmatter to trigger contracts. - Docs: recommended host order added to
README.md+README_CN.md(omp ≥ OpenCode ≥ Cursor > Kimi = ZCode > Codex). - Naming:
Completion Report v2→Completion Report(template unified; version suffix dropped).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.1.
[1.8.0] - 2026-08-05
Harness (codebase audit skill)
- New
mstar-auditskill: read-only advisory workflow adapted from the improve skill (MIT, © shadcn). Surveys a repo across 9 categories (correctness, security, performance, tests, tech debt, dependencies, DX, docs, direction), vets findings, prioritizes by leverage, and writes self-contained improvement plans to{PLAN_DIR}/audit-<date>/. Theimproveexecute/reconcile/--issuesvariants are not imported — mstar's SDD,status.json, and residual tracking replace them. - New
plan-quality-barreference (mstar-plan-artifacts/references/plan-quality-bar.md): shared standard for self-contained plans — verification gates, STOP conditions, drift check, machine-checkable done criteria. Applies to SDD task-briefs, Prepare plans, and audit plans. - New
/codebase-auditcommand (commands/codebase-audit.md): standalone entry point. Named withcodebase-prefix to avoid host command conflicts (follows theiteration-*convention). Wiring:mstar-harness-coreTask categoryaudit+ skill index;mstar-phase-gatesPlan quality gate;mstar-sddreferences;mstar-rolesarchitect load entry;pmskill entry;iteration-start§1 Research optional source. - Attribution: improve (MIT, © shadcn) credited in
mstar-audit/SKILL.mdandplan-quality-bar.md.
CLI (@mstar-harness/cli)
- Codex adapter:
CODEX_PROJECT_COMMAND_NAMES(renamed fromCODEX_ITERATION_SKILL_NAMES) now includescodebase-audit; project-scoped install materializes it as.agents/skills/codebase-audit/SKILL.md. - omp adapter: smoke test and install notes include
codebase-audit.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.8.0.
[1.7.1] - 2026-08-05
CLI (@mstar-harness/cli)
- omp doctor: parse
omp plugin list --jsonshape{ npm, marketplace }(omp 17.x) instead of only array/plugins, and matchmanifest.name.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.7.1.
[1.7.0] - 2026-08-05
Harness (omp host surface)
- omp as sixth host surface: markers
.omp-plugin/plugin.json+.claude-plugin/plugin.json(plugin root = repo root; mounts./skills/,./commands/,./agents/). Newskills/mstar-host/references/omp.mdcoveringtask/ask/hub, filename slash commands (/iteration-*), and C5/C5b built-intask.agent+ role-in-prompt binding.omp-plan-mode-bridge.mdfor/plandual-write.mstar-hostdetect table +pmentry +parallel-dispatchupdated. - Install:
omp plugin install github:btspoony/mstar-harnessoromp plugin linkof the local harness checkout; package list name is rootmorning-star.
CLI (@mstar-harness/cli)
ompinstall target:npx @mstar-harness/cli init --target ompensures~/.mstar/harnessand runsomp plugin link(falls back toomp plugin install github:btspoony/mstar-harness).doctor --target ompchecks markers, smoke skills/commands, andomp plugin list.shared-installHARNESS_MARKERSaccepts.omp-plugin/plugin.json.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode/omp plugin manifests: → 1.7.0.
[1.6.1] - 2026-08-04
Harness (QC = code reviewer, not test runner)
- L3 Plan QC clarified as diff/logic review:
mstar-review-qcboundaries +qc-specialist*workflow/shared NEVER — parallel tri-review on a sharedReview cwdmust not run test/build/install/lint/typecheck (peer QCBlockedfrom toolchain contention). Coverage is judged from the diff, not by re-running suites. - L1 / L4 own runtime evidence: QA
acceptance-onlyreuses implementer/CI/prior-QA logs; QC reports are findings, not the test log. PM Assignment anti-patterns andqa-trigger-matrixupdated accordingly. - OpenCode
qc-specialist*agents: bash allowlist trimmed to git + lightweight read-only analysis (removed eslint/tsc/ruff/clippy/etc.).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode plugin manifests: → 1.6.1.
[1.6.0] - 2026-08-03
Harness (ZCode host surface)
- ZCode as fifth host surface: plugin root = repo root via
.zcode-plugin/plugin.json(mounts./skills/,./commands/,./agents/); nosessionStart(ZCode lacks it — PM entry is manual/morning-star-harness:pm). Newskills/mstar-host/references/zcode.mdwith tool map written against the real ZCode session tools (Agent/AskUserQuestion/EnterPlanMode·ExitPlanMode/TodoWrite/Bash/Read/Edit/Write/WebSearch/WebFetch/TaskOutput·TaskStop), reusing Kimi C5b role-in-prompt binding (ZCode ships built-insubagent_typeprofiles only).zcode-plan-mode-bridge.mdfor Enter/Exit dual-write. mstar-hostSKILL.md: description, detect-host table, and fallback row now include ZCode.
CLI (@mstar-harness/cli)
zcodeinstall target:npx @mstar-harness/cli init --target zcoderegisters amstar-localmarketplace in~/.zcode/cli/plugins/known_marketplaces.json+marketplaces/mstar-local/marketplace.json, both pointing at thegithub:btspoony/mstar-harnessrepo source (matches ZCode's built-in marketplace source shape). Project scope also keeps a local.zcode/plugin-checkoutfor agent-file smoke checks.doctor --target zcodevalidates both JSON files + checkout + gitignore.shared-installHARNESS_MARKERSnow also accepts.zcode-plugin/plugin.json.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi/ZCode plugin manifests: → 1.6.0.
[1.5.6] - 2026-07-28
Harness (residuals)
Findings cleanup: zero-residual | allow-residual: plan-level mode to clear QC/QA findings in-session when possible. Formal iteration Phase 2 defaults tozero-residual(fix-now + re-review; open R# only for true blocker-defer + Durable Roadmap). Standalone/pm, hotfix, andinlinekeepallow-residual.- Assignment field + optional
plans[].metadata.findings_cleanup; SSOT inmstar-plan-artifactsFindings cleanup modes; wired throughmstar-review-qc, PM NEVER / Assignment template, iteration close checklist, QA trigger note, and routing-eval cases.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.6.
[1.5.5] - 2026-07-27
Harness (worktree / L1)
- Control-path harness under default gitignore: process artifacts (
plans/,iterations/,status.json,sdd/, …) stay local; read/write them via absolute control worktree paths. Feature worktrees keep product/source edits only — do not waive worktree because feature checkouts lack plans, and do not treat “no flock” as a worktree waiver (serial plan parallelism only). - Assignment fields: absolute
Control harness root, controlPlan Path/SDD dir, featureWorktree path. sdd-workspace:MSTAR_CONTROL_ROOT/ optional control-root arg; fail-closed on linked worktrees withoutstatus.json.- Routing-eval cases for no-flock serial + gitignore control-path harness.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.5.
[1.5.4] - 2026-07-27
Harness (Cursor host)
mstar-hostCursor Task invoke schema: document flat sibling fields (prompt+subagent_type+description) with examples, anti-patterns (nested/stringified JSON, OpenCodesubagent, MCP wrap, missingsubagent_type), and a send-time self-check — reduces first-attempt Task parameter-format failures. Pointer fromparallel-dispatch.md.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.4.
[1.5.3] - 2026-07-25
Harness (commands / frontmatter)
- Frontmatter YAML: quote
descriptionfields that contain:so Cursor/plugin discovery does not drop commands/skills (iteration-loop,mstar-branch-worktree,mstar-phase-gates,mstar-plan-artifacts,mstar-review-qc,mstar-sdd). /iteration-loopscale: addXL= >4 business plans (S/M/L/XL; default stillM). SSOT:mstar-iteration§1.2 +references/autonomous-direction-lock.md.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.3.
[1.5.2] - 2026-07-23
Harness (git policy + SPECS_DIR)
- Process vs results git policy: default tracked under
{HARNESS_DIR}—AGENTS.md,knowledge/,specs/; default gitignored —plans/,iterations/,status.json,sdd/,archived/,notes.json. Cross-clone handoff = tracked results + rootCONCEPTS.md/STRATEGY.md; promote residuals via compound instead of defaultgit addforstatus.json/plans/. {SPECS_DIR}resolve order:{HARNESS_DIR}/specs/→docs/specs/→ repo-rootspecs/(skip empty dirs; greenfield creates{HARNESS_DIR}/specs/). Legacy read-compat: non-emptydesigns/paths.- Aligned:
mstar-plan-conventions,mstar-plan-artifacts,mstar-sddfile-handoffs, host Plan-mode bridges, bilingual README,.cursor/LOCAL-VALIDATION.md. - CLI:
init/doctorappend/check the full process gitignore set (seepackages/cli/CHANGELOG.md).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.2.
[1.5.1] - 2026-07-22
Harness (Phase 5 push cadence)
- Phase 5 push cadence (HARD): CI/review findings may be fixed locally early, but
git pushonly after the previous CI and review wave on the current head have fully completed. After CI settles, new reviews may continue to be fixed locally; never push while CI is still running (cancels/orphans AI reviews — wasted tokens, incomplete results). SSOT:mstar-iteration§5.1a; alignediteration-drive/iteration-loop; core anti-pattern row.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.1.
[1.5.0] - 2026-07-22
Harness (iteration Phase 2 worktree + lease)
- Phase 2 control worktree on
spec_integration_branchplus per-plan feature worktree withexecution_lease/integration_merge_lease(same-host exclusive write lock; serial integration merge;Doneonly after successful merge). - Multi-session cross-plan parallel implement under leases;
Worktree mode: waiveddoes not bypass the cross-plan parallel safety gate;Plan parallelism: serialis scheduling-only. - Routing-eval updates for lease-gated multi-plan parallel and failure modes; bilingual README Phase 2 defaults.
Harness (Phase 5 helpers)
- Phase 5 merge-ready helpers: prefer
babysitor any*-babysitskill;greploopis optional only when the repo has Greptile/greploop. When both apply, run babysit/*-babysitfirst, then optional greploop. Updatedmstar-iteration§5 pointer +commands/iteration-drive/iteration-loop.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.5.0.
[1.4.0] - 2026-07-17
Harness (Kimi Code host)
- Kimi host support:
.kimi-plugin/plugin.json(host-folder layout aligned with Cursor/Codex;sessionStart.skill: pm);mstar-hostKimi reference / Plan-mode bridge; role binding in Agent prompts (built-incoder/explore/planonly). - Install: primary path is Kimi TUI
/plugins install https://github.com/btspoony/mstar-harnessthen/plugins reload(no CLI--target kimi). - Plugin commands:
/morning-star-harness:iteration-start·iteration-drive·iteration-loop.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex/Kimi plugin manifests: → 1.4.0.
[1.3.2] - 2026-07-15
Harness (Cursor Plan Phase 1 feedback-driven)
/iteration-startCursor Plan path: feedback-driven loop — user gives direction/opinions only; agent explores, recommends, and updates the plan.grill-meis deferred until feedback-close and only if blocking gaps remain.- Single CreatePlan URI (HARD): CreatePlan once per Phase 1 Plan session; subsequent updates edit that same file in place; merge and delete accidental duplicates.
mstar-host/ rule /mstar-iteration§1.2: Phase 1 Plan UX documents feedback-driven updates and recommended branch policy (no silentmain/master).- Routing eval v20:
iteration-phase1-cursor-plan-feedback-driven.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.3.2.
[1.3.1] - 2026-07-13
Harness (iteration package layout)
iterations/<id>/directory-first: compass moves to{ITERATION_DIR}/<iteration-id>/delivery-compass.mdwith siblingguides//specs// optional packageREADME.md. Root{ITERATION_DIR}/README.mdindexes one row per iteration (no compass + workspace double entries).- Legacy read compat: flat
{ITERATION_DIR}/<id>-delivery-compass.mdremains readable; new writes must use the package path. - Touches:
mstar-iteration(+ references),mstar-compoundpackage promotion,mstar-plan-conventions/mstar-plan-artifactspath docs, role shells,/iteration-start·/iteration-drive·/iteration-loop.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.3.1.
[1.3.0] - 2026-07-11
Harness (bootstrap absorb)
- Retire
/mstar-bootstrapcommand: the 7-phase project knowledge bootstrap procedure moves tomstar-compound-refresh/references/project-knowledge-bootstrap.md;mstar-compound-refreshandmstar-harness-corecarry short pointers.
CLI (Codex iteration skills)
- Project-scoped Codex install: materializes
iteration-start,iteration-drive, anditeration-loopas.agents/skills/*/SKILL.mdsymlinks from bundled harness commands;doctorvalidates links; global install skips with an explicit warning.
Docs
- Root
INSTALL.md: machine-readable install steps extracted from READMEs. - Slim bilingual READMEs: CLI-first Quick Start; clarify
/iteration-start→/iteration-drivevs/iteration-loopusage paths.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.3.0.
[1.2.1] - 2026-07-10
Harness (Cursor Plan mode × Phase 1 staged direction lock)
/iteration-startCursor Plan path: after Boot, Plan mode creates a blank Phase 1 CreatePlan scaffold first, then runs dynamic stagedgrill-methat updates the plan each stage; Review & Edit / lock / integration branch run only after Build. Agent / OpenCode keep Research → Explore → grill-me → Write → Review.mstar-hostCursor bridge / rule: documentmstar-iterationPhase 1 in Plan mode (no command-name reverse refs in skills).mstar-iteration§1.2: host Plan UX may scaffold then converge interactively; non-Plan hosts unchanged.- Routing eval v19:
iteration-phase1-cursor-plan-staged-grill.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.2.1.
[1.2.0] - 2026-07-10
Harness (/iteration-loop + autonomous direction lock)
/iteration-loop: new PM command for autonomous full Phase 1→5 (cloud-agent friendly). Optional argsdirection+scale(S|M|L, defaultM); code-first auto direction lock (no grill-me); sequential Review & Edit chain retained; Continuous execution through Phase 5 merge-ready. Distinct from/iteration-start(Phase 1 + grill-me) and/iteration-drive(Phase 2→5 only).mstar-iteration§1.2: direction lock modesinteractive|autonomous; scale budget counts business plans only (harness process excluded); autonomous branch resolve order. Detail →references/autonomous-direction-lock.md(skills remain capability providers — no command-name reverse refs).- Docs: README / README_CN / OpenCode package README command tables distinguish start / drive / loop.
- Routing eval v18:
iteration-loop-autonomous-direction-lock— no routine direction yes/no; no grill-me; no silentmaindefault; no process plans in scale budget.
CLI / CI / release
- OpenCode
initfast path: no interactive model picking and noopencode modelsdiscovery (that call could hang with no feedback). Default writes$schema+@mstar-harness/opencode@latestonly; OpenCode default models apply. Optional--*-modelflags remain as advanced overrides. - CI: path-filtered builds for
packages/cli,packages/opencode, and bundledskills/agents/commands; includes CLI smoke check + pack. - Release: use Node 24 bundled npm for Trusted Publishing; remove broken
npm install -g npm@lateston Node 22 (fixesMODULE_NOT_FOUND: sigstore); build packages before publish.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.2.0.
[1.1.0] - 2026-07-08
Harness (ephemeral review bundles)
- Review bundle default: raw QC/QA process reports now live under
{SDD_DIR}/review/(gitignored), while tracked handoff artifacts are durable main-plan gate summaries and{HARNESS_DIR}/status.jsonresidual findings. - Legacy tracked reports:
{PLAN_DIR}/reports/is now legacy / explicit audit mode only, not the default QC/QA report target. - Iteration compass: add a
Quality Gate Summarysection for iteration-level QC/QA verdict and residual rollups without replacing per-plan summaries orstatus.json.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.1.0.
[1.0.6] - 2026-07-08
Harness (SDD per-task reviewer dispatch)
mstar-sdd: pin L2 per-task reviewer tosubagent_type: generalPurpose; forbidqc-specialist*at task scope (plan QC tri remains L3 after all tasks).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.6.
[1.0.5] - 2026-07-07
Harness (tiered QA gate + role-scoped QC/QA refs)
- Tiered QA gate (
mandatory|pm-acceptance|report-only) with PM dispatch matrix (qa-trigger-matrix.md); hotfix/small clean backend defaults topm-acceptance; medium+, UI, and residual work still requires mandatory QA. - L4 acceptance narrowing (
qa-engineer/acceptance-gate.md): evidence reuse from QC consolidated output; no default full test re-run whenQA mode: acceptance-only. - Role-scoped execution refs: leaf QC →
mstar-roles/references/qc-specialist/; L4 QA →qa-engineer/;mstar-review-qcslimmed to PM orchestration only. - Positive-only skill load lists per role (what to read) — avoid priming leaf agents to load
mstar-review-qc. - Routing eval v17: hotfix/small-backend
pm-acceptance; UI remainsmandatory.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.5.
[1.0.4] - 2026-07-07
Harness (parallel implement worktree gate)
- New
mstar-branch-worktree/references/parallel-writable-pre-dispatch.md: SSOT pre-dispatch checklist for same-repo ≥2 concurrent writable implement tracks —git worktree add, absoluteWorktree path, PM stays on integration branch, emit-zero until ready. mstar-dispatch-gates: Dual-gate table — tool concurrency (N invokes in one message) vs same-repo write isolation; clarifies N invoke ≠ worktree compliance.mstar-branch-worktree,mstar-iteration,mstar-phase-gates,project-manager,dispatch-and-assignment,fullstack-dev-shared: thin pointers to the reference; deduped repeated checklist prose.mstar-harness-core: anti-pattern index entry for parallel implement without worktree.- Routing eval v16: hard-fail parallel implement batches missing per-track
Worktree path; strengthen worktree assertions on parallel dev cases.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.4.
[1.0.3] - 2026-07-07
Harness (iteration continuous execution)
iteration-drive: Add Continuous execution (HARD) for Phase 2–5 — no routine yes/no check-ins after progress reports; turn must end with in-flight dispatch; per-plan serial implement loop; explicit legal STOP boundaries.mstar-iteration§2.6: Expand Push discipline (Autonomous Execute) — continuous execution through Phase 5 merge-ready exit; no confirmation questions between tasks, plans, or phases.pmskill: Restore Autonomous Execute push as rule 4; iteration semantics SSOT →mstar-iterationonly (no command names in runtime skills).- Skills command-agnostic cleanup: Remove
iteration-drivereferences from runtimemstar-*skills (host refs, project-manager, sticky implementer, dispatch-and-assignment). - Routing eval v15: Hard-fail mid-execute user check-ins; new
iteration-drive-continuous-after-plan-wavecase.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.3.
[1.0.2] - 2026-07-07
Harness (iteration artifact boundaries)
mstar-iteration§1.5.5 / §1.6: Tighten Phase 1 boundaries —{SPECS_DIR}/for locked long-lived specs;{ITERATION_DIR}/<iteration-id>/workspace (guides/,specs/) for iteration-scoped drafts; no{KNOWLEDGE_DIR}/writes during iteration-start.iteration-start/mstar-dispatch-gates: Review & Edit chain — product-manager / architect edit specs + workspace; writing-specialist specs corpus hygiene and existing-knowledge archive only.mstar-compound: Mandatory iteration workspace promotion at iteration-close — inventory<iteration-id>/workspace; promote worthy specs/guides to{KNOWLEDGE_DIR}/(structured rewrite, not raw copy).- New references:
iteration-artifact-boundaries.md,iteration-corpus-hygiene.md,iteration-workspace-readme-template.md;knowledge-and-designs.md, role refs, andartifact-storage-paths.mdaligned.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.2.
[1.0.1] - 2026-07-07
Harness (SDD iteration-drive + sticky implementer + pm shim)
iteration-drive/mstar-iteration: Phase 2 explicitly mandates per-task SDD loop (mstar-sddin Boot,task-brief→ implementer →review-package→ task reviewer); forbids bulk inline implement Assignments for multi-task plans.- Sticky implementer session (
SDD implementer session: sticky): optional same dev subagent across tasks via host resume (Cursor Taskresume);implementer-session.jsonledger; task reviewers stay fresh per task. Docs:mstar-sdd/references/sticky-implementer-session.md,implementer-continuation-prompt.md. pmskill: thinned to cross-host entry shim (Codex/Cursor/pm); iteration lifecycle Boot lives incommands/; SSOT →project-manager.md+ topic skills.- Assignment / dispatch:
dispatch-and-assignment.mdSDD vs inline table;SDD implementer sessionfield on template. - Routing eval v14: iteration Phase 2 SDD hard-fails; new
sdd-sticky-implementer-multi-taskcase.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.1.
[1.0.0] - 2026-07-07
Harness (SDD + plan QC tri-review)
- New
mstar-sddskill: file handoff, per-task implementer + task reviewer (L2), progress ledger under{SDD_DIR}. - Plan QC with SDD: mandatory tri-review (QC#1/#2/#3 cross-review on branch diff, N=3) when
Execution mode: sdd— single-plan and iteration. Not a lone final single-seat review. - Single-seat
qc.md: onlyExecution mode: inline/ hotfix or explicit user override. - Plan template:
plan.main.mdwith Global Constraints, per-task Interfaces, self-review gate;status.jsonoptionalsdd_dir,task_commits[]metadata. - PM Assignment:
Execution mode,SDD dir,Model tier; implement default SDD for multi-task plans. - CLI: project
init/doctorappend/check.mstar/sdd/gitignore entries. - Routing eval v11: SDD + mandatory tri-review; inline/hotfix single-seat.
Breaking changes
- Multi-task implement defaults to
Execution mode: sdd(single-plan and iteration). - With SDD: plan QC is mandatory tri-review (QC#1/#2/#3); per-task review is task reviewer, not QC.
- Single-seat
qc.mdonly forinline/ hotfix or explicit override. - New plans: Global Constraints + per-task Interfaces.
.mstar/sdd/ephemeral scratch — gitignore required.
Superpowers v6 note
Mstar adds L2 task reviewer per task; L3 tri cross-review retained (not v6's single final reviewer only). See .harness/specs/sdd-1.0.0-design.md.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, Cursor/Codex plugin manifests: → 1.0.0.
[0.7.9] - 2026-07-06
Harness (Assignment plain role ids / OpenCode @ hygiene)
- Assignment SSOT:
dispatch-and-assignment.mdtemplate, PM routing table, andproject-manager.mdLanguage rule — all role references in Assignment body use plain role ids (no@); host invoke uses task toolsubagentmatchingExecute as. mstar-dispatch-gatesand leaf-executor checklist: anti-recursion NEVER rules reworded torole-idmentions (not@<role>literals).mstar-host/references/opencode.md: Role-mention hygiene — Assignment prose vs task-tool dispatch; warnings avoid@literals that trigger OpenCode auto-dispatch.- Iteration commands,
mstar-branch-worktree,mstar-plan-artifacts(plan checkbox duties),pmskill, and role NEVER references aligned on plain ids.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.8 → 0.7.9.@mstar-harness/cliremains 0.5.4.
[0.7.8] - 2026-07-06
Harness (iteration Phase 4–5 / PR merge-ready loop)
mstar-iterationPhase 4–5: Extend lifecycle to PR delivery (Phase 4) and PR merge-ready loop (Phase 5) — verify/fix/re-verify until mergeable, required CI green, and review threads resolved (with per-thread comment + resolve after fixes). Loop SSOT stays inmstar-*; no back-reference to host commands.iteration-drive: Sequences Phase 2 → 3 → 4 → 5; Done only after Phase 5 exit checklist. Optionally discovers non-mstar-*helper skills (greploop,babysit) for Phase 5; fallback mode matches babysit gates (CI + reviews).mstar-harness-core: Iteration lifecycle index and anti-pattern for skipping Phase 5 after PR creation; PM load contract coversmstar-iterationPhase 1–5.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.7 → 0.7.8.@mstar-harness/cliremains 0.5.4.
[0.7.7] - 2026-07-04
Harness (standalone mstar-* / decouple third-party runtime)
- Standalone harness invariant (
mstar-harness-core):mstar-*skills must not require external skills, CLIs, or MCPs in load order; library/API questions use in-repo Read/Grep first. - Bundled
grill-mefor/iteration-startonly: addedskills/grill-me/SKILL.md; command §3 is the sole reference — not inmstar-*index or load matrix.mstar-iteration§1.2 adds generic Direction lock without naming grill-me. - Removed third-party coupling from runtime paths: deleted
library-docs-protocol.md(Context7),openviking-memory-plugin.md(OpenViking); removed Context7 section frommstar-host; Open Design integration frommstar-design-md; optional MCP table frommstar-host/references/opencode.md. open-harness-principles.mddistilled: harness terminology table moved intomstar-harness-core; AGENTS.md layering →mstar-plan-conventions/references/harness-bootstrap-and-agents-layering.md; file removed.mstar-roles: keep Role → typical topic skills cross-role matrix; topic index remains inmstar-harness-core.prompt-engineerretainsskill-creatorrequirement for new/major skill work (AGENTS.mddocuments standalone exception).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.6 → 0.7.7.@mstar-harness/cliremains 0.5.4.
[0.7.6] - 2026-07-01
Harness (iteration dispatch / commands–skills layering)
- Commands vs skills layering:
iteration-startanditeration-driveown orchestration (boot order, phase state machine, step checklists);mstar-iterationandmstar-dispatch-gatesstay command-agnostic. Removed circular skill ↔ command references. iteration-start/iteration-drive: PM invariants, Phase 2→3→PR transition gates, dispatch-turn discipline, Phase 3 PR precondition;phase-3-iteration-closehost todo when one plan remains.mstar-iteration: Phase transition gates table; §2.5 dispatch-turn rules; compass template fields keyed by Phase 1–3 (not command names).mstar-dispatch-gates: Specialist review-and-edit dispatch (generic); Phase 1 chain is sequential; anti-patterns for paste-only dispatch and skipped Phase 3.mstar-host: Removed Mode A/B/C supplemental execution paths; canonical invoke dispatch withBlockedwhen no callable tool;codex.mdandparallel-dispatch.mdaligned.pmskill: Iteration sections deduplicated — single pointer tomstar-iteration.- Phase 1 Review & Edit chain: Sequential
product-manager→architect→writing-specialist(each invoke after prior role’s disk revisions); parallel batch forbidden for this chain.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.5 → 0.7.6.@mstar-harness/cliremains 0.5.4.
[0.7.5] - 2026-07-01
Harness (iteration / branch policy)
- Explicit iteration branch policy: Formal iterations require recorded
iteration_base_branch,spec_integration_branch, andtarget_branchin compass frontmatter andstatus.jsonmetadata. Agents must not silently default tomain/masterfor integration branch creation or final PR targets. iteration-start/iteration-drive: Grill-me branch confirmation, pre-commit checklist branch fields, §2.0 branch metadata gate, and explicitgit checkout -b <spec_integration_branch> <iteration_base_branch>when creating the integration branch.mstar-iteration§2.3: Metadata resolution chain (status.json→ compass frontmatter → ask user); QCReview rangemerge-base usestarget_branchor PM-specified ref.- Compass template: Add
## Delivery Branch Policysection;status-and-residuals.mddocuments example metadata JSON.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.4 → 0.7.5.@mstar-harness/cliremains 0.5.4.
[0.7.4] - 2026-07-01
Harness (skills / docs)
- Remove Superpowers dependency from Morning Star runtime: removed Superpowers install guidance and alignment wording; Morning Star assignments now rely on native dispatch, worktree, plan, review, and evidence contracts.
- Consolidate execution practices into
mstar-coding-behavior: deletedmstar-execution-practices; moved review feedback handling intomstar-coding-behavior; RCA, test-first checks, and completion evidence now stay in coding behavior while PM gate evidence remains inmstar-phase-gates/mstar-review-qc. - Add
mstar-skill-authoring: new Morning Star-native skill authoring guidance for trigger contracts, progressive disclosure, pressure scenarios, and behavior-change evidence. The prompt-engineer role must read it before creating skills, major rewrites, or trigger-description changes. - Docs and host adapters: README / README_CN, OpenCode install docs, role references, and host references no longer require external skill plugins.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.3 → 0.7.4.@mstar-harness/cliremains 0.5.4.
[0.7.3] - 2026-06-30
Harness (iteration-close / commands / docs)
mstar-iterationPhase 3 close gate: iteration-close is now an explicit independent phase after all plans areDone; final plan closure can provide input but does not satisfy close. Close requires compass shape normalization when needed, close entry/exit checklists, compound round, roadmap update, compass frontmatterstatus: completed+end_date, and integration-branch commit before PR.- Compass template hardening: New compass templates no longer prefill
end_date;## Roadmap Position,## Compound Round Summary, and## Iteration Retrospective (minimal)are the expected close-write targets. Legacy prose completion status must be normalized into YAML frontmatter during close. - Compound indexing gate: Each new knowledge doc created in an iteration-close compound round must complete
mstar-compoundPhase 6 and be registered in{KNOWLEDGE_DIR}/README.md, including lightweight captures. - README / README_CN: Harness Commands now list
/mstar-bootstrap,/iteration-start, and/iteration-drive; Harness Workflow now reflectsiteration-start → per-plan execute loop → iteration-close → PR; Core Skills table now includes iteration, design, compound, compound-refresh, and strategy skills.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.2 → 0.7.3.@mstar-harness/cliremains 0.5.4.
[0.7.2] - 2026-06-30
CLI / Cursor install
- Cursor plugin path layout:
mstar-harness init --target cursornow installs a real git checkout at the Cursor plugin path (git clone/git pull), not a symlink to~/.mstar/harness. Cursor does not discover symlinked plugin directories. doctor --target cursor: fails if the plugin path is a symlink;initremoves an existing symlink and clones.- Docs:
docs/cli.md§ Install path layout; README/CN manual install and maintainer refresh notes updated.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.1 → 0.7.2.@mstar-harness/cli: 0.5.3 → 0.5.4.
[0.7.1] - 2026-06-30
Harness (skills / iteration-start)
/iteration-startReview & Edit chain hard gate: Step 5 is mandatory before integration branch commit — dispatch@product-manager,@architect, and@writing-specialistvia Task (parallel when independent); PM thread must not substitute by performing all specialist edits itself. Done = edited compass/plans/specs + compassstatus: locked, not draft artifacts on disk.mstar-iteration§1.6: Documents the review chain as an integration-branch precondition (skill SSOT); no separatereports/<iteration-id>/review files — unlike per-plan QC, iteration review has no downstream audit chain.skills/pm,mstar-dispatch-gates,mstar-harness-core: iteration-start dispatch-first rules, anti-patterns, and pre-commit checklist aligned with command §5.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.7.0 → 0.7.1.@mstar-harness/cliremains 0.5.3.
[0.7.0] - 2026-06-30
Harness (skills / iteration, compound, strategy, qc, commands)
- New
mstar-compoundskill: Knowledge crystallization with Bug/Knowledge dual-track templates, YAML frontmatter schema, 8-question self-diagnosis checklist, overlap detection (update existing docs rather than create duplicates), discoverability check (propose AGENTS.md edits), and CONCEPTS.md vocabulary synergy. Compound executes at iteration-close, not per-plan Done. - New
mstar-compound-refreshskill: Knowledge maintenance — audit/update/consolidate/replace/delete knowledge docs against current codebase, CONCEPTS.md reconciliation. - New
mstar-strategyskill: STRATEGY.md creation and maintenance as project upstream anchor (vision, technology direction, guiding principles, decision log). - New
mstar-iterationskill: Full iteration lifecycle management — Phase 1 iteration-start (scope/roadmap lock, compass creation), Phase 2 Autonomous Execute (per-plan dispatch loop: branch → implement → QC → QA → Done → merge, cross-plan progress sync), Phase 3 iteration-close (compound round, roadmap update, retrospective, commit). Autonomous Execute driver moved here fromskills/pm/SKILL.md; PM skill thinned to role identity, host entry, and dispatch-first rules only. - New
/mstar-bootstrapcommand: Distills STRATEGY.md, CONCEPTS.md, and baseline knowledge docs from existing codebase for projects with no/stale knowledge infrastructure (7-phase flow). - New
artifact-storage-paths.md: Single SSOT for all harness artifact paths undermstar-plan-conventions, referenced by all producing skills to prevent path drift. - QC deep review lenses: Replaced persona subagent dispatch with self-applied lens checklists (12 lenses, 6 trigger signals). No subagent dispatch — resolves anti-recursion violation with
mstar-dispatch-gates. - Updated index:
mstar-harness-coresplit lifecycle into per-plan and iteration-level cycles; all skill index tables,mstar-rolesdependency matrix, andmstar-phase-gatesper-plan gates updated.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,.cursor-plugin/plugin.json,.codex-plugin/plugin.json: 0.6.22 → 0.7.0.@mstar-harness/cliremains 0.5.3.
[0.6.22] - 2026-06-27
Harness (skills / dispatch-gates, roles)
- Anti-recursion: identity-deprivation framework replaces prohibition-only rules: Leaf executors (QC reviewers, devs, QA) were still entering a "consider dispatch" intent window because
NEVER/MUST NOTprohibitions require the model to first activate the forbidden action before suppressing it. Fix shifts semantics from "you must NOT use Task" (prohibition) to "you ARE a leaf executor; Task is NOT your tool" (identity + capability deprivation).- Assignment template (
dispatch-and-assignment.md): new IDENTITY + CAPABILITY BOUNDARY blocks before the**You MUST NOT:**list.Delegationfield moved immediately afterExecute asfor earlier visibility. mstar-dispatch-gates/SKILL.md: leaf-executor identity preamble placed between Load order and NEVER list, with explicit cross-reference back to the Assignment's IDENTITY block.qc-specialist-shared:Non-Recursive Dispatch Rulerewritten as a first-person identity assertion with recursive-dispatch trap recognition ("If you ever think 'this would be more efficient if I dispatched X' — stop").leaf-executor-checklist: first-person preamble before checklist items.
- Assignment template (
Version alignment
- Bump monorepo root,
@mstar-harness/opencode: 0.6.21 → 0.6.22.@mstar-harness/cliremains 0.5.3, Cursor / Codex plugin manifests remain 0.6.21.
[0.6.21] - 2026-06-26
Harness (skills / design-md)
- DESIGN.md YAML frontmatter as SSOT:
mstar-design-mdtemplates and spec now use YAML frontmatter as the single source of truth for token values. Template format bumped to 0.1.0. Both light (DESIGN.md.template) and dark (DESIGN.dark.md.template) templates, the spec reference, completeness checklist, and the Vercel example updated.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode,@mstar-harness/cli, and Cursor / Codex plugin manifests: 0.6.20 → 0.6.21. CLI: 0.5.2 → 0.5.3.
[0.6.20] - 2026-06-26
Harness (commands)
/iteration-startReview & Edit Chain: Changed §5 from "Review Chain" to "Review & Edit Chain". Each role (product-manager, architect, writing-specialist) now reviews AND directly edits the documents rather than only flagging issues. PM only steps in for the final review and lock, no longer burdened with aggregating edits from other reviewers.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.19 → 0.6.20.@mstar-harness/cliremains 0.5.2.
[0.6.19] - 2026-06-26
Harness (skills / coding-behavior)
- Distill Ponytail principles into
mstar-coding-behavior: Strengthened all four sections with distilled concepts from the Ponytail coding discipline:- §1 Think Before Coding: Added "Never lazy about understanding" — read the full task and every touched file before editing; a small diff in the wrong place is a second bug, not efficiency.
- §2 Simplicity First: Added YAGNI gate ("does this need code at all?"), The Ladder (7-level decision hierarchy: YAGNI → reuse existing → stdlib → native platform → installed dep → one line → minimal code), "Deletion over addition / Boring over clever", and
simplify:marker discipline (name the ceiling and upgrade path for deliberate shortcuts). - §3 Surgical Changes: Added "Bug fix = root cause, not symptom" — before editing, grep every caller; fix once at the narrowest shared point, not only the path the ticket names.
- §4 Goal-Driven Execution: Added "Minimal check for non-trivial logic" — any non-trivial change must leave behind ONE runnable check (assert, minimal demo, or single test); YAGNI applies to tests too.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.18 → 0.6.19.@mstar-harness/cliremains 0.5.2.
[0.6.18] - 2026-06-26
Harness (commands)
/iteration-startBoot section: Add explicit## 0. Bootsection aligned with/iteration-drive. Loadsmstar-harness-core,mstar-roles→references/project-manager.md,skills/pm/SKILL.md(Host entry + Boot),mstar-phase-gates(Prepare), andmstar-plan-conventions/mstar-plan-artifactsbefore starting research.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.17 → 0.6.18.@mstar-harness/cliremains 0.5.2.
[0.6.17] - 2026-06-26
Harness (commands)
/iteration-drivePR target fix: Resolve the final PR target branch from iteration metadata (status.json→target_branch) instead of hardcodingmain. Defaults tomainwhentarget_branchis not set.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.16 → 0.6.17.@mstar-harness/cliremains 0.5.2.
[0.6.16] - 2026-06-25
Harness (commands)
- New
/iteration-drivecommand: Add a command that invokes the PM Autonomous Execute driver (skills/pm/SKILL.md§ Autonomous Execute driver) to drive all non-Doneplans to completion. The command checks the three precondition gates first; if Prepare is incomplete, it directs the user to/iteration-start. Otherwise, it runs the full implement → QC → QA → Done per-plan loop until every plan isDone, then optionally creates a PR from the integration branch tomain.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.15 → 0.6.16.@mstar-harness/cliremains 0.5.1.
[0.6.15] - 2026-06-24
Harness (commands)
- New
iteration-startcommand: Add a reusable command (/iteration-start) to bootstrap a new harness iteration. The command guides PM through six checkpointed steps: research (structured harness dirs + unstructured glob forroadmap*.md,deferred*.md,features*.mdetc.), explore candidate directions for product completeness, lock direction withgrill-me, write iteration compass and plans, run the review chain (@product-manager→@architect→@writing-specialist→ PM lock), and create the iteration integration branch frommain. Registered for both Cursor (commands/auto-discovery) and OpenCode (harness-commands/bundled via plugin code).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.14 → 0.6.15.@mstar-harness/cliremains 0.5.1.
[0.6.14] - 2026-06-24
Harness (skills / design-md)
- New
mstar-design-mdskill: Add a specialized skill for creating, auditing, and maintaining project-levelDESIGN.mddesign system specifications. Three-level completeness checklist (MVP/Standard/Production) defines progressively what an agent needs from a design system to generate consistent UI without guessing tokens. Includes Vercel Geist as annotated reference, light/dark dual-theme support (DESIGN.md+DESIGN.dark.mdwith same token names, different values), and built-inLEVEL*_PLACEHOLDERmarkers for iterative maturity upgrades. Skill ships with full references (design-md-spec.mdnorm,completeness-checklist.md,vercel-example.md) and templates (DESIGN.md.template,DESIGN.dark.md.template). - Phase gate: DESIGN.md check: PM Prepare quick-check adds "if plan involves UI work, does DESIGN.md exist and meet the declared completeness level."
- Role integration:
mstar-design-mdregistered in all relevant role dependencies — architect as primary creator, product-manager for design intent/requirements, frontend-dev and fullstack-dev as consumers (read tokens before implementing styled UI), qc-specialist as verifier (check UI alignment with DESIGN.md), qa-engineer for visual output verification.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.13 → 0.6.14.@mstar-harness/cliremains 0.5.1.
[0.6.13] - 2026-06-20
Harness (agents)
- Drop
model: inheritfrom role frontmatter: Remove themodel: inheritline from all 13agents/*.mdfiles. These agents inherit the default model via the plugin manifest rather than an explicit per-agent override, reducing frontmatter noise and avoiding confusion with model pinning. (Cursor-only frontmatter cleanup.)
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.12 → 0.6.13.@mstar-harness/cliremains 0.5.1.
[0.6.12] - 2026-06-20
Harness (skills / dispatch gates)
- Assignment anti-pattern header: Every PM Assignment now opens with a
**You are a leaf executor. You MUST NOT:**block containing the most likely dispatch violations for the assignment's situation. PM fills it with context-specific anti-patterns on top of the universal floor (no recursive dispatch, no interpreting routing text as invoke, available ≠ authorized). TheOrchestration Guardsection references this new top block. (mstar-roles/references/project-manager/dispatch-and-assignment.md) - Leaf executor checklist: Updated to require reading the
**You are a leaf executor. You MUST NOT:**block first on every assignment. (mstar-dispatch-gates/references/leaf-executor-checklist.md) - Dispatch gates: Added a reference to the new assignment-level anti-pattern block in the anti-recursion section. (
mstar-dispatch-gates/SKILL.md)
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.11 → 0.6.12.@mstar-harness/cliremains 0.5.1.
[0.6.11] - 2026-06-16
Cursor plugin / agents
- Subagent registration: Reorder all
agents/*.mdfrontmatter to Cursor-first schema (name,description,model: inheritbefore OpenCodemode/tools/permission) so plugin manifestagents/are discovered as Task subagents without a separate~/.cursor/agents/install step. - CLI Cursor install path: Align global/project plugin symlinks to
morning-star-harness(matching.cursor-plugin/plugin.jsonname). - CLI doctor: Validate plugin agent files exist and use Cursor-first frontmatter.
- Docs: Update README (EN/CN), CLI guide, plugin README, LOCAL-VALIDATION subagent smoke test, and
mstar-hostCursor reference.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.10 → 0.6.11. - Bump
@mstar-harness/cli: 0.5.0 → 0.5.1.
[0.6.10] - 2026-06-11
Harness (skills / agents)
- Profile B Done compaction (
plans-done.json): Canonical schema is now{ "plans": [<plan-id>, ...] }only — no rich catalog objects (title,done_at,plan_file,archived_record, etc.). Per-plan detail stays inarchived/plans/<plan-id>.json(a singleplans[]row snapshot). SSOT:mstar-plan-artifacts/references/done-compaction.md. - Templates & bootstrap: Add
templates/plans-done.empty.json; document Profile B init inmstar-plan-conventionsharness bootstrap and PMplan-management.md. - Profile B constraints: Disallow parallel indexes (
_index.json, object-array catalogs); migrate legacyplans-done.jsonby rewriting to id list only.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.9 → 0.6.10.@mstar-harness/cliremains 0.5.0.
[0.6.9] - 2026-06-09
Harness (skills / agents)
pm(PM orchestration entry): Generalize beyond Cursor/Codex/pmonly — Cursor/Codex use/pmasproject-managerlauncher and autonomous Execute driver; OpenCode switches to PM orchestration when the active agent is notproject-manager.- Autonomous Execute driver: After Pre-implement GO, read
{HARNESS_DIR}/status.jsonbacklog, checkout the iterationspec_integration_branch, run per-plancreate <plan-feature> from integration→ implement → QC/QA → merge back to integration until all plans areDone; set host todos (CursorTodoWrite, Codexupdate_plan, OpenCode UI) before each wave so session scope does not drift. mstar-roles(PM shell): Cross-reference updated to point at the newpmskill sections (host entry, Execute driver, dispatch-first).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.8 → 0.6.9.@mstar-harness/cliremains 0.5.0.
[0.6.8] - 2026-06-04
Harness (skills / agents)
- QC fix-round revalidation (default): After dev fixes blocking findings, PM dispatches only the QC seat(s) that raised each item (targeted re-review), not a blind full tri-review. Reviewers update the same report file in place (
## Revalidation); PM updates the sameqc-consolidated.md. Full tri re-review requires explicit AssignmentQC re-review: full tri-reviewand newqcN-rev2.mdbasenames. - QC report naming: Under
{PLAN_DIR}/reports/<plan-id>/, use short basenamesqc1.md,qc2.md,qc3.md, andqc-consolidated.md(no<plan-id>prefix in filenames;plan_idstays in frontmatter and the directory). SSOT:mstar-plan-artifacts/references/plan-files-and-reports.md. - Dispatch:
mstar-dispatch-gatesandmstar-hostparallel-dispatch allow N = 1–3 invokes for targeted re-review in one message; initial tri-review remains N = 3.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.7 → 0.6.8.@mstar-harness/cliremains 0.5.0.
[0.6.7] - 2026-06-03
Harness (skills / agents)
- Add a Codex Plan / Goal Mode bridge reference so
/plan,update_plan,/goal, goal progress, and thread summaries cannot replace.mstar/SSOT or Morning Star Done authority.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.6 → 0.6.7.@mstar-harness/cliremains 0.5.0.
[0.6.6] - 2026-06-03
Harness (skills / agents)
- Add Codex custom-agent source files under
codex/agents/so dispatchable Morning Star roles can be installed into Codex'sagents/*.tomlsubagent surface;project-managerremains entered through/pm. - Change the recommended project
{HARNESS_DIR}default to.mstar/while continuing to recognize.agents/,.plans/, andplans/legacy layouts.
CLI
- Change Cursor and Codex install flows to maintain a shared local repo at
~/.mstar/harnessand create host-specific symlinks instead of Cursor project submodules or Codex URL-source marketplace entries. - Link Codex custom agents from
codex/agents/*.tomlinto global or project Codex agent directories duringinit, and validate them indoctor.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.5 → 0.6.6. - Bump
@mstar-harness/cli: 0.4.0 → 0.5.0.
[0.6.5] - 2026-06-03
Harness (skills / agents)
- Durable Roadmap Gate: Strengthen
mstar-harness-core,mstar-phase-gates, PM gates, Cursor Plan mode bridge, and product/architecture templates so staged, partial, or temporary work must record a target state and roadmap before implement GO / Done. - Coding behavior: Redefine
Simplicity Firstas the smallest durable slice, not a temporary workaround; deferred items must be tracked in plan/status artifacts rather than only in chat. - Cursor routing-eval: Bump routing evals to v8 with
durable-roadmap-required-for-staged-work, guarding against “do half now, later plan” failures.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.4 → 0.6.5.@mstar-harness/cliremains 0.4.0.
[0.6.4] - 2026-06-03
Cursor Plan mode × Harness
- Build resume contract: Cursor Build is treated as plan resume, not
/pmreplay. Morning Star plans must reload harness context, resume PM orchestration, and dispatch implementation instead of letting the parent Build session edit product code. - Cursor routing-eval: Add
cursor-plan-build-resumeto guard against parent-session implementation before SSOT plan registration, PM Assignment, and host Task dispatch. - Cursor plugin manifest: Register
agents/in.cursor-plugin/plugin.json, matching plugin docs and validation checks.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.3 → 0.6.4.@mstar-harness/cliremains 0.4.0.
[0.6.3] - 2026-06-03
Harness (skills / agents)
pm(/pm): Slim entry skill (~60 lines) with/pm-only rules — dispatch-first (Assignment + invoke per implement batch; parent agent must not write product code; no Task skip for in-thread context), Autonomous Execute push as dispatch loops across one iteration (multi-plan), branch truth (no silent cwd vs plan/status.json). Detailed gates/routing defer tomstar-dispatch-gates,mstar-host, andproject-managerreferences.mstar-roles(PM shell):/pmsessions point atskills/pm§/pm-only rules` instead of duplicating long prose.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.2 → 0.6.3.@mstar-harness/cliremains 0.4.0.
[0.6.2] - 2026-06-02
Harness (skills / agents)
pm(/pm): Autonomous Execute push — after Execute starts (planlocked, Pre-implement GO), continuously drive the active iteration backlog (possibly multipleplan_ids) through implement → InReview → Done without routine basic yes/no prompts; use PM-recommended defaults; resolve process gates frommstar-*skills (Blockedonly on true conflicts or irreversible scope gaps).mstar-roles(PM shell): Pointer toskills/pm§ Autonomous Execute for sessions entered via/pm.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.1 → 0.6.2.@mstar-harness/cliremains 0.4.0.
[0.6.1] - 2026-06-01
Harness (skills / agents)
mstar-plan-artifacts: Add read-onlyscripts/tech-debt-rollup.sh(jq) to computemetadata.tech_debt_summaryfrom openresidual_findingswith PASS/DRIFT check; document as canonical rollup path inreferences/status-and-residuals.md(English).mstar-roles(PM): Default spread acrossfullstack-devandfullstack-dev-2when >=2 independent backend/fullstack units (parallel dual-track or sequential round-robin); single-id collapse requiressingle_stream_justifiedand documented override.- Cursor routing-eval: New
sequential-backend-batches-rotationcase; tightentwo-parallel-backend-moduleshard_fail for single-dev without justification.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.6.0 → 0.6.1.@mstar-harness/cliremains 0.4.0.
[0.6.0] - 2026-05-30
Unified host skill
- Breaking: Merge
mstar-host-opencodeandmstar-host-cursorinto singlemstar-hostatskills/mstar-host/(platform auto-detect +references/opencode.md,cursor.md,codex.md,parallel-dispatch.md,cursor-plan-mode-bridge.md). - Add
references/codex.mdwith Codex-specific runtime adaptation for plugin skills, clarify behavior, sandboxed file/shell work, tool discovery, and dispatch limits when no callable multi-agent tool exists. - Remove
skills-cursor/andpackages/opencode/skills/; OpenCode plugin registers onlyharness-skills/. Cursor pluginskillsarray is./skills/only. - Update role/topic references and
rules/mstar-cursor-plan-mode.mdcpaths.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.5.1 → 0.6.0.@mstar-harness/cliremains 0.4.0.
[0.5.1] - 2026-05-29
Cursor Plan mode × Harness (Cursor plugin)
- Dual-write bridge: CreatePlan mirrors to
{HARNESS_DIR}/{PLAN_DIR}SSOT (.agents/plans/,status.json); fixed bootstrap todosharness-init,spec-register,mirror-plan; per–task-ID commit gate on implement todos. Seeskills-cursor/mstar-host/references/cursor-plan-mode-bridge.md, updates tomstar-host-cursor,pm, andmstar-harness-core. - Rules: Add
rules/mstar-cursor-plan-mode.mdc(alwaysApply); register"rules": ["rules/"]in.cursor-plugin/plugin.jsonso plugin rules (includingmstar-entry) load reliably. - Maintainers: Move pre-release checklist to
.cursor/LOCAL-VALIDATION.md(removed from.cursor-plugin/).
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.5.0 → 0.5.1.@mstar-harness/cliremains 0.4.0.
[0.5.0] - 2026-05-26
Codex integration
- Replace the obsolete checked-in
.codex/marketplace.jsonpath with the supported personal marketplace flow:~/.agents/plugins/marketplace.jsonusing a"source": "url"entry for this repository. - Add Codex support to
@mstar-harness/cli:init --target codexwrites the personal marketplace entry anddoctor --target codexvalidates it. - Update English and Chinese install docs for Codex CLI install and manual personal-marketplace setup.
Harness (skills / agents)
- Fix the
/pmskill frontmatter so the Codex plugin validates cleanly from the repository root.
Version alignment
- Bump monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests: 0.4.1 -> 0.5.0. - Bump
@mstar-harness/cli: 0.3.1 -> 0.4.0.
[0.4.1] - 2026-05-19
Harness (skills / agents)
mstar-plan-artifacts: Movetemplates/(status.empty.json,notes.empty.json) frommstar-plan-conventionsso artifact SSOT and empty-file templates live in one skill;mstar-plan-conventionskeeps path discovery and init steps with pointers tomstar-plan-artifacts/templates/.
Version alignment
- Bump 0.4.0 → 0.4.1 for monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests.@mstar-harness/cliremains 0.3.1.
[0.4.0] - 2026-05-19
Harness (skills / agents)
- Topic skill split (on-demand loading): Add
mstar-phase-gates,mstar-dispatch-gates,mstar-branch-worktree, andmstar-plan-artifacts(includesstatus.json/ residual SSOT; no separatemstar-status-residuals); slimmstar-harness-coreandmstar-plan-conventionsto entry + pointers;mstar-phase-gatesandmstar-branch-worktreekeep full rules inSKILL.md(no extra reference layer). - Roles (
mstar-roles): Per-role Required Skill Dependencies in everyreferences/<role>.md; hub matrix inmstar-rolesSKILL.md; PM sub-refs usemstar-plan-artifactsfor severity SSOT. - Hosts (
mstar-host-cursor,mstar-host-opencode): Load-order wording and QC/worktree pointers aligned with topic skills. - Plan directories (
mstar-plan-conventions): Formalize{ITERATION_DIR}({HARNESS_DIR}/iterations/) and{KNOWLEDGE_DIR}({HARNESS_DIR}/knowledge/); documentdocs/vs harness subtree content boundaries (Nexus-aligned); optionaliteration_compass/iteration_refsinstatus.jsonmetadata. - Prepare clarify (now primarily
mstar-phase-gates; summary inmstar-harness-core):clarifydiscipline — shared understanding, explore before asking, recommended answer per question.
Docs
- README.md / README_CN.md: Expanded core skill table; note
.harness/as gitignored maint workspace for specs/plans (not published skills). - AGENTS.md:
.harness/maint workspace; topic skill routing table; post-change cross-reference check.
Version alignment
- Bump 0.3.2 → 0.4.0 for monorepo root,
@mstar-harness/opencode, and Cursor / Codex plugin manifests.@mstar-harness/cliremains 0.3.1.
[0.3.1] - 2026-05-15
Harness (skills / agents)
- Plan / Git alignment (
mstar-plan-conventions,mstar-harness-core): When multiple plans share one Spec (primary_spec), document a Spec integration branch plus per-plan_id implementation branches; merge each plan’s work back to the Spec line; require a PR (or equivalent controlled merge) before landing that integration line onmain/ the default protected branch (narrowBranch policyexceptions unchanged). Addsspec_integration_branchand clarifiedmerge_targetmetadata inreferences/status-and-residuals.md, QC/worktree notes inreferences/plan-files-and-reports.md, and a cross-reference inreferences/branch-and-worktree.md.
Version alignment
- Bump 0.3.0 → 0.3.1 for npm workspaces (
morning-star,@mstar-harness/cli,@mstar-harness/opencode) and Cursor / Codex plugin manifests.
[0.3.0] - 2026-05-14
Harness (skills / agents)
- PM role: Split
project-managerdetail intoskills/mstar-roles/references/project-manager/*.md; keep a compact orchestrator shell inreferences/project-manager.md. - Roles: Translate
mstar-rolesrole references and skill hub to English; reference host adapters by skill name (mstar-host-opencode,mstar-host-cursor) instead of filesystem paths in role text. - AGENTS.md: Host adapter routing documents skill names and in-repo layout (
skills-cursor/mstar-hostfor Cursor). - PM routing: Phase routing pre-flight (short go/no-go) and OpenCode prerequisite vs dispatch turn model in
mstar-host-opencode(paste-only dispatch failure mode). - OpenViking (optional): Add
mstar-harness-core/references/openviking-memory-plugin.md— rules when thememsearchtool is present; entry frommstar-harness-coreSKILL. - Load contract: Clarify
mstar-coding-behavioris required for implement / review / QA / ops roles, not forproject-managerorchestration-only work (mstar-harness-core,mstar-roles).
Docs
- Trim plan bootstrap template sections from
README.md/README_CN.mdwhere superseded by current flows.
Version alignment
- Bump 0.2.0 → 0.3.0 for npm workspaces (
morning-star,@mstar-harness/cli,@mstar-harness/opencode). - Bump 0.1.0 → 0.3.0 for Cursor and Codex plugin manifests to match the monorepo release line.
[0.2.0] - earlier
See packages/cli/CHANGELOG.md for @mstar-harness/cli 0.2.0 notes. OpenCode packaging, postinstall bundle of skills/ + agents/, and related fixes landed in the same era as the 0.2.0 CLI release.