iterate-plugin 2.12.3 → 3.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # iterate-plugin for DeepSeek Harness (dsh)
2
2
 
3
- > dsh 桌面端的 iterate 收敛面板、UI 分诊与审查闭环插件。把 iterate 生态的同一套 review/fix loop 直接搬进 dsh 界面。
4
- > The iterate ecosystem's convergence dashboard, triage UI, and review/fix loop, natively embedded inside the DeepSeek Harness (dsh) desktop client.
3
+ > dsh 桌面端的 iterate 质量指挥中心 + 经验银行插件(v3.2)。把 iterate 生态的同一套 review/fix loop 直接搬进 dsh 界面,新增质量门禁、经验银行、防御事件流与原生指挥操作。
4
+ > The iterate ecosystem's quality command center + experience bank plugin for dsh (v3.2). Natively embedded inside the DeepSeek Harness (dsh) desktop client with quality gates, experience bank, defense events stream, and native command buttons.
5
5
 
6
6
  <p align="center">
7
7
  <a href="README.md"><strong>English</strong></a> ·
@@ -24,13 +24,11 @@
24
24
 
25
25
  ## The iterate Ecosystem / iterate 生态一览
26
26
 
27
- **iterate** is not one single binary — it is a **skill ecosystem** that layers a strict multi-round code gate on top of your existing AI assistants, IDEs, and scripts. It never replaces your tools; it adds an audit-and-close-the-loop layer on them. The whole ecosystem ships as **three interchangeable components sharing one `iterate.config.yaml` + one review-dimension system**:
27
+ **iterate** is not one single binary — it is a **skill ecosystem** that layers a strict multi-round code gate on top of your existing AI assistants, IDEs, and scripts. It never replaces your tools; it adds an audit-and-close-the-loop layer on them. The whole ecosystem ships as **three interchangeable components sharing one `iterate.config.yaml` + one 9-dimension review system**:
28
28
 
