dsh-plugin-guide 0.3.26 → 0.3.29

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 (292) hide show
  1. package/README-es.md +30 -11
  2. package/README-hi.md +30 -11
  3. package/README-pt.md +30 -11
  4. package/README-zh.md +32 -11
  5. package/README.md +36 -16
  6. package/SKILL.md +4 -3
  7. package/dist/dsh-plugin-dev.js +17 -8
  8. package/guide/family-toolchain.md +260 -0
  9. package/guide/links.md +3 -2
  10. package/guide/migration-0.2.md +64 -8
  11. package/guide/plugin-dev-guide.md +8 -6
  12. package/guide/quick-reference.es.md +3 -2
  13. package/guide/quick-reference.hi.md +4 -3
  14. package/guide/quick-reference.md +6 -5
  15. package/guide/quick-reference.pt.md +4 -3
  16. package/guide/quick-reference.zh-CN.md +6 -5
  17. package/guide/release-engineering.md +4 -2
  18. package/guide/release-engineering.zh-CN.md +4 -2
  19. package/guide/unfixed-issues.md +7 -0
  20. package/guide/version-matrix.md +309 -0
  21. package/guide/when-to-retire-a-plugin.md +5 -5
  22. package/guide/when-to-retire-a-plugin.zh-CN.md +5 -5
  23. package/package.json +4 -3
  24. package/references/community-ecosystem.md +2 -1
  25. package/references/dev-resource-landscape.md +294 -0
  26. package/references/official-docs/AGENTS.md +4 -5
  27. package/references/official-docs/SNAPSHOT.md +3 -3
  28. package/references/official-docs/THIRD_PARTY_NOTICES.md +2 -1
  29. package/references/official-docs/docs/AGENTS.md +1 -1
  30. package/references/official-docs/docs/architecture.i18n.yaml +14 -14
  31. package/references/official-docs/docs/architecture.md +11 -12
  32. package/references/official-docs/docs/architecture.zh.md +11 -12
  33. package/references/official-docs/docs/capability-seams.i18n.yaml +2 -2
  34. package/references/official-docs/docs/capability-seams.md +48 -23
  35. package/references/official-docs/docs/capability-seams.zh.md +48 -23
  36. package/references/official-docs/docs/cli-help.i18n.yaml +34 -0
  37. package/references/official-docs/docs/cli-help.md +203 -0
  38. package/references/official-docs/docs/cli-help.zh.md +205 -0
  39. package/references/official-docs/docs/config-catalog.md +305 -145
  40. package/references/official-docs/docs/config-catalog.zh.md +305 -145
  41. package/references/official-docs/docs/cookbook/adding-a-session-format-version.i18n.yaml +6 -6
  42. package/references/official-docs/docs/cookbook/adding-a-session-format-version.md +7 -5
  43. package/references/official-docs/docs/cookbook/adding-a-session-format-version.zh.md +7 -5
  44. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.i18n.yaml +6 -6
  45. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.md +11 -9
  46. package/references/official-docs/docs/cookbook/reviewing-persistence-type-changes.zh.md +11 -9
  47. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.i18n.yaml +4 -4
  48. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.md +5 -5
  49. package/references/official-docs/docs/deepseek-llm-api-wire-extensions.zh.md +5 -5
  50. package/references/official-docs/docs/defensive-patterns.i18n.yaml +2 -2
  51. package/references/official-docs/docs/defensive-patterns.md +1 -1
  52. package/references/official-docs/docs/defensive-patterns.zh.md +1 -1
  53. package/references/official-docs/docs/development.i18n.yaml +6 -6
  54. package/references/official-docs/docs/development.md +4 -2
  55. package/references/official-docs/docs/development.zh.md +4 -2
  56. package/references/official-docs/docs/event-producer-consumer.md +33 -33
  57. package/references/official-docs/docs/event-producer-consumer.zh.md +33 -33
  58. package/references/official-docs/docs/experimental-persistence-catalog.i18n.yaml +10 -0
  59. package/references/official-docs/docs/experimental-persistence-catalog.md +17 -0
  60. package/references/official-docs/docs/experimental-persistence-catalog.zh.md +17 -0
  61. package/references/official-docs/docs/module-graph.md +202 -131
  62. package/references/official-docs/docs/module-graph.zh.md +202 -131
  63. package/references/official-docs/docs/persistence-catalog.i18n.yaml +185 -158
  64. package/references/official-docs/docs/persistence-catalog.md +213 -112
  65. package/references/official-docs/docs/persistence-catalog.zh.md +213 -112
  66. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.i18n.yaml +28 -0
  67. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.md +48 -0
  68. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.schema.json +76 -0
  69. package/references/official-docs/docs/persistence-changes/2026-09-13-working-directory.zh.md +48 -0
  70. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.i18n.yaml +4 -4
  71. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.md +2 -2
  72. package/references/official-docs/docs/persistence-changes/2026-09-16-session-format-v4.zh.md +2 -2
  73. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.i18n.yaml +28 -0
  74. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.md +48 -0
  75. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.schema.json +290 -0
  76. package/references/official-docs/docs/persistence-changes/2026-09-19-external-subagent-catalog.zh.md +48 -0
  77. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.i18n.yaml +28 -0
  78. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.md +48 -0
  79. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.schema.json +457 -0
  80. package/references/official-docs/docs/persistence-changes/2026-10-05-ptc-operation-metadata.zh.md +48 -0
  81. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.i18n.yaml +28 -0
  82. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.md +60 -0
  83. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.schema.json +11474 -0
  84. package/references/official-docs/docs/persistence-changes/2026-10-05-working-directory-attribution.zh.md +60 -0
  85. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.i18n.yaml +28 -0
  86. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.md +48 -0
  87. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.schema.json +2990 -0
  88. package/references/official-docs/docs/persistence-changes/2026-10-07-title-reasoning-effort.zh.md +48 -0
  89. package/references/official-docs/docs/persistence-changes/README.i18n.yaml +4 -4
  90. package/references/official-docs/docs/persistence-changes/README.md +12 -10
  91. package/references/official-docs/docs/persistence-changes/README.zh.md +12 -10
  92. package/references/official-docs/docs/persistence-changes/historical-formats/README.i18n.yaml +2 -2
  93. package/references/official-docs/docs/persistence-changes/historical-formats/README.md +1 -1
  94. package/references/official-docs/docs/persistence-changes/historical-formats/README.zh.md +1 -1
  95. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.i18n.yaml +2 -2
  96. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.md +50 -50
  97. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.2.zh.md +50 -50
  98. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.i18n.yaml +2 -2
  99. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.md +14 -14
  100. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.0.1-rc.3.zh.md +14 -14
  101. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.i18n.yaml +2 -2
  102. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.md +3 -3
  103. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.7.zh.md +3 -3
  104. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.i18n.yaml +2 -2
  105. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.md +10 -10
  106. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.0-rc.8.zh.md +10 -10
  107. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.i18n.yaml +2 -2
  108. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.md +3 -3
  109. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.1.zh.md +3 -3
  110. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.i18n.yaml +2 -2
  111. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.md +13 -13
  112. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.1-rc.2.zh.md +13 -13
  113. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.i18n.yaml +2 -2
  114. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.md +63 -63
  115. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.1.zh.md +63 -63
  116. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.i18n.yaml +2 -2
  117. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.md +54 -54
  118. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.2.zh.md +54 -54
  119. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.i18n.yaml +2 -2
  120. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.md +7 -7
  121. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.2-alpha.4.zh.md +7 -7
  122. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.i18n.yaml +2 -2
  123. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.md +27 -27
  124. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.1.zh.md +27 -27
  125. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.i18n.yaml +2 -2
  126. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.md +4 -4
  127. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.3-alpha.2.zh.md +4 -4
  128. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.i18n.yaml +2 -2
  129. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.md +27 -27
  130. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.1.zh.md +27 -27
  131. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.i18n.yaml +2 -2
  132. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.md +7 -7
  133. package/references/official-docs/docs/persistence-changes/releases/dsh-v0.1.5-alpha.2.zh.md +7 -7
  134. package/references/official-docs/docs/persistence-schema.json +2084 -1827
  135. package/references/official-docs/docs/session-format-status.i18n.yaml +6 -6
  136. package/references/official-docs/docs/session-format-status.md +6 -6
  137. package/references/official-docs/docs/session-format-status.zh.md +6 -6
  138. package/references/official-docs/docs/subsystems/README.i18n.yaml +2 -2
  139. package/references/official-docs/docs/subsystems/README.md +4 -1
  140. package/references/official-docs/docs/subsystems/README.zh.md +4 -1
  141. package/references/official-docs/docs/subsystems/agent-team.i18n.yaml +7 -7
  142. package/references/official-docs/docs/subsystems/agent-team.md +10 -10
  143. package/references/official-docs/docs/subsystems/agent-team.zh.md +10 -10
  144. package/references/official-docs/docs/subsystems/boot.i18n.yaml +2 -2
  145. package/references/official-docs/docs/subsystems/boot.md +4 -4
  146. package/references/official-docs/docs/subsystems/boot.zh.md +4 -4
  147. package/references/official-docs/docs/subsystems/claude-code-mods.i18n.yaml +2 -2
  148. package/references/official-docs/docs/subsystems/claude-code-mods.md +1 -1
  149. package/references/official-docs/docs/subsystems/claude-code-mods.zh.md +1 -1
  150. package/references/official-docs/docs/subsystems/jobs.i18n.yaml +2 -2
  151. package/references/official-docs/docs/subsystems/jobs.md +2 -3
  152. package/references/official-docs/docs/subsystems/jobs.zh.md +2 -3
  153. package/references/official-docs/docs/subsystems/llm-streaming.i18n.yaml +4 -4
  154. package/references/official-docs/docs/subsystems/llm-streaming.md +41 -14
  155. package/references/official-docs/docs/subsystems/llm-streaming.zh.md +41 -14
  156. package/references/official-docs/docs/subsystems/persistence.md +2 -0
  157. package/references/official-docs/docs/subsystems/persistence.zh.md +2 -0
  158. package/references/official-docs/docs/subsystems/plan.i18n.yaml +2 -2
  159. package/references/official-docs/docs/subsystems/plan.md +1 -1
  160. package/references/official-docs/docs/subsystems/plan.zh.md +1 -1
  161. package/references/official-docs/docs/subsystems/session-query.md +2 -0
  162. package/references/official-docs/docs/subsystems/session-query.zh.md +2 -0
  163. package/references/official-docs/docs/subsystems/session-title.i18n.yaml +6 -6
  164. package/references/official-docs/docs/subsystems/session-title.md +14 -5
  165. package/references/official-docs/docs/subsystems/session-title.zh.md +14 -5
  166. package/references/official-docs/docs/subsystems/session.i18n.yaml +3 -0
  167. package/references/official-docs/docs/subsystems/session.md +48 -5
  168. package/references/official-docs/docs/subsystems/session.zh.md +48 -5
  169. package/references/official-docs/docs/subsystems/skills.i18n.yaml +2 -2
  170. package/references/official-docs/docs/subsystems/skills.md +2 -2
  171. package/references/official-docs/docs/subsystems/skills.zh.md +2 -2
  172. package/references/official-docs/docs/subsystems/slots.md +10 -8
  173. package/references/official-docs/docs/subsystems/slots.zh.md +10 -8
  174. package/references/official-docs/docs/subsystems/ssh.i18n.yaml +2 -2
  175. package/references/official-docs/docs/subsystems/ssh.md +22 -11
  176. package/references/official-docs/docs/subsystems/ssh.zh.md +22 -11
  177. package/references/official-docs/docs/subsystems/subagent.i18n.yaml +24 -27
  178. package/references/official-docs/docs/subsystems/subagent.md +165 -229
  179. package/references/official-docs/docs/subsystems/subagent.zh.md +167 -233
  180. package/references/official-docs/docs/subsystems/system-prompt.i18n.yaml +2 -2
  181. package/references/official-docs/docs/subsystems/system-prompt.md +32 -2
  182. package/references/official-docs/docs/subsystems/system-prompt.zh.md +32 -2
  183. package/references/official-docs/docs/subsystems/tools.i18n.yaml +2 -2
  184. package/references/official-docs/docs/subsystems/tools.md +3 -3
  185. package/references/official-docs/docs/subsystems/tools.zh.md +3 -3
  186. package/references/official-docs/docs/subsystems/translation.i18n.yaml +19 -0
  187. package/references/official-docs/docs/subsystems/translation.md +103 -0
  188. package/references/official-docs/docs/subsystems/translation.zh.md +103 -0
  189. package/references/official-docs/docs/subsystems/web-server.i18n.yaml +8 -8
  190. package/references/official-docs/docs/subsystems/web-server.md +43 -8
  191. package/references/official-docs/docs/subsystems/web-server.zh.md +43 -8
  192. package/references/official-docs/docs/subsystems/webhook.md +1 -1
  193. package/references/official-docs/docs/subsystems/webhook.zh.md +1 -1
  194. package/references/official-docs/docs/subsystems/workflow.i18n.yaml +2 -2
  195. package/references/official-docs/docs/subsystems/workflow.md +1 -1
  196. package/references/official-docs/docs/subsystems/workflow.zh.md +1 -1
  197. package/references/official-docs/docs/subsystems/working-directory.i18n.yaml +13 -0
  198. package/references/official-docs/docs/subsystems/working-directory.md +64 -0
  199. package/references/official-docs/docs/subsystems/working-directory.zh.md +64 -0
  200. package/references/official-docs/docs/subsystems/workspace.md +2 -2
  201. package/references/official-docs/docs/subsystems/workspace.zh.md +2 -2
  202. package/references/official-docs/docs/subsystems/worktrees.i18n.yaml +13 -0
  203. package/references/official-docs/docs/subsystems/worktrees.md +76 -0
  204. package/references/official-docs/docs/subsystems/worktrees.zh.md +76 -0
  205. package/references/official-docs/docs/testing.i18n.yaml +2 -2
  206. package/references/official-docs/docs/testing.md +1 -1
  207. package/references/official-docs/docs/testing.zh.md +1 -1
  208. package/references/official-docs/docs/tool-catalog.i18n.yaml +57 -45
  209. package/references/official-docs/docs/tool-catalog.md +95 -41
  210. package/references/official-docs/docs/tool-catalog.zh.md +99 -45
  211. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.i18n.yaml +16 -0
  212. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.md +18 -0
  213. package/references/official-docs/docs/upgrade-guide/v0.2.0-rc.2/bundled-python-tests/guide.zh.md +18 -0
  214. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.i18n.yaml +16 -0
  215. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.md +17 -0
  216. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/deepseek-model-discovery/guide.zh.md +17 -0
  217. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.i18n.yaml +16 -0
  218. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.md +18 -0
  219. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/desktop-test-auth-popup/guide.zh.md +18 -0
  220. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.i18n.yaml +16 -0
  221. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.md +28 -0
  222. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/experimental-package-composition/guide.zh.md +28 -0
  223. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.i18n.yaml +16 -0
  224. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.md +20 -0
  225. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/instruction-home-override/guide.zh.md +20 -0
  226. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.i18n.yaml +16 -0
  227. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.md +17 -0
  228. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/mock-messages-events/guide.zh.md +17 -0
  229. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.i18n.yaml +16 -0
  230. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.md +31 -0
  231. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/native-subagent-bundle-tools/guide.zh.md +31 -0
  232. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.i18n.yaml +16 -0
  233. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.md +20 -0
  234. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/new-session-generations/guide.zh.md +20 -0
  235. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.i18n.yaml +16 -0
  236. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.md +20 -0
  237. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/plugin-option-placement/guide.zh.md +20 -0
  238. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.i18n.yaml +16 -0
  239. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.md +18 -0
  240. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-optional-resources/guide.zh.md +18 -0
  241. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.i18n.yaml +16 -0
  242. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.md +21 -0
  243. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/python-ptc-sandbox/guide.zh.md +21 -0
  244. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.i18n.yaml +16 -0
  245. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.md +18 -0
  246. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-adapters/guide.zh.md +18 -0
  247. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.i18n.yaml +16 -0
  248. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.md +20 -0
  249. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/session-title-provider-strategy/guide.zh.md +20 -0
  250. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.i18n.yaml +16 -0
  251. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.md +19 -0
  252. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/ssh-helper-launch/guide.zh.md +19 -0
  253. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.i18n.yaml +16 -0
  254. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.md +59 -0
  255. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/subagent-activations/guide.zh.md +59 -0
  256. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.i18n.yaml +16 -0
  257. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.md +21 -0
  258. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/team-direct-inbox/guide.zh.md +21 -0
  259. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.i18n.yaml +16 -0
  260. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.md +18 -0
  261. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/terminal-command-labels/guide.zh.md +18 -0
  262. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.i18n.yaml +16 -0
  263. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.md +21 -0
  264. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/tool-presentation-mode/guide.zh.md +21 -0
  265. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.i18n.yaml +16 -0
  266. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.md +36 -0
  267. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/web-listener-trust-config/guide.zh.md +36 -0
  268. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.i18n.yaml +16 -0
  269. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.md +25 -0
  270. package/references/official-docs/docs/upgrade-guide/v0.2.1-alpha.1/working-directory/guide.zh.md +25 -0
  271. package/references/official-docs/docs/user/guide/github-review.i18n.yaml +4 -4
  272. package/references/official-docs/docs/user/guide/github-review.md +7 -10
  273. package/references/official-docs/docs/user/guide/github-review.zh.md +7 -10
  274. package/references/official-docs/docs/user/guide/public-deployments.i18n.yaml +8 -8
  275. package/references/official-docs/docs/user/guide/public-deployments.md +9 -5
  276. package/references/official-docs/docs/user/guide/public-deployments.zh.md +9 -5
  277. package/references/official-docs/packages/README.md +4 -6
  278. package/references/official-docs/website-docs.ts +1 -0
  279. package/references/official-plugin-dev-skill.md +2 -2
  280. package/references/sources.md +1 -1
  281. package/scripts/build-llms-full.mjs +8 -0
  282. package/scripts/verify-kit.ps1 +8 -1
  283. package/templates/js/README-es.md +1 -1
  284. package/templates/js/README-hi.md +1 -1
  285. package/templates/js/README-pt.md +1 -1
  286. package/templates/js/README-zh.md +1 -1
  287. package/templates/js/README.md +1 -1
  288. package/templates/ts/README-es.md +1 -1
  289. package/templates/ts/README-hi.md +1 -1
  290. package/templates/ts/README-pt.md +1 -1
  291. package/templates/ts/README-zh.md +1 -1
  292. package/templates/ts/README.md +1 -1
