@design-ai/cli 4.55.0 → 4.57.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.
Files changed (301) hide show
  1. package/.claude-plugin/plugin.json +109 -25
  2. package/CHANGELOG.md +75 -0
  3. package/README.ko.md +15 -32
  4. package/README.md +18 -31
  5. package/cli/bin/design-ai.mjs +1 -0
  6. package/cli/commands/help.mjs +7 -4
  7. package/cli/commands/index.mjs +292 -0
  8. package/cli/commands/learn-help.mjs +149 -0
  9. package/cli/commands/learn-print-profile.mjs +373 -0
  10. package/cli/commands/learn-print-restore.mjs +349 -0
  11. package/cli/commands/learn-print-signals.mjs +453 -0
  12. package/cli/commands/learn.mjs +60 -1281
  13. package/cli/commands/pack.mjs +7 -3
  14. package/cli/commands/prompt.mjs +7 -3
  15. package/cli/commands/search.mjs +94 -1
  16. package/cli/lib/dispatch.mjs +3 -0
  17. package/cli/lib/embedding-index.mjs +199 -0
  18. package/cli/lib/embedding-provider.mjs +121 -0
  19. package/cli/lib/embedding-rerank.mjs +52 -0
  20. package/cli/lib/learn-args.mjs +490 -0
  21. package/cli/lib/learn-backup.mjs +748 -0
  22. package/cli/lib/learn-curation.mjs +612 -0
  23. package/cli/lib/learn-eval.mjs +459 -0
  24. package/cli/lib/learn-profile.mjs +763 -0
  25. package/cli/lib/learn-select.mjs +223 -0
  26. package/cli/lib/learn-shared.mjs +158 -0
  27. package/cli/lib/learn-test-support.mjs +218 -0
  28. package/cli/lib/learn-usage.mjs +360 -0
  29. package/cli/lib/learn.mjs +83 -3694
  30. package/cli/lib/lexical.mjs +137 -0
  31. package/cli/lib/local-config.mjs +110 -0
  32. package/cli/lib/mcp-server.mjs +221 -13
  33. package/cli/lib/pack.mjs +31 -4
  34. package/cli/lib/prompt.mjs +42 -4
  35. package/cli/lib/recall.mjs +193 -0
  36. package/cli/lib/retrieval-index.mjs +0 -0
  37. package/cli/lib/search-ranked.mjs +170 -0
  38. package/cli/lib/search.mjs +11 -1
  39. package/cli/lib/signals-backlog-commands.mjs +673 -0
  40. package/cli/lib/signals-backlog.mjs +361 -0
  41. package/cli/lib/signals-eval.mjs +176 -0
  42. package/cli/lib/signals-readiness.mjs +247 -0
  43. package/cli/lib/signals-registry.mjs +377 -0
  44. package/cli/lib/signals-render.mjs +478 -0
  45. package/cli/lib/signals-shared.mjs +75 -0
  46. package/cli/lib/signals.mjs +16 -2337
  47. package/cli/lib/site-analysis.mjs +297 -0
  48. package/cli/lib/site-args.mjs +433 -0
  49. package/cli/lib/site-bundle-build.mjs +127 -0
  50. package/cli/lib/site-bundle-check.mjs +454 -0
  51. package/cli/lib/site-bundle-commands.mjs +95 -0
  52. package/cli/lib/site-bundle-compare.mjs +157 -0
  53. package/cli/lib/site-bundle-contract.mjs +79 -0
  54. package/cli/lib/site-bundle-files.mjs +87 -0
  55. package/cli/lib/site-bundle-handoff-expected.mjs +173 -0
  56. package/cli/lib/site-bundle-handoff-runbook-action-summary.mjs +332 -0
  57. package/cli/lib/site-bundle-handoff-runbook-actions.mjs +113 -0
  58. package/cli/lib/site-bundle-handoff-runbook-evidence-fields.mjs +164 -0
  59. package/cli/lib/site-bundle-handoff-runbook-evidence.mjs +334 -0
  60. package/cli/lib/site-bundle-handoff-runbook-format.mjs +31 -0
  61. package/cli/lib/site-bundle-handoff-runbook-human-lines.mjs +167 -0
  62. package/cli/lib/site-bundle-handoff-runbook-maps.mjs +238 -0
  63. package/cli/lib/site-bundle-handoff-runbook-next-step.mjs +278 -0
  64. package/cli/lib/site-bundle-handoff-runbook-stage-metadata.mjs +84 -0
  65. package/cli/lib/site-bundle-handoff-runbook.mjs +444 -0
  66. package/cli/lib/site-bundle-handoff-summary.mjs +183 -0
  67. package/cli/lib/site-bundle-handoff.mjs +271 -0
  68. package/cli/lib/site-bundle-readme.mjs +98 -0
  69. package/cli/lib/site-bundle-repair-report.mjs +143 -0
  70. package/cli/lib/site-bundle-repair.mjs +68 -0
  71. package/cli/lib/site-content.mjs +399 -0
  72. package/cli/lib/site-evidence.mjs +35 -0
  73. package/cli/lib/site-mcp-commands.mjs +28 -0
  74. package/cli/lib/site-mcp-probes.mjs +159 -0
  75. package/cli/lib/site-mcp-readiness.mjs +157 -0
  76. package/cli/lib/site-mcp-report.mjs +324 -0
  77. package/cli/lib/site-next-actions.mjs +333 -0
  78. package/cli/lib/site-options.mjs +104 -0
  79. package/cli/lib/site-prompts.mjs +332 -0
  80. package/cli/lib/site-starter.mjs +153 -0
  81. package/cli/lib/site-strings.mjs +23 -0
  82. package/cli/lib/site-tasks.mjs +93 -0
  83. package/cli/lib/site-test-support.mjs +68 -0
  84. package/cli/lib/site-workflow-graph.mjs +309 -0
  85. package/cli/lib/site-workspace.mjs +492 -0
  86. package/cli/lib/site.mjs +108 -6617
  87. package/cli/lib/skill-proposals-apply-commands.mjs +135 -0
  88. package/cli/lib/skill-proposals-apply-contract.mjs +750 -0
  89. package/cli/lib/skill-proposals-apply-plan.mjs +118 -0
  90. package/cli/lib/skill-proposals-generate.mjs +298 -0
  91. package/cli/lib/skill-proposals-render.mjs +532 -0
  92. package/cli/lib/skill-proposals-review.mjs +262 -0
  93. package/cli/lib/skill-proposals.mjs +15 -2046
  94. package/cli/lib/workspace-args.mjs +83 -0
  95. package/cli/lib/workspace-git.mjs +169 -0
  96. package/cli/lib/workspace-learning.mjs +483 -0
  97. package/cli/lib/workspace-repo.mjs +139 -0
  98. package/cli/lib/workspace-report.mjs +283 -0
  99. package/cli/lib/workspace-test-support.mjs +99 -0
  100. package/cli/lib/workspace.mjs +30 -1056
  101. package/docs/AI-LEARNING-PHASE2.md +215 -0
  102. package/docs/DISTRIBUTION.ko.md +35 -6
  103. package/docs/DISTRIBUTION.md +35 -8
  104. package/docs/NEXT-SURFACE-DECISION.md +125 -0
  105. package/docs/PRODUCT-READINESS.md +3 -3
  106. package/docs/RELEASE-CHECKLIST.md +20 -3
  107. package/docs/RELEASE-GATES.ko.md +35 -0
  108. package/docs/RELEASE-GATES.md +234 -0
  109. package/docs/ROADMAP.md +2232 -8
  110. package/docs/external-status.md +20 -7
  111. package/docs/inspection-20260630.md +169 -0
  112. package/docs/integrations/design-ai-mcp-server.md +35 -3
  113. package/docs/integrations/vscode-walkthrough.ko.md +3 -3
  114. package/docs/integrations/vscode-walkthrough.md +3 -3
  115. package/docs/reference/ant-design.md +413 -0
  116. package/docs/reference/awesome-design-md.md +439 -0
  117. package/docs/reference/mui.md +783 -0
  118. package/docs/reference/shadcn-ui.md +298 -0
  119. package/docs/site-overrides/main.html +1 -1
  120. package/examples/component-accordion-actions.md +5 -5
  121. package/examples/component-accordion-details.md +5 -5
  122. package/examples/component-accordion-summary.md +5 -5
  123. package/examples/component-accordion.md +3 -3
  124. package/examples/component-affix.md +1 -1
  125. package/examples/component-alert-dialog.md +1 -1
  126. package/examples/component-alert-title.md +1 -1
  127. package/examples/component-alert.md +3 -3
  128. package/examples/component-anchor.md +1 -1
  129. package/examples/component-app-bar.md +1 -1
  130. package/examples/component-aspect-ratio.md +1 -1
  131. package/examples/component-auto-complete.md +2 -2
  132. package/examples/component-avatar-group.md +5 -5
  133. package/examples/component-avatar.md +3 -3
  134. package/examples/component-back-top.md +1 -1
  135. package/examples/component-backdrop.md +1 -1
  136. package/examples/component-badge.md +3 -3
  137. package/examples/component-border-beam.md +3 -3
  138. package/examples/component-bottom-navigation.md +1 -1
  139. package/examples/component-box.md +1 -1
  140. package/examples/component-breadcrumb.md +3 -3
  141. package/examples/component-button-base.md +3 -3
  142. package/examples/component-button-group.md +2 -2
  143. package/examples/component-button.md +3 -3
  144. package/examples/component-calendar.md +2 -2
  145. package/examples/component-card-actions.md +1 -1
  146. package/examples/component-card-content.md +1 -1
  147. package/examples/component-card-header.md +1 -1
  148. package/examples/component-card-media.md +1 -1
  149. package/examples/component-card.md +3 -3
  150. package/examples/component-carousel.md +2 -2
  151. package/examples/component-cascader.md +1 -1
  152. package/examples/component-chart.md +1 -1
  153. package/examples/component-checkbox.md +3 -3
  154. package/examples/component-click-away-listener.md +1 -1
  155. package/examples/component-code.md +1 -1
  156. package/examples/component-collapsible.md +1 -1
  157. package/examples/component-color-picker.md +1 -1
  158. package/examples/component-combobox.md +1 -1
  159. package/examples/component-command.md +1 -1
  160. package/examples/component-config-provider.md +3 -3
  161. package/examples/component-context-menu.md +1 -1
  162. package/examples/component-css-baseline.md +3 -3
  163. package/examples/component-date-picker.md +2 -2
  164. package/examples/component-descriptions.md +1 -1
  165. package/examples/component-dialog-actions.md +1 -1
  166. package/examples/component-dialog-content-text.md +1 -1
  167. package/examples/component-dialog-content.md +1 -1
  168. package/examples/component-dialog-title.md +1 -1
  169. package/examples/component-dialog.md +2 -2
  170. package/examples/component-divider.md +3 -3
  171. package/examples/component-drawer.md +3 -3
  172. package/examples/component-dropdown.md +3 -3
  173. package/examples/component-empty.md +2 -2
  174. package/examples/component-fade.md +1 -1
  175. package/examples/component-field.md +1 -1
  176. package/examples/component-filled-input.md +1 -1
  177. package/examples/component-flex.md +1 -1
  178. package/examples/component-float-button.md +2 -2
  179. package/examples/component-form-control-label.md +1 -1
  180. package/examples/component-form-control.md +1 -1
  181. package/examples/component-form-controls.md +1 -1
  182. package/examples/component-form-group.md +1 -1
  183. package/examples/component-form-helper-text.md +1 -1
  184. package/examples/component-form-label.md +1 -1
  185. package/examples/component-form.md +2 -2
  186. package/examples/component-grid.md +2 -2
  187. package/examples/component-grow.md +1 -1
  188. package/examples/component-hover-card.md +1 -1
  189. package/examples/component-icon-button.md +1 -1
  190. package/examples/component-icon.md +1 -1
  191. package/examples/component-image-list.md +1 -1
  192. package/examples/component-image.md +1 -1
  193. package/examples/component-input-adornment.md +1 -1
  194. package/examples/component-input-base.md +1 -1
  195. package/examples/component-input-number.md +1 -1
  196. package/examples/component-input-otp.md +2 -2
  197. package/examples/component-input.md +3 -3
  198. package/examples/component-item.md +1 -1
  199. package/examples/component-label.md +1 -1
  200. package/examples/component-layout.md +1 -1
  201. package/examples/component-link.md +1 -1
  202. package/examples/component-list-item-avatar.md +1 -1
  203. package/examples/component-list-item-button.md +1 -1
  204. package/examples/component-list-item-icon.md +1 -1
  205. package/examples/component-list-item-text.md +1 -1
  206. package/examples/component-list-item.md +1 -1
  207. package/examples/component-list-subheader.md +1 -1
  208. package/examples/component-list.md +2 -2
  209. package/examples/component-masonry.md +1 -1
  210. package/examples/component-mentions.md +1 -1
  211. package/examples/component-menu-item.md +1 -1
  212. package/examples/component-menu-list.md +1 -1
  213. package/examples/component-menu.md +1 -1
  214. package/examples/component-menubar.md +1 -1
  215. package/examples/component-message.md +1 -1
  216. package/examples/component-mobile-stepper.md +1 -1
  217. package/examples/component-modal.md +5 -5
  218. package/examples/component-navigation-menu.md +1 -1
  219. package/examples/component-notification.md +1 -1
  220. package/examples/component-outlined-input.md +1 -1
  221. package/examples/component-pagination.md +3 -3
  222. package/examples/component-paper.md +1 -1
  223. package/examples/component-popconfirm.md +1 -1
  224. package/examples/component-popover.md +3 -3
  225. package/examples/component-popper.md +1 -1
  226. package/examples/component-progress.md +2 -2
  227. package/examples/component-qr-code.md +1 -1
  228. package/examples/component-radio.md +3 -3
  229. package/examples/component-rate.md +2 -2
  230. package/examples/component-resizable.md +1 -1
  231. package/examples/component-result.md +1 -1
  232. package/examples/component-scroll-area.md +1 -1
  233. package/examples/component-segmented.md +3 -3
  234. package/examples/component-select.md +3 -3
  235. package/examples/component-separator.md +1 -1
  236. package/examples/component-sheet.md +1 -1
  237. package/examples/component-sidebar.md +1 -1
  238. package/examples/component-skeleton.md +3 -3
  239. package/examples/component-slide.md +1 -1
  240. package/examples/component-slider.md +3 -3
  241. package/examples/component-snackbar-content.md +1 -1
  242. package/examples/component-snackbar.md +1 -1
  243. package/examples/component-sonner.md +1 -1
  244. package/examples/component-space.md +1 -1
  245. package/examples/component-speed-dial-action.md +1 -1
  246. package/examples/component-speed-dial.md +1 -1
  247. package/examples/component-spin.md +2 -2
  248. package/examples/component-spinner.md +1 -1
  249. package/examples/component-splitter.md +2 -2
  250. package/examples/component-stack.md +1 -1
  251. package/examples/component-statistic.md +1 -1
  252. package/examples/component-step-button.md +4 -4
  253. package/examples/component-step-connector.md +4 -4
  254. package/examples/component-step-content.md +1 -1
  255. package/examples/component-step-icon.md +1 -1
  256. package/examples/component-step-label.md +1 -1
  257. package/examples/component-step.md +2 -2
  258. package/examples/component-steps.md +2 -2
  259. package/examples/component-swipeable-drawer.md +1 -1
  260. package/examples/component-switch.md +3 -3
  261. package/examples/component-tab-scroll-button.md +5 -5
  262. package/examples/component-tab.md +1 -1
  263. package/examples/component-table-body.md +1 -1
  264. package/examples/component-table-cell.md +1 -1
  265. package/examples/component-table-container.md +1 -1
  266. package/examples/component-table-footer.md +1 -1
  267. package/examples/component-table-head.md +1 -1
  268. package/examples/component-table-pagination.md +1 -1
  269. package/examples/component-table-row.md +1 -1
  270. package/examples/component-table-sort-label.md +1 -1
  271. package/examples/component-table.md +2 -2
  272. package/examples/component-tabs.md +3 -3
  273. package/examples/component-tag-badge.md +2 -2
  274. package/examples/component-tag.md +1 -1
  275. package/examples/component-textarea-autosize.md +1 -1
  276. package/examples/component-textarea.md +1 -1
  277. package/examples/component-time-picker.md +1 -1
  278. package/examples/component-timeline.md +1 -1
  279. package/examples/component-toast.md +4 -4
  280. package/examples/component-toggle-button.md +1 -1
  281. package/examples/component-toggle.md +1 -1
  282. package/examples/component-toolbar.md +1 -1
  283. package/examples/component-tooltip.md +3 -3
  284. package/examples/component-tour.md +1 -1
  285. package/examples/component-transfer.md +1 -1
  286. package/examples/component-tree-select.md +1 -1
  287. package/examples/component-tree.md +1 -1
  288. package/examples/component-typography.md +2 -2
  289. package/examples/component-upload.md +1 -1
  290. package/examples/component-watermark.md +1 -1
  291. package/examples/component-zoom.md +1 -1
  292. package/knowledge/COVERAGE.md +4 -3
  293. package/knowledge/components/INDEX.md +202 -202
  294. package/knowledge/patterns/brand-references.md +72 -72
  295. package/package.json +1 -1
  296. package/tools/audit/local-ci.py +16 -1
  297. package/tools/audit/package-smoke.py +717 -9
  298. package/tools/audit/registry-smoke.py +912 -10
  299. package/tools/audit/release-metadata.py +47 -1
  300. package/tools/audit/smoke_assertions.py +998 -35
  301. package/tools/migrations/refs-links-to-reference-pages.py +179 -0
package/docs/ROADMAP.md CHANGED
@@ -1,5 +1,2229 @@
1
1
  # Roadmap
2
2
 