29
- | Component | Form & Source | Target Scenario |
30
- |---|---|---|
31
- | **[Core Skill + CLI](https://github.com/jingzhao-l/iterate-skill)** | Portable AI skill `/iterate` + `iterate` CLI (source: iterate-skill monorepo root) | Conversation-driven multi-round iteration inside Trae / Claude Code / Cursor / Copilot / Codex and 25+ other assistants |
32
- | **[iterate-harness](https://github.com/jingzhao-l/iterate-harness)** | Standalone headless engine, command `ih` (npm: `iterate-harness`) | Run the EXACT same loop in terminal / CI / git hooks, without any conversational assistant required |
33
- | **iterate-plugin (this repo)** | dsh desktop-client plugin (npm: `iterate-plugin`) | Plug the harness runtime **into the dsh UI**: convergence dashboard, triage panel, round progress — all surfaced as native dsh widgets |
29
+ - **[Core Skill + CLI](https://github.com/jingzhao-l/iterate-skill)** a portable AI skill `/iterate` + `iterate` CLI. For conversation-driven multi-round iteration inside Trae / Claude Code / Cursor / Copilot / Codex and 25+ other assistants.
30
+ - **[iterate-harness](https://github.com/jingzhao-l/iterate-harness)** — a standalone headless engine, command `ih` (npm: `iterate-harness`). Runs the **exact same loop** in terminal / CI / git hooks, without any conversational assistant required.
31
+ - **iterate-plugin (this repo)** a dsh desktop-client plugin (npm: `iterate-plugin`). Plugs the harness runtime **into the dsh UI**: convergence dashboard, triage panel, round progress all surfaced as native dsh widgets.
34
32
 
35
33
  How they fit together: **Core Skill** is the canonical, assistant-agnostic review/fix engine (the "brains"). **iterate-harness** is the same engine wrapped as a headless CLI + WebUI for unattended runs. **iterate-plugin** (this repository) wraps that harness runtime as a dsh plugin, rendering the triage UI and convergence dashboard directly inside the dsh desktop client. Configuration (`iterate.config.yaml`) and the 9-dimension review system are **identical across all three** — learn one, use them all.
36
34
 
@@ -61,51 +59,79 @@ dsh plugin --profile web add iterate-plugin
61
59
 
62
60
  `iterate-plugin` is the [iterate](https://github.com/jingzhao-l/iterate-skill) integration for the [DeepSeek Harness (dsh)](https://github.com/deepseek-ai/deepseek-harness) desktop client. It brings iterate's review loop (review → triage → fix → validate → converge) directly into the dsh UI, offering **autonomous closed-loop code iteration** (normal mode) and **dry-run read-only multi-round review**.
63
61
 
64
- Besides 13 pure-function tools, it ships a **build-free Web UI layer** (triage panel, convergence dashboard, stats card, theme skin, etc.) that plugs straight into dsh's existing UI slots. Configuration (`iterate.config.yaml` and the review dimensions) is identical across the other two components of the iterate ecosystem ([skill](https://github.com/jingzhao-l/iterate-skill) / [headless engine](https://github.com/jingzhao-l/iterate-harness)) zero migration cost.
62
+ **v3.2 Quality Command Center**: the plugin has grown from a "passive observation panel" into an "active command center + knowledge base". It now ships quality gate view + writable compute, an experience bank with search / adopt / add, a defense events stream (record + bilingual labels), native command buttons, and a `task_mode` indicator.
65
63
 
66
- ## Features
64
+ Besides 17 pure-function tools, it carries a **build-free Web UI layer** (convergence dashboard, triage panel, stats card, 10-tab runtime observatory, theme skin, etc.) that plugs straight into dsh's existing UI slots. Configuration (`iterate.config.yaml` and the review dimensions) is identical across the other two components of the iterate ecosystem ([skill](https://github.com/jingzhao-l/iterate-skill) / [headless engine](https://github.com/jingzhao-l/iterate-harness)) — zero migration cost.
65
+
66
+ ---
67
+
68
+ ## 📑 Table of Contents
69
+
70
+ - [✨ Features](#-features)
71
+ - [📦 Installation](#-installation)
72
+ - [💬 Usage](#-usage)
73
+ - [⚙️ Project configuration](#️-project-configuration)
74
+ - [🔧 Registered tools](#-registered-tools)
75
+ - [📁 Runtime artifact layout](#-runtime-artifact-layout)
76
+ - [🎨 Design](#-design)
77
+ - [🧪 Running the tests](#-running-the-tests)
78
+ - [⚠️ Disclaimer & License](#️-disclaimer--license)
79
+
80
+ ---
81
+
82
+ ## ✨ Features
67
83
 
68
84
  ### Two modes
69
85
 
70
- | Capability | dry-run | normal |
71
- | --- | --- | --- |
72
- | Repeated review until convergence | | ✅ |
73
- | Parallel dimension review | | |
74
- | Deterministic aggregation / dedupe / sort | ✅ | ✅ |
75
- | meta-review report consistency audit | ✅ | ✅ |
76
- | Zero file modification (read-only) | ✅ | ❌ |
77
- | Automatic atomic fix | ❌ | ✅ |
78
- | Validation after each round's fixes | ❌ | ✅ |
79
- | Rollback on failed fixes | ❌ | ✅ |
80
- | Self-stop when converged | ✅ | ✅ |
81
- | Fix atomic findings only, keep architectural for later | ❌ | ✅ |
82
- | Breakpoint save / resume (long iterations) | ✅ | ✅ |
83
-
84
- ### Tool layer
85
-
86
- - **13 registered tools**: `iterate_config` / `iterate_validate` / `iterate_decision_log` / `iterate_context` / `iterate_review` / `iterate_triage` / `iterate_fix` / `iterate_diff` / `iterate_rollback` / `iterate_checkpoint` / `iterate_status` / `iterate_history` / `iterate_prune`
87
- - **Findings triage loop**: review → UI triage (y/n/a) → `iterate_triage` writes back `known_intentional` → auto-filtered next round
88
- - **Structured fix system**: each fix backs up first, writes a registry entry, records the diff; a failed validation can be reverted with `iterate_rollback`
89
- - **Breakpoint resume**: checkpoints saved at the start of each round; interrupted long iterations can resume
90
- - **History audit**: `iterate_history` reads the decision log (filtered by type / time / count) and the fix registry summary to audit run process and fix details
91
- - **Runtime cleanup**: `iterate_prune` removes stale decision-log entries, stale checkpoints, orphaned fix backups and empty rounds; dry-run by default (report-only), real cleanup requires `dryRun:false`, and every cleanup is logged
92
- - **Config read / write**: `iterate_config` supports validated, backed-up, rollback-capable partial writes
93
-
94
- ### UI layer (build-free client slots)
95
-
96
- | UI component | Mounted slot | Function |
97
- | --- | --- | --- |
98
- | ConvergenceDashboard | `conversation.input.dock` | Live round progress bar, severity stats, dimension badges, trend mini-chart above the input; normal mode also shows fix-count badges; plus a live workflow-phase chip (current phase + running/stopped) |
99
- | ObservatoryPanel | `conversation.input.dock` | Seven-tab runtime observatory below the input: live activity stream (type filter), review threads (expand/collapse all), convergence trend, finding locations (severity/dimension/search filter), fixes + rollback, checkpoint resume, decision timeline (type/round filter + search); one-click export of all observatory data to JSON (download, copy fallback) |
100
- | TriagePanel | `conversation.chat.turnTail` | Per-finding y/n/a triage, filtering, batch (incl. select-all), keyboard shortcuts, localStorage persistence, copy-YAML / apply-instruction |
101
- | StatsCard | `conversation.chat.turnTail` | When no findings remain: convergence stats, round history table, trend chart, completion summary |
102
- | iterate theme skin | `theme.overrideTokens` | Warm-amber 13-dsw-token override, light/dark modes, togglable in settings |
103
- | ProgressCapsule | `shell.overlay` | Popup notification on each round completion / convergence (incl. convergence confirm) |
104
- | SettingsPanel | `settings.section` | Theme toggle, triage-persistence notes, config-management guide, runtime status overview (artifact layout + view/cleanup tool guide), one-click triage data reset |
86
+ The plugin runs the same iterate engine as the rest of the ecosystem, either fully read-only or as an autonomous fix loop:
87
+
88
+ - **dry-run** — repeats multi-dimension review until convergence; **zero files modified**.
89
+ - **normal** review atomic fixes validation every round → rollback on failure → loop until convergence.
90
+
91
+ Both modes share:
92
+
93
+ - Repeated review until convergence
94
+ - Parallel dimension review
95
+ - Deterministic aggregation / dedupe / sort
96
+ - meta-review report-consistency audit
97
+ - Self-stop when converged
98
+ - Breakpoint save / resume (long iterations)
99
+
100
+ `normal` mode additionally:
101
+
102
+ - Fixes **atomic findings only** (architectural ones are kept for later approval)
103
+ - Validates after each round's fixes
104
+ - Rolls back failed fixes, and can save / resume progress
105
+
106
+ ### UI layer (build-free client slots, v3.2: 10 tabs)
107
+
108
+ - **ConvergenceDashboard** (`conversation.input.dock`) live round progress bar, severity stats, dimension badges, trend mini-chart above the input; normal mode also shows fix-count badges; plus a live workflow-phase chip (current phase + running/stopped) and a **v3.2 task_mode indicator (code / iterate)**, now backed by the persisted transcript (`iterate_status` / `iterate_transcript` emit `taskMode`).
109
+ - **ObservatoryPanel** (`conversation.input.dock`) — a **ten-tab** runtime observatory below the input: live activity stream (type filter), review threads (expand / collapse all), convergence trend, finding locations (severity / dimension / search filter), fixes + rollback, checkpoint resume, decision timeline (type / round filter + search). **v3.2 tabs: Quality Gate (F8), Experience Bank (F9), Defense Events (F10)**; one-click JSON export of all observatory data (download, copy fallback). **v3.3: F8/F9/F10 are now live** — they scan the session stream for the latest `iterate_quality_gate` / `iterate_experience` / `iterate_defense_events` results and render real data (PASS/FAIL chip + per-dimension score bars, experience entries with adopt buttons + client-side search, defense type-count chips + filtered event stream), degrading to copy-able query instructions only when the session has none.
110
+ - **TriagePanel** (`conversation.chat.turnTail`) — per-finding y/n/a triage, filtering, batch ops (incl. select-all), keyboard shortcuts, localStorage persistence, copy-YAML / apply-instruction. **v3.2: native command buttons** (approve architectural fix, trigger new round, rollback to checkpoint). **v3.3: §8 指派修复 (assign)** — one click copies an `iterate_fix` instruction carrying every in-scope finding (respecting the batch toggle).
111
+ - **StatsCard** (`conversation.chat.turnTail`) — convergence stats, round history, trend chart and completion summary when no findings remain.
112
+ - **iterate theme skin** (`theme.overrideTokens`) a warm-amber 13-token `--dsw-*` override, light/dark modes, togglable in settings.
113
+ - **ProgressCapsule** (`shell.overlay`) popup notification on each round completion / convergence (incl. convergence confirm).
114
+ - **SettingsPanel** (`settings.section`) theme toggle, triage-persistence notes, config-management guide, runtime status overview (artifact layout + view/cleanup tool guide), one-click triage data reset.
105
115
 
106
116
  The UI layer is **defensive by design**: it degrades gracefully if any of `slots` / `theme` / `React` is unavailable — it never crashes the client.
107
117
 
108
- ## Installation
118
+ ### Behavior beyond the tools
119
+
120
+ Beyond the 17 registered tools (full reference further down), the plugin closes several loops end to end:
121
+
122
+ - **Findings triage loop** — review → UI triage (y/n/a) → `iterate_triage` writes back `known_intentional` → auto-filtered next round
123
+ - **Structured fix system** — each fix backs up first, writes a registry entry, records the diff; a failed validation can be reverted with `iterate_rollback`
124
+ - **Breakpoint resume** — checkpoints saved at the start of each round; interrupted long iterations can resume
125
+ - **History audit** — `iterate_history` reads the decision log (filtered by type / time / count) and the fix-registry summary to audit run process and fix details
126
+ - **Runtime cleanup** — `iterate_prune` removes stale decision-log entries, stale checkpoints, orphaned fix backups and empty rounds; dry-run by default (report-only), real cleanup requires `dryRun:false`, and every cleanup is logged
127
+ - **Config read / write** — `iterate_config` supports validated, backed-up, rollback-capable partial writes
128
+ - **v3.2 Experience Bank** — `iterate_experience` queries historical fixes and patterns with search / filter / adopt, and can persist new verified fixes (`add`) — re-adding the same pattern+dimension bumps its hit count instead of duplicating it
129
+ - **v3.2 Quality Gate** — `iterate_quality_gate` reads quality gate status with per-dimension convergence rates and PASS/FAIL, and can recompute + persist a fresh certificate (`compute`) from this round's findings / validation results (real convergence from `findingsByRound`)
130
+ - **v3.2 Defense Events** — `iterate_defense_events` queries defense events (precondition failures, rollbacks, invariant violations, assumption falsifications) and can `record` new ones; readable labels follow the project language (en / zh)
131
+
132
+ ---
133
+
134
+ ## 📦 Installation
109
135
 
110
136
  ### From npm
111
137
 
@@ -143,7 +169,9 @@ Then add to your profile `cordis.patch.yml`:
143
169
 
144
170
  > The package carries its own `dsh.bundle.patch` (i.e. `cordis.patch.yml`); the npm package's `files` whitelist is `src` / `lib` / `dist` / `cordis.patch.yml` / `README.md` / `LICENSE`. `dist/` is the compiled output of the TypeScript server-side logic, shipped with the package so it works with dsh's `github:owner/repo#ref` git-clone install (Node does not strip TS types under `node_modules`).
145
171
 
146
- ## Usage
172
+ ---
173
+
174
+ ## 💬 Usage
147
175
 
148
176
  ### dry-run mode (read-only review, no file changes)
149
177
 
@@ -174,7 +202,9 @@ Workflow:
174
202
  2. `loop` → parallel review → aggregate / dedupe → parallel atomic fixes → run validation commands → rollback on failure → log → stop when no new findings
175
203
  3. `report` → output fix statistics
176
204
 
177
- ## Project configuration
205
+ ---
206
+
207
+ ## ⚙️ Project configuration
178
208
 
179
209
  Put `iterate.config.yaml` at the project root:
180
210
 
@@ -212,25 +242,31 @@ validation:
212
242
 
213
243
  > The config can be read and **validated-partially-written** via `iterate_config` (auto backup, auto rollback on write failure).
214
244
 
215
- ## Registered tools (13)
216
-
217
- | Tool | Function |
218
- | --- | --- |
219
- | `iterate_config` | Read / write `iterate.config.yaml`. `operation=read` returns the full config or a named section; `operation=write` schema-validates, backs up, then merges and writes — auto rollback on failure |
220
- | `iterate_validate` | Run a whitelisted validation command, return the result |
221
- | `iterate_decision_log` | Append a decision log entry (append-only, never edits old ones), stored in `.iterate/decision-log.jsonl` |
222
- | `iterate_context` | Read the `SKILL.md` / `ITERATE.md` context |
223
- | `iterate_review` | Deterministic review engine: `plan` builds the plan, `aggregate` dedupes + converges, `meta-review` audits report consistency. Pure computation, no filesystem access |
224
- | `iterate_triage` | Manage `personalization.known_intentional`: `apply` validates, dedupes (file\|dimension\|line), backs up and writes back to config; `list` reads back the current entries. The only channel for the browser triage panel to write back to config |
225
- | `iterate_fix` | Apply **one atomic fix**: validates the relative path, backs up the original file, enforces atomicity via `atomic.max_lines` (skippable with `force`), writes new content, records a FixRecord and an `atomic_fix` log. The only legal file-modifying entry in normal mode |
226
- | `iterate_diff` | View accumulated fix changes: with `file`, returns the unified diff against the first backup; without it, a per-fixed-file summary |
227
- | `iterate_rollback` | Roll back an applied fix: restore the file from backup, remove that FixRecord from the registry, append a `revert` log. Used after a failed round validation |
228
- | `iterate_checkpoint` | Iteration breakpoint: `save` persists progress to `.iterate/checkpoint.json`, `load` reads it back, `clear` removes it. Resumable interrupted long iterations |
229
- | `iterate_status` | Summarize current iteration state: mode, current/last round, fixes applied, remaining architectural, decision-log entry count, whether a checkpoint exists |
230
- | `iterate_history` | Read iteration history (read-only): decision-log entries (filter by `type` / `since` / `limit`, default latest 50, cap 200) + fix-registry summary (per-round fixed/failed counts). For auditing the run, tracing logs, and inventorying fixes |
231
- | `iterate_prune` | Clean runtime artifacts: stale decision-log entries (by `retainDays`, default 30), stale checkpoints, orphaned fix backups, empty rounds. Dry-run by default (report-only); real cleanup with `dryRun:false`, each cleanup logged |
232
-
233
- ## Runtime artifact layout
245
+ ---
246
+
247
+ ## 🔧 Registered tools (v3.2: 17)
248
+
249
+ - `iterate_config` read / write `iterate.config.yaml`. `operation=read` returns the full config or a named section; `operation=write` schema-validates, backs up, then merges and writes — auto rollback on failure
250
+ - `iterate_validate` run a whitelisted validation command, return the result
251
+ - `iterate_decision_log` append a decision log entry (append-only, never edits old ones), stored in `.iterate/decision-log.jsonl`
252
+ - `iterate_context` read the `SKILL.md` / `ITERATE.md` context
253
+ - `iterate_review` deterministic review engine: `plan` builds the plan, `aggregate` dedupes + converges, `meta-review` audits report consistency. Pure computation, no filesystem access
254
+ - `iterate_triage` manage `personalization.known_intentional`: `apply` validates, dedupes (file|dimension|line), backs up and writes back to config; `list` reads back the current entries. The only channel for the browser triage panel to write back to config
255
+ - `iterate_fix` apply **one atomic fix**: validates the relative path, backs up the original file, enforces atomicity via `atomic.max_lines` (skippable with `force`), writes new content, records a FixRecord and an `atomic_fix` log. The only legal file-modifying entry in normal mode
256
+ - `iterate_diff` view accumulated fix changes: with `file`, returns the unified diff against the first backup; without it, a per-fixed-file summary
257
+ - `iterate_rollback` roll back an applied fix: restore the file from backup, remove that FixRecord from the registry, append a `revert` log. Used after a failed round validation
258
+ - `iterate_checkpoint` iteration breakpoint: `save` persists progress to `.iterate/checkpoint.json`, `load` reads it back, `clear` removes it. Resumable interrupted long iterations
259
+ - `iterate_status` summarize current iteration state: mode, current/last round, fixes applied, remaining architectural, decision-log entry count, whether a checkpoint exists
260
+ - `iterate_history` read iteration history (read-only): decision-log entries (filter by `type` / `since` / `limit`, default latest 50, cap 200) + fix-registry summary (per-round fixed/failed counts). For auditing the run, tracing logs, and inventorying fixes
261
+ - `iterate_prune` clean runtime artifacts: stale decision-log entries (by `retainDays`, default 30), stale checkpoints, orphaned fix backups, empty rounds. Dry-run by default (report-only); real cleanup with `dryRun:false`, each cleanup logged
262
+ - `iterate_transcript` — runtime observatory: persist review transcripts, threads, fixes, and nudge directions to `.iterate/transcript.json` for the client observatory
263
+ - `iterate_experience` **v3.2** query the experience bank (list / search / get), or `add` a new verified fix: re-adding the same pattern+dimension bumps its hit count instead of duplicating it. Persists to `.iterate/experience.json`
264
+ - `iterate_quality_gate` — **v3.2** read the quality certificate (`read`), or recompute + persist a fresh one (`compute`) from findings, validation results, `findingsByRound`, and `fixedByDimension`. Real per-dimension convergence rates
265
+ - `iterate_defense_events` — **v3.2** query defense events (list / counts), or `record` a new one. Human-readable labels follow the project language (en / zh)
266
+
267
+ ---
268
+
269
+ ## 📁 Runtime artifact layout
234
270
 
235
271
  All runtime state lives under `.iterate/` at the project root (can be excluded via `.gitignore`):
236
272
 
@@ -240,23 +276,31 @@ All runtime state lives under `.iterate/` at the project root (can be excluded v
240
276
  checkpoint.json # iteration breakpoint (resume)
241
277
  transcript.json # runtime-observatory manifest (per-reviewer threads, trend, fixes, timeline, nudge)
242
278
  transcript-live.ndjson # append-only near-real-time reviewer-activity feed (read/fix/rollback/validate…), byte-capped
279
+ experience.json # v3.2: experience bank (historical fixes and patterns, accumulated across sessions)
280
+ quality-gate.json # v3.2: quality gate snapshot (dimension convergence, verification pass rates, PASS/FAIL)
281
+ defense-events.json # v3.2: defense events stream (precondition failures, rollbacks, invariant violations, assumption falsifications)
243
282
  fixes/
244
283
  registry.json # fix registry (list of FixRecords, grouped by round)
245
284
  <fix-id>_<ts>.bak # original file backup before each fix
246
285
  ```
247
286
 
248
- ## Design
287
+ ---
288
+
289
+ ## 🎨 Design
249
290
 
250
291
  The plugin follows dsh's "everything-is-a-plugin" architecture:
251
292
 
252
- - **Does exactly two things**: injects the system prompt teaching the model the iterate workflow + registers 13 pure-function tools
293
+ - **Does exactly two things** injects the system prompt teaching the model the iterate workflow + registers 17 pure-function tools
253
294
  - **All orchestration runs through dsh native `workflow` + `agent` + `parallel`**
254
295
  - **Core logic is entirely pure functions** (dedupe / filter / sort / converge / meta-audit / diff computation / history filtering / cleanup reporting) — unit-testable, no I/O
255
- - **Security model**: file writes confined to the resolved project root (path-traversal protection); always back up before writing, roll back on failure; config writes also back up + roll back; `iterate_prune` is dry-run by default and only clears artifacts under `.iterate/` with every cleanup logged; `iterate_fix` caps content length and `iterate_triage` caps entry count to fend off abnormal oversized payloads
256
- - **Build-free UI**: `lib/client.js` uses a `React.createElement` tree + injected `<style>` tags, all colors via `--dsw-*` tokens, degrading gracefully when a service is missing
296
+ - **Security model** file writes confined to the resolved project root (path-traversal protection); always back up before writing, roll back on failure; config writes also back up + roll back; `iterate_prune` is dry-run by default and only clears artifacts under `.iterate/` with every cleanup logged; `iterate_fix` caps content length and `iterate_triage` caps entry count to fend off abnormal oversized payloads
297
+ - **Build-free UI** `lib/client.js` uses a `React.createElement` tree + injected `<style>` tags, all colors via `--dsw-*` tokens, degrading gracefully when a service is missing
298
+ - **v3.2 Quality Command Center** — extends the plugin from "passive observation panel" to "active command center + knowledge base" with quality gates (read + compute), experience bank (read + add), defense events (read + record), and native command buttons
257
299
  - Follows the iterate skill's design principles: deterministic convergence, auditable, least privilege
258
300
 
259
- ## Running the tests
301
+ ---
302
+
303
+ ## 🧪 Running the tests
260
304
 
261
305
  ```bash
262
306
  cd harness/iterate-plugin
@@ -267,10 +311,14 @@ npm test
267
311
 
268
312
  All tests pass:
269
313
 
270
- - **212 unit tests green**, type-check clean
271
- - Coverage: dedupe, filter, sort, multi-round convergence, meta-review audit, path safety, timeout clamping, config read/write + rollback, triage merge, diff computation, checkpoint validation, fix registry, history read + filter, prune cleanup report + dry-run semantics, UI pure functions (select-all key, runtime status guide).
314
+ - **466 unit tests green**, type-check clean
315
+ - Coverage: dedupe, filter, sort, multi-round convergence, meta-review audit, path safety, timeout clamping, config read/write + rollback, triage merge, diff computation, checkpoint validation, fix registry, history read + filter, prune cleanup report + dry-run semantics, UI pure functions (select-all key, runtime status guide), **v3.2: experience bank, quality gate, defense events, approval-gate fail-open path**.
316
+
317
+ ---
318
+
319
+ ## ⚠️ Disclaimer & License
272
320
 
273
- ## ⚠️ Disclaimer
321
+ ### Disclaimer
274
322
 
275
323
  This project is provided "AS IS", without warranty of any kind, express or implied, including but not limited to the warranties of merchantability, fitness for a particular purpose and noninfringement.
276
324
 
@@ -283,6 +331,6 @@ This project is provided "AS IS", without warranty of any kind, express or impli
283
331
 
284
332
  Users are solely responsible for the code that is generated, modified, or committed as a result of using this project. By using it, you acknowledge that neither the maintainers nor contributors are liable for any loss, damage, or legal consequences arising from its use.
285
333
 
286
- ## License
334
+ ### License
287
335
 
288
336
  MIT