@namewta/speculo 1.0.24 → 2.0.2

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 (1055) hide show
  1. package/README.md +37 -98
  2. package/THIRD-PARTY-NOTICES.md +69 -0
  3. package/dist/src/agent-files.js +9 -36
  4. package/dist/src/agent-files.js.map +1 -1
  5. package/dist/src/agent-skills.d.ts +57 -57
  6. package/dist/src/agent-skills.js +218 -513
  7. package/dist/src/agent-skills.js.map +1 -1
  8. package/dist/src/assets.d.ts +21 -0
  9. package/dist/src/assets.js +111 -0
  10. package/dist/src/assets.js.map +1 -0
  11. package/dist/src/cli.js +44 -29
  12. package/dist/src/cli.js.map +1 -1
  13. package/dist/src/coordination.d.ts +23 -0
  14. package/dist/src/coordination.js +60 -0
  15. package/dist/src/coordination.js.map +1 -0
  16. package/dist/src/doctor.js +39 -20
  17. package/dist/src/doctor.js.map +1 -1
  18. package/dist/src/index.d.ts +22 -7
  19. package/dist/src/index.js +60 -35
  20. package/dist/src/index.js.map +1 -1
  21. package/dist/src/install-ui.d.ts +61 -0
  22. package/dist/src/install-ui.js +268 -0
  23. package/dist/src/install-ui.js.map +1 -0
  24. package/dist/src/interaction.d.ts +5 -0
  25. package/dist/src/interaction.js +10 -0
  26. package/dist/src/interaction.js.map +1 -0
  27. package/dist/src/paths.d.ts +17 -4
  28. package/dist/src/paths.js +103 -17
  29. package/dist/src/paths.js.map +1 -1
  30. package/dist/src/refresh.d.ts +16 -2
  31. package/dist/src/refresh.js +66 -85
  32. package/dist/src/refresh.js.map +1 -1
  33. package/dist/src/runtime-entry.d.ts +4 -0
  34. package/dist/src/runtime-entry.js +5 -0
  35. package/dist/src/runtime-entry.js.map +1 -0
  36. package/dist/src/specdev-artifacts.d.ts +77 -0
  37. package/dist/src/specdev-artifacts.js +323 -0
  38. package/dist/src/specdev-artifacts.js.map +1 -0
  39. package/dist/src/structured.d.ts +1 -7
  40. package/dist/src/structured.js +18 -242
  41. package/dist/src/structured.js.map +1 -1
  42. package/dist/src/transaction.d.ts +5 -10
  43. package/dist/src/transaction.js +105 -171
  44. package/dist/src/transaction.js.map +1 -1
  45. package/dist/src/workflows.js +25 -87
  46. package/dist/src/workflows.js.map +1 -1
  47. package/package.json +18 -9
  48. package/template/.speculo/README.md +24 -27
  49. package/template/.speculo/refresh-contract.json +4 -6
  50. package/template/.speculo/workspace.json +10 -7
  51. package/template/AGENTS.md +8 -5
  52. package/template/canonical/README.md +6 -0
  53. package/template/canonical/canonical-specdev-goal-plan.md +2517 -681
  54. package/template/canonical/canonical-specdev-grill-with-docs.md +3091 -548
  55. package/template/canonical/canonical-specdev-spec.md +2889 -455
  56. package/template/canonical/canonical-specdev-tickets.md +2914 -718
  57. package/template/canonical/canonical-specdev-wayfinder.md +3526 -466
  58. package/template/commands/archive-and-consolidate/COMMAND.md +30 -0
  59. package/template/commands/docs-sync/COMMAND.md +25 -0
  60. package/template/commands/docs-sync/assets/agents-template.md +19 -0
  61. package/template/commands/docs-sync/assets/report-template.md +32 -0
  62. package/template/commands/docs-sync/references/agents-contract.md +27 -0
  63. package/template/commands/docs-sync/references/changelog-contract.md +39 -0
  64. package/template/commands/docs-sync/references/git-state-contract.md +39 -0
  65. package/template/commands/docs-sync/references/handbook-discovery.md +11 -0
  66. package/template/commands/docs-sync/references/operation-contract.md +62 -0
  67. package/template/commands/docs-sync/references/readme-contract.md +24 -0
  68. package/template/commands/docs-sync/references/workflow-scope-contract.md +32 -0
  69. package/template/commands/engineering-standards-builder/COMMAND.md +163 -0
  70. package/template/commands/engineering-standards-builder/manifest.txt +118 -0
  71. package/template/commands/engineering-standards-builder/scripts/validate-builder.mjs +268 -0
  72. package/template/commands/git-history-squash/COMMAND.md +72 -0
  73. package/template/commands/git-history-squash/references/operation-contract.md +99 -0
  74. package/template/commands/git-history-squash/references/rewrite-contract.md +127 -0
  75. package/template/commands/git-history-squash/scripts/git-history-squash.mjs +1210 -0
  76. package/template/commands/git-repository-audit/COMMAND.md +80 -0
  77. package/template/commands/handoff/COMMAND.md +61 -0
  78. package/template/commands/manifest.json +15 -0
  79. package/template/commands/retro/COMMAND.md +72 -0
  80. package/template/commands/source-code-zip/COMMAND.md +58 -0
  81. package/template/commands/status/COMMAND.md +14 -0
  82. package/template/commands/upstream-fork-sync/COMMAND.md +85 -0
  83. package/template/commands/upstream-fork-sync/references/report-contract.md +40 -0
  84. package/template/commands/upstream-fork-sync/references/repository-contract.md +54 -0
  85. package/template/commands/upstream-fork-sync/references/state-schema.md +55 -0
  86. package/template/lib/design-validators.mjs +5460 -0
  87. package/template/lib/legacy-status-validator.cjs +3238 -0
  88. package/template/lib/speculo-runtime.mjs +7949 -0
  89. package/template/references/coordination/coordination-contract.md +50 -0
  90. package/template/references/coordination/exchange/external-web.md +132 -0
  91. package/template/references/coordination/exchange/source-package.md +239 -0
  92. package/template/references/coordination/modes/cli.md +11 -0
  93. package/template/references/coordination/modes/herdr.md +27 -0
  94. package/template/references/coordination/modes/orca.md +13 -0
  95. package/template/references/coordination/project-facts.example.json +5 -0
  96. package/template/references/coordination/project-facts.schema.json +113 -0
  97. package/template/references/coordination/result-and-recovery.md +36 -0
  98. package/template/references/coordination/task-brief.md +43 -0
  99. package/template/references/retrospective/references/issue-drafting-sop.md +69 -0
  100. package/template/references/retrospective/retrospective-contract.md +37 -0
  101. package/template/references/writing-for-agents/GLOSSARY.md +201 -0
  102. package/template/references/writing-for-agents/references/current-facts-docs.md +35 -0
  103. package/template/references/writing-for-agents/references/document-contract.md +25 -0
  104. package/template/references/writing-for-agents/writing-contract.md +17 -0
  105. package/template/workflows/learning/SKILL.md +40 -0
  106. package/template/workflows/learning/common/rules/domain-runtime.md +94 -0
  107. package/template/workflows/learning/common/rules/question-map-contract.md +1 -1
  108. package/template/workflows/learning/common/skills/topic-synthesis/SKILL.md +2 -0
  109. package/template/workflows/learning/common/tools/validate-learning.mjs +38 -50
  110. package/template/workflows/learning/learning-a-archive/SKILL.md +32 -0
  111. package/template/workflows/learning/learning-a-assess-and-plan/SKILL.md +40 -0
  112. package/template/workflows/learning/learning-c-consolidate/SKILL.md +40 -0
  113. package/template/workflows/learning/learning-g-goal/SKILL.md +63 -0
  114. package/template/workflows/learning/learning-g-goal/assets/goal-plan-template.md +310 -0
  115. package/template/workflows/learning/learning-g-goal/assets/progress-template.md +19 -0
  116. package/template/workflows/learning/learning-g-goal/references/coverage-bar.md +36 -0
  117. package/template/workflows/learning/learning-g-goal/references/external-goal-runner.md +54 -0
  118. package/template/workflows/learning/learning-g-goal/references/lead-orchestration.md +52 -0
  119. package/template/workflows/learning/learning-g-goal/references/orchestration-protocol.md +26 -0
  120. package/template/workflows/learning/learning-g-goal/references/planning-modes.md +19 -0
  121. package/template/workflows/learning/learning-h-homework/SKILL.md +38 -0
  122. package/template/workflows/learning/learning-i-init-setup/SKILL.md +34 -0
  123. package/template/workflows/learning/learning-l-lesson/SKILL.md +43 -0
  124. package/template/workflows/learning/learning-q-question/SKILL.md +48 -0
  125. package/template/workflows/learning/learning-q-question/references/exploration-mode.md +35 -0
  126. package/template/workflows/learning/learning-q-question/references/tutor-mode.md +31 -0
  127. package/template/workflows/learning/learning-r-review/SKILL.md +37 -0
  128. package/template/workflows/learning/manifest.json +103 -1
  129. package/template/workflows/media/SKILL.md +37 -0
  130. package/template/workflows/media/common/rules/domain-runtime.md +66 -0
  131. package/template/workflows/media/common/tools/media-tools.mjs +1 -1
  132. package/template/workflows/media/common/tools/validate-media.mjs +12 -11
  133. package/template/workflows/media/manifest.json +21 -2
  134. package/template/workflows/media/media-b-brief/SKILL.md +19 -0
  135. package/template/workflows/media/media-d-deconstruct/SKILL.md +19 -0
  136. package/template/workflows/media/media-h-hand-drawn/SKILL.md +19 -0
  137. package/template/workflows/media/media-i-init-setup/SKILL.md +19 -0
  138. package/template/workflows/media/media-p-publish-draft/SKILL.md +19 -0
  139. package/template/workflows/media/media-r-retro/SKILL.md +19 -0
  140. package/template/workflows/media/media-v-video/SKILL.md +19 -0
  141. package/template/workflows/ops/SKILL.md +37 -0
  142. package/template/workflows/ops/common/WORKSPACE-USAGE.md +2 -2
  143. package/template/workflows/ops/common/rules/domain-runtime.md +54 -0
  144. package/template/workflows/ops/common/tests/test_ops.mjs +12 -10
  145. package/template/workflows/ops/common/tests/test_ops_bootstrap.mjs +10 -10
  146. package/template/workflows/ops/common/tests/test_ops_onboarding.mjs +2 -2
  147. package/template/workflows/ops/common/tests/test_ops_workspace.mjs +6 -6
  148. package/template/workflows/ops/common/tools/opslib/workspace.mjs +2 -2
  149. package/template/workflows/ops/common/tools/validate-ops.mjs +4 -4
  150. package/template/workflows/ops/manifest.json +17 -2
  151. package/template/workflows/ops/ops-d-project-deploy/SKILL.md +41 -0
  152. package/template/workflows/ops/ops-h-host-manage/SKILL.md +35 -0
  153. package/template/workflows/ops/ops-i-initialize/SKILL.md +29 -0
  154. package/template/workflows/ops/ops-s-server-connect/SKILL.md +29 -0
  155. package/template/workflows/ops/ops-v-inventory-view/SKILL.md +33 -0
  156. package/template/workflows/person/SKILL.md +32 -0
  157. package/template/workflows/person/manifest.json +57 -1
  158. package/template/workflows/person/person-m-mao-zedong-cognitive-os/SKILL.md +43 -0
  159. package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/README.md +17 -0
  160. package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/src/SUMMARY.md +231 -0
  161. package/template/workflows/person/person-m-mao-zedong-cognitive-os/books/src//347/233/256/345/275/225.md +243 -0
  162. package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/activate.md +83 -0
  163. package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/deliver.md +116 -0
  164. package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/diagnose.md +83 -0
  165. package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/mobilize.md +85 -0
  166. package/template/workflows/person/person-m-mao-zedong-cognitive-os/references/strategize.md +76 -0
  167. package/template/workflows/person/person-s-steelman-deliberation/SKILL.md +114 -0
  168. package/template/workflows/person/person-s-steelman-deliberation/assets/canonical-body.md +518 -0
  169. package/template/workflows/person/person-s-steelman-deliberation/references/state-and-publication.md +86 -0
  170. package/template/workflows/person/{S-steelman-deliberation/tools → person-s-steelman-deliberation/scripts}/validate-steelman-change.mjs +0 -0
  171. package/template/workflows/specdev/SKILL.md +51 -0
  172. package/template/workflows/specdev/common/README.md +3 -3
  173. package/template/workflows/specdev/common/rules/activation-and-memory.md +5 -1
  174. package/template/workflows/specdev/common/rules/adr-format.md +3 -3
  175. package/template/workflows/specdev/common/rules/agent-experience.md +7 -1
  176. package/template/workflows/specdev/common/rules/artifact-contract.md +23 -16
  177. package/template/workflows/specdev/common/rules/change-completion.md +27 -6
  178. package/template/workflows/specdev/common/rules/design-contract.md +51 -0
  179. package/template/workflows/specdev/common/rules/design-it-twice.md +9 -9
  180. package/template/workflows/specdev/common/rules/design-portability.md +48 -0
  181. package/template/workflows/specdev/common/rules/deviation-control.md +3 -3
  182. package/template/workflows/specdev/common/rules/documentation-standard.md +5 -1
  183. package/template/workflows/specdev/common/rules/domain-modeling.md +1 -1
  184. package/template/workflows/specdev/common/rules/domain-runtime.md +35 -0
  185. package/template/workflows/specdev/common/rules/error-handling.md +5 -1
  186. package/template/workflows/specdev/common/rules/evidence-and-verification.md +3 -3
  187. package/template/workflows/specdev/common/rules/execution-policy.md +28 -0
  188. package/template/workflows/specdev/common/rules/operating-governance.md +4 -4
  189. package/template/workflows/specdev/common/rules/parent-implementation-orchestration.md +3 -3
  190. package/template/workflows/specdev/common/rules/path-ownership.md +6 -6
  191. package/template/workflows/specdev/common/rules/path-reference-contract.md +15 -6
  192. package/template/workflows/specdev/common/rules/readiness-and-depth.md +6 -1
  193. package/template/workflows/specdev/common/rules/test-reliability.md +4 -0
  194. package/template/workflows/specdev/common/rules/workflow-routing.md +4 -4
  195. package/template/workflows/specdev/common/rules/workflow-state-and-lifecycle.md +26 -81
  196. package/template/workflows/specdev/common/schemas/change-design.schema.json +254 -0
  197. package/template/workflows/specdev/common/schemas/config.schema.json +4 -4
  198. package/template/workflows/specdev/common/schemas/goal-plan.schema.json +144 -23
  199. package/template/workflows/specdev/common/schemas/implementation-plan.schema.json +139 -24
  200. package/template/workflows/specdev/common/schemas/project-design.schema.json +164 -0
  201. package/template/workflows/specdev/common/schemas/prototype-browser-evidence.schema.json +153 -0
  202. package/template/workflows/specdev/common/schemas/ticket.schema.json +40 -0
  203. package/template/workflows/specdev/common/skills/code-review/SKILL.md +11 -5
  204. package/template/workflows/specdev/common/skills/code-review/references/result-reuse.md +2 -2
  205. package/template/workflows/specdev/common/skills/code-review/references/reviewer-contracts.md +2 -2
  206. package/template/workflows/specdev/common/skills/code-review/references/source-discovery.md +3 -1
  207. package/template/workflows/specdev/common/skills/dev-worktree/SKILL.md +11 -11
  208. package/template/workflows/specdev/common/skills/dev-worktree/references/create.md +20 -12
  209. package/template/workflows/specdev/common/skills/dev-worktree/references/finalize.md +13 -13
  210. package/template/workflows/specdev/common/skills/plan-quality-review/SKILL.md +1 -1
  211. package/template/workflows/specdev/common/skills/research/SKILL.md +1 -1
  212. package/template/workflows/specdev/common/tools/README.md +21 -5
  213. package/template/workflows/specdev/common/tools/change-artifacts.mjs +164 -0
  214. package/template/workflows/specdev/common/tools/design-artifacts.mjs +277 -0
  215. package/template/workflows/specdev/common/tools/engineering-evidence.mjs +3 -3
  216. package/template/workflows/specdev/common/tools/plan-contract.mjs +168 -17
  217. package/template/workflows/specdev/common/tools/publish-design.mjs +341 -0
  218. package/template/workflows/specdev/common/tools/review-scope.mjs +49 -6
  219. package/template/workflows/specdev/common/tools/tests/engineering.test.mjs +19 -21
  220. package/template/workflows/specdev/common/tools/tests/review-source-files.test.mjs +74 -0
  221. package/template/workflows/specdev/common/tools/ticket-control.mjs +19 -25
  222. package/template/workflows/specdev/common/tools/validate-specdev.mjs +397 -576
  223. package/template/workflows/specdev/manifest.json +54 -7
  224. package/template/workflows/specdev/runtime-contract.json +6 -6
  225. package/template/workflows/specdev/specdev-a-archive-and-consolidate/SKILL.md +39 -0
  226. package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/archive-plan-template.md +32 -0
  227. package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/cleanup-candidate-template.md +69 -0
  228. package/template/workflows/specdev/specdev-a-archive-and-consolidate/assets/consolidation-plan-template.md +78 -0
  229. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/archive-receipt-contract.md +40 -0
  230. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/archive-rules.md +20 -0
  231. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/cleanup-rules.md +79 -0
  232. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/consolidation-interview.md +67 -0
  233. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/consolidation-rules.md +86 -0
  234. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/design-knowledge-gateway.md +61 -0
  235. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/knowledge-graduation.md +58 -0
  236. package/template/workflows/specdev/specdev-a-archive-and-consolidate/references/operation-contract.md +48 -0
  237. package/template/workflows/specdev/specdev-c-code-review/SKILL.md +55 -0
  238. package/template/workflows/specdev/specdev-c-code-review/assets/code-review-template.md +53 -0
  239. package/template/workflows/specdev/specdev-c-code-review/references/source-files-review.md +14 -0
  240. package/template/workflows/specdev/specdev-d-diagnose-bugs/SKILL.md +84 -0
  241. package/template/workflows/specdev/specdev-d-diagnose-bugs/references/feedback-loop.md +43 -0
  242. package/template/workflows/specdev/specdev-d-diagnose-bugs/references/incident-evidence.md +21 -0
  243. package/template/workflows/specdev/specdev-g-grill-with-docs/SKILL.md +34 -0
  244. package/template/workflows/specdev/specdev-g-grill-with-docs/references/interview-procedure.md +138 -0
  245. package/template/workflows/specdev/specdev-i-implement/SKILL.md +49 -0
  246. package/template/workflows/specdev/specdev-i-implement/assets/evidence-template.md +154 -0
  247. package/template/workflows/specdev/specdev-i-implement/references/documentation-procedure.md +23 -0
  248. package/template/workflows/specdev/specdev-i-implement/references/execution-preflight.md +55 -0
  249. package/template/workflows/specdev/specdev-i-implement/references/implementation-procedure.md +170 -0
  250. package/template/workflows/specdev/specdev-i-implement/references/merge-conflict-protocol.md +21 -0
  251. package/template/workflows/specdev/specdev-i-implement/references/tdd-rules.md +25 -0
  252. package/template/workflows/specdev/specdev-i-init-setup/SKILL.md +31 -0
  253. package/template/workflows/specdev/specdev-i-init-setup/assets/change-readme-template.md +32 -0
  254. package/template/workflows/specdev/specdev-i-init-setup/assets/config-template.json +31 -0
  255. package/template/workflows/specdev/specdev-i-init-setup/assets/domain-layout-template.md +29 -0
  256. package/template/workflows/specdev/specdev-i-init-setup/assets/tracking-template.md +13 -0
  257. package/template/workflows/specdev/specdev-i-init-setup/references/change-record-examples.md +62 -0
  258. package/template/workflows/specdev/specdev-i-init-setup/references/first-setup.md +11 -0
  259. package/template/workflows/specdev/specdev-l-learn/SKILL.md +35 -0
  260. package/template/workflows/specdev/specdev-l-learn/references/learning-change.md +23 -0
  261. package/template/workflows/specdev/specdev-l-learn/references/lesson-format.md +61 -0
  262. package/template/workflows/specdev/specdev-p-goal-plan/SKILL.md +71 -0
  263. package/template/workflows/specdev/specdev-p-goal-plan/assets/goal-plan-template.md +152 -0
  264. package/template/workflows/specdev/specdev-p-goal-plan/assets/lightweight-goal-plan-template.md +21 -0
  265. package/template/workflows/specdev/specdev-p-goal-plan/references/completion-control.md +47 -0
  266. package/template/workflows/specdev/specdev-p-goal-plan/references/goal-lifecycle.md +35 -0
  267. package/template/workflows/specdev/specdev-p-goal-plan/references/goal-tickets-map-template.md +15 -0
  268. package/template/workflows/specdev/specdev-p-goal-plan/references/lead-orchestration.md +44 -0
  269. package/template/workflows/specdev/specdev-p-goal-plan/references/map-control.md +28 -0
  270. package/template/workflows/specdev/specdev-p-goal-plan/references/multi-change-plan.md +126 -0
  271. package/template/workflows/specdev/specdev-p-goal-plan/references/multi-execution-loop.md +31 -0
  272. package/template/workflows/specdev/specdev-p-goal-plan/references/multi-input-readiness.md +25 -0
  273. package/template/workflows/specdev/specdev-p-goal-plan/references/multi-super-dag.md +27 -0
  274. package/template/workflows/specdev/specdev-p-goal-plan/references/orchestration-protocol.md +58 -0
  275. package/template/workflows/specdev/specdev-p-goal-plan/references/planning-modes.md +78 -0
  276. package/template/workflows/specdev/specdev-p-goal-plan/references/replan-and-recovery.md +15 -0
  277. package/template/workflows/specdev/specdev-p-goal-plan/references/single-change-plan.md +157 -0
  278. package/template/workflows/specdev/specdev-p-prototype/SKILL.md +56 -0
  279. package/template/workflows/specdev/specdev-p-prototype/assets/change-design-template.md +68 -0
  280. package/template/workflows/specdev/specdev-p-prototype/assets/design-package.schema.json +248 -0
  281. package/template/workflows/specdev/specdev-p-prototype/assets/design-system-template.md +307 -0
  282. package/template/workflows/specdev/specdev-p-prototype/assets/project-design-template.md +60 -0
  283. package/template/workflows/specdev/specdev-p-prototype/design-library/INDEX.md +50 -0
  284. package/template/workflows/specdev/specdev-p-prototype/design-library/catalog.json +384 -0
  285. package/template/workflows/specdev/specdev-p-prototype/design-library/catalog.schema.json +42 -0
  286. package/template/workflows/specdev/specdev-p-prototype/design-library/color-and-theme.md +65 -0
  287. package/template/workflows/specdev/specdev-p-prototype/design-library/composition.md +39 -0
  288. package/template/workflows/specdev/specdev-p-prototype/design-library/foundations.md +66 -0
  289. package/template/workflows/specdev/specdev-p-prototype/design-library/gallery.html +14 -0
  290. package/template/workflows/specdev/specdev-p-prototype/design-library/gallery.js +55 -0
  291. package/template/workflows/specdev/specdev-p-prototype/design-library/interaction-patterns.md +61 -0
  292. package/template/workflows/specdev/specdev-p-prototype/design-library/product-pattern-index.md +73 -0
  293. package/template/workflows/specdev/specdev-p-prototype/design-library/research-provenance.md +60 -0
  294. package/template/workflows/specdev/specdev-p-prototype/design-library/responsive-and-platforms.md +53 -0
  295. package/template/workflows/specdev/specdev-p-prototype/design-library/style-index.md +47 -0
  296. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/assets/prototypes.css +13 -0
  297. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/assets/prototypes.js +146 -0
  298. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/brand-editorial.html +18 -0
  299. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/brand-editorial.md +25 -0
  300. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/commerce-service.html +10 -0
  301. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/commerce-service.md +25 -0
  302. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/cross-platform-workspace.md +25 -0
  303. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/dense-ide.md +25 -0
  304. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/enterprise-data.html +21 -0
  305. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/enterprise-data.md +25 -0
  306. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/local-first-content.md +25 -0
  307. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/marketing-conversion.html +13 -0
  308. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/marketing-conversion.md +25 -0
  309. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/media-first.md +25 -0
  310. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/mobile-supervisor.md +25 -0
  311. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/monochrome-console.md +25 -0
  312. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/responsive-web.md +25 -0
  313. package/template/workflows/specdev/specdev-p-prototype/design-library/templates/soft-personal-ai.md +25 -0
  314. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/LICENSE +21 -0
  315. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/README.md +14 -0
  316. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/airbnb/DESIGN.md +545 -0
  317. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/apple/DESIGN.md +562 -0
  318. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/figma/DESIGN.md +578 -0
  319. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/ibm/DESIGN.md +550 -0
  320. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/linear/DESIGN.md +548 -0
  321. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/mintlify/DESIGN.md +852 -0
  322. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/notion/DESIGN.md +821 -0
  323. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/provenance.json +95 -0
  324. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/spotify/DESIGN.md +246 -0
  325. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/stripe/DESIGN.md +487 -0
  326. package/template/workflows/specdev/specdev-p-prototype/design-library/upstream/awesome-design-md/vercel/DESIGN.md +736 -0
  327. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/airbnb.md +27 -0
  328. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/apple.md +27 -0
  329. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/figma.md +27 -0
  330. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/ibm.md +29 -0
  331. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/linear.md +27 -0
  332. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/mintlify.md +27 -0
  333. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/notion.md +27 -0
  334. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/spotify.md +27 -0
  335. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/stripe.md +27 -0
  336. package/template/workflows/specdev/specdev-p-prototype/design-library/visual-references/vercel.md +29 -0
  337. package/template/workflows/specdev/specdev-p-prototype/references/detect-existing-style.md +53 -0
  338. package/template/workflows/specdev/specdev-p-prototype/references/generate-design-package.md +78 -0
  339. package/template/workflows/specdev/specdev-p-prototype/references/logic-protocol.md +11 -0
  340. package/template/workflows/specdev/specdev-p-prototype/references/project-preview-protocol.md +9 -0
  341. package/template/workflows/specdev/specdev-p-prototype/references/style-selection-protocol.md +36 -0
  342. package/template/workflows/specdev/specdev-p-prototype/scripts/validate-design-package.mjs +133 -0
  343. package/template/workflows/specdev/specdev-r-retro/SKILL.md +31 -0
  344. package/template/workflows/specdev/specdev-r-review-architecture/SKILL.md +104 -0
  345. package/template/workflows/specdev/specdev-r-review-architecture/assets/architecture-review-template.md +73 -0
  346. package/template/workflows/specdev/specdev-r-review-architecture/references/proposal-to-ticket.md +13 -0
  347. package/template/workflows/specdev/specdev-r-review-architecture/references/review-rubric.md +56 -0
  348. package/template/workflows/specdev/specdev-r-review-architecture/references/selected-design.md +27 -0
  349. package/template/workflows/specdev/specdev-s-spec/SKILL.md +43 -0
  350. package/template/workflows/specdev/specdev-s-spec/references/spec-readiness.md +17 -0
  351. package/template/workflows/specdev/specdev-t-tickets/SKILL.md +51 -0
  352. package/template/workflows/specdev/specdev-t-tickets/assets/ticket-template.md +157 -0
  353. package/template/workflows/specdev/specdev-t-tickets/assets/tickets-map-template.md +102 -0
  354. package/template/workflows/specdev/specdev-t-tickets/references/decomposition-rules.md +60 -0
  355. package/template/workflows/specdev/specdev-t-tickets/references/planning-procedure.md +235 -0
  356. package/template/workflows/specdev/specdev-t-tickets/references/ticket-readiness.md +56 -0
  357. package/template/workflows/specdev/specdev-t-triage/SKILL.md +58 -0
  358. package/template/workflows/specdev/specdev-t-triage/assets/capture-template.md +42 -0
  359. package/template/workflows/specdev/specdev-t-triage/assets/close-comment-template.md +42 -0
  360. package/template/workflows/specdev/specdev-t-triage/assets/issue-body-template.md +34 -0
  361. package/template/workflows/specdev/specdev-t-triage/assets/issue-record-template.md +27 -0
  362. package/template/workflows/specdev/specdev-t-triage/assets/triage-template.md +57 -0
  363. package/template/workflows/specdev/specdev-t-triage/references/capture-protocol.md +89 -0
  364. package/template/workflows/specdev/specdev-t-triage/references/ci-security-protocol.md +15 -0
  365. package/template/workflows/specdev/specdev-t-triage/references/intake-protocol.md +63 -0
  366. package/template/workflows/specdev/specdev-t-triage/references/issue-pr-policy.md +23 -0
  367. package/template/workflows/specdev/specdev-t-triage/references/pr-delivery-protocol.md +17 -0
  368. package/template/workflows/specdev/specdev-t-triage/references/publish-protocol.md +92 -0
  369. package/template/workflows/specdev/specdev-t-triage/references/queue-protocol.md +7 -0
  370. package/template/workflows/specdev/specdev-t-triage/references/reconcile-protocol.md +34 -0
  371. package/template/workflows/specdev/specdev-t-triage/references/release-preflight.md +17 -0
  372. package/template/workflows/specdev/specdev-t-triage/references/release-protocol.md +16 -0
  373. package/template/workflows/specdev/specdev-t-triage/references/release-recovery.md +22 -0
  374. package/template/workflows/specdev/specdev-t-triage/references/remote-operations.md +25 -0
  375. package/template/workflows/specdev/specdev-t-triage/scripts/capture-status.mjs +126 -0
  376. package/template/workflows/specdev/specdev-t-triage/scripts/publish-status.mjs +137 -0
  377. package/template/workflows/specdev/specdev-w-wayfinder/SKILL.md +49 -0
  378. package/template/workflows/specdev/specdev-w-wayfinder/assets/wayfinder-map-template.md +33 -0
  379. package/template/workflows/specdev/specdev-w-wayfinder/references/initiative-discovery.md +29 -0
  380. package/template/workflows/specdev/specdev-w-wayfinder/references/local-tracker-contract.md +33 -0
  381. package/template/workflows/specdev/specdev-w-wayfinder/references/map-traversal.md +120 -0
  382. package/scripts/validate-skills.mjs +0 -56
  383. package/template/commands/archive-and-consolidate.md +0 -72
  384. package/template/commands/docs-sync.md +0 -28
  385. package/template/commands/git-history-squash.md +0 -76
  386. package/template/commands/git-repository-audit.md +0 -83
  387. package/template/commands/handoff.md +0 -66
  388. package/template/commands/retro.md +0 -75
  389. package/template/commands/status.md +0 -17
  390. package/template/skills/archive-and-consolidate/SKILL.md +0 -175
  391. package/template/skills/archive-and-consolidate/assets/archive-plan-template.md +0 -35
  392. package/template/skills/archive-and-consolidate/assets/cleanup-candidate-template.md +0 -69
  393. package/template/skills/archive-and-consolidate/assets/consolidation-plan-template.md +0 -67
  394. package/template/skills/archive-and-consolidate/references/archive-rules.md +0 -48
  395. package/template/skills/archive-and-consolidate/references/cleanup-rules.md +0 -73
  396. package/template/skills/archive-and-consolidate/references/consolidation-rules.md +0 -69
  397. package/template/skills/archive-and-consolidate/references/knowledge-graduation.md +0 -53
  398. package/template/skills/docs-sync/SKILL.md +0 -32
  399. package/template/skills/docs-sync/assets/report-template.md +0 -46
  400. package/template/skills/docs-sync/references/agents/agent-writing.md +0 -75
  401. package/template/skills/docs-sync/references/agents/claude-redirect.md +0 -39
  402. package/template/skills/docs-sync/references/agents/content-contract.md +0 -213
  403. package/template/skills/docs-sync/references/agents/evidence-collection.md +0 -184
  404. package/template/skills/docs-sync/references/agents/manifest-discovery.md +0 -126
  405. package/template/skills/docs-sync/references/agents/role-classification.md +0 -141
  406. package/template/skills/docs-sync/references/agents/templates/aggregator-AGENTS.md +0 -69
  407. package/template/skills/docs-sync/references/agents/templates/capability-module-AGENTS.md +0 -68
  408. package/template/skills/docs-sync/references/agents/templates/contract-module-AGENTS.md +0 -65
  409. package/template/skills/docs-sync/references/agents/templates/repo-root-AGENTS.md +0 -71
  410. package/template/skills/docs-sync/references/agents/templates/runnable-app-AGENTS.md +0 -69
  411. package/template/skills/docs-sync/references/agents/templates/scripts-docs-AGENTS.md +0 -51
  412. package/template/skills/docs-sync/references/agents/writing-style.md +0 -145
  413. package/template/skills/docs-sync/references/agents-contract.md +0 -67
  414. package/template/skills/docs-sync/references/changelog-contract.md +0 -39
  415. package/template/skills/docs-sync/references/document-lifecycle-contract.md +0 -40
  416. package/template/skills/docs-sync/references/git-state-contract.md +0 -67
  417. package/template/skills/docs-sync/references/mode-contract.md +0 -21
  418. package/template/skills/docs-sync/references/readme-contract.md +0 -46
  419. package/template/skills/docs-sync/references/readme-writing-guide.md +0 -294
  420. package/template/skills/docs-sync/references/workflow-scope-contract.md +0 -52
  421. package/template/skills/engineering-standards-builder/SKILL.md +0 -161
  422. package/template/skills/engineering-standards-builder/manifest.txt +0 -118
  423. package/template/skills/engineering-standards-builder/scripts/validate-builder.mjs +0 -272
  424. package/template/skills/git-history-squash/SKILL.md +0 -99
  425. package/template/skills/git-history-squash/references/rewrite-contract.md +0 -123
  426. package/template/skills/git-history-squash/scripts/git-history-squash.mjs +0 -1171
  427. package/template/skills/retrospective/SKILL.md +0 -43
  428. package/template/skills/retrospective/references/issue-drafting-sop.md +0 -69
  429. package/template/skills/source-code-zip/SKILL.md +0 -54
  430. package/template/skills/upstream-fork-sync/SKILL.md +0 -82
  431. package/template/skills/upstream-fork-sync/references/report-contract.md +0 -40
  432. package/template/skills/upstream-fork-sync/references/repository-contract.md +0 -54
  433. package/template/skills/upstream-fork-sync/references/state-schema.md +0 -55
  434. package/template/skills/writing-for-agents/GLOSSARY.md +0 -201
  435. package/template/skills/writing-for-agents/SKILL.md +0 -22
  436. package/template/skills/writing-for-agents/agents/openai.yaml +0 -2
  437. package/template/skills/writing-for-agents/references/document-contract.md +0 -23
  438. package/template/workflows/learning/A-archive/A-archive.md +0 -31
  439. package/template/workflows/learning/A-assess-and-plan/A-assess-and-plan.md +0 -39
  440. package/template/workflows/learning/C-consolidate/C-consolidate.md +0 -39
  441. package/template/workflows/learning/G-goal/G-goal.md +0 -62
  442. package/template/workflows/learning/G-goal/goal-plan-template.md +0 -310
  443. package/template/workflows/learning/G-goal/orchestration-protocol.md +0 -26
  444. package/template/workflows/learning/G-goal/planning-modes.md +0 -19
  445. package/template/workflows/learning/G-goal/progress-template.md +0 -19
  446. package/template/workflows/learning/G-goal/references/coverage-bar.md +0 -36
  447. package/template/workflows/learning/G-goal/references/external-goal-runner.md +0 -54
  448. package/template/workflows/learning/G-goal/references/lead-orchestration.md +0 -52
  449. package/template/workflows/learning/H-homework/H-homework.md +0 -37
  450. package/template/workflows/learning/I-init-setup/I-init-setup.md +0 -33
  451. package/template/workflows/learning/INDEX.md +0 -26
  452. package/template/workflows/learning/L-lesson/L-lesson.md +0 -42
  453. package/template/workflows/learning/Q-question/Q-question.md +0 -47
  454. package/template/workflows/learning/Q-question/references/exploration-mode.md +0 -35
  455. package/template/workflows/learning/Q-question/references/tutor-mode.md +0 -31
  456. package/template/workflows/learning/R-review/R-review.md +0 -36
  457. package/template/workflows/learning/README.md +0 -100
  458. package/template/workflows/media/B-brief/B-brief.md +0 -18
  459. package/template/workflows/media/D-deconstruct/D-deconstruct.md +0 -18
  460. package/template/workflows/media/H-hand-drawn/H-hand-drawn.md +0 -18
  461. package/template/workflows/media/I-init-setup/I-init-setup.md +0 -18
  462. package/template/workflows/media/INDEX.md +0 -20
  463. package/template/workflows/media/P-publish-draft/P-publish-draft.md +0 -18
  464. package/template/workflows/media/R-retro/R-retro.md +0 -18
  465. package/template/workflows/media/README.md +0 -76
  466. package/template/workflows/media/V-video/V-video.md +0 -18
  467. package/template/workflows/ops/D-project-deploy/D-project-deploy.md +0 -40
  468. package/template/workflows/ops/H-host-manage/H-host-manage.md +0 -34
  469. package/template/workflows/ops/I-initialize/I-initialize.md +0 -28
  470. package/template/workflows/ops/INDEX.md +0 -36
  471. package/template/workflows/ops/README.md +0 -62
  472. package/template/workflows/ops/S-server-connect/S-server-connect.md +0 -28
  473. package/template/workflows/ops/V-inventory-view/V-inventory-view.md +0 -32
  474. package/template/workflows/person/INDEX.md +0 -15
  475. package/template/workflows/person/M-mao-zedong-cognitive-os/M-mao-zedong-cognitive-os.md +0 -42
  476. package/template/workflows/person/M-mao-zedong-cognitive-os/activate.md +0 -81
  477. package/template/workflows/person/M-mao-zedong-cognitive-os/books/README.md +0 -17
  478. package/template/workflows/person/M-mao-zedong-cognitive-os/books/src/SUMMARY.md +0 -231
  479. package/template/workflows/person/M-mao-zedong-cognitive-os/books/src//347/233/256/345/275/225.md +0 -243
  480. package/template/workflows/person/M-mao-zedong-cognitive-os/deliver.md +0 -114
  481. package/template/workflows/person/M-mao-zedong-cognitive-os/diagnose.md +0 -83
  482. package/template/workflows/person/M-mao-zedong-cognitive-os/mobilize.md +0 -85
  483. package/template/workflows/person/M-mao-zedong-cognitive-os/strategize.md +0 -76
  484. package/template/workflows/person/S-steelman-deliberation/S-steelman-deliberation.md +0 -113
  485. package/template/workflows/person/S-steelman-deliberation/references/state-and-publication.md +0 -86
  486. package/template/workflows/specdev/A-archive-and-consolidate/A-archive-and-consolidate.md +0 -56
  487. package/template/workflows/specdev/A-archive-and-consolidate/consolidation-interview.md +0 -67
  488. package/template/workflows/specdev/C-code-review/C-code-review.md +0 -42
  489. package/template/workflows/specdev/C-code-review/code-review-template.md +0 -53
  490. package/template/workflows/specdev/D-diagnose-bugs/D-diagnose-bugs.md +0 -83
  491. package/template/workflows/specdev/D-diagnose-bugs/feedback-loop.md +0 -43
  492. package/template/workflows/specdev/D-diagnose-bugs/references/incident-evidence.md +0 -21
  493. package/template/workflows/specdev/G-grill-with-docs/G-grill-with-docs.md +0 -33
  494. package/template/workflows/specdev/G-grill-with-docs/references/interview-procedure.md +0 -138
  495. package/template/workflows/specdev/I-implement/I-implement.md +0 -36
  496. package/template/workflows/specdev/I-implement/evidence-template.md +0 -145
  497. package/template/workflows/specdev/I-implement/execution-preflight.md +0 -48
  498. package/template/workflows/specdev/I-implement/merge-conflict-protocol.md +0 -21
  499. package/template/workflows/specdev/I-implement/references/documentation-procedure.md +0 -21
  500. package/template/workflows/specdev/I-implement/references/implementation-procedure.md +0 -164
  501. package/template/workflows/specdev/I-implement/tdd-rules.md +0 -25
  502. package/template/workflows/specdev/I-init-setup/I-init-setup.md +0 -45
  503. package/template/workflows/specdev/I-init-setup/change-status-template.json +0 -28
  504. package/template/workflows/specdev/I-init-setup/config-template.json +0 -31
  505. package/template/workflows/specdev/I-init-setup/domain-layout-template.md +0 -23
  506. package/template/workflows/specdev/I-init-setup/references/first-setup.md +0 -46
  507. package/template/workflows/specdev/I-init-setup/status-template.json +0 -6
  508. package/template/workflows/specdev/I-init-setup/tracking-template.md +0 -13
  509. package/template/workflows/specdev/INDEX.md +0 -30
  510. package/template/workflows/specdev/L-learn-change/L-learn-change.md +0 -32
  511. package/template/workflows/specdev/L-learn-change/references/lesson-format.md +0 -51
  512. package/template/workflows/specdev/P-goal-plan/P-goal-plan.md +0 -58
  513. package/template/workflows/specdev/P-goal-plan/completion-control.md +0 -47
  514. package/template/workflows/specdev/P-goal-plan/goal-plan-template.md +0 -146
  515. package/template/workflows/specdev/P-goal-plan/lead-orchestration.md +0 -42
  516. package/template/workflows/specdev/P-goal-plan/orchestration-protocol.md +0 -56
  517. package/template/workflows/specdev/P-goal-plan/planning-modes.md +0 -78
  518. package/template/workflows/specdev/P-goal-plan/references/goal-lifecycle.md +0 -35
  519. package/template/workflows/specdev/P-goal-plan/references/goal-tickets-map-template.md +0 -15
  520. package/template/workflows/specdev/P-goal-plan/references/map-control.md +0 -28
  521. package/template/workflows/specdev/P-goal-plan/references/multi-change-plan.md +0 -126
  522. package/template/workflows/specdev/P-goal-plan/references/multi-execution-loop.md +0 -31
  523. package/template/workflows/specdev/P-goal-plan/references/multi-input-readiness.md +0 -25
  524. package/template/workflows/specdev/P-goal-plan/references/multi-super-dag.md +0 -27
  525. package/template/workflows/specdev/P-goal-plan/references/replan-and-recovery.md +0 -21
  526. package/template/workflows/specdev/P-goal-plan/references/single-change-plan.md +0 -151
  527. package/template/workflows/specdev/P-prototype/P-prototype.md +0 -53
  528. package/template/workflows/specdev/P-prototype/design-library/INDEX.md +0 -43
  529. package/template/workflows/specdev/P-prototype/design-library/color-and-theme.md +0 -65
  530. package/template/workflows/specdev/P-prototype/design-library/foundations.md +0 -66
  531. package/template/workflows/specdev/P-prototype/design-library/interaction-patterns.md +0 -61
  532. package/template/workflows/specdev/P-prototype/design-library/product-pattern-index.md +0 -73
  533. package/template/workflows/specdev/P-prototype/design-library/research-provenance.md +0 -54
  534. package/template/workflows/specdev/P-prototype/design-library/responsive-and-platforms.md +0 -53
  535. package/template/workflows/specdev/P-prototype/design-library/style-index.md +0 -32
  536. package/template/workflows/specdev/P-prototype/design-package.schema.json +0 -70
  537. package/template/workflows/specdev/P-prototype/design-system-template.md +0 -366
  538. package/template/workflows/specdev/P-prototype/detect-existing-style.md +0 -53
  539. package/template/workflows/specdev/P-prototype/generate-design-package.md +0 -54
  540. package/template/workflows/specdev/P-prototype/logic-protocol.md +0 -11
  541. package/template/workflows/specdev/P-prototype/project-preview-protocol.md +0 -9
  542. package/template/workflows/specdev/P-prototype/style-selection-protocol.md +0 -45
  543. package/template/workflows/specdev/P-prototype/tools/validate-design-package.mjs +0 -155
  544. package/template/workflows/specdev/R-retro/R-retro.md +0 -30
  545. package/template/workflows/specdev/R-review-architecture/R-review-architecture.md +0 -103
  546. package/template/workflows/specdev/R-review-architecture/architecture-review-template.md +0 -73
  547. package/template/workflows/specdev/R-review-architecture/proposal-to-ticket.md +0 -13
  548. package/template/workflows/specdev/R-review-architecture/references/selected-design.md +0 -27
  549. package/template/workflows/specdev/R-review-architecture/review-rubric.md +0 -56
  550. package/template/workflows/specdev/README.md +0 -105
  551. package/template/workflows/specdev/S-spec/S-spec.md +0 -38
  552. package/template/workflows/specdev/S-spec/spec-readiness.md +0 -16
  553. package/template/workflows/specdev/T-tickets/T-tickets.md +0 -46
  554. package/template/workflows/specdev/T-tickets/decomposition-rules.md +0 -60
  555. package/template/workflows/specdev/T-tickets/references/planning-procedure.md +0 -233
  556. package/template/workflows/specdev/T-tickets/ticket-readiness.md +0 -54
  557. package/template/workflows/specdev/T-tickets/ticket-template.md +0 -155
  558. package/template/workflows/specdev/T-tickets/tickets-map-template.md +0 -102
  559. package/template/workflows/specdev/T-triage/T-triage.md +0 -57
  560. package/template/workflows/specdev/T-triage/capture-protocol.md +0 -89
  561. package/template/workflows/specdev/T-triage/capture-template.md +0 -42
  562. package/template/workflows/specdev/T-triage/ci-security-protocol.md +0 -15
  563. package/template/workflows/specdev/T-triage/close-comment-template.md +0 -42
  564. package/template/workflows/specdev/T-triage/intake-protocol.md +0 -63
  565. package/template/workflows/specdev/T-triage/issue-body-template.md +0 -34
  566. package/template/workflows/specdev/T-triage/issue-record-template.md +0 -27
  567. package/template/workflows/specdev/T-triage/pr-delivery-protocol.md +0 -17
  568. package/template/workflows/specdev/T-triage/publish-protocol.md +0 -92
  569. package/template/workflows/specdev/T-triage/queue-protocol.md +0 -7
  570. package/template/workflows/specdev/T-triage/reconcile-protocol.md +0 -34
  571. package/template/workflows/specdev/T-triage/references/issue-pr-policy.md +0 -23
  572. package/template/workflows/specdev/T-triage/release-preflight.md +0 -17
  573. package/template/workflows/specdev/T-triage/release-protocol.md +0 -16
  574. package/template/workflows/specdev/T-triage/release-recovery.md +0 -22
  575. package/template/workflows/specdev/T-triage/remote-operations.md +0 -25
  576. package/template/workflows/specdev/T-triage/tools/capture-status.mjs +0 -125
  577. package/template/workflows/specdev/T-triage/tools/publish-status.mjs +0 -148
  578. package/template/workflows/specdev/T-triage/triage-template.md +0 -57
  579. package/template/workflows/specdev/W-wayfinder/W-wayfinder.md +0 -46
  580. package/template/workflows/specdev/W-wayfinder/local-tracker-contract.md +0 -35
  581. package/template/workflows/specdev/W-wayfinder/references/initiative-discovery.md +0 -29
  582. package/template/workflows/specdev/W-wayfinder/references/map-traversal.md +0 -120
  583. package/template/workflows/specdev/W-wayfinder/wayfinder-map-template.md +0 -33
  584. package/template/workflows/specdev/_state/archive/.gitkeep +0 -0
  585. package/template/workflows/specdev/_state/changes/.gitkeep +0 -0
  586. package/template/workflows/specdev/_state/status.json +0 -6
  587. package/template/workflows/specdev/common/skills/subagent-delivery/SKILL.md +0 -51
  588. package/template/workflows/specdev/common/skills/subagent-delivery/references/dispatch-and-accept.md +0 -87
  589. package/template/workflows/specdev/common/skills/subagent-delivery/references/external-web-subagent.md +0 -132
  590. package/template/workflows/specdev/common/skills/subagent-delivery/references/native-subagent.md +0 -28
  591. package/template/workflows/specdev/common/skills/subagent-delivery/references/source-package.md +0 -239
  592. /package/template/{skills → commands}/docs-sync/assets/state-template.json +0 -0
  593. /package/template/{skills → commands}/docs-sync/assets/workflow-scope-template.json +0 -0
  594. /package/template/{skills → commands}/engineering-standards-builder/README.md +0 -0
  595. /package/template/{skills → commands}/engineering-standards-builder/agents/openai.yaml +0 -0
  596. /package/template/{skills → commands}/engineering-standards-builder/examples/README.md +0 -0
  597. /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/build.gradle.kts +0 -0
  598. /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/expected.json +0 -0
  599. /package/template/{skills → commands}/engineering-standards-builder/examples/fallback/kotlin-gradle/src/main/kotlin/example/App.kt +0 -0
  600. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/.golangci.yml +0 -0
  601. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/cmd/api/main.go +0 -0
  602. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/expected.json +0 -0
  603. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/go.mod +0 -0
  604. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/internal/service/service.go +0 -0
  605. /package/template/{skills → commands}/engineering-standards-builder/examples/go/service/internal/service/service_test.go +0 -0
  606. /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/expected.json +0 -0
  607. /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/pom.xml +0 -0
  608. /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/src/main/java/dev/speculo/orders/OrdersApplication.java +0 -0
  609. /package/template/{skills → commands}/engineering-standards-builder/examples/java/spring-boot-maven/src/test/java/dev/speculo/orders/OrdersApplicationTest.java +0 -0
  610. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/.github/workflows/ci.yml +0 -0
  611. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/package.json +0 -0
  612. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/src/App.vue +0 -0
  613. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/apps/web/tsconfig.json +0 -0
  614. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/expected.json +0 -0
  615. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/package.json +0 -0
  616. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/pnpm-workspace.yaml +0 -0
  617. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/orders/pom.xml +0 -0
  618. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/orders/src/main/java/dev/speculo/orders/OrdersApplication.java +0 -0
  619. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/worker/go.mod +0 -0
  620. /package/template/{skills → commands}/engineering-standards-builder/examples/polyglot/monorepo/services/worker/main.go +0 -0
  621. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/Cargo.toml +0 -0
  622. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/cli/Cargo.toml +0 -0
  623. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/cli/src/main.rs +0 -0
  624. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/core/Cargo.toml +0 -0
  625. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/crates/core/src/lib.rs +0 -0
  626. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/expected.json +0 -0
  627. /package/template/{skills → commands}/engineering-standards-builder/examples/rust/workspace/rust-toolchain.toml +0 -0
  628. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/expected.json +0 -0
  629. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/package.json +0 -0
  630. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/App.test.tsx +0 -0
  631. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/App.tsx +0 -0
  632. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/src/main.tsx +0 -0
  633. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/react-vite/tsconfig.json +0 -0
  634. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/expected.json +0 -0
  635. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/package.json +0 -0
  636. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/App.test.ts +0 -0
  637. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/App.vue +0 -0
  638. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/src/main.ts +0 -0
  639. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/tsconfig.json +0 -0
  640. /package/template/{skills → commands}/engineering-standards-builder/examples/typescript/vue-vite/vite.config.ts +0 -0
  641. /package/template/{skills → commands}/engineering-standards-builder/references/go/00-detection-and-scope.md +0 -0
  642. /package/template/{skills → commands}/engineering-standards-builder/references/go/01-language-and-idioms.md +0 -0
  643. /package/template/{skills → commands}/engineering-standards-builder/references/go/02-modules-packages-and-layout.md +0 -0
  644. /package/template/{skills → commands}/engineering-standards-builder/references/go/03-errors-context-and-concurrency.md +0 -0
  645. /package/template/{skills → commands}/engineering-standards-builder/references/go/04-testing-tooling-quality-gates.md +0 -0
  646. /package/template/{skills → commands}/engineering-standards-builder/references/go/README.md +0 -0
  647. /package/template/{skills → commands}/engineering-standards-builder/references/java/00-detection-and-scope.md +0 -0
  648. /package/template/{skills → commands}/engineering-standards-builder/references/java/01-language-packages-and-api.md +0 -0
  649. /package/template/{skills → commands}/engineering-standards-builder/references/java/02-build-modules-and-dependencies.md +0 -0
  650. /package/template/{skills → commands}/engineering-standards-builder/references/java/03-errors-nullability-resources-concurrency.md +0 -0
  651. /package/template/{skills → commands}/engineering-standards-builder/references/java/04-testing-tooling-quality-gates.md +0 -0
  652. /package/template/{skills → commands}/engineering-standards-builder/references/java/README.md +0 -0
  653. /package/template/{skills → commands}/engineering-standards-builder/references/java/frameworks/spring-boot.md +0 -0
  654. /package/template/{skills → commands}/engineering-standards-builder/references/rules/00-governance-and-precedence.md +0 -0
  655. /package/template/{skills → commands}/engineering-standards-builder/references/rules/01-project-discovery.md +0 -0
  656. /package/template/{skills → commands}/engineering-standards-builder/references/rules/02-evidence-topology-and-scope.md +0 -0
  657. /package/template/{skills → commands}/engineering-standards-builder/references/rules/03-interview-and-decisions.md +0 -0
  658. /package/template/{skills → commands}/engineering-standards-builder/references/rules/04-architecture-and-dependency-boundaries.md +0 -0
  659. /package/template/{skills → commands}/engineering-standards-builder/references/rules/05-files-directories-and-naming.md +0 -0
  660. /package/template/{skills → commands}/engineering-standards-builder/references/rules/06-apis-errors-resources-and-concurrency.md +0 -0
  661. /package/template/{skills → commands}/engineering-standards-builder/references/rules/07-documentation-and-comments.md +0 -0
  662. /package/template/{skills → commands}/engineering-standards-builder/references/rules/08-testing-strategy.md +0 -0
  663. /package/template/{skills → commands}/engineering-standards-builder/references/rules/09-mechanical-guardrails.md +0 -0
  664. /package/template/{skills → commands}/engineering-standards-builder/references/rules/09-security-configuration-and-data.md +0 -0
  665. /package/template/{skills → commands}/engineering-standards-builder/references/rules/10-performance-observability-and-i18n.md +0 -0
  666. /package/template/{skills → commands}/engineering-standards-builder/references/rules/11-tooling-quality-gates-and-ci.md +0 -0
  667. /package/template/{skills → commands}/engineering-standards-builder/references/rules/12-git-review-and-delivery.md +0 -0
  668. /package/template/{skills → commands}/engineering-standards-builder/references/rules/13-adoption-exceptions-and-ratchets.md +0 -0
  669. /package/template/{skills → commands}/engineering-standards-builder/references/rules/14-generation-contract.md +0 -0
  670. /package/template/{skills → commands}/engineering-standards-builder/references/rules/15-validation-contract.md +0 -0
  671. /package/template/{skills → commands}/engineering-standards-builder/references/rules/16-language-adapter-contract.md +0 -0
  672. /package/template/{skills → commands}/engineering-standards-builder/references/rules/README.md +0 -0
  673. /package/template/{skills → commands}/engineering-standards-builder/references/rust/00-detection-and-scope.md +0 -0
  674. /package/template/{skills → commands}/engineering-standards-builder/references/rust/01-language-api-and-safety.md +0 -0
  675. /package/template/{skills → commands}/engineering-standards-builder/references/rust/02-crates-workspaces-and-layout.md +0 -0
  676. /package/template/{skills → commands}/engineering-standards-builder/references/rust/03-errors-ownership-and-concurrency.md +0 -0
  677. /package/template/{skills → commands}/engineering-standards-builder/references/rust/04-testing-tooling-quality-gates.md +0 -0
  678. /package/template/{skills → commands}/engineering-standards-builder/references/rust/README.md +0 -0
  679. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/00-detection-and-scope.md +0 -0
  680. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/01-language-and-type-system.md +0 -0
  681. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/02-modules-packages-and-runtime-boundaries.md +0 -0
  682. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/03-functions-async-errors-resources.md +0 -0
  683. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/04-testing-tooling-quality-gates.md +0 -0
  684. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/README.md +0 -0
  685. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/app-types/cli.md +0 -0
  686. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/app-types/library.md +0 -0
  687. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/frameworks/react.md +0 -0
  688. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/frameworks/vue.md +0 -0
  689. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/browser.md +0 -0
  690. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/electron.md +0 -0
  691. /package/template/{skills → commands}/engineering-standards-builder/references/typescript/runtimes/node.md +0 -0
  692. /package/template/{skills → commands}/engineering-standards-builder/scripts/discover-project.mjs +0 -0
  693. /package/template/{skills → commands}/engineering-standards-builder/scripts/self-test.mjs +0 -0
  694. /package/template/{skills → commands}/engineering-standards-builder/scripts/sync-manifest.mjs +0 -0
  695. /package/template/{skills → commands}/engineering-standards-builder/scripts/validate-generated-skill.mjs +0 -0
  696. /package/template/{skills → commands}/engineering-standards-builder/templates/README.md +0 -0
  697. /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/agents-typescript--standards.md +0 -0
  698. /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/agents-typescript-standards.md +0 -0
  699. /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/claude-engineering-standards.md +0 -0
  700. /package/template/{skills → commands}/engineering-standards-builder/templates/compatibility/claude-typescript-standards.md +0 -0
  701. /package/template/{skills → commands}/engineering-standards-builder/templates/domain-skill/SKILL.md.template +0 -0
  702. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/SKILL.md.template +0 -0
  703. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/generated-skill-set.json.template +0 -0
  704. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/00-project-profile.md.template +0 -0
  705. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/01-module-map.md.template +0 -0
  706. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/02-decisions-and-exceptions.md.template +0 -0
  707. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/03-skill-map.md.template +0 -0
  708. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/04-source-and-template-map.md.template +0 -0
  709. /package/template/{skills → commands}/engineering-standards-builder/templates/project-skill/references/project/review-checklist.md.template +0 -0
  710. /package/template/{skills → commands}/git-history-squash/agents/openai.yaml +0 -0
  711. /package/template/{skills → commands}/git-history-squash/assets/request-template.json +0 -0
  712. /package/template/{skills → commands}/git-history-squash/references/recovery-contract.md +0 -0
  713. /package/template/{skills → commands}/git-history-squash/references/submodule-contract.md +0 -0
  714. /package/template/commands/{references/git-repository-audit-procedure.md → git-repository-audit/references/procedure.md} +0 -0
  715. /package/template/{skills → commands}/source-code-zip/references/cli-reference.md +0 -0
  716. /package/template/{skills → commands}/source-code-zip/scripts/zip_source_code.js +0 -0
  717. /package/template/{skills → commands}/upstream-fork-sync/scripts/upstream-sync.mjs +0 -0
  718. /package/template/{skills → references}/retrospective/references/friction-taxonomy.md +0 -0
  719. /package/template/{skills → references}/writing-for-agents/references/authoring-principles.md +0 -0
  720. /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/background-template.md +0 -0
  721. /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/change-status-template.json +0 -0
  722. /package/template/workflows/learning/{A-assess-and-plan → learning-a-assess-and-plan/assets}/course-template.md +0 -0
  723. /package/template/workflows/learning/{G-goal → learning-g-goal/assets}/chain-template.md +0 -0
  724. /package/template/workflows/learning/{G-goal → learning-g-goal/assets}/coverage-matrix-template.md +0 -0
  725. /package/template/workflows/learning/{G-goal → learning-g-goal/assets}/probe-template.md +0 -0
  726. /package/template/workflows/learning/{G-goal → learning-g-goal}/references/mine-unit.md +0 -0
  727. /package/template/workflows/learning/{G-goal → learning-g-goal}/references/split-rules.md +0 -0
  728. /package/template/workflows/learning/{G-goal → learning-g-goal}/references/stop-rules.md +0 -0
  729. /package/template/workflows/learning/{H-homework → learning-h-homework/assets}/homework-template.md +0 -0
  730. /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/context-index-template.md +0 -0
  731. /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/learner-profile-template.md +0 -0
  732. /package/template/workflows/learning/{I-init-setup → learning-i-init-setup/assets}/review-index-template.md +0 -0
  733. /package/template/workflows/learning/{L-lesson → learning-l-lesson/assets}/lesson-template.md +0 -0
  734. /package/template/workflows/learning/{Q-question → learning-q-question/assets}/exploration-template.md +0 -0
  735. /package/template/workflows/learning/{Q-question → learning-q-question/assets}/inquiry-template.md +0 -0
  736. /package/template/workflows/learning/{Q-question → learning-q-question/assets}/lightweight-course-template.md +0 -0
  737. /package/template/workflows/learning/{Q-question → learning-q-question/assets}/question-map-template.json +0 -0
  738. /package/template/workflows/learning/{Q-question/tools → learning-q-question/scripts}/validate-exploration.mjs +0 -0
  739. /package/template/workflows/learning/{Q-question/tools → learning-q-question/scripts}/validate-inquiry.mjs +0 -0
  740. /package/template/workflows/learning/{R-review → learning-r-review/assets}/review-template.md +0 -0
  741. /package/template/workflows/media/{B-brief → media-b-brief/assets}/brief-template.json +0 -0
  742. /package/template/workflows/media/{H-hand-drawn → media-h-hand-drawn/references}/production.md +0 -0
  743. /package/template/workflows/media/{H-hand-drawn → media-h-hand-drawn/references}/style-catalog.json +0 -0
  744. /package/template/workflows/media/{P-publish-draft → media-p-publish-draft/assets}/draft-request-template.json +0 -0
  745. /package/template/workflows/media/{R-retro → media-r-retro/assets}/retro-template.md +0 -0
  746. /package/template/workflows/media/{V-video → media-v-video/assets}/review-template.json +0 -0
  747. /package/template/workflows/media/{V-video → media-v-video/assets}/shot-plan-template.json +0 -0
  748. /package/template/workflows/media/{V-video → media-v-video/references}/production.md +0 -0
  749. /package/template/workflows/media/{V-video → media-v-video/scripts}/render_preview.py +0 -0
  750. /package/template/workflows/ops/{H-host-manage → ops-h-host-manage}/references/host-profiles.md +0 -0
  751. /package/template/workflows/person/{M-mao-zedong-cognitive-os/_templates → person-m-mao-zedong-cognitive-os/assets/templates}/mao-consultation-output-template.md +0 -0
  752. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/000-/344/270/255/345/233/275/347/244/276/344/274/232/345/220/204/351/230/266/347/272/247/347/232/204/345/210/206/346/236/220.md" +0 -0
  753. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/001-/346/271/226/345/215/227/345/206/234/346/260/221/350/277/220/345/212/250/350/200/203/345/257/237/346/212/245/345/221/212.md" +0 -0
  754. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/002-/344/270/255/345/233/275/347/232/204/347/272/242/350/211/262/346/224/277/346/235/203/344/270/272/344/273/200/344/271/210/350/203/275/345/244/237/345/255/230/345/234/250/357/274/237.md" +0 -0
  755. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/003-/344/272/225/345/206/210/345/261/261/347/232/204/346/226/227/344/272/211.md" +0 -0
  756. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/004-/345/205/263/344/272/216/347/272/240/346/255/243/345/205/232/345/206/205/347/232/204/351/224/231/350/257/257/346/200/235/346/203/263.md" +0 -0
  757. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/005-/346/230/237/346/230/237/344/271/213/347/201/253/357/274/214/345/217/257/344/273/245/347/207/216/345/216/237.md" +0 -0
  758. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/006-/345/217/215/345/257/271/346/234/254/346/234/254/344/270/273/344/271/211.md" +0 -0
  759. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/007-/345/277/205/351/241/273/346/263/250/346/204/217/347/273/217/346/265/216/345/267/245/344/275/234.md" +0 -0
  760. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/008-/346/200/216/346/240/267/345/210/206/346/236/220/345/206/234/346/235/221/351/230/266/347/272/247.md" +0 -0
  761. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/009-/346/210/221/344/273/254/347/232/204/347/273/217/346/265/216/346/224/277/347/255/226.md" +0 -0
  762. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/010-/345/205/263/345/277/203/347/276/244/344/274/227/347/224/237/346/264/273/357/274/214/346/263/250/346/204/217/345/267/245/344/275/234/346/226/271/346/263/225.md" +0 -0
  763. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/011-/350/256/272/345/217/215/345/257/271/346/227/245/346/234/254/345/270/235/345/233/275/344/270/273/344/271/211/347/232/204/347/255/226/347/225/245.md" +0 -0
  764. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/012-/344/270/255/345/233/275/351/235/251/345/221/275/346/210/230/344/272/211/347/232/204/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
  765. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/013-/345/205/263/344/272/216/350/222/213/344/273/213/347/237/263/345/243/260/346/230/216/347/232/204/345/243/260/346/230/216.md" +0 -0
  766. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/014-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/234/250/346/212/227/346/227/245/346/227/266/346/234/237/347/232/204/344/273/273/345/212/241.md" +0 -0
  767. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/015-/344/270/272/344/272/211/345/217/226/345/215/203/347/231/276/344/270/207/347/276/244/344/274/227/350/277/233/345/205/245/346/212/227/346/227/245/346/260/221/346/227/217/347/273/237/344/270/200/346/210/230/347/272/277/350/200/214/346/226/227/344/272/211.md" +0 -0
  768. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/016-/345/256/236/350/267/265/350/256/272.md" +0 -0
  769. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/017-/347/237/233/347/233/276/350/256/272.md" +0 -0
  770. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/018-/345/217/215/345/257/271/346/227/245/346/234/254/350/277/233/346/224/273/347/232/204/346/226/271/351/222/210/343/200/201/345/212/236/346/263/225/345/222/214/345/211/215/351/200/224.md" +0 -0
  771. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/019-/344/270/272/345/212/250/345/221/230/344/270/200/345/210/207/345/212/233/351/207/217/344/272/211/345/217/226/346/212/227/346/210/230/350/203/234/345/210/251/350/200/214/346/226/227/344/272/211.md" +0 -0
  772. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/020-/345/217/215/345/257/271/350/207/252/347/224/261/344/270/273/344/271/211.md" +0 -0
  773. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/021-/345/233/275/345/205/261/345/220/210/344/275/234/346/210/220/347/253/213/345/220/216/347/232/204/350/277/253/345/210/207/344/273/273/345/212/241.md" +0 -0
  774. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/022-/345/222/214/350/213/261/345/233/275/350/256/260/350/200/205/350/264/235/347/211/271/345/205/260/347/232/204/350/260/210/350/257/235.md" +0 -0
  775. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/023-/344/270/212/346/265/267/345/244/252/345/216/237/345/244/261/351/231/267/344/273/245/345/220/216/346/212/227/346/227/245/346/210/230/344/272/211/347/232/204/345/275/242/345/212/277/345/222/214/344/273/273/345/212/241.md" +0 -0
  776. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/024-/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/346/224/277/345/272/234/347/254/254/345/205/253/350/267/257/345/206/233/345/220/216/346/226/271/347/225/231/345/256/210/345/244/204/345/270/203/345/221/212.md" +0 -0
  777. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/025-/346/212/227/346/227/245/346/270/270/345/207/273/346/210/230/344/272/211/347/232/204/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
  778. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/026-/350/256/272/346/214/201/344/271/205/346/210/230.md" +0 -0
  779. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/027-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/234/250/346/260/221/346/227/217/346/210/230/344/272/211/344/270/255/347/232/204/345/234/260/344/275/215.md" +0 -0
  780. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/028-/347/273/237/344/270/200/346/210/230/347/272/277/344/270/255/347/232/204/347/213/254/347/253/213/350/207/252/344/270/273/351/227/256/351/242/230.md" +0 -0
  781. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/029-/346/210/230/344/272/211/345/222/214/346/210/230/347/225/245/351/227/256/351/242/230.md" +0 -0
  782. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/030-/344/272/224/345/233/233/350/277/220/345/212/250.md" +0 -0
  783. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/031-/351/235/222/345/271/264/350/277/220/345/212/250/347/232/204/346/226/271/345/220/221.md" +0 -0
  784. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/032-/345/217/215/345/257/271/346/212/225/351/231/215/346/264/273/345/212/250.md" +0 -0
  785. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/033-/345/277/205/351/241/273/345/210/266/350/243/201/345/217/215/345/212/250/346/264/276.md" +0 -0
  786. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/034-/345/205/263/344/272/216/345/233/275/351/231/205/346/226/260/345/275/242/345/212/277/345/257/271/346/226/260/345/215/216/346/227/245/346/212/245/350/256/260/350/200/205/347/232/204/350/260/210/350/257/235.md" +0 -0
  787. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/035-/345/222/214/344/270/255/345/244/256/347/244/276/343/200/201/346/211/253/350/215/241/346/212/245/343/200/201/346/226/260/346/260/221/346/212/245/344/270/211/350/256/260/350/200/205/347/232/204/350/260/210/350/257/235.md" +0 -0
  788. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/036-/350/213/217/350/201/224/345/210/251/347/233/212/345/222/214/344/272/272/347/261/273/345/210/251/347/233/212/347/232/204/344/270/200/350/207/264.md" +0 -0
  789. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/037-/343/200/212/345/205/261/344/272/247/345/205/232/344/272/272/343/200/213/345/217/221/345/210/212/350/257/215.md" +0 -0
  790. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/038-/347/233/256/345/211/215/345/275/242/345/212/277/345/222/214/345/205/232/347/232/204/344/273/273/345/212/241.md" +0 -0
  791. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/039-/345/244/247/351/207/217/345/220/270/346/224/266/347/237/245/350/257/206/345/210/206/345/255/220.md" +0 -0
  792. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/040-/344/270/255/345/233/275/351/235/251/345/221/275/345/222/214/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232.md" +0 -0
  793. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/041-/346/226/257/345/244/247/346/236/227/346/230/257/344/270/255/345/233/275/344/272/272/346/260/221/347/232/204/346/234/213/345/217/213.md" +0 -0
  794. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/042-/347/272/252/345/277/265/347/231/275/346/261/202/346/201/251.md" +0 -0
  795. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/043-/346/226/260/346/260/221/344/270/273/344/270/273/344/271/211/350/256/272.md" +0 -0
  796. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/044-/345/205/213/346/234/215/346/212/225/351/231/215/345/215/261/351/231/251/357/274/214/345/212/233/344/272/211/346/227/266/345/261/200/345/245/275/350/275/254.md" +0 -0
  797. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/045-/345/233/242/347/273/223/344/270/200/345/210/207/346/212/227/346/227/245/345/212/233/351/207/217/357/274/214/345/217/215/345/257/271/345/217/215/345/205/261/351/241/275/345/233/272/346/264/276.md" +0 -0
  798. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/046-/345/220/221/345/233/275/346/260/221/345/205/232/347/232/204/345/215/201/347/202/271/350/246/201/346/261/202.md" +0 -0
  799. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/047-/343/200/212/344/270/255/345/233/275/345/267/245/344/272/272/343/200/213/345/217/221/345/210/212/350/257/215.md" +0 -0
  800. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/048-/345/277/205/351/241/273/345/274/272/350/260/203/345/233/242/347/273/223/345/222/214/350/277/233/346/255/245.md" +0 -0
  801. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/049-/346/226/260/346/260/221/344/270/273/344/270/273/344/271/211/347/232/204/345/256/252/346/224/277.md" +0 -0
  802. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/050-/346/212/227/346/227/245/346/240/271/346/215/256/345/234/260/347/232/204/346/224/277/346/235/203/351/227/256/351/242/230.md" +0 -0
  803. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/051-/347/233/256/345/211/215/346/212/227/346/227/245/347/273/237/344/270/200/346/210/230/347/272/277/344/270/255/347/232/204/347/255/226/347/225/245/351/227/256/351/242/230.md" +0 -0
  804. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/052-/346/224/276/346/211/213/345/217/221/345/261/225/346/212/227/346/227/245/345/212/233/351/207/217/357/274/214/346/212/265/346/212/227/345/217/215/345/205/261/351/241/275/345/233/272/346/264/276/347/232/204/350/277/233/346/224/273.md" +0 -0
  805. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/053-/345/233/242/347/273/223/345/210/260/345/272/225.md" +0 -0
  806. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/054-/350/256/272/346/224/277/347/255/226.md" +0 -0
  807. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/055-/344/270/272/347/232/226/345/215/227/344/272/213/345/217/230/345/217/221/350/241/250/347/232/204/345/221/275/344/273/244/345/222/214/350/260/210/350/257/235.md" +0 -0
  808. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/056-/346/211/223/351/200/200/347/254/254/344/272/214/346/254/241/345/217/215/345/205/261/351/253/230/346/275/256/345/220/216/347/232/204/346/227/266/345/261/200.md" +0 -0
  809. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/057-/345/205/263/344/272/216/346/211/223/351/200/200/347/254/254/344/272/214/346/254/241/345/217/215/345/205/261/351/253/230/346/275/256/347/232/204/346/200/273/347/273/223.md" +0 -0
  810. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/058-/343/200/212/345/206/234/346/235/221/350/260/203/346/237/245/343/200/213/347/232/204/345/272/217/350/250/200/345/222/214/350/267/213.md" +0 -0
  811. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/059-/346/224/271/351/200/240/346/210/221/344/273/254/347/232/204/345/255/246/344/271/240.md" +0 -0
  812. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/060-/346/217/255/347/240/264/350/277/234/344/270/234/346/205/225/345/260/274/351/273/221/347/232/204/351/230/264/350/260/213.md" +0 -0
  813. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/061-/345/205/263/344/272/216/345/217/215/346/263/225/350/245/277/346/226/257/347/232/204/345/233/275/351/231/205/347/273/237/344/270/200/346/210/230/347/272/277.md" +0 -0
  814. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/062-/345/234/250/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/345/217/202/350/256/256/344/274/232/347/232/204/346/274/224/350/257/264.md" +0 -0
  815. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/063-/346/225/264/351/241/277/345/205/232/347/232/204/344/275/234/351/243/216.md" +0 -0
  816. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/064-/345/217/215/345/257/271/345/205/232/345/205/253/350/202/241.md" +0 -0
  817. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/065-/345/234/250/345/273/266/345/256/211/346/226/207/350/211/272/345/272/247/350/260/210/344/274/232/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  818. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/066-/344/270/200/344/270/252/346/236/201/345/205/266/351/207/215/350/246/201/347/232/204/346/224/277/347/255/226.md" +0 -0
  819. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/067-/347/254/254/344/272/214/346/254/241/344/270/226/347/225/214/345/244/247/346/210/230/347/232/204/350/275/254/346/212/230/347/202/271.md" +0 -0
  820. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/068-/347/245/235/345/215/201/346/234/210/351/235/251/345/221/275/344/272/214/345/215/201/344/272/224/345/221/250/345/271/264.md" +0 -0
  821. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/069-/346/212/227/346/227/245/346/227/266/346/234/237/347/232/204/347/273/217/346/265/216/351/227/256/351/242/230/345/222/214/350/264/242/346/224/277/351/227/256/351/242/230.md" +0 -0
  822. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/070-/345/205/263/344/272/216/351/242/206/345/257/274/346/226/271/346/263/225/347/232/204/350/213/245/345/271/262/351/227/256/351/242/230.md" +0 -0
  823. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/071-/350/264/250/351/227/256/345/233/275/346/260/221/345/205/232.md" +0 -0
  824. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/072-/345/274/200/345/261/225/346/240/271/346/215/256/345/234/260/347/232/204/345/207/217/347/247/237/343/200/201/347/224/237/344/272/247/345/222/214/346/213/245/346/224/277/347/210/261/346/260/221/350/277/220/345/212/250.md" +0 -0
  825. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/073-/350/257/204/345/233/275/346/260/221/345/205/232/345/215/201/344/270/200/344/270/255/345/205/250/344/274/232/345/222/214/344/270/211/345/261/212/344/272/214/346/254/241/345/233/275/346/260/221/345/217/202/346/224/277/344/274/232.md" +0 -0
  826. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/074-/347/273/204/347/273/207/350/265/267/346/235/245.md" +0 -0
  827. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/075-/345/255/246/344/271/240/345/222/214/346/227/266/345/261/200.md" +0 -0
  828. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/076-/344/270/272/344/272/272/346/260/221/346/234/215/345/212/241.md" +0 -0
  829. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/077-/350/257/204/350/222/213/344/273/213/347/237/263/345/234/250/345/217/214/345/215/201/350/212/202/347/232/204/346/274/224/350/257/264.md" +0 -0
  830. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/078-/346/226/207/345/214/226/345/267/245/344/275/234/344/270/255/347/232/204/347/273/237/344/270/200/346/210/230/347/272/277.md" +0 -0
  831. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/079-/345/277/205/351/241/273/345/255/246/344/274/232/345/201/232/347/273/217/346/265/216/345/267/245/344/275/234.md" +0 -0
  832. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/080-/346/270/270/345/207/273/345/214/272/344/271/237/350/203/275/345/244/237/350/277/233/350/241/214/347/224/237/344/272/247.md" +0 -0
  833. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/081-/344/270/244/344/270/252/344/270/255/345/233/275/344/271/213/345/221/275/350/277/220.md" +0 -0
  834. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/082-/350/256/272/350/201/224/345/220/210/346/224/277/345/272/234.md" +0 -0
  835. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/083-/346/204/232/345/205/254/347/247/273/345/261/261.md" +0 -0
  836. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/084-/350/256/272/345/206/233/351/230/237/347/224/237/344/272/247/350/207/252/347/273/231/357/274/214/345/205/274/350/256/272/346/225/264/351/243/216/345/222/214/347/224/237/344/272/247/344/270/244/345/244/247/350/277/220/345/212/250/347/232/204/351/207/215/350/246/201/346/200/247.md" +0 -0
  837. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/085-/350/265/253/345/260/224/345/210/251/345/222/214/350/222/213/344/273/213/347/237/263/347/232/204/345/217/214/347/260/247/345/267/262/347/273/217/347/240/264/344/272/247.md" +0 -0
  838. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/086-/350/257/204/350/265/253/345/260/224/345/210/251/346/224/277/347/255/226/347/232/204/345/215/261/351/231/251.md" +0 -0
  839. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/087-/347/273/231/347/246/217/346/226/257/347/211/271/345/220/214/345/277/227/347/232/204/347/224/265/346/212/245.md" +0 -0
  840. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/088-/345/257/271/346/227/245/345/257/207/347/232/204/346/234/200/345/220/216/344/270/200/346/210/230.md" +0 -0
  841. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/089-/346/212/227/346/227/245/346/210/230/344/272/211/350/203/234/345/210/251/345/220/216/347/232/204/346/227/266/345/261/200/345/222/214/346/210/221/344/273/254/347/232/204/346/226/271/351/222/210.md" +0 -0
  842. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/090-/350/222/213/344/273/213/347/237/263/345/234/250/346/214/221/345/212/250/345/206/205/346/210/230.md" +0 -0
  843. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/091-/347/254/254/345/215/201/345/205/253/351/233/206/345/233/242/345/206/233/346/200/273/345/217/270/344/273/244/347/273/231/350/222/213/344/273/213/347/237/263/347/232/204/344/270/244/344/270/252/347/224/265/346/212/245.md" +0 -0
  844. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/092-/350/257/204/350/222/213/344/273/213/347/237/263/345/217/221/350/250/200/344/272/272/350/260/210/350/257/235.md" +0 -0
  845. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/093-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/345/220/214/345/233/275/346/260/221/345/205/232/350/277/233/350/241/214/345/222/214/345/271/263/350/260/210/345/210/244/347/232/204/351/200/232/347/237/245.md" +0 -0
  846. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/094-/345/205/263/344/272/216/351/207/215/345/272/206/350/260/210/345/210/244.md" +0 -0
  847. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/095-/345/233/275/346/260/221/345/205/232/350/277/233/346/224/273/347/232/204/347/234/237/347/233/270.md" +0 -0
  848. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/096-/345/207/217/347/247/237/345/222/214/347/224/237/344/272/247/346/230/257/344/277/235/345/215/253/350/247/243/346/224/276/345/214/272/347/232/204/344/270/244/344/273/266/345/244/247/344/272/213.md" +0 -0
  849. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/097-/344/270/200/344/271/235/345/233/233/345/205/255/345/271/264/350/247/243/346/224/276/345/214/272/345/267/245/344/275/234/347/232/204/346/226/271/351/222/210.md" +0 -0
  850. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/098-/345/273/272/347/253/213/345/267/251/345/233/272/347/232/204/344/270/234/345/214/227/346/240/271/346/215/256/345/234/260.md" +0 -0
  851. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/099-/345/205/263/344/272/216/347/233/256/345/211/215/345/233/275/351/231/205/345/275/242/345/212/277/347/232/204/345/207/240/347/202/271/344/274/260/350/256/241.md" +0 -0
  852. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/100-/344/273/245/350/207/252/345/215/253/346/210/230/344/272/211/347/262/211/347/242/216/350/222/213/344/273/213/347/237/263/347/232/204/350/277/233/346/224/273.md" +0 -0
  853. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/101-/345/222/214/347/276/216/345/233/275/350/256/260/350/200/205/345/256/211/345/250/234/302/267/350/267/257/346/230/223/346/226/257/302/267/346/226/257/347/211/271/346/234/227/347/232/204/350/260/210/350/257/235.md" +0 -0
  854. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/102-/351/233/206/344/270/255/344/274/230/345/212/277/345/205/265/345/212/233/357/274/214/345/220/204/344/270/252/346/255/274/347/201/255/346/225/214/344/272/272.md" +0 -0
  855. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/103-/347/276/216/345/233/275/342/200/234/350/260/203/350/247/243/342/200/235/347/234/237/347/233/270/345/222/214/344/270/255/345/233/275/345/206/205/346/210/230/345/211/215/351/200/224.md" +0 -0
  856. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/104-/344/270/211/344/270/252/346/234/210/346/200/273/347/273/223.md" +0 -0
  857. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/105-/350/277/216/346/216/245/344/270/255/345/233/275/351/235/251/345/221/275/347/232/204/346/226/260/351/253/230/346/275/256.md" +0 -0
  858. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/106-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/346/232/202/346/227/266/346/224/276/345/274/203/345/273/266/345/256/211/345/222/214/344/277/235/345/215/253/351/231/225/347/224/230/345/256/201/350/276/271/345/214/272/347/232/204/344/270/244/344/270/252/346/226/207/344/273/266.md" +0 -0
  859. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/107-/345/205/263/344/272/216/350/245/277/345/214/227/346/210/230/345/234/272/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
  860. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/108-/350/222/213/344/273/213/347/237/263/346/224/277/345/272/234/345/267/262/345/244/204/345/234/250/345/205/250/346/260/221/347/232/204/345/214/205/345/233/264/344/270/255.md" +0 -0
  861. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/109-/350/247/243/346/224/276/346/210/230/344/272/211/347/254/254/344/272/214/345/271/264/347/232/204/346/210/230/347/225/245/346/226/271/351/222/210.md" +0 -0
  862. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/110-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/345/256/243/350/250/200.md" +0 -0
  863. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/111-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/346/200/273/351/203/250/345/205/263/344/272/216/351/207/215/350/241/214/351/242/201/345/270/203/344/270/211/345/244/247/347/272/252/345/276/213/345/205/253/351/241/271/346/263/250/346/204/217/347/232/204/350/256/255/344/273/244.md" +0 -0
  864. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/112-/347/233/256/345/211/215/345/275/242/345/212/277/345/222/214/346/210/221/344/273/254/347/232/204/344/273/273/345/212/241.md" +0 -0
  865. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/113-/345/205/263/344/272/216/345/273/272/347/253/213/346/212/245/345/221/212/345/210/266/345/272/246.md" +0 -0
  866. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/114-/345/205/263/344/272/216/347/233/256/345/211/215/345/205/232/347/232/204/346/224/277/347/255/226/344/270/255/347/232/204/345/207/240/344/270/252/351/207/215/350/246/201/351/227/256/351/242/230.md" +0 -0
  867. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/115-/345/206/233/351/230/237/345/206/205/351/203/250/347/232/204/346/260/221/344/270/273/350/277/220/345/212/250.md" +0 -0
  868. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/116-/345/234/250/344/270/215/345/220/214/345/234/260/345/214/272/345/256/236/346/226/275/345/234/237/345/234/260/346/263/225/347/232/204/344/270/215/345/220/214/347/255/226/347/225/245.md" +0 -0
  869. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/117-/347/272/240/346/255/243/345/234/237/345/234/260/346/224/271/351/235/251/345/256/243/344/274/240/344/270/255/347/232/204/342/200/234/345/267/246/342/200/235/345/200/276/351/224/231/350/257/257.md" +0 -0
  870. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/118-/346/226/260/350/247/243/346/224/276/345/214/272/345/234/237/345/234/260/346/224/271/351/235/251/350/246/201/347/202/271.md" +0 -0
  871. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/119-/345/205/263/344/272/216/345/267/245/345/225/206/344/270/232/346/224/277/347/255/226.md" +0 -0
  872. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/120-/345/205/263/344/272/216/346/260/221/346/227/217/350/265/204/344/272/247/351/230/266/347/272/247/345/222/214/345/274/200/346/230/216/347/273/205/345/243/253/351/227/256/351/242/230.md" +0 -0
  873. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/121-/350/257/204/350/245/277/345/214/227/345/244/247/346/215/267/345/205/274/350/256/272/350/247/243/346/224/276/345/206/233/347/232/204/346/226/260/345/274/217/346/225/264/345/206/233/350/277/220/345/212/250.md" +0 -0
  874. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/122-/345/205/263/344/272/216/346/203/205/345/206/265/347/232/204/351/200/232/346/212/245.md" +0 -0
  875. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/123-/345/234/250/346/231/213/347/273/245/345/271/262/351/203/250/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  876. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/124-/345/257/271/346/231/213/347/273/245/346/227/245/346/212/245/347/274/226/350/276/221/344/272/272/345/221/230/347/232/204/350/260/210/350/257/235.md" +0 -0
  877. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/125-/345/206/215/345/205/213/346/264/233/351/230/263/345/220/216/347/273/231/346/264/233/351/230/263/345/211/215/347/272/277/346/214/207/346/214/245/351/203/250/347/232/204/347/224/265/346/212/245.md" +0 -0
  878. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/126-/346/226/260/350/247/243/346/224/276/345/214/272/345/206/234/346/235/221/345/267/245/344/275/234/347/232/204/347/255/226/347/225/245/351/227/256/351/242/230.md" +0 -0
  879. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/127-/344/270/200/344/271/235/345/233/233/345/205/253/345/271/264/347/232/204/345/234/237/345/234/260/346/224/271/351/235/251/345/267/245/344/275/234/345/222/214/346/225/264/345/205/232/345/267/245/344/275/234.md" +0 -0
  880. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/128-/345/205/263/344/272/216/350/276/275/346/262/210/346/210/230/345/275/271/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
  881. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/129-/345/205/263/344/272/216/345/201/245/345/205/250/345/205/232/345/247/224/345/210/266.md" +0 -0
  882. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/130-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/344/271/235/346/234/210/344/274/232/350/256/256/347/232/204/351/200/232/347/237/245.md" +0 -0
  883. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/131-/345/205/263/344/272/216/346/267/256/346/265/267/346/210/230/345/275/271/347/232/204/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
  884. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/132-/345/205/250/344/270/226/347/225/214/351/235/251/345/221/275/345/212/233/351/207/217/345/233/242/347/273/223/350/265/267/346/235/245/357/274/214/345/217/215/345/257/271/345/270/235/345/233/275/344/270/273/344/271/211/347/232/204/344/276/265/347/225/245.md" +0 -0
  885. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/133-/344/270/255/345/233/275/345/206/233/344/272/213/345/275/242/345/212/277/347/232/204/351/207/215/345/244/247/345/217/230/345/214/226.md" +0 -0
  886. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/134-/345/205/263/344/272/216/345/271/263/346/264/245/346/210/230/345/275/271/347/232/204/344/275/234/346/210/230/346/226/271/351/222/210.md" +0 -0
  887. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/135-/346/225/246/344/277/203/346/235/234/350/201/277/346/230/216/347/255/211/346/212/225/351/231/215/344/271/246.md" +0 -0
  888. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/136-/345/260/206/351/235/251/345/221/275/350/277/233/350/241/214/345/210/260/345/272/225.md" +0 -0
  889. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/137-/350/257/204/346/210/230/347/212/257/346/261/202/345/222/214.md" +0 -0
  890. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/138-/344/270/255/345/205/261/344/270/255/345/244/256/346/257/233/346/263/275/344/270/234/344/270/273/345/270/255/345/205/263/344/272/216/346/227/266/345/261/200/347/232/204/345/243/260/346/230/216.md" +0 -0
  891. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/139-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/350/257/204/345/215/227/344/272/254/350/241/214/346/224/277/351/231/242/347/232/204/345/206/263/350/256/256.md" +0 -0
  892. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/140-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/345/205/263/344/272/216/345/221/275/344/273/244/345/233/275/346/260/221/345/205/232/345/217/215/345/212/250/346/224/277/345/272/234/351/207/215/346/226/260/351/200/256/346/215/225/345/211/215/346/227/245/346/234/254/344/276/265/345/215/216/345/206/233/346/200/273/345/217/270/344/273/244/345/206/210/346/235/221/345/256/201/346/254/241/345/222/214/351/200/256/346/215/225/345/233/275/346/260/221/345/205/232/345/206/205/346/210/230/347/275/252/347/212/257/347/232/204/350/260/210/350/257/235.md" +0 -0
  893. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/141-/344/270/255/345/205/261/345/217/221/350/250/200/344/272/272/345/205/263/344/272/216/345/222/214/345/271/263/346/235/241/344/273/266/345/277/205/351/241/273/345/214/205/346/213/254/346/203/251/345/212/236/346/227/245/346/234/254/346/210/230/347/212/257/345/222/214/345/233/275/346/260/221/345/205/232/346/210/230/347/212/257/347/232/204/345/243/260/346/230/216.md" +0 -0
  894. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/142-/346/212/212/345/206/233/351/230/237/345/217/230/344/270/272/345/267/245/344/275/234/351/230/237.md" +0 -0
  895. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/143-/345/233/233/345/210/206/344/272/224/350/243/202/347/232/204/345/217/215/345/212/250/346/264/276/344/270/272/344/273/200/344/271/210/350/277/230/350/246/201/347/251/272/345/226/212/342/200/234/345/205/250/351/235/242/345/222/214/345/271/263/342/200/235/357/274/237.md" +0 -0
  896. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/144-/345/233/275/346/260/221/345/205/232/345/217/215/345/212/250/346/264/276/347/224/261/342/200/234/345/221/274/345/220/201/345/222/214/345/271/263/342/200/235/345/217/230/344/270/272/345/221/274/345/220/201/346/210/230/344/272/211.md" +0 -0
  897. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/145-/350/257/204/345/233/275/346/260/221/345/205/232/345/257/271/346/210/230/344/272/211/350/264/243/344/273/273/351/227/256/351/242/230/347/232/204/345/207/240/347/247/215/347/255/224/346/241/210.md" +0 -0
  898. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/146-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/347/254/254/344/270/203/345/261/212/344/270/255/345/244/256/345/247/224/345/221/230/344/274/232/347/254/254/344/272/214/346/254/241/345/205/250/344/275/223/344/274/232/350/256/256/344/270/212/347/232/204/346/212/245/345/221/212.md" +0 -0
  899. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/147-/345/205/232/345/247/224/344/274/232/347/232/204/345/267/245/344/275/234/346/226/271/346/263/225.md" +0 -0
  900. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/148-/345/215/227/344/272/254/346/224/277/345/272/234/345/220/221/344/275/225/345/244/204/345/216/273/357/274/237.md" +0 -0
  901. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/149-/345/220/221/345/205/250/345/233/275/350/277/233/345/206/233/347/232/204/345/221/275/344/273/244.md" +0 -0
  902. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/150-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/345/270/203/345/221/212.md" +0 -0
  903. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/151-/344/270/255/345/233/275/344/272/272/346/260/221/350/247/243/346/224/276/345/206/233/346/200/273/351/203/250/345/217/221/350/250/200/344/272/272/344/270/272/350/213/261/345/233/275/345/206/233/350/210/260/346/232/264/350/241/214/345/217/221/350/241/250/347/232/204/345/243/260/346/230/216.md" +0 -0
  904. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/152-/345/234/250/346/226/260/346/224/277/346/262/273/345/215/217/345/225/206/344/274/232/350/256/256/347/255/271/345/244/207/344/274/232/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  905. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/153-/350/256/272/344/272/272/346/260/221/346/260/221/344/270/273/344/270/223/346/224/277--/347/272/252/345/277/265/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/344/272/214/345/215/201/345/205/253/345/221/250/345/271/264.md" +0 -0
  906. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/154-/344/270/242/346/216/211/345/271/273/346/203/263/357/274/214/345/207/206/345/244/207/346/226/227/344/272/211.md" +0 -0
  907. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/155-/345/210/253/344/272/206/357/274/214/345/217/270/345/276/222/351/233/267/347/231/273.md" +0 -0
  908. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/156-/342/200/234/345/217/213/350/260/212/342/200/235/357/274/214/350/277/230/346/230/257/344/276/265/347/225/245/357/274/237.md" +0 -0
  909. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/157-/344/270/272/344/273/200/344/271/210/350/246/201/350/256/250/350/256/272/347/231/275/347/232/256/344/271/246/357/274/237.md" +0 -0
  910. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/158-/345/224/257/345/277/203/345/216/206/345/217/262/350/247/202/347/232/204/347/240/264/344/272/247.md" +0 -0
  911. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/159-/344/270/255/345/233/275/344/272/272/346/260/221/347/253/231/350/265/267/346/235/245/344/272/206.md" +0 -0
  912. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/160-/344/270/255/345/233/275/344/272/272/346/260/221/345/244/247/345/233/242/347/273/223/344/270/207/345/262/201.md" +0 -0
  913. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/161-/344/272/272/346/260/221/350/213/261/351/233/204/344/273/254/346/260/270/345/236/202/344/270/215/346/234/275.md" +0 -0
  914. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/162-/346/260/270/350/277/234/344/277/235/346/214/201/350/211/260/350/213/246/345/245/213/346/226/227/347/232/204/344/275/234/351/243/216.md" +0 -0
  915. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/163-/345/276/201/350/257/242/345/257/271/345/276/205/345/257/214/345/206/234/347/255/226/347/225/245/351/227/256/351/242/230/347/232/204/346/204/217/350/247/201.md" +0 -0
  916. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/164-/344/270/272/344/272/211/345/217/226/345/233/275/345/256/266/350/264/242/346/224/277/347/273/217/346/265/216/347/212/266/345/206/265/347/232/204/345/237/272/346/234/254/345/245/275/350/275/254/350/200/214/346/226/227/344/272/211.md" +0 -0
  917. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/165-/344/270/215/350/246/201/345/233/233/351/235/242/345/207/272/345/207/273.md" +0 -0
  918. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/166-/345/201/232/344/270/200/344/270/252/345/256/214/345/205/250/347/232/204/351/235/251/345/221/275/346/264/276.md" +0 -0
  919. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/167-/344/275/240/344/273/254/346/230/257/345/205/250/346/260/221/346/227/217/347/232/204/346/250/241/350/214/203/344/272/272/347/211/251.md" +0 -0
  920. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/168-/347/273/231/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/347/232/204/345/221/275/344/273/244.md" +0 -0
  921. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/169-/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/350/246/201/347/210/261/346/212/244/346/234/235/351/262/234/347/232/204/344/270/200/345/261/261/344/270/200/346/260/264/344/270/200/350/215/211/344/270/200/346/234/250.md" +0 -0
  922. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/170-/344/270/255/345/205/261/344/270/255/345/244/256/346/224/277/346/262/273/345/261/200/346/211/251/345/244/247/344/274/232/350/256/256/345/206/263/350/256/256/350/246/201/347/202/271.md" +0 -0
  923. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/171-/351/225/207/345/216/213/345/217/215/351/235/251/345/221/275/345/277/205/351/241/273/345/256/236/350/241/214/345/205/232/347/232/204/347/276/244/344/274/227/350/267/257/347/272/277.md" +0 -0
  924. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/172-/351/225/207/345/216/213/345/217/215/351/235/251/345/221/275/345/277/205/351/241/273/346/211/223/345/276/227/347/250/263/357/274/214/346/211/223/345/276/227/345/207/206/357/274/214/346/211/223/345/276/227/347/213/240.md" +0 -0
  925. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/173-/345/272/224/345/275/223/351/207/215/350/247/206/347/224/265/345/275/261/343/200/212/346/255/246/350/256/255/344/274/240/343/200/213/347/232/204/350/256/250/350/256/272.md" +0 -0
  926. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/174-/344/270/211/345/244/247/350/277/220/345/212/250/347/232/204/344/274/237/345/244/247/350/203/234/345/210/251.md" +0 -0
  927. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/175-/345/205/263/344/272/216/342/200/234/344/270/211/345/217/215/342/200/235/343/200/201/342/200/234/344/272/224/345/217/215/342/200/235/347/232/204/346/226/227/344/272/211.md" +0 -0
  928. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/176-/346/212/212/345/206/234/344/270/232/344/272/222/345/212/251/345/220/210/344/275/234/345/275/223/344/275/234/344/270/200/344/273/266/345/244/247/344/272/213/345/216/273/345/201/232.md" +0 -0
  929. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/177-/345/205/203/346/227/246/347/245/235/350/257/215.md" +0 -0
  930. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/178-/344/270/255/345/205/261/344/270/255/345/244/256/345/205/263/344/272/216/350/245/277/350/227/217/345/267/245/344/275/234/346/226/271/351/222/210/347/232/204/346/214/207/347/244/272.md" +0 -0
  931. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/179-/345/267/245/344/272/272/351/230/266/347/272/247/344/270/216/350/265/204/344/272/247/351/230/266/347/272/247/347/232/204/347/237/233/347/233/276/346/230/257/345/233/275/345/206/205/347/232/204/344/270/273/350/246/201/347/237/233/347/233/276.md" +0 -0
  932. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/180-/345/233/242/347/273/223/350/265/267/346/235/245/357/274/214/345/210/222/346/270/205/346/225/214/346/210/221/347/225/214/351/231/220.md" +0 -0
  933. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/181-/347/245/235/350/264/272/344/270/255/345/233/275/344/272/272/346/260/221/345/277/227/346/204/277/345/206/233/347/232/204/351/207/215/345/244/247/350/203/234/345/210/251.md" +0 -0
  934. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/182-/345/217/215/345/257/271/345/256/230/345/203/232/344/270/273/344/271/211/343/200/201/345/221/275/344/273/244/344/270/273/344/271/211/345/222/214/350/277/235/346/263/225/344/271/261/347/272/252.md" +0 -0
  935. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/183-/346/211/271/345/210/244/345/244/247/346/261/211/346/227/217/344/270/273/344/271/211.md" +0 -0
  936. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/184-/350/247/243/345/206/263/342/200/234/344/272/224/345/244/232/342/200/235/351/227/256/351/242/230.md" +0 -0
  937. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/185-/345/257/271/345/210/230/345/260/221/345/245/207/343/200/201/346/235/250/345/260/232/346/230/206/347/240/264/345/235/217/347/272/252/345/276/213/346/223/205/350/207/252/344/273/245/344/270/255/345/244/256/345/220/215/344/271/211/345/217/221/345/207/272/346/226/207/344/273/266/347/232/204/346/211/271/350/257/204.md" +0 -0
  938. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/186-/346/211/271/345/210/244/347/246/273/345/274/200/346/200/273/350/267/257/347/272/277/347/232/204/345/217/263/345/200/276/350/247/202/347/202/271.md" +0 -0
  939. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/187-/351/235/222/345/271/264/345/233/242/347/232/204/345/267/245/344/275/234/350/246/201/347/205/247/351/241/276/351/235/222/345/271/264/347/232/204/347/211/271/347/202/271.md" +0 -0
  940. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/188-/345/205/263/344/272/216/345/233/275/345/256/266/350/265/204/346/234/254/344/270/273/344/271/211.md" +0 -0
  941. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/189-/345/205/232/345/234/250/350/277/207/346/270/241/346/227/266/346/234/237/347/232/204/346/200/273/350/267/257/347/272/277.md" +0 -0
  942. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/190-/345/217/215/345/257/271/345/205/232/345/206/205/347/232/204/350/265/204/344/272/247/351/230/266/347/272/247/346/200/235/346/203/263.md" +0 -0
  943. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/191-/346/224/271/351/200/240/350/265/204/346/234/254/344/270/273/344/271/211/345/267/245/345/225/206/344/270/232/347/232/204/345/277/205/347/273/217/344/271/213/350/267/257.md" +0 -0
  944. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/192-/346/212/227/347/276/216/346/217/264/346/234/235/347/232/204/344/274/237/345/244/247/350/203/234/345/210/251/345/222/214/344/273/212/345/220/216/347/232/204/344/273/273/345/212/241.md" +0 -0
  945. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/193-/346/211/271/345/210/244/346/242/201/346/274/261/346/272/237/347/232/204/345/217/215/345/212/250/346/200/235/346/203/263.md" +0 -0
  946. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/194-/345/205/263/344/272/216/345/206/234/344/270/232/344/272/222/345/212/251/345/220/210/344/275/234/347/232/204/344/270/244/346/254/241/350/260/210/350/257/235.md" +0 -0
  947. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/195-/345/205/263/344/272/216/344/270/255/345/215/216/344/272/272/346/260/221/345/205/261/345/222/214/345/233/275/345/256/252/346/263/225/350/215/211/346/241/210.md" +0 -0
  948. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/196-/344/270/272/345/273/272/350/256/276/344/270/200/344/270/252/344/274/237/345/244/247/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/345/233/275/345/256/266/350/200/214/345/245/213/346/226/227.md" +0 -0
  949. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/197-/345/205/263/344/272/216/343/200/212/347/272/242/346/245/274/346/242/246/343/200/213/347/240/224/347/251/266/351/227/256/351/242/230/347/232/204/344/277/241.md" +0 -0
  950. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/198-/345/216/237/345/255/220/345/274/271/345/220/223/344/270/215/345/200/222/344/270/255/345/233/275/344/272/272/346/260/221.md" +0 -0
  951. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/199-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/205/250/345/233/275/344/273/243/350/241/250/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  952. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/200-/351/251/263/342/200/234/350/210/206/350/256/272/344/270/200/345/276/213/342/200/235.md" +0 -0
  953. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/201-/343/200/212/345/205/263/344/272/216/350/203/241/351/243/216/345/217/215/351/235/251/345/221/275/351/233/206/345/233/242/347/232/204/346/235/220/346/226/231/343/200/213/347/232/204/345/272/217/350/250/200/345/222/214/346/214/211/350/257/255.md" +0 -0
  954. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/202-/345/205/263/344/272/216/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/351/227/256/351/242/230.md" +0 -0
  955. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/203-/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/345/277/205/351/241/273/344/276/235/351/235/240/345/205/232/345/233/242/345/221/230/345/222/214/350/264/253/345/206/234/344/270/213/344/270/255/345/206/234.md" +0 -0
  956. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/204-/345/206/234/344/270/232/345/220/210/344/275/234/345/214/226/347/232/204/344/270/200/345/234/272/350/276/251/350/256/272/345/222/214/345/275/223/345/211/215/347/232/204/351/230/266/347/272/247/346/226/227/344/272/211.md" +0 -0
  957. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/205-/343/200/212/344/270/255/345/233/275/345/206/234/346/235/221/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/351/253/230/346/275/256/343/200/213/347/232/204/345/272/217/350/250/200.md" +0 -0
  958. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/206-/343/200/212/344/270/255/345/233/275/345/206/234/346/235/221/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/351/253/230/346/275/256/343/200/213/347/232/204/346/214/211/350/257/255.md" +0 -0
  959. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/207-/345/276/201/350/257/242/345/257/271/345/206/234/344/270/232/345/215/201/344/270/203/346/235/241/347/232/204/346/204/217/350/247/201.md" +0 -0
  960. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/208-/345/212/240/345/277/253/346/211/213/345/267/245/344/270/232/347/232/204/347/244/276/344/274/232/344/270/273/344/271/211/346/224/271/351/200/240.md" +0 -0
  961. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/209-/350/256/272/345/215/201/345/244/247/345/205/263/347/263/273.md" +0 -0
  962. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/210-/347/276/216/345/270/235/345/233/275/344/270/273/344/271/211/346/230/257/347/272/270/350/200/201/350/231/216.md" +0 -0
  963. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/211-/345/242/236/345/274/272/345/205/232/347/232/204/345/233/242/347/273/223/357/274/214/347/273/247/346/211/277/345/205/232/347/232/204/344/274/240/347/273/237.md" +0 -0
  964. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/212-/346/210/221/344/273/254/345/205/232/347/232/204/342/200/224/344/272/233/345/216/206/345/217/262/347/273/217/351/252/214.md" +0 -0
  965. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/213-/347/272/252/345/277/265/345/255/231/344/270/255/345/261/261/345/205/210/347/224/237.md" +0 -0
  966. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/214-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/347/254/254/345/205/253/345/261/212/344/270/255/345/244/256/345/247/224/345/221/230/344/274/232/347/254/254/344/272/214/346/254/241/345/205/250/344/275/223/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  967. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/215-/345/234/250/347/234/201/345/270/202/350/207/252/346/262/273/345/214/272/345/205/232/345/247/224/344/271/246/350/256/260/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  968. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/216-/345/205/263/344/272/216/346/255/243/347/241/256/345/244/204/347/220/206/344/272/272/346/260/221/345/206/205/351/203/250/347/237/233/347/233/276/347/232/204/351/227/256/351/242/230.md" +0 -0
  969. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/217-/345/234/250/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/345/205/250/345/233/275/345/256/243/344/274/240/345/267/245/344/275/234/344/274/232/350/256/256/344/270/212/347/232/204/350/256/262/350/257/235.md" +0 -0
  970. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/218-/345/235/232/346/214/201/350/211/260/350/213/246/345/245/213/346/226/227/357/274/214/345/257/206/345/210/207/350/201/224/347/263/273/347/276/244/344/274/227.md" +0 -0
  971. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/219-/344/272/213/346/203/205/346/255/243/345/234/250/350/265/267/345/217/230/345/214/226.md" +0 -0
  972. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/220-/344/270/255/345/233/275/345/205/261/344/272/247/345/205/232/346/230/257/345/205/250/344/270/255/345/233/275/344/272/272/346/260/221/347/232/204/351/242/206/345/257/274/346/240/270/345/277/203.md" +0 -0
  973. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/221-/347/273/204/347/273/207/345/212/233/351/207/217/345/217/215/345/207/273/345/217/263/346/264/276/345/210/206/345/255/220/347/232/204/347/214/226/347/213/202/350/277/233/346/224/273.md" +0 -0
  974. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/222-/346/226/207/346/261/207/346/212/245/347/232/204/350/265/204/344/272/247/351/230/266/347/272/247/346/226/271/345/220/221/345/272/224/345/275/223/346/211/271/345/210/244.md" +0 -0
  975. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/223-/346/211/223/351/200/200/350/265/204/344/272/247/351/230/266/347/272/247/345/217/263/346/264/276/347/232/204/350/277/233/346/224/273.md" +0 -0
  976. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/224-/344/270/200/344/271/235/344/272/224/344/270/203/345/271/264/345/244/217/345/255/243/347/232/204/345/275/242/345/212/277.md" +0 -0
  977. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/225-/345/201/232/351/235/251/345/221/275/347/232/204/344/277/203/350/277/233/346/264/276.md" +0 -0
  978. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/226-/345/235/232/345/256/232/345/234/260/347/233/270/344/277/241/347/276/244/344/274/227/347/232/204/345/244/247/345/244/232/346/225/260.md" +0 -0
  979. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/227-/345/205/232/345/206/205/345/233/242/347/273/223/347/232/204/350/276/251/350/257/201/346/226/271/346/263/225.md" +0 -0
  980. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/books/src/228-/344/270/200/345/210/207/345/217/215/345/212/250/346/264/276/351/203/275/346/230/257/347/272/270/350/200/201/350/231/216.md" +0 -0
  981. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/10-personality-profile.md +0 -0
  982. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/11-analysis-frameworks.md +0 -0
  983. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/12-strategy-frameworks.md +0 -0
  984. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/13-organization-action.md +0 -0
  985. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/14-voice-and-dialogue.md +0 -0
  986. /package/template/workflows/person/{M-mao-zedong-cognitive-os → person-m-mao-zedong-cognitive-os}/references/research/15-quote-bank.md +0 -0
  987. /package/template/workflows/person/{S-steelman-deliberation/_templates → person-s-steelman-deliberation/assets/templates}/decision-template.md +0 -0
  988. /package/template/workflows/person/{S-steelman-deliberation/_templates → person-s-steelman-deliberation/assets/templates}/steelman-dossier-template.md +0 -0
  989. /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/deliberate.md +0 -0
  990. /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/evidence-gate.md +0 -0
  991. /package/template/workflows/person/{S-steelman-deliberation → person-s-steelman-deliberation/references}/judge.md +0 -0
  992. /package/template/workflows/specdev/{D-diagnose-bugs → specdev-d-diagnose-bugs/assets}/diagnosis-template.md +0 -0
  993. /package/template/workflows/specdev/{D-diagnose-bugs → specdev-d-diagnose-bugs/references}/hypothesis-and-instrumentation.md +0 -0
  994. /package/template/workflows/specdev/{D-diagnose-bugs → specdev-d-diagnose-bugs}/scripts/hitl-loop.template.sh +0 -0
  995. /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/assets}/design-tree-template.json +0 -0
  996. /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/references}/grilling-protocol.md +0 -0
  997. /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/references}/log-format.md +0 -0
  998. /package/template/workflows/specdev/{G-grill-with-docs → specdev-g-grill-with-docs/references}/stakeholder-questionnaire.md +0 -0
  999. /package/template/workflows/specdev/{I-implement → specdev-i-implement/references}/tdd-mocking.md +0 -0
  1000. /package/template/workflows/specdev/{I-implement → specdev-i-implement/references}/tdd-test-design.md +0 -0
  1001. /package/template/workflows/specdev/{P-goal-plan → specdev-p-goal-plan}/references/multi-conflict-and-drift.md +0 -0
  1002. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype/assets}/logic-template.md +0 -0
  1003. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/METHODOLOGY.md +0 -0
  1004. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/README.md +0 -0
  1005. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/data/extended-projects.json +0 -0
  1006. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/data/projects.json +0 -0
  1007. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/reference/USAGE.md +0 -0
  1008. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/reference/design-tokens.css +0 -0
  1009. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/report/OPEN_SOURCE_UI_RESEARCH_2026.md +0 -0
  1010. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/PROJECT_TEMPLATE.md +0 -0
  1011. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/README.md +0 -0
  1012. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/claude-code-modern-clients.md +0 -0
  1013. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/creative-ai-communication.md +0 -0
  1014. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/data-dev-tools.md +0 -0
  1015. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/personal-multiplatform-apps.md +0 -0
  1016. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/research/productivity-collaboration.md +0 -0
  1017. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/01-dense-ide.html +0 -0
  1018. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/02-monochrome-console.html +0 -0
  1019. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/03-soft-personal-ai.html +0 -0
  1020. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/04-responsive-web.html +0 -0
  1021. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/05-mobile-supervisor.html +0 -0
  1022. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/06-cross-platform-workspace.html +0 -0
  1023. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/07-local-first-content.html +0 -0
  1024. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/08-media-first.html +0 -0
  1025. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/README.md +0 -0
  1026. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/ATTRIBUTION.md +0 -0
  1027. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/landscape.jpg +0 -0
  1028. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/lucide.js +0 -0
  1029. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/mountain.jpg +0 -0
  1030. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/assets/workspace.jpg +0 -0
  1031. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/index.html +0 -0
  1032. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/package-lock.json +0 -0
  1033. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/package.json +0 -0
  1034. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/screenshots/index-desktop.png +0 -0
  1035. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/scripts/gallery.js +0 -0
  1036. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/styles/base.css +0 -0
  1037. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/styles/pages.css +0 -0
  1038. /package/template/workflows/specdev/{P-prototype → specdev-p-prototype}/design-library/research-snapshot/ui-gallery/tests/gallery.spec.js +0 -0
  1039. /package/template/workflows/specdev/{P-prototype/tools → specdev-p-prototype/scripts}/materialize-prototype.mjs +0 -0
  1040. /package/template/workflows/specdev/{R-retro → specdev-r-retro/assets}/retro-template.md +0 -0
  1041. /package/template/workflows/specdev/{R-review-architecture → specdev-r-review-architecture}/references/performance-review.md +0 -0
  1042. /package/template/workflows/specdev/{S-spec → specdev-s-spec/assets}/spec-template.md +0 -0
  1043. /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/pr-record-template.md +0 -0
  1044. /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/publish-template.md +0 -0
  1045. /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/source-template.md +0 -0
  1046. /package/template/workflows/specdev/{T-triage → specdev-t-triage/assets}/triage-run-template.md +0 -0
  1047. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/classification-map.md +0 -0
  1048. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/public-projection.md +0 -0
  1049. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/release-authentication.md +0 -0
  1050. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/release-notes-injection.md +0 -0
  1051. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/references/workflow-yaml-reference.md +0 -0
  1052. /package/template/workflows/specdev/{T-triage → specdev-t-triage}/scripts/github-transport.mjs +0 -0
  1053. /package/template/workflows/specdev/{W-wayfinder → specdev-w-wayfinder/assets}/investigation-ticket-template.md +0 -0
  1054. /package/template/workflows/specdev/{W-wayfinder → specdev-w-wayfinder/assets}/solution-comment-template.md +0 -0
  1055. /package/template/workflows/specdev/{W-wayfinder → specdev-w-wayfinder}/references/initiative-template.json +0 -0