@@ -6,20 +6,20 @@
6
6
  en: 71132d61e41cb40b
7
7
  zh: 0b56ed8893bf8d0a
8
8
  /cookbook-adding-a-session-log-format-version/summary:
9
- en: 76b76c19e0889ab3
10
- zh: 1ddc1afa5c2333f0
9
+ en: 3dc6121d1fcef4f8
10
+ zh: 178bcf02b63c4fbf
11
11
  /cookbook-adding-a-session-log-format-version/table-of-contents:
12
12
  en: 6977fff29f49e4a4
13
13
  zh: 7ffb6f5490831dce
14
14
  /cookbook-adding-a-session-log-format-version/1-choose-the-version-and-release-base:
15
- en: 3205409b918b891d
16
- zh: 98f17c19045954d5
15
+ en: 3e763cfbe8cd11d5
16
+ zh: 2d4998217cbe8030
17
17
  /cookbook-adding-a-session-log-format-version/2-add-an-identity-edge:
18
18
  en: 77c9c26d94fb33ca
19
19
  zh: 313c54c45cfc7dbc
20
20
  /cookbook-adding-a-session-log-format-version/3-implement-per-artifact-stages-and-validation:
21
- en: 2bea8b93ac9b359a
22
- zh: 2c24e71680f66ef7
21
+ en: c8d879d5c9fb14ed
22
+ zh: ea19e54c808fea0b
23
23
  /cookbook-adding-a-session-log-format-version/4-update-current-version-consumers:
24
24
  en: a285126945d02c12
25
25
  zh: e039c77cf7866ad2
@@ -4,7 +4,7 @@ English | [中文](adding-a-session-format-version.zh.md)
4
4
 
5
5
  ## Summary
6
6
 
7
- Use this tutorial to introduce the next structural Session log version without rewriting released data. Read the [version and release-status authority](../session-format-status.md) to identify the checkout writer and the latest released format. Let N denote that verified released format and N+1 the target; substitute numeric values for these placeholders in names and metadata. Start with a working contributor checkout and read the [package checklist](adding-a-package.md), [format library](../../packages/session/session-format/README.md), and [released-format decision](../../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.md).
7
+ Use this tutorial to introduce the next Session log format version without rewriting released data. Read the [version and release-status authority](../session-format-status.md) to identify the checkout writer and the latest released format. Let N denote that verified released format and N+1 the target; substitute numeric values for these placeholders in names and metadata. Start with a working contributor checkout and read the [package checklist](adding-a-package.md), [format library](../../packages/session/session-format/README.md), and [released-format decision](../../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.md).
8
8
 
9
9
  ## Table of Contents
10
10
 
@@ -20,15 +20,15 @@ Use this tutorial to introduce the next structural Session log version without r
20
20
  <a id="choose-the-version"></a>
21
21
  ## 1. Choose the version and release base
22
22
 