3
+ ## Phase 755 — Local Retrieval Memory Release (v4.57.0) ✓ ready
4
+
5
+ Groups the Phase 754 A+B retrieval work, the MCP ranked-search parameter, the `refs/` reference-page migration, and the docs-deploy retry hardening into one public package release. Scope and data boundaries are defined in [AI-LEARNING-PHASE2.md](AI-LEARNING-PHASE2.md); defaults are unchanged, so the release is additive and backward-compatible.
6
+
7
+ ### Changed
8
+ - Shipped deterministic local retrieval (`design-ai index`, `search --ranked`, shared BM25 learning selection), Hangul-aware tokenization, and the version-2 source-keyed index sidecar.
9
+ - Shipped the opt-in, local-only embedding rerank backend (`search --ranked --embeddings`, `~/.design-ai/config.json`) with graceful lexical degradation and no network path.
10
+ - Added the MCP `design_ai_search` opt-in `ranked` parameter and the `design_ai_prompt` / `design_ai_pack` opt-in `withRecall` parameters, moved `refs/` links behind `docs/reference/` pages, and hardened `Deploy doc site` with a single automatic retry.
11
+ - Added `prompt --with-recall` / `pack --with-recall`: brief-relevant corpus knowledge recalled into prompts/packs via the shared lexical scorer (opt-in; default output unchanged) — the first CLI-deepening increment from [NEXT-SURFACE-DECISION.md](NEXT-SURFACE-DECISION.md).
12
+ - Added `design-ai learn --recall <query>`, the read-side companion completing the retrieval verb pair (`learn --recall` + `pack --with-recall`) named in [NEXT-SURFACE-DECISION.md](NEXT-SURFACE-DECISION.md): a read-only combined corpus + learning recall view.
13
+ - Extended packed-tarball and public-registry smoke to cover the index build/status/verify round-trip, ranked-search determinism, and embeddings off-by-default fallback.
14
+
15
+ ### Verified
16
+ - All 8 audits passed.
17
+ - `npm run release:check` (unit tests, strict audits, whitespace, package contents, release metadata, release self-tests, packed-tarball smoke).
18
+ - `npm run release:metadata`.
19
+ - `git diff --check`.
20
+ - Main-branch GitHub Actions (`Design-AI audit`, `Deploy doc site`) passed for the constituent Phase 754 commits.
21
+
22
+ ### Versions
23
+ - `package.json` + `.claude-plugin/plugin.json`: 4.56.0 → 4.57.0.
24
+ - `vscode-extension/package.json`: remains 0.4.1.
25
+
26
+ ### What this enables
27
+ - Users get deterministic ranked corpus/learning retrieval (Korean included) and an optional local embedding rerank, with zero new dependencies and no behavior change unless they opt in.
28
+ - Maintainers can publish a retrieval-capable release whose new CLI, MCP, and workspace surfaces are smoke-covered on both the packed tarball and the public registry.
29
+
30
+ ### What's still ahead
31
+ - Push the v4.57.0 release commit and tag, then verify npm publish (provenance), GitHub Release, public `npm run registry:smoke`, and docs deployment workflows.
32
+ - Refresh the Homebrew formula SHA-256 after the v4.57.0 tag tarball is available, then update [external-status.md](external-status.md) and the README distribution status from published `4.56.0` to `4.57.0`.
33
+
34
+ ## Phase 754 — AI learning depth: local retrieval memory (planning)
35
+
36
+ Opens the deeper AI-learning phase chosen in Product Readiness ("Recommended next decision", option 2): deterministic local retrieval memory over the shipped knowledge corpus and the local learning profile, with an optional local-only embedding backend. Scope, data boundaries, and privacy constraints are defined in [AI-LEARNING-PHASE2.md](AI-LEARNING-PHASE2.md). Fine-tuning, training on user artifacts, external embedding APIs, background learning without explicit CLI commands, and telemetry stay out of scope; the README stance ("Not a model. Not a fine-tune.") is unchanged.
37
+
38
+ ### Plan
39
+ - [x] Phase A: zero-dependency lexical retrieval index (tokenized BM25-style scoring) over `knowledge/`, `examples/`, `skills/`, `docs/`, `agents/`, `commands/`, and `learning.json`, built only by an explicit `design-ai index --build`.
40
+ - [x] Phase A: opt-in `design-ai search --ranked` ranked corpus search with deterministic, fully ordered output.
41
+ - [x] Phase A: shared lexical scorer behind `prompt --with-learning` / `pack --with-learning` selection, gated by `learn --eval --strict` checkpoints before and after. _Selection-drift callout: tf-aware BM25 ranking can reorder entries that the old containment scorer tied (text-relevant entries now outrank category-only matches); checkpoints record `ranker: "lexical"` so eval templates regenerate against the shared scorer._
42
+ - [x] Phase A: `design-ai index --status/--verify` staleness and digest reporting, plus `workspace` readiness integration.
43
+ - [x] Phase A: verification gates — `npm test` unit coverage, `npm run audit` 8/8, `npm run release:metadata`, and `release:check` packed-tarball smoke for index build/verify round-trip and ranked-search determinism.
44
+ - [x] Phase B (optional, after Phase A review): opt-in local embedding rerank via a user-supplied local provider executable (`~/.design-ai/config.json` and/or `--provider`), never a default, never external HTTP, with graceful degradation to Phase A on any absence/failure/staleness.
45
+ - [x] Phase B: deterministic stub-provider test coverage (`cli/lib/embedding-provider.test.mjs`, `cli/lib/embedding-index.test.mjs`, `cli/lib/embedding-rerank.test.mjs`, `cli/lib/search-ranked.test.mjs`) and `package:smoke` coverage proving off-by-default, missing-provider fallback, and a real stub-provider round-trip.
46
+ - [x] Answer the open questions in [AI-LEARNING-PHASE2.md](AI-LEARNING-PHASE2.md) (ranked-search default, index location, route boundary, Korean tokenization, Phase B configuration home) before scheduling Phase B. _Answered in the Phase A implementation review; Hangul tokenization (FU-1) and index source-identity keying (FU-2) landed before Phase B._
47
+
48
+ ## Phase 753 — MCP Protocol Hardening Release (v4.56.0) ✓ ready
49
+
50
+ The next public package release groups the post-v4.55 MCP protocol hardening work and the published MCP client evidence refresh into one versioned handoff.
51
+
52
+ ### Changed
53
+ - Hardened JSON-RPC envelope, method, id, params, notification, initialize, and tools/call validation paths so malformed MCP requests fail before CLI execution.
54
+ - Preserved existing Claude Code, Codex, Website Improvement, package smoke, and registry smoke contracts while making invalid inputs easier to diagnose.
55
+ - Refreshed public npm MCP entrypoint evidence and local Claude/Codex MCP client connection evidence.
56
+
57
+ ### Verified
58
+ - All 8 audits passed.
59
+ - `npm run release:check`.
60
+ - `npm run release:metadata`.
61
+ - `npm run audit:strict`.
62
+ - `git diff --check`.
63
+ - Main-branch GitHub Actions passed for `Design-AI audit` and `Deploy doc site` after the MCP evidence refresh.
64
+
65
+ ### Versions
66
+ - `package.json` + `.claude-plugin/plugin.json`: 4.55.0 → 4.56.0.
67
+ - `vscode-extension/package.json`: remains 0.4.1.
68
+
69
+ ### What this enables
70
+ - Claude Code and Codex users get deterministic MCP protocol errors for malformed requests while valid local stdio tool calls stay unchanged.
71
+ - Maintainers can publish the hardened MCP server with current evidence for public npm and local client connection paths.
72
+
73
+ ### What's still ahead
74
+ - Push the v4.56.0 release commit and tag, then verify npm publish, GitHub Release, registry smoke, and docs deployment workflows.
75
+ - Refresh Homebrew formula SHA-256 after the v4.56.0 tag tarball is available.
76
+
77
+ ## Phase 752 — Published MCP Client Connection Evidence Refresh (unreleased)
78
+
79
+ The external distribution status now includes current proof that the published npm MCP entrypoint and local Claude Code / Codex MCP client registrations are usable.
80
+
81
+ ### Changed
82
+ - Refreshed npm registry and VS Code Marketplace status evidence for the current published versions.
83
+ - Added public npm `design-ai-mcp` protocol-smoke evidence from a clean temporary directory.
84
+ - Added local Claude Code and Codex MCP client status evidence for the clone-backed `design-ai` server.
85
+ - Documented the npm one-shot verification gotcha when running from inside the package source checkout.
86
+
87
+ ### Impact
88
+ - Operators can distinguish already-published package state from actions that would fail by republishing the same version.
89
+ - Claude Code and Codex setup guidance now has current evidence for both client connection and public npm entrypoint behavior.
90
+ - No runtime code, package version, public API, or release workflow behavior changed.
91
+
92
+ ### Verification Plan
93
+ - `npm view @design-ai/cli version name time.modified dist-tags --json`
94
+ - VS Code Marketplace Gallery API query for `sungjin.design-ai-vscode`
95
+ - Public npm MCP protocol smoke with `npm exec --yes --package=@design-ai/cli@4.55.0 -- design-ai-mcp`
96
+ - `codex mcp get design-ai`
97
+ - `claude mcp list`
98
+ - `git diff --check`
99
+
100
+ ## Phase 751 — design-ai MCP Initialize Blank Protocol Version Guard (unreleased)
101
+
102
+ The MCP stdio server now rejects blank-only `initialize.params.protocolVersion` strings with JSON-RPC `-32602`, so version negotiation inputs must be meaningful strings when provided.
103
+
104
+ ### Changed
105
+ - Added a blank-string guard for `initialize.params.protocolVersion`.
106
+ - Added unit coverage for whitespace-only protocol versions.
107
+ - Preserved fallback behavior for unsupported but non-empty protocol version strings.
108
+
109
+ ### Impact
110
+ - Claude Code, Codex, and other MCP clients get clear invalid-params feedback for malformed initialize version negotiation.
111
+ - Valid initialize requests, omitted initialize params, unsupported non-empty string protocol versions, notifications, ping, tools/list, tools/call, resources/list, prompts/list, package smoke, Website Improvement readiness behavior, and CLI runtime failure reporting stay unchanged.
112
+
113
+ ### Verification Plan
114
+ - `node --check cli/lib/mcp-server.mjs`
115
+ - `node --test cli/lib/mcp-server.test.mjs`
116
+ - `npm test`
117
+ - `npm run audit:strict`
118
+ - `npm run release:metadata`
119
+ - `npm run package:smoke:self-test`
120
+ - `npm run release:check`
121
+ - `git diff --check`
122
+
123
+ ## Phase 750 — design-ai MCP Blank String Argument Guard (unreleased)
124
+
125
+ The MCP stdio server now rejects blank-only string arguments for schema fields that declare `minLength`, so required text inputs fail as JSON-RPC `-32602` before CLI invocation instead of surfacing later as tool execution errors.
126
+
127
+ ### Changed
128
+ - Added whitespace-only validation for MCP string inputs with `minLength`.
129
+ - Added unit coverage proving a blank `design_ai_route.brief` is rejected before the CLI runner is called.
130
+ - Kept optional string fields without `minLength` on their existing CLI-mapping path.
131
+
132
+ ### Impact
133
+ - Claude Code, Codex, and other MCP clients get immediate invalid-params feedback for blank required text fields.
134
+ - Valid non-empty strings, optional string omission, initialize, notifications, ping, tools/list, tools/call success, resources/list, prompts/list, package smoke, Website Improvement readiness behavior, and CLI runtime failure reporting stay unchanged.
135
+
136
+ ### Verification Plan
137
+ - `node --check cli/lib/mcp-server.mjs`
138
+ - `node --test cli/lib/mcp-server.test.mjs`
139
+ - `npm test`
140
+ - `npm run audit:strict`
141
+ - `npm run release:metadata`
142
+ - `npm run package:smoke:self-test`
143
+ - `npm run release:check`
144
+ - `git diff --check`
145
+
146
+ ## Phase 749 — design-ai MCP Notification Namespace Guard (unreleased)
147
+
148
+ The MCP stdio server now treats the whole `notifications/` method namespace consistently: notification messages must not include request ids, and valid id-less notifications are ignored without writing a response.
149
+
150
+ ### Changed
151
+ - Added a small notification-method predicate for the `notifications/` namespace.
152
+ - Generalized the request-id rejection from `notifications/initialized` to every `notifications/*` method.
153
+ - Preserved silent handling for valid id-less notifications, including unsupported notification names that the local server does not need to act on.
154
+ - Added unit and subprocess coverage for `notifications/progress` with and without ids.
155
+
156
+ ### Impact
157
+ - Claude Code, Codex, and other MCP clients get deterministic `-32600` feedback when a notification is accidentally sent as a request.
158
+ - Valid initialized notifications, progress-style notifications without ids, initialize, ping, tools/list, tools/call, resources/list, prompts/list, package smoke, Website Improvement readiness behavior, and CLI runtime failure reporting stay unchanged.
159
+
160
+ ### Verification Plan
161
+ - `node --check cli/lib/mcp-server.mjs`
162
+ - `node --test cli/lib/mcp-server.test.mjs`
163
+ - `npm test`
164
+ - `npm run audit:strict`
165
+ - `npm run release:metadata`
166
+ - `npm run package:smoke:self-test`
167
+ - `npm run release:check`
168
+ - `git diff --check`
169
+
170
+ ## Phase 748 — design-ai MCP Initialize Protocol Version Type Guard (unreleased)
171
+
172
+ The MCP stdio server now rejects non-string `initialize.params.protocolVersion` values with JSON-RPC `-32602`, so malformed initialize payloads get the same explicit invalid-params handling as other MCP request parameter mistakes.
173
+
174
+ ### Changed
175
+ - Added a focused initialize params validator that keeps optional params supported while checking `protocolVersion` when provided.
176
+ - Added unit coverage for numeric `protocolVersion` values so the server no longer silently falls back when the client sends the wrong JSON type.
177
+
178
+ ### Impact
179
+ - Claude Code, Codex, and other MCP clients get deterministic feedback when initialize version negotiation is malformed.
180
+ - Valid initialize requests, omitted initialize params, unsupported string protocol versions, initialized notifications, ping, tools/list, tools/call, resources/list, prompts/list, package smoke, Website Improvement readiness behavior, and CLI runtime failure reporting stay unchanged.
181
+
182
+ ### Verification Plan
183
+ - `node --check cli/lib/mcp-server.mjs`
184
+ - `node --test cli/lib/mcp-server.test.mjs`
185
+ - `npm test`
186
+ - `npm run audit:strict`
187
+ - `npm run release:metadata`
188
+ - `npm run package:smoke:self-test`
189
+ - `npm run release:check`
190
+ - `git diff --check`
191
+
192
+ ## Phase 747 — design-ai MCP Tool Argument Invalid Params Guard (unreleased)
193
+
194
+ The MCP stdio server now returns JSON-RPC `-32602` for schema-invalid `tools/call.params.arguments` payloads before CLI execution, so known-tool argument errors use the same invalid-params response shape as malformed `tools/call.params`.
195
+
196
+ ### Changed
197
+ - Added pre-execution tool schema argument validation inside the `tools/call` request branch.
198
+ - Converted unknown tool arguments and wrong argument types from successful MCP tool-result errors to JSON-RPC invalid params errors.
199
+ - Preserved CLI failure reporting as successful MCP tool results with `isError: true`.
200
+ - Updated package and registry smoke assertions so publish-time MCP protocol checks verify the JSON-RPC invalid-params response shape.
201
+
202
+ ### Impact
203
+ - Claude Code, Codex, and other MCP clients can handle known-tool schema mistakes through standard JSON-RPC invalid-params handling.
204
+ - Valid initialize, id-less initialized notifications, ping, tools/list, resources/list, prompts/list, id-bearing tools/call, request id validation, output truncation, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, learning write behavior, and CLI runtime failure reporting stay unchanged.
205
+ - Package and registry smoke coverage now treats schema-invalid known-tool arguments as JSON-RPC invalid params instead of successful MCP tool-result errors.
206
+
207
+ ### Verification Plan
208
+ - `node --check cli/lib/mcp-server.mjs`
209
+ - `node --test cli/lib/mcp-server.test.mjs`
210
+ - `npm test`
211
+ - `npm run audit:strict`
212
+ - `npm run release:metadata`
213
+ - `npm run package:smoke:self-test`
214
+ - `npm run release:check`
215
+ - `git diff --check`
216
+
217
+ ## Phase 746 — design-ai MCP Response Request ID Guard (unreleased)
218
+
219
+ The MCP stdio server now requires request ids for every response-bearing MCP method, so `initialize`, `ping`, `tools/list`, `tools/call`, `resources/list`, and `prompts/list` cannot be sent as silent notifications.
220
+
221
+ ### Changed
222
+ - Added an explicit response-method set for MCP methods that must include a request id.
223
+ - Reused the same request-id guard across initialize, ping, list methods, and tools/call.
224
+ - Added unit and subprocess coverage for id-less response-bearing MCP methods while preserving silent handling for valid initialized notifications.
225
+
226
+ ### Impact
227
+ - Claude Code, Codex, and other MCP clients get deterministic feedback when response-bearing MCP requests are accidentally sent without correlation ids.
228
+ - Valid initialize, id-less initialized notifications, ping, tools/list, resources/list, prompts/list, id-bearing tools/call, request id validation, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
229
+
230
+ ### Verification Plan
231
+ - `node --check cli/lib/mcp-server.mjs`
232
+ - `node --test cli/lib/mcp-server.test.mjs`
233
+ - `npm test`
234
+ - `npm run audit:strict`
235
+ - `npm run release:metadata`
236
+ - `npm run package:smoke:self-test`
237
+ - `npm run release:check`
238
+ - `git diff --check`
239
+
240
+ ## Phase 745 — design-ai MCP Tool Call Request ID Guard (unreleased)
241
+
242
+ The MCP stdio server now rejects `tools/call` payloads that omit a request id before any CLI work starts, so request-shaped tool execution cannot run silently as a JSON-RPC notification.
243
+
244
+ ### Changed
245
+ - Added a `tools/call` request-id requirement guard before tool lookup or CLI invocation.
246
+ - Preserved normal `tools/call` behavior for valid string, number, and null ids.
247
+ - Added unit and subprocess coverage proving id-less `tools/call` receives `-32600` feedback and does not execute the CLI.
248
+
249
+ ### Impact
250
+ - Claude Code, Codex, and other MCP clients get deterministic feedback when a tool invocation is accidentally sent without a correlation id.
251
+ - Valid initialize, id-less initialized notifications, ping, tools/list, resources/list, prompts/list, id-bearing tools/call, request id validation, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
252
+
253
+ ### Verification Plan
254
+ - `node --check cli/lib/mcp-server.mjs`
255
+ - `node --test cli/lib/mcp-server.test.mjs`
256
+ - `npm test`
257
+ - `npm run audit:strict`
258
+ - `npm run release:metadata`
259
+ - `npm run package:smoke:self-test`
260
+ - `npm run release:check`
261
+ - `git diff --check`
262
+
263
+ ## Phase 744 — design-ai MCP Optional Params Container Guard (unreleased)
264
+
265
+ The MCP stdio server now validates optional `params` containers for `ping`, `tools/list`, `resources/list`, and `prompts/list`, so malformed array, string, null, or boolean params receive deterministic `-32602` feedback instead of being silently accepted.
266
+
267
+ ### Changed
268
+ - Added a shared optional object-params guard for no-body MCP methods that still accept future object-shaped params.
269
+ - Preserved successful handling for omitted params and `{}` params on `ping` and `tools/list`.
270
+ - Added unit coverage for malformed optional params on `ping`, `tools/list`, `resources/list`, and `prompts/list`.
271
+
272
+ ### Impact
273
+ - Claude Code, Codex, and other MCP clients get clearer invalid-params feedback when list or ping requests carry malformed params.
274
+ - Valid initialize, id-less initialized notifications, ping, tools/list, resources/list, prompts/list, tools/call, request id validation, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
275
+
276
+ ### Verification Plan
277
+ - `node --check cli/lib/mcp-server.mjs`
278
+ - `node --test cli/lib/mcp-server.test.mjs`
279
+ - `npm test`
280
+ - `npm run audit:strict`
281
+ - `npm run release:metadata`
282
+ - `npm run package:smoke:self-test`
283
+ - `npm run release:check`
284
+ - `git diff --check`
285
+
286
+ ## Phase 743 — design-ai MCP Initialized Notification ID Guard (unreleased)
287
+
288
+ The MCP stdio server now rejects `notifications/initialized` payloads that include an `id`, so request-shaped initialized notifications receive deterministic `-32600` feedback instead of being silently dropped.
289
+
290
+ ### Changed
291
+ - Added a notification-shape guard for `notifications/initialized`.
292
+ - Preserved silent handling for valid id-less initialized notifications.
293
+ - Added unit and subprocess coverage for request-shaped initialized notification payloads.
294
+
295
+ ### Impact
296
+ - Claude Code, Codex, and other MCP clients get a clear protocol error when an initialized notification is accidentally sent as a request.
297
+ - Valid id-less notifications, initialize, tools/list, tools/call, request id validation, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
298
+
299
+ ### Verification Plan
300
+ - `node --check cli/lib/mcp-server.mjs`
301
+ - `node --test cli/lib/mcp-server.test.mjs`
302
+ - `npm test`
303
+ - `npm run audit:strict`
304
+ - `npm run release:metadata`
305
+ - `npm run package:smoke:self-test`
306
+ - `npm run release:check`
307
+ - `git diff --check`
308
+
309
+ ## Phase 742 — design-ai MCP Request ID Guard (unreleased)
310
+
311
+ The MCP stdio server now validates JSON-RPC request ids before dispatch, so malformed object, array, or boolean ids receive deterministic `-32600` feedback with `id: null` instead of being echoed back to clients.
312
+
313
+ ### Changed
314
+ - Added a JSON-RPC request id guard for `string`, `number`, and `null` ids.
315
+ - Normalized invalid request ids to `id: null` in protocol error responses.
316
+ - Added unit and subprocess coverage for invalid object, array, and boolean id payloads while preserving explicit `id: null` requests.
317
+
318
+ ### Impact
319
+ - Claude Code, Codex, and other MCP clients get clearer protocol feedback when request correlation ids are malformed.
320
+ - Valid string, number, and null ids, notifications, initialize, tools/list, tools/call, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
321
+
322
+ ### Verification Plan
323
+ - `node --check cli/lib/mcp-server.mjs`
324
+ - `node --test cli/lib/mcp-server.test.mjs`
325
+ - `npm test`
326
+ - `npm run audit:strict`
327
+ - `npm run release:metadata`
328
+ - `npm run package:smoke:self-test`
329
+ - `npm run release:check`
330
+ - `git diff --check`
331
+
332
+ ## Phase 741 — design-ai MCP JSON-RPC Envelope Guard (unreleased)
333
+
334
+ The MCP stdio server now rejects requests without `jsonrpc: "2.0"` before method dispatch, so malformed clients cannot reach normal initialize/list/call handlers with an invalid JSON-RPC envelope.
335
+
336
+ ### Changed
337
+ - Added a JSON-RPC envelope guard before MCP method validation.
338
+ - Preserved deterministic `-32600` responses for id-less malformed requests.
339
+ - Added unit and subprocess coverage for missing and unsupported `jsonrpc` payloads.
340
+
341
+ ### Impact
342
+ - Claude Code, Codex, and other MCP clients get clearer protocol feedback when a malformed JSON-RPC envelope reaches the stdio server.
343
+ - Valid JSON-RPC 2.0 initialize, notifications, tools/list, tools/call, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
344
+
345
+ ### Verification Plan
346
+ - `node --check cli/lib/mcp-server.mjs`
347
+ - `node --test cli/lib/mcp-server.test.mjs`
348
+ - `npm test`
349
+ - `npm run audit:strict`
350
+ - `npm run release:metadata`
351
+ - `npm run package:smoke:self-test`
352
+ - `npm run release:check`
353
+ - `git diff --check`
354
+
355
+ ## Phase 740 — design-ai MCP Request Method Shape Guard (unreleased)
356
+
357
+ The MCP stdio server now treats non-string or empty request methods as JSON-RPC invalid requests, so malformed notification-like payloads without ids still receive deterministic `-32600` feedback while valid notifications remain silent.
358
+
359
+ ### Changed
360
+ - Added a request-method shape guard before MCP method dispatch.
361
+ - Updated stdio response writing so id-less `-32600` invalid requests are emitted without also responding to valid unknown-method notifications.
362
+ - Added unit and subprocess coverage for numeric and empty `method` payloads.
363
+
364
+ ### Impact
365
+ - Claude Code, Codex, and other MCP clients get clearer protocol feedback when a malformed request method reaches the stdio server.
366
+ - Valid notifications, unknown-method notifications without ids, initialize, tools/list, tools/call, argument validation, output truncation, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
367
+
368
+ ### Verification Plan
369
+ - `node --check cli/lib/mcp-server.mjs`
370
+ - `node --test cli/lib/mcp-server.test.mjs`
371
+ - `npm test`
372
+ - `npm run audit:strict`
373
+ - `npm run release:metadata`
374
+ - `npm run package:smoke:self-test`
375
+ - `npm run release:check`
376
+ - `git diff --check`
377
+
378
+ ## Phase 739 — design-ai MCP Tool Arguments Container Guard (unreleased)
379
+
380
+ The MCP server now rejects malformed `tools/call.params.arguments` containers before tool lookup or CLI execution, so omitted arguments still default to `{}` while explicit `null`, array, or primitive argument payloads return JSON-RPC `-32602` feedback.
381
+
382
+ ### Changed
383
+ - Added a `tools/call.params.arguments` object-shape check to the MCP request boundary.
384
+ - Preserved omitted `arguments` support for no-argument tools such as `design_ai_version`.
385
+ - Added unit coverage for `arguments: null` and array argument payloads.
386
+
387
+ ### Impact
388
+ - Claude Code, Codex, and other MCP clients get clearer protocol feedback when a tool call includes a malformed arguments container.
389
+ - Normal `tools/call` execution, tool-schema argument validation, unknown-tool handling, initialize, notifications, tools/list, package smoke, Website Improvement readiness behavior, external MCP call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
390
+
391
+ ### Verification Plan
392
+ - `node --check cli/lib/mcp-server.mjs`
393
+ - `node --test cli/lib/mcp-server.test.mjs`
394
+ - `npm test`
395
+ - `npm run audit:strict`
396
+ - `npm run release:metadata`
397
+ - `npm run package:smoke:self-test`
398
+ - `npm run release:check`
399
+ - `git diff --check`
400
+
401
+ ## Phase 738 — design-ai MCP Invalid Request Stdio Response (unreleased)
402
+
403
+ The MCP stdio server now distinguishes valid notifications from malformed request objects without ids, so invalid JSON-RPC payloads such as `{}`, `[]`, or `null` receive deterministic `-32600` responses with `id: null` while normal `notifications/initialized` messages remain silent.
404
+
405
+ ### Changed
406
+ - Added a small response-write predicate for MCP stdio output.
407
+ - Preserved silent handling for valid JSON-RPC notifications.
408
+ - Added subprocess coverage for invalid request objects without ids.
409
+
410
+ ### Impact
411
+ - Claude Code, Codex, and other MCP clients get clearer protocol feedback when a malformed payload reaches the stdio server.
412
+ - Valid initialize requests, notifications, tools/list, tools/call, CLI argument mapping, output truncation, Website Improvement readiness behavior, external call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
413
+
414
+ ### Verification Plan
415
+ - `node --check cli/lib/mcp-server.mjs`
416
+ - `node --test cli/lib/mcp-server.test.mjs`
417
+ - `npm test`
418
+ - `npm run audit:strict`
419
+ - `npm run release:metadata`
420
+ - `git diff --check`
421
+
422
+ ## Phase 737 — design-ai MCP Request Param Guard (unreleased)
423
+
424
+ The MCP server now rejects malformed `initialize` and `tools/call` request parameters at the protocol boundary, so Claude Code and Codex clients get clear JSON-RPC `-32602` errors instead of less specific request handling or internal exceptions.
425
+
426
+ ### Changed
427
+ - Added a small MCP request-boundary guard for `tools/call` params.
428
+ - Added a matching MCP request-boundary guard for `initialize` params.
429
+ - Added unit coverage for malformed `initialize` params, `tools/call` `params: null`, and missing `params.name`.
430
+
431
+ ### Impact
432
+ - Malformed MCP clients receive deterministic protocol errors instead of falling into less specific request handling.
433
+ - Valid tool calls, tool schemas, CLI argument mapping, output truncation, protocol version fallback, Website Improvement readiness behavior, external call boundaries, target-repo mutation rules, and learning write behavior stay unchanged.
434
+
435
+ ### Verification Plan
436
+ - `node --test cli/lib/mcp-server.test.mjs`
437
+ - `npm test`
438
+ - `npm run audit:strict`
439
+ - `npm run release:metadata`
440
+ - `git diff --check`
441
+
442
+ ## Phase 736 — design-ai MCP Test Subprocess Readability (unreleased)
443
+
444
+ MCP stdio subprocess tests now share one small response collector, so parse-error and route-call smoke tests read as protocol scenarios instead of repeated stream plumbing.
445
+
446
+ ### Changed
447
+ - Added a focused MCP subprocess test helper for stdout line buffering and JSON-RPC response collection.
448
+ - Reused the helper in stdio parse-error and initialize/list/route subprocess tests.
449
+ - Kept timeout cleanup explicit so failed subprocess tests do not leave a child process running.
450
+
451
+ ### Impact
452
+ - MCP test code is easier to scan while preserving the same runtime behavior and assertions.
453
+ - No MCP server implementation, protocol response shape, tool schema, CLI mapping, package contents, Website Improvement readiness output, external call boundary, or learning write behavior changes.
454
+
455
+ ### Verification Plan
456
+ - `node --test cli/lib/mcp-server.test.mjs`
457
+ - `npm test`
458
+ - `npm run audit:strict`
459
+ - `npm run release:metadata`
460
+ - `git diff --check`
461
+
462
+ ## Phase 735 — design-ai MCP Negative Response Coverage (unreleased)
463
+
464
+ The MCP server test suite now pins common client failure paths, so malformed Claude/Codex requests keep returning deterministic JSON-RPC errors without starting the design-ai CLI unnecessarily.
465
+
466
+ ### Changed
467
+ - Added coverage for unknown MCP tool calls to prove the CLI runner is not invoked.
468
+ - Added request-level error coverage for missing and unsupported MCP methods.
469
+ - Added stdio subprocess coverage for invalid JSON input and parse-error responses.
470
+
471
+ ### Impact
472
+ - Claude Code and Codex integrations get stronger regression coverage for setup mistakes and malformed client messages.
473
+ - The existing MCP runtime behavior, tool names, schemas, protocol version fallback, CLI command mappings, output truncation, and typed tool argument validation stay unchanged.
474
+ - No package names, Website Improvement readiness outputs, external MCP calls, target-repo mutation rules, or learning writes change.
475
+
476
+ ### Verification Plan
477
+ - `node --test cli/lib/mcp-server.test.mjs`
478
+ - `npm test`
479
+ - `npm run audit:strict`
480
+ - `npm run release:metadata`
481
+ - `git diff --check`
482
+ - `npm run release:self-test`
483
+ - `npm run release:check`
484
+
485
+ ## Phase 734 — design-ai MCP Public Registry Smoke Coverage (unreleased)
486
+
487
+ Public registry smoke now verifies the published `design-ai-mcp` bin through `npm exec --package @design-ai/cli@<version>`, so the post-publish gate covers the same Claude Code and Codex stdio server path as the packed-tarball release smoke.
488
+
489
+ ### Changed
490
+ - Moved the MCP protocol smoke input and response assertion into shared smoke helpers.
491
+ - Added public registry `design-ai-mcp` protocol coverage after `npm exec` version metadata checks.
492
+ - Added registry smoke self-test coverage for the MCP server name, expected tools, and typed invalid-argument response.
493
+
494
+ ### Impact
495
+ - Public npm verification now catches a missing `design-ai-mcp` bin, broken stdio startup, missing design-ai tools, or lost typed validation after publish.
496
+ - Package smoke and registry smoke share the same MCP protocol assertion for Claude/Codex setup paths.
497
+ - No CLI command names, package names, Website Improvement readiness outputs, external MCP calls, target-repo mutation rules, or learning writes change.
498
+
499
+ ### Verification Plan
500
+ - `python3 -m py_compile tools/audit/smoke_assertions.py tools/audit/package-smoke.py tools/audit/registry-smoke.py`
501
+ - `python3 -B tools/audit/package-smoke.py --self-test`
502
+ - `python3 -B tools/audit/registry-smoke.py --self-test`
503
+ - `npm run package:smoke:self-test`
504
+ - `npm run registry:smoke:self-test`
505
+ - `npm run release:self-test`
506
+ - `npm test`
507
+ - `npm run audit:strict`
508
+ - `npm run release:metadata`
509
+ - `python3 -B tools/audit/local-ci.py --docs-only`
510
+ - `git diff --check`
511
+ - `npm run release:check`
512
+
513
+ ## Phase 733 — design-ai MCP Package Entrypoint Smoke Coverage (unreleased)
514
+
515
+ Packed-tarball release smoke now verifies the standalone `design-ai-mcp` bin after package installation and through one-shot `npm exec`, so Claude Code and Codex MCP setup cannot silently lose the stdio server entrypoint.
516
+
517
+ ### Changed
518
+ - Added a package-smoke MCP protocol helper that sends `initialize`, `tools/list`, and invalid `tools/call` JSON-RPC messages over stdin.
519
+ - Verified the installed `node_modules/.bin/design-ai-mcp` shim and the one-shot `npm exec --package <tarball> -- design-ai-mcp` path.
520
+ - Added self-test coverage for the MCP protocol assertion so typed argument validation remains visible in package smoke failures.
521
+
522
+ ### Impact
523
+ - Release smoke now covers the actual MCP server bin that Claude Code and Codex configuration examples use.
524
+ - The smoke keeps the same protocol version, tool names, JSON-RPC response shape, and typed validation message checked by unit tests.
525
+ - No CLI commands, package names, Website Improvement readiness outputs, external MCP calls, target-repo mutation rules, or learning writes change.
526
+
527
+ ### Verification Plan
528
+ - `python3 -B tools/audit/package-smoke.py --self-test`
529
+ - `npm run package:smoke:self-test`
530
+ - `npm run package:check`
531
+ - `npm run release:self-test`
532
+ - `npm run release:check`
533
+ - `npm test`
534
+ - `npm run audit:strict`
535
+ - `npm run release:metadata`
536
+ - `python3 -B tools/audit/local-ci.py --docs-only`
537
+ - `git diff --check`
538
+
539
+ ## Phase 732 — design-ai MCP Tool Argument Validation (unreleased)
540
+
541
+ The design-ai MCP server now validates tool arguments before invoking the CLI, so Claude Code and Codex get immediate, typed feedback for malformed tool calls instead of opaque downstream command failures.
542
+
543
+ ### Changed
544
+ - Added MCP tool argument validation for required fields, unknown fields, string length, boolean values, and integer ranges.
545
+ - Added MCP server tests proving invalid arguments are rejected before the CLI runner is called.
546
+ - Added troubleshooting notes for common Claude/Codex MCP setup and tool-call failures.
547
+
548
+ ### Impact
549
+ - `design-ai mcp` and `design-ai-mcp` keep the same tool names, schemas, protocol version, JSON-RPC response shape, and CLI command mappings.
550
+ - Claude Code and Codex integrations now fail earlier and with clearer messages when a client sends malformed tool input.
551
+ - No external MCP calls, target-repo mutation, learning writes, CLI flags, package bin names, or Website Improvement readiness contracts change.
552
+
553
+ ### Verification Plan
554
+ - `node --check cli/lib/mcp-server.mjs`
555
+ - `node --test cli/lib/mcp-server.test.mjs`
556
+ - `npm test`
557
+ - `npm run audit:strict`
558
+ - `npm run release:metadata`
559
+ - `python3 -B tools/audit/local-ci.py --docs-only`
560
+ - `git diff --check`
561
+ - `npm run package:check`
562
+ - `npm run release:self-test`
563
+ - `npm run release:check`
564
+
565
+ ## Phase 731 — Website Improvement Bundle Handoff Next Stage Command Summary Snapshot Cleanup (unreleased)
566
+
567
+ Website Improvement bundle handoff runbook next-stage command summary now groups stage classification, command metadata, and execution context into named internal snapshots before returning the same fields.
568
+
569
+ ### Changed
570
+ - Added internal next-stage snapshots for stage classification, command metadata, and execution context.
571
+ - Replaced the long inline `nextStageCommandSummary` assembly with ordered snapshot spreads while keeping the existing returned field names unchanged.
572
+
573
+ ### Impact
574
+ - `buildBundleHandoffOperatorRunbook` keeps the same `nextStage*` command and execution contract.
575
+ - Website Improvement handoff wrappers and tests can continue to consume the same next-stage kind, required flag, run policy, safety level, command lists, output files, command/manual state, and mutation boundary fields without migration.
576
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
577
+
578
+ ### Verification Plan
579
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
580
+ - `node --test cli/lib/site.test.mjs`
581
+ - `npm test`
582
+ - `npm run audit:strict`
583
+ - `npm run release:metadata`
584
+ - `python3 -B tools/audit/local-ci.py --docs-only`
585
+ - `git diff --check`
586
+ - `npm run package:check`
587
+ - `npm run release:self-test`
588
+ - `npm run release:check`
589
+
590
+ ## Phase 730 — Website Improvement Bundle Handoff Next Action Summary Snapshot Cleanup (unreleased)
591
+
592
+ Website Improvement bundle handoff runbook next-action summary now groups action basics, evidence-capture metadata, payload mapping, validation state, field rules, counts, and run context into named internal snapshots before returning the same fields.
593
+
594
+ ### Changed
595
+ - Added internal next-action snapshots for core action state, evidence-capture field metadata, payload templates and bindings, validation state, field rules, field counts, and run context.
596
+ - Replaced the long inline `nextActionSummary` assembly with ordered snapshot spreads while keeping the existing returned field names unchanged.
597
+
598
+ ### Impact
599
+ - `buildBundleHandoffOperatorRunbook` keeps the same `nextAction*` and `nextActionEvidenceCapture*` contract.
600
+ - Website Improvement handoff wrappers and tests can continue to consume the same next-action status, dependency, evidence, evidence-capture, run policy, and safety fields without migration.
601
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
602
+
603
+ ### Verification Plan
604
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
605
+ - `node --test cli/lib/site.test.mjs`
606
+ - `npm test`
607
+ - `npm run audit:strict`
608
+ - `npm run release:metadata`
609
+ - `python3 -B tools/audit/local-ci.py --docs-only`
610
+ - `git diff --check`
611
+ - `npm run package:check`
612
+ - `npm run release:self-test`
613
+ - `npm run release:check`
614
+
615
+ ## Phase 729 — Website Improvement Bundle Handoff Next Stage Evidence Capture Snapshot Cleanup (unreleased)
616
+
617
+ Website Improvement bundle handoff runbook next-stage evidence capture now groups field metadata, payload mapping, validation state, field rules, and field counts into named internal snapshots before returning the same fields.
618
+
619
+ ### Changed
620
+ - Added internal next-stage evidence-capture snapshots for field metadata, payload templates and bindings, validation state, field rules, and field counts.
621
+ - Replaced the long inline `nextStageEvidenceCapture` assembly with ordered snapshot spreads while keeping the existing returned field names unchanged.
622
+
623
+ ### Impact
624
+ - `buildBundleHandoffOperatorRunbook` keeps the same `nextStageActionEvidenceCapture*` contract.
625
+ - Website Improvement handoff wrappers and tests can continue to consume the same next-stage evidence-capture fields without migration.
626
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
627
+
628
+ ### Verification Plan
629
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
630
+ - `node --test cli/lib/site.test.mjs`
631
+ - `npm test`
632
+ - `npm run audit:strict`
633
+ - `npm run release:metadata`
634
+ - `python3 -B tools/audit/local-ci.py --docs-only`
635
+ - `git diff --check`
636
+ - `npm run package:check`
637
+ - `npm run release:self-test`
638
+ - `npm run release:check`
639
+
640
+ ## Phase 728 — Website Improvement Bundle Handoff Next Stage Human Line Summary Snapshot Cleanup (unreleased)
641
+
642
+ Website Improvement bundle handoff runbook next-stage identity now prepares the next-stage human-line summary as a named internal snapshot before returning the same identity fields.
643
+
644
+ ### Changed
645
+ - Added an internal `nextStageHumanLineSummary` snapshot for the next-stage line, evidence-progress status, progress label, and first unchecked evidence label.
646
+ - Replaced the nested inline `nextStageHumanLineSummary` assembly inside `nextStageIdentity` with a direct snapshot reference while keeping the existing returned field names unchanged.
647
+
648
+ ### Impact
649
+ - `buildBundleHandoffOperatorRunbook` keeps the same `nextStageHumanLineSummary` and `nextStageIdentity` contract.
650
+ - Website Improvement handoff wrappers and tests can continue to consume the same next-stage human-line summary fields without migration.
651
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
652
+
653
+ ### Verification Plan
654
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
655
+ - `node --test cli/lib/site.test.mjs`
656
+ - `npm test`
657
+ - `npm run audit:strict`
658
+ - `npm run release:metadata`
659
+ - `python3 -B tools/audit/local-ci.py --docs-only`
660
+ - `git diff --check`
661
+ - `npm run package:check`
662
+ - `npm run release:self-test`
663
+ - `npm run release:check`
664
+
665
+ ## Phase 727 — Website Improvement Bundle Handoff Human Line Summary Snapshot Cleanup (unreleased)
666
+
667
+ Website Improvement bundle handoff runbook human-line summary now groups count, evidence-progress, and first-value fields into named internal snapshots before returning the same summary fields.
668
+
669
+ ### Changed
670
+ - Added internal human-line summary snapshots for base counts, evidence-progress counts, and first stage/line values.
671
+ - Replaced the long inline `stageHumanLineSummary` assembly with snapshot spreads while keeping the existing summary field names unchanged.
672
+
673
+ ### Impact
674
+ - `buildBundleHandoffOperatorRunbook` keeps the same `stageHumanLineSummary` contract.
675
+ - Website Improvement handoff wrappers and tests can continue to consume the same human-line count, progress, and first-value summary fields without migration.
676
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
677
+
678
+ ### Verification Plan
679
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
680
+ - `node --test cli/lib/site.test.mjs`
681
+ - `npm test`
682
+ - `npm run audit:strict`
683
+ - `npm run release:metadata`
684
+ - `python3 -B tools/audit/local-ci.py --docs-only`
685
+ - `git diff --check`
686
+ - `npm run package:check`
687
+ - `npm run release:self-test`
688
+ - `npm run release:check`
689
+
690
+ ## Phase 726 — Website Improvement Bundle Handoff Human Line Display Row Summary Snapshot Cleanup (unreleased)
691
+
692
+ Website Improvement bundle handoff runbook human-line display row summary now groups count, action-status, evidence-progress, and first-key fields into named internal snapshots before returning the same summary fields.
693
+
694
+ ### Changed
695
+ - Added internal display-row summary snapshots for base counts, action-status counts, evidence-progress counts, and first matching row keys.
696
+ - Replaced the long inline `stageHumanLineDisplayRowSummary` assembly with snapshot spreads while keeping the existing summary field names unchanged.
697
+
698
+ ### Impact
699
+ - `buildBundleHandoffOperatorRunbook` keeps the same `stageHumanLineDisplayRowSummary` contract.
700
+ - Website Improvement handoff wrappers and tests can continue to consume the same count, status, progress, and first-key summary fields without migration.
701
+ - No CLI flags, bundle files, command manifest fields, stage/action/evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
702
+
703
+ ### Verification Plan
704
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
705
+ - `node --test cli/lib/site.test.mjs`
706
+ - `npm test`
707
+ - `npm run audit:strict`
708
+ - `npm run release:metadata`
709
+ - `python3 -B tools/audit/local-ci.py --docs-only`
710
+ - `git diff --check`
711
+ - `npm run package:check`
712
+ - `npm run release:self-test`
713
+ - `npm run release:check`
714
+
715
+ ## Phase 725 — Website Improvement Bundle Handoff Human Line Display Row Snapshot Cleanup (unreleased)
716
+
717
+ Website Improvement bundle handoff runbook human-line display rows now group row identity, execution context, action status, and evidence progress fields into named internal snapshots before returning the same display-row fields.
718
+
719
+ ### Changed
720
+ - Added internal display-row snapshots for stage identity, execution context, action status, and evidence progress metadata.
721
+ - Replaced the long inline `stageHumanLineDisplayRows` return assembly with snapshot spreads while keeping the existing display-row field names unchanged.
722
+
723
+ ### Impact
724
+ - `buildBundleHandoffOperatorRunbook` keeps the same `stageHumanLineDisplayRows[*]` contract.
725
+ - Website Improvement handoff wrappers can continue to consume the same stage line, required/manual, command count, action status, and evidence-progress display fields without migration.
726
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
727
+
728
+ ### Verification Plan
729
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
730
+ - `node --test cli/lib/site.test.mjs`
731
+ - `npm test`
732
+ - `npm run audit:strict`
733
+ - `npm run release:metadata`
734
+ - `python3 -B tools/audit/local-ci.py --docs-only`
735
+ - `git diff --check`
736
+ - `npm run package:check`
737
+ - `npm run release:self-test`
738
+ - `npm run release:check`
739
+
740
+ ## Phase 724 — Website Improvement Bundle Handoff Action Row Snapshot Cleanup (unreleased)
741
+
742
+ Website Improvement bundle handoff runbook action rows now group action identity, status, dependency, evidence, evidence-capture, and execution fields into named internal snapshots before returning the same row fields.
743
+
744
+ ### Changed
745
+ - Added internal action-row snapshots for action identity, status, dependency/completion metadata, and execution metadata.
746
+ - Replaced the long inline action-row return assembly with snapshot spreads while keeping the existing action-row field names unchanged.
747
+
748
+ ### Impact
749
+ - `buildBundleHandoffOperatorRunbook` keeps the same `stageActionRows[*]` contract.
750
+ - Website Improvement handoff wrappers can continue to consume the same action identity, status, dependency, evidence, evidence-capture, command, safety, and boundary fields without migration.
751
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
752
+
753
+ ### Verification Plan
754
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
755
+ - `node --test cli/lib/site.test.mjs`
756
+ - `npm test`
757
+ - `npm run audit:strict`
758
+ - `npm run release:metadata`
759
+ - `python3 -B tools/audit/local-ci.py --docs-only`
760
+ - `git diff --check`
761
+ - `npm run package:check`
762
+ - `npm run release:self-test`
763
+ - `npm run release:check`
764
+
765
+ ## Phase 723 — Website Improvement Bundle Handoff Stage Snapshot Cleanup (unreleased)
766
+
767
+ Website Improvement bundle handoff runbook stage assembly now groups stage identity, command metadata, and safety metadata into named internal snapshots before returning the same public stage fields.
768
+
769
+ ### Changed
770
+ - Added internal stage snapshots for stage identity, command summary, and safety summary inside `buildStage`.
771
+ - Replaced the long inline stage return assembly with snapshot spreads while keeping the existing stage field names unchanged.
772
+
773
+ ### Impact
774
+ - `buildBundleHandoffOperatorRunbook` keeps the same top-level `stages[*]` contract.
775
+ - Website Improvement handoff wrappers can continue to consume the same stage identity fields, command lists, command counts, run policies, safety levels, output files, and safety flags without migration.
776
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
777
+
778
+ ### Verification Plan
779
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
780
+ - `node --test cli/lib/site.test.mjs`
781
+ - `npm test`
782
+ - `npm run audit:strict`
783
+ - `npm run release:metadata`
784
+ - `python3 -B tools/audit/local-ci.py --docs-only`
785
+ - `git diff --check`
786
+ - `npm run package:check`
787
+ - `npm run release:self-test`
788
+ - `npm run release:check`
789
+
790
+ ## Phase 722 — Website Improvement Bundle Handoff Command Manifest Return Snapshot Cleanup (unreleased)
791
+
792
+ Website Improvement bundle handoff command manifest return assembly now groups command counts, selected task ids, and strict task command keys into named internal snapshots before returning the same public fields.
793
+
794
+ ### Changed
795
+ - Added internal return snapshots for command manifest counts, task selection ids, and strict task command keys.
796
+ - Replaced the long inline command manifest return assembly with snapshot spreads while keeping the existing returned field names unchanged.
797
+
798
+ ### Impact
799
+ - `buildBundleHandoffCommandManifest` keeps the same top-level command manifest contract.
800
+ - Website Improvement bundle handoff wrappers can continue to consume the same command counts, task ids, strict task command keys, and `commands` array without migration.
801
+ - No CLI flags, bundle files, command entries, command scopes, run policies, safety flags, task selection behavior, output-file selection, target-repo mutation rules, external-call boundaries, or generated output files change.
802
+
803
+ ### Verification Plan
804
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
805
+ - `node --test cli/lib/site.test.mjs`
806
+ - `npm test`
807
+ - `npm run audit:strict`
808
+ - `npm run release:metadata`
809
+ - `python3 -B tools/audit/local-ci.py --docs-only`
810
+ - `git diff --check`
811
+ - `npm run package:check`
812
+ - `npm run release:self-test`
813
+ - `npm run release:check`
814
+
815
+ ## Phase 721 — Website Improvement Bundle Handoff Runbook Return Snapshot Cleanup (unreleased)
816
+
817
+ Website Improvement bundle handoff runbook return assembly now groups count, stage identity, human-line, action, evidence-capture, execution, and next-step fields into named internal snapshots before returning the same public fields.
818
+
819
+ ### Changed
820
+ - Added internal return snapshots for runbook counts, stage identity maps, human-line maps, action status maps, action dependency maps, action evidence maps, evidence-capture maps, stage execution maps, and next-step summary fields.
821
+ - Replaced the long inline operator runbook return assembly with snapshot spreads while keeping the existing returned field names unchanged.
822
+
823
+ ### Impact
824
+ - `buildBundleHandoffOperatorRunbook` keeps the same top-level operator runbook contract.
825
+ - Website Improvement handoff wrappers can continue to consume the same stage maps, action maps, evidence-capture maps, `actionSummary`, next-stage fields, next-command fields, and `stages` array without migration.
826
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, human runbook lines, or generated output files change.
827
+
828
+ ### Verification Plan
829
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
830
+ - `node --test cli/lib/site.test.mjs`
831
+ - `npm test`
832
+ - `npm run audit:strict`
833
+ - `npm run release:metadata`
834
+ - `python3 -B tools/audit/local-ci.py --docs-only`
835
+ - `git diff --check`
836
+ - `npm run package:check`
837
+ - `npm run release:self-test`
838
+ - `npm run release:check`
839
+
840
+ ## Phase 720 — Website Improvement Bundle Handoff Runbook Action Summary Snapshot Cleanup (unreleased)
841
+
842
+ Website Improvement bundle handoff runbook action summary now groups action count, dependency, evidence, evidence-capture, validation, human-line, lookup, and boundary aggregates into named internal snapshots.
843
+
844
+ ### Changed
845
+ - Added internal action summary snapshots for action counts, dependency/completion metadata, evidence target counts, evidence-capture field counts, payload counts, validation counts, initial validation counts, checklist counts, human-line display counts, validated field counts, run-policy counts, first-action lookups, and boundary flags.
846
+ - Replaced the long inline `actionSummary` assembly with snapshot spreads while keeping the existing action summary field names unchanged.
847
+
848
+ ### Impact
849
+ - `buildBundleHandoffOperatorRunbook` keeps the same returned `actionSummary` contract.
850
+ - Website Improvement handoff wrappers can continue to consume the same action count, evidence-capture, validation, next-action, first-action lookup, and boundary fields without migration.
851
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
852
+
853
+ ### Verification Plan
854
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
855
+ - `node --test cli/lib/site.test.mjs`
856
+ - `npm test`
857
+ - `npm run audit:strict`
858
+ - `npm run release:metadata`
859
+ - `python3 -B tools/audit/local-ci.py --docs-only`
860
+ - `git diff --check`
861
+ - `npm run package:check`
862
+ - `npm run release:self-test`
863
+ - `npm run release:check`
864
+
865
+ ## Phase 719 — Website Improvement Bundle Handoff Runbook Action Row Evidence Snapshot Cleanup (unreleased)
866
+
867
+ Website Improvement bundle handoff runbook action rows now group evidence and evidence-capture assembly into named internal snapshots before returning the same row fields.
868
+
869
+ ### Changed
870
+ - Added an internal `actionEvidenceSummary` snapshot for evidence requirements, evidence-required state, and evidence target metadata.
871
+ - Added an internal `actionEvidenceCaptureSummary` snapshot for evidence-capture fields, field metadata, payload templates, validation metadata, checklist summaries, and capture counts.
872
+ - Replaced the long inline `stageActionRows` evidence assembly with snapshot spreads while keeping the existing action-row field names unchanged.
873
+
874
+ ### Impact
875
+ - `buildBundleHandoffOperatorRunbook` keeps the same `stageActionRows[*].actionEvidence*` and `stageActionRows[*].actionEvidenceCapture*` contract.
876
+ - Downstream Website Improvement handoff wrappers can continue to consume the same action-row evidence fields without migration.
877
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
878
+
879
+ ### Verification Plan
880
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
881
+ - `node --test cli/lib/site.test.mjs`
882
+ - `npm test`
883
+ - `npm run audit:strict`
884
+ - `npm run release:metadata`
885
+ - `python3 -B tools/audit/local-ci.py --docs-only`
886
+ - `git diff --check`
887
+ - `npm run package:check`
888
+ - `npm run release:self-test`
889
+ - `npm run release:check`
890
+
891
+ ## Phase 718 — Website Improvement Bundle Handoff Runbook Action Summary Next Snapshot Cleanup (unreleased)
892
+
893
+ Website Improvement bundle handoff runbook action summary now groups the internal `nextAction*` assembly into a named snapshot object before returning the same public fields.
894
+
895
+ ### Changed
896
+ - Added a grouped internal `nextActionSummary` snapshot for next-action status, dependency/completion metadata, evidence metadata, evidence-capture metadata, and stage linkage metadata.
897
+ - Replaced the long inline `actionSummary` assembly for `nextAction*` fields with the grouped snapshot spread.
898
+ - Kept the existing next-action accessor helpers and public field names unchanged.
899
+
900
+ ### Impact
901
+ - `buildBundleHandoffOperatorRunbook` keeps the same returned `actionSummary.nextAction*` contract.
902
+ - Website Improvement handoff wrappers can continue to consume the same runbook next-action summary fields without migration.
903
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
904
+
905
+ ### Verification Plan
906
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
907
+ - `node --test cli/lib/site.test.mjs`
908
+ - `npm test`
909
+ - `npm run audit:strict`
910
+ - `npm run release:metadata`
911
+ - `python3 -B tools/audit/local-ci.py --docs-only`
912
+ - `git diff --check`
913
+ - `npm run package:check`
914
+ - `npm run release:self-test`
915
+ - `npm run release:check`
916
+
917
+ ## Phase 717 — Website Improvement Bundle Handoff Runbook Next Snapshot Cleanup (unreleased)
918
+
919
+ Website Improvement bundle handoff runbook next-stage output now groups the internal `nextStage*`, `nextStageAction*`, evidence-capture, and `nextCommand*` assembly into named snapshot objects before returning the same public fields.
920
+
921
+ ### Changed
922
+ - Renamed generic next-action and next-stage accessors so scalar, list, object, number, and boolean reads are explicit at the call site.
923
+ - Added grouped internal snapshots for next-stage identity, action status, dependency/completion metadata, evidence metadata, evidence-capture metadata, command-stage metadata, and next-command metadata.
924
+ - Replaced the long inline return assembly for `nextStage*` and `nextCommand*` fields with those grouped snapshots.
925
+
926
+ ### Impact
927
+ - `buildBundleHandoffOperatorRunbook` keeps the same returned `nextStage*`, `nextStageAction*`, `nextCommand*`, evidence-capture, command, safety, and stage fields.
928
+ - Website Improvement handoff wrappers can continue to consume the same runbook next-step contract without migration.
929
+ - No CLI flags, bundle files, command manifest fields, stage/action field names, evidence field names, validation status values, next-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
930
+
931
+ ### Verification Plan
932
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
933
+ - `node --test cli/lib/site.test.mjs`
934
+ - `npm test`
935
+ - `npm run audit:strict`
936
+ - `npm run release:metadata`
937
+ - `python3 -B tools/audit/local-ci.py --docs-only`
938
+ - `git diff --check`
939
+ - `npm run release:check`
940
+
941
+ ## Phase 716 — Website Improvement Bundle Handoff Runbook Evidence Predicate Cleanup (unreleased)
942
+
943
+ Website Improvement bundle handoff evidence-capture summaries now use named predicates for evidence field input type, value shape, payload mapping, validation state, display state, and checklist item state.
944
+
945
+ ### Changed
946
+ - Added evidence-capture field predicates for input type, value shape, multi-value behavior, empty values, placeholder, ARIA label, help text, section membership, payload mapping, and validation rules.
947
+ - Added shared required/optional and multi-value predicates for evidence payload bindings, validation specs, and checklist items.
948
+ - Added initial validation state, display row, and checklist item predicates for valid/invalid, blocking/non-blocking, checked/unchecked, and completion-blocking summary counts.
949
+ - Reused those predicates in evidence-capture summary counts and first evidence-capture action lookups.
950
+
951
+ ### Impact
952
+ - `buildBundleHandoffOperatorRunbook` keeps the same evidence-capture summary fields and first-action lookup fields.
953
+ - Website Improvement handoff wrappers can continue to consume the same runbook evidence summary contract without migration.
954
+ - No CLI flags, bundle files, command manifest fields, stage fields, action field names, evidence field names, evidence targets, validation status values, first-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
955
+
956
+ ### Verification Plan
957
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
958
+ - `node --test cli/lib/site.test.mjs`
959
+ - `npm test`
960
+ - `npm run audit:strict`
961
+ - `npm run release:metadata`
962
+ - `python3 -B tools/audit/local-ci.py --docs-only`
963
+ - `git diff --check`
964
+ - `npm run release:check`
965
+
966
+ ## Phase 715 — Website Improvement Bundle Handoff Runbook Action Predicate Cleanup (unreleased)
967
+
968
+ Website Improvement bundle handoff action summaries now use named predicates for action enabled state, prerequisites, evidence targets, evidence-capture presence, and first-action lookups.
969
+
970
+ ### Changed
971
+ - Added action-row predicates for enabled, disabled, manual-disabled, prerequisite, dependency, blocking, completion-criteria, and evidence-required states.
972
+ - Added action evidence-target predicates for local command output, local output file, target repo working tree, and handoff evidence record.
973
+ - Added evidence-capture predicates for field presence, required/optional field presence, multiple sections, multiple payload namespaces, and payload template presence.
974
+ - Reused those predicates in action summary counts and first-action lookup fields.
975
+
976
+ ### Impact
977
+ - `buildBundleHandoffOperatorRunbook` keeps the same action summary fields and first-action lookup fields.
978
+ - Website Improvement handoff wrappers can continue to consume the same runbook action summary contract without migration.
979
+ - No CLI flags, bundle files, command manifest fields, stage fields, action field names, evidence field names, evidence targets, first-action keys, target-repo mutation rules, external-call boundaries, or human runbook lines change.
980
+
981
+ ### Verification Plan
982
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
983
+ - `node --test cli/lib/site.test.mjs`
984
+ - `npm test`
985
+ - `npm run audit:strict`
986
+ - `npm run release:metadata`
987
+ - `python3 -B tools/audit/local-ci.py --docs-only`
988
+ - `git diff --check`
989
+ - `npm run release:check`
990
+
991
+ ## Phase 714 — Website Improvement Bundle Handoff Runbook Display Row Predicate Cleanup (unreleased)
992
+
993
+ Website Improvement bundle handoff display-row summaries now use named predicates for required/manual rows, command rows, action status, and evidence-progress status.
994
+
995
+ ### Changed
996
+ - Added display-row predicates for required, optional, command-backed, and manual rows.
997
+ - Added display-row predicates for ready, optional, manual, and blocked action statuses.
998
+ - Added display-row predicates for evidence-progress presence plus blocked and ready evidence-progress states.
999
+ - Reused those predicates in display-row status key maps, summary counts, and first-row lookups.
1000
+
1001
+ ### Impact
1002
+ - `buildBundleHandoffOperatorRunbook` keeps the same display-row summary fields.
1003
+ - Website Improvement handoff wrappers can continue to consume the same human-line display row contract without migration.
1004
+ - No CLI flags, bundle files, command manifest fields, stage fields, action fields, evidence field names, status labels, evidence-progress values, target-repo mutation rules, external-call boundaries, or human runbook lines change.
1005
+
1006
+ ### Verification Plan
1007
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1008
+ - `node --test cli/lib/site.test.mjs`
1009
+ - `npm test`
1010
+ - `npm run audit:strict`
1011
+ - `npm run release:metadata`
1012
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1013
+ - `git diff --check`
1014
+ - `npm run release:check`
1015
+
1016
+ ## Phase 713 — Website Improvement Bundle Handoff Runbook Scope and Safety Predicate Cleanup (unreleased)
1017
+
1018
+ Website Improvement bundle handoff command and operator summaries now use named predicates for command scope, safety flags, required stages, and external/target-repo boundary counts.
1019
+
1020
+ ### Changed
1021
+ - Added command-manifest predicates for source-bundle and task-handoff scope counts.
1022
+ - Added command-manifest safety predicates for external calls, target-repo mutation, clean-workspace requirements, and review-before-mutation requirements.
1023
+ - Added runbook-stage predicates for required/optional stages and external/target-repo boundary checks.
1024
+ - Reused those predicates in manifest counts, action summaries, first-stage lookups, returned stage counts, and top-level boundary booleans.
1025
+
1026
+ ### Impact
1027
+ - `buildBundleHandoffCommandManifest` keeps the same command count and safety count fields.
1028
+ - `buildBundleHandoffOperatorRunbook` keeps the same stage count, action summary, first-stage key, and boundary fields.
1029
+ - Website Improvement handoff wrappers can continue to consume the same manifest and runbook contracts without migration.
1030
+ - No CLI flags, bundle files, command manifest field names, target-repo mutation rules, external-call boundaries, evidence field names, action counts, first-stage keys, or human runbook lines change.
1031
+
1032
+ ### Verification Plan
1033
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1034
+ - `node --test cli/lib/site.test.mjs`
1035
+ - `npm test`
1036
+ - `npm run audit:strict`
1037
+ - `npm run release:metadata`
1038
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1039
+ - `git diff --check`
1040
+ - `npm run release:check`
1041
+
1042
+ ## Phase 712 — Website Improvement Bundle Handoff Runbook Run Policy Predicate Cleanup (unreleased)
1043
+
1044
+ Website Improvement bundle handoff command and operator summaries now use named predicates for read-only and local-output run policy counts.
1045
+
1046
+ ### Changed
1047
+ - Added command-manifest run policy predicates for read-only and local-output command counts.
1048
+ - Added a runbook-stage `usesReadOnlyRunPolicy` predicate beside the existing local-output predicate.
1049
+ - Reused those predicates for manifest counts, action summary counts, and returned command-stage summary counts.
1050
+
1051
+ ### Impact
1052
+ - `buildBundleHandoffCommandManifest` keeps the same command count fields.
1053
+ - `buildBundleHandoffOperatorRunbook` keeps the same read-only and local-output summary fields.
1054
+ - Website Improvement handoff wrappers can continue to consume the same manifest and runbook contracts without migration.
1055
+ - No CLI flags, bundle files, command manifest field names, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1056
+
1057
+ ### Verification Plan
1058
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1059
+ - `node --test cli/lib/site.test.mjs`
1060
+ - `npm test`
1061
+ - `npm run audit:strict`
1062
+ - `npm run release:metadata`
1063
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1064
+ - `git diff --check`
1065
+ - `npm run release:check`
1066
+
1067
+ ## Phase 711 — Website Improvement Bundle Handoff Runbook Output Predicate Cleanup (unreleased)
1068
+
1069
+ Website Improvement bundle handoff operator stage summaries now use named predicates for local-output run policy and output-file checks.
1070
+
1071
+ ### Changed
1072
+ - Added local `usesLocalOutputRunPolicy` for `writes-local-file` run-policy checks.
1073
+ - Added local `hasOutputFile` for output-file presence checks.
1074
+ - Reused those predicates in action summary and returned command-stage summary counts.
1075
+
1076
+ ### Impact
1077
+ - `buildBundleHandoffOperatorRunbook` keeps the same local-output and output-file count fields.
1078
+ - Website Improvement handoff wrappers can continue to consume the same runbook summary contract without migration.
1079
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1080
+
1081
+ ### Verification Plan
1082
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1083
+ - `node --test cli/lib/site.test.mjs`
1084
+ - `npm test`
1085
+ - `npm run audit:strict`
1086
+ - `npm run release:metadata`
1087
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1088
+ - `git diff --check`
1089
+ - `npm run release:check`
1090
+
1091
+ ## Phase 710 — Website Improvement Bundle Handoff Runbook Display Row Summary Cleanup (unreleased)
1092
+
1093
+ Website Improvement bundle handoff operator action summaries now reuse the prepared human-line display-row summary for display-row counts.
1094
+
1095
+ ### Changed
1096
+ - Reused `stageHumanLineDisplayRowSummary.count` for `humanLineDisplayRowCount`.
1097
+ - Reused `stageHumanLineDisplayRowSummary.byKeyCount` for `humanLineDisplayRowByKeyCount`.
1098
+ - Removed repeated direct display-row length and by-key object counting inside `actionSummary`.
1099
+
1100
+ ### Impact
1101
+ - `buildBundleHandoffOperatorRunbook` keeps the same human-line display-row action summary fields.
1102
+ - Website Improvement handoff wrappers can continue to consume the same action summary contract without migration.
1103
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1104
+
1105
+ ### Verification Plan
1106
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1107
+ - `node --test cli/lib/site.test.mjs`
1108
+ - `npm test`
1109
+ - `npm run audit:strict`
1110
+ - `npm run release:metadata`
1111
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1112
+ - `git diff --check`
1113
+ - `npm run release:check`
1114
+
1115
+ ## Phase 709 — Website Improvement Bundle Handoff Runbook Initial Validation Summary Cleanup (unreleased)
1116
+
1117
+ Website Improvement bundle handoff operator action summaries now route initial validation summary and checklist summary aggregations through named local helpers.
1118
+
1119
+ ### Changed
1120
+ - Added local `countActionsBySummary` and `sumSummaryValues` helpers for action-row summary objects.
1121
+ - Added local initial-validation summary wrappers for field-count, status, completion, and blocking totals.
1122
+ - Added local initial-checklist summary wrappers for item-count, status, completion, checked, unchecked, and blocking-unchecked totals.
1123
+ - Replaced repeated direct `actionEvidenceCaptureInitialValidationSummary` and `actionEvidenceCaptureInitialValidationChecklistSummary` accesses inside `actionSummary`.
1124
+
1125
+ ### Impact
1126
+ - `buildBundleHandoffOperatorRunbook` keeps the same initial validation summary and checklist summary fields.
1127
+ - Website Improvement handoff wrappers can continue to consume the same action summary contract without migration.
1128
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1129
+
1130
+ ### Verification Plan
1131
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1132
+ - `node --test cli/lib/site.test.mjs`
1133
+ - `npm test`
1134
+ - `npm run audit:strict`
1135
+ - `npm run release:metadata`
1136
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1137
+ - `git diff --check`
1138
+ - `npm run release:check`
1139
+
1140
+ ## Phase 708 — Website Improvement Bundle Handoff Runbook Action Item Count Cleanup (unreleased)
1141
+
1142
+ Website Improvement bundle handoff operator action summaries now name repeated item-count and item-value aggregations before assembling evidence-capture totals.
1143
+
1144
+ ### Changed
1145
+ - Added local `countActionsWithItems` for action rows that contain at least one item in a named list field.
1146
+ - Added local `sumActionItems` for total item counts across action rows.
1147
+ - Added local `sumActionItemValues` for numeric totals derived from list item values.
1148
+ - Replaced repeated `.length > 0`, `.length`, and nested `reduce` summary calculations with the named helpers.
1149
+
1150
+ ### Impact
1151
+ - `buildBundleHandoffOperatorRunbook` keeps the same payload binding, validation spec, initial validation state, display metadata, checklist, and minimum-length summary fields.
1152
+ - Website Improvement handoff wrappers can continue to consume the same action summary fields without migration.
1153
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1154
+
1155
+ ### Verification Plan
1156
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1157
+ - `node --test cli/lib/site.test.mjs`
1158
+ - `npm test`
1159
+ - `npm run audit:strict`
1160
+ - `npm run release:metadata`
1161
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1162
+ - `git diff --check`
1163
+ - `npm run release:check`
1164
+
1165
+ ## Phase 707 — Website Improvement Bundle Handoff Runbook Payload Summary Cleanup (unreleased)
1166
+
1167
+ Website Improvement bundle handoff operator action summaries now name the payload template and unique-list summary calculations before returning the runbook payload.
1168
+
1169
+ ### Changed
1170
+ - Added local `uniqueActionListValueCount` for unique action-list summary counts.
1171
+ - Added local `payloadTemplatePathCount` for payload flat-template path counts.
1172
+ - Replaced inline `flatMap`/`Object.keys(...).length` summary calculations with the named helpers.
1173
+
1174
+ ### Impact
1175
+ - `buildBundleHandoffOperatorRunbook` keeps the same payload template path counts, unique section counts, unique payload namespace counts, action summary fields, and returned runbook contract.
1176
+ - Website Improvement handoff wrappers can continue to consume the same summary fields without migration.
1177
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1178
+
1179
+ ### Verification Plan
1180
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1181
+ - `node --test cli/lib/site.test.mjs`
1182
+ - `npm test`
1183
+ - `npm run audit:strict`
1184
+ - `npm run release:metadata`
1185
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1186
+ - `git diff --check`
1187
+ - `npm run release:check`
1188
+
1189
+ ## Phase 706 — Website Improvement Bundle Handoff Runbook Action Item Summary Cleanup (unreleased)
1190
+
1191
+ Website Improvement bundle handoff operator action summaries now use shared local item-summary helpers for repeated evidence item counts and first-action lookups.
1192
+
1193
+ ### Changed
1194
+ - Added local `countActionItems` and `maxActionItemValue` helpers near the `actionSummary` assembly.
1195
+ - Reused the item-summary helpers for evidence capture fields, payload bindings, validation specs, initial validation state rows, display rows, and checklist items.
1196
+ - Added `firstActionWithEvidenceCaptureField` for first-action evidence field lookups.
1197
+
1198
+ ### Impact
1199
+ - `buildBundleHandoffOperatorRunbook` keeps the same action summary counts, first-action keys, evidence capture metadata, and returned runbook contract.
1200
+ - Website Improvement handoff wrappers can continue to consume the same summary fields without migration.
1201
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1202
+
1203
+ ### Verification Plan
1204
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1205
+ - `node --test cli/lib/site.test.mjs`
1206
+ - `npm test`
1207
+ - `npm run audit:strict`
1208
+ - `npm run release:metadata`
1209
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1210
+ - `git diff --check`
1211
+ - `npm run release:check`
1212
+
1213
+ ## Phase 705 — Website Improvement Bundle Handoff Runbook Evidence Field Value Cleanup (unreleased)
1214
+
1215
+ Website Improvement bundle handoff operator action rows now read evidence-capture field values through one local helper before assembling the row payload.
1216
+
1217
+ ### Changed
1218
+ - Added a local `evidenceFieldValues` helper inside the `stageActionRows` mapper.
1219
+ - Replaced repeated `evidenceCaptureFields.map(...)` field extraction calls with `evidenceFieldValues`.
1220
+ - Reused the same helper for evidence capture section labels and payload namespaces before returning action row metadata.
1221
+
1222
+ ### Impact
1223
+ - `buildBundleHandoffOperatorRunbook` keeps the same evidence-capture field arrays, section metadata, payload namespace metadata, validation metadata, and action row contract.
1224
+ - Website Improvement handoff wrappers can continue to consume the same stage action evidence fields without migration.
1225
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence field names, action counts, or human runbook lines change.
1226
+
1227
+ ### Verification Plan
1228
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1229
+ - `node --test cli/lib/site.test.mjs`
1230
+ - `npm test`
1231
+ - `npm run audit:strict`
1232
+ - `npm run release:metadata`
1233
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1234
+ - `git diff --check`
1235
+ - `npm run release:check`
1236
+
1237
+ ## Phase 704 — Website Improvement Bundle Handoff Runbook Manual Stage Predicate Cleanup (unreleased)
1238
+
1239
+ Website Improvement bundle handoff operator stages now use named predicates for command-backed and manual stage checks instead of repeating `commandCount` comparisons inline.
1240
+
1241
+ ### Changed
1242
+ - Added local `hasCommands` and `isManualStage` predicates inside `buildBundleHandoffOperatorRunbook`.
1243
+ - Replaced repeated `stage.commandCount > 0` checks with `hasCommands`.
1244
+ - Replaced repeated `stage.commandCount === 0` checks with `isManualStage`.
1245
+
1246
+ ### Impact
1247
+ - `buildBundleHandoffOperatorRunbook` keeps the same command-stage counts, manual-stage counts, lookup maps, next-action summary fields, and stage lists.
1248
+ - Website Improvement handoff wrappers can continue to consume the same stage and action fields without migration.
1249
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence fields, action counts, or human runbook lines change.
1250
+
1251
+ ### Verification Plan
1252
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1253
+ - `node --test cli/lib/site.test.mjs`
1254
+ - `npm test`
1255
+ - `npm run audit:strict`
1256
+ - `npm run release:metadata`
1257
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1258
+ - `git diff --check`
1259
+ - `npm run release:check`
1260
+
1261
+ ## Phase 703 — Website Improvement Bundle Handoff Runbook Stage Command Safety Cleanup (unreleased)
1262
+
1263
+ Website Improvement bundle handoff operator stages now read first-command run policy and safety metadata through named local values before assembling each stage record.
1264
+
1265
+ ### Changed
1266
+ - Added local `firstCommand`, `firstCommandSafety`, and `commandHasSafetyFlag` values inside `buildStage`.
1267
+ - Replaced repeated `stageCommands[0]?.*` lookups with the named first-command values.
1268
+ - Replaced repeated stage-command safety flag predicates with `commandHasSafetyFlag`.
1269
+
1270
+ ### Impact
1271
+ - `buildBundleHandoffOperatorRunbook` keeps the same stage run policy, safety level, local-output, external-call, and target-repo mutation metadata.
1272
+ - Website Improvement handoff wrappers can continue to consume the same stage and command fields without migration.
1273
+ - No CLI flags, bundle files, command manifest fields, target-repo mutation rules, external-call boundaries, evidence fields, action counts, or human runbook lines change.
1274
+
1275
+ ### Verification Plan
1276
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1277
+ - `node --test cli/lib/site.test.mjs`
1278
+ - `npm test`
1279
+ - `npm run audit:strict`
1280
+ - `npm run release:metadata`
1281
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1282
+ - `git diff --check`
1283
+ - `npm run release:check`
1284
+
1285
+ ## Phase 702 — Website Improvement Bundle Handoff Command Manifest Fallback Cleanup (unreleased)
1286
+
1287
+ Website Improvement bundle handoff command manifest entries now read source-bundle and task command metadata through small local fallback helpers before assembling each command record.
1288
+
1289
+ ### Changed
1290
+ - Added a local `sourceValue` helper inside `buildBundleHandoffCommandManifest` for source-bundle command, args, run-policy, and safety metadata.
1291
+ - Read source-bundle safety once per source command so `strict` comes from the same object that is returned in the command manifest.
1292
+ - Added a local `taskValue` helper inside `pushTaskCommand` and read task safety once before deriving strict task command metadata and output file fallback.
1293
+
1294
+ ### Impact
1295
+ - `buildBundleHandoffCommandManifest` keeps the same command keys, task ids, output file fallback, strict flags, safety metadata, and manifest JSON contract.
1296
+ - Website Improvement handoff wrappers can continue to consume the same command manifest fields without migration.
1297
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, operator runbook fields, evidence fields, action counts, or human runbook lines change.
1298
+
1299
+ ### Verification Plan
1300
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1301
+ - `node --test cli/lib/site.test.mjs`
1302
+ - `npm test`
1303
+ - `npm run audit:strict`
1304
+ - `npm run release:metadata`
1305
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1306
+ - `git diff --check`
1307
+ - `npm run release:check`
1308
+
1309
+ ## Phase 701 — Website Improvement Bundle Handoff Runbook Next Stage Return Cleanup (unreleased)
1310
+
1311
+ Website Improvement target-repo handoff runbook next-stage and next-command return metadata now use the same local fallback style as the next-action fields.
1312
+
1313
+ ### Changed
1314
+ - Added local `nextStageList`, `nextStageFlag`, `nextCommandValue`, and `nextCommandList` helpers inside `buildBundleHandoffOperatorRunbook`.
1315
+ - Precomputed the next-stage human line, display row, command count, and command safety before assembling the returned runbook payload.
1316
+ - Replaced the remaining repeated `nextStage?.*` and `nextCommandEntry?.*` fallback expressions in the return object with named values or helper calls.
1317
+
1318
+ ### Impact
1319
+ - `buildBundleHandoffOperatorRunbook` keeps the same next-stage labels, command metadata, safety metadata, human-line summary, and JSON contract.
1320
+ - Target-repo handoff wrappers can continue to consume the same next-stage and next-command fields without migration.
1321
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, lookup maps, evidence fields, action counts, or human runbook lines change.
1322
+
1323
+ ### Verification Plan
1324
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1325
+ - `node --test cli/lib/site.test.mjs`
1326
+ - `npm test`
1327
+ - `npm run audit:strict`
1328
+ - `npm run release:metadata`
1329
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1330
+ - `git diff --check`
1331
+ - `npm run release:check`
1332
+
1333
+ ## Phase 700 — Website Improvement Bundle Handoff Runbook Next Action Fallback Cleanup (unreleased)
1334
+
1335
+ Website Improvement target-repo handoff runbook next-action metadata now uses small local fallback helpers instead of repeating the same optional-chaining defaults in `actionSummary` and the returned runbook payload.
1336
+
1337
+ ### Changed
1338
+ - Added local `nextActionValue`, `nextActionList`, `nextActionObject`, `nextActionCount`, `nextActionFlag`, `nextStageValue`, and `nextStageCommandList` helpers inside `buildBundleHandoffOperatorRunbook`.
1339
+ - Replaced repeated `nextAction*` and `nextStageAction*` fallback expressions with helper calls while keeping every exported field name unchanged.
1340
+ - Read the nested next-stage evidence progress summary once before writing the human-line summary fields.
1341
+
1342
+ ### Impact
1343
+ - `buildBundleHandoffOperatorRunbook` keeps the same next-action, next-stage action, evidence progress, command metadata, and JSON contract.
1344
+ - Target-repo handoff wrappers can continue to consume the same next-action and next-stage fields without migration.
1345
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, lookup maps, evidence fields, action counts, or human runbook lines change.
1346
+
1347
+ ### Verification Plan
1348
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1349
+ - `node --test cli/lib/site.test.mjs`
1350
+ - `npm test`
1351
+ - `npm run audit:strict`
1352
+ - `npm run release:metadata`
1353
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1354
+ - `git diff --check`
1355
+
1356
+ ## Phase 699 — Website Improvement Bundle Handoff Runbook Stage Command Lookup Cleanup (unreleased)
1357
+
1358
+ Website Improvement target-repo handoff runbook stage command lookup maps now use named helpers instead of repeating command-list mapping expressions inline.
1359
+
1360
+ ### Changed
1361
+ - Added local `commandListByKey` and `stageKeysBy` helpers inside `buildBundleHandoffOperatorRunbook`.
1362
+ - Replaced repeated stage command label, command string, command args, run policy, and safety-level lookup map construction with `commandListByKey`.
1363
+ - Replaced command/manual stage key list construction with `stageKeysBy` while keeping the exported arrays unchanged.
1364
+
1365
+ ### Impact
1366
+ - `buildBundleHandoffOperatorRunbook` keeps the same command lookup maps, stage key arrays, action summaries, and JSON contract.
1367
+ - Target-repo handoff wrappers can continue to consume the same stage command metadata without migration.
1368
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, evidence fields, action counts, or human runbook lines change.
1369
+
1370
+ ### Verification Plan
1371
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1372
+ - `node --test cli/lib/site.test.mjs`
1373
+ - `npm test`
1374
+ - `npm run audit:strict`
1375
+ - `npm run release:metadata`
1376
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1377
+ - `git diff --check`
1378
+
1379
+ ## Phase 698 — Website Improvement Bundle Handoff Runbook Human Line Summary Cleanup (unreleased)
1380
+
1381
+ Website Improvement target-repo handoff runbook human-line display summaries and first-action key fields now use small named helpers instead of repeating row and action scans inline.
1382
+
1383
+ ### Changed
1384
+ - Added local display-row count, key-list, first-key, and action first-key helpers inside `buildBundleHandoffOperatorRunbook`.
1385
+ - Replaced repeated human-line display row status counts, evidence-progress counts, and first-row lookups with named helper calls.
1386
+ - Replaced repeated first action key lookups in `actionSummary` with the shared `firstActionKey` helper while keeping every exported field name unchanged.
1387
+
1388
+ ### Impact
1389
+ - `buildBundleHandoffOperatorRunbook` keeps the same human-line summary, display-row summary, first-action key fields, and JSON contract.
1390
+ - Target-repo handoff wrappers can continue to consume the same stage human-line, evidence-progress, and first-action metadata without migration.
1391
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, lookup maps, evidence fields, action counts, or human runbook lines change.
1392
+
1393
+ ### Verification Plan
1394
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1395
+ - `node --test cli/lib/site.test.mjs`
1396
+ - `npm test`
1397
+ - `npm run audit:strict`
1398
+ - `npm run release:metadata`
1399
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1400
+ - `git diff --check`
1401
+
1402
+ ## Phase 697 — Website Improvement Bundle Handoff Runbook Action Summary Count Cleanup (unreleased)
1403
+
1404
+ Website Improvement target-repo handoff runbook action summary count and aggregate calculations now use named local helpers instead of repeating filter, reduce, max, and evidence-capture traversal expressions.
1405
+
1406
+ ### Changed
1407
+ - Added local `countActions`, `sumActions`, `maxActionValue`, and evidence-capture aggregate helpers inside `buildBundleHandoffOperatorRunbook`.
1408
+ - Replaced repeated action summary count, sum, max, payload binding, validation spec, validation state, display metadata, and checklist aggregate expressions with named helper calls.
1409
+ - Kept the action summary object keys and computed values unchanged.
1410
+
1411
+ ### Impact
1412
+ - `buildBundleHandoffOperatorRunbook` keeps the same `actionSummary` JSON contract while the summary section reads as a set of named aggregate calculations.
1413
+ - Target-repo handoff wrappers can continue to consume the same summary fields without migration.
1414
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, lookup maps, evidence fields, or human runbook lines change.
1415
+
1416
+ ### Verification Plan
1417
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1418
+ - `node --test cli/lib/site.test.mjs`
1419
+ - `npm test`
1420
+ - `npm run audit:strict`
1421
+ - `npm run release:metadata`
1422
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1423
+ - `git diff --check`
1424
+
1425
+ ## Phase 696 — Website Improvement Bundle Handoff Runbook Lookup Assembly Cleanup (unreleased)
1426
+
1427
+ Website Improvement target-repo handoff runbook lookup map assembly now uses a small shared helper instead of repeating the same `Object.fromEntries` pattern through the assembly body.
1428
+
1429
+ ### Changed
1430
+ - Added local `byKey`, `fieldByKey`, `stageFieldByKey`, and `actionFieldByKey` helpers inside `buildBundleHandoffOperatorRunbook`.
1431
+ - Replaced repeated stage/action lookup map construction with named helper calls while keeping every exported lookup object and key unchanged.
1432
+ - Kept nested command lookup maps explicit where they derive arrays from stage commands.
1433
+
1434
+ ### Impact
1435
+ - `buildBundleHandoffOperatorRunbook` keeps the same lookup maps, action rows, summaries, next-action fields, and JSON contract.
1436
+ - Target-repo handoff wrappers can continue to read the same `stage*ByKey` and `stageAction*ByKey` objects without migration.
1437
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, evidence fields, or human runbook lines change.
1438
+
1439
+ ### Verification Plan
1440
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs`
1441
+ - `node --test cli/lib/site.test.mjs`
1442
+ - `npm test`
1443
+ - `npm run audit:strict`
1444
+ - `npm run release:metadata`
1445
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1446
+ - `git diff --check`
1447
+
1448
+ ## Phase 695 — Website Improvement Bundle Handoff Runbook Stage Metadata Split (unreleased)
1449
+
1450
+ Website Improvement target-repo handoff runbook stage dependency and requirement metadata now lives outside the runbook assembly body.
1451
+
1452
+ ### Changed
1453
+ - Moved stage prerequisite, blocked-stage, dependency reason, completion criteria, and evidence requirement helpers into `cli/lib/site-bundle-handoff-runbook-stage-metadata.mjs`.
1454
+ - Kept `cli/lib/site-bundle-handoff-runbook.mjs` focused on building stages, action rows, lookup maps, summaries, and the final operator runbook payload.
1455
+ - Reworked action row assembly to compute prerequisite, blocking, completion, evidence requirement, and evidence capture values once per stage before writing the public row fields.
1456
+
1457
+ ### Impact
1458
+ - `buildBundleHandoffOperatorRunbook` keeps the same stage action dependency, completion criteria, evidence requirement, and evidence capture JSON contract.
1459
+ - Target-repo handoff wrappers can continue to read the same prerequisite keys, blocked-stage labels, dependency reason codes, completion criteria, evidence requirements, payload templates, and validation metadata.
1460
+ - No CLI flags, bundle files, target-repo mutation rules, external-call boundaries, or human runbook lines change.
1461
+
1462
+ ### Verification Plan
1463
+ - `node --check cli/lib/site-bundle-handoff-runbook-stage-metadata.mjs && node --check cli/lib/site-bundle-handoff-runbook.mjs`
1464
+ - `node --test cli/lib/site.test.mjs`
1465
+ - `npm test`
1466
+ - `npm run audit:strict`
1467
+ - `npm run release:metadata`
1468
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1469
+ - `git diff --check`
1470
+
1471
+ ## Phase 694 — Website Improvement Bundle Handoff Runbook Evidence Field Split (unreleased)
1472
+
1473
+ Website Improvement target-repo handoff runbook stage-specific evidence field definitions now live outside the runbook assembly body.
1474
+
1475
+ ### Changed
1476
+ - Moved stage-specific evidence capture field definitions and field enrichment into `cli/lib/site-bundle-handoff-runbook-evidence-fields.mjs`.
1477
+ - Kept `cli/lib/site-bundle-handoff-runbook.mjs` focused on assembling stage action rows, summaries, lookup maps, and the final operator runbook payload.
1478
+ - Reused the existing action metadata and generic evidence helper modules so evidence targets, field shapes, payload paths, sections, and validation metadata stay consistent.
1479
+
1480
+ ### Impact
1481
+ - `buildBundleHandoffOperatorRunbook` keeps the same evidence capture fields and JSON contract while the runbook assembly reads as a shorter flow.
1482
+ - Target-repo handoff wrappers can continue to consume the same field keys, placeholders, examples, validation hints, payload paths, and section metadata.
1483
+ - No CLI flags, bundle files, target-repo mutation rules, or external-call boundaries change.
1484
+
1485
+ ### Verification Plan
1486
+ - `node --check cli/lib/site-bundle-handoff-runbook-evidence-fields.mjs && node --check cli/lib/site-bundle-handoff-runbook.mjs`
1487
+ - `node --test cli/lib/site.test.mjs`
1488
+ - `npm test`
1489
+ - `npm run audit:strict`
1490
+ - `npm run release:metadata`
1491
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1492
+ - `git diff --check`
1493
+
1494
+ ## Phase 693 — Website Improvement Bundle Handoff Runbook Evidence Helper Split (unreleased)
1495
+
1496
+ Website Improvement target-repo handoff runbook evidence capture helper logic now lives outside the runbook assembly body.
1497
+
1498
+ ### Changed
1499
+ - Moved evidence capture field shape, section, payload binding, validation spec, and initial checklist/summary helpers into `cli/lib/site-bundle-handoff-runbook-evidence.mjs`.
1500
+ - Kept stage-specific evidence field selection in `cli/lib/site-bundle-handoff-runbook.mjs`, where it still has access to the current runbook stage context.
1501
+ - Preserved existing evidence capture payload paths, validation labels, section keys, checklist summaries, and next-action metadata.
1502
+
1503
+ ### Impact
1504
+ - `buildBundleHandoffOperatorRunbook` keeps the same evidence capture JSON contract while the generic evidence helper code has a focused module boundary.
1505
+ - Target-repo handoff wrappers can continue to consume the same payload template, flat template, validation specs, checklist rows, and summary fields.
1506
+ - No CLI flags, bundle files, target-repo mutation rules, or external-call boundaries change.
1507
+
1508
+ ### Verification Plan
1509
+ - `node --check cli/lib/site-bundle-handoff-runbook-evidence.mjs && node --check cli/lib/site-bundle-handoff-runbook.mjs`
1510
+ - `node --test cli/lib/site.test.mjs`
1511
+ - `npm test`
1512
+ - `npm run audit:strict`
1513
+ - `npm run release:metadata`
1514
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1515
+ - `git diff --check`
1516
+
1517
+ ## Phase 692 — Website Improvement Bundle Handoff Runbook Action Metadata Split (unreleased)
1518
+
1519
+ Website Improvement target-repo handoff runbook action metadata now lives outside the runbook assembly body.
1520
+
1521
+ ### Changed
1522
+ - Moved stage action type, labels, instructions, button labels, affordances, status metadata, disabled reasons, and evidence target labels into `cli/lib/site-bundle-handoff-runbook-actions.mjs`.
1523
+ - Kept `cli/lib/site-bundle-handoff-runbook.mjs` focused on command manifest input, stage assembly, evidence capture rows, and the final runbook payload.
1524
+ - Preserved the existing runbook JSON keys and human output by importing the same helper behavior from the new action metadata module.
1525
+
1526
+ ### Impact
1527
+ - `buildBundleHandoffOperatorRunbook` keeps its current public contract while the stage action wording and UI-oriented metadata have a focused module boundary.
1528
+ - Target-repo handoff wrappers can still consume the same action fields, status labels, evidence targets, and disabled reason codes.
1529
+ - No bundle files, CLI flags, target-repo mutation rules, or external-call boundaries change.
1530
+
1531
+ ### Verification Plan
1532
+ - `node --check cli/lib/site-bundle-handoff-runbook-actions.mjs && node --check cli/lib/site-bundle-handoff-runbook.mjs`
1533
+ - `node --test cli/lib/site.test.mjs`
1534
+ - `npm test`
1535
+ - `npm run audit:strict`
1536
+ - `npm run release:metadata`
1537
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1538
+ - `git diff --check`
1539
+
1540
+ ## Phase 691 — Website Improvement Bundle Handoff Runbook Formatter Split (unreleased)
1541
+
1542
+ Website Improvement target-repo handoff runbook line formatting now lives outside the runbook assembly module.
1543
+
1544
+ ### Changed
1545
+ - Moved operator runbook human line formatting into `cli/lib/site-bundle-handoff-runbook-format.mjs`.
1546
+ - Kept `cli/lib/site-bundle-handoff-runbook.mjs` responsible for command manifest and operator runbook assembly.
1547
+ - Re-exported the existing public formatter from the runbook module so current imports keep working.
1548
+
1549
+ ### Impact
1550
+ - `buildBundleHandoffOperatorRunbook` keeps the same JSON contract and stage metadata.
1551
+ - Human runbook lines remain available through the same public helper while formatting logic has a smaller module boundary.
1552
+ - Target-repo handoff command manifest, runbook stages, evidence capture metadata, and existing CLI output contracts are unchanged.
1553
+
1554
+ ### Verification Plan
1555
+ - `node --check cli/lib/site-bundle-handoff-runbook-format.mjs && node --check cli/lib/site-bundle-handoff-runbook.mjs`
1556
+ - `node --test cli/lib/site.test.mjs`
1557
+ - `npm test`
1558
+ - `npm run audit:strict`
1559
+ - `npm run release:metadata`
1560
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1561
+ - `git diff --check`
1562
+
1563
+ ## Phase 690 — Website Improvement Bundle Repair Report Split (unreleased)
1564
+
1565
+ Website Improvement bundle repair report orchestration now lives outside the public site helper surface.
1566
+
1567
+ ### Changed
1568
+ - Moved bundle repair preview, repair bundle creation, applied repair report assembly, and JSON/human repair formatters into `cli/lib/site-bundle-repair-report.mjs`.
1569
+ - Kept `cli/lib/site.mjs` as a public compatibility surface by re-exporting repair report helpers.
1570
+ - Avoided a circular dependency with `cli/lib/site-bundle-check.mjs` by keeping repair guidance helpers in `cli/lib/site-bundle-repair.mjs` and repair orchestration in a separate module.
1571
+
1572
+ ### Impact
1573
+ - `cli/lib/site.mjs` now acts as a compact Website Improvement public export surface instead of owning bundle workflow bodies.
1574
+ - `design-ai site <bundle-dir> --bundle-repair` continues to expose the same preview/apply report contracts.
1575
+ - Bundle check, repair guidance, and repair report orchestration remain separated by dependency direction.
1576
+
1577
+ ### Verification Plan
1578
+ - `node --check cli/lib/site-bundle-repair-report.mjs && node --check cli/lib/site.mjs`
1579
+ - `node --test cli/lib/site.test.mjs`
1580
+ - `npm test`
1581
+ - `npm run audit:strict`
1582
+ - `npm run release:metadata`
1583
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1584
+ - `git diff --check`
1585
+
1586
+ ## Phase 689 — Website Improvement Bundle Handoff Report Split (unreleased)
1587
+
1588
+ Website Improvement target-repo handoff report construction now lives outside the main site workflow module.
1589
+
1590
+ ### Changed
1591
+ - Moved target-repo handoff workspace loading, prompt assembly, task selection handling, command manifest/runbook wiring, and JSON/human formatters into `cli/lib/site-bundle-handoff.mjs`.
1592
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting bundle handoff helpers.
1593
+ - Removed local imports from `cli/lib/site.mjs` that were only needed by handoff report construction.
1594
+
1595
+ ### Impact
1596
+ - `cli/lib/site.mjs` no longer owns the target-repo handoff report body.
1597
+ - `design-ai site <bundle-dir> --bundle-handoff` continues to expose the same prompt and JSON report contracts.
1598
+ - Handoff report assembly now sits beside the handoff summary and operator runbook helpers instead of remaining in the workflow orchestration module.
1599
+
1600
+ ### Verification Plan
1601
+ - `node --check cli/lib/site-bundle-handoff.mjs && node --check cli/lib/site.mjs`
1602
+ - `node --test cli/lib/site.test.mjs`
1603
+ - `npm test`
1604
+ - `npm run audit:strict`
1605
+ - `npm run release:metadata`
1606
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1607
+ - `git diff --check`
1608
+
1609
+ ## Phase 688 — Website Improvement Bundle Compare Report Split (unreleased)
1610
+
1611
+ Website Improvement handoff bundle comparison report construction now lives with the compare helpers.
1612
+
1613
+ ### Changed
1614
+ - Moved `buildSiteBundleCompareReport` into `cli/lib/site-bundle-compare.mjs`.
1615
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting the compare report builder.
1616
+ - Preserved compare issue ids, digest comparison, metadata diffing, changed file reporting, and JSON/human formatter contracts.
1617
+
1618
+ ### Impact
1619
+ - `cli/lib/site.mjs` no longer owns bundle comparison report assembly.
1620
+ - `design-ai site <bundle-dir> --bundle-compare other-bundle-dir` continues to use the same report shape and formatter outputs.
1621
+ - Bundle comparison logic is grouped with its checksum/metadata diff helpers instead of remaining in the workflow orchestration module.
1622
+
1623
+ ### Verification Plan
1624
+ - `node --check cli/lib/site-bundle-compare.mjs && node --check cli/lib/site.mjs`
1625
+ - `node --test cli/lib/site.test.mjs`
1626
+ - `npm test`
1627
+ - `npm run audit:strict`
1628
+ - `npm run release:metadata`
1629
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1630
+ - `git diff --check`
1631
+
1632
+ ## Phase 687 — Website Improvement Bundle Check Module Split (unreleased)
1633
+
1634
+ Website Improvement handoff bundle validation now lives outside the main site workflow module.
1635
+
1636
+ ### Changed
1637
+ - Moved bundle directory validation, summary/checksum verification, MCP recomputation checks, generated contract checks, and bundle check formatting into `cli/lib/site-bundle-check.mjs`.
1638
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting bundle check helpers.
1639
+ - Removed local imports that were only needed by the moved bundle check implementation.
1640
+
1641
+ ### Impact
1642
+ - `cli/lib/site.mjs` no longer owns the large bundle check validation body.
1643
+ - Bundle repair, bundle compare, and target-repo handoff flows continue to consume the same `buildSiteBundleCheckReport` shape.
1644
+ - Bundle validation now sits with the bundle-specific helper modules instead of being embedded in the remaining workflow orchestration file.
1645
+
1646
+ ### Verification Plan
1647
+ - `node --check cli/lib/site-bundle-check.mjs && node --check cli/lib/site.mjs`
1648
+ - `node --test cli/lib/site.test.mjs`
1649
+ - `npm test`
1650
+ - `npm run audit:strict`
1651
+ - `npm run release:metadata`
1652
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1653
+ - `git diff --check`
1654
+
1655
+ ## Phase 686 — Website Improvement Generated Contract Helper Split (unreleased)
1656
+
1657
+ Website Improvement generated bundle contract helpers now live outside the main site workflow module.
1658
+
1659
+ ### Changed
1660
+ - Moved generated contract construction, drift issue creation, and drift summary formatting into `cli/lib/site-bundle-contract.mjs`.
1661
+ - Kept `cli/lib/site.mjs` focused on bundle check and handoff orchestration by importing the generated contract helpers.
1662
+ - Preserved generated bundle contract comparison behavior, digest formatting, repair guidance inputs, and bundle check report shape.
1663
+
1664
+ ### Impact
1665
+ - `cli/lib/site.mjs` no longer owns the generated bundle contract helper bodies.
1666
+ - Bundle check, bundle repair, bundle compare, and target-repo handoff flows continue to receive the same `generatedContract` data.
1667
+ - Generated contract logic now sits beside bundle file/checksum helpers instead of being embedded in the main workflow module.
1668
+
1669
+ ### Verification Plan
1670
+ - `node --check cli/lib/site-bundle-contract.mjs && node --check cli/lib/site.mjs`
1671
+ - `node --test cli/lib/site.test.mjs`
1672
+ - `npm test`
1673
+ - `npm run audit:strict`
1674
+ - `npm run release:metadata`
1675
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1676
+ - `git diff --check`
1677
+
1678
+ ## Phase 685 — Website Improvement Handoff Bundle Builder Split (unreleased)
1679
+
1680
+ Website Improvement handoff bundle assembly now lives outside the main site workflow module.
1681
+
1682
+ ### Changed
1683
+ - Moved `buildSiteHandoffBundle` into `cli/lib/site-bundle-build.mjs`.
1684
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting the bundle builder.
1685
+ - Preserved bundle summary, file ordering, checksums, README generation, MCP artifacts, and prompt artifacts without changing output contracts.
1686
+
1687
+ ### Impact
1688
+ - `cli/lib/site.mjs` no longer owns the handoff bundle file assembly body.
1689
+ - Existing imports from `cli/lib/site.mjs`, `design-ai site --bundle`, bundle repair, generated-contract comparison, and bundle handoff flows remain behavior-compatible.
1690
+ - Bundle construction is now grouped with its deterministic artifact dependencies while bundle check/repair orchestration remains in the main workflow module.
1691
+
1692
+ ### Verification Plan
1693
+ - `node --check cli/lib/site-bundle-build.mjs && node --check cli/lib/site.mjs`
1694
+ - `node --test cli/lib/site.test.mjs`
1695
+ - `npm test`
1696
+ - `npm run audit:strict`
1697
+ - `npm run release:metadata`
1698
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1699
+ - `git diff --check`
1700
+
1701
+ ## Phase 684 — Website Improvement Task and Workflow Graph Helper Split (unreleased)
1702
+
1703
+ Website Improvement generated task planning and portable workflow graph rendering now live outside the main site workflow module.
1704
+
1705
+ ### Changed
1706
+ - Moved deterministic refactor task generation into `cli/lib/site-tasks.mjs`.
1707
+ - Moved workflow graph node/edge construction plus JSON/Markdown graph formatters into `cli/lib/site-workflow-graph.mjs`.
1708
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting task and graph helpers.
1709
+
1710
+ ### Impact
1711
+ - `cli/lib/site.mjs` no longer owns generated task prompt bodies or graph rendering bodies.
1712
+ - Existing imports from `cli/lib/site.mjs`, `design-ai site --tasks`, and `design-ai site --graph` remain behavior-compatible.
1713
+ - Task planning can now be reused by graph and bundle orchestration without forcing those deterministic helpers to stay in the main workflow module.
1714
+
1715
+ ### Verification Plan
1716
+ - `node --check cli/lib/site-tasks.mjs && node --check cli/lib/site-workflow-graph.mjs && node --check cli/lib/site.mjs`
1717
+ - `node --test cli/lib/site.test.mjs`
1718
+ - `npm test`
1719
+ - `npm run audit:strict`
1720
+ - `npm run release:metadata`
1721
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1722
+ - `git diff --check`
1723
+
1724
+ ## Phase 683 — Website Improvement Analysis Helper Split (unreleased)
1725
+
1726
+ Website Improvement workspace validation, summary generation, JSON loading, and report formatting now live outside the main site workflow module.
1727
+
1728
+ ### Changed
1729
+ - Moved raw workspace validation, issue status reduction, summary counts, `analyzeSiteWorkspace`, `loadSiteWorkspaceInput`, `buildSiteReport`, and `formatSiteJson` into `cli/lib/site-analysis.mjs`.
1730
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting the existing analysis/report helper API.
1731
+ - Imported `addIssue`, `statusFromIssues`, `analyzeSiteWorkspace`, and `loadSiteWorkspaceInput` back into `cli/lib/site.mjs` for bundle repair/check/handoff orchestration.
1732
+
1733
+ ### Impact
1734
+ - `cli/lib/site.mjs` no longer owns schema validation, report input loading, or workspace summary construction bodies.
1735
+ - Existing imports from `cli/lib/site.mjs`, report JSON output, strict workspace validation, and bundle consistency checks remain behavior-compatible.
1736
+ - Analysis rules now sit beside workspace normalization while bundle orchestration remains in the main site workflow module.
1737
+
1738
+ ### Verification Plan
1739
+ - `node --check cli/lib/site-analysis.mjs && node --check cli/lib/site.mjs`
1740
+ - `node --test cli/lib/site.test.mjs`
1741
+ - `npm test`
1742
+ - `npm run audit:strict`
1743
+ - `npm run release:metadata`
1744
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1745
+ - `git diff --check`
1746
+
1747
+ ## Phase 682 — Website Improvement Workspace Builder Split (unreleased)
1748
+
1749
+ Website Improvement workspace initialization, intake parsing, and normalization now live outside the main site workflow module.
1750
+
1751
+ ### Changed
1752
+ - Moved real-project `--init` workspace construction, filled intake Markdown parsing, and workspace normalization into `cli/lib/site-workspace.mjs`.
1753
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting workspace builder helpers.
1754
+ - Imported only `normalizeSiteWorkspace` and `normalizeObject` back into `cli/lib/site.mjs` for report validation and bundle summary orchestration.
1755
+
1756
+ ### Impact
1757
+ - `cli/lib/site.mjs` no longer owns workspace creation, intake table parsing, or schema normalization bodies.
1758
+ - Existing imports from `cli/lib/site.mjs`, `design-ai site --init`, and `design-ai site --from-intake` remain behavior-compatible.
1759
+ - Workspace construction is grouped with its defaults and normalization rules, leaving the main site module focused on analysis, reports, graphs, and bundle orchestration.
1760
+
1761
+ ### Verification Plan
1762
+ - `node --check cli/lib/site-workspace.mjs && node --check cli/lib/site.mjs`
1763
+ - `node --test cli/lib/site.test.mjs`
1764
+ - `npm test`
1765
+ - `npm run audit:strict`
1766
+ - `npm run release:metadata`
1767
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1768
+ - `git diff --check`
1769
+
1770
+ ## Phase 681 — Website Improvement Starter Artifact Helper Split (unreleased)
1771
+
1772
+ Website Improvement intake template and sample workspace builders now live outside the main site workflow module.
1773
+
1774
+ ### Changed
1775
+ - Moved intake template Markdown/JSON rendering and sample workspace construction into `cli/lib/site-starter.mjs`.
1776
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting the starter helper API.
1777
+ - Preserved the sample workspace as the normalization fallback by importing it from the starter module.
1778
+
1779
+ ### Impact
1780
+ - `cli/lib/site.mjs` no longer owns starter artifact bodies for `--intake-template` and `--sample`.
1781
+ - Intake template output, sample workspace output, CLI import paths, and normalization fallback behavior remain behavior-compatible.
1782
+ - Starter artifacts now live with their static content dependencies instead of mixing with workspace analysis and bundle orchestration.
1783
+
1784
+ ### Verification Plan
1785
+ - `node --check cli/lib/site-starter.mjs && node --check cli/lib/site.mjs`
1786
+ - `node --test cli/lib/site.test.mjs`
1787
+ - `npm test`
1788
+ - `npm run audit:strict`
1789
+ - `npm run release:metadata`
1790
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1791
+ - `git diff --check`
1792
+
1793
+ ## Phase 680 — Website Improvement Bundle README Helper Split (unreleased)
1794
+
1795
+ Website Improvement bundle README and strict handoff guidance builders now live outside the main site workflow module.
1796
+
1797
+ ### Changed
1798
+ - Moved bundle handoff guidance construction and bundle README Markdown assembly into `cli/lib/site-bundle-readme.mjs`.
1799
+ - Kept bundle generation orchestration, checksum creation, and artifact ordering in `cli/lib/site.mjs`.
1800
+ - Reused the existing target-repo execution checklist contract from `cli/lib/site-bundle-handoff-summary.mjs`.
1801
+
1802
+ ### Impact
1803
+ - `cli/lib/site.mjs` no longer owns bundle README copy or strict/draft handoff command guidance.
1804
+ - Bundle contents, README text, handoff readiness metadata, and existing bundle check behavior remain behavior-compatible.
1805
+ - The remaining bundle generation flow is easier to scan because artifact orchestration is separated from README prose assembly.
1806
+
1807
+ ### Verification Plan
1808
+ - `node --check cli/lib/site-bundle-readme.mjs && node --check cli/lib/site.mjs`
1809
+ - `node --test cli/lib/site.test.mjs`
1810
+ - `npm test`
1811
+ - `npm run audit:strict`
1812
+ - `npm run release:metadata`
1813
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1814
+ - `git diff --check`
1815
+
1816
+ ## Phase 679 — Website Improvement CLI Argument Parser Split (unreleased)
1817
+
1818
+ Website Improvement CLI argument parsing now lives outside the main site workflow module.
1819
+
1820
+ ### Changed
1821
+ - Moved `SITE_OPTIONS`, option value parsing, and `parseSiteArgs` into `cli/lib/site-args.mjs`.
1822
+ - Exported shared Website Improvement option enums from `cli/lib/site-options.mjs` so parsing, intake, normalization, and validation use the same catalogs.
1823
+ - Kept `cli/lib/site.mjs` as the public compatibility surface by re-exporting the parser API.
1824
+
1825
+ ### Impact
1826
+ - `cli/lib/site.mjs` no longer owns command-line parsing rules.
1827
+ - `design-ai site` argument behavior, error messages, and existing imports from `cli/lib/site.mjs` remain behavior-compatible.
1828
+ - The remaining site workflow module is easier to scan because CLI parsing is separated from workspace construction and report generation.
1829
+
1830
+ ### Verification Plan
1831
+ - `node --check cli/lib/site-args.mjs && node --check cli/lib/site-options.mjs && node --check cli/lib/site.mjs`
1832
+ - `node --test cli/lib/site.test.mjs`
1833
+ - `npm test`
1834
+ - `npm run audit:strict`
1835
+ - `npm run release:metadata`
1836
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1837
+ - `git diff --check`
1838
+
1839
+ ## Phase 678 — Website Improvement Prompt Helper Consolidation (unreleased)
1840
+
1841
+ Website Improvement prompt template formatters and bundle implementation prompt fallback now live with the prompt builders.
1842
+
1843
+ ### Changed
1844
+ - Moved prompt template JSON/human formatters and bundle implementation prompt fallback rendering into `cli/lib/site-prompts.mjs`.
1845
+ - Kept `cli/lib/site.mjs` as the public re-export surface and bundle orchestration caller for existing imports.
1846
+ - Reused the existing prompt builder helpers for the no-task bundle fallback instead of keeping prompt body composition in the site workflow module.
1847
+
1848
+ ### Impact
1849
+ - `cli/lib/site.mjs` no longer owns prompt-template display or bundle implementation prompt body construction.
1850
+ - Prompt list CLI output, prompt bundle generation, and handoff bundle `codex-implementation.md` content remain behavior-compatible.
1851
+ - Prompt-related rendering is grouped with the rest of the prompt/handoff report code, making the remaining site workflow module easier to scan.
1852
+
1853
+ ### Verification Plan
1854
+ - `node --check cli/lib/site-prompts.mjs && node --check cli/lib/site.mjs`
1855
+ - `node --test cli/lib/site.test.mjs`
1856
+ - `npm test`
1857
+ - `npm run audit:strict`
1858
+ - `npm run release:metadata`
1859
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1860
+ - `git diff --check`
1861
+
1862
+ ## Phase 677 — Website Improvement Bundle Handoff Summary Helper Split (unreleased)
1863
+
1864
+ Website Improvement bundle handoff task catalog and source summary helpers now live outside the main site workflow module.
1865
+
1866
+ ### Changed
1867
+ - Moved target-repo execution checklist, bundle task catalog summaries, selected-task summary, handoff issue/task catalog line formatting, handoff boundaries, and source bundle command summary into `cli/lib/site-bundle-handoff-summary.mjs`.
1868
+ - Kept bundle workspace loading, task selection orchestration, handoff prompt construction, and final handoff report assembly in `cli/lib/site.mjs`.
1869
+ - Reused the extracted summary helpers in bundle readme/check validation and target-repo handoff output paths without changing the JSON or Markdown contracts.
1870
+
1871
+ ### Impact
1872
+ - `cli/lib/site.mjs` no longer owns task catalog shaping or source bundle command summary construction.
1873
+ - Bundle check validation, handoff prompt checklist text, selected-task command metadata, and command manifest inputs remain behavior-compatible.
1874
+ - This makes the remaining handoff flow easier to scan because catalog/source summary data is separated from report orchestration.
1875
+
1876
+ ### Verification Plan
1877
+ - `node --check cli/lib/site-bundle-handoff-summary.mjs && node --check cli/lib/site.mjs`
1878
+ - `node --test cli/lib/site.test.mjs`
1879
+ - `npm test`
1880
+ - `npm run audit:strict`
1881
+ - `npm run release:metadata`
1882
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1883
+ - `git diff --check`
1884
+
1885
+ ## Phase 676 — Website Improvement Bundle Handoff Runbook Helper Split (unreleased)
1886
+
1887
+ Website Improvement bundle handoff command manifest and operator runbook helpers now live outside the main site workflow module.
1888
+
1889
+ ### Changed
1890
+ - Moved bundle handoff command manifest construction, operator runbook assembly, and runbook Markdown line formatting into `cli/lib/site-bundle-handoff-runbook.mjs`.
1891
+ - Kept bundle validation, task selection, prompt construction, and final handoff report assembly in `cli/lib/site.mjs`.
1892
+ - Reused the extracted runbook helpers from the existing bundle handoff report path without changing JSON or human-readable output contracts.
1893
+
1894
+ ### Impact
1895
+ - `cli/lib/site.mjs` no longer owns the large deterministic operator runbook payload builder.
1896
+ - Bundle handoff JSON snapshots, task command manifests, evidence capture metadata, and target-repo prompt output remain behavior-compatible.
1897
+ - This leaves the remaining handoff flow easier to read because report orchestration is separated from runbook payload construction.
1898
+
1899
+ ### Verification Plan
1900
+ - `node --check cli/lib/site-bundle-handoff-runbook.mjs && node --check cli/lib/site.mjs`
1901
+ - `node --test cli/lib/site.test.mjs`
1902
+ - `npm test`
1903
+ - `npm run audit:strict`
1904
+ - `npm run release:metadata`
1905
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1906
+ - `git diff --check`
1907
+
1908
+ ## Phase 675 — Website Improvement Bundle Compare Helper Split (unreleased)
1909
+
1910
+ Website Improvement bundle compare summary, diff, and formatter helpers now live outside the main site workflow module.
1911
+
1912
+ ### Changed
1913
+ - Moved bundle compare summaries, metadata/file diff builders, and JSON/Markdown compare formatters into `cli/lib/site-bundle-compare.mjs`.
1914
+ - Kept bundle check orchestration and compare report assembly in `cli/lib/site.mjs` because compare report creation still depends on strict bundle validation.
1915
+ - Re-exported compare formatters from `cli/lib/site.mjs` so existing imports keep their public API.
1916
+
1917
+ ### Impact
1918
+ - `cli/lib/site.mjs` no longer owns deterministic compare formatting or checksum diff construction.
1919
+ - Bundle compare JSON and human-readable output keep the existing output contract.
1920
+ - This narrows the remaining bundle orchestration surface before larger check/handoff boundaries are split.
1921
+
1922
+ ### Verification Plan
1923
+ - `node --check cli/lib/site-bundle-compare.mjs && node --check cli/lib/site.mjs`
1924
+ - `node --test cli/lib/site.test.mjs`
1925
+ - `npm test`
1926
+ - `npm run audit:strict`
1927
+ - `npm run release:metadata`
1928
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1929
+ - `git diff --check`
1930
+
1931
+ ## Phase 674 — Website Improvement Bundle Repair Helper Split (unreleased)
1932
+
1933
+ Website Improvement bundle repair guidance helpers now live outside the main site workflow module.
1934
+
1935
+ ### Changed
1936
+ - Moved bundle repair command guidance, repair guidance Markdown lines, and before/after repair check summaries into `cli/lib/site-bundle-repair.mjs`.
1937
+ - Kept repair preview, repair bundle regeneration, applied repair verification, and bundle check orchestration in `cli/lib/site.mjs`.
1938
+ - Reused the extracted repair guidance in bundle check reports, repair reports, and target-repo handoff prompts.
1939
+
1940
+ ### Impact
1941
+ - `cli/lib/site.mjs` no longer owns repair command construction or repair check summary formatting.
1942
+ - Bundle repair preview/apply, strict bundle check, and handoff prompt repair sections keep their existing JSON/Markdown output contract.
1943
+ - This leaves repair execution in the orchestrator while moving deterministic repair guidance into a smaller module.
1944
+
1945
+ ### Verification Plan
1946
+ - `node --check cli/lib/site-bundle-repair.mjs && node --check cli/lib/site.mjs`
1947
+ - `node --test cli/lib/site.test.mjs`
1948
+ - `npm test`
1949
+ - `npm run audit:strict`
1950
+ - `npm run release:metadata`
1951
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1952
+ - `git diff --check`
1953
+
1954
+ ## Phase 673 — Website Improvement Bundle File Helper Split (unreleased)
1955
+
1956
+ Website Improvement bundle file, digest, and lightweight validation helpers now live outside the main site workflow module.
1957
+
1958
+ ### Changed
1959
+ - Moved SHA-256 digest creation, bundle checksum manifest hashing, bundle file reads, JSON parsing, Markdown fragment checks, short digest rendering, and array equality checks into `cli/lib/site-bundle-files.mjs`.
1960
+ - Kept bundle generation, generated-contract comparison, repair, check, compare, and target-repo handoff report assembly in `cli/lib/site.mjs`.
1961
+ - Reused the extracted helpers for bundle creation checksums, strict bundle verification, generated file drift reporting, and handoff prompt context reads.
1962
+
1963
+ ### Impact
1964
+ - `cli/lib/site.mjs` no longer owns low-level bundle file parsing or checksum mechanics.
1965
+ - Bundle check, repair, compare, handoff, and checksum validation keep the existing JSON/Markdown output contract.
1966
+ - This keeps the next bundle split safer because filesystem and digest helpers are now isolated from workspace analysis and report assembly.
1967
+
1968
+ ### Verification Plan
1969
+ - `node --check cli/lib/site-bundle-files.mjs && node --check cli/lib/site.mjs`
1970
+ - `node --test cli/lib/site.test.mjs`
1971
+ - `npm test`
1972
+ - `npm run audit:strict`
1973
+ - `npm run release:metadata`
1974
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1975
+ - `git diff --check`
1976
+
1977
+ ## Phase 672 — Website Improvement Bundle Command Helper Split (unreleased)
1978
+
1979
+ Website Improvement bundle handoff command and safety helpers now live outside the main site workflow module.
1980
+
1981
+ ### Changed
1982
+ - Moved bundle task handoff command args, check/handoff command args, shell quoting, output-file naming, and command safety policy helpers into `cli/lib/site-bundle-commands.mjs`.
1983
+ - Kept bundle check, repair, compare, and target-repo handoff report assembly in `cli/lib/site.mjs` so this split stays limited to deterministic command construction.
1984
+ - Reused the same helper outputs for task catalogs, operator runbooks, repair guidance, and source bundle verification prompts.
1985
+
1986
+ ### Impact
1987
+ - `cli/lib/site.mjs` no longer owns low-level bundle command string construction or local/read-only safety policy payloads.
1988
+ - Bundle repair guidance, strict bundle checks, task-specific handoff commands, and target-repo handoff prompts keep the existing command and JSON contract.
1989
+ - This prepares the remaining bundle check/repair/handoff logic for smaller future module boundaries without changing external behavior.
1990
+
1991
+ ### Verification Plan
1992
+ - `node --check cli/lib/site-bundle-commands.mjs && node --check cli/lib/site.mjs`
1993
+ - `node --test cli/lib/site.test.mjs`
1994
+ - `npm test`
1995
+ - `npm run audit:strict`
1996
+ - `npm run release:metadata`
1997
+ - `python3 -B tools/audit/local-ci.py --docs-only`
1998
+ - `git diff --check`
1999
+
2000
+ ## Phase 671 — Website Improvement Prompt Module Split (unreleased)
2001
+
2002
+ Website Improvement prompt and handoff report builders now live outside the main site workflow module.
2003
+
2004
+ ### Changed
2005
+ - Moved Codex/Claude prompt rendering, task selection, ordered refactor-task sorting, and Website Improvement handoff report Markdown into `cli/lib/site-prompts.mjs`.
2006
+ - Moved audit category catalog and category lookup into `cli/lib/site-options.mjs` so prompts, workflow graphs, task normalization, and reports share one source.
2007
+ - Moved default implementation risk normalization into `cli/lib/site-evidence.mjs` so handoff reports and workspace normalization share the same evidence defaults.
2008
+ - Re-exported prompt and handoff helpers from `cli/lib/site.mjs` so existing imports keep working.
2009
+
2010
+ ### Impact
2011
+ - `cli/lib/site.mjs` no longer owns Codex/Claude prompt body composition or final handoff report rendering.
2012
+ - Bundle creation, bundle handoff, workflow graph, and prompt CLI flows keep their existing output contracts and local-only safety boundaries.
2013
+ - This keeps the Website Improvement CLI moving toward smaller, readable modules without weakening verification, evidence, or MCP readiness tracking.
2014
+
2015
+ ### Verification Plan
2016
+ - `node --check cli/lib/site-options.mjs && node --check cli/lib/site-evidence.mjs && node --check cli/lib/site-prompts.mjs && node --check cli/lib/site.mjs`
2017
+ - `node --test cli/lib/site.test.mjs`
2018
+ - `npm test`
2019
+ - `npm run audit:strict`
2020
+ - `npm run release:metadata`
2021
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2022
+ - `git diff --check`
2023
+
2024
+ ## Phase 670 — Website Improvement Next Actions Module Split (unreleased)
2025
+
2026
+ Website Improvement next-action reports now live outside the main site workflow module.
2027
+
2028
+ ### Changed
2029
+ - Moved standard, init, and intake next-action report builders plus next-action JSON/human formatting into `cli/lib/site-next-actions.mjs`.
2030
+ - Moved implementation evidence key/count helpers into `cli/lib/site-evidence.mjs` so next-action reports, bundles, and bundle checks share the same evidence counting rules.
2031
+ - Re-exported next-action helpers from `cli/lib/site.mjs` so existing imports keep working.
2032
+
2033
+ ### Impact
2034
+ - `cli/lib/site.mjs` no longer owns operator next-action prioritization or setup command rendering.
2035
+ - Website Improvement init, intake, readiness, task generation, prompt, handoff, and bundle guidance keep their existing command and output contracts.
2036
+ - This continues the split toward smaller modules while preserving verification, handoff evidence, and local-only safety boundaries.
2037
+
2038
+ ### Verification Plan
2039
+ - `node --check cli/lib/site-evidence.mjs && node --check cli/lib/site-next-actions.mjs && node --check cli/lib/site.mjs`
2040
+ - `node --test cli/lib/site.test.mjs`
2041
+ - `npm test`
2042
+ - `npm run audit:strict`
2043
+ - `npm run release:metadata`
2044
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2045
+ - `git diff --check`
2046
+
2047
+ ## Phase 669 — Website Improvement MCP Report Module Split (unreleased)
2048
+
2049
+ Website Improvement MCP readiness reports and action plans now live outside the main site workflow module.
2050
+
2051
+ ### Changed
2052
+ - Moved MCP status combination, MCP key normalization, task/MCP gap detection, readiness check report formatting, and MCP action plan rendering into `cli/lib/site-mcp-report.mjs`.
2053
+ - Moved shared MCP item and priority option catalogs into `cli/lib/site-options.mjs` so `site.mjs` and MCP report helpers can share them without circular imports.
2054
+ - Re-exported the public MCP report/action-plan helpers from `cli/lib/site.mjs` so existing imports keep working.
2055
+
2056
+ ### Impact
2057
+ - `cli/lib/site.mjs` no longer owns MCP readiness report construction or action-plan Markdown rendering.
2058
+ - Website Improvement MCP check, probe-aware MCP check, MCP action plan, next-actions, workflow graph, bundle, and handoff flows keep the same output contract.
2059
+ - This leaves `site.mjs` closer to orchestration while MCP handoff logic is grouped in a dedicated module for Claude/Codex MCP use.
2060
+
2061
+ ### Verification Plan
2062
+ - `node --check cli/lib/site-options.mjs && node --check cli/lib/site-mcp-report.mjs && node --check cli/lib/site.mjs`
2063
+ - `node --test cli/lib/site.test.mjs`
2064
+ - `npm test`
2065
+ - `npm run audit:strict`
2066
+ - `npm run release:metadata`
2067
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2068
+ - `git diff --check`
2069
+
2070
+ ## Phase 668 — Website Improvement String Helper Split (unreleased)
2071
+
2072
+ Website Improvement string normalization and Markdown rendering helpers now live outside the main site workflow module.
2073
+
2074
+ ### Changed
2075
+ - Moved `normalizeStringArray`, `markdownTable`, and `markdownList` into `cli/lib/site-strings.mjs`.
2076
+ - Kept the existing Markdown output shape for MCP action plans, workflow graphs, bundle READMEs, handoff reports, and prompt bundles.
2077
+ - Left browser-console helpers in `docs/website-console/app.js` untouched because this change only affects the CLI module boundary.
2078
+
2079
+ ### Impact
2080
+ - `cli/lib/site.mjs` no longer owns low-level string cleanup and Markdown table/list rendering.
2081
+ - Future Website Improvement action-plan and bundle modules can share the same small formatting helpers without circular imports.
2082
+ - Existing CLI JSON/human/Markdown output contracts remain unchanged.
2083
+
2084
+ ### Verification Plan
2085
+ - `node --check cli/lib/site-strings.mjs && node --check cli/lib/site.mjs`
2086
+ - `node --test cli/lib/site.test.mjs`
2087
+ - `npm test`
2088
+ - `npm run audit:strict`
2089
+ - `npm run release:metadata`
2090
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2091
+ - `git diff --check`
2092
+
2093
+ ## Phase 667 — Website Improvement MCP Command Helper Split (unreleased)
2094
+
2095
+ Website Improvement MCP readiness command strings now live outside the main site workflow module.
2096
+
2097
+ ### Changed
2098
+ - Moved MCP probe command generation, next-action command generation, and stdin command-target normalization into `cli/lib/site-mcp-commands.mjs`.
2099
+ - Kept the existing command names and output paths unchanged for `--mcp-check`, `--mcp-plan`, `--tasks`, `--prompt`, `--report`, and `--bundle` flows.
2100
+ - Left report assembly in `cli/lib/site.mjs` so this split stays limited to deterministic command construction.
2101
+
2102
+ ### Impact
2103
+ - `cli/lib/site.mjs` no longer owns repeated MCP/readiness command string construction.
2104
+ - MCP readiness reports, action plans, next-actions output, and bundle handoff guidance keep their current CLI command contract.
2105
+ - This continues the Website Improvement module split toward a cleaner Claude/Codex MCP handoff surface without changing runtime behavior.
2106
+
2107
+ ### Verification Plan
2108
+ - `node --check cli/lib/site-mcp-commands.mjs && node --check cli/lib/site.mjs`
2109
+ - `node --test cli/lib/site.test.mjs`
2110
+ - `npm test`
2111
+ - `npm run audit:strict`
2112
+ - `npm run release:metadata`
2113
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2114
+ - `git diff --check`
2115
+
2116
+ ## Phase 666 — Website Improvement MCP Readiness Helper Split (unreleased)
2117
+
2118
+ Website Improvement MCP readiness scoring now lives outside the main site workflow module.
2119
+
2120
+ ### Changed
2121
+ - Moved MCP readiness evidence collection, readiness item construction, and aggregate check status scoring into `cli/lib/site-mcp-readiness.mjs`.
2122
+ - Kept task/MCP gap detection in `cli/lib/site.mjs` because it still depends on normalized task metadata and local workspace structures.
2123
+ - Left the existing `buildSiteMcpCheckReport` JSON and human report contract unchanged.
2124
+
2125
+ ### Impact
2126
+ - `cli/lib/site.mjs` is smaller and now focuses on command/report assembly rather than low-level MCP readiness rules.
2127
+ - MCP readiness, probe output, task gap warnings, and generated next actions keep the same behavior for existing Website Improvement workspaces.
2128
+ - This continues the incremental Website Improvement module split while preserving MCP handoff evidence and verification surfaces.
2129
+
2130
+ ### Verification Plan
2131
+ - `node --check cli/lib/site-mcp-readiness.mjs && node --check cli/lib/site.mjs`
2132
+ - `node --test cli/lib/site.test.mjs`
2133
+ - `npm test`
2134
+ - `npm run audit:strict`
2135
+ - `npm run release:metadata`
2136
+ - `python3 -B tools/audit/local-ci.py --docs-only`
2137
+ - `git diff --check`
2138
+
2139
+ ## Phase 665 — Website Improvement MCP Probe Helper Split (unreleased)
2140
+
2141
+ Website Improvement read-only MCP probe logic now lives outside the main site workflow module.
2142
+
2143
+ ### Changed
2144
+ - Moved URL parsing, GitHub/Figma reference parsing, local repo directory probe checks, probe item construction, and `buildSiteMcpProbeReport` into `cli/lib/site-mcp-probes.mjs`.
2145
+ - Re-exported `buildSiteMcpProbeReport` from `cli/lib/site.mjs` so existing tests and consumers keep the same helper import surface.
2146
+ - Kept broader MCP readiness scoring and task/MCP gap logic in `cli/lib/site.mjs` for now because it still depends on workspace normalization and task ranking helpers.
2147
+
2148
+ ### Impact
2149
+ - `cli/lib/site.mjs` is smaller and its MCP readiness section now focuses on report assembly rather than low-level URL/path probe mechanics.
2150
+ - The probe report remains read-only, makes no external MCP calls, and keeps the same JSON/human output contract.
2151
+ - This continues the incremental Website Improvement module split without changing CLI flags, bundle checks, or handoff evidence surfaces.
2152
+
2153
+ ### Verification Plan
2154
+ - `node --check cli/lib/site-mcp-probes.mjs && node --check cli/lib/site.mjs`
2155
+ - `node --test cli/lib/site.test.mjs`
2156
+ - `npm test`
2157
+ - `npm run audit:strict`
2158
+ - `npm run release:metadata`
2159
+ - `git diff --check`
2160
+
2161
+ ## Phase 664 — Website Improvement Intake Template Content Split (unreleased)
2162
+
2163
+ Website Improvement intake template Markdown now lives with the static content catalog instead of the main workflow module.
2164
+
2165
+ ### Changed
2166
+ - Moved English and Korean intake template Markdown plus the intake section list into `cli/lib/site-content.mjs`.
2167
+ - Kept `buildSiteIntakeTemplateMarkdown` and `formatSiteIntakeTemplateJson` in `cli/lib/site.mjs` so command behavior and public helper names remain unchanged.
2168
+
2169
+ ### Impact
2170
+ - `cli/lib/site.mjs` no longer carries the long intake template bodies inline, making the executable workflow code easier to scan.
2171
+ - The generated English/Korean intake Markdown, JSON metadata, CLI flags, and tests remain unchanged.
2172
+ - This continues the incremental split of static Website Improvement content without reducing validation, bundle, or handoff evidence surfaces.
2173
+
2174
+ ### Verification Plan
2175
+ - `node --check cli/lib/site-content.mjs && node --check cli/lib/site.mjs`
2176
+ - `node --test cli/lib/site.test.mjs`
2177
+ - `npm test`
2178
+ - `npm run audit:strict`
2179
+ - `npm run release:metadata`
2180
+ - `git diff --check`
2181
+
2182
+ ## Phase 663 — Website Improvement Static Content Module Split (unreleased)
2183
+
2184
+ Website Improvement prompt and bundle catalogs now live outside the main site workflow module.
2185
+
2186
+ ### Changed
2187
+ - Moved Website Improvement prompt template ids, prompt template metadata, bundle file manifest, and bundle checksum manifest into `cli/lib/site-content.mjs`.
2188
+ - Re-exported the public constants from `cli/lib/site.mjs` so existing tests and consumers keep the same import surface.
2189
+ - Kept the prompt template ordering assertion next to the catalog data it protects.
2190
+
2191
+ ### Impact
2192
+ - `cli/lib/site.mjs` is smaller and its executable workflow logic is easier to scan.
2193
+ - No CLI behavior, JSON contract, bundle manifest, prompt catalog, or test import path changes.
2194
+ - This is the first low-risk split toward reducing the oversized Website Improvement module without reducing verification or evidence surfaces.
2195
+
2196
+ ### Verification Plan
2197
+ - `node --check cli/lib/site-content.mjs && node --check cli/lib/site.mjs`
2198
+ - `node --test cli/lib/site.test.mjs`
2199
+ - `npm test`
2200
+ - `npm run audit:strict`
2201
+ - `npm run release:metadata`
2202
+ - `git diff --check`
2203
+
2204
+ ## Phase 662 — VS Code Extension Dev Dependency Audit Hygiene (unreleased)
2205
+
2206
+ VS Code extension development dependencies now install with a clean npm audit report.
2207
+
2208
+ ### Changed
2209
+ - Pinned the Mocha integration-test harness at `11.3.0` to avoid the vulnerable newer `diff` range while keeping the extension e2e runner on the current major.
2210
+ - Added npm `overrides` for `js-yaml` and `serialize-javascript` so transitive Mocha audit findings resolve without changing extension runtime dependencies.
2211
+ - Refreshed `vscode-extension/package-lock.json` from the updated dependency policy.
2212
+
2213
+ ### Impact
2214
+ - `npm audit --prefix vscode-extension --audit-level=moderate` now reports zero vulnerabilities.
2215
+ - The published VSIX runtime surface remains unchanged because the extension still has no production dependencies.
2216
+ - The integration test harness still uses Mocha and remains covered by the VS Code extension e2e test.
2217
+
2218
+ ### Verification Plan
2219
+ - `npm audit --prefix vscode-extension --audit-level=moderate`
2220
+ - `npm run compile --prefix vscode-extension`
2221
+ - `npm test --prefix vscode-extension`
2222
+ - `npm run test:e2e --prefix vscode-extension`
2223
+ - `npm test`
2224
+ - `npm run audit:strict`
2225
+ - `git diff --check`
2226
+
3
2227
  ## Phase 661 — Website Console Revalidation Gate JSON Action Labels (unreleased)
4
2228
 
5
2229
  Website Console revalidation gate action buttons now identify that they produce compact gate JSON.
@@ -19474,18 +21698,18 @@ Coverage:
19474
21698
  - [x] Component spec coverage push: 11 → 19 worked specs (5% → 8.5%). New: Alert, Tooltip, Form-controls (Switch/Checkbox/Radio combined), Skeleton, Progress, Avatar, Breadcrumb, Accordion.
19475
21699
  - [ ] Optional embedding index if knowledge base exceeds 100K tokens. _(Deferred — base is currently ~13K lines / well under threshold.)_
19476
21700
 
19477
- ## Phase 4 — Multi-tool
21701
+ ## Phase 4 — Multi-tool ✓ shipped
19478
21702
 
19479
- - [ ] Codex CLI: real-world session against this repo, captured as a worked example.
19480
- - [ ] Cursor `.cursorrules` overlay.
19481
- - [ ] Aider configuration.
21703
+ - [x] Codex CLI: real-world session against this repo, captured as a worked example. _([docs/integrations/codex-walkthrough.md](integrations/codex-walkthrough.md))_
21704
+ - [x] Cursor `.cursorrules` overlay. _([docs/integrations/cursor-walkthrough.md](integrations/cursor-walkthrough.md))_
21705
+ - [x] Aider configuration. _([docs/integrations/aider-walkthrough.md](integrations/aider-walkthrough.md))_
19482
21706
 
19483
- ## Phase 5 — Maturity
21707
+ ## Phase 5 — Maturity (public site / packaging shipped)
19484
21708
 
19485
- - [ ] Versioned knowledge files (semver headers).
21709
+ - [x] Versioned knowledge files (semver headers). _(frontmatter `version` field on every knowledge file, enforced by the frontmatter audit)_
19486
21710
  - [ ] CHANGELOG that summarizes upstream-source updates affecting `refs/`.
19487
- - [ ] Public site (knowledge/ as a browsable doc site).
19488
- - [ ] Plugin packaging — install design-ai as a Claude Code plugin / VS Code extension.
21711
+ - [x] Public site (knowledge/ as a browsable doc site). _(GitHub Pages: https://sungjin9288.github.io/design-ai/)_
21712
+ - [x] Plugin packaging — install design-ai as a Claude Code plugin / VS Code extension. _(`.claude-plugin/plugin.json` + VS Code Marketplace `sungjin.design-ai-vscode` v0.4.1)_
19489
21713
 
19490
21714
  ## Out of scope
19491
21715