@@ -19,46 +19,51 @@ import {
19
19
  import { execFileSync } from "node:child_process";
20
20
  import { dirname, basename, extname, join, relative, resolve, sep, isAbsolute } from "node:path";
21
21
  import { fileURLToPath } from "node:url";
22
+ import { parseFrontmatter as parseYaml, validateSkill } from "../../../../lib/speculo-runtime.mjs";
23
+
24
+ import * as runtime from "../../../../lib/speculo-runtime.mjs";
22
25
 
23
26
  import {
24
27
  validateTicketPlan, validatePlanMap, validateInvocationCoverage,
25
- validateGoalMap, validateInitiative, resolveProjectSource,
28
+ validateGoalMap, validateInitiative, resolveProjectSource, readChangeExecution, readSpecification, resolveToolContext, validateExecutionPolicy, canonicalToolPath, resolveSnapshotContext, readLightweightGoal, validateAcceptanceEvidence,
26
29
  } from "./plan-contract.mjs";
27
30
 
31
+ import { validateChangeClosure, readChangeOwner } from "./change-artifacts.mjs";
28
32
  import { validateRecord, validateRecords } from "./delivery-artifacts.mjs";
29
33
  import { reviewScopeCLI } from "./review-scope.mjs";
30
34
  import { ENGINEERING_KINDS, validateEngineeringArtifacts, validateEngineeringPackage } from "./engineering-evidence.mjs";
31
35
 
32
36
  const DOMAIN_SCHEMA_VERSION = 3;
33
- const CONFIG_SCHEMA_VERSION = 6;
34
- const GOAL_PLAN_SCHEMA_VERSION = 6;
37
+ const CONFIG_SCHEMA_VERSION = 7;
38
+ const GOAL_PLAN_SCHEMA_VERSION = 7;
35
39
  const IMPLEMENTATION_MAP_SCHEMA_VERSION = 1;
36
- const IMPLEMENTATION_PLAN_SCHEMA_VERSION = 1;
40
+ const IMPLEMENTATION_PLAN_SCHEMA_VERSION = 2;
37
41
  const CHANGE_STATUS_SCHEMA_VERSION = 6;
38
42
  const GLOBAL_STATUS_SCHEMA_VERSION = 5;
39
43
  const WORKFLOW_PREFIX = "{roots.workflows}/specdev/";
40
44
  const STATE_PREFIX = "{roots.state}/specdev/";
41
45
  const STATE_ROOT_PREFIX = "{roots.state}/";
46
+ const REFERENCES_PREFIX = "{roots.references}/";
42
47
  const SKILLS_PREFIX = "{roots.skills}/";
43
48
  const COMMANDS_PREFIX = "{roots.commands}/";
44
49
  const CHANGE_NAME = /^[0-9]{4}-[0-9]{2}-[0-9]{2}-[a-z0-9]+(?:-[a-z0-9]+)*$/;
45
50
 
46
51
  const EXPECTED_WORKS = new Set([
47
- "A-archive-and-consolidate",
48
- "C-code-review",
49
- "D-diagnose-bugs",
50
- "G-grill-with-docs",
51
- "I-implement",
52
- "I-init-setup",
53
- "L-learn-change",
54
- "P-goal-plan",
55
- "P-prototype",
56
- "R-review-architecture",
57
- "R-retro",
58
- "S-spec",
59
- "T-tickets",
60
- "T-triage",
61
- "W-wayfinder",
52
+ "specdev-a-archive-and-consolidate",
53
+ "specdev-c-code-review",
54
+ "specdev-d-diagnose-bugs",
55
+ "specdev-g-grill-with-docs",
56
+ "specdev-i-implement",
57
+ "specdev-i-init-setup",
58
+ "specdev-l-learn",
59
+ "specdev-p-goal-plan",
60
+ "specdev-p-prototype",
61
+ "specdev-r-review-architecture",
62
+ "specdev-r-retro",
63
+ "specdev-s-spec",
64
+ "specdev-t-tickets",
65
+ "specdev-t-triage",
66
+ "specdev-w-wayfinder",
62
67
  ]);
63
68
  const EXPECTED_COMMON_DIRS = new Set(["rules", "schemas", "skills", "tools"]);
64
69
  const VALID_TICKET_STATUS = new Set([
@@ -167,13 +172,15 @@ const VALID_STAGES = new Set([
167
172
  "tickets",
168
173
  "goal-plan",
169
174
  "implement",
170
- "learn-change",
175
+ "learn",
171
176
  "retro",
172
177
  "pr-delivery",
173
178
  "review",
174
179
  "prototype",
175
180
  "wayfinder",
176
181
  "complete",
182
+ "archive-ready",
183
+ "archived",
177
184
  ]);
178
185
  const REQUIRED_TICKET_KEYS = new Set([
179
186
  "schema_version",
@@ -214,7 +221,7 @@ const REQUIRED_GOAL_PLAN_SECTIONS = new Set([
214
221
  ]);
215
222
  const REQUIRED_LEAD_GOAL_PLAN_MARKERS = [
216
223
  "### Lead Orchestration",
217
- "Implementation subagents",
224
+ "Concurrent implementations",
218
225
  "Read-only agents",
219
226
  "execution-time dynamic",
220
227
  "### Ticket Workspace and Integration",
@@ -269,7 +276,7 @@ function toPosix(value) {
269
276
  }
270
277
 
271
278
  function readText(path) {
272
- return readFileSync(path, "utf8");
279
+ return runtime.readUtf8ArtifactSync(path);
273
280
  }
274
281
 
275
282
  function isFile(path) {
@@ -291,196 +298,17 @@ function walk(root) {
291
298
  return paths;
292
299
  }
293
300
 
294
- function parseScalar(raw) {
295
- const value = raw.trim();
296
- if (value === "true" || value === "True") return true;
297
- if (value === "false" || value === "False") return false;
298
- if (value === "null" || value === "Null" || value === "~") return null;
299
- if (/^-?\d+$/.test(value)) return Number(value);
300
- if (
301
- (value.startsWith('"') && value.endsWith('"')) ||
302
- (value.startsWith("'") && value.endsWith("'"))
303
- ) {
304
- return value.slice(1, -1);
305
- }
306
- if (value.startsWith("[") && value.endsWith("]")) {
307
- // JSON object arrays are used by the additive Skill invocation contract.
308
- // Keep the existing plain YAML scalar-list form for old artifacts.
309
- try { return JSON.parse(value); } catch { /* legacy scalar list below */ }
310
- const inner = value.slice(1, -1).trim();
311
- if (inner.startsWith("{")) throw new Error("invalid JSON object array in frontmatter");
312
- if (!inner) return [];
313
- return inner.split(",").map((item) => parseScalar(item));
314
- }
315
- if (value.startsWith("{") && value.endsWith("}")) {
316
- try {
317
- return JSON.parse(value);
318
- } catch {
319
- return value;
320
- }
321
- }
322
- return value;
323
- }
324
-
325
- function findSpecdevConfigByAncestry(change) {
326
- let current = resolve(change);
327
- while (true) {
328
- const candidate = join(current, ".speculo", "specdev", "config.json");
329
- if (isFile(candidate)) {
330
- try {
331
- return JSON.parse(readText(candidate));
332
- } catch {
333
- return null;
334
- }
335
- }
336
- const parent = dirname(current);
337
- if (parent === current) return null;
338
- current = parent;
339
- }
340
- }
341
-
342
- function uniqueResolved(paths) {
343
- const seen = new Set();
344
- const result = [];
345
- for (const path of paths) {
346
- const resolved = resolve(path);
347
- if (seen.has(resolved)) continue;
348
- seen.add(resolved);
349
- result.push(resolved);
350
- }
351
- return result;
352
- }
353
-
354
- function ancestorsOf(start) {
355
- const dirs = [];
356
- let current = resolve(start);
357
- while (true) {
358
- dirs.push(current);
359
- const parent = dirname(current);
360
- if (parent === current) break;
361
- current = parent;
362
- }
363
- return dirs;
364
- }
365
-
366
- function parseWorkspaceCandidate(filePath, projectRoot) {
367
- if (!isFile(filePath)) return null;
368
- let data;
301
+ function resolveWorkspaceContract(repoRoot, change, options = {}) {
369
302
  try {
370
- data = JSON.parse(readText(filePath));
371
- } catch {
372
- return null;
373
- }
374
- if (!data || typeof data !== "object" || Array.isArray(data)) return null;
375
- if (data.schema_version !== 1 || data.path_base !== "project-root") return null;
376
- const state = data.roots?.state;
377
- if (typeof state !== "string" || !state.trim()) return null;
378
- const declared = toPosix(state).replace(/^\.?\//, "").replace(/\/$/, "");
379
- if (
380
- !declared ||
381
- declared.split("/").includes("..") ||
382
- isAbsolute(declared) ||
383
- ABSOLUTE_MACHINE_PATH_RE.test(declared)
384
- ) {
385
- return null;
386
- }
387
- const expected = resolve(projectRoot, declared, "workspace.json");
388
- if (expected !== resolve(filePath)) return null;
389
- return {
390
- filePath: resolve(filePath),
391
- projectRoot: resolve(projectRoot),
392
- stateDeclared: declared,
393
- stateRoot: resolve(projectRoot, declared),
394
- data,
395
- };
396
- }
397
-
398
- function workspaceProbes(projectRoot) {
399
- const root = resolve(projectRoot);
400
- return [
401
- { projectRoot: root, filePath: join(root, "speculo", ".speculo", "workspace.json") },
402
- { projectRoot: root, filePath: join(root, ".speculo", "workspace.json") },
403
- ];
404
- }
405
-
406
- function collectWorkspaceCandidates(repoRoot, change) {
407
- const probes = [];
408
- if (repoRoot) {
409
- probes.push(...workspaceProbes(repoRoot));
410
- } else {
411
- for (const dir of uniqueResolved([...ancestorsOf(change), ...ancestorsOf(process.cwd())])) {
412
- probes.push(...workspaceProbes(dir));
413
- }
414
- }
415
- const found = new Map();
416
- for (const probe of probes) {
417
- const parsed = parseWorkspaceCandidate(probe.filePath, probe.projectRoot);
418
- if (!parsed) continue;
419
- if (!found.has(parsed.filePath)) found.set(parsed.filePath, parsed);
420
- }
421
- return [...found.values()];
422
- }
423
-
424
- function isLegalChangeLocation(changeAbs, stateRoot) {
425
- const name = basename(changeAbs);
426
- if (resolve(stateRoot, "specdev", "changes", name) === changeAbs) return true;
427
- const monthDir = dirname(changeAbs);
428
- const archiveRoot = dirname(monthDir);
429
- return (
430
- /^\d{4}-\d{2}$/.test(basename(monthDir)) &&
431
- resolve(stateRoot, "specdev", "archive") === archiveRoot &&
432
- basename(changeAbs) === name
433
- );
434
- }
435
-
436
- function resolveWorkspaceContract(repoRoot, change) {
437
- const changeAbs = resolve(change);
438
- const candidates = collectWorkspaceCandidates(repoRoot, changeAbs);
439
- if (!candidates.length) {
440
- return { mode: "legacy", errors: [], config: null, specdevRoot: null, stateDeclared: null };
441
- }
442
- const uniqueRoots = uniqueResolved(candidates.map((candidate) => candidate.stateRoot));
443
- if (uniqueRoots.length > 1) {
444
- const declared = [...new Set(candidates.map((candidate) => candidate.stateDeclared))].sort();
445
- return {
446
- mode: "strict",
447
- errors: [`conflicting workspace.json roots.state (${declared.join(" vs ")})`],
448
- config: null,
449
- specdevRoot: null,
450
- stateDeclared: null,
451
- };
452
- }
453
- const workspace = candidates[0];
454
- const specdevRoot = join(workspace.stateRoot, "specdev");
455
- const errors = [];
456
- if (!isLegalChangeLocation(changeAbs, workspace.stateRoot)) {
457
- errors.push(
458
- `change is outside workspace roots.state (${workspace.stateDeclared}/specdev); project-root .speculo/specdev is illegal`,
459
- );
460
- }
461
- let config = null;
462
- const configPath = join(specdevRoot, "config.json");
463
- if (isFile(configPath)) {
464
- try {
465
- config = JSON.parse(readText(configPath));
466
- } catch {
467
- config = null;
468
- }
469
- }
470
- return {
471
- mode: "strict",
472
- errors,
473
- config,
474
- specdevRoot,
475
- stateDeclared: workspace.stateDeclared,
476
- };
477
- }
478
-
479
- function findSpecdevConfig(change, repoRoot = null) {
480
- const contract = resolveWorkspaceContract(repoRoot, change);
481
- if (contract.mode === "strict") return contract.config;
482
- return findSpecdevConfigByAncestry(change);
303
+ const context = options.readOnlySnapshot ? resolveSnapshotContext(options.readOnlySnapshot) : resolveToolContext(change, { ...options, repoRoot });
304
+ const location = runtime.resolveChangeSync(context, basename(change), { includeArchived: true });
305
+ const errors = canonicalToolPath(context, change) === location.root ? [] : ["change is outside the declared state root"];
306
+ const configPath = join(context.specdevRoot, "config.json");
307
+ const config = existsSync(configPath) ? JSON.parse(readText(runtime.safeWorkPathSync(context.specdevRoot, 'config.json', {mustExist:true,type:'file'}))) : null;
308
+ return { context, errors, config, specdevRoot:context.specdevRoot, stateDeclared:relative(context.projectRoot,context.stateRoot) };
309
+ } catch(error) { return {errors:[String(error)],config:null,specdevRoot:null}; }
483
310
  }
311
+ function findSpecdevConfig(change,repoRoot=null,options={}) {return resolveWorkspaceContract(repoRoot,change,options).config;}
484
312
 
485
313
  function positiveConfigLimit(config, key, fallback) {
486
314
  const value = config?.execution?.[key];
@@ -488,37 +316,10 @@ function positiveConfigLimit(config, key, fallback) {
488
316
  }
489
317
 
490
318
  function parseFrontmatter(path) {
491
- const text = readText(path);
492
- const lines = text.split(/\r?\n/);
493
- if (lines[0]?.trim() !== "---") return { meta: {}, body: text };
494
- const end = lines.findIndex((line, index) => index > 0 && line.trim() === "---");
495
- if (end < 0) return { meta: {}, body: text };
496
-
497
- const meta = {};
498
- let currentListKey = null;
499
- for (const line of lines.slice(1, end)) {
500
- const stripped = line.trim();
501
- if (!stripped || stripped.startsWith("#")) continue;
502
- if (currentListKey && /^\s+-\s+/.test(line)) {
503
- meta[currentListKey].push(parseScalar(line.replace(/^\s+-\s+/, "")));
504
- continue;
505
- }
506
- currentListKey = null;
507
- const colon = line.indexOf(":");
508
- if (colon < 0) continue;
509
- const key = line.slice(0, colon).trim();
510
- if (["__proto__", "constructor", "prototype"].includes(key) || Object.hasOwn(meta, key)) {
511
- throw new Error(`${path}: duplicate or unsafe frontmatter key ${key}`);
512
- }
513
- const raw = line.slice(colon + 1).trim();
514
- if (!raw) {
515
- meta[key] = [];
516
- currentListKey = key;
517
- } else {
518
- meta[key] = parseScalar(raw);
519
- }
520
- }
521
- return { meta, body: lines.slice(end + 1).join("\n") };
319
+ const text=readText(path);
320
+ if(!text.startsWith("---"))return {meta:{},body:text};
321
+ const parsed=parseYaml(text);
322
+ return {meta:parsed.fields,body:parsed.body};
522
323
  }
523
324
 
524
325
  function escapeRegExp(value) {
@@ -661,7 +462,7 @@ function validatePathValue(value, { allowProject = true } = {}) {
661
462
  }
662
463
  return null;
663
464
  }
664
- for (const [prefix, name] of [[SKILLS_PREFIX, "skills"], [COMMANDS_PREFIX, "commands"]]) {
465
+ for (const [prefix, name] of [[SKILLS_PREFIX, "skills"], [REFERENCES_PREFIX,"references"], [COMMANDS_PREFIX, "commands"]]) {
665
466
  if (value.startsWith(prefix)) {
666
467
  const suffix = value.slice(prefix.length);
667
468
  if (
@@ -698,12 +499,13 @@ function validateDocumentReferences(root) {
698
499
  const entries = walk(root);
699
500
  const frozenResearchRoot = join(
700
501
  root,
701
- "P-prototype",
502
+ "specdev-p-prototype",
702
503
  "design-library",
703
504
  "research-snapshot",
704
505
  );
506
+ const upstreamRoot = join(root, "specdev-p-prototype", "design-library", "upstream");
705
507
  const governedEntries = entries.filter(
706
- (path) => path !== frozenResearchRoot && !path.startsWith(`${frozenResearchRoot}${sep}`),
508
+ (path) => ![frozenResearchRoot, upstreamRoot].some(frozen => path === frozen || path.startsWith(`${frozen}${sep}`)),
707
509
  );
708
510
  const knownFiles = new Set(governedEntries.filter(isFile).map((path) => basename(path)));
709
511
  const knownDirectories = new Set(governedEntries.filter(isDirectory).map((path) => basename(path)));
@@ -750,13 +552,13 @@ function validateDocumentReferences(root) {
750
552
  );
751
553
  }
752
554
  }
753
- } else if (payload.startsWith(SKILLS_PREFIX) || payload.startsWith(COMMANDS_PREFIX)) {
754
- const isSkill = payload.startsWith(SKILLS_PREFIX);
755
- const prefix = isSkill ? SKILLS_PREFIX : COMMANDS_PREFIX;
555
+ } else if (payload.startsWith(REFERENCES_PREFIX) || payload.startsWith(COMMANDS_PREFIX)) {
556
+ const isSkill = payload.startsWith(REFERENCES_PREFIX);
557
+ const prefix = isSkill ? REFERENCES_PREFIX : COMMANDS_PREFIX;
756
558
  const referenced = payload.slice(prefix.length);
757
559
  if (!PLACEHOLDER_RE.test(referenced)) {
758
560
  const templateRoot = resolve(root, "..", "..");
759
- const target = join(templateRoot, isSkill ? "skills" : "commands", referenced);
561
+ const target = join(templateRoot, isSkill ? "references" : "commands", referenced);
760
562
  if (!existsSync(target)) {
761
563
  errors.push(`${label}:${lineNumber(text, match.index)}: broken public Path ${payload}`);
762
564
  }
@@ -771,15 +573,29 @@ function validateDocumentReferences(root) {
771
573
  }
772
574
  }
773
575
 
576
+ const workSegment = toPosix(relative(root, path)).split("/")[0];
577
+ const skillRoot = EXPECTED_WORKS.has(workSegment) ? join(root, workSegment) : null;
578
+ const acceptedLinks = [];
774
579
  for (const match of text.matchAll(RELATIVE_MD_LINK_RE)) {
775
- errors.push(
776
- `${label}:${lineNumber(text, match.index)}: relative Markdown link is forbidden: ${match[1]}`,
777
- );
580
+ const target = resolve(dirname(path), match[1].split("#")[0]);
581
+ if (skillRoot && target.startsWith(`${skillRoot}${sep}`) && existsSync(target)) acceptedLinks.push(match[0]);
582
+ else errors.push(`${label}:${lineNumber(text, match.index)}: relative Markdown link crosses its Skill package or is missing: ${match[1]}`);
583
+ }
584
+ // Browser assets need executable relative href/src values, not agent Path
585
+ // tags. Accept only existing targets inside the same Work package.
586
+ if (extname(path).toLowerCase() === ".html" && skillRoot) {
587
+ for (const match of text.matchAll(/(?:href|src)=["']([^"'#]+)(?:#[^"']*)?["']/g)) {
588
+ if (/^[a-z]+:|^\/\//i.test(match[1])) continue;
589
+ const target = resolve(dirname(path), match[1]);
590
+ if (target.startsWith(`${skillRoot}${sep}`) && existsSync(target)) acceptedLinks.push(match[0]);
591
+ else errors.push(`${label}: browser asset link crosses its Skill package or is missing: ${match[1]}`);
592
+ }
778
593
  }
779
594
 
780
595
  let withoutTags = text
781
596
  .replace(/`?\s*<Path>.*?<\/Path>\s*`?/gs, "")
782
597
  .replace(/`?\s*<Url>.*?<\/Url>\s*`?/gs, "");
598
+ for (const link of acceptedLinks) withoutTags = withoutTags.replaceAll(link, "");
783
599
 
784
600
  for (const match of withoutTags.matchAll(/\{roots\.(?:workflows|state)\}/g)) {
785
601
  errors.push(
@@ -852,29 +668,8 @@ function validateJsonFiles(root) {
852
668
 
853
669
  function validateGlobalStatusAssets(root) {
854
670
  const errors = [];
855
- const paths = [join(root, "I-init-setup", "status-template.json")];
856
- if (isDirectory(join(root, "_state"))) {
857
- paths.unshift(join(root, "_state", "status.json"));
858
- }
859
- for (const path of paths) {
860
- if (!isFile(path)) {
861
- errors.push(`missing global status seed ${toPosix(relative(root, path))}`);
862
- continue;
863
- }
864
- const data = JSON.parse(readText(path));
865
- const keys = Object.keys(data).sort();
866
- const expected = ["active", "archived", "schema_version", "workflow"];
867
- if (JSON.stringify(keys) !== JSON.stringify(expected)) {
868
- errors.push(`${toPosix(relative(root, path))}: global status must contain only ${expected.join(", ")}`);
869
- }
870
- if (
871
- data.schema_version !== GLOBAL_STATUS_SCHEMA_VERSION ||
872
- data.workflow !== "specdev" ||
873
- !Array.isArray(data.active) ||
874
- !Array.isArray(data.archived)
875
- ) {
876
- errors.push(`${toPosix(relative(root, path))}: invalid SpecDev global status v5 seed`);
877
- }
671
+ for (const path of [join(root,"_state/status.json"),join(root,"specdev-i-init-setup/assets/status-template.json"),join(root,"specdev-i-init-setup/assets/change-status-template.json")]) {
672
+ if (existsSync(path)) errors.push(`retired business status must not be distributed as a new seed: ${toPosix(relative(root,path))}`);
878
673
  }
879
674
 
880
675
  const schemaPath = join(root, "common", "schemas", "status.schema.json");
@@ -900,8 +695,7 @@ function validateGlobalStatusAssets(root) {
900
695
 
901
696
  function validateExecutionContractAssets(root) {
902
697
  const errors = [];
903
- const configTemplatePath = join(root, "I-init-setup", "config-template.json");
904
- const changeTemplatePath = join(root, "I-init-setup", "change-status-template.json");
698
+ const configTemplatePath = join(root, "specdev-i-init-setup", "assets/config-template.json");
905
699
  const configSchemaPath = join(root, "common", "schemas", "config.schema.json");
906
700
  const goalPlanSchemaPath = join(root, "common", "schemas", "goal-plan.schema.json");
907
701
  const changeSchemaPath = join(root, "common", "schemas", "change-status.schema.json");
@@ -910,7 +704,6 @@ function validateExecutionContractAssets(root) {
910
704
 
911
705
  for (const path of [
912
706
  configTemplatePath,
913
- changeTemplatePath,
914
707
  configSchemaPath,
915
708
  goalPlanSchemaPath,
916
709
  changeSchemaPath,
@@ -924,8 +717,8 @@ function validateExecutionContractAssets(root) {
924
717
  const configTemplate = JSON.parse(readText(configTemplatePath));
925
718
  if (
926
719
  configTemplate.schema_version !== CONFIG_SCHEMA_VERSION ||
927
- !Number.isInteger(configTemplate.execution?.max_implementation_agents) ||
928
- configTemplate.execution.max_implementation_agents < 1 ||
720
+ !Number.isInteger(configTemplate.execution?.max_concurrent_implementations) ||
721
+ configTemplate.execution.max_concurrent_implementations < 1 ||
929
722
  !Number.isInteger(configTemplate.execution?.max_integration_attempts) ||
930
723
  configTemplate.execution.max_integration_attempts < 1 ||
931
724
  !Number.isInteger(configTemplate.planning?.ui_design_default_candidates) ||
@@ -934,7 +727,7 @@ function validateExecutionContractAssets(root) {
934
727
  configTemplate.planning.ui_design_max_candidates > 4 ||
935
728
  configTemplate.planning.ui_design_max_candidates < configTemplate.planning.ui_design_default_candidates
936
729
  ) {
937
- errors.push("config-template.json must define SpecDev config v6 with positive execution limits and valid UI design candidate bounds");
730
+ errors.push("config-template.json must define SpecDev config v7 with positive execution limits and valid UI design candidate bounds");
938
731
  }
939
732
  for (const obsolete of ["auto_commit", "worktree_for_parallel", "max_parallel"]) {
940
733
  if (JSON.stringify(configTemplate).includes(`\"${obsolete}\"`)) {
@@ -943,38 +736,29 @@ function validateExecutionContractAssets(root) {
943
736
  }
944
737
 
945
738
  const configSchema = JSON.parse(readText(configSchemaPath));
946
- const limit = configSchema.properties?.execution?.properties?.max_implementation_agents;
739
+ const limit = configSchema.properties?.execution?.properties?.max_concurrent_implementations;
947
740
  if (
948
- configSchema.$id !== "urn:speculo:specdev:config:v6" ||
741
+ configSchema.$id !== "urn:speculo:specdev:config:v7" ||
949
742
  configSchema.properties?.schema_version?.const !== CONFIG_SCHEMA_VERSION ||
950
743
  limit?.minimum !== 1 ||
951
744
  configSchema.properties?.execution?.properties?.max_integration_attempts?.minimum !== 1 ||
952
745
  configSchema.additionalProperties !== false
953
746
  ) {
954
- errors.push("config.schema.json must define the strict SpecDev config v6 execution contract");
747
+ errors.push("config.schema.json must define the strict SpecDev config v7 execution contract");
955
748
  }
956
749
 
957
750
  const goalPlanSchema = JSON.parse(readText(goalPlanSchemaPath));
958
751
  if (
959
- goalPlanSchema.$id !== "urn:speculo:specdev:goal-plan:v6" ||
752
+ goalPlanSchema.$id !== "urn:speculo:specdev:goal-plan:v7" ||
960
753
  goalPlanSchema.properties?.schema_version?.const !== GOAL_PLAN_SCHEMA_VERSION ||
961
754
  goalPlanSchema.properties?.orchestration?.const !== "lead-directed" ||
962
- goalPlanSchema.properties?.implementation_agent_limit?.minimum !== 1 ||
755
+ goalPlanSchema.properties?.concurrent_implementation_limit?.minimum !== 1 ||
963
756
  goalPlanSchema.properties?.integration_attempt_limit?.minimum !== 1 ||
964
757
  !["current", "required"].every((value) => goalPlanSchema.properties?.ticket_workspace_policy?.enum?.includes(value)) ||
965
758
  !["direct-parent", "candidate-merge"].every((value) => goalPlanSchema.properties?.integration_gate?.enum?.includes(value)) ||
966
759
  goalPlanSchema.additionalProperties !== false
967
760
  ) {
968
- errors.push("goal-plan.schema.json must define the strict Lead-directed Goal Plan v6 workspace strategy contract");
969
- }
970
-
971
- const changeTemplate = JSON.parse(readText(changeTemplatePath));
972
- if (
973
- changeTemplate.schema_version !== CHANGE_STATUS_SCHEMA_VERSION ||
974
- changeTemplate.artifact !== "change-status" ||
975
- !Array.isArray(changeTemplate.worktrees)
976
- ) {
977
- errors.push("change-status-template.json must define the SpecDev change-status v6 seed");
761
+ errors.push("goal-plan.schema.json must define the strict Lead-directed Goal Plan v7 workspace strategy contract");
978
762
  }
979
763
 
980
764
  const changeSchema = JSON.parse(readText(changeSchemaPath));
@@ -1001,10 +785,10 @@ function validateExecutionContractAssets(root) {
1001
785
  }
1002
786
  const implementationPlanSchema = JSON.parse(readText(implementationPlanSchemaPath));
1003
787
  if (
1004
- implementationPlanSchema.$id !== "urn:speculo:specdev:implementation-plan:v1" ||
788
+ implementationPlanSchema.$id !== "urn:speculo:specdev:implementation-plan:v2" ||
1005
789
  implementationPlanSchema.properties?.schema_version?.const !== IMPLEMENTATION_PLAN_SCHEMA_VERSION ||
1006
790
  implementationPlanSchema.properties?.orchestration?.const !== "lead-directed" ||
1007
- implementationPlanSchema.properties?.implementation_agent_limit?.minimum !== 1 ||
791
+ implementationPlanSchema.properties?.concurrent_implementation_limit?.minimum !== 1 ||
1008
792
  implementationPlanSchema.properties?.integration_attempt_limit?.minimum !== 1 ||
1009
793
  !["current", "required"].every((value) => implementationPlanSchema.properties?.ticket_workspace_policy?.enum?.includes(value)) ||
1010
794
  implementationPlanSchema.additionalProperties !== false
@@ -1019,12 +803,12 @@ function capabilityChecks(root) {
1019
803
  [
1020
804
  "init",
1021
805
  [
1022
- join(root, "I-init-setup", "I-init-setup.md"),
806
+ join(root, "specdev-i-init-setup", "SKILL.md"),
1023
807
  [
1024
- "tracking-template",
1025
- "domain-layout-template",
1026
- "config-template",
1027
- "change-status-template",
808
+ "first-setup.md",
809
+ "current-facts-docs.md",
810
+ "必要偏好",
811
+ "README",
1028
812
  "specdev-worktree/",
1029
813
  ],
1030
814
  ],
@@ -1032,28 +816,28 @@ function capabilityChecks(root) {
1032
816
  [
1033
817
  "triage",
1034
818
  [
1035
- join(root, "T-triage", "T-triage.md"),
819
+ join(root, "specdev-t-triage", "SKILL.md"),
1036
820
  ["intake", "reconcile", "publish", "capture", "capture.md", "pr-delivery", "ci-security", "release-preflight", "recover", "remote-operations.md"],
1037
821
  ],
1038
822
  ],
1039
823
  [
1040
824
  "spec",
1041
825
  [
1042
- join(root, "S-spec", "S-spec.md"),
1043
- ["用户故事", "验收合同", "代码", "CONTEXT", "ADR", "验证接缝", "ready_for_tickets"],
826
+ join(root, "specdev-s-spec", "SKILL.md"),
827
+ ["用户端到端行为", "验收合同", "代码", "CONTEXT", "ADR", "验证接缝", "ready_for_tickets"],
1044
828
  ],
1045
829
  ],
1046
830
  [
1047
831
  "tickets",
1048
832
  [
1049
- join(root, "T-tickets", "T-tickets.md"),
833
+ join(root, "specdev-t-tickets", "SKILL.md"),
1050
834
  ["Prefactor", "垂直切片", "Expand", "与用户核对", "Definition of Ready"],
1051
835
  ],
1052
836
  ],
1053
837
  [
1054
838
  "goal-plan",
1055
839
  [
1056
- join(root, "P-goal-plan", "P-goal-plan.md"),
840
+ join(root, "specdev-p-goal-plan", "SKILL.md"),
1057
841
  [
1058
842
  "Outcome",
1059
843
  "权威来源",
@@ -1061,7 +845,7 @@ function capabilityChecks(root) {
1061
845
  "Gate",
1062
846
  "Wave",
1063
847
  "lead-directed",
1064
- "implementation_agent_limit",
848
+ "concurrent_implementation_limit",
1065
849
  "candidate-merge",
1066
850
  "lead-orchestration.md",
1067
851
  "Definition of Done",
@@ -1071,70 +855,70 @@ function capabilityChecks(root) {
1071
855
  [
1072
856
  "implement",
1073
857
  [
1074
- join(root, "I-implement", "I-implement.md"),
1075
- ["codebase-design", "design-it-twice", "TDD", "双轴审查", "Evidence", "parent-candidate", "subagent-delivery", "实现 commit"],
858
+ join(root, "specdev-i-implement", "SKILL.md"),
859
+ ["codebase-design", "design-it-twice", "TDD", "双轴审查", "Evidence", "parent-candidate", "共享编排方法", "实现 commit"],
1076
860
  ],
1077
861
  ],
1078
862
  [
1079
863
  "code-review",
1080
864
  [
1081
- join(root, "C-code-review", "C-code-review.md"),
865
+ join(root, "specdev-c-code-review", "SKILL.md"),
1082
866
  ["--review-scope", "baseline", "range", "commit", "pr", "no-diff", "固定点", "标准轴", "规范轴", "未合并排名", "reviews/CR-###.md"],
1083
867
  ],
1084
868
  ],
1085
869
  [
1086
870
  "prototype",
1087
871
  [
1088
- join(root, "P-prototype", "P-prototype.md"),
872
+ join(root, "specdev-p-prototype", "SKILL.md"),
1089
873
  ["设计定向", "风格", "design-system.md", "comparison", "HTML/CSS/JS", "design-library/INDEX.md"],
1090
874
  ],
1091
875
  ],
1092
876
  [
1093
- "learn-change",
877
+ "learn",
1094
878
  [
1095
- join(root, "L-learn-change", "L-learn-change.md"),
1096
- ["开发完成后", "零专业背景", "$ARGUMENTS", "ASCII", "learning/index.md", "{number}_{topic}.md", "{roots.state}/learning/"],
879
+ join(root, "specdev-l-learn", "SKILL.md"),
880
+ ["需求参考", "零专业背景", "$ARGUMENTS", "ASCII", "learning-change.md", "learning/index.md", "{number}_{topic}.md", "{roots.state}/learning/"],
1097
881
  ],
1098
882
  ],
1099
883
  [
1100
884
  "wayfinder",
1101
885
  [
1102
- join(root, "W-wayfinder", "W-wayfinder.md"),
1103
- ["共享地图", "claimed_investigations", "wayfinder:prototype", "wayfinder:grilling", "solution comment", "每个会话"],
886
+ join(root, "specdev-w-wayfinder", "SKILL.md"),
887
+ ["共享地图", "调查认领", "wayfinder:prototype", "wayfinder:grilling", "solution comment", "每个会话"],
1104
888
  ],
1105
889
  ],
1106
890
  [
1107
891
  "architecture-review",
1108
892
  [
1109
- join(root, "R-review-architecture", "R-review-architecture.md"),
893
+ join(root, "specdev-r-review-architecture", "SKILL.md"),
1110
894
  ["结构性坏味道", "code-judo", "删除测试", "高置信候选", "最佳推荐"],
1111
895
  ],
1112
896
  ],
1113
897
  [
1114
898
  "architecture-review-rubric",
1115
899
  [
1116
- join(root, "R-review-architecture", "review-rubric.md"),
900
+ join(root, "specdev-r-review-architecture", "references/review-rubric.md"),
1117
901
  ["删除测试", "文件大小", "高置信候选", "spaghetti growth"],
1118
902
  ],
1119
903
  ],
1120
904
  [
1121
905
  "archive",
1122
906
  [
1123
- join(root, "A-archive-and-consolidate", "A-archive-and-consolidate.md"),
907
+ join(root, "specdev-a-archive-and-consolidate", "SKILL.md"),
1124
908
  ["archive-single", "dry-run", "external_action", "publish_action", "consolidate-from-code", "archive-and-consolidate"],
1125
909
  ],
1126
910
  ],
1127
911
  [
1128
912
  "grill",
1129
913
  [
1130
- join(root, "G-grill-with-docs", "G-grill-with-docs.md"),
914
+ join(root, "specdev-g-grill-with-docs", "SKILL.md"),
1131
915
  ["完整 frontier", "design-tree.json", "LOG.md", "CONTEXT.md", "ADR.md", "推荐答案", "永久 namespace 对 G 只读"],
1132
916
  ],
1133
917
  ],
1134
918
  [
1135
919
  "diagnosis",
1136
920
  [
1137
- join(root, "D-diagnose-bugs", "D-diagnose-bugs.md"),
921
+ join(root, "specdev-d-diagnose-bugs", "SKILL.md"),
1138
922
  ["红灯", "反馈回路", "最小化", "可证伪", "根因", "回归测试"],
1139
923
  ],
1140
924
  ],
@@ -1156,35 +940,35 @@ function capabilityChecks(root) {
1156
940
  "common/rules/codebase-design.md",
1157
941
  "common/schemas/design-tree.schema.json",
1158
942
  "common/schemas/wayfinder-ticket.schema.json",
1159
- "G-grill-with-docs/design-tree-template.json",
1160
- "W-wayfinder/local-tracker-contract.md",
1161
- "W-wayfinder/solution-comment-template.md",
943
+ "specdev-g-grill-with-docs/assets/design-tree-template.json",
944
+ "specdev-w-wayfinder/references/local-tracker-contract.md",
945
+ "specdev-w-wayfinder/assets/solution-comment-template.md",
1162
946
  "common/rules/parent-implementation-orchestration.md",
1163
947
  "common/schemas/implementation-map.schema.json",
1164
948
  "common/schemas/implementation-plan.schema.json",
1165
949
  "common/schemas/capture.schema.json",
1166
- "T-triage/capture-protocol.md",
1167
- "T-triage/capture-template.md",
1168
- "T-triage/issue-record-template.md",
1169
- "T-triage/tools/capture-status.mjs",
950
+ "specdev-t-triage/references/capture-protocol.md",
951
+ "specdev-t-triage/assets/capture-template.md",
952
+ "specdev-t-triage/assets/issue-record-template.md",
953
+ "specdev-t-triage/scripts/capture-status.mjs",
1170
954
  ]) {
1171
955
  if (!isFile(join(root, required))) errors.push(`missing architecture/wayfinding contract ${required}`);
1172
956
  }
1173
957
 
1174
- const mapTemplate = join(root, "W-wayfinder", "wayfinder-map-template.md");
958
+ const mapTemplate = join(root, "specdev-w-wayfinder", "assets/wayfinder-map-template.md");
1175
959
  if (isFile(mapTemplate) && /^## (?:开放 Tickets|调查清单)/m.test(readText(mapTemplate))) {
1176
960
  errors.push("Wayfinder map template must query open Tickets instead of caching them");
1177
961
  }
1178
962
 
1179
- const goalPlanTemplate = join(root, "P-goal-plan", "goal-plan-template.md");
963
+ const goalPlanTemplate = join(root, "specdev-p-goal-plan", "assets/goal-plan-template.md");
1180
964
  if (!isFile(goalPlanTemplate)) {
1181
965
  errors.push("missing Goal Plan template");
1182
966
  } else {
1183
967
  const text = readText(goalPlanTemplate);
1184
968
  for (const required of [
1185
- "schema_version: 6",
969
+ "schema_version: 7",
1186
970
  "orchestration: lead-directed",
1187
- "implementation_agent_limit: 3",
971
+ "concurrent_implementation_limit: 3",
1188
972
  "integration_attempt_limit: 3",
1189
973
  "ticket_workspace_policy: current",
1190
974
  "integration_gate: direct-parent",
@@ -1209,11 +993,11 @@ function selfCheck(root) {
1209
993
  const errors = [];
1210
994
  const warnings = [];
1211
995
 
1212
- if (!isFile(join(root, "INDEX.md"))) errors.push("missing package INDEX");
996
+ if (!isFile(join(root, "SKILL.md"))) errors.push("missing domain Skill");
1213
997
 
1214
998
  const actualWorks = new Set(
1215
999
  readdirSync(root, { withFileTypes: true })
1216
- .filter((entry) => entry.isDirectory() && /^[A-Z]-/.test(entry.name))
1000
+ .filter((entry) => entry.isDirectory() && /^specdev-[a-z]-/.test(entry.name))
1217
1001
  .map((entry) => entry.name),
1218
1002
  );
1219
1003
  const missingWorks = [...EXPECTED_WORKS].filter((name) => !actualWorks.has(name));
@@ -1223,23 +1007,16 @@ function selfCheck(root) {
1223
1007
 
1224
1008
  const ids = [];
1225
1009
  for (const directoryName of [...actualWorks].sort()) {
1226
- const entry = join(root, directoryName, `${directoryName}.md`);
1010
+ const entry = join(root, directoryName, "SKILL.md");
1227
1011
  if (!isFile(entry)) {
1228
1012
  errors.push(`missing work entry ${toPosix(relative(root, entry))}`);
1229
1013
  continue;
1230
1014
  }
1231
1015
  const { meta } = parseFrontmatter(entry);
1232
- if (meta.type !== "workflow-entry") {
1233
- errors.push(`${toPosix(relative(root, entry))}: type must be workflow-entry`);
1234
- }
1235
- if (meta.workflow !== "specdev") {
1236
- errors.push(`${toPosix(relative(root, entry))}: workflow must be specdev`);
1237
- }
1238
- if (typeof meta.id !== "string" || !meta.id.startsWith("specdev/")) {
1239
- errors.push(`${toPosix(relative(root, entry))}: invalid work id`);
1240
- } else {
1241
- ids.push(meta.id);
1242
- }
1016
+ errors.push(...validateSkill(readText(entry),directoryName).map(error=>entry+": "+error));
1017
+ if(meta.metadata?.["speculo-kind"]!=="work-skill" || meta.metadata?.["speculo-domain"]!=="specdev")errors.push(entry+": invalid Work metadata");
1018
+ const id=meta.metadata?.["speculo-id"];
1019
+ if(typeof id!=="string"||!id.startsWith("specdev/"))errors.push(entry+": invalid work id");else ids.push(id);
1243
1020
  }
1244
1021
  if (ids.length !== new Set(ids).size) errors.push("duplicate workflow entry id");
1245
1022
 
@@ -1377,7 +1154,7 @@ function validateSource(path, expectedChange, errors) {
1377
1154
  return { path, meta, body };
1378
1155
  }
1379
1156
 
1380
- function validateTriage(path, expectedChange, errors, historical = false) {
1157
+ function validateTriage(path, expectedChange, errors) {
1381
1158
  if (!isFile(path)) {
1382
1159
  errors.push("missing triage artifact");
1383
1160
  return null;
@@ -1398,8 +1175,8 @@ function validateTriage(path, expectedChange, errors, historical = false) {
1398
1175
  ];
1399
1176
  const missing = required.filter((key) => !(key in meta));
1400
1177
  if (missing.length) errors.push(`triage.md: missing keys ${JSON.stringify(missing)}`);
1401
- if ((meta.schema_version !== 2 && !(historical && meta.schema_version === 1)) || meta.artifact !== "triage") {
1402
- errors.push("triage.md: artifact/schema_version must be triage/2; v1 is historical read-only");
1178
+ if (meta.schema_version !== 2 || meta.artifact !== "triage") {
1179
+ errors.push("triage.md: artifact/schema_version must be triage/2");
1403
1180
  }
1404
1181
  if (meta.schema_version === 2) {
1405
1182
  if (!["needs-triage", "needs-info", "ready-for-agent", "ready-for-human", "wontfix"].includes(meta.disposition)) errors.push("triage.md: invalid disposition");
@@ -1710,10 +1487,12 @@ function validateReviews(change, required, errors) {
1710
1487
  return paths;
1711
1488
  }
1712
1489
 
1713
- function validatePrototypes(change, required, errors) {
1490
+ function validatePrototypes(change, required, errors, prototypeId = null, consumingDesign = false, context = null) {
1714
1491
  const root = join(change, "prototypes");
1492
+ const changeDesign = isFile(join(change, "DESIGN.md")) ? parseFrontmatter(join(change, "DESIGN.md")).meta : null;
1493
+ const boundId = changeDesign?.prototype_ref?.id;
1715
1494
  if (!isDirectory(root)) {
1716
- if (required) errors.push("prototype stage requires a prototypes/UI-NNN/design-system.md artifact");
1495
+ if (required || boundId) errors.push("prototype stage requires a prototypes/UI-NNN/design-system.md artifact");
1717
1496
  return [];
1718
1497
  }
1719
1498
 
@@ -1721,16 +1500,21 @@ function validatePrototypes(change, required, errors) {
1721
1500
  dirname(fileURLToPath(import.meta.url)),
1722
1501
  "..",
1723
1502
  "..",
1724
- "P-prototype",
1725
- "tools",
1503
+ "specdev-p-prototype",
1504
+ "scripts",
1726
1505
  "validate-design-package.mjs",
1727
1506
  );
1728
1507
  const paths = [];
1729
1508
  let readyCount = 0;
1509
+ const candidates = readdirSync(root).filter(name => /^(?:UI|LOGIC)-\d{3,}$/.test(name));
1510
+ if (required && !prototypeId && candidates.length !== 1) errors.push("prototype stage requires --prototype-id when multiple packages exist");
1511
+ const selectedId = prototypeId ?? (required && candidates.length === 1 ? candidates[0] : !required ? boundId : null);
1512
+ if (selectedId && !candidates.includes(selectedId)) errors.push(`prototype not found: ${selectedId}`);
1730
1513
 
1731
1514
  for (const entry of readdirSync(root, { withFileTypes: true })) {
1732
1515
  const entryPath = join(root, entry.name);
1733
1516
  const label = toPosix(relative(change, entryPath));
1517
+ if (selectedId && entry.name !== selectedId) continue;
1734
1518
  if (entry.isSymbolicLink()) {
1735
1519
  errors.push(`${label}: prototype design directories and files must not be symlinks`);
1736
1520
  continue;
@@ -1758,9 +1542,10 @@ function validatePrototypes(change, required, errors) {
1758
1542
  }
1759
1543
  paths.push(designPath);
1760
1544
  const { meta } = parseFrontmatter(designPath);
1545
+ if (consumingDesign && entry.name === boundId && meta.status !== "ready") errors.push(`${label}: bound UI prototype must be ready before downstream consumption`);
1761
1546
  if (meta.status === "ready") readyCount += 1;
1762
1547
  try {
1763
- execFileSync(process.execPath, [validator, designPath], {
1548
+ execFileSync(process.execPath, [validator, ...contextArguments(context), ...(consumingDesign && entry.name === boundId ? ["--check-ready"] : []), designPath], {
1764
1549
  encoding: "utf8",
1765
1550
  stdio: ["ignore", "pipe", "pipe"],
1766
1551
  });
@@ -1774,13 +1559,14 @@ function validatePrototypes(change, required, errors) {
1774
1559
  }
1775
1560
  }
1776
1561
 
1777
- const obsoleteRecords = walk(root).filter(
1562
+ const scanRoot = selectedId && isDirectory(join(root, selectedId)) ? join(root, selectedId) : root;
1563
+ const obsoleteRecords = walk(scanRoot).filter(
1778
1564
  (path) => isFile(path) && basename(path) === "record.md",
1779
1565
  );
1780
1566
  for (const path of obsoleteRecords) {
1781
1567
  errors.push(`${toPosix(relative(change, path))}: obsolete prototype record is forbidden; use UI-NNN/design-system.md`);
1782
1568
  }
1783
- const discoveredDesigns = walk(root).filter(
1569
+ const discoveredDesigns = walk(scanRoot).filter(
1784
1570
  (path) => isFile(path) && basename(path) === "design-system.md",
1785
1571
  );
1786
1572
  for (const path of discoveredDesigns) {
@@ -1789,7 +1575,7 @@ function validatePrototypes(change, required, errors) {
1789
1575
  }
1790
1576
  }
1791
1577
  if (required && readyCount === 0) {
1792
- errors.push("prototype stage requires at least one ready UI or logic design package");
1578
+ errors.push("prototype stage requires the selected ready UI or logic design package");
1793
1579
  }
1794
1580
  return paths;
1795
1581
  }
@@ -1800,7 +1586,7 @@ function validateChangeLearning(change, required, errors) {
1800
1586
  const diagramName = /^\d{2,}_[\p{L}\p{N}_-]+\.md$/u;
1801
1587
 
1802
1588
  if (!existsSync(learningRoot)) {
1803
- if (required) errors.push("learn-change stage requires learning/index.md");
1589
+ if (required) errors.push("learn stage requires learning/index.md");
1804
1590
  return null;
1805
1591
  }
1806
1592
  if (lstatSync(learningRoot).isSymbolicLink() || !isDirectory(learningRoot)) {
@@ -1809,22 +1595,27 @@ function validateChangeLearning(change, required, errors) {
1809
1595
  }
1810
1596
 
1811
1597
  const diagramFiles = [];
1598
+ const diagramNumbers = new Set();
1812
1599
  for (const entry of readdirSync(learningRoot, { withFileTypes: true })) {
1813
1600
  if (entry.isSymbolicLink()) {
1814
1601
  errors.push(`learning/${entry.name}: learning artifacts must not be symlinks`);
1815
1602
  } else if (entry.isFile() && diagramName.test(entry.name)) {
1816
1603
  diagramFiles.push(entry.name);
1604
+ const number = Number(entry.name.split("_")[0]);
1605
+ if (diagramNumbers.has(number)) errors.push(`learning/${entry.name}: duplicate diagram number ${number}`);
1606
+ diagramNumbers.add(number);
1817
1607
  }
1818
1608
  }
1819
1609
  diagramFiles.sort();
1820
1610
 
1821
1611
  if (!isFile(indexPath)) {
1822
- errors.push("learn-change stage requires learning/index.md");
1612
+ errors.push("learn stage requires learning/index.md");
1823
1613
  return null;
1824
1614
  }
1825
1615
 
1826
1616
  const index = readText(indexPath);
1827
- if (!index.includes("# Change 学习图解索引")) {
1617
+ // Historical titles remain readable without rewriting existing learning records.
1618
+ if (!/^# (?:Change )?学习图解索引\s*$/m.test(index)) {
1828
1619
  errors.push("learning/index.md: missing index heading");
1829
1620
  }
1830
1621
  const entries = Array.from(
@@ -2076,7 +1867,7 @@ function validateGoalPlan(path, errors) {
2076
1867
  "modes",
2077
1868
  "orchestration",
2078
1869
  "lead",
2079
- "implementation_agent_limit",
1870
+ "concurrent_implementation_limit",
2080
1871
  "integration_attempt_limit",
2081
1872
  "ticket_workspace_policy",
2082
1873
  "integration_gate",
@@ -2100,8 +1891,8 @@ function validateGoalPlan(path, errors) {
2100
1891
  if (typeof meta.lead !== "string" || !meta.lead.trim()) {
2101
1892
  errors.push(`${basename(path)}: lead must be a non-empty recoverable locator`);
2102
1893
  }
2103
- if (!Number.isInteger(meta.implementation_agent_limit) || meta.implementation_agent_limit < 1) {
2104
- errors.push(`${basename(path)}: implementation_agent_limit must be a positive integer`);
1894
+ if (!Number.isInteger(meta.concurrent_implementation_limit) || meta.concurrent_implementation_limit < 1) {
1895
+ errors.push(`${basename(path)}: concurrent_implementation_limit must be a positive integer`);
2105
1896
  }
2106
1897
  if (!Number.isInteger(meta.integration_attempt_limit) || meta.integration_attempt_limit < 1) {
2107
1898
  errors.push(`${basename(path)}: integration_attempt_limit must be a positive integer`);
@@ -2154,25 +1945,9 @@ function validateGoalPlan(path, errors) {
2154
1945
  return { path, meta, body };
2155
1946
  }
2156
1947
 
2157
- function validateGoalPlanRuntimeLimits(path, change, goalPlan, errors, repoRoot = null) {
1948
+ function validateGoalPlanRuntimeLimits(path, change, goalPlan, errors, repoRoot = null, options = {}) {
2158
1949
  if (!goalPlan) return;
2159
- const config = findSpecdevConfig(change, repoRoot);
2160
- if (!config) {
2161
- errors.push(`${basename(path)}: SpecDev config.json is required to validate execution limits`);
2162
- return;
2163
- }
2164
- const configuredAgents = positiveConfigLimit(config, "max_implementation_agents", 0);
2165
- const configuredAttempts = positiveConfigLimit(config, "max_integration_attempts", 0);
2166
- if (config.schema_version !== CONFIG_SCHEMA_VERSION || configuredAgents === 0 || configuredAttempts === 0) {
2167
- errors.push(`${basename(path)}: SpecDev config.json must use schema v${CONFIG_SCHEMA_VERSION} with positive execution limits`);
2168
- return;
2169
- }
2170
- if (goalPlan.meta.implementation_agent_limit > configuredAgents) {
2171
- errors.push(`${basename(path)}: implementation_agent_limit ${goalPlan.meta.implementation_agent_limit} exceeds config max_implementation_agents ${configuredAgents}`);
2172
- }
2173
- if (goalPlan.meta.integration_attempt_limit > configuredAttempts) {
2174
- errors.push(`${basename(path)}: integration_attempt_limit ${goalPlan.meta.integration_attempt_limit} exceeds config max_integration_attempts ${configuredAttempts}`);
2175
- }
1950
+ errors.push(...validateExecutionPolicy(goalPlan, findSpecdevConfig(change, repoRoot, options)).map(error => `${basename(path)}: ${error}`));
2176
1951
  }
2177
1952
 
2178
1953
  function validateDesignTree(path, change, errors) {
@@ -2439,61 +2214,24 @@ function validateTicket(path, errors) {
2439
2214
  return { path, meta, body };
2440
2215
  }
2441
2216
 
2442
- function validateChangeStatus(path, expectedChange, errors) {
2443
- if (!isFile(path)) {
2444
- errors.push("missing change status artifact");
2445
- return null;
2446
- }
2217
+ function validateChangeExecution(change, errors, context) {
2218
+ const path = join(change, "evidence"), expectedChange = basename(change);
2447
2219
  let data;
2448
2220
  try {
2449
- data = JSON.parse(readText(path));
2450
- } catch (error) {
2451
- errors.push(`${basename(path)}: invalid JSON: ${error.message}`);
2452
- return null;
2453
- }
2454
- const required = [
2455
- "schema_version",
2456
- "artifact",
2457
- "change",
2458
- "change_status",
2459
- "current_work",
2460
- "works_run",
2461
- "claimed_investigations",
2462
- "execution_authorization",
2463
- "leadership",
2464
- "created_at",
2465
- "updated_at",
2466
- "completed_at",
2467
- "archived",
2468
- "archive_path",
2469
- "blockers",
2470
- "deviations",
2471
- "worktrees",
2472
- ];
2473
- const missing = required.filter((key) => !(key in data));
2474
- if (missing.length) errors.push(`${basename(path)}: missing keys ${JSON.stringify(missing.sort())}`);
2475
- const unexpected = Object.keys(data).filter((key) => !required.includes(key));
2476
- if (unexpected.length) errors.push(`${basename(path)}: unexpected keys ${JSON.stringify(unexpected.sort())}`);
2477
- if (data.schema_version !== CHANGE_STATUS_SCHEMA_VERSION || data.artifact !== "change-status") {
2478
- errors.push(`${basename(path)}: artifact/schema_version must be change-status/${CHANGE_STATUS_SCHEMA_VERSION}`);
2479
- }
2480
- if (data.change !== expectedChange) {
2481
- errors.push(`${basename(path)}: change must equal directory name ${expectedChange}`);
2482
- }
2483
- if (!new Set(["active", "blocked", "completed", "archived"]).has(data.change_status)) {
2484
- errors.push(`${basename(path)}: invalid change_status ${data.change_status}`);
2485
- }
2486
- if (!Array.isArray(data.blockers) || !Array.isArray(data.deviations) || !Array.isArray(data.worktrees)) {
2487
- errors.push(`${basename(path)}: blockers, deviations, and worktrees must be arrays`);
2488
- }
2221
+ const facts = runtime.readChangeFactsSync(context, basename(change));
2222
+ if (facts.location.root !== resolve(change)) throw new Error('change identity does not match requested location');
2223
+ data = { ...facts, worktrees:readChangeExecution(change) };
2224
+ } catch (error) { errors.push(`${change}: ${error.message}`); return null; }
2489
2225
  const seenWorktreeTickets = new Set();
2490
2226
  for (const worktree of Array.isArray(data.worktrees) ? data.worktrees : []) {
2491
2227
  if (!worktree || typeof worktree !== "object" || Array.isArray(worktree)) {
2492
2228
  errors.push(`${basename(path)}: invalid worktree entry`);
2493
2229
  continue;
2494
2230
  }
2231
+ const direct = worktree.purpose === "direct-spec";
2232
+ const unit = direct ? "direct-spec" : worktree.ticket_id;
2495
2233
  const requiredWorktreeKeys = [
2496
- "ticket_id",
2234
+ ...(direct ? ["purpose", "change", "integration_attempt_limit"] : ["ticket_id"]),
2497
2235
  "owner",
2498
2236
  "implementation_owner",
2499
2237
  "integration_owner",
@@ -2514,14 +2252,24 @@ function validateChangeStatus(path, expectedChange, errors) {
2514
2252
  }
2515
2253
  const unexpectedWorktreeKeys = Object.keys(worktree).filter((key) => !requiredWorktreeKeys.includes(key));
2516
2254
  if (unexpectedWorktreeKeys.length) {
2517
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} has unexpected keys ${JSON.stringify(unexpectedWorktreeKeys.sort())}`);
2255
+ errors.push(`${basename(path)}: worktree ${unit} has unexpected keys ${JSON.stringify(unexpectedWorktreeKeys.sort())}`);
2518
2256
  }
2519
- if (!/^T-[0-9]{2,}$/.test(String(worktree.ticket_id))) {
2520
- errors.push(`${basename(path)}: invalid worktree ticket_id ${worktree.ticket_id}`);
2521
- } else if (seenWorktreeTickets.has(worktree.ticket_id)) {
2522
- errors.push(`${basename(path)}: duplicate worktree for ${worktree.ticket_id}`);
2523
- }
2524
- seenWorktreeTickets.add(worktree.ticket_id);
2257
+ if (direct) {
2258
+ if (worktree.change !== expectedChange) errors.push("Direct Spec execution belongs to another change");
2259
+ try {
2260
+ if (readChangeOwner(context, expectedChange).owner !== worktree.owner) errors.push("Direct Spec execution owner differs from original Lead");
2261
+ } catch (error) { errors.push(error.message); }
2262
+ if (!Number.isInteger(worktree.integration_attempt_limit) || worktree.integration_attempt_limit < 1) errors.push("Direct Spec requires a positive integration_attempt_limit");
2263
+ if (worktree.integration?.attempts > worktree.integration_attempt_limit) errors.push("Direct Spec integration attempts exceed integration_attempt_limit");
2264
+ if (worktree.integration_owner !== worktree.owner) errors.push("Direct Spec integration owner must be Lead");
2265
+ if (worktree.status === "cancelled" && data.outcome !== "cancelled") errors.push("cancelled Direct Spec execution requires the original whole-change cancellation");
2266
+ if (worktree.workspace_ref !== "current" && worktree.branch !== `speculo/${expectedChange}/direct-spec`) errors.push("Direct Spec source branch must match its change");
2267
+ } else if (!/^T-[0-9]{2,}$/.test(String(unit))) {
2268
+ errors.push(`${basename(path)}: invalid worktree ticket_id ${unit}`);
2269
+ } else if (seenWorktreeTickets.has(unit)) {
2270
+ errors.push(`${basename(path)}: duplicate worktree for ${unit}`);
2271
+ }
2272
+ seenWorktreeTickets.add(unit);
2525
2273
  const ref = worktree.workspace_ref;
2526
2274
  if (
2527
2275
  typeof ref !== "string" ||
@@ -2531,20 +2279,20 @@ function validateChangeStatus(path, expectedChange, errors) {
2531
2279
  errors.push(`${basename(path)}: workspace_ref must be a portable non-absolute locator`);
2532
2280
  continue;
2533
2281
  }
2534
- if (!VALID_WORKTREE_STATUS.has(worktree.status)) {
2282
+ if (!VALID_WORKTREE_STATUS.has(worktree.status) && !(direct && worktree.status === "cancelled")) {
2535
2283
  errors.push(`${basename(path)}: invalid worktree status ${worktree.status}`);
2536
2284
  }
2537
2285
  const currentWorkspace = ref === "current";
2538
2286
  if (worktree.provider !== "git") {
2539
- errors.push(`${basename(path)}: Ticket worktree ${worktree.ticket_id} provider must be git`);
2287
+ errors.push(`${basename(path)}: Ticket worktree ${unit} provider must be git`);
2540
2288
  }
2541
- const expectedRef = `specdev-worktree/${expectedChange}/${worktree.ticket_id}`;
2289
+ const expectedRef = `specdev-worktree/${expectedChange}/${unit}`;
2542
2290
  if (!currentWorkspace && ref !== expectedRef) {
2543
2291
  errors.push(`${basename(path)}: git workspace_ref must equal ${expectedRef}`);
2544
2292
  }
2545
2293
 
2546
2294
  if ("terminal_action" in worktree) {
2547
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} obsolete terminal_action is not allowed`);
2295
+ errors.push(`${basename(path)}: worktree ${unit} obsolete terminal_action is not allowed`);
2548
2296
  }
2549
2297
  const requiredIntegrationKeys = [
2550
2298
  "owner",
@@ -2556,35 +2304,35 @@ function validateChangeStatus(path, expectedChange, errors) {
2556
2304
  ];
2557
2305
  const missingIntegrationKeys = requiredIntegrationKeys.filter((key) => !(key in worktree));
2558
2306
  if (missingIntegrationKeys.length) {
2559
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration contract missing ${JSON.stringify(missingIntegrationKeys)}`);
2307
+ errors.push(`${basename(path)}: worktree ${unit} integration contract missing ${JSON.stringify(missingIntegrationKeys)}`);
2560
2308
  continue;
2561
2309
  }
2562
2310
  for (const key of ["owner", "implementation_owner", "integration_owner", "base_sha", "parent_branch", "branch", "updated_at"]) {
2563
2311
  if (typeof worktree[key] !== "string" || !worktree[key].trim()) {
2564
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${key} is required`);
2312
+ errors.push(`${basename(path)}: worktree ${unit} ${key} is required`);
2565
2313
  }
2566
2314
  }
2567
2315
  if (typeof worktree.parent_branch !== "string" || !worktree.parent_branch.trim()) {
2568
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} parent_branch is required`);
2316
+ errors.push(`${basename(path)}: worktree ${unit} parent_branch is required`);
2569
2317
  } else if (currentWorkspace && worktree.parent_branch !== worktree.branch) {
2570
- errors.push(`${basename(path)}: current workspace ${worktree.ticket_id} branch must equal parent_branch`);
2318
+ errors.push(`${basename(path)}: current workspace ${unit} branch must equal parent_branch`);
2571
2319
  } else if (!currentWorkspace && worktree.parent_branch === worktree.branch) {
2572
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} parent_branch must differ from branch`);
2320
+ errors.push(`${basename(path)}: worktree ${unit} parent_branch must differ from branch`);
2573
2321
  }
2574
2322
 
2575
2323
  const sourceRequired = new Set(["review", "integrating", "integrated", "removed"]).has(worktree.status);
2576
2324
  if (sourceRequired && (typeof worktree.source_checkpoint !== "string" || !worktree.source_checkpoint.trim())) {
2577
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires source_checkpoint`);
2325
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires source_checkpoint`);
2578
2326
  } else if (
2579
2327
  worktree.source_checkpoint !== null &&
2580
2328
  (typeof worktree.source_checkpoint !== "string" || !worktree.source_checkpoint.trim())
2581
2329
  ) {
2582
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} source_checkpoint must be null or non-empty`);
2330
+ errors.push(`${basename(path)}: worktree ${unit} source_checkpoint must be null or non-empty`);
2583
2331
  }
2584
2332
 
2585
2333
  const integration = worktree.integration;
2586
2334
  if (!integration || typeof integration !== "object" || Array.isArray(integration)) {
2587
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration must be an object`);
2335
+ errors.push(`${basename(path)}: worktree ${unit} integration must be an object`);
2588
2336
  continue;
2589
2337
  }
2590
2338
  const requiredResultKeys = [
@@ -2608,49 +2356,48 @@ function validateChangeStatus(path, expectedChange, errors) {
2608
2356
  ];
2609
2357
  const missingResultKeys = requiredResultKeys.filter((key) => !(key in integration));
2610
2358
  if (missingResultKeys.length) {
2611
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration missing ${JSON.stringify(missingResultKeys)}`);
2359
+ errors.push(`${basename(path)}: worktree ${unit} integration missing ${JSON.stringify(missingResultKeys)}`);
2612
2360
  }
2613
2361
  const unexpectedResultKeys = Object.keys(integration).filter((key) => !requiredResultKeys.includes(key));
2614
2362
  if (unexpectedResultKeys.length) {
2615
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration has unexpected keys ${JSON.stringify(unexpectedResultKeys.sort())}`);
2363
+ errors.push(`${basename(path)}: worktree ${unit} integration has unexpected keys ${JSON.stringify(unexpectedResultKeys.sort())}`);
2616
2364
  }
2617
2365
  if (!VALID_INTEGRATION_STATUS.has(integration.status)) {
2618
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} has invalid integration status ${integration.status}`);
2366
+ errors.push(`${basename(path)}: worktree ${unit} has invalid integration status ${integration.status}`);
2619
2367
  }
2620
2368
  if (!VALID_INTEGRATION_METHOD.has(integration.method)) {
2621
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} has invalid integration method ${integration.method}`);
2369
+ errors.push(`${basename(path)}: worktree ${unit} has invalid integration method ${integration.method}`);
2622
2370
  }
2623
2371
  if (!VALID_INTEGRATION_VERIFICATION.has(integration.verification)) {
2624
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} has invalid integration verification ${integration.verification}`);
2372
+ errors.push(`${basename(path)}: worktree ${unit} has invalid integration verification ${integration.verification}`);
2625
2373
  }
2626
2374
  if (!Array.isArray(integration.conflict_paths)) {
2627
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} conflict_paths must be an array`);
2375
+ errors.push(`${basename(path)}: worktree ${unit} conflict_paths must be an array`);
2628
2376
  }
2629
2377
  if (!Number.isInteger(integration.attempts) || integration.attempts < 0) {
2630
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} attempts must be a non-negative integer`);
2378
+ errors.push(`${basename(path)}: worktree ${unit} attempts must be a non-negative integer`);
2631
2379
  }
2632
- if (
2633
- typeof integration.evidence !== "string" ||
2634
- !/^<Path>\{roots\.state\}\/specdev\/changes\/[^<]+\/evidence\/T-[0-9]{2,}\.md<\/Path>$/.test(integration.evidence)
2635
- ) {
2636
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration evidence must be a rooted Ticket Evidence path`);
2380
+ const expectedEvidence = `<Path>{roots.state}/specdev/changes/${expectedChange}/evidence/${unit}.md</Path>`;
2381
+ if (direct ? integration.evidence !== expectedEvidence : typeof integration.evidence !== "string" || !/^<Path>\{roots\.state\}\/specdev\/changes\/[^<]+\/evidence\/T-[0-9]{2,}\.md<\/Path>$/.test(integration.evidence)) {
2382
+ errors.push(`${basename(path)}: worktree ${unit} integration evidence must be its rooted Evidence path: ${expectedEvidence}`);
2637
2383
  }
2638
2384
  if (!new Set(["pending", "applying", "applied", "failed", "stale"]).has(integration.promotion_status)) {
2639
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} has invalid promotion_status ${integration.promotion_status}`);
2385
+ errors.push(`${basename(path)}: worktree ${unit} has invalid promotion_status ${integration.promotion_status}`);
2640
2386
  }
2641
2387
  for (const [name, suite] of [["full_suite", integration.full_suite], ["e2e", integration.e2e]]) {
2642
2388
  if (!suite || typeof suite !== "object" || Array.isArray(suite) || typeof suite.required !== "boolean" || !VALID_E2E_STATUS.has(suite.status)) {
2643
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${name} contract is invalid`);
2389
+ errors.push(`${basename(path)}: worktree ${unit} ${name} contract is invalid`);
2644
2390
  continue;
2645
2391
  }
2646
2392
  const unexpectedSuiteKeys = Object.keys(suite).filter((key) => !new Set(["required", "status", "reason", "evidence"]).has(key));
2647
- if (unexpectedSuiteKeys.length) errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${name} has unexpected keys ${JSON.stringify(unexpectedSuiteKeys.sort())}`);
2393
+ if (unexpectedSuiteKeys.length) errors.push(`${basename(path)}: worktree ${unit} ${name} has unexpected keys ${JSON.stringify(unexpectedSuiteKeys.sort())}`);
2648
2394
  if (suite.required === false && (suite.status !== "not-required" || typeof suite.reason !== "string" || !suite.reason.trim())) {
2649
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} non-required ${name} needs not-required status and reason`);
2395
+ errors.push(`${basename(path)}: worktree ${unit} non-required ${name} needs not-required status and reason`);
2650
2396
  }
2651
2397
  if (suite.required === true && suite.status === "not-required") {
2652
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} required ${name} cannot be not-required`);
2398
+ errors.push(`${basename(path)}: worktree ${unit} required ${name} cannot be not-required`);
2653
2399
  }
2400
+ if (direct && suite.required === true && suite.status === "passed" && (typeof suite.evidence !== "string" || !suite.evidence.trim())) errors.push(`Direct Spec passed ${name} requires actual evidence`);
2654
2401
  }
2655
2402
  const e2e = integration.e2e;
2656
2403
  if (
@@ -2660,65 +2407,65 @@ function validateChangeStatus(path, expectedChange, errors) {
2660
2407
  typeof e2e.required !== "boolean" ||
2661
2408
  !VALID_E2E_STATUS.has(e2e.status)
2662
2409
  ) {
2663
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration e2e contract is invalid`);
2410
+ errors.push(`${basename(path)}: worktree ${unit} integration e2e contract is invalid`);
2664
2411
  } else {
2665
2412
  const unexpectedE2eKeys = Object.keys(e2e).filter((key) => !new Set(["required", "status", "reason", "evidence"]).has(key));
2666
2413
  if (unexpectedE2eKeys.length) {
2667
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} integration e2e has unexpected keys ${JSON.stringify(unexpectedE2eKeys.sort())}`);
2414
+ errors.push(`${basename(path)}: worktree ${unit} integration e2e has unexpected keys ${JSON.stringify(unexpectedE2eKeys.sort())}`);
2668
2415
  }
2669
2416
  if (e2e.required === false && e2e.status !== "not-required") {
2670
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} non-required E2E must use status=not-required`);
2417
+ errors.push(`${basename(path)}: worktree ${unit} non-required E2E must use status=not-required`);
2671
2418
  }
2672
2419
  if (e2e.required === true && e2e.status === "not-required") {
2673
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} required E2E cannot be not-required`);
2420
+ errors.push(`${basename(path)}: worktree ${unit} required E2E cannot be not-required`);
2674
2421
  }
2675
2422
  if (
2676
2423
  e2e.required === true &&
2677
2424
  e2e.status === "passed" &&
2678
2425
  (typeof e2e.evidence !== "string" || !e2e.evidence.trim())
2679
2426
  ) {
2680
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} passed required E2E needs evidence`);
2427
+ errors.push(`${basename(path)}: worktree ${unit} passed required E2E needs evidence`);
2681
2428
  }
2682
2429
  }
2683
2430
  const integrationLifecycleActive = new Set(["integrating", "integrated", "removed"]).has(worktree.status);
2684
2431
  if (integrationLifecycleActive) {
2685
2432
  if (typeof integration.parent_before_sha !== "string" || !integration.parent_before_sha.trim()) {
2686
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires parent_before_sha`);
2433
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires parent_before_sha`);
2687
2434
  }
2688
2435
  if (typeof integration.source_sha !== "string" || !integration.source_sha.trim()) {
2689
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires source_sha`);
2436
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires source_sha`);
2690
2437
  } else if (integration.source_sha !== worktree.source_checkpoint) {
2691
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} source_sha must equal source_checkpoint`);
2438
+ errors.push(`${basename(path)}: worktree ${unit} source_sha must equal source_checkpoint`);
2692
2439
  }
2693
2440
  if (currentWorkspace) {
2694
2441
  if (integration.candidate_sha !== null || integration.candidate_tree_sha !== null || integration.candidate_branch !== null || integration.candidate_workspace_ref !== null) {
2695
- errors.push(`${basename(path)}: current workspace ${worktree.ticket_id} cannot record candidate workspace fields`);
2442
+ errors.push(`${basename(path)}: current workspace ${unit} cannot record candidate workspace fields`);
2696
2443
  }
2697
2444
  if (integration.method !== "direct-parent") {
2698
- errors.push(`${basename(path)}: current workspace ${worktree.ticket_id} requires integration.method=direct-parent`);
2445
+ errors.push(`${basename(path)}: current workspace ${unit} requires integration.method=direct-parent`);
2699
2446
  }
2700
2447
  } else {
2701
2448
  if (typeof integration.candidate_sha !== "string" || !integration.candidate_sha.trim()) {
2702
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires candidate_sha`);
2449
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires candidate_sha`);
2703
2450
  }
2704
- const expectedCandidateBranch = `speculo/integration/${expectedChange}/${worktree.ticket_id}`;
2451
+ const expectedCandidateBranch = `speculo/integration/${expectedChange}/${unit}`;
2705
2452
  if (integration.candidate_branch !== expectedCandidateBranch) {
2706
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} candidate_branch must equal ${expectedCandidateBranch}`);
2453
+ errors.push(`${basename(path)}: worktree ${unit} candidate_branch must equal ${expectedCandidateBranch}`);
2707
2454
  }
2708
- const expectedCandidateRef = `specdev-worktree/.integration/${expectedChange}/${worktree.ticket_id}`;
2455
+ const expectedCandidateRef = `specdev-worktree/.integration/${expectedChange}/${unit}`;
2709
2456
  if (integration.candidate_workspace_ref !== expectedCandidateRef) {
2710
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} candidate_workspace_ref must equal ${expectedCandidateRef}`);
2457
+ errors.push(`${basename(path)}: worktree ${unit} candidate_workspace_ref must equal ${expectedCandidateRef}`);
2711
2458
  }
2712
2459
  if (!new Set(["fast-forward", "merge-commit"]).has(integration.method)) {
2713
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires an integration method`);
2460
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires an integration method`);
2714
2461
  }
2715
2462
  }
2716
2463
  if (!Number.isInteger(integration.attempts) || integration.attempts < 1) {
2717
- errors.push(`${basename(path)}: worktree ${worktree.ticket_id} ${worktree.status} requires attempts >= 1`);
2464
+ errors.push(`${basename(path)}: worktree ${unit} ${worktree.status} requires attempts >= 1`);
2718
2465
  }
2719
2466
  }
2720
2467
  if (worktree.status === "integrating" && integration.status !== "candidate") {
2721
- errors.push(`${basename(path)}: integrating worktree ${worktree.ticket_id} requires integration.status=candidate`);
2468
+ errors.push(`${basename(path)}: integrating worktree ${unit} requires integration.status=candidate`);
2722
2469
  }
2723
2470
  if (new Set(["integrated", "removed"]).has(worktree.status)) {
2724
2471
  if (
@@ -2728,49 +2475,41 @@ function validateChangeStatus(path, expectedChange, errors) {
2728
2475
  typeof integration.result_sha !== "string" ||
2729
2476
  !integration.result_sha.trim() ||
2730
2477
  (currentWorkspace ? integration.result_sha !== worktree.source_checkpoint : integration.result_sha !== integration.candidate_sha) ||
2478
+ (direct && (integration.promotion_status !== "applied" || !new Set(["not-required", "passed"]).has(integration.full_suite?.status))) ||
2731
2479
  !e2e ||
2732
2480
  !new Set(["not-required", "passed"]).has(e2e.status)
2733
2481
  ) {
2734
- errors.push(`${basename(path)}: ${worktree.status} worktree ${worktree.ticket_id} requires passed candidate/result/E2E state`);
2482
+ errors.push(`${basename(path)}: ${worktree.status} worktree ${unit} requires passed candidate/result/E2E state`);
2735
2483
  }
2736
2484
  if (currentWorkspace && integration.method === "direct-parent") {
2737
2485
  if (integration.candidate_sha !== null || integration.candidate_tree_sha !== null || integration.candidate_branch !== null || integration.candidate_workspace_ref !== null) {
2738
- errors.push(`${basename(path)}: current workspace ${worktree.ticket_id} direct-parent cannot record candidate fields`);
2486
+ errors.push(`${basename(path)}: current workspace ${unit} direct-parent cannot record candidate fields`);
2739
2487
  }
2740
2488
  if (integration.result_sha !== worktree.source_checkpoint) {
2741
- errors.push(`${basename(path)}: current workspace ${worktree.status} ${worktree.ticket_id} result_sha must equal source_checkpoint`);
2489
+ errors.push(`${basename(path)}: current workspace ${worktree.status} ${unit} result_sha must equal source_checkpoint`);
2742
2490
  }
2743
2491
  } else if (integration.method === "fast-forward") {
2744
2492
  if (integration.candidate_sha !== worktree.source_checkpoint) {
2745
- errors.push(`${basename(path)}: ${worktree.status} worktree ${worktree.ticket_id} fast-forward candidate/result must equal source_checkpoint`);
2493
+ errors.push(`${basename(path)}: ${worktree.status} worktree ${unit} fast-forward candidate/result must equal source_checkpoint`);
2746
2494
  }
2747
2495
  if (Array.isArray(integration.conflict_paths) && integration.conflict_paths.length > 0) {
2748
- errors.push(`${basename(path)}: ${worktree.status} worktree ${worktree.ticket_id} fast-forward cannot record conflict_paths`);
2496
+ errors.push(`${basename(path)}: ${worktree.status} worktree ${unit} fast-forward cannot record conflict_paths`);
2749
2497
  }
2750
2498
  } else if (
2751
2499
  integration.method === "merge-commit" &&
2752
2500
  typeof integration.candidate_sha === "string" &&
2753
2501
  (integration.candidate_sha === worktree.source_checkpoint || integration.candidate_sha === integration.parent_before_sha)
2754
2502
  ) {
2755
- errors.push(`${basename(path)}: ${worktree.status} worktree ${worktree.ticket_id} merge-commit candidate must be a distinct checkpoint`);
2503
+ errors.push(`${basename(path)}: ${worktree.status} worktree ${unit} merge-commit candidate must be a distinct checkpoint`);
2756
2504
  }
2757
2505
  }
2758
2506
  }
2759
- if (data.change_status === "archived") {
2760
- if (data.archived !== true) errors.push(`${basename(path)}: archived status requires archived=true`);
2761
- const inner = typeof data.archive_path === "string" ? stripPathTag(data.archive_path) : null;
2762
- if (inner === null || !inner.startsWith(`${STATE_PREFIX}archive/`)) {
2763
- errors.push(`${basename(path)}: archived status requires a rooted archive_path`);
2764
- }
2765
- } else if (data.archived === true) {
2766
- errors.push(`${basename(path)}: archived=true conflicts with change_status=${data.change_status}`);
2767
- }
2768
2507
  return data;
2769
2508
  }
2770
2509
 
2771
2510
  function validateCurrentWorkspaceExecution(changeStatus, goalPlan, errors) {
2772
- if (goalPlan?.meta.ticket_workspace_policy !== "current") return;
2773
- const entries = Array.isArray(changeStatus?.worktrees) ? changeStatus.worktrees : [];
2511
+ const allEntries = Array.isArray(changeStatus?.worktrees) ? changeStatus.worktrees : [];
2512
+ const entries = goalPlan?.meta.ticket_workspace_policy === "current" ? allEntries : allEntries.filter(entry => entry.workspace_ref === "current");
2774
2513
  const active = [];
2775
2514
  for (const worktree of entries) {
2776
2515
  if (worktree.workspace_ref !== "current") {
@@ -2780,7 +2519,7 @@ function validateCurrentWorkspaceExecution(changeStatus, goalPlan, errors) {
2780
2519
  errors.push(`${worktree.ticket_id}: current workspace execution must commit directly on parent_branch`);
2781
2520
  }
2782
2521
  if (new Set(["active", "review", "integrating", "blocked"]).has(worktree.status)) {
2783
- active.push(worktree.ticket_id);
2522
+ active.push(worktree.ticket_id ?? worktree.purpose);
2784
2523
  }
2785
2524
  const integration = worktree.integration;
2786
2525
  if (integration && typeof integration === "object" && !Array.isArray(integration)) {
@@ -2819,7 +2558,7 @@ function gitSucceeds(repoRoot, args) {
2819
2558
  }
2820
2559
 
2821
2560
  function validateGitEvidence(repoRoot, changeStatus, errors) {
2822
- if (!repoRoot) return;
2561
+ if (!repoRoot || !changeStatus?.worktrees?.length) return;
2823
2562
  const resolvedRoot = resolve(repoRoot);
2824
2563
  if (gitOutput(resolvedRoot, ["rev-parse", "--is-inside-work-tree"]) !== "true") {
2825
2564
  errors.push(`--repo is not a Git worktree: ${resolvedRoot}`);
@@ -2827,7 +2566,7 @@ function validateGitEvidence(repoRoot, changeStatus, errors) {
2827
2566
  }
2828
2567
  const currentBranch = gitOutput(resolvedRoot, ["branch", "--show-current"]);
2829
2568
  for (const worktree of Array.isArray(changeStatus?.worktrees) ? changeStatus.worktrees : []) {
2830
- const label = String(worktree.ticket_id ?? "worktree");
2569
+ const label = String(worktree.ticket_id ?? worktree.purpose ?? "worktree");
2831
2570
  for (const [name, sha] of [
2832
2571
  ["base_sha", worktree.base_sha],
2833
2572
  ["source_checkpoint", worktree.source_checkpoint],
@@ -2851,13 +2590,56 @@ function validateGitEvidence(repoRoot, changeStatus, errors) {
2851
2590
  } else if (worktree.integration?.source_sha && worktree.base_sha && !gitSucceeds(resolvedRoot, ["merge-base", "--is-ancestor", worktree.base_sha, worktree.integration.source_sha])) {
2852
2591
  errors.push(`${label}: source_sha must descend from base_sha`);
2853
2592
  }
2593
+ if (worktree.workspace_ref !== "current" && new Set(["active","review","integrating","blocked"]).has(worktree.status)) {
2594
+ try {
2595
+ const source = runtime.safeWorkPathSync(resolvedRoot,worktree.workspace_ref,{mustExist:true,type:"directory"});
2596
+ const common = gitOutput(resolvedRoot,["rev-parse","--path-format=absolute","--git-common-dir"]);
2597
+ if (gitOutput(source,["rev-parse","--path-format=absolute","--git-common-dir"]) !== common || gitOutput(source,["branch","--show-current"]) !== worktree.branch) errors.push(`${label}: source workspace must be a real isolated worktree of the recorded repository and branch`);
2598
+ } catch(error) { errors.push(`${label}: actual source isolation is missing: ${error.message}`); }
2599
+ }
2600
+ if (worktree.status === "integrating" && worktree.workspace_ref !== "current") {
2601
+ try {
2602
+ const candidate = runtime.safeWorkPathSync(resolvedRoot,worktree.integration.candidate_workspace_ref,{mustExist:true,type:"directory"});
2603
+ if (gitOutput(candidate,["rev-parse","HEAD"]) !== worktree.integration.candidate_sha || gitOutput(candidate,["rev-parse","HEAD^{tree}"]) !== worktree.integration.candidate_tree_sha) errors.push(`${label}: actual candidate workspace differs from the recorded checkpoint/tree`);
2604
+ } catch(error) { errors.push(`${label}: actual candidate isolation is missing: ${error.message}`); }
2605
+ }
2606
+ if (worktree.purpose === "direct-spec") {
2607
+ const integration = worktree.integration;
2608
+ if (worktree.source_checkpoint && gitOutput(resolvedRoot, ["rev-parse", worktree.branch]) !== worktree.source_checkpoint && worktree.status !== "removed") errors.push(`${label}: source branch tip differs from source_checkpoint`);
2609
+ if (worktree.source_checkpoint && !gitSucceeds(resolvedRoot, ["merge-base", "--is-ancestor", worktree.base_sha, worktree.source_checkpoint])) errors.push(`${label}: source_checkpoint must descend from base_sha`);
2610
+ if (worktree.workspace_ref !== "current" && new Set(["review", "integrating", "integrated"]).has(worktree.status)) {
2611
+ try {
2612
+ const source = runtime.safeWorkPathSync(resolvedRoot, worktree.workspace_ref, {mustExist:true,type:"directory"});
2613
+ if (gitOutput(source, ["status", "--porcelain"])) errors.push(`${label}: source worktree is dirty`);
2614
+ } catch (error) { errors.push(`${label}: source worktree missing before cleanup: ${error.message}`); }
2615
+ }
2616
+ if (integration?.candidate_sha) {
2617
+ if (gitOutput(resolvedRoot, ["rev-parse", `${integration.candidate_sha}^{tree}`]) !== integration.candidate_tree_sha) errors.push(`${label}: candidate tree differs from recorded tree`);
2618
+ for (const sha of [integration.parent_before_sha, worktree.source_checkpoint]) {
2619
+ if (sha && !gitSucceeds(resolvedRoot, ["merge-base", "--is-ancestor", sha, integration.candidate_sha])) errors.push(`${label}: candidate must contain parent and source checkpoints`);
2620
+ }
2621
+ }
2622
+ const parent = gitOutput(resolvedRoot, ["rev-parse", worktree.parent_branch]);
2623
+ if (worktree.status === "integrating" && worktree.workspace_ref !== "current") {
2624
+ try {
2625
+ const candidate = runtime.safeWorkPathSync(resolvedRoot, integration.candidate_workspace_ref, {mustExist:true,type:"directory"});
2626
+ if (gitOutput(candidate, ["rev-parse", "--path-format=absolute", "--git-common-dir"]) !== gitOutput(resolvedRoot, ["rev-parse", "--path-format=absolute", "--git-common-dir"]) || gitOutput(candidate, ["branch", "--show-current"]) !== integration.candidate_branch || gitOutput(candidate, ["status", "--porcelain"])) errors.push(`${label}: candidate must be a clean worktree of the recorded repository and branch`);
2627
+ } catch (error) { errors.push(`${label}: candidate cannot be inspected: ${error.message}`); }
2628
+ }
2629
+ if (worktree.status === "integrating" && parent !== integration?.parent_before_sha) errors.push(`${label}: parent HEAD drifted; candidate must be marked stale and rebuilt`);
2630
+ if (new Set(["failed", "stale"]).has(integration?.status) && parent === integration.candidate_sha && parent !== integration.parent_before_sha) errors.push(`${label}: failed or stale candidate has already advanced the parent; reconcile before continuing`);
2631
+ if (new Set(["integrated", "removed"]).has(worktree.status)) {
2632
+ if (parent !== integration?.result_sha) errors.push(`${label}: parent branch HEAD must equal recorded result_sha`);
2633
+ if (!gitSucceeds(resolvedRoot, ["merge-base", "--is-ancestor", worktree.source_checkpoint, parent])) errors.push(`${label}: parent must contain source_checkpoint`);
2634
+ }
2635
+ }
2854
2636
  if (new Set(["integrated", "removed"]).has(worktree.status) && gitOutput(resolvedRoot, ["status", "--porcelain"])) {
2855
2637
  errors.push(`${label}: repository is dirty while Ticket is recorded as ${worktree.status}`);
2856
2638
  }
2857
2639
  }
2858
2640
  }
2859
2641
 
2860
- function validateParentImplementation(change, parentStatus, stage, errors, warnings, repoRoot = null) {
2642
+ function validateParentImplementation(change, parentStatus, stage, errors, warnings, repoRoot = null, options = {}) {
2861
2643
  const mapPath = join(change, "implementation-map.md");
2862
2644
  const planPath = join(change, "implementation-plan.md");
2863
2645
  if (!isFile(mapPath)) errors.push("parent implementation requires implementation-map.md");
@@ -2868,7 +2650,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
2868
2650
  const map = parseFrontmatter(mapPath);
2869
2651
  const plan = parseFrontmatter(planPath);
2870
2652
  const mapKeys = ["schema_version", "artifact", "change", "status", "revision", "members", "tasks", "dependencies", "serializations"];
2871
- const planKeys = ["schema_version", "artifact", "change", "status", "source_map_revision", "orchestration", "lead", "implementation_agent_limit", "integration_attempt_limit", "ticket_workspace_policy", "integration_gate", "ready_for_execution"];
2653
+ const planKeys = ["schema_version", "artifact", "change", "status", "source_map_revision", "orchestration", "lead", "concurrent_implementation_limit", "integration_attempt_limit", "ticket_workspace_policy", "integration_gate", "ready_for_execution"];
2872
2654
  for (const [label, meta, expected] of [
2873
2655
  ["implementation-map.md", map.meta, mapKeys],
2874
2656
  ["implementation-plan.md", plan.meta, planKeys],
@@ -2899,7 +2681,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
2899
2681
  if (plan.meta.orchestration !== "lead-directed" || typeof plan.meta.lead !== "string" || !plan.meta.lead.trim()) {
2900
2682
  errors.push("implementation-plan.md: lead-directed orchestration requires a recoverable Lead");
2901
2683
  }
2902
- for (const key of ["implementation_agent_limit", "integration_attempt_limit"]) {
2684
+ for (const key of ["concurrent_implementation_limit", "integration_attempt_limit"]) {
2903
2685
  if (!Number.isInteger(plan.meta[key]) || plan.meta[key] < 1) {
2904
2686
  errors.push(`implementation-plan.md: ${key} must be a positive integer`);
2905
2687
  }
@@ -2965,7 +2747,8 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
2965
2747
  errors.push(`implementation-map.md: invalid member change name ${member}`);
2966
2748
  continue;
2967
2749
  }
2968
- const memberRoot = join(changesRoot, member);
2750
+ let memberRoot;
2751
+ try { memberRoot = runtime.resolveChangeSync(options.context,member,{includeArchived:parentStatus?.location.kind === "archive"}).root; } catch(error) { errors.push(`member change does not exist or has invalid identity: ${member}: ${error.message}`); continue; }
2969
2752
  if (!isDirectory(memberRoot)) {
2970
2753
  errors.push(`implementation-map.md: member change does not exist: ${member}`);
2971
2754
  continue;
@@ -2976,13 +2759,11 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
2976
2759
 
2977
2760
  const memberErrors = [];
2978
2761
  const memberWarnings = [];
2979
- const status = validateChangeStatus(join(memberRoot, ".status.json"), member, memberErrors);
2762
+ const status = validateChangeExecution(memberRoot, memberErrors, options.context);
2980
2763
  if (status) {
2981
2764
  memberStatuses.set(member, status);
2982
- if (status.change_status === "archived") memberErrors.push("archived change cannot be an implementation member");
2983
- if (status.current_work !== null && status.current_work !== "specdev/implement") {
2984
- memberErrors.push(`current_work=${status.current_work} conflicts with parent implementation ownership`);
2985
- }
2765
+ if (parentStatus?.outcome === "completed") validateGitEvidence(options.context.projectRoot,status,memberErrors);
2766
+ if (parentStatus?.location.kind !== "archive" && status.location.kind !== "active") memberErrors.push("archived change cannot be an implementation member");
2986
2767
  for (const worktree of Array.isArray(status.worktrees) ? status.worktrees : []) {
2987
2768
  if (worktree?.status === "active") {
2988
2769
  activeImplementations += 1;
@@ -3092,7 +2873,7 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
3092
2873
  const uncovered = [...declared].filter((id) => !covered.has(id) && !(childMap && new RegExp(`${escapeRegExp(id)}.*\\bdeferred\\b`, "i").test(childMap.body)));
3093
2874
  if (uncovered.length) memberErrors.push(`Spec acceptance contracts are not covered by Tickets: ${JSON.stringify(uncovered.sort())}`);
3094
2875
  }
3095
- if (status?.change_status === "completed") {
2876
+ if (status?.outcome === "completed") {
3096
2877
  const unfinished = [...childTickets].filter(([, artifact]) => !new Set(["done", "cancelled"]).has(artifact.meta.status)).map(([id]) => id);
3097
2878
  if (unfinished.length) memberErrors.push(`completed member has unfinished Tickets: ${JSON.stringify(unfinished)}`);
3098
2879
  }
@@ -3207,30 +2988,18 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
3207
2988
  if (!Array.isArray(otherMap.members)) continue;
3208
2989
  let otherStatus = null;
3209
2990
  try {
3210
- otherStatus = JSON.parse(readText(join(changesRoot, entry.name, ".status.json"))).change_status;
2991
+ otherStatus = runtime.readChangeFactsSync(options.context, entry.name).outcome;
3211
2992
  } catch {
3212
2993
  // Invalid competing parents still own their members conservatively.
3213
2994
  }
3214
- if (new Set(["completed", "archived"]).has(otherStatus)) continue;
2995
+ if (new Set(["completed", "cancelled"]).has(otherStatus)) continue;
3215
2996
  const overlap = otherMap.members.map(String).filter((member) => memberSet.has(member));
3216
2997
  if (overlap.length) errors.push(`member changes already belong to unfinished parent implementation ${entry.name}: ${JSON.stringify(overlap)}`);
3217
2998
  }
3218
2999
 
3219
- const config = findSpecdevConfig(change, repoRoot);
3220
- const configuredAgents = positiveConfigLimit(config, "max_implementation_agents", 0);
3221
- const configuredAttempts = positiveConfigLimit(config, "max_integration_attempts", 0);
3222
- if (!config || config.schema_version !== CONFIG_SCHEMA_VERSION || configuredAgents === 0 || configuredAttempts === 0) {
3223
- errors.push("implementation-plan.md: SpecDev config v6 with positive execution limits is required");
3224
- } else {
3225
- if (plan.meta.implementation_agent_limit > configuredAgents) {
3226
- errors.push(`implementation-plan.md: implementation_agent_limit ${plan.meta.implementation_agent_limit} exceeds config max_implementation_agents ${configuredAgents}`);
3227
- }
3228
- if (plan.meta.integration_attempt_limit > configuredAttempts) {
3229
- errors.push(`implementation-plan.md: integration_attempt_limit ${plan.meta.integration_attempt_limit} exceeds config max_integration_attempts ${configuredAttempts}`);
3230
- }
3231
- }
3232
- if (activeImplementations > plan.meta.implementation_agent_limit) {
3233
- errors.push(`parent implementation agent limit exceeded: ${activeImplementations} active for limit ${plan.meta.implementation_agent_limit}`);
3000
+ errors.push(...validateExecutionPolicy(plan, findSpecdevConfig(change, repoRoot, options)).map(error => `implementation-plan.md: ${error}`));
3001
+ if (activeImplementations > plan.meta.concurrent_implementation_limit) {
3002
+ errors.push(`parent implementation agent limit exceeded: ${activeImplementations} active for limit ${plan.meta.concurrent_implementation_limit}`);
3234
3003
  }
3235
3004
  if (plan.meta.ticket_workspace_policy === "current" && activeCurrentWriters > 1) {
3236
3005
  errors.push(`parent current policy permits only one active implementation writer; found ${activeCurrentWriters}`);
@@ -3239,24 +3008,14 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
3239
3008
  if (count > 1) errors.push(`repository/ref integration must be serialized for ${ref}; found ${count}`);
3240
3009
  }
3241
3010
 
3242
- if (stage === "goal-plan" && parentStatus && new Set(["active", "blocked"]).has(parentStatus.change_status) && !new Set(["specdev/goal-plan"]).has(parentStatus.current_work)) {
3243
- errors.push("parent active/blocked status must keep current_work=specdev/goal-plan");
3244
- }
3245
- if (parentStatus?.change_status === "completed") {
3246
- const incomplete = members.filter((member) => memberStatuses.get(member)?.change_status !== "completed");
3011
+ if (parentStatus?.outcome === "completed") {
3012
+ const incomplete = members.filter((member) => memberStatuses.get(member)?.outcome !== "completed");
3247
3013
  if (incomplete.length) errors.push(`parent implementation is completed while members remain incomplete: ${JSON.stringify(incomplete)}`);
3248
3014
  const unfinished = [...ticketByTask].filter(([, value]) => !new Set(["done", "cancelled"]).has(value.artifact.meta.status)).map(([task]) => task);
3249
3015
  if (unfinished.length) errors.push(`completed parent implementation has unfinished composite tasks: ${JSON.stringify(unfinished)}`);
3250
3016
  if (map.meta.status !== "completed" || plan.meta.status !== "completed") {
3251
3017
  errors.push("completed parent requires completed Implementation Map and Implementation Plan");
3252
3018
  }
3253
- if (
3254
- parentStatus.current_work !== null ||
3255
- !Array.isArray(parentStatus.blockers) || parentStatus.blockers.length > 0 ||
3256
- !Array.isArray(parentStatus.deviations) || parentStatus.deviations.length > 0
3257
- ) {
3258
- errors.push("completed parent requires null current_work and no blockers or deviations");
3259
- }
3260
3019
  const activeMemberWork = [...memberStatuses]
3261
3020
  .flatMap(([member, status]) => (status.worktrees ?? []).map((worktree) => ({ member, worktree })))
3262
3021
  .filter(({ worktree }) => new Set(["planned", "active", "review", "integrating", "blocked"]).has(worktree?.status) || worktree?.integration?.status === "candidate")
@@ -3300,23 +3059,47 @@ function validateParentImplementation(change, parentStatus, stage, errors, warni
3300
3059
  return { map, plan, members, tasks, memberStatuses, ticketByTask };
3301
3060
  }
3302
3061
 
3303
- function validateChange(change, stage = null, repoRoot = null, engineeringKind = null) {
3062
+ function validateChange(change, stage = null, repoRoot = null, engineeringKind = null, prototypeId = null, options = {}) {
3304
3063
  const errors = [];
3305
3064
  const warnings = [];
3065
+ const archiveReady = stage === "archive-ready";
3066
+ if (archiveReady) stage = "complete";
3306
3067
  if (!isDirectory(change)) {
3307
3068
  return { errors: [`change directory does not exist: ${change}`], warnings };
3308
3069
  }
3309
3070
 
3310
- const workspace = resolveWorkspaceContract(repoRoot, change);
3071
+ const workspace = resolveWorkspaceContract(repoRoot, change, options);
3311
3072
  errors.push(...workspace.errors);
3073
+ if (errors.length) return {errors,warnings};
3074
+ options = {...options, context:workspace.context};
3075
+ change = canonicalToolPath(workspace.context, change);
3076
+
3077
+ // Resolve every consumed artifact subtree before individual validators can read it.
3078
+ // Unrelated preserved links are not consumers and remain in the archive manifest.
3079
+ if(stage !== 'archived') try {
3080
+ for(const name of ['README.md','spec.md','goal-plan.md','implementation-map.md','implementation-plan.md','tickets-map.md','DESIGN.md','design-tree.json','source.md','triage.md','publish.md','diagnosis.md','wayfinder-map.md','LOG.md','ticket','evidence','investigation','learning','reviews','prototypes']) {
3081
+ const path=runtime.safeWorkPathSync(change,name);
3082
+ if(isDirectory(path)) for(const child of walk(path)) runtime.safeWorkPathSync(change,toPosix(relative(change,child)));
3083
+ }
3084
+ }catch(error){return {errors:[...errors,error.message],warnings};}
3312
3085
 
3313
3086
  // A partial parent must never fall back to the single-change artifact contract.
3314
3087
  const mapPath = join(change, "tickets-map.md");
3315
3088
  const isParentImplementation = isFile(join(change, "implementation-map.md")) ||
3316
3089
  isFile(join(change, "implementation-plan.md")) ||
3317
3090
  (isFile(mapPath) && parseFrontmatter(mapPath).meta.artifact === "goal-tickets-map");
3318
- const changeStatus = validateChangeStatus(join(change, ".status.json"), basename(change), errors);
3319
- if (isParentImplementation) validateParentImplementation(change, changeStatus, stage, errors, warnings, repoRoot);
3091
+ const changeStatus = stage === "archived" ? null : validateChangeExecution(change, errors, workspace.context);
3092
+ if (errors.length) return {errors,warnings};
3093
+ if (stage === "complete" || changeStatus?.outcome === "completed") errors.push(...validateChangeClosure({context:workspace.context,change:basename(change),forArchive:archiveReady}).errors);
3094
+ if (archiveReady && changeStatus?.outcome === "cancelled") return {errors,warnings};
3095
+ if (stage === "archived") {
3096
+ const output=runDesignCheck("--archived", change, errors, workspace.context,options.sealed ? ['--sealed'] : []);
3097
+ let archive;
3098
+ if(output) {try {archive=JSON.parse(output);}catch {errors.push('archived consumer returned no verified receipt result');}}
3099
+ if(archive?.archive_state === 'moved') warnings.push('archive moved and checked, but is not sealed; finish the original A8 receipt');
3100
+ return { errors, warnings, ...(archive ? {archive} : {}) };
3101
+ }
3102
+ if (isParentImplementation) validateParentImplementation(change, changeStatus, stage, errors, warnings, repoRoot, options);
3320
3103
  errors.push(...validateInitiative(change));
3321
3104
  if (isFile(join(change, "source-issue.md"))) {
3322
3105
  errors.push("obsolete source-issue.md is forbidden; use source.md without compatibility fallback");
@@ -3331,7 +3114,7 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3331
3114
  : null;
3332
3115
  const triagePath = join(change, "triage.md");
3333
3116
  const triage = isFile(triagePath) || sourceRequired
3334
- ? validateTriage(triagePath, basename(change), errors, changeStatus?.archived === true && stage === null)
3117
+ ? validateTriage(triagePath, basename(change), errors)
3335
3118
  : null;
3336
3119
  const publishPath = join(change, "publish.md");
3337
3120
  const publishRequired = Boolean(
@@ -3345,34 +3128,40 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3345
3128
  validateDiagnosis(diagnosisPath, basename(change), errors);
3346
3129
  }
3347
3130
  validateReviews(change, stage === "review", errors);
3348
- validatePrototypes(change, stage === "prototype", errors);
3349
- validateChangeLearning(change, stage === "learn-change", errors);
3131
+ validatePrototypes(change, stage === "prototype", errors, prototypeId, new Set(["spec", "tickets", "goal-plan", "implement", "review", "complete"]).has(stage), workspace.context);
3132
+ if (new Set(["tickets", "goal-plan", "implement", "review", "complete"]).has(stage)) runDesignCheck("--handoff", change, errors, workspace.context);
3133
+ validateChangeLearning(change, stage === "learn", errors);
3350
3134
  const retro = validateRecords(change, "retrospective", parseFrontmatter);
3351
3135
  const prs = validateRecords(change, "pull-request", parseFrontmatter);
3352
3136
  errors.push(...retro.errors, ...prs.errors);
3353
3137
  if (stage === "retro" && !retro.records.some(r => r.meta.status === "completed")) errors.push("retro stage requires a completed retrospective");
3354
3138
  if (stage === "pr-delivery" && !prs.records.length) errors.push("pr-delivery stage requires a PR record");
3355
- if (stage === "complete" && prs.records.some(r => r.meta.requested === true && (["planned", "failed"].includes(r.meta.status) || (r.meta.delivery_target === "ready" && r.meta.status === "draft")))) errors.push("complete stage cannot archive pending PR delivery");
3139
+ if (archiveReady && prs.records.some(r => r.meta.requested === true && (["planned", "failed"].includes(r.meta.status) || (r.meta.delivery_target === "ready" && r.meta.status === "draft")))) errors.push("complete stage cannot archive pending PR delivery");
3356
3140
  const retroOnly = retro.records.length > 0 && retro.errors.length === 0 && retro.records.every(r => r.meta.status === "completed") &&
3357
- changeStatus?.works_run?.includes("specdev/retro") && changeStatus.works_run.every(w => ["specdev/retro", "specdev/triage"].includes(w)) &&
3358
3141
  !["spec.md", "ticket", "tickets-map.md", "goal-plan.md", "implementation-map.md", "implementation-plan.md", "evidence"].some(p => existsSync(join(change,p))) && !changeStatus.worktrees?.length;
3359
3142
 
3143
+ let simpleGoal = null;
3144
+ try { simpleGoal = readLightweightGoal(change); } catch (error) { errors.push(error.message); }
3360
3145
  const specRequired = new Set(["spec", "tickets", "goal-plan", "implement", "complete"]).has(stage) && !isParentImplementation && !retroOnly;
3361
3146
  const specPath = join(change, "spec.md");
3362
- const spec = isFile(specPath) || specRequired
3363
- ? validateSpec(specPath, errors, warnings)
3364
- : null;
3147
+ let specification = null;
3148
+ if (!isParentImplementation && !retroOnly && (isFile(specPath) || specRequired)) {
3149
+ try { specification = readSpecification(change, {allowLightweight: stage !== "tickets" && (stage !== "goal-plan" || Boolean(simpleGoal)), requiredArtifact:options.requiredArtifact, depth:options.depth}); }
3150
+ catch(error) { errors.push(error.message); }
3151
+ }
3152
+ const lightweight = specification?.lightweight === true;
3153
+ const spec = isFile(specPath) ? validateSpec(specPath, errors, warnings) : null;
3365
3154
  const ticketMode = isDirectory(join(change, "ticket"));
3366
- const mapRequired = !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
3155
+ const mapRequired = !simpleGoal && !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
3367
3156
  const ticketsMap = isFile(mapPath) || mapRequired ? validateMap(mapPath, errors, repoRoot) : null;
3368
3157
  const goalPlanPath = join(change, "goal-plan.md");
3369
- const goalPlan = isFile(goalPlanPath) || (stage === "goal-plan" && !isParentImplementation)
3158
+ const goalPlan = !simpleGoal && (isFile(goalPlanPath) || (stage === "goal-plan" && !isParentImplementation))
3370
3159
  ? validateGoalPlan(goalPlanPath, errors)
3371
3160
  : null;
3372
3161
  validateDesignTree(join(change, "design-tree.json"), change, errors);
3373
3162
  validateWayfinder(change, errors);
3374
3163
  if (stage === "grill") {
3375
- for (const name of ["design-tree.json", "LOG.md", "CONTEXT.md", "ADR.md"]) {
3164
+ for (const name of ["design-tree.json"]) {
3376
3165
  if (!isFile(join(change, name))) errors.push(`grill stage requires ${name}`);
3377
3166
  }
3378
3167
  }
@@ -3386,7 +3175,7 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3386
3175
  }
3387
3176
 
3388
3177
  const ticketDir = join(change, "ticket");
3389
- const ticketsRequired = !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
3178
+ const ticketsRequired = !simpleGoal && !isParentImplementation && (new Set(["tickets", "goal-plan"]).has(stage) || (stage === "implement" && ticketMode));
3390
3179
  const ticketFiles = isDirectory(ticketDir)
3391
3180
  ? readdirSync(ticketDir)
3392
3181
  .filter((name) => name.endsWith(".md"))
@@ -3395,7 +3184,7 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3395
3184
  : [];
3396
3185
  if (ticketsRequired && !isDirectory(ticketDir)) errors.push("missing Ticket directory");
3397
3186
  if (ticketsRequired && !ticketFiles.length) errors.push("Ticket directory contains no Markdown tickets");
3398
- if (stage === "implement" && !ticketMode && !isFile(join(change, "evidence", "direct-spec.md"))) {
3187
+ if (stage === "implement" && !ticketMode && !lightweight && !isFile(join(change, "evidence", "direct-spec.md"))) {
3399
3188
  errors.push("Direct Spec implement stage requires evidence/direct-spec.md");
3400
3189
  }
3401
3190
 
@@ -3455,7 +3244,7 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3455
3244
  }
3456
3245
  }
3457
3246
  if (changeStatus && goalPlan) {
3458
- validateGoalPlanRuntimeLimits(goalPlan.path, change, goalPlan, errors, repoRoot);
3247
+ validateGoalPlanRuntimeLimits(goalPlan.path, change, goalPlan, errors, repoRoot, options);
3459
3248
  const attemptLimit = Number.isInteger(goalPlan.meta.integration_attempt_limit) ? goalPlan.meta.integration_attempt_limit : null;
3460
3249
  if (attemptLimit !== null) {
3461
3250
  for (const worktree of changeStatus.worktrees ?? []) {
@@ -3464,11 +3253,20 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3464
3253
  }
3465
3254
  }
3466
3255
  }
3467
- validateCurrentWorkspaceExecution(changeStatus, goalPlan, errors);
3468
3256
  }
3469
- validateGitEvidence(repoRoot, changeStatus, errors);
3257
+ validateCurrentWorkspaceExecution(changeStatus, goalPlan, errors);
3258
+ const directExecution = changeStatus?.worktrees?.find(entry => entry.purpose === "direct-spec");
3259
+ if (directExecution && workspace.config) errors.push(...validateExecutionPolicy({meta:{concurrent_implementation_limit:1,integration_attempt_limit:directExecution.integration_attempt_limit}},workspace.config).map(error => `Direct Spec: ${error}`));
3260
+ if (directExecution && (ticketMode || isParentImplementation)) errors.push("Direct Spec execution cannot coexist with Ticket or parent implementation artifacts");
3261
+ if (directExecution && (stage === "complete" || changeStatus.outcome === "completed") && !new Set(["integrated", "removed"]).has(directExecution.status)) errors.push("Direct Spec completion requires integrated or removed execution; active or failed candidates cannot complete");
3262
+ validateGitEvidence(stage === "complete" ? workspace.context.projectRoot : repoRoot, changeStatus, errors);
3470
3263
 
3471
- if (spec) {
3264
+ if (stage === "implement" && spec && !ticketMode && (spec.meta.ready_for_tickets !== true || spec.meta.status !== "ready")) errors.push("Direct Spec implementation requires a ready Spec with ready_for_tickets=true");
3265
+ if (spec?.meta.ready_for_tickets === true && !/\bAC-\d+\b/.test(spec.body)) errors.push("ready Spec must define at least one AC-### acceptance contract");
3266
+
3267
+ if (stage === "complete" && spec && !ticketMode && !isParentImplementation && !retroOnly) errors.push(...validateAcceptanceEvidence(change,"evidence/direct-spec.md",[...new Set(spec.body.match(/\bAC-\d+\b/g) ?? [])]));
3268
+
3269
+ if (spec && ticketMode) {
3472
3270
  const declaredContracts = new Set(spec.body.match(/\bAC-\d+\b/g) ?? []);
3473
3271
  const coveredContracts = new Set(
3474
3272
  [...tickets.values()].flatMap((artifact) =>
@@ -3553,7 +3351,7 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3553
3351
  continue;
3554
3352
  }
3555
3353
  const text = readText(evidence);
3556
- const currentWorkspace = goalPlan?.meta.ticket_workspace_policy === "current";
3354
+ const currentWorkspace = changeStatus?.worktrees?.find(entry => entry.ticket_id === ticketId)?.workspace_ref === "current";
3557
3355
  const requiredHeadings = [
3558
3356
  "## 2. Lead Dispatch And Candidate Return",
3559
3357
  "## 3. 修改范围与路径所有权",
@@ -3598,44 +3396,44 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3598
3396
 
3599
3397
  if (changeStatus) {
3600
3398
  if (
3601
- changeStatus.change_status === "completed" &&
3399
+ changeStatus.outcome === "completed" &&
3602
3400
  [...tickets.values()].some(
3603
3401
  (artifact) => !new Set(["done", "cancelled"]).has(artifact.meta.status),
3604
3402
  )
3605
3403
  ) {
3606
- errors.push("change_status is completed while planned Tickets remain unfinished");
3404
+ errors.push("Outcome is completed while planned Tickets remain unfinished");
3607
3405
  }
3608
- if (changeStatus.change_status === "archived") {
3406
+ if (changeStatus.location.kind === "archive") {
3609
3407
  warnings.push("validating an archived change in place; normally it lives under the archive root");
3610
3408
  }
3611
- if (stage === "complete" && changeStatus.change_status !== "completed") {
3612
- errors.push("complete stage requires change_status=completed");
3409
+ if (stage === "complete" && changeStatus.outcome !== "completed") {
3410
+ errors.push("complete stage requires Outcome: completed");
3613
3411
  }
3614
3412
  }
3615
3413
  if (
3616
3414
  stage === "complete" &&
3617
- !ticketFiles.length && !retroOnly &&
3415
+ !ticketFiles.length && !retroOnly && !lightweight &&
3618
3416
  !isFile(join(change, "implementation-map.md")) &&
3619
3417
  !isFile(join(change, "evidence", "direct-spec.md"))
3620
3418
  ) {
3621
3419
  errors.push("complete stage without Tickets requires evidence/direct-spec.md");
3622
3420
  }
3623
3421
  if (
3624
- stage === "complete" &&
3422
+ archiveReady &&
3625
3423
  triage &&
3626
3424
  new Set(["pending-close", "close-failed"]).has(triage.meta.external_action)
3627
3425
  ) {
3628
3426
  errors.push(`complete stage cannot archive external_action=${triage.meta.external_action}`);
3629
3427
  }
3630
3428
  if (
3631
- stage === "complete" &&
3429
+ archiveReady &&
3632
3430
  triage &&
3633
3431
  new Set(["pending", "publish-failed"]).has(triage.meta.publish_action)
3634
3432
  ) {
3635
3433
  errors.push(`complete stage cannot archive publish_action=${triage.meta.publish_action}`);
3636
3434
  }
3637
3435
 
3638
- for (const path of walk(change).filter((item) => isFile(item) && extname(item) === ".md")) {
3436
+ for (const path of walk(change).filter((item) => lstatSync(item).isFile() && extname(item) === ".md")) {
3639
3437
  const text = readText(path);
3640
3438
  if ((text.match(/<Path>/g) ?? []).length !== (text.match(/<\/Path>/g) ?? []).length) {
3641
3439
  errors.push(`${toPosix(relative(change, path))}: unbalanced <Path> tags`);
@@ -3651,7 +3449,18 @@ function validateChange(change, stage = null, repoRoot = null, engineeringKind =
3651
3449
  }
3652
3450
 
3653
3451
  errors.push(...validateEngineeringArtifacts(change, engineeringKind));
3654
- return { errors, warnings };
3452
+ if (simpleGoal && changeStatus?.outcome === "completed" && /^[-*] \[ \]/m.test(simpleGoal.body)) errors.push("completed Goal still has unfinished tasks");
3453
+ return { errors, warnings, ...(options.readOnlySnapshot ? {snapshot:true,preflight:true} : {}) };
3454
+ }
3455
+
3456
+ function contextArguments(context) {
3457
+ if (!context) return [];
3458
+ const source = context.readOnlySnapshot?.sourceContext ?? context;
3459
+ return ['--repo',source.projectRoot,'--method-root',source.methodRoot,'--state-root',source.specdevRoot,...(context.readOnlySnapshot ? ['--snapshot-specdev',context.specdevRoot] : [])];
3460
+ }
3461
+ function runDesignCheck(operation, path, errors, context = null, flags = []) {
3462
+ try { return execFileSync(process.execPath, [fileURLToPath(new URL("./design-artifacts.mjs", import.meta.url)), operation, path, ...contextArguments(context),...flags], { encoding: "utf8", stdio: ["ignore", "pipe", "pipe"] }); }
3463
+ catch (error) { errors.push(String(error.stderr || error.stdout || error.message).trim()); }
3655
3464
  }
3656
3465
 
3657
3466
  function printResults(errors, warnings) {
@@ -3662,22 +3471,30 @@ function printResults(errors, warnings) {
3662
3471
  }
3663
3472
 
3664
3473
  function usage() {
3665
- console.error("Usage: node validate-specdev.mjs [--stage <stage>] [--repo <project-root>] [--engineering <performance|documentation|incident>] <change-directory> | --review-scope --repo <project-root> --mode <baseline|range|commit|pr> [comparison options] | --self-check | --capture <capture.md> | --triage-run <TRI-NNN.md>");
3474
+ console.error("Usage: node validate-specdev.mjs [--stage <stage>] [--sealed (archived only)] [--prototype-id UI-NNN|LOGIC-NNN] [--repo <project-root>] [--engineering <performance|documentation|incident>] <change-directory> | --review-scope --repo <project-root> --mode <baseline|range|commit|pr|source-files> [comparison options or repeated --file <relative-path>] | --self-check | --capture <capture.md> | --triage-run <TRI-NNN.md>");
3666
3475
  return 2;
3667
3476
  }
3668
3477
 
3669
3478
  function main(argv) {
3670
3479
  if (argv[0] === "--review-scope") return reviewScopeCLI(argv.slice(1));
3671
3480
  let engineeringKind = null;
3481
+ let prototypeId = null;
3672
3482
  let selfCheckRequested = false;
3673
3483
  let stage = null;
3674
3484
  let repoRoot = null;
3485
+ const contextOptions = {};
3675
3486
  let capturePath = null;
3676
3487
  let triageRunPath = null;
3677
3488
  const positional = [];
3678
3489
  for (let index = 0; index < argv.length; index += 1) {
3679
3490
  const arg = argv[index];
3680
- if (arg === "--engineering") {
3491
+ if (arg === "--prototype-id") {
3492
+ if (prototypeId !== null || !/^(?:UI|LOGIC)-\d{3,}$/.test(argv[index + 1] ?? "")) return usage();
3493
+ prototypeId = argv[++index];
3494
+ } else if (arg === "--sealed") {
3495
+ if(contextOptions.sealed) return usage();
3496
+ contextOptions.sealed=true;
3497
+ } else if (arg === "--engineering") {
3681
3498
  if (engineeringKind !== null || !ENGINEERING_KINDS.has(argv[index + 1])) return usage();
3682
3499
  engineeringKind = argv[++index];
3683
3500
  } else if (arg === "--self-check") {
@@ -3687,6 +3504,8 @@ function main(argv) {
3687
3504
  index += 1;
3688
3505
  } else if (arg.startsWith("--stage=")) {
3689
3506
  stage = arg.slice("--stage=".length);
3507
+ } else if (arg === "--method-root" || arg === "--state-root") {
3508
+ contextOptions[arg === "--method-root" ? "methodRoot" : "stateRoot"] = argv[++index];
3690
3509
  } else if (arg === "--repo") {
3691
3510
  repoRoot = argv[index + 1] ?? null;
3692
3511
  index += 1;
@@ -3706,6 +3525,8 @@ function main(argv) {
3706
3525
  }
3707
3526
  }
3708
3527
  if (stage !== null && !VALID_STAGES.has(stage)) return usage();
3528
+ if(contextOptions.sealed && stage !== 'archived') return usage();
3529
+ if (prototypeId && stage !== "prototype") return usage();
3709
3530
  if (engineeringKind !== null && (selfCheckRequested || capturePath || triageRunPath || positional.length !== 1)) return usage();
3710
3531
  if (triageRunPath) {
3711
3532
  if (selfCheckRequested || positional.length || stage !== null || capturePath || repoRoot) return usage();
@@ -3725,7 +3546,7 @@ function main(argv) {
3725
3546
  return printResults(errors, []);
3726
3547
  }
3727
3548
  if (positional.length === 1) {
3728
- const result = validateChange(resolve(positional[0]), stage, repoRoot, engineeringKind);
3549
+ const result = validateChange(resolve(positional[0]), stage, repoRoot, engineeringKind, prototypeId, contextOptions);
3729
3550
  return printResults(result.errors, result.warnings);
3730
3551
  }
3731
3552
  return usage();