Skip to content

v2.2.0

Latest

Choose a tag to compare

@btspoony btspoony released this 13 Aug 13:35
· 3 commits to main since this release
v2.2.0
11b9f6b
  • 2026-08-13

Harness

  • dsh plugin: the context catalog now carries an agentFlow evidence row — the actual subagent dispatch/settle ledger ({HARNESS_DIR}/agent-flow.jsonl, bounded JSONL truncated to ~500 events; single recording core DshHostAdapter.dispatchGate behind both the tools/pre-execute listener and the beforeDispatch host hook; real settle recording — tools/post-execute is a VERIFIED registry seam (dispatched for every tool call) settling foreground dispatch calls, background tasks settle via ctx.tasks.onTaskDone terminals, 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-status catalog row breaking the session round (session event "user/message" carries non-JSON-serializable data) when the iteration-gate section cannot be built — no status.json, no active steering compass, or an unreadable control doc. The optional iteration key is now omitted instead of present-as-undefined, keeping the appended message losslessly JSON-serializable at the Session.append boundary.
  • dsh plugin: fixed the broken @mstar-harness/dsh build gate — the web client bundle (dist/client.js) is now emitted by the full build. Root causes: tsconfig.json types omitted react (TS7026: no JSX.IntrinsicElements for the panel .tsx sources) and the @deepseek-ai/dsh-client-* peer-stub workspace links were missing from node_modules (TS2307), which failed the build's final bunx tsc step and left the client bundle absent. The typecheck gate is green again; dsh --profile web boots with the plugin's /plugins/@mstar-harness/dsh/client.js registered and served.
  • dsh plugin: mstar slash commands (/iteration-start, /iteration-drive, /iteration-loop, /codebase-audit) now declare an input hint (new frontmatter input: in commands/*.md), so the dsh web client claims them on menu pick instead of executing immediately: /name is 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 input section; quoted frontmatter values (description/input) now register unquoted. Updated mstar-host/references/dsh.md.
  • dsh plugin: @deepseek-ai/dsh-* peers upgraded to the 0.1.0-rc.3 line (^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 below 0.1.0-rc.3 (old 0.0.1-rc.x / 0.1.0-rc.2 lock entries and nested copies) was purged from bun.lock + node_modules. The monorepo root gains a bun overrides entry pinning @deepseek-ai/dsh-llm to ^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's MessageSourceMap augmentation (mstar-engine-status catalog kind) no longer merges into the union dsh-agent/dsh-session see, breaking createUserMessage typing at the agent/pre-step catalog push. tests/peer-deps.spec.ts pins ^0.1.0-rc.3.
  • dsh plugin: dev-time @deepseek-ai/dsh-* seam resolution switched from the local link farm to the npm registry at 0.0.1-rc.5 (bun auto-installs peers via the monorepo-root .npmrc ${NPM_TOKEN}). Removed scripts/setup-dsh-links.ts + dsh:link/dsh:link:check (prepare is now build-only); dropped peerDependenciesMeta.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-jobs joined the existing peers (all ^0.0.1-rc.5); added keywords: ["dsh", "dsh-plugin"] and tests/peer-deps.spec.ts (registry peer contract, peers-not-optional regression).
  • dsh plugin: @deepseek-ai/dsh-* peers upgraded to the 0.1.0-rc.6 line (^0.1.0-rc.6; @deepseek-ai/cordis stays ^4.0.1) — every lock entry below 0.1.0-rc.6 (0.1.0-rc.3 pins and any 0.0.1-rc.x leftovers) was purged from bun.lock; the whole dsh tree now resolves at 0.1.0-rc.6 (60 lock entries, single hoisted copy per package). The monorepo-root bun overrides entry for @deepseek-ai/dsh-llm is removed: with every dsh package on the same ^0.1.0-rc.6 range bun dedupes to one copy, so the rc.3-era nested-copy workaround is no longer needed (verified: 1 lock entry, 0 nested dsh-llm copies; the MessageSourceMap augmentation typecheck passes). Root dependencies stays engine-only. Seam-resolution docs updated for the public-registry reality (the root .npmrc auth token was dropped in 0c884d4): packages/dsh README (EN/zh) and tests/peer-deps.spec.ts no longer claim a root .npmrc/${NPM_TOKEN} — the spec now asserts no scoped-registry mapping comes back and the installed dsh-llm resolves to exactly 0.1.0-rc.6. Caveat: @deepseek-ai/* publishes dist-tags.latest = 0.0.1-rc.1 (an ancient line whose packages reference never-published peers like dsh-user-interaction), so bun update @deepseek-ai/... must not be used — it downgrades to that line and 404s; the lock-purge + bun install path is the supported upgrade route.
  • dsh plugin: dev-time dependency strategy for the @deepseek-ai/dsh-* seams switched from committed peer-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-root node_modules/@deepseek-ai/ (idempotent; bun run dsh:link / dsh:link:check; wired into prepare before the build). peerDependencies stay declared (the host provides them at runtime; marked optional so bun 1.2 does not 404 on the private registry); the peer-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.ts slimmed from a 3184-line monolith to a module index over src/gates/* (pure refactor, zero behavior change — the 27-name export surface is frozen identical by tests/export-surface.spec.ts, and the export-surface type layer now runs in CI via typecheck:tests (bunx tsc --noEmit -p tests/tsconfig.json)).
  • dsh plugin: HarnessResolver.forWorkspace now passes workspaceRoot = 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 ~/.mstar CLI-install root) is never adopted. The dsh boundary deliberately diverges from the CLI's git-top-level boundary. Explicit config.harnessDir still wins outright.
  • dsh plugin: the pre-step catalog is now ONE unified mstar-engine-status message — 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 a status.json) — all from one cached status.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-status catalog through a pure projectGraph function (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.2 is inlined into dist/client.js (MIT; license/size reviewed in guides); the build script now asserts the bundle carries no import.meta / ESM statements — the web loader executes plugin bundles as classic <script>s, so a zustand v4 import.meta.env read (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 (WHATWG CSS.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 prepare script from @mstar-harness/dsh (fresh-checkout bun install no longer fails on the gitignored engine dist/; the monorepo builds packages explicitly, matching cli/opencode), wired dsh into the release pipeline (release-surfaces.ts version surface + changelog, release.yml build/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 form dsh 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/dsh to the dsh 0.0.1-rc.2 rename wave — seam package renames consumed (@deepseek-ai/dsh-skill-local@deepseek-ai/dsh-skill-filesystem; test-only dsh-tasks/dsh-tasks-fakedsh-jobs/dsh-jobs-fake), peerDependencies bumped ^0.0.1-rc.1^0.0.1-rc.2, and renamed API symbols (SkillServiceSkillRegistry; the optional background-seam surface ctx.tasks/onTaskDone/TaskId/TaskDoneListener/TaskSnapshotctx.jobs/onJobDone/JobId/JobDoneListener/JobSnapshot; client LocaleServiceLocaleRuntime, SlotsServiceSlotRegistry). Docs/README skill-local prose renamed to skill-filesystem.
  • dsh plugin: the <mstar_engine_status> watermark now shows one unified mstar version line instead of separate engine/plugin versions (single-version invariant — the bundled engine and the plugin share one version).
  • Removed local-maintenance path references (.mstar/iterations/…, .harness/docs/…) from user-facing skills: mstar-host/references/dsh.md and mstar-iteration/references/phase-2-worktree-lease.md now reference only runtime consumer contracts (verified zero residual paths).
  • Aligned mstar-branch-worktree feature-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 dshClient field to the nested dsh.client (platform: 'web' + declared inject faces), matching upstream client-modules discovery (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/engine devDependency is pinned exact 2.0.5 and the engine version assertions in the dsh suites now expect 2.0.5), restoring the unified mstar version watermark after the upstream v2.0.5 merge.
  • dsh plugin: version bumped to 2.1.1 (single-version invariant — the @mstar-harness/engine devDependency is pinned exact 2.1.1 and the engine version assertions in the dsh suites now expect 2.1.1), restoring the unified mstar version watermark 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/dsh package now ships a web client plugin (workflow panel) on the same mstar bundle row — dsh.client + exports["./client"] discover the client half automatically (no separate profile layer or install step). The plugin registers a conversation.view view-ring tab (id: 'mstar-workflow', order: 20) rendering the latest mstar-engine-status catalog 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 the web profile 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 explicit harnessDir config 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 subagent call with run_in_background: true in one message; foreground N≥2 invokes run serially (fail-closed exclusive tool classification) and do not satisfy an N-parallel requirement (dispatch-incomplete / Blocked). Updated mstar-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-running running glow / agent-settled settled — the standalone GREEN done frame + ✓, never on off-tier roles / agent-idle idle 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 as data-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 the AgentEdge model: dim dashed expected stage skeleton, business actual handoffs, and the animated "next" edge (@keyframes canvas-dash-flow, disabled under prefers-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 from zones.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-motion run asserts the next-edge and running-card animations compute to none); a real pointer-drag sequence (CDP Input.dispatchMouseEvent) moved the data-canvas-pan transform from translate(0px, 0px) to translate(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 the N executing · M pending summary). 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 under prefers-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 a prefers-reduced-motion run asserting the animations are disabled; evidence in the iteration guide iter-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/react rendering layer, its plain-.css text loader, and the devDependency) is removed, and the build now asserts the emitted dist/client.js carries no xyflow/reactflow markers (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/5 badge, 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 plan 20260810-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-motion respected, motion ≤200ms); evidence in the iteration guide iter-20260810-panel-zones/guides/canvas-zones-dual-theme-verification.md.
  • dsh plugin: the 事件记录 tab (spec F1.5) is now a non-canvas log pageEventLogPage renders two partitions from the projected ZoneView slices (consumed unchanged, zero projection changes): Agent 流转事件 (view.events ≤50 latest-first; off-pipeline unexpected dispatches fold in once via expected: 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#taskId tag, 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-corner AgentEventDock is removed (无双份日志, spec §5): its row layout + status colors migrated into this page, and the header TabNav already is the jump to the tab — zero data-agent-event-dock anchors remain. New data-event-log-* test anchors (section/row/details/field/missing/empty), 23 new event-log.* locale keys (zh/en symmetric) in the PanelKey union, and a new token-driven event-log.module.css (zero bare colors — dark mode is the host token flip; the <details> disclosure chevron is a token-colored ::before that rotates 90° on expand; 150ms hover/rotation sits in the 120–150ms window; motion killed by the panel root prefers-reduced-motion rule).
  • 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); a prefers-reduced-motion run asserts the row hover transition computes to 0s; 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-log re-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/formatEventTimeFull no longer throw RangeError on a finite-but-out-of-Date-range ts (it degrades to「—」like any missing value); the events partition title moved to the symmetric event-log.section.events locale key; the READMEs/dsh guide now attribute the fixed footer bar's removal to the tabs-shell plan (this plan removed only the AgentEventDock).
  • dsh plugin: panel F2 quickfix (plan 20260811-panel-f2-quickfix) — (1) the 任务迭代 tab's step row now renders 5 equal full-width unit blocks (flex 1 1 0, centered content, --mstar-space-* gap) with pure-number badges and n/total summary — the connector bars (data-step-connector*) are removed and zh/en carry no 步骤/Step wording; (2) KNOWN_AGENTS is now exactly 14 roles — project-manager (the primary orchestration agent, never an assignable subagent) is removed from the 代理执行 roster; (3) the agent canvas drops the ops-on-demand pipeline stage (5 stages, qa-gate terminal), moves ops-engineer / prompt-engineer into a separate on-demand column (projection-owned zone, 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 own data-agent-edge-loop anchor — pending semantics 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-gate terminal; the sdd-task-review stage is removed and its SDD L2 reviewer moves off-pipeline); (2) KNOWN_AGENTS is now exactly 13 rolesgeneralPurpose becomes the general bucket (its own trailing column, stage: null), explore is removed (no card, no column — a stray explore dispatch folds into general), ops-engineer / prompt-engineer keep the on-demand column, project-manager stays 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 (former generalPurpose reviewer, scout, anonymous role === '') folds into the single general entity (agent / task become record fields); (4) the SDD loop back-edge is redrawn as sdd-implementgeneral — 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) AgentZone is 'flow' | 'on-demand' | 'general' (the unexpected track 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 all data-event-log-* anchors preserved (event-log unexpected badge 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-column never emits general): the single general bucket card renders at the bottom INSIDE the sdd-implement column (stable partition — dev cards first, general card below — with a dashed separator + small in-bucket general label, idle placeholder preserved, data-agent-bucket="general"); the sdd-implementgeneral SDD loop back-edge is removed — no more curved double-arrow below the column band and no data-agent-edge-loop anchor (AgentEdge.loop / solveLoopBow / LOOP_BOW_MARGIN / GENERAL_COLUMN dead 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 is status: active (Phase 1 in flight — catalog compassStatus field), Step 1 (iteration-start) renders CURRENT with verdict unknown and NO PASS/FAIL badge (Phase 1 has no gate verdict), next = Step 2; locked / missing compassStatus keeps 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, and ctx.tasks.onTaskDone terminals 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, the N 执行中 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 rightmost unknown column (the general bucket gets its OWN rightmost column, user 2026-08-12 decision — the former F4.2 "bottom inside sdd-implement" placement is superseded); the sdd-implement column splits into sub-buckets by the projected entity.bucketimplementor 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 former generalPurpose seat), with implementor / sdd-reviewer caption labels; a bidirectional supervise line (implementor ↔ sdd-reviewer — the mstar-sdd mutual-supervision contract) runs inside the sdd-implement column, dim dashed by default and lit business only when the projected evidenced flag is true (evidence-driven lighting, never a fabricated activation); KNOWN_AGENTS grows 13 → 14 roles (code-reviewer joins 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 projected emphasis: 'current' | 'next' | 'off' | null tier 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-card opacity, so the status point + running glow stay fully opaque. (2) edge rework — a strict 4-column layout with NO standalone unknown column (the general bucket sinks into an unknown sub-partition at the bottom of the qa-gate column); the expected stage skeleton arrows and the ANIMATED next edge are REMOVED (flow order implied by the fixed column order + labels, current position by the running glow + status point), leaving TWO semantic kinds: evidence-driven actual handoff edges drawn as bezier C curves 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 the report tool, 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 InProgress state.plans[] row; +N more when several run in parallel, muted「无进行中 plan」when none). (2) settled green done frame + ✓ with the off-tier exclusion — a settled entity with emphasis ≠ '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 SAME IterationInfoSection component from the same view.iteration data (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 projects done「已完成」 (completed — a finished Step 1 no longer reads as idle「待命」 while Step 2 is current; next stays the single forward target, idle is 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 renders next only 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 at PLAN_CAP and shows a clickable 「更多」/「收起」 expand button (data-kanban-more anchor) 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 compass iterationId, else the nearest iteration via the catalog plans[].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; advisory is no longer terminal — a soft-enforcement dispatch falls through to its paired settle (green ✓ completed when a settle exists, running when none), denied stays 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 host data-conversation-composer-overlay (full-height opt-in) so .rowList's overflow-y: auto engages 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. The harness-skills/ mirrors are gitignored and regenerated by bun 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 (plan 20260810-panel-canvas-zones). Catalog evidence: HarnessPlanView.doneAt (from done_at) and MstarHarnessState.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.css resolves through a --dsw-* token (zero bare colors of any form, including CSS Color 4 color()), spacing rides the --mstar-space-* ramp, motion 120–200ms with prefers-reduced-motion off-switch; dark mode is the host's body[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-log plan 交付)。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-motion run 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 column min-width is 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-harness v2.1.1 line into the dev-dsh branch — adds the code-reviewer role (read-only L2 SDD task reviewer / audit executor; replaces generalPurpose as 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 .gitignore format (.mstar/** + tracked re-includes AGENTS.md / knowledge/ / specs/) across the engine, CLI init fence and bundled skills, and aligns all 11 version surfaces to 2.1.1.
  • engine: emitGitignoreSnippet / validateGitignore / HARNESS_PROCESS_GITIGNORE now emit the default-ignore + re-include format instead of the flat per-directory ignore list; ROLE_MAPPING grows to 14 ids with code-reviewer.
  • bundle-assets: re-synced packages/dsh/harness-skills / harness-commands from the merged skills/ tree — the 6+ upstream-touched bundled skills and all mstar-host/references/*.md host 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.