23
- Bump the format for a structural change to headers, event envelopes, core event semantics, or surface reconstruction. Backward-compatible changes can remain at the current version through new acknowledgements; follow the [versioning rule](../../.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.md) and [type-change rules](../persistence-changes/README.md#compatibility-rules). Distinguish the Session format integer from package release versions, SQLite schema versions, projection-unit versions, and protocol-wrapper versions.
23
+ Bump the format only when an effective discriminator cannot prevent unsafe interpretation. A structural change to headers, event envelopes, event semantics, or reconstruction requires assessment under the [reader-compatibility rule](../../.agents/notes/implemented/process/2026-10-08-session-reader-compatibility-review.md), not an automatic bump. Record safe same-version evolution through the [type-change procedure](reviewing-persistence-type-changes.md). Distinguish the Session format integer from package release versions, SQLite schema versions, projection-unit versions, and protocol-wrapper versions.
24
24
 
25
- Let N be the accepted or published version in [version/status](../session-format-status.md) when planning the next breaking change. A breaking change after accepted V4 therefore needs V5 even before V4 publication is recorded; compatible additions do not require that step.
25
+ Let N be the accepted or published version in [version/status](../session-format-status.md) when a bump is required. After accepted V4, that bump needs V5 even before V4 publication is recorded; reviewed same-version evolution does not require that step.
26
26
 
27
27
  Use a shared `release/*` integration base for N+1. The base change adds the writer, codec, catalog wiring, identity migration, and verification. Create each independent child branch from that base and target its PR at the release branch, not another independent child’s branch. Each child adds its structural transformation, validators, consumers, and tests to the same adjacent migration package. Do not allocate extra versions just to represent review order. Merge reviewed children into the release branch through PRs, then validate the combined result before release. Honor release-branch force-push and deletion protections; do not force-sync it.
28
28
 
29
- Released codecs and accepted target-format meanings remain stable. The N→N+1 converter may receive fixes or support additional historical cases after N+1 ships, without a version bump, if its output remains compatible with N+1. A converter fix affects subsequent conversions, not existing N+1 successors. Document changes to previously accepted mappings and how existing outputs remain supported. Changing the established target representation or interpretation incompatibly requires the next version.
29
+ Released codecs preserve accepted interpretations. A current-version codec can admit explicitly discriminated variants while retaining historical readability; do not broaden an older codec to admit a current feature. The N→N+1 converter may receive fixes or support additional historical cases after N+1 ships if its output remains compatible with N+1. A fix affects subsequent conversions, not existing N+1 successors. Document changed mappings and continued support for existing output; apply the reader-compatibility rule to any new target representation.
30
30
 
31
- Use disposable, isolated Harness homes while N+1 remains open for integration. An interim N+1 file already has the target writer version, so a later edit to N→N+1 will not migrate that file again. Re-run from unchanged historical input in a fresh test home; never repair this by rewriting a committed generation or reusing a real user's home.
31
+ Same-version logs bypass adjacent migrations and can mix historical and newer record variants after resume. Each integer therefore identifies a family of supported representations, not one fixed schema. Owning readers must retain and distinguish those variants; the next outgoing migration must handle them. Do not add same-version migrations or rely on `restoreCurrent` alone for normalization: current-version JSONL reads using transformed validation bypass that hook. Use disposable, isolated Harness homes for interim integration formats; rerun changed adjacent conversions from unchanged historical input rather than rewriting a committed generation or using a real user's home.
32
32
 
33
33
  Before changing the writer, use the [archive command](../persistence-changes/historical-formats/README.md#maintenance) to preserve its complete persistence schema, then add the bilingual format reference under `docs/persistence-changes/historical-formats/vN.*`. Preserve all earlier records. The format coverage check requires every integer below the new writer to have its own document; the current generated catalog covers only the new writer.
34
34
 
@@ -58,6 +58,8 @@ Treat the inherited cut as a logical event count, not a physical row count. Expo
58
58
 
59
59
  Define the new edge's event admission and transformation rules explicitly. The [V2-to-V3 source audit](../../packages/session/session-format-v2-to-v3/README.md#source-audit) and [alpha V0→V1 rule](../../.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.md) own the policies of those released edges, not the new edge. Do not generalize either to every edge. A change to structure or event positions requires classifying source events, payload members, and references, and explicitly deciding whether opaque data can remain valid. [Equal-version retention](../../.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.md) alone does not prove a structural transformation safe. Validate target semantics and give each newly accepted case a rejecting counterexample; never widen older edges to hide an unsupported transformation.
60
60
 
61
+ Plugin records that `appendPluginRecord()` writes are ignorable events in the `plugin:` namespace, which experimental packages read back by type. Carry them forward under their names when the target format can represent them, and state in the edge README which records it drops otherwise; the [ignorable events decision](../../.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.md) keeps them on a best-effort basis. Apply this policy even when a stored record has no declaration in the [experimental persistence catalog](../experimental-persistence-catalog.md).
62
+
61
63
  Use native writer output as the conversion oracle: replay the same recorded LLM messages, tool outputs, and other inputs through the old and target writers. Compare migrated old output with raw target output before any format-normalizing helper; mask only documented volatile fields. For V4, ordinary tool results become flat tool-role messages with ordinary content blocks. A theoretically permitted old structure alone does not justify a new core content type.
62
64
 
63
65
  Alpha converters may explicitly refuse historical cases without an implemented, evidenced mapping, including otherwise valid logs. Keep the source unchanged and publish no partial successor. Prefer real corpora and reproducible writers when extending support; inspect user corpora read-only and create sanitized regression fixtures.
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## 概述
6
6
 
7
- 本教程介绍如何添加下一个结构性 Session 日志版本,同时不改写已发布数据。阅读[版本与发布状态真源](../session-format-status.zh.md),确定工作区写入器与最新已发布格式。令 N 表示经核实的已发布格式,N+1 表示目标版本;名称与元数据中的这些占位符须替换为数字。开始前,请准备可用的贡献者工作区,并阅读[包检查清单](adding-a-package.zh.md)、[格式库](../../packages/session/session-format/README.zh.md)和[已发布格式决策](../../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.zh.md)。
7
+ 本教程介绍如何添加下一个 Session 日志格式版本,同时不改写已发布数据。阅读[版本与发布状态真源](../session-format-status.zh.md),确定工作区写入器与最新已发布格式。令 N 表示经核实的已发布格式,N+1 表示目标版本;名称与元数据中的这些占位符须替换为数字。开始前,请准备可用的贡献者工作区,并阅读[包检查清单](adding-a-package.zh.md)、[格式库](../../packages/session/session-format/README.zh.md)和[已发布格式决策](../../.agents/notes/implemented/architecture/2026-08-31-released-session-format-migrations.zh.md)。
8
8
 
9
9
  ## 目录
10
10
 
@@ -20,15 +20,15 @@
20
20
  <a id="choose-the-version"></a>
21
21
  ## 1. 选择版本与发布基线
22
22
 
23
- 当 header、事件信封、核心事件语义或表面重建发生结构性变更时,提升格式版本。向后兼容的变更可以通过新的确认记录保留当前版本;遵循[版本规则](../../.agents/notes/implemented/architecture/2026-08-10-session-log-version-mechanism.zh.md)与[类型变更规则](../persistence-changes/README.zh.md#compatibility-rules)。区分 Session 格式整数与包发布版本、SQLite schema 版本、投影单元版本及协议包装层版本。
23
+ 只有有效判别信息无法阻止不安全解释时,才提升格式版本。头、事件封装、事件语义或重建的结构变更需要按[读取器兼容性规则](../../.agents/notes/implemented/process/2026-10-08-session-reader-compatibility-review.zh.md)评估,不会自动升版本。通过[类型变更流程](reviewing-persistence-type-changes.zh.md)记录安全的同版本演进。区分 Session 格式整数与包发布版本、SQLite schema 版本、投影单元版本及协议包装层版本。
24
24
 
25
- 规划下一次破坏性变更时,N 取[版本/状态](../session-format-status.zh.md)中的已接受或已发布版本。因此,即使尚未记录 V4 发布,已接受 V4 之后的破坏性变更也需要 V5;兼容新增不需要这一步。
25
+ 确定需要升版本时,N 取[版本/状态](../session-format-status.zh.md)中的已接受或已发布版本。已接受 V4 之后,即使尚未记录 V4 发布,此次升版本也需要 V5;经评审的同版本演进不需要这一步。
26
26
 
27
27
  为 N+1 使用共享的 `release/*` 集成基线。基线变更添加写入器、codec、catalog 接线、恒等迁移与验证。从该基线创建各个独立子分支,并将其 PR(Pull Request)的目标设为发布分支,而非另一个独立子分支。每个子分支在同一个相邻迁移包内添加自身的结构变换、校验器、消费方和测试。不要只为表示评审顺序而分配额外版本。通过 PR 将评审后的子分支合入发布分支,并在发布前验证组合结果。遵守发布分支的强制推送与删除保护;不要强制同步该分支。
28
28
 
29
- 已发布 codec 和已接受的目标格式含义保持稳定。N+1 发布后,N→N+1 转换器仍可修复或增加历史场景支持;只要输出仍兼容 N+1,就不必提高版本。转换器修复只影响之后的转换,不会重新处理已有 N+1 后继文件。记录对原先已接纳映射的修改,以及已有输出如何继续得到支持。不兼容地改变既定目标表示或解释语义需要下一版本。
29
+ 已发布 codec 保留已接受的解释。当前版本 codec 可以接纳有明确判别信息的分支,同时保留历史可读性;不要为了接纳当前功能而放宽旧 codec。N+1 发布后,只要输出仍兼容 N+1,N→N+1 转换器就可以修复或增加历史场景支持。修复只影响之后的转换,不影响已有 N+1 后继文件。记录映射变化及已有输出如何继续得到支持;任何新的目标表示都须应用读取器兼容性规则。
30
30
 
31
- N+1 尚处于开放集成阶段时,应使用可丢弃、相互隔离的 Harness home。中间版本产生的 N+1 文件已标为目标写入器版本,因此后续对 N→N+1 的修改不会再次迁移该文件。请在全新测试 home 中从未变更的历史输入重新运行;绝不通过改写已提交代际或复用真实用户 home 来修复这个问题。
31
+ 同版本日志跳过相邻迁移,恢复后可以混合历史与较新的记录分支。因此,每个整数标识一组受支持表示,而非一个固定 schema。所属读取器必须保留并区分这些分支;下一条向外迁移必须处理它们。不要添加同版本迁移,也不要仅依赖 `restoreCurrent` 进行归一化:使用 transformed 校验的当前版本 JSONL 读取会跳过该 hook。中间集成格式使用可丢弃、相互隔离的 Harness home;相邻转换发生变化时,从未变更的历史输入重新运行,不得改写已提交代际或使用真实用户 home。
32
32
 
33
33
  变更写入器之前,使用[归档命令](../persistence-changes/historical-formats/README.zh.md#maintenance)保留其完整持久化 schema,再在 `docs/persistence-changes/historical-formats/vN.*` 下添加双语格式参考。保留所有更早的记录。格式覆盖检查要求低于新写入器的每个整数版本都有独立文档;当前生成的目录只覆盖新写入器。
34
34
 
@@ -58,6 +58,8 @@ pnpm run gen-session-format-catalog
58
58
 
59
59
  显式定义新迁移边的事件准入与变换规则。[V2 到 V3 源审计](../../packages/session/session-format-v2-to-v3/README.zh.md#source-audit)和 [Alpha V0→V1 规则](../../.agents/notes/implemented/architecture/2026-08-31-alpha-historical-unknown-event-refusal.zh.md)分别负责对应已发布迁移边的策略,而非新迁移边的策略。不要将任一策略推广到所有迁移边。结构或事件位置变化时,必须分类源事件、载荷成员与引用,并显式判断不透明数据能否保持有效。[同版本保留](../../.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.zh.md)本身不能证明结构变换安全。校验目标语义,并为每个新增可接受案例提供一个被拒绝的反例;绝不放宽旧迁移边来掩盖不受支持的转换。
60
60
 
61
+ `appendPluginRecord()` 写入的插件记录是 `plugin:` 命名空间中的 ignorable 事件,实验性包按类型把它们读回。目标格式能够表示它们时,以原名称继续携带;否则在迁移边 README 中说明它丢弃哪些记录。[ignorable 事件决策](../../.agents/notes/implemented/architecture/2026-08-30-retain-ignorable-external-session-events.zh.md)以尽力而为的方式保留这些记录。即使已存记录在[实验性持久化目录](../experimental-persistence-catalog.zh.md)中没有声明,也适用这一策略。
62
+
61
63
  以原生 writer 输出作为转换对照:用相同录制的 LLM 消息、工具输出和其他输入回放旧 writer 与目标 writer。任何格式归一化 helper 运行前,比较迁移后的旧输出与目标原始输出,只屏蔽已说明的易变字段。V4 的普通工具结果变为包含普通内容块的平铺 tool-role 消息。旧类型理论上允许某种结构,本身不足以支持新增核心内容类型。
62
64
 
63
65
  Alpha 转换器可以明确拒绝尚无已实现、有证据映射的历史场景,包括原本有效的日志。源文件保持不变,且不发布部分 successor。扩展支持时优先使用真实语料和可复现 writer;只读检查用户语料,并创建脱敏回归 fixture。
@@ -15,17 +15,17 @@
15
15
  en: 5fca19ac2bb1ddac
16
16
  zh: 00d78fe7e80ba4f7
17
17
  /cookbook-reviewing-persistence-type-changes/optional-inspect-the-change:
18
- en: 3f85edb803afe870
19
- zh: 545c651b9e5ccb56
18
+ en: 14049617e3de750d
19
+ zh: 200456cf72bef77b
20
20
  /cookbook-reviewing-persistence-type-changes/1-record-the-change:
21
- en: 342bd49412db070e
22
- zh: a8d14958e9a637d9
21
+ en: de16b6e1ac883317
22
+ zh: 21d367bb78e799d1
23
23
  /cookbook-reviewing-persistence-type-changes/2-check-commit-and-push:
24
24
  en: 91d39719ec40b0f7
25
25
  zh: 405116ae4c91b100
26
26
  /cookbook-reviewing-persistence-type-changes/update-an-unaccepted-record:
27
- en: 4fd3f48761f7909f
28
- zh: 69af35c41656fa17
27
+ en: e3872db4ec9aad7d
28
+ zh: 18de4f6ebcb4b31c
29
29
  /cookbook-reviewing-persistence-type-changes/dev-note:
30
30
  en: 5de1d6304e00c58f
31
31
  zh: 8d8225361cfa29e5
@@ -31,7 +31,7 @@ pnpm --silent run verify-persistence-changes --json
31
31
 
32
32
  Use `--silent` when consuming JSON: pnpm otherwise appends lifecycle failure text to stdout. Failed commands still exit with code 1.
33
33
 
34
- Read the reported root, path, change kind, and version requirement. A referenced type can affect several event digests; inspect every affected root. Until the history covers the new schemas, verification fails. A stale generated inventory also fails verification; the recording command refreshes it. If `changes` is empty after reordering fields or union alternatives, run `pnpm run gen-persistence-catalog` and repeat the check. An unchanged digest needs no new acknowledgement even when copied declarations or source locations produce a catalog diff.
34
+ Read the reported root, path, change kind, and compatibility-review requirement. A referenced type can affect several event digests; inspect every affected root. Until the history covers the new schemas, verification fails. A stale generated inventory also fails verification; the recording command refreshes it. If `changes` is empty after reordering fields or union alternatives, run `pnpm run gen-persistence-catalog` and repeat the check. An unchanged digest needs no new acknowledgement even when copied declarations or source locations produce a catalog diff.
35
35
 
36
36
  To review a PR independently of its acknowledgement history, save the base and head inventories as local JSON files and run:
37
37
 
@@ -39,6 +39,8 @@ To review a PR independently of its acknowledgement history, save the base and h
39
39
  pnpm --silent run persistence-review --before .artifacts/base.schema.json --after docs/persistence-schema.json
40
40
  ```
41
41
 
42
+ A recorded decision does not hide the transition from this comparison. `--check` only compares current source with acknowledged history; after recording, it cannot replace a base/head review or establish that a human reviewed the change.
43
+
42
44
  Record the commits supplying those files with the report. Add `--json` for structured output. This read-only comparison groups shared changes with their affected roots and uses actual literal `kind`/`form` values instead of union positions. Ambiguous alternatives remain separate additions and removals. Its compatibility section copies every root's authoritative classifier result; the structural explanation does not replace acknowledgement checks. Current catalog labels and declaration names are descriptive metadata; structural anchors and fingerprints identify types.
43
45
 
44
46
  The current machine inventory stores complete graphs in `roots`. A `types` entry contains `digest`, `names`, and `sources`, plus an explicit `schema` when roots cannot reconstruct that graph exactly. Readers resolve omitted graphs from root subgraphs by digest and validate explicit graphs directly, preserving every type and its metadata. Historical full entries remain readable. `formatVersion` identifies normalization rules; storage compaction does not change root fingerprints or require an acknowledgement.
@@ -46,7 +48,7 @@ The current machine inventory stores complete graphs in `roots`. A `types` entry
46
48
  <a id="acknowledge"></a>
47
49
  ## 1. Record the change
48
50
 
49
- Check the [accepted baseline](../session-format-status.md#finalization-record) first. Preserve its locked records. Record backward-compatible evolution in a new same-version acknowledgement; implement a higher writer version before recording a breaking change.
51
+ Check the [accepted baseline](../session-format-status.md#finalization-record) first and preserve its locked records. Assess both reader directions under the [compatibility rules](../persistence-changes/README.md#compatibility-rules). A structural difference can remain same-version with evidence of safe interpretation or refusal; it does not automatically require a higher writer version.
50
52
 
51
53
  Write a local JSON file containing `en` and `zh`, each with `summary`, `compatibility`, and `verification` strings. The following input describes an exercised required-to-optional hook audit field change. Replace the explanation and test evidence with facts about your change; the CLI does not establish these claims.
52
54
 
@@ -57,12 +59,12 @@ Save the input as `.artifacts/persistence-change.prose.json`, creating the ignor
57
59
  "en": {
58
60
  "summary": "Makes the persisted hook audit decision optional.",
59
61
  "compatibility": "Existing records remain valid. Hook execution consumes HookOutput instead of replaying this audit field. Producers still write decisions, and absence does not imply pass.",
60
- "verification": "pnpm exec vitest run packages/hooks/hook-protocol/tests/events.spec.ts: 10 tests passed."
62
+ "verification": "pnpm exec vitest run packages/experimental/hook-protocol/tests/events.spec.ts: 10 tests passed."
61
63
  },
62
64
  "zh": {
63
65
  "summary": "将持久化的钩子审计决策改为可选。",
64
66
  "compatibility": "已有记录仍然有效。钩子执行消费 HookOutput,不回放此审计字段。写入方仍然记录决策,缺失不代表 pass。",
65
- "verification": "pnpm exec vitest run packages/hooks/hook-protocol/tests/events.spec.ts:10 个测试通过。"
67
+ "verification": "pnpm exec vitest run packages/experimental/hook-protocol/tests/events.spec.ts:10 个测试通过。"
66
68
  }
67
69
  }
68
70
  ```
@@ -73,9 +75,9 @@ Use a date and descriptive slug in place of this example id:
73
75
  pnpm --silent run persistence-changes --record 2026-09-11-poc-optional --prose .artifacts/persistence-change.prose.json --json
74
76
  ```
75
77
 
76
- The command validates the history and paired prose, infers the minimum version decision, and checks any required header increase before writing. It generates the record pair, complete after schemas, both catalogs, the machine inventory, and pairing records. Review the explanations and returned `changes`, `roots`, and `files` before committing. Omitting `--prose` creates unfinished drafts that verification rejects until their explanations are completed.
78
+ The command validates the history and paired prose, infers established same-version decisions, and checks explicit compatibility decisions before writing. It generates the record pair, complete after schemas, both catalogs, the machine inventory, and pairing records. Review the explanations and returned `changes`, `roots`, and `files` before committing. Omitting `--prose` creates unfinished drafts that verification rejects until their explanations are completed.
77
79
 
78
- Inference follows the [fixed compatibility rules](../persistence-changes/README.md#compatibility-rules); it never changes source or relaxes them. If a bump is required, first follow [adding a Session format version](adding-a-session-format-version.md). The record must include its own increasing `SessionHeader.version` transition; an unrelated historical bump cannot authorize it. Routine changes never create another baseline.
80
+ For a change marked `requiresCompatibilityReview`, explain both reader directions in the acknowledgement’s Compatibility section and record executed checks in Verification. Supply `--decision same-version` when that evidence supports keeping the version; recording or updating a flagged change with an unchanged header version and no explicit decision fails with `decision-required`. Structural differences alone do not infer a bump. An actual header version increase can infer `version-bump`. If an effective discriminator cannot prevent unsafe interpretation, follow [adding a Session format version](adding-a-session-format-version.md) and select `--decision version-bump`. That record must include its own increasing `SessionHeader.version` transition; an unrelated historical bump cannot authorize it. Routine changes never create another baseline.
79
81
 
80
82
  <a id="verify"></a>
81
83
  ## 2. Check, commit, and push
@@ -99,14 +101,14 @@ If source changes after recording, review the compatibility explanation and refr
99
101
  pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --prose .artifacts/persistence-change.prose.json --json
100
102
  ```
101
103
 
102
- The command refreshes the machine declaration, schemas, catalogs, and pairing. Without `--prose`, it preserves the existing explanation. Update refuses the initial baseline, records that another record depends on, and finalized checkpoint records. Outside finalized checkpoints, the tree does not infer review acceptance: preserve accepted history and create a successor instead.
104
+ The command refreshes the machine declaration, schemas, catalogs, and pairing. Without `--prose`, it preserves the existing explanation. Reassess that explanation against the complete transition and supply `--decision same-version` for any flagged same-version update. Update refuses the initial baseline, records that another record depends on, and finalized checkpoint records. Outside finalized checkpoints, the tree does not infer review acceptance: preserve accepted history and create a successor instead.
103
105
 
104
106
  When integration creates competing terminal records, update the unaccepted record against the remaining history, then reassess the resulting diff. An unrelated root's acknowledgement does not need refreshing. The [mechanism decision](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.md) explains why complete snapshots and per-root predecessors are retained.
105
107
 
106
- An explicit `--decision` remains a checked assertion. For an existing property's value-type change, the following deliberately wrong assertion fails before writing:
108
+ For an existing property value-type change requiring review, first revise the prose file’s Compatibility and Verification sections to explain the actual new transition and its executed checks. Do not reuse the earlier required-to-optional explanation for a different change. Then update the record with that prose and the explicit same-version choice:
107
109
 
108
110
  ```sh
109
- pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --decision same-version --json
111
+ pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --decision same-version --prose .artifacts/persistence-change.prose.json --json
110
112
  ```
111
113
 
112
114
  <a id="dev-note"></a>
@@ -31,7 +31,7 @@ pnpm --silent run verify-persistence-changes --json
31
31
 
32
32
  消费 JSON 时使用 `--silent`:否则 pnpm 会把生命周期失败文本追加到标准输出。失败命令仍以退出码 1 结束。
33
33
 
34
- 阅读报告中的根、路径、变更种类和版本要求。被引用类型可能影响多个事件摘要;检查每个受影响的根。在历史覆盖新 schema 之前,验证会失败。陈旧生成清单也会导致验证失败;记录命令会刷新它。若重排字段或联合类型分支后 `changes` 为空,运行 `pnpm run gen-persistence-catalog` 并重新检查。即使复制的声明或源码位置产生目录 diff,未变的摘要也无需新增确认记录。
34
+ 阅读报告中的根、路径、变更种类和兼容性评审要求。被引用类型可能影响多个事件摘要;检查每个受影响的根。在历史覆盖新 schema 之前,验证会失败。陈旧生成清单也会导致验证失败;记录命令会刷新它。若重排字段或联合类型分支后 `changes` 为空,运行 `pnpm run gen-persistence-catalog` 并重新检查。即使复制的声明或源码位置产生目录 diff,未变的摘要也无需新增确认记录。
35
35
 
36
36
  要独立于确认历史评审 PR,先将 base 和 head 的目录保存为本地 JSON 文件,再运行:
37
37
 
@@ -39,6 +39,8 @@ pnpm --silent run verify-persistence-changes --json
39
39
  pnpm --silent run persistence-review --before .artifacts/base.schema.json --after docs/persistence-schema.json
40
40
  ```
41
41
 
42
+ 记录决策不会使转换从此比较中消失。`--check` 仅比较当前源码与已确认历史;记录完成后,它不能替代 base/head 评审,也不能证明人类已评审该变更。
43
+
42
44
  在报告旁记录这些文件对应的 commit。添加 `--json` 可获取结构化输出。此只读比较将共享变更与受影响的根类型归组,使用实际字面量 `kind`/`form` 值代替联合类型位置。无法唯一匹配的候选项保留为独立的新增与删除。兼容性部分复制每个根类型的权威分类结果;结构说明不替代确认检查。当前目录标签和声明名称是描述元数据;结构锚点和指纹标识类型。
43
45
 
44
46
  当前机器清单在 `roots` 中保存完整图。每个 `types` 条目包含 `digest`、`names` 和 `sources`;若根无法精确重建该图,条目还会保存显式 `schema`。读取器按摘要从根的子图恢复省略的图,并直接验证显式图,保留每个类型及其元数据。历史完整条目仍然可读。`formatVersion` 标识规范化规则;存储压缩不改变根指纹,也不需要确认记录。
@@ -46,7 +48,7 @@ pnpm --silent run persistence-review --before .artifacts/base.schema.json --afte
46
48
  <a id="acknowledge"></a>
47
49
  ## 1. 记录变更
48
50
 
49
- 先检查[已接受基线](../session-format-status.zh.md#finalization-record),保留其锁定记录。向后兼容的演进使用新的同版本确认记录;记录破坏性变更之前,先实现更高的写入器版本。
51
+ 先检查[已接受基线](../session-format-status.zh.md#finalization-record),保留其锁定记录。按[兼容性规则](../persistence-changes/README.zh.md#compatibility-rules)评估两个读取方向。若有安全解释或拒绝的证据,结构差异可以保留同一版本,不会自动要求更高的写入器版本。
50
52
 
51
53
  编写包含 `en` 和 `zh` 的本地 JSON 文件,两者分别包含 `summary`、`compatibility` 和 `verification` 字符串。以下输入描述一个经过验证的钩子审计字段从必选改为可选的变更。用你所做变更的事实替换说明和测试证据;CLI(命令行界面)不会证明这些声明。
52
54
 
@@ -57,12 +59,12 @@ pnpm --silent run persistence-review --before .artifacts/base.schema.json --afte
57
59
  "en": {
58
60
  "summary": "Makes the persisted hook audit decision optional.",
59
61
  "compatibility": "Existing records remain valid. Hook execution consumes HookOutput instead of replaying this audit field. Producers still write decisions, and absence does not imply pass.",
60
- "verification": "pnpm exec vitest run packages/hooks/hook-protocol/tests/events.spec.ts: 10 tests passed."
62
+ "verification": "pnpm exec vitest run packages/experimental/hook-protocol/tests/events.spec.ts: 10 tests passed."
61
63
  },
62
64
  "zh": {
63
65
  "summary": "将持久化的钩子审计决策改为可选。",
64
66
  "compatibility": "已有记录仍然有效。钩子执行消费 HookOutput,不回放此审计字段。写入方仍然记录决策,缺失不代表 pass。",
65
- "verification": "pnpm exec vitest run packages/hooks/hook-protocol/tests/events.spec.ts:10 个测试通过。"
67
+ "verification": "pnpm exec vitest run packages/experimental/hook-protocol/tests/events.spec.ts:10 个测试通过。"
66
68
  }
67
69
  }
68
70
  ```
@@ -73,9 +75,9 @@ pnpm --silent run persistence-review --before .artifacts/base.schema.json --afte
73
75
  pnpm --silent run persistence-changes --record 2026-09-11-poc-optional --prose .artifacts/persistence-change.prose.json --json
74
76
  ```
75
77
 
76
- 命令在写入前验证历史和双语说明、推断最低版本决策,并检查所需的头部版本递增。它生成记录对、完整的变更后 schema、两份目录、机器清单和配对记录。提交前审阅说明及返回的 `changes`、`roots` 和 `files`。省略 `--prose` 会创建未完成草稿,验证将拒绝它们,直到说明补齐。
78
+ 命令在写入前验证历史与双语说明、推断已明确允许的同版本决策,并检查显式兼容性决策。它生成记录对、完整的 after schema、两个目录、机器清单与配对记录。提交前检查说明及返回的 `changes`、`roots`、`files`。省略 `--prose` 会生成未完成草稿;说明填写完成前,验证会拒绝它们。
77
79
 
78
- 推断遵循[固定兼容性规则](../persistence-changes/README.zh.md#compatibility-rules),不会更改源码或放宽规则。需要升版本时,先遵循[添加会话格式版本](adding-a-session-format-version.zh.md)。记录必须包含其自身的 `SessionHeader.version` 递增转换;无关的历史升版本不能授权它。日常变更不创建另一条基线。
80
+ 对于标为 `requiresCompatibilityReview` 的变更,在确认记录的兼容性部分说明两个方向的读取器行为,并在验证部分记录已执行的检查。证据支持保持版本时,提供 `--decision same-version`;记录或更新被标记的变更时,若头版本未变且缺少显式决策,会以 `decision-required` 失败。仅凭结构差异不会推断升版本。实际头版本递增可以推断出 `version-bump`。若有效判别信息无法阻止不安全解释,遵循[添加会话格式版本](adding-a-session-format-version.zh.md),并选择 `--decision version-bump`。该记录必须包含自身的 `SessionHeader.version` 递增转换;无关的历史升版本不能授权它。日常变更不创建另一条基线。
79
81
 
80
82
  <a id="verify"></a>
81
83
  ## 2. 检查、提交并推送
@@ -99,14 +101,14 @@ pnpm run doc-sync
99
101
  pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --prose .artifacts/persistence-change.prose.json --json
100
102
  ```
101
103
 
102
- 命令刷新机器声明、schema、目录和配对。没有 `--prose` 时,它保留已有说明。更新会拒绝初始基线、其他记录所依赖的记录,以及已被定稿检查点锁定的记录。定稿检查点之外,目录不会推断审阅接受状态:保留已接受历史,并创建后继。
104
+ 命令刷新机器声明、schema、目录和配对。没有 `--prose` 时,它保留已有说明。根据完整转换重新评估说明,并为任何被标记的同版本更新提供 `--decision same-version`。更新会拒绝初始基线、其他记录所依赖的记录,以及已被定稿检查点锁定的记录。定稿检查点之外,目录不会推断审阅接受状态:保留已接受历史,并创建后继。
103
105
 
104
106
  集成产生竞争末端记录时,根据剩余历史更新尚未接受的记录,再重新评估最终差异。无关根的确认无需刷新。[机制决策](../../.agents/notes/implemented/process/2026-09-11-persistence-type-history.zh.md)解释为何保留完整快照和逐根前驱。
105
107
 
106
- 显式 `--decision` 仍是受检查的断言。若已有属性的值类型发生变化,下面这个故意错误的断言会在写入前失败:
108
+ 若已有属性的值类型变化需要评审,先修改说明文件中的兼容性与验证部分,解释实际的新转换及已执行检查。不要为不同变更复用先前必选改可选的说明。然后使用该说明与显式同版本选择更新记录:
107
109
 
108
110
  ```sh
109
- pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --decision same-version --json
111
+ pnpm --silent run persistence-changes --update 2026-09-11-poc-optional --decision same-version --prose .artifacts/persistence-change.prose.json --json
110
112
  ```
111
113
 
112
114
  <a id="dev-note"></a>
@@ -12,11 +12,11 @@
12
12
  en: 740e92e903ecb594
13
13
  zh: f934d3c9e5c56bfe
14
14
  /official-deepseek-llm-api-wire-extensions/body-extension-transaction:
15
- en: f0b1443c364a431c
16
- zh: 16d16ddf5c451e8e
15
+ en: 48001cfd1281a23b
16
+ zh: d410530ae8aa2823
17
17
  /official-deepseek-llm-api-wire-extensions/dsh-plugin-packages:
18
- en: 49d6f011e9d985a7
19
- zh: bbf61b4e4480c555
18
+ en: f89059050613f3e8
19
+ zh: da5cf2a4eeb81b75
20
20
  /official-deepseek-llm-api-wire-extensions/dsh-session-log:
21
21
  en: de1a3f2c377d74e3
22
22
  zh: 7c803345f71117c5
@@ -34,9 +34,9 @@ Credential failure happens before anonymous-user-id resolution, so an unauthoriz
34
34
 
35
35
  The adapter serializes the complete base body, including the exact `messages`, before it asks registered providers to prepare fields. A provider receives that immutable body, the request cancellation signal, and optional `sessionId` and auxiliary-call `purpose`. Returning `undefined` omits that provider's field for the request.
36
36
 
37
- Prepared JSON values are detached from provider-owned state, merged as top-level siblings of the base fields, and serialized in the same HTTP body. Preparation or collision failure prevents the request. If the merged body fails to serialize, the adapter sends the base body without any extension field, skips the acceptance transaction so contributors resend their state on a later request, and logs the omitted field names. A composition without the registry sends the unextended base body.
37
+ Prepared JSON values are detached from provider-owned state, merged as top-level siblings of the base fields, and serialized in the same HTTP body. A contributor whose preparation fails is omitted from that request, with only its first failure logged, while the other fields are still sent; a field that collides with a base field prevents the request. If the merged body fails to serialize, the adapter sends the base body without any extension field, skips the acceptance transaction so contributors resend their state on a later request, and logs the omitted field names. A composition without the registry sends the unextended base body.
38
38
 
39
- After the configured endpoint returns HTTP 2xx, the adapter runs the prepared `accept()` transaction before reading the SSE response body. Transport failures and non-2xx responses do not accept any contribution. An acceptance failure fails the model request even though the endpoint returned 2xx. Acceptance records endpoint-level HTTP success; it does not assert that an SSE stream completed or that the endpoint persisted an extension.
39
+ After the configured endpoint returns HTTP 2xx, the adapter runs the prepared `accept()` transaction before reading the SSE response body. Transport failures and non-2xx responses do not accept any contribution. An acceptance failure is logged and does not fail the model request; the contributor resends its unaccepted state on a later request. Acceptance records endpoint-level HTTP success; it does not assert that an SSE stream completed or that the endpoint persisted an extension.
40
40
 
41
41
  ## `dsh_plugin_packages`
42
42
 
@@ -61,11 +61,11 @@ After the configured endpoint returns HTTP 2xx, the adapter runs the prepared `a
61
61
  | `version` | `1` | Schema version for `dsh_plugin_packages` |
62
62
  | `packages` | array | Complete active set for this request |
63
63
  | `packages[].name` | string | Exact non-empty npm package name from the owning manifest |
64
- | `packages[].version` | string | Exact non-empty package version from the same manifest |
64
+ | `packages[].version` | optional string | Exact non-blank package version from the same manifest; absent when unavailable |
65
65
 
66
- Every request re-reads active non-group Loader entries from the host tree and, when available for the request Session, its standing agent-preset tree. Relative and absolute modules use their nearest owning manifest; bare package entries follow the Loader resolution base that activated them. A named manifest without a non-empty version fails request preparation.
66
+ Every request re-reads active non-group Loader entries from the host tree and, when available for the request Session, its standing agent-preset tree. Relative and absolute modules use their nearest owning manifest; bare package entries follow the Loader resolution base that activated them. A named manifest without a non-blank string version contributes `{ name }`, regardless of `private`. Missing names and unreadable manifests omit only the affected entries; package metadata does not block requests.
67
67
 
68
- The sender deduplicates exact `(name, version)` pairs and sorts first by `name`, then by `version`, with a locale-independent text comparison. Simultaneously active versions of one package remain separate entries. Receivers must not collapse the array by package name or infer package activation from array order.
68
+ The sender deduplicates exact `(name, optional version)` pairs and sorts first by `name`, then by `version`, with a locale-independent text comparison and absent versions first. Simultaneously active versions of one package remain separate entries, including a name-only entry. Receivers must accept absent versions, must not collapse the array by package name, and must not infer package activation from array order.
69
69
 
70
70
  Disabled, pending, failed, unloading, disposed, and structural Loader entries are absent. Ordinary dependencies, loose modules without a named owning package, programmatically mounted child fibers, and in-memory dynamic plugins are also absent because they have no authoritative Loader-backed package identity.
71
71
 
@@ -34,9 +34,9 @@
34
34
 
35
35
  适配器先序列化包括确切 `messages` 在内的完整基础正文,再让已注册提供方准备字段。提供方会收到该不可变正文、请求取消信号,以及可选的 `sessionId` 和辅助调用 `purpose`。提供方返回 `undefined` 时,本次请求会省略其字段。
36
36
 
37
- 系统将已准备的 JSON 值与提供方持有的状态分离,再将其作为基础字段的顶层同级成员合并,并序列化到同一个 HTTP 正文中。准备失败或冲突会阻止请求。合并后的正文无法序列化时,适配器发送不含任何扩展字段的基础正文,跳过接受事务,让贡献方在之后的请求中重发自身状态,并记录被省略的字段名。组合未挂载注册表时,适配器发送未经扩展的基础正文。
37
+ 系统将已准备的 JSON 值与提供方持有的状态分离,再将其作为基础字段的顶层同级成员合并,并序列化到同一个 HTTP 正文中。某个贡献方准备失败时,系统在该次请求中省略其字段,且只记录首次失败,其余字段照常发送;与基础字段冲突的字段会阻止请求。合并后的正文无法序列化时,适配器发送不含任何扩展字段的基础正文,跳过接受事务,让贡献方在之后的请求中重发自身状态,并记录被省略的字段名。组合未挂载注册表时,适配器发送未经扩展的基础正文。
38
38
 
39
- 已配置端点返回 HTTP 2xx 后,适配器会在读取 SSE 正文之前运行已准备的 `accept()` 事务。传输失败和非 2xx 响应不会接受任何贡献。即使端点返回 2xx,接受失败仍会使模型请求失败。接受仅记录端点级 HTTP 成功,不表示 SSE 流已完整结束,也不表示端点已持久化扩展。
39
+ 已配置端点返回 HTTP 2xx 后,适配器会在读取 SSE 正文之前运行已准备的 `accept()` 事务。传输失败和非 2xx 响应不会接受任何贡献。接受失败会记录告警,但不会使模型请求失败;贡献方会在之后的请求中重发未被接受的状态。接受仅记录端点级 HTTP 成功,不表示 SSE 流已完整结束,也不表示端点已持久化扩展。
40
40
 
41
41
  ## `dsh_plugin_packages`
42
42
 
@@ -61,11 +61,11 @@
61
61
  | `version` | `1` | `dsh_plugin_packages` 的 schema 版本 |
62
62
  | `packages` | 数组 | 本次请求的完整存活集合 |
63
63
  | `packages[].name` | 字符串 | 来自所属 manifest(元数据清单)的确切非空 npm 包名 |
64
- | `packages[].version` | 字符串 | 来自同一 manifest 的确切非空包版本 |
64
+ | `packages[].version` | 可选字符串 | 来自同一 manifest 的确切非空白包版本;不可用时省略 |
65
65
 
66
- 每个请求都会重新读取宿主树中的存活非分组 Loader 配置项;请求会话存在 standing agent-preset 树时,也会读取该树。相对与绝对模块使用距离自身最近的所属 manifest;裸包配置项使用激活自身的 Loader 解析基准。具名 manifest 未提供非空版本时,请求准备会失败。
66
+ 每个请求都会重新读取宿主树中的存活非分组 Loader 配置项;请求会话存在 standing agent-preset 树时,也会读取该树。相对与绝对模块使用距离自身最近的所属 manifest;裸包配置项使用激活自身的 Loader 解析基准。具名 manifest 的版本不是非空白字符串时,会贡献 `{ name }`,不受 `private` 影响。名称缺失或 manifest 不可读时,只省略对应配置项;包元数据不会阻塞请求。
67
67
 
68
- 发送方会对确切 `(name, version)` 组合去重,并使用与 locale 无关的文本比较,先按 `name`、再按 `version` 排序。同一包的多个同时存活版本会保留为独立配置项。接收方不得按包名折叠该数组,也不得根据数组顺序推断包的激活关系。
68
+ 发送方会对确切 `(name, 可选 version)` 组合去重,并使用与 locale 无关的文本比较,先按 `name`、再按 `version` 排序,缺失版本排在前面。同一包的多个同时存活版本会保留为独立配置项,包括只有名称的配置项。接收方必须接受版本缺失,不得按包名折叠该数组,也不得根据数组顺序推断包的激活关系。
69
69
 
70
70
  该清单不包含已禁用、pending、failed、unloading、disposed 和结构性 Loader 配置项。普通依赖、没有具名所属包的松散模块、以编程方式挂载的子 fiber,以及内存动态插件也不在其中,因为它们没有权威的 Loader 包来源信息。
71
71
 
@@ -18,8 +18,8 @@
18
18
  en: 5c906be504b88a65
19
19
  zh: 8f428f59a87bb1a8
20
20
  /defensive-patterns/contain-callback-exceptions-in-the-dispatcher:
21
- en: ae1788e76190db2c
22
- zh: a55ab7473bb0c8dd
21
+ en: 3275390293995f44
22
+ zh: 4d143e99a2a7c8cb
23
23
  /defensive-patterns/never-hand-untrusted-output-the-ambient-environment-or-predictable-paths:
24
24
  en: 09ad9d6433026468
25
25
  zh: cc0ba1a52859bb08
@@ -22,7 +22,7 @@ A teardown that issues kills/aborts but returns before the work stops leaves orp
22
22
 
23
23
  ## Contain callback exceptions in the dispatcher
24
24
 
25
- A user-supplied listener that throws must not reject the promise it runs inside or starve the listeners after it. Wrap the dispatch loop in try/catch and log; one bad subscriber never breaks core lifecycle.
25
+ Catch and report each listener's exception without rejecting the dispatch promise or starving later listeners. The listener's owner must handle state it mutates under the [error-handling rules](../.agents/skills/dsh-error-handling/SKILL.md#catch-recover-or-stop); catching alone does not restore state.
26
26
 
27
27
  ## Never hand untrusted output the ambient environment or predictable paths
28
28
 
@@ -24,7 +24,7 @@
24
24
 
25
25
  ## 在分发器中隔离回调异常
26
26
 
27
- 用户提供的监听器如果抛出异常,不得导致它所在的 promise 被 reject,也不得饿死排在它后面的监听器。请用 try/catch 包裹分发循环并记录日志;一个行为不当的订阅者绝不能破坏核心生命周期。
27
+ 逐个捕获并报告监听器的异常,不让分发 promise 被 reject,也不让后续监听器失去执行机会。监听器的所有者必须按[错误处理规范](../.agents/skills/dsh-error-handling/SKILL.md#catch-recover-or-stop)处置其修改的状态;仅捕获异常不会恢复状态。
28
28
 
29
29
  ## 绝不将环境变量或可预测路径暴露给不可信输出
30
30
 
@@ -9,8 +9,8 @@
9
9
  en: 5207d17725c07a27
10
10
  zh: 258884c4300ac63a
11
11
  /development-guide/setup-tutorial/prerequisites:
12
- en: a8543c278338a02d
13
- zh: b5790c5fea7c0bc6
12
+ en: ae47d95cd48bbb1d
13
+ zh: 2378e6ed3305e28d
14
14
  /development-guide/setup-tutorial/windows-and-wsl-2:
15
15
  en: e86be579be6f1813
16
16
  zh: 14f6a220337d0861
@@ -21,8 +21,8 @@
21
21
  en: 3221d1076554001f
22
22
  zh: 29f166be6a5c04d9
23
23
  /development-guide/contributor-reference/typescript-project-layout:
24
- en: 42c03e89df4379e3
25
- zh: 9df43176aa64d047
24
+ en: e3327c5492a593cb
25
+ zh: d43a5edcb11523ae
26
26
  /development-guide/contributor-reference/environment-variables:
27
27
  en: dba2c72ee6ffa930
28
28
  zh: b65c27fbb9129ec8
@@ -30,8 +30,8 @@
30
30
  en: dc98eda4f4021feb
31
31
  zh: b08766708803cf10
32
32
  /development-guide/contributor-reference/ci-gates:
33
- en: 8fa1aca14c548969
34
- zh: a2bd1199fa7f7a8b
33
+ en: b64a914e41b1d285
34
+ zh: 6c031b507c3c0e84
35
35
  /development-guide/contributor-reference/daily-commands:
36
36
  en: 08aa6ec1cdabfeb7
37
37
  zh: dcce5ae9d3c829d0
@@ -10,7 +10,7 @@ The setup tutorial takes a new contributor from prerequisites to a checked check
10
10
 
11
11
  - Node.js supports 22.19+ and 24+. CI covers 22.19, 24, and 26; see the [Node engine floor Agent Note](../.agents/notes/implemented/process/2026-07-06-node-engine-floor.md).
12
12
  - Node.js TypeScript type stripping enabled. The repository build scripts load `tsdown.config.ts` with tsdown's native config loader, so they fail when `--no-experimental-strip-types` is in `NODE_OPTIONS` or the Node.js build lacks TypeScript support; `pnpm run build` checks this first and names the cause.
13
- - Corepack-enabled pnpm. The repo pins `pnpm@11.7.0` in `package.json`; run `corepack enable` if `pnpm --version` does not resolve through Corepack.
13
+ - Corepack-enabled pnpm. The repo pins `pnpm@11.28.5` in `package.json`; run `corepack enable` if `pnpm --version` does not resolve through Corepack.
14
14
  - Git 2.26 or newer; hook setup enables Git's worktree-specific configuration extension.
15
15
  - Optional: a DeepSeek API key for the Web, headless, and ACP automation demos and real-API e2e tests.
16
16
 
@@ -85,6 +85,8 @@ tsdown --env.DSH_BUILD_FACE client
85
85
  pnpm run build:web
86
86
  ```
87
87
 
88
+ `pnpm run build --artifacts-only` emits the same project and application artifacts while checking and compiling only the existing package references of each compiler face. Required Linux and Windows normal builds and public `typecheck` also check the repository-wide test and script programs. CI benchmark preparation additionally uses `--noCheck` for its disposable library outputs, relying on those required builds for diagnostics; other artifact builders keep package checking ([rationale](../.agents/notes/implemented/process/2026-10-05-pr-artifact-typechecks.md)).
89
+
88
90
  Both tsdown passes match `vendor/*`, `packages/*/*`, and `apps/cli`; the Host pass also matches `apps/desktop-host`. They neither scan build artifacts to discover Client packages nor maintain a Host/Client package filter list. Package-local tsdown configs select entries for the current phase through `DSH_BUILD_FACE`: an ordinary Client plugin produces both its Node loader and browser bundle during the Client phase; `api-remotes` uses `hostPhase: true` to produce its Host entry early and only its browser bundle during the Client phase. Tsdown consumes only the JavaScript emitted to `lib/types` by the preceding tsc phase. Tsdown builds the matched workspace members concurrently, so `apps/desktop`, whose main bundle inlines workspace devDependencies from their `lib/` output, bundles in its own step after the Host pass ([Desktop README](../apps/desktop/README.md#bundled-workspace-dependencies)).
89
91
 
90
92
  Typert runs only during Host tsdown, seeded by `tsconfig.host.json`. It analyzes Host types and generates both Host reflection artifacts and the Host-for-Client Remote projection; Client tsdown does not start Typert. Consequently, `pnpm run typecheck` runs the complete Host lib phase before Client tsc, while `pnpm run build` continues through Client tsdown and the Web build.
@@ -132,7 +134,7 @@ Contributors can opt into the comprehensive local gate set with `pnpm run check:
132
134
 
133
135
  ### CI gates
134
136
 
135
- The keyless [CI workflow](../.github/workflows/ci.yml) groups independent gates into broad lanes and runs a smaller compatibility signal across supported Node versions. Artifact consumers wait for one build within their lane. Required benchmarks run separately on standard GitHub-hosted Linux; the [benchmark runner reference](../benchmarks/AGENTS.md) owns routing and the job timeout. The separate real-API workflow runs `pnpm run test:e2e` with its configured worker bound. See [scripts/run-gates.ts](../scripts/run-gates.ts) and the workflow files for the current gate and job inventory.
137
+ The keyless [CI workflow](../.github/workflows/ci.yml) groups independent gates into broad lanes and runs a smaller compatibility signal across supported Node versions. Artifact consumers wait for one build within their lane. Coverage partitions reuse file timings scoped to their platform and runner pool to balance work within the configured worker limit. Required benchmarks run separately on standard GitHub-hosted Linux; the [benchmark runner reference](../benchmarks/AGENTS.md) owns routing and the job timeout. The separate real-API workflow runs `pnpm run test:e2e` with its configured worker bound. See [scripts/run-gates.ts](../scripts/run-gates.ts) and the workflow files for the current gate and job inventory.
136
138
 
137
139
  The credential-free dsh dependency-layout and dsh/vendor pack rehearsals use the existing Linux self-hosted pool only when `DSH_CI_FAILOVER_LINUX=selfhosted` and the event is a trusted master push or same-repository, non-fork, non-Dependabot pull request. All other cases, including manual dispatch, use `ubuntu-24.04`; manual publication stays hosted. See the [release rehearsal runner reference](../.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.md) for persistent-store isolation and fallback limits.
138
140
 
@@ -12,7 +12,7 @@
12
12
 
13
13
  - Node.js 支持 22.19+ 与 24+。CI 覆盖 22.19、24 和 26;见 [Node 引擎下限 Agent Note](../.agents/notes/implemented/process/2026-07-06-node-engine-floor.zh.md)。
14
14
  - 启用 Node.js TypeScript 类型剥离。仓库构建脚本用 tsdown 的 native 配置加载器加载 `tsdown.config.ts`,因此当 `NODE_OPTIONS` 含 `--no-experimental-strip-types` 或 Node.js 构建缺少 TypeScript 支持时会失败;`pnpm run build` 会先检查这一条件并指出原因。
15
- - 启用了 Corepack 的 pnpm。仓库在 `package.json` 中固定使用 `pnpm@11.7.0`;如果 `pnpm --version` 无法通过 Corepack 解析,请先运行 `corepack enable`。
15
+ - 启用了 Corepack 的 pnpm。仓库在 `package.json` 中固定使用 `pnpm@11.28.5`;如果 `pnpm --version` 无法通过 Corepack 解析,请先运行 `corepack enable`。
16
16
  - Git 2.26 或更高版本;钩子设置会启用 Git 的 worktree 专属配置扩展。
17
17
  - 可选:一个 DeepSeek API key,用于 Web、headless 和 ACP(Agent Client Protocol)自动化 agent(智能体)演示以及真实 API 的 e2e 测试。
18
18
 
@@ -89,6 +89,8 @@ tsdown --env.DSH_BUILD_FACE client
89
89
  pnpm run build:web
90
90
  ```
91
91
 
92
+ `pnpm run build --artifacts-only` 产出相同的 project 和应用产物,但只检查并编译各 compiler face 的现有包 reference。必需的 Linux 与 Windows 普通构建以及公开 `typecheck` 还检查仓库级测试和脚本 program。CI benchmark 准备阶段还对其临时 library 输出使用 `--noCheck`,由这些必需构建负责诊断;其他产物 builder 保留包检查([理由](../.agents/notes/implemented/process/2026-10-05-pr-artifact-typechecks.zh.md))。
93
+
92
94
  两次 tsdown 都匹配 `vendor/*`、`packages/*/*` 与 `apps/cli`,Host 阶段另外匹配 `apps/desktop-host`;两者都不扫描构建产物来发现 Client 包,也不维护 Host/Client 包过滤表。包内 tsdown 配置根据 `DSH_BUILD_FACE` 决定当前阶段的入口:普通 Client 插件在 Client 阶段同时生成 Node loader 与 browser bundle;`api-remotes` 通过 `hostPhase: true` 提前生成 Host 入口,再在 Client 阶段只生成 browser bundle。tsdown 只消费 `lib/types` 中由前置 tsc 发射的 JavaScript。tsdown 并发构建匹配到的 workspace 成员;`apps/desktop` 的主进程 bundle 需要从工作区 devDependencies 的 `lib/` 产物内联这些包,因此在 Host 阶段之后单独一步打 bundle([Desktop README](../apps/desktop/README.zh.md#bundled-workspace-dependencies))。
93
95
 
94
96
  Typert 只在 Host tsdown 中以 `tsconfig.host.json` 为种子运行。它分析 Host 类型并生成 Host 反射产物及 Host-for-Client Remote 投影;Client tsdown 不启动 Typert。`pnpm run typecheck` 因此先执行完整 Host lib 阶段,再运行 Client tsc;`pnpm run build` 继续执行 Client tsdown 和 Web 构建。
@@ -136,7 +138,7 @@ vendor manifest 守卫检查 `vendor/*/src` 下的改动是否连同对应的 `v
136
138
 
137
139
  ### CI 门禁
138
140
 
139
- keyless [CI 工作流](../.github/workflows/ci.yml) 将独立门禁分组到若干宽粒度 lane,并在受支持的 Node 版本上运行一组较小的兼容性检查。产物消费方在各自 lane 内等待一次 build。必需 benchmark 在标准 GitHub 托管 Linux 上独立运行;[benchmark 运行器说明](../benchmarks/AGENTS.md)拥有路由及 job 超时。单独的真实 API 工作流按其配置的 worker 上限运行 `pnpm run test:e2e`。当前门禁和 job 清单以 [scripts/run-gates.ts](../scripts/run-gates.ts) 和工作流文件为准。
141
+ keyless [CI 工作流](../.github/workflows/ci.yml) 将独立门禁分组到若干宽粒度 lane,并在受支持的 Node 版本上运行一组较小的兼容性检查。产物消费方在各自 lane 内等待一次 build。覆盖率分区复用按平台和运行器池隔离的文件耗时,在配置的 worker 上限内均衡工作量。必需 benchmark 在标准 GitHub 托管 Linux 上独立运行;[benchmark 运行器说明](../benchmarks/AGENTS.md)拥有路由及 job 超时。单独的真实 API 工作流按其配置的 worker 上限运行 `pnpm run test:e2e`。当前门禁和 job 清单以 [scripts/run-gates.ts](../scripts/run-gates.ts) 和工作流文件为准。
140
142
 
141
143
  不带凭据的 dsh 依赖布局检查与 dsh/vendor 打包演练仅在 `DSH_CI_FAILOVER_LINUX=selfhosted`,且事件为受信任的 master 推送或同仓库、非 fork、非 Dependabot 拉取请求时使用现有 Linux 自托管池。其余情况(包括手动触发)均使用 `ubuntu-24.04`;手动发布仍使用托管运行器。持久化存储隔离与回退限制见[发布演练运行器说明](../.agents/notes/implemented/process/2026-07-26-ci-failover-runbook.zh.md)。
142
144