intent-planner 0.13.1

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 (334) hide show
  1. package/LICENSE +21 -0
  2. package/README.en.md +225 -0
  3. package/README.md +225 -0
  4. package/bin/cli.mjs +289 -0
  5. package/package.json +46 -0
  6. package/src/install.mjs +527 -0
  7. package/templates/en/agents/claude/CLAUDE.md +62 -0
  8. package/templates/en/agents/codex/AGENTS.md +62 -0
  9. package/templates/en/agents/gemini/GEMINI.md +62 -0
  10. package/templates/en/claude/skills/CONTRACT.md +86 -0
  11. package/templates/en/claude/skills/intent-compass/SKILL.md +55 -0
  12. package/templates/en/claude/skills/intent-compass/rules/algo-qoc.md +62 -0
  13. package/templates/en/claude/skills/intent-compass/rules/constraint-surfacing.md +41 -0
  14. package/templates/en/claude/skills/intent-discover/SKILL.md +63 -0
  15. package/templates/en/claude/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
  16. package/templates/en/claude/skills/intent-discover/rules/algo-gore-lite.md +35 -0
  17. package/templates/en/claude/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
  18. package/templates/en/claude/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
  19. package/templates/en/claude/skills/intent-discover/rules/designer-questions.md +78 -0
  20. package/templates/en/claude/skills/intent-discover/rules/drift-terrain.md +105 -0
  21. package/templates/en/claude/skills/intent-discover/rules/mode-selection.md +31 -0
  22. package/templates/en/claude/skills/intent-export-cc-sdd/SKILL.md +88 -0
  23. package/templates/en/claude/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
  24. package/templates/en/claude/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
  25. package/templates/en/claude/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
  26. package/templates/en/claude/skills/intent-export-openspec/SKILL.md +90 -0
  27. package/templates/en/claude/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
  28. package/templates/en/claude/skills/intent-export-openspec/rules/export-questions.md +23 -0
  29. package/templates/en/claude/skills/intent-export-openspec/rules/map-openspec.md +75 -0
  30. package/templates/en/claude/skills/intent-from-spec/SKILL.md +60 -0
  31. package/templates/en/claude/skills/intent-from-spec/rules/extract-intent.md +56 -0
  32. package/templates/en/claude/skills/intent-from-spec/rules/gap-readout.md +54 -0
  33. package/templates/en/claude/skills/intent-from-spec/rules/load-bearing.md +48 -0
  34. package/templates/en/claude/skills/intent-from-spec/rules/omission-recap.md +42 -0
  35. package/templates/en/claude/skills/intent-improve/SKILL.md +70 -0
  36. package/templates/en/claude/skills/intent-improve/rules/improve-axes.md +121 -0
  37. package/templates/en/claude/skills/intent-overview/SKILL.md +63 -0
  38. package/templates/en/claude/skills/intent-overview/rules/aggregate-sources.md +61 -0
  39. package/templates/en/claude/skills/intent-overview/rules/gap-readout.md +54 -0
  40. package/templates/en/claude/skills/intent-overview/rules/mermaid-tree.md +78 -0
  41. package/templates/en/claude/skills/intent-overview/rules/progress-readout.md +119 -0
  42. package/templates/en/claude/skills/intent-packets/SKILL.md +97 -0
  43. package/templates/en/claude/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
  44. package/templates/en/claude/skills/intent-packets/rules/algo-characterization-test.md +40 -0
  45. package/templates/en/claude/skills/intent-packets/rules/algo-example-mapping.md +47 -0
  46. package/templates/en/claude/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
  47. package/templates/en/claude/skills/intent-packets/rules/decision-slots.md +88 -0
  48. package/templates/en/claude/skills/intent-packets/rules/export-route.md +54 -0
  49. package/templates/en/claude/skills/intent-packets/rules/first-packet.md +35 -0
  50. package/templates/en/claude/skills/intent-packets/rules/packet-format.md +207 -0
  51. package/templates/en/claude/skills/intent-packets/rules/walking-skeleton.md +35 -0
  52. package/templates/en/claude/skills/intent-release-note/SKILL.md +58 -0
  53. package/templates/en/claude/skills/intent-release-note/rules/format-changelog.md +40 -0
  54. package/templates/en/claude/skills/intent-release-note/rules/format-github-releases.md +41 -0
  55. package/templates/en/claude/skills/intent-release-note/rules/format-select.md +32 -0
  56. package/templates/en/claude/skills/intent-release-note/rules/source-scope.md +42 -0
  57. package/templates/en/claude/skills/intent-status/SKILL.md +171 -0
  58. package/templates/en/claude/skills/intent-status/rules/decision-table.md +47 -0
  59. package/templates/en/claude/skills/intent-to-spec/SKILL.md +68 -0
  60. package/templates/en/claude/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
  61. package/templates/en/claude/skills/intent-to-spec/rules/format-integrated.md +42 -0
  62. package/templates/en/claude/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
  63. package/templates/en/claude/skills/intent-to-spec/rules/format-upstream.md +41 -0
  64. package/templates/en/claude/skills/intent-to-spec/rules/source-scope.md +50 -0
  65. package/templates/en/claude/skills/intent-validate/SKILL.md +80 -0
  66. package/templates/en/claude/skills/intent-validate/rules/validate-checks.md +121 -0
  67. package/templates/en/claude/skills/intent-writeback/SKILL.md +71 -0
  68. package/templates/en/claude/skills/intent-writeback/rules/writeback-protocol.md +139 -0
  69. package/templates/en/codex/skills/CONTRACT.md +77 -0
  70. package/templates/en/codex/skills/intent-compass/SKILL.md +52 -0
  71. package/templates/en/codex/skills/intent-compass/rules/algo-qoc.md +62 -0
  72. package/templates/en/codex/skills/intent-compass/rules/constraint-surfacing.md +41 -0
  73. package/templates/en/codex/skills/intent-discover/SKILL.md +60 -0
  74. package/templates/en/codex/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
  75. package/templates/en/codex/skills/intent-discover/rules/algo-gore-lite.md +35 -0
  76. package/templates/en/codex/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
  77. package/templates/en/codex/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
  78. package/templates/en/codex/skills/intent-discover/rules/designer-questions.md +78 -0
  79. package/templates/en/codex/skills/intent-discover/rules/drift-terrain.md +105 -0
  80. package/templates/en/codex/skills/intent-discover/rules/mode-selection.md +31 -0
  81. package/templates/en/codex/skills/intent-export-cc-sdd/SKILL.md +85 -0
  82. package/templates/en/codex/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
  83. package/templates/en/codex/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
  84. package/templates/en/codex/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
  85. package/templates/en/codex/skills/intent-export-openspec/SKILL.md +87 -0
  86. package/templates/en/codex/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
  87. package/templates/en/codex/skills/intent-export-openspec/rules/export-questions.md +23 -0
  88. package/templates/en/codex/skills/intent-export-openspec/rules/map-openspec.md +75 -0
  89. package/templates/en/codex/skills/intent-from-spec/SKILL.md +58 -0
  90. package/templates/en/codex/skills/intent-from-spec/rules/extract-intent.md +56 -0
  91. package/templates/en/codex/skills/intent-from-spec/rules/gap-readout.md +54 -0
  92. package/templates/en/codex/skills/intent-from-spec/rules/load-bearing.md +48 -0
  93. package/templates/en/codex/skills/intent-from-spec/rules/omission-recap.md +42 -0
  94. package/templates/en/codex/skills/intent-improve/SKILL.md +67 -0
  95. package/templates/en/codex/skills/intent-improve/rules/improve-axes.md +121 -0
  96. package/templates/en/codex/skills/intent-overview/SKILL.md +61 -0
  97. package/templates/en/codex/skills/intent-overview/rules/aggregate-sources.md +61 -0
  98. package/templates/en/codex/skills/intent-overview/rules/gap-readout.md +54 -0
  99. package/templates/en/codex/skills/intent-overview/rules/mermaid-tree.md +78 -0
  100. package/templates/en/codex/skills/intent-overview/rules/progress-readout.md +119 -0
  101. package/templates/en/codex/skills/intent-packets/SKILL.md +94 -0
  102. package/templates/en/codex/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
  103. package/templates/en/codex/skills/intent-packets/rules/algo-characterization-test.md +40 -0
  104. package/templates/en/codex/skills/intent-packets/rules/algo-example-mapping.md +47 -0
  105. package/templates/en/codex/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
  106. package/templates/en/codex/skills/intent-packets/rules/decision-slots.md +88 -0
  107. package/templates/en/codex/skills/intent-packets/rules/export-route.md +54 -0
  108. package/templates/en/codex/skills/intent-packets/rules/first-packet.md +35 -0
  109. package/templates/en/codex/skills/intent-packets/rules/packet-format.md +207 -0
  110. package/templates/en/codex/skills/intent-packets/rules/walking-skeleton.md +35 -0
  111. package/templates/en/codex/skills/intent-release-note/SKILL.md +56 -0
  112. package/templates/en/codex/skills/intent-release-note/rules/format-changelog.md +40 -0
  113. package/templates/en/codex/skills/intent-release-note/rules/format-github-releases.md +41 -0
  114. package/templates/en/codex/skills/intent-release-note/rules/format-select.md +32 -0
  115. package/templates/en/codex/skills/intent-release-note/rules/source-scope.md +42 -0
  116. package/templates/en/codex/skills/intent-status/SKILL.md +169 -0
  117. package/templates/en/codex/skills/intent-status/rules/decision-table.md +47 -0
  118. package/templates/en/codex/skills/intent-to-spec/SKILL.md +66 -0
  119. package/templates/en/codex/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
  120. package/templates/en/codex/skills/intent-to-spec/rules/format-integrated.md +42 -0
  121. package/templates/en/codex/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
  122. package/templates/en/codex/skills/intent-to-spec/rules/format-upstream.md +41 -0
  123. package/templates/en/codex/skills/intent-to-spec/rules/source-scope.md +50 -0
  124. package/templates/en/codex/skills/intent-validate/SKILL.md +78 -0
  125. package/templates/en/codex/skills/intent-validate/rules/validate-checks.md +121 -0
  126. package/templates/en/codex/skills/intent-writeback/SKILL.md +68 -0
  127. package/templates/en/codex/skills/intent-writeback/rules/writeback-protocol.md +139 -0
  128. package/templates/en/intent/README.md +118 -0
  129. package/templates/en/intent/cc-sdd/README.md +28 -0
  130. package/templates/en/intent/compass-archive/README.md +9 -0
  131. package/templates/en/intent/compass-archive/archive/.gitkeep +0 -0
  132. package/templates/en/intent/compass-archive.md +7 -0
  133. package/templates/en/intent/constraint-library.md +32 -0
  134. package/templates/en/intent/constraint-starters.md +58 -0
  135. package/templates/en/intent/context-cost-cues.md +55 -0
  136. package/templates/en/intent/deltas/README.md +11 -0
  137. package/templates/en/intent/deltas/archive/.gitkeep +0 -0
  138. package/templates/en/intent/deltas.md +34 -0
  139. package/templates/en/intent/drift-log/README.md +11 -0
  140. package/templates/en/intent/drift-log/archive/.gitkeep +0 -0
  141. package/templates/en/intent/drift-log.md +41 -0
  142. package/templates/en/intent/drift-patterns.md +68 -0
  143. package/templates/en/intent/export-log/README.md +12 -0
  144. package/templates/en/intent/export-log/archive/.gitkeep +0 -0
  145. package/templates/en/intent/export-log.md +6 -0
  146. package/templates/en/intent/glossary.md +23 -0
  147. package/templates/en/intent/intent-compass.md +55 -0
  148. package/templates/en/intent/intent-tree.md +59 -0
  149. package/templates/en/intent/milestones/README.md +10 -0
  150. package/templates/en/intent/milestones/archive/.gitkeep +0 -0
  151. package/templates/en/intent/milestones.md +22 -0
  152. package/templates/en/intent/mode.local.md +23 -0
  153. package/templates/en/intent/mode.md +32 -0
  154. package/templates/en/intent/modes/README.md +28 -0
  155. package/templates/en/intent/modes/behavior-unknown.md +57 -0
  156. package/templates/en/intent/modes/feature-growth.md +57 -0
  157. package/templates/en/intent/modes/non-code.md +46 -0
  158. package/templates/en/intent/modes/refactor.md +56 -0
  159. package/templates/en/intent/modes/standard.md +50 -0
  160. package/templates/en/intent/nl-spec/README.md +18 -0
  161. package/templates/en/intent/openspec/proposal.md +15 -0
  162. package/templates/en/intent/openspec/spec-delta.md +25 -0
  163. package/templates/en/intent/overview/README.md +18 -0
  164. package/templates/en/intent/packets/README.md +29 -0
  165. package/templates/en/intent/packets/index.md +6 -0
  166. package/templates/en/intent/packets/plan.md +23 -0
  167. package/templates/en/intent/release-note/README.md +18 -0
  168. package/templates/en/intent/scripts/intent-check.mjs +786 -0
  169. package/templates/en/intent/scripts/pre-push +27 -0
  170. package/templates/en/intent/spec-ingest/README.md +18 -0
  171. package/templates/ja/agents/claude/CLAUDE.md +62 -0
  172. package/templates/ja/agents/codex/AGENTS.md +62 -0
  173. package/templates/ja/agents/gemini/GEMINI.md +62 -0
  174. package/templates/ja/claude/skills/CONTRACT.md +90 -0
  175. package/templates/ja/claude/skills/intent-compass/SKILL.md +55 -0
  176. package/templates/ja/claude/skills/intent-compass/rules/algo-qoc.md +62 -0
  177. package/templates/ja/claude/skills/intent-compass/rules/constraint-surfacing.md +41 -0
  178. package/templates/ja/claude/skills/intent-discover/SKILL.md +63 -0
  179. package/templates/ja/claude/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
  180. package/templates/ja/claude/skills/intent-discover/rules/algo-gore-lite.md +35 -0
  181. package/templates/ja/claude/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
  182. package/templates/ja/claude/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
  183. package/templates/ja/claude/skills/intent-discover/rules/designer-questions.md +78 -0
  184. package/templates/ja/claude/skills/intent-discover/rules/drift-terrain.md +105 -0
  185. package/templates/ja/claude/skills/intent-discover/rules/mode-selection.md +31 -0
  186. package/templates/ja/claude/skills/intent-export-cc-sdd/SKILL.md +88 -0
  187. package/templates/ja/claude/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
  188. package/templates/ja/claude/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
  189. package/templates/ja/claude/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
  190. package/templates/ja/claude/skills/intent-export-openspec/SKILL.md +90 -0
  191. package/templates/ja/claude/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
  192. package/templates/ja/claude/skills/intent-export-openspec/rules/export-questions.md +23 -0
  193. package/templates/ja/claude/skills/intent-export-openspec/rules/map-openspec.md +75 -0
  194. package/templates/ja/claude/skills/intent-from-spec/SKILL.md +60 -0
  195. package/templates/ja/claude/skills/intent-from-spec/rules/extract-intent.md +56 -0
  196. package/templates/ja/claude/skills/intent-from-spec/rules/gap-readout.md +54 -0
  197. package/templates/ja/claude/skills/intent-from-spec/rules/load-bearing.md +48 -0
  198. package/templates/ja/claude/skills/intent-from-spec/rules/omission-recap.md +42 -0
  199. package/templates/ja/claude/skills/intent-improve/SKILL.md +70 -0
  200. package/templates/ja/claude/skills/intent-improve/rules/improve-axes.md +121 -0
  201. package/templates/ja/claude/skills/intent-overview/SKILL.md +63 -0
  202. package/templates/ja/claude/skills/intent-overview/rules/aggregate-sources.md +61 -0
  203. package/templates/ja/claude/skills/intent-overview/rules/gap-readout.md +54 -0
  204. package/templates/ja/claude/skills/intent-overview/rules/mermaid-tree.md +78 -0
  205. package/templates/ja/claude/skills/intent-overview/rules/progress-readout.md +119 -0
  206. package/templates/ja/claude/skills/intent-packets/SKILL.md +97 -0
  207. package/templates/ja/claude/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
  208. package/templates/ja/claude/skills/intent-packets/rules/algo-characterization-test.md +40 -0
  209. package/templates/ja/claude/skills/intent-packets/rules/algo-example-mapping.md +47 -0
  210. package/templates/ja/claude/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
  211. package/templates/ja/claude/skills/intent-packets/rules/decision-slots.md +88 -0
  212. package/templates/ja/claude/skills/intent-packets/rules/export-route.md +54 -0
  213. package/templates/ja/claude/skills/intent-packets/rules/first-packet.md +35 -0
  214. package/templates/ja/claude/skills/intent-packets/rules/packet-format.md +207 -0
  215. package/templates/ja/claude/skills/intent-packets/rules/walking-skeleton.md +35 -0
  216. package/templates/ja/claude/skills/intent-release-note/SKILL.md +58 -0
  217. package/templates/ja/claude/skills/intent-release-note/rules/format-changelog.md +40 -0
  218. package/templates/ja/claude/skills/intent-release-note/rules/format-github-releases.md +41 -0
  219. package/templates/ja/claude/skills/intent-release-note/rules/format-select.md +32 -0
  220. package/templates/ja/claude/skills/intent-release-note/rules/source-scope.md +42 -0
  221. package/templates/ja/claude/skills/intent-status/SKILL.md +171 -0
  222. package/templates/ja/claude/skills/intent-status/rules/decision-table.md +47 -0
  223. package/templates/ja/claude/skills/intent-to-spec/SKILL.md +68 -0
  224. package/templates/ja/claude/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
  225. package/templates/ja/claude/skills/intent-to-spec/rules/format-integrated.md +42 -0
  226. package/templates/ja/claude/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
  227. package/templates/ja/claude/skills/intent-to-spec/rules/format-upstream.md +41 -0
  228. package/templates/ja/claude/skills/intent-to-spec/rules/source-scope.md +50 -0
  229. package/templates/ja/claude/skills/intent-validate/SKILL.md +80 -0
  230. package/templates/ja/claude/skills/intent-validate/rules/validate-checks.md +121 -0
  231. package/templates/ja/claude/skills/intent-writeback/SKILL.md +71 -0
  232. package/templates/ja/claude/skills/intent-writeback/rules/writeback-protocol.md +139 -0
  233. package/templates/ja/codex/skills/CONTRACT.md +81 -0
  234. package/templates/ja/codex/skills/intent-compass/SKILL.md +52 -0
  235. package/templates/ja/codex/skills/intent-compass/rules/algo-qoc.md +62 -0
  236. package/templates/ja/codex/skills/intent-compass/rules/constraint-surfacing.md +41 -0
  237. package/templates/ja/codex/skills/intent-discover/SKILL.md +60 -0
  238. package/templates/ja/codex/skills/intent-discover/rules/algo-drift-analysis.md +34 -0
  239. package/templates/ja/codex/skills/intent-discover/rules/algo-gore-lite.md +35 -0
  240. package/templates/ja/codex/skills/intent-discover/rules/algo-impact-analysis.md +37 -0
  241. package/templates/ja/codex/skills/intent-discover/rules/algo-intent-recovery.md +39 -0
  242. package/templates/ja/codex/skills/intent-discover/rules/designer-questions.md +78 -0
  243. package/templates/ja/codex/skills/intent-discover/rules/drift-terrain.md +105 -0
  244. package/templates/ja/codex/skills/intent-discover/rules/mode-selection.md +31 -0
  245. package/templates/ja/codex/skills/intent-export-cc-sdd/SKILL.md +85 -0
  246. package/templates/ja/codex/skills/intent-export-cc-sdd/rules/drift-export-check.md +75 -0
  247. package/templates/ja/codex/skills/intent-export-cc-sdd/rules/export-questions.md +23 -0
  248. package/templates/ja/codex/skills/intent-export-cc-sdd/rules/map-cc-sdd.md +62 -0
  249. package/templates/ja/codex/skills/intent-export-openspec/SKILL.md +87 -0
  250. package/templates/ja/codex/skills/intent-export-openspec/rules/drift-export-check.md +50 -0
  251. package/templates/ja/codex/skills/intent-export-openspec/rules/export-questions.md +23 -0
  252. package/templates/ja/codex/skills/intent-export-openspec/rules/map-openspec.md +75 -0
  253. package/templates/ja/codex/skills/intent-from-spec/SKILL.md +58 -0
  254. package/templates/ja/codex/skills/intent-from-spec/rules/extract-intent.md +56 -0
  255. package/templates/ja/codex/skills/intent-from-spec/rules/gap-readout.md +54 -0
  256. package/templates/ja/codex/skills/intent-from-spec/rules/load-bearing.md +48 -0
  257. package/templates/ja/codex/skills/intent-from-spec/rules/omission-recap.md +42 -0
  258. package/templates/ja/codex/skills/intent-improve/SKILL.md +67 -0
  259. package/templates/ja/codex/skills/intent-improve/rules/improve-axes.md +121 -0
  260. package/templates/ja/codex/skills/intent-overview/SKILL.md +61 -0
  261. package/templates/ja/codex/skills/intent-overview/rules/aggregate-sources.md +61 -0
  262. package/templates/ja/codex/skills/intent-overview/rules/gap-readout.md +54 -0
  263. package/templates/ja/codex/skills/intent-overview/rules/mermaid-tree.md +78 -0
  264. package/templates/ja/codex/skills/intent-overview/rules/progress-readout.md +119 -0
  265. package/templates/ja/codex/skills/intent-packets/SKILL.md +94 -0
  266. package/templates/ja/codex/skills/intent-packets/rules/algo-additive-slicing.md +55 -0
  267. package/templates/ja/codex/skills/intent-packets/rules/algo-characterization-test.md +40 -0
  268. package/templates/ja/codex/skills/intent-packets/rules/algo-example-mapping.md +47 -0
  269. package/templates/ja/codex/skills/intent-packets/rules/algo-migration-slicing.md +47 -0
  270. package/templates/ja/codex/skills/intent-packets/rules/decision-slots.md +88 -0
  271. package/templates/ja/codex/skills/intent-packets/rules/export-route.md +54 -0
  272. package/templates/ja/codex/skills/intent-packets/rules/first-packet.md +35 -0
  273. package/templates/ja/codex/skills/intent-packets/rules/packet-format.md +207 -0
  274. package/templates/ja/codex/skills/intent-packets/rules/walking-skeleton.md +35 -0
  275. package/templates/ja/codex/skills/intent-release-note/SKILL.md +56 -0
  276. package/templates/ja/codex/skills/intent-release-note/rules/format-changelog.md +40 -0
  277. package/templates/ja/codex/skills/intent-release-note/rules/format-github-releases.md +41 -0
  278. package/templates/ja/codex/skills/intent-release-note/rules/format-select.md +32 -0
  279. package/templates/ja/codex/skills/intent-release-note/rules/source-scope.md +42 -0
  280. package/templates/ja/codex/skills/intent-status/SKILL.md +169 -0
  281. package/templates/ja/codex/skills/intent-status/rules/decision-table.md +47 -0
  282. package/templates/ja/codex/skills/intent-to-spec/SKILL.md +66 -0
  283. package/templates/ja/codex/skills/intent-to-spec/rules/fabrication-guard.md +41 -0
  284. package/templates/ja/codex/skills/intent-to-spec/rules/format-integrated.md +42 -0
  285. package/templates/ja/codex/skills/intent-to-spec/rules/format-nonprogram.md +45 -0
  286. package/templates/ja/codex/skills/intent-to-spec/rules/format-upstream.md +41 -0
  287. package/templates/ja/codex/skills/intent-to-spec/rules/source-scope.md +50 -0
  288. package/templates/ja/codex/skills/intent-validate/SKILL.md +78 -0
  289. package/templates/ja/codex/skills/intent-validate/rules/validate-checks.md +121 -0
  290. package/templates/ja/codex/skills/intent-writeback/SKILL.md +68 -0
  291. package/templates/ja/codex/skills/intent-writeback/rules/writeback-protocol.md +139 -0
  292. package/templates/ja/intent/README.md +118 -0
  293. package/templates/ja/intent/cc-sdd/README.md +28 -0
  294. package/templates/ja/intent/compass-archive/README.md +9 -0
  295. package/templates/ja/intent/compass-archive/archive/.gitkeep +0 -0
  296. package/templates/ja/intent/compass-archive.md +7 -0
  297. package/templates/ja/intent/constraint-library.md +32 -0
  298. package/templates/ja/intent/constraint-starters.md +58 -0
  299. package/templates/ja/intent/context-cost-cues.md +55 -0
  300. package/templates/ja/intent/deltas/README.md +11 -0
  301. package/templates/ja/intent/deltas/archive/.gitkeep +0 -0
  302. package/templates/ja/intent/deltas.md +34 -0
  303. package/templates/ja/intent/drift-log/README.md +11 -0
  304. package/templates/ja/intent/drift-log/archive/.gitkeep +0 -0
  305. package/templates/ja/intent/drift-log.md +41 -0
  306. package/templates/ja/intent/drift-patterns.md +68 -0
  307. package/templates/ja/intent/export-log/README.md +12 -0
  308. package/templates/ja/intent/export-log/archive/.gitkeep +0 -0
  309. package/templates/ja/intent/export-log.md +6 -0
  310. package/templates/ja/intent/glossary.md +23 -0
  311. package/templates/ja/intent/intent-compass.md +55 -0
  312. package/templates/ja/intent/intent-tree.md +59 -0
  313. package/templates/ja/intent/milestones/README.md +10 -0
  314. package/templates/ja/intent/milestones/archive/.gitkeep +0 -0
  315. package/templates/ja/intent/milestones.md +22 -0
  316. package/templates/ja/intent/mode.local.md +23 -0
  317. package/templates/ja/intent/mode.md +32 -0
  318. package/templates/ja/intent/modes/README.md +28 -0
  319. package/templates/ja/intent/modes/behavior-unknown.md +57 -0
  320. package/templates/ja/intent/modes/feature-growth.md +57 -0
  321. package/templates/ja/intent/modes/non-code.md +46 -0
  322. package/templates/ja/intent/modes/refactor.md +56 -0
  323. package/templates/ja/intent/modes/standard.md +50 -0
  324. package/templates/ja/intent/nl-spec/README.md +18 -0
  325. package/templates/ja/intent/openspec/proposal.md +15 -0
  326. package/templates/ja/intent/openspec/spec-delta.md +25 -0
  327. package/templates/ja/intent/overview/README.md +18 -0
  328. package/templates/ja/intent/packets/README.md +29 -0
  329. package/templates/ja/intent/packets/index.md +6 -0
  330. package/templates/ja/intent/packets/plan.md +23 -0
  331. package/templates/ja/intent/release-note/README.md +18 -0
  332. package/templates/ja/intent/scripts/intent-check.mjs +786 -0
  333. package/templates/ja/intent/scripts/pre-push +27 -0
  334. package/templates/ja/intent/spec-ingest/README.md +18 -0
@@ -0,0 +1,47 @@
1
+ # Algorithm: Migration Slicing
2
+
3
+ A technique for decomposing a large change into "migration slices" that preserve behavior and can be shipped individually. Used in the Packet decomposition phase of `refactor` mode. It cuts the gap between the intended design and the current state into behavior-preserving / testable / rollbackable units, deriving a path that advances from the current state one step at a time.
4
+
5
+ ## Procedure
6
+
7
+ Input = the Intent of the refactor target (the intended design) and the current state, plus the drift list produced by Drift Analysis.
8
+
9
+ 1. **Mikado pre-pass: back-calculate the prerequisites**
10
+ - For resolving each drift (the goal), recursively back-calculate "what must be true first for this to be changed safely", and write the prerequisite graph (the Mikado Method's Mikado Graph) as an indented bullet list.
11
+ - The **leaves** — entries with no prerequisites — are the changes you can start with. This is a desk back-calculation at planning time; do not experimentally change code to find out (write the implementation-time Mikado discipline of "revert immediately when an experiment fails, and attack from the leaves" into each slice's Rollback so it flows into the exported implementation hints).
12
+
13
+ 2. **Cut the gap into minimal migration units**
14
+ - Split the current → intended gap into the smallest units that can be applied without breaking behavior. Raise slices starting from the changes close to the leaves of the prerequisite graph (think of dependency discovery as the graph's job and unit decomposition as the slice's job, separately).
15
+ - Make each slice individually deployable and have it advance the design one step while preserving the existing behavior.
16
+
17
+ 3. **Order by dependency, into a chain of unblocks**
18
+ - Order the slices by their dependencies so that each slice unblocks the next.
19
+ - Confirm that at whichever slice you stop, the state up to that point is consistent (intermediate states are also behavior-preserving).
20
+ - When multiple slices are startable within the dependency constraints, **put first the one that reduces the most risk / unblocks the most downstream slices**, and attach a one-sentence reason (no numeric scoring — that would be groundless pseudo-quantification).
21
+
22
+ 4. **Attach a verification point and rollback to each slice**
23
+ - Attach a characterization / regression verification point to each slice so that behavior preservation is observable → **Validation**.
24
+ - How to revert on failure (each slice must be reversible on its own) → **Rollback**.
25
+
26
+ ## Assembling the packet
27
+
28
+ Consolidate the ordered migration slices into packets. Each packet satisfies the following.
29
+
30
+ - **Parent Intent**: a reference to the corresponding L1/L2/L3 (required). If it stems from a drift, also indicate the original drift.
31
+ - **Scope / Non-scope**: the migration this slice includes / does not include.
32
+ - **Expected Behavior**: the existing behavior preserved after the migration.
33
+ - **Safety / Invariants**: invariants that must not be broken during the migration.
34
+ - **Validation / Rollback**: derived from the above.
35
+ - **cc-sdd Mapping**: the policy for how to hand off to cc-sdd.
36
+
37
+ ## Discipline
38
+
39
+ - Each slice must be **behavior-preserving / testable / rollbackable**.
40
+ - **Drift traceability**: every drift in the input drift list must terminate as one of — a slice (packet), an Open Question, or an explicit deferral with a reason. Never silently drop a drift.
41
+ - Order slices by dependency, and each must be individually deployable.
42
+ - Keep the count variable with the expected change size; do not pad it (one is fine for very small changes; treat 1–7 as a loose guide). For slices that are too large, present split proposals.
43
+ - This is the structuring of intent (a packet-decomposition technique), not migration execution code. Do not change code.
44
+
45
+ ## Output
46
+
47
+ An ordered set of migration slices. Each slice has the structure above, and its Scope / Validation / Rollback flow into each packet. Update (present as a proposal) the packet files (under `active/`).
@@ -0,0 +1,88 @@
1
+ # Decision Slots Catalog (completeness schema)
2
+
3
+ The **single canonical source of the completeness schema** that lists easy-to-miss topics as a "table of contents". Instead of leaving coverage to free-form requirement prose, it structurally bounds the kinds of omissions. `intent-discover` (posture check), `intent-packets` (slot seeding), and `intent-validate` (satisfaction check) all read this catalog as the single reference.
4
+
5
+ This catalog is a "sample (a table of contents of easy-to-miss topics)", not a fixed net. Filling gaps for a project type is delegated to discover's posture check and the mode-specific deltas.
6
+
7
+ ## Value range and status
8
+
9
+ Each slot takes one of the value range `decided value | undecided (with reason) | not applicable`, and **must be closed** with one of the following 4 statuses (structurally preventing "silently skipping").
10
+
11
+ | Status | Meaning | What to record alongside |
12
+ |--------|---------|--------------------------|
13
+ | Answered | A decided value exists | The decided value (in the packet's `## Decisions` or the closing section) |
14
+ | Undecided | Not yet decided (deferred) | Reason, a downstream caveat, and a revisit condition (Revisit when) |
15
+ | Not applicable | This slot does not apply to this packet | The rationale for non-applicability (do not silently drop it) |
16
+ | Send to ADR candidate | An architecture-significant decision | Send it to the compass's Decision Rules (the target of up-front fixing) |
17
+
18
+ - `Answered` corresponds to the value range `decided value`, `Undecided` to `undecided (with reason)`, and `Not applicable` to `not applicable`. `Send to ADR candidate` is a declaration until the value is decided on the compass side.
19
+ - For a slot whose "closes in" is an existing section (`## Validation` / `## Expected Behavior`, etc.), you may declare in `## Decisions` that it "is closed in the existing section" rather than duplicating the value (do not define it twice).
20
+
21
+ ## Common core slots (seeded in all modes)
22
+
23
+ 8 slots seeded into every packet. The first 4 (centered on ④) stem from "decision-making under constraints"; the latter 4 fill gaps that existing artifacts did not cover.
24
+
25
+ | ID | Slot name | What to confirm | Completion condition | Closes in | Up-front/deferred door | Rationale |
26
+ |----|-----------|-----------------|----------------------|-----------|------------------------|-----------|
27
+ | `decision-consistency` | Consistency model | On data change, strong (immediate) or eventual consistency | Which consistency model is declared and downstream can rely on it | packet `## Decisions` (new) | Up-front (one-way: costly external impact if overturned later) | Irreversible, binds multiple packets. ISO/IEC/IEEE 42010 decision/rationale |
28
+ | `decision-idempotency` | Idempotency & retry | Preventing inconsistency on write retry (idempotency keys, etc.) | The behavior on retry is declared | packet `## Decisions` (new) | Deferrable (two-way: discretionary if localizable and reversible) | Affects the acceptance oracle; a retry-premised quality attribute |
29
+ | `decision-error-semantics` | Error semantics & boundary validation | Boundary validation and error return when input is empty/unexpected (Fail-Fast, etc.) | The return contract on abnormal input is declared | packet `## Decisions` (new) | Deferrable (two-way) | Affects the acceptance oracle and external contracts |
30
+ | `decision-authz` | Authorization | Which actors may act, and row-level permission to accessible data | Who can access what is declared | packet `## Decisions` (new) | Up-front (one-way: security/regulatory floor) | Irreversible, security floor. A high-cost decision |
31
+ | `decision-quality-priority` | Quality-goal prioritization | Among performance/reliability/maintainability/security, the load-bearing top 2-3 attributes | The top attributes are declared with a ranking | packet `## Decisions` (new; may link with compass Invariants) | Deferrable (two-way) | A quality trade-off point. ISO/IEC 25010 quality vocabulary |
32
+ | `decision-fit-criterion` | Numeric/fit criterion | How acceptance is measured (fit criterion / SLO / test oracle) | The numeric/observable acceptance condition is declared | Reference packet `## Validation` (existing). If undecided, declare in `## Decisions` | Deferrable (two-way) | Affects the acceptance oracle. Volere's fit criterion |
33
+ | `decision-exception-flow` | Exception flow | Whether representative abnormal-path flows are defined, not only the happy path | Representative abnormal-path flows are declared | Reference packet `## Expected Behavior` (existing). If missing, declare in `## Decisions` | Deferrable (two-way) | Fills the happy-path-bias gap (PBR test/operations viewpoints) |
34
+ | `decision-downstream-trace` | Downstream trace | Links to the work/tests that realize/verify this packet (realized-by / verified-by) | Downstream links are declared (or judged minimally-sufficient and left empty) | packet `## Verification protocol` / trace links (new, optional) | Deferrable (two-way) | Bidirectional trace (fills the pre-RS gap) |
35
+
36
+ - Because `decision-fit-criterion` / `decision-exception-flow` close in existing sections, if they are closed in the existing section, place only a reference in `## Decisions` stating it "is closed in the existing section" (do not define it twice).
37
+ - The common core is seeded in all modes. `intent-validate`'s `decision-slot-unsown` check detects "none of these 8 IDs is seeded in `## Decisions`" (common core unsown).
38
+
39
+ ## Mode-specific delta slots (added per mode)
40
+
41
+ Delta slots **added** to the common core according to the mode in `.intent/mode.md`. The slot definitions are canonical in this table and are not hardcoded into the skill body (riding on the Mode/Algorithm/Skill three-layer separation).
42
+
43
+ ### standard
44
+
45
+ | ID | Slot name | What to confirm | Completion condition | Closes in | Up-front/deferred door |
46
+ |----|-----------|-----------------|----------------------|-----------|------------------------|
47
+ | `decision-perf-budget` | Performance budget | The allowable envelope for latency/throughput/resources | The performance envelope is declared | packet `## Decisions` | Deferrable (two-way) |
48
+ | `decision-data-ownership` | Data ownership | Where this data's source of truth is and who may modify it | The data's source of truth and the modifying party are declared | packet `## Decisions` | Up-front (one-way: large external impact if overturned later) |
49
+
50
+ ### refactor
51
+
52
+ | ID | Slot name | What to confirm | Completion condition | Closes in | Up-front/deferred door |
53
+ |----|-----------|-----------------|----------------------|-----------|------------------------|
54
+ | `decision-characterization` | Behavior to preserve / characterization tests | Test points that pin the current observable behavior exactly as it is | The observed behavior is pinned | Reference the existing `algo-characterization-test.md` (do not define it twice) | Up-front (one-way: pin the safety net first) |
55
+ | `decision-change-boundary` | Change boundary | How far it is OK to change, and what must not be touched | The changeable range and the untouchable range are declared | packet `## Decisions` | Up-front (one-way) |
56
+ | `decision-rollout-safety` | Rollout safety | How to revert and what to observe when rolling out the change in stages | The rollout strategy and how to revert are declared | packet `## Decisions` / reference `## Rollback` (existing) | Deferrable (two-way) |
57
+
58
+ ### behavior-unknown
59
+
60
+ | ID | Slot name | What to confirm | Completion condition | Closes in | Up-front/deferred door |
61
+ |----|-----------|-----------------|----------------------|-----------|------------------------|
62
+ | `decision-observed-facts` | Observed facts and their source | What was observed and where its source is | The observed facts and their source are declared | packet `## Decisions` / reference `## Expected Behavior` (existing) | Up-front (one-way: pin the facts first) |
63
+ | `decision-hypothesis-confidence` | Distinguishing hypothesis from confidence | Which are facts and which are hypotheses, and to what degree of confidence | Facts/hypotheses and confidence are distinguished | packet `## Decisions` | Deferrable (two-way) |
64
+ | `decision-current-vs-future` | Separating current behavior from future intent | Whether "it behaves like this now" and "we want it to behave like this" are conflated | Current behavior and future intent are declared separately | packet `## Decisions` | Deferrable (two-way) |
65
+
66
+ ### feature-growth
67
+
68
+ | ID | Slot name | What to confirm | Completion condition | Closes in | Up-front/deferred door |
69
+ |----|-----------|-----------------|----------------------|-----------|------------------------|
70
+ | `decision-existing-boundary` | Consistency with existing boundaries | Whether it is consistent with existing module boundaries/contracts | The policy for consistency with existing boundaries is declared | packet `## Decisions` | Up-front (one-way) |
71
+ | `decision-backward-compat` | Backward compatibility | Whether it breaks existing users / existing data | The backward-compatibility policy is declared | packet `## Decisions` | Up-front (one-way: a high-cost decision) |
72
+ | `decision-data-migration` | Data migration | How to migrate existing data and consistency during migration | The migration strategy is declared | packet `## Decisions` | Up-front (one-way: irreversible) |
73
+ | `decision-staged-rollout` | Staged rollout | How to run old and new in parallel and how to switch over | The staged-rollout strategy is declared | packet `## Decisions` | Deferrable (two-way) |
74
+ | `decision-legacy-impact` | Impact on legacy features | The side effects this extension has on existing features | The impact on legacy features is declared | packet `## Decisions` | Deferrable (two-way) |
75
+
76
+ ## Three disciplines
77
+
78
+ A skill applying this catalog observes the following three disciplines.
79
+
80
+ 1. **Do not offer defaults (anchoring avoidance)**: do not present a "reasonable default" or "recommended value" for a slot. This avoids the anchoring bias where judgment is dragged toward the first value presented. Symmetric side-by-side presentation of multiple options is reserved as a future extension candidate.
81
+ 2. **The tool does not infer applicability or values**: do not infer or auto-fill whether a slot applies, or which value it takes, from the artifact contents. People declare them (the same declaration-based discipline as not inferring `depends_on`). `intent-validate` only checks the slots/statuses actually declared.
82
+ 3. **Do not fix the ceiling (How)**: a slot declares "what to decide (what + constraints + oracle)" and does not make the packet carry the implementation How. The local search inside the rules is delegated to the agent's discretion zone.
83
+
84
+ ## How to extend
85
+
86
+ - **Extension completes by just adding a row to the table** (no structural change to other files needed — the "table is canonical" pattern). To grow the common core, add a row to the common-core table; to grow a mode delta, add a row to that mode's table.
87
+ - **For a slot covered by an existing artifact, reference the "closes in" and do not create a new container**. Intent/scope/stakeholders/constraints/acceptance evidence, etc. are covered by the existing tree / compass / packet existing sections, so do not recreate them in `## Decisions`; reference their closing section.
88
+ - For a slot with the same subject as an existing rule (e.g. `decision-characterization`), keep it as a reference to the existing file (`algo-characterization-test.md`) and do not duplicate the definition.
@@ -0,0 +1,54 @@
1
+ # Export Route (exit decision lane)
2
+
3
+ A **read-only decision convention** that, after the planning phase (discover→compass→packets), chooses which exit to take based on the case type. There are three exits:
4
+
5
+ - **cc-sdd implementation export** → `/intent-export-cc-sdd`
6
+ - **OpenSpec implementation export** → `/intent-export-openspec`
7
+ - **readable Spec projection** → `/intent-to-spec`
8
+
9
+ This convention is the **single source of truth in intent-packets**; the exit suggestion in `/intent-packets` and the preflight in the export skills reference this rule (the rule body is not copied into other skills). The decision is semantic and is not pushed onto a mechanical check script such as `intent-check.mjs` (INV2).
10
+
11
+ ## Inputs (all read-only observation)
12
+
13
+ The decision takes three inputs. Each is observed with Read / Glob and never creates, modifies, or deletes a file (read-only, INV5):
14
+
15
+ 1. **target format**: the value of the `format` line in `.intent/mode.local.md` (or the legacy `.intent/mode.md`), with range `cc-sdd` / `openspec` / `to-spec`.
16
+ 2. **mode**: the `mode` value in the same file (`non-code` / `standard`-family).
17
+ 3. **prerequisite**: whether the `.kiro/` directory exists (a hint for whether cc-sdd is set up).
18
+
19
+ ## Decision (first-match, deterministic)
20
+
21
+ The same inputs always yield the same result (deterministic). Evaluate top-down and take the first matching row.
22
+
23
+ ### A. When format is explicitly set to a valid value (highest priority)
24
+
25
+ | `format` | recommended exit |
26
+ |----------|------------------|
27
+ | `openspec` | `/intent-export-openspec` (**for an OpenSpec case, promote OpenSpec**) |
28
+ | `cc-sdd` | `/intent-export-cc-sdd` |
29
+ | `to-spec` | `/intent-to-spec` |
30
+
31
+ When set, deterministically recommend that exit.
32
+
33
+ ### B. When format is unspecified (infer from mode + prerequisite)
34
+
35
+ When `format` is "unspecified" (any of: (1) the line is absent, (2) a placeholder value `(undetermined — …)`, (3) a value outside the range — per the read contract in mode.local.md), infer and **present candidates** from mode and the presence of `.kiro/`. Cover all four quadrants as follows:
36
+
37
+ | mode | `.kiro/` | result |
38
+ |------|----------|--------|
39
+ | non-code | absent | `/intent-to-spec` as the top candidate (a readable artifact is the goal, DR15) |
40
+ | standard-family | present | `/intent-export-cc-sdd` as the top candidate (implementation case, cc-sdd already set up) |
41
+ | non-code | present | **list candidates** (`/intent-to-spec` on top, but also list `/intent-export-cc-sdd`; a non-code case can still have cc-sdd set up, so do not collapse to one) |
42
+ | standard-family | absent | **list candidates** (`/intent-export-cc-sdd` [needs setup], `/intent-to-spec`, `/intent-export-openspec`; not uniquely determined) |
43
+
44
+ ### C. Fallback
45
+
46
+ Including any case not above: when format is unspecified and the exit cannot be uniquely determined from the inputs, **do not collapse to a single exit — list candidates** (present rather than assert; the exit depends on the user's intent).
47
+
48
+ ## Discipline
49
+
50
+ - **Do not hardcode a single exit**: the problem is "collapsing to one exit without looking at the case type." Do not swap in another fixed destination (a to-spec-only or openspec-only path). When ambiguous, present candidates.
51
+ - **read-only**: the decision only observes; it does not mutate state (INV5).
52
+ - **Do not push onto a mechanical check**: keep the semantic decision in this rule plus context; do not move it into a script such as `intent-check.mjs` (INV2).
53
+ - **Do not depend on asking the user back**: settle the exit suggestion via this rule's convention and defaults; do not assume interactive follow-up.
54
+ - **Do not touch external tools**: reading whether `.kiro/` exists is observation, not a change to kiro / cc-sdd / OpenSpec (INV1).
@@ -0,0 +1,35 @@
1
+ # First Packet Recommendation
2
+
3
+ The procedure for recommending and recording exactly one packet to start with, together with qualitative reasons. Always used at the priority presentation (Step 4) of `/intent-packets`.
4
+
5
+ ## Applicability
6
+
7
+ - **Always apply.** Does not depend on designer-questions in `.intent/mode.md` (apply even when it is off or unrecorded).
8
+ - In SKILL.md Step 4, apply this procedure **after** applying walking-skeleton (apply this procedure even when walking-skeleton was not applied).
9
+
10
+ ## Procedure
11
+
12
+ 1. **Read the materials**
13
+ - Read the packet candidates and their priorities, the "Walking Skeleton" section of `.intent/packets/plan.md` (if recorded), and the purpose in `.intent/mode.md`.
14
+
15
+ 2. **Choose exactly one packet to start with**
16
+ - For the reasons, cite the applicable ones among the following qualitative criteria: **risk reduction** / **unblocking dependencies** / **ease of rollback** / **size of learning**.
17
+ - When purpose=poc is recorded, always include the criterion "whether it can refute the hypothesis most cheaply" in the reasons (when purpose is unrecorded or product, do not reference purpose).
18
+
19
+ 2.5. **Confirm the priorities and acceptable trade-offs with the user**
20
+ - Before finalizing the recommendation, confirm the priorities and acceptable trade-offs with the user: **which to prioritize, speed vs. quality**, and **which scope may be cut or deferred for this starting point**.
21
+ - This is a confirmation, not a prompt to override the recommendation. The recommendation is a proposal; when the user's priority judgment obtained here conflicts with the recommendation, prefer the user's judgment and revise the recommendation and its reasons.
22
+ - Ask in a form where "not applicable / unknown / decide later" can be chosen, and do not force an answer. When a hold or "decide later" is chosen, do not fill it in by guessing; route the item to the "Open Questions" section of `.intent/packets/plan.md` (appending it while preserving the existing content if the section is absent) and continue the recommendation.
23
+
24
+ 3. **Align with the Walking Skeleton**
25
+ - If the decision on the walking skeleton (the minimal implementation that cuts end to end) is recorded, align the recommendation with it. When making a recommendation that does not align, state the reason explicitly.
26
+
27
+ 4. **Record the recommendation**
28
+ - Record in the "Recommended First Packet" section of `.intent/packets/plan.md`: **Recommended packet** (packet name) / **Reasons** (qualitative criteria) / **Alignment with Walking Skeleton** (aligned / if not aligned, the reason / Walking Skeleton not recorded).
29
+ - **Non-destructive append for older scaffolds**: if `plan.md` lacks a "Recommended First Packet" section, append the section while preserving the existing recorded content, then record.
30
+
31
+ ## Discipline
32
+
33
+ - Do not use numeric scoring (weighted sums, point ratings).
34
+ - The recommendation is a proposal; it does not override the user's own priority judgment.
35
+ - Do not change code.
@@ -0,0 +1,207 @@
1
+ # Packet file format
2
+
3
+ The **single canonical source** for the packet file format, ID rule, state transitions, and the index regeneration procedure (`.intent/packets/active/<packet_id>.md` and `.intent/packets/archive/<year>/<packet_id>.md`). Skills that create, update, or move packets — and skills that read packets — follow these rules.
4
+
5
+ ## Frontmatter schema (12 fixed keys)
6
+
7
+ Each packet file starts with a YAML frontmatter (`---` delimited). The keys are **fixed to these 12**: `packet_id` / `name` / `state` / `created_at` / `updated_at` / `closed_at` / `parent_intents` / `spec_refs` / `superseded_by` / `summary` / `depends_on` / `mode`.
8
+
9
+ ```yaml
10
+ ---
11
+ packet_id: pkt-20260612-auth-session-k3p9 # Immutable. Matches the file name. Trailing segment is a session-specific rand. For packet-to-packet references only
12
+ name: "Auth session cleanup" # Canonical packet name. Matching key for export-log / Source Packet / deltas / slug derivation
13
+ state: implementing # draft | ready | implementing | verifying | done
14
+ created_at: 2026-06-12T05:00:00Z # Creation timestamp (ISO 8601)
15
+ updated_at: 2026-06-12T05:00:00Z # Last-updated timestamp (ISO 8601). Equal to created_at on creation; the moment of update on content change
16
+ closed_at: "" # Filled in when done (date). Leave empty if unknown at migration
17
+ parent_intents: [L1-2, L2-3] # References into the tree
18
+ spec_refs: [] # Finalized at writeback completion
19
+ superseded_by: "" # Successor packet_id when superseded
20
+ summary: "Clean up auth sessions" # Source of the one-line summary in the index
21
+ depends_on: [] # List of packet_ids this packet depends on (default []). For packet-to-packet references only
22
+ mode: standard # Mode confirmed at draft time (fixed at draft time; never retroactively updated)
23
+ ---
24
+ ```
25
+
26
+ - `state` takes one of 5 values: `draft | ready | implementing | verifying | done` (see "State value domain"). Superseded is **not a state** but a separate axis expressed by filling in `superseded_by` (see "State transitions and placement").
27
+ - `depends_on` is a list of the `packet_id`s of the packets this packet depends on (default `[]`). Like `superseded_by`, **packet-to-packet references use `packet_id`** (never `name`). It holds only dependencies declared by a human; tools do not infer or compute dependencies.
28
+ - **`mode` is the provenance record of the mode that was confirmed at the time the packet was drafted**. The value is a mode name (e.g. `standard` / `deep` / `quick`). The intent-packets skill resolves the mode at draft time using the CONTRACT.md fallback rule (mode.local.md → mode.md → standard) and stamps the resolved value. **Fixed at draft time** (DR13) — never retroactively update an existing packet's `mode` even if the local mode changes after drafting. If the mode is absent or undetermined, record the default `standard` and do not stop. **Backward compatibility**: an existing packet without `mode` is treated as a missing field; continue without stopping and do not auto-complete on every read. Not stamped in tree / compass / plan (DR11).
29
+ - **`updated_at` is the packet's last-updated timestamp (ISO 8601)**. It is the canonical field that a writer skill (intent-packets / writeback etc.) stamps at the moment it changes the packet. The stamping discipline is:
30
+ - **On creation, initialize it equal to `created_at`** (never `—` or empty).
31
+ - **Record the moment of a content update** into `updated_at` (stamp the current time at that moment in ISO 8601).
32
+ - **Do not stamp on a re-run that involves no content change (idempotent)**. Do not advance the timestamp without a change.
33
+ - The stamping responsibility belongs to the writing phase (intent-packets / writeback etc.); the read-only verification layer (intent-validate) **only reads** `updated_at` and never rewrites it.
34
+ - **Backward compatibility**: an existing packet without `updated_at` is treated as a missing field; do not force an immediate bulk migration. The reader makes the absence explicit as "unfilled / unobserved" and does not fill it in by guessing (lazy completion, isomorphic to absent `depends_on` = "no dependencies"). The next writer flow that updates the packet appends it as a differential edit (non-destructive).
35
+ - **Keep undetermined keys with empty values** (never omit the key itself — for determinism of index regeneration and checks). `depends_on` keeps `[]` even when there are no dependencies; do not omit the key.
36
+ - **Summary maintenance norm**: a skill that updates a packet's body must also keep the frontmatter `summary` in sync.
37
+
38
+ ## How name and packet_id are used
39
+
40
+ - **`name` is the canonical packet name (the matching key)**. The export-log `| packet |` column, the `## Source Packet` heading of cc-sdd drafts, the Delta headings in deltas, and the cc-sdd slug derivation all use `name`. Never use `packet_id` for any of these.
41
+ - **`packet_id` is reserved for the file name (`<packet_id>.md`) and packet-to-packet references such as `superseded_by`**.
42
+
43
+ ### Mutability of name
44
+
45
+ - After the first export (the moment a row lands in the export-log), `name` is **immutable**. Treat a rename as a supersede (create a successor packet + replace the old packet).
46
+ - Renaming before export is allowed as a differential update (even then, `packet_id` and the file name do not change).
47
+
48
+ ### Resolving a name to a file
49
+
50
+ 1. Match the `name` column of `index.md`, or the frontmatter `name` under `active/`, to identify the file.
51
+ 2. If it is not in `active/`, reference `archive/` **explicitly** (an explicit exception to the principle "archive/ is normally not read").
52
+
53
+ ## ID rule
54
+
55
+ - Format: `pkt-<YYYYMMDD>-<slug>-<rand>`. The date part is the **creation date** (obtained via the shell). The trailing `<rand>` is a **session-specific short random token** (see below) that guarantees IDs never collide even across concurrent sessions; it is part of the immutable identifier.
56
+ - `<rand>` is 4 characters of lowercase ASCII letters and digits (`[a-z0-9]`), generated via the shell at creation time (e.g. `LC_ALL=C tr -dc 'a-z0-9' < /dev/urandom | head -c 4`). If it cannot be generated, do not fill in a guessed value; notify the user and stop (same discipline as when the date cannot be obtained).
57
+ - The slug is derived from `name` by the rule in the next subsection. The next subsection is a **verbatim copy** of map-cc-sdd (the slug rule of the cc-sdd export); when changing it, revise both at the same time (the cc-sdd output directory name is derived from the same `name` by the same rule, so the two coincide).
58
+
59
+ ### Slug rule (deterministic)
60
+
61
+ Derive the directory name (slug) from the packet name **deterministically** in the following order. The same packet name always yields the same slug.
62
+
63
+ 1. Apply NFC normalization.
64
+ 2. Trim leading/trailing whitespace.
65
+ 3. Lowercase ASCII uppercase letters.
66
+ 4. Replace whitespace and path-dangerous characters (`/ \ : * ? " < > |`) with `-`.
67
+ 5. Collapse consecutive `-` into one.
68
+ 6. Strip leading/trailing `-`.
69
+
70
+ - Non-ASCII characters (Japanese etc.) are preserved as-is.
71
+ - If the result is an empty string, use `unnamed-packet` as the slug and notify the user.
72
+
73
+ ### Collision avoidance (concurrent sessions)
74
+
75
+ - The trailing `<rand>` ensures that creating a **different packet** with the same slug on the same day never yields a colliding ID. Even when **concurrent (parallel) sessions** cannot read each other's unsaved packets, the independently generated `<rand>` values differ, so the IDs differ. The old approach of reading existing packets and then assigning a numbered suffix (`-2`, `-3`, …) is not used, because parallel sessions cannot see each other and so cannot prevent the collision that way.
76
+ - If, at creation time, a generated ID happens to match an existing file (in `active/` or `archive/`), never silently overwrite: regenerate `<rand>`, assign a different ID, and notify the user of the packet-name → ID mapping.
77
+ - `packet_id` and the file name (`<packet_id>.md`) are **immutable** (they do not change on rename, state change, or move). Once fixed, `<rand>` — as part of the ID — does not change either.
78
+ - **Backward compatibility**: legacy IDs without `<rand>` (`pkt-<YYYYMMDD>-<slug>`) remain valid. Do not force an immediate bulk migration; leave existing packet IDs as-is (a rename is treated as a supersede).
79
+
80
+ ## State value domain
81
+
82
+ `state` is one of 5 values distinguishing the stage of progress. The values are mutually exclusive, and a packet is in exactly one stage. State is a **declarative state record**, not a management mechanism (state machine) with transition rules, guards, or automatic progression.
83
+
84
+ | state | Meaning | Placement | Evidence | depends_on |
85
+ |-------|---------|-----------|----------|------------|
86
+ | `draft` | Drafting / undetermined | `active/` | Not required | Optional |
87
+ | `ready` | Ready to start (dependencies resolved, awaiting implementation) | `active/` | Not required | Declaring it presumes all dependencies are `done` |
88
+ | `implementing` | Under implementation | `active/` | Provisional in-progress records allowed | — |
89
+ | `verifying` | Implemented, awaiting verification (Evidence undetermined) | `active/` | Being collected (mark as undetermined) | — |
90
+ | `done` | Evidence obtained / complete | `archive/<year>/` | **Presumed finalized** | — |
91
+
92
+ - The only terminal value is `done`. Finalizing `state=done` presupposes that the `## Evidence` section has finalized verification results (a declarative order of "human/check confirms → record → done", not an automatic transition).
93
+ - Changes to the stage of progress are recorded declaratively, and their finalization rests on a human or a check gate (not finalized by AI self-report alone).
94
+
95
+ ### Backward-compatible migration (from the old `draft | active | done`)
96
+
97
+ | Old state | New state | Rationale |
98
+ |-----------|-----------|-----------|
99
+ | `draft` | `draft` | Same |
100
+ | `active` | `implementing` | Safe-side default for a started packet (loses the least information; can later be re-declared `ready`/`verifying`) |
101
+ | `done` | `done` | Same |
102
+
103
+ - Why `active → implementing` is the default: the old `active` covered both "started" and "ready to start", so we err on the safe side (treat as in progress) to prevent "treated as done while not finished".
104
+ - Migration is **presented as a differential update proposal** and recorded after user confirmation. It does not destroy or delete existing packets (**move only**).
105
+ - **Handling missing `depends_on`/`## Evidence`**: even if an existing packet lacks the `depends_on` key or the `## Evidence` section, do not force an immediate bulk migration. The reader treats absent `depends_on` as "no dependencies (equivalent to the empty set)" and absent `Evidence` as "unfilled" (do not fill in by guessing). The next create/update flow that touches the packet appends `depends_on: []` as a differential edit (non-destructive lazy completion).
106
+
107
+ ## State transitions and placement
108
+
109
+ - Superseded is **not a state** but a separate axis: fill in `superseded_by` with the successor `packet_id`, not the state.
110
+ - Placement mapping:
111
+ - `draft | ready | implementing | verifying` → `active/`
112
+ - `done` or `superseded_by` filled in → `archive/<year>/`
113
+ - Writing the state and moving the file are one combined operation (never leave a done packet lingering in `active/`; lingering is subject to status's integrity checks).
114
+ - **No deletion**: packet files are only moved, never deleted.
115
+
116
+ ## Body section structure
117
+
118
+ Right after the frontmatter, place a `# <name>` heading (recommended), followed by the sections below (inheriting the structure of the current packet definition section).
119
+
120
+ - `## Parent Intent` — The L0 / L1 / L2 / L3 this packet supports.
121
+ - `## Why` — Why this packet is needed.
122
+ - `## Scope` — What is included.
123
+ - `## Non-scope` — What is not included.
124
+ - `## Expected Behavior` — The behavior observable after completion.
125
+ - `## Decisions` — Decision slots under constraints (the ④-centered slots of the completeness schema). Place it **after `## Expected Behavior` and before `## Safety / Invariants`**. **The canonical source of the slot value domain (`finalized value | undetermined (with reason) | not applicable`), the 4 statuses, the firing conditions, and the slot IDs is `decision-slots.md`** (read that catalog as the single reference; this section is its projection). **Required section** (unlike the optional sections below, it is always kept as the container that closes the common-core slots; if no slots are seeded, keep an empty section and do not fill in by guessing).
126
+ - `## Safety / Invariants` — The constraints to uphold. **The canonical source of packet-specific invariants** (never write them into the compass; the compass holds only project-universal invariants).
127
+ - `## Validation` — How to verify (**plan**). Tests, manual check, log check, type checking, etc.
128
+ - `## Evidence` — What was verified (**result**). Place it right after `Validation` (plan) and before `Rollback`. Each entry can include "the verified result, the date performed, the corresponding check-axis ID (the stable kebab-case ID in `validate-checks.md`), and the source (intent-validate / drift-watch / human confirmation)".
129
+ - `## Rollback` — How to revert on failure.
130
+ - `## Out of scope` — **Optional (recommended)**. State what is not done (non-goals) to prevent over-implementation. If unfilled, the section may be omitted.
131
+ - `## Verification protocol` — **Optional (recommended)**. Holds the tests to write first, the existing tests to protect, and the tests for additional failure modes to add. Downstream trace links (realized-by / verified-by) may also be held here optionally. If unfilled, the section may be omitted.
132
+ - `## cc-sdd Mapping` — How to convert this packet into cc-sdd's requirements / design / tasks.
133
+
134
+ ### `## Decisions` (separating human-fixed from agent-discretion)
135
+
136
+ `## Decisions` is the section that holds decision slots under constraints, and it carries the following two zones internally (keep them distinguished).
137
+
138
+ - **Human-fixed (finalized values / visible rules)**: visible design rules that a human fixed up front. Slots with the value domain `finalized value`. The agent does not overturn these rules.
139
+ - **Agent-discretion zone (deferred / undetermined)**: the area where local exploration inside the rules is delegated to the agent. Slots with the value domain `undetermined (with reason)` (`undetermined (deferred)`) correspond to this. For `undetermined`, also note the reason, the caveat for downstream, and the revisit condition (Revisit when).
140
+
141
+ ```markdown
142
+ ## Decisions
143
+ ### Human-fixed (finalized values / visible rules)
144
+ - `decision-authz` answered: the only actor allowed to execute is the admin role
145
+ ### Agent-discretion (deferred / with revisit condition)
146
+ - `decision-idempotency` undetermined: the retry approach is at implementation discretion. Revisit when: it becomes an externally exposed API
147
+ ```
148
+
149
+ - The canonical source of the slot value domain, status, firing conditions, and slot IDs is `decision-slots.md`. This section is its projection; do not redefine the value domain or IDs here.
150
+ - For a slot whose close-site is an existing section (`## Validation` / `## Expected Behavior` etc.), do not duplicate the value here; place only a reference noting "closed in the existing section" (no duplicate definition).
151
+ - If no slots are seeded, **keep an empty section** (do not fill in by guessing); do not omit the section itself.
152
+
153
+ ### Section grading (required / optional)
154
+
155
+ - **Required**: only `## Decisions` (the container that closes the common-core slots). Keep it as an empty section even when no slots are seeded.
156
+ - **Optional (recommended)**: `## Out of scope` / `## Verification protocol` and the downstream trace links (realized-by / verified-by). If unfilled, the section **may be omitted** (maintaining the lightweight philosophy that avoids packet bloat and decision fatigue).
157
+ - The frontmatter stays **fixed at 12 keys** and is not changed. The addition of these sections is **body sections only** and does not grow the frontmatter (trace links are also held in the body, not as new frontmatter keys).
158
+
159
+ ### Distinguishing `## Validation` (plan) and `## Evidence` (result)
160
+
161
+ `Validation` is "how it is intended to be verified (plan)", and `Evidence` is "the actual result of verification (reality)"; the two are **not mixed**.
162
+
163
+ ```markdown
164
+ ## Evidence
165
+ - 2026-06-15 — `unit: auth-session expiry test` green / `invariant-conflict` not applicable
166
+ - Check axes: invariant-conflict, l3-intent-mismatch
167
+ - Source: intent-validate (human confirmation: NN)
168
+ ```
169
+
170
+ - Each entry can include the verified result, the date performed, the check-axis ID (kebab-case), and the source.
171
+ - If there is no result, **keep an empty section** and do not fill in unfilled entries by guessing.
172
+ - Evidence is recorded based on check results (intent-validate / drift-watch) or human confirmation rather than AI self-report, in a form whose source can be traced.
173
+ - **`state=done` presupposes that Evidence has finalized verification results** (done with empty Evidence is a contradictory state).
174
+
175
+ ### Non-code degrade of the validation vocabulary (optional; canonical)
176
+
177
+ The validation vocabulary in `## Validation` / `## Rollback` is written assuming code deliverables. When packing non-code deliverables (documents, business, research) with packets, you may apply the following read-throughs (this is an **optional degrade**, and this is the **canonical** definition of the read-through vocabulary — the non-code mode refers to this definition).
178
+
179
+ - `testable` → "decidable by review viewpoints / acceptance criteria"
180
+ - `rollback` → "version control / revert"
181
+ - `behavior-preserving` → "do not break the meaning / agreements of existing deliverables"
182
+ - (6) standalone completeness (termination judgment), "the user / caller" → "the reader / recipient" (for non-code deliverables, it means the packet's completed form is a coherent boundary that is not half-baked as seen by the reader / recipient)
183
+
184
+ - This degrade is **optional** and does not make the code-assuming vocabulary mandatory (code deliverables keep using the original vocabulary).
185
+ - Applying the degrade does **not skip the packets step**. Non-code work still goes through packets and retains the decision-slot seeding (C3) in `## Decisions` (it only re-reads the vocabulary; it does not bypass packets).
186
+
187
+ ## index.md regeneration procedure
188
+
189
+ `.intent/packets/index.md` is a generated artifact and must not be hand-edited. A skill that changed the canonical (anything under packets/) regenerates it at the end of its run by the following procedure.
190
+
191
+ 1. Read **only the frontmatter** of every packet file under `active/` (do not read the bodies — deterministic).
192
+ 2. Build the `| packet_id | name | state | summary |` table in **ascending** `packet_id` order (`depends_on` is not emitted as an index column — for determinism and to avoid table bloat; the read-only side reads `depends_on` directly from the `active/` frontmatter).
193
+ 3. If `active/` is empty (or absent), the canonical form is the table with the header only.
194
+
195
+ ## Read-only consumer contract
196
+
197
+ Read-only skills such as intent-status / intent-overview **only read** the following interfaces defined by this canonical source, and do not modify the packet canonical.
198
+
199
+ - **`state` (5-value domain)**: `draft | ready | implementing | verifying | done`. Used to judge the stage of progress.
200
+ - **`depends_on` (list of packet_ids)**: blocked status is derived read-only as "there is a packet in `depends_on` that is not `done` = blocked". The derived result is not written back to the packet. It does not auto-launch the next step or auto-determine ordering based on dependencies.
201
+ - **`## Evidence` section**: verified results, date performed, check-axis ID, source. Material for the "degree of finalization of evidence" in progress.
202
+
203
+ **Backward-compatible reading discipline (do not fill in by guessing)**:
204
+ - Absent `depends_on` → read as "no dependencies (empty set)".
205
+ - Absent/empty `## Evidence` → make it explicit as "unfilled / unobserved" and do not complete it.
206
+ - Old `state: active` → read as "in progress (equivalent to `implementing`)".
207
+ - When a new field or new section is unfilled or absent, make that location explicit as "unfilled / unobserved".
@@ -0,0 +1,35 @@
1
+ # Walking Skeleton Check
2
+
3
+ The procedure for confirming whether the top-priority packet spans the primary user journey end to end (i.e., is a walking skeleton). Used at the priority presentation (Step 4) of `/intent-packets`, only when designer-questions in `.intent/mode.md` is `on`. All dialogue is conducted as confirmation with the user (the means of confirmation follows the SKILL.md conventions).
4
+
5
+ ## Applicability
6
+
7
+ - Read `designer-questions` in `.intent/mode.md`. Apply this procedure to the Step 4 priority presentation only when it is `on`.
8
+ - **When designer-questions is not recorded as on (off or unrecorded), do not apply this procedure and do not change the existing Step 4 behavior** (notification for the unrecorded case follows the `.intent/mode.md` conventions).
9
+ - **Do not reference purpose.**
10
+
11
+ ## Procedure
12
+
13
+ 1. **E2E verdict**
14
+ - Read the top-priority packet's Scope and Expected Behavior, and judge whether it spans the primary user journey end to end (input → processing → observable output).
15
+ - Ground the verdict in the packet's descriptions. A packet that stops at an intermediate layer (processing only, UI only, etc.) is judged "does not span".
16
+
17
+ 2. **Present the verdict and rationale, and confirm**
18
+ - Present the verdict (spans end-to-end / does not span) and its rationale to the user, and confirm.
19
+ - State the rationale in plain language: describe what this packet (the unit of work handed to cc-sdd) builds and what runs end to end after completion, so the rationale is readable without knowing the field names.
20
+
21
+ 3. **Propose remedies (when judged "does not span")**
22
+ - Propose how to make the first packet a walking skeleton, in one of the following forms:
23
+ - **Reordering proposal**: reorder the priorities so that a packet spanning E2E comes first.
24
+ - **Merge proposal**: merge the Scopes of multiple packets to create a packet that spans E2E.
25
+ - If the user intentionally defers the walking-skeleton conversion, accept that as a choice (do not silently drop it — record it; see step 4).
26
+
27
+ 4. **Record the confirmation result**
28
+ - Record in the "Walking Skeleton" section of `.intent/packets/plan.md`: **Top-priority packet** (packet name) / **E2E verdict** (spans end-to-end / does not span) / **Confirmation result** (what the user confirmed).
29
+ - For an intentional deferral, also record it together with the reason under the Deferred section.
30
+ - **Non-destructive append for older scaffolds**: if `plan.md` lacks a "Walking Skeleton" section, append the section while preserving the existing recorded content, then record.
31
+
32
+ ## Discipline
33
+
34
+ - The confirmation result is referenced by intent-validate. Do not omit the record.
35
+ - Do not change code.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: intent-release-note
3
+ description: An outward projection skill that reads the git commit history read-only, text-matches each commit against intent (packet name / parent intent / deltas / milestones) to thicken the "why it changed," and derives a release note under `.intent/release-note/` in a format (changelog-style / github-releases-style). It never modifies git or the canonical intent (read-only). Unmatched commits are kept as thin lines, surfacing the gap between intent and reality.
4
+ ---
5
+
6
+ # intent-release-note Skill
7
+
8
+ ## Core Mission
9
+ - **Success Criteria**:
10
+ - Read the git log of the given range (default = latest tag..HEAD; `<from>..<to>` may be given via argument, with fallback) **read-only** (no commit / tag creation / push).
11
+ - **Text-match** each commit against intent (packet name / parent intent / deltas / milestones) and, for matched ones, attach the "why (for which intent it changed)."
12
+ - List unmatched commits as thin changelog lines, **surfacing the gap between intent and reality** (do not silently drop them).
13
+ - Derive output under `.intent/release-note/` following a format (select `rules/format-changelog.md` / `rules/format-github-releases.md` by argument) by full replacement.
14
+ - Change neither the canonical intent (intent-tree / compass / packets) nor the git state (INV16 / INV17).
15
+
16
+ ## Execution Steps
17
+
18
+ ### Step 1: Range interpretation (fix the range)
19
+ - When the user runs `/intent-release-note`, first interpret the range argument per `rules/source-scope.md`.
20
+ - The default (no range given) is **latest tag..HEAD** (find the latest tag with `git describe --tags --abbrev=0` and use `<tag>..HEAD`). If `<from>..<to>` is given, use it.
21
+ - If there is no latest tag and the default cannot be resolved, **fall back** to the full history and note this in the output (Fail-Soft). An invalid range argument is an explicit error and does not generate a release note.
22
+ - Once the range is fixed, proceed to Step 2 (the range is uniquely determined by argument + default + fallback, not dependent on interactive completion).
23
+
24
+ ### Step 2: Read-only reading of the git log
25
+ - Per the **read-only allowlist** in `rules/source-scope.md`, read the commits of the fixed range read-only.
26
+ - Only read-only `git log` / `git tag` (listing) / `git describe` / `git rev-list` / `git rev-parse` / `git show` may be used.
27
+ - **Never invoke writing operations** (`git commit` / `git tag <name>` creation / `git push` / `git checkout` / `git switch` / `git reset` / `git restore` / `git merge` / `git rebase` / `git cherry-pick`, etc.) (INV16).
28
+ - Read each commit's hash, subject, body, author, and date as material.
29
+
30
+ ### Step 3: Text-matching commits against intent (propose candidates, do not assert)
31
+ - **Text-match** each commit against intent. The priority of matching material is (1) packet name → (2) parent intent → (3) deltas → (4) milestones. Match the contents under `.intent/` (`packets/` / `intent-tree.md` / `intent-compass.md` / `deltas.md` / `milestones.md`) and the commit messages, **within what is mechanically observable from files**.
32
+ - For a commit that text-matches any of them, attach the "why (for which intent it changed)." When multiple apply, take the highest-priority material.
33
+ - Matching follows the same temperature as the existing `intent-status`: **carry no machine scoring, threshold, or new discriminator** (AD23), and when confidence is low, **propose as a candidate rather than asserting** (unmatched is the norm; tolerate false detections).
34
+ - Commits that match none are **kept as thin changelog lines** (do not silently drop them; AD22).
35
+
36
+ ### Step 4: Format mapping (state the format if default)
37
+ - Fix the format per `rules/format-select.md`. With argument `changelog` / `github-releases`, or the default (changelog) if unspecified, and **state in the output which format was generated**.
38
+ - Hand the chosen format's output-structure rule (`rules/format-changelog.md` or `rules/format-github-releases.md`) the matched material from Step 3 (matched commits with their "why" + unmatched commits as thin lines) and assemble it.
39
+ - Do not hardcode the target format into the body (delegate to rules; AD24). The output structure itself is the format-* rule's responsibility; this SKILL owns git reading, matching, and delegation.
40
+
41
+ ### Step 5: Derived Write (full replacement into `.intent/release-note/`)
42
+ - Write the assembled release note to `.intent/release-note/release-note.md` by **full replacement** (derived, regenerable).
43
+ - Confine the write destination to under `.intent/release-note/`. Change neither the canonical intent (intent-tree / compass / packets) nor the git state (INV16 / INV17).
44
+ - When the target range contains no commits, state in the output that it is empty and change neither the canonical files nor git.
45
+
46
+ ## Output Description
47
+ - At the top of the output, show the target range (with a note if it fell back) and the format (stating it if the default was used).
48
+ - The body follows the chosen format's output structure (changelog-style = per-kind categories / github-releases-style = narrative + change list) (the layout of `rules/format-*.md`).
49
+ - List intent-matched commits with a "why" and unmatched commits as thin lines, so that the gap is readable.
50
+
51
+ ## Safety & Fallback
52
+ - **Read-only ownership boundary**: git is only read (only the Step 2 allowlist). Do not commit / create tags / push / change the working tree or refs (INV16).
53
+ - **Derived-output ownership boundary**: writes go only under `.intent/release-note/`. Do not rewrite the canonical intent (INV17).
54
+ - **Matching ownership boundary**: text-matching only (no machine scoring; AD23). Do not drop the gap (keep thin lines; AD22).
55
+ - **Format ownership boundary**: delegate the output structure to `rules/format-*.md` and do not hardcode it into the body (AD24). Do not change the format-* output structure (fixed at the seam).
56
+ - **Error cases**: no tag → fallback + note. invalid range → explicit error, do not generate. empty range → state empty. In all cases, change neither git nor the canonical files.
@@ -0,0 +1,40 @@
1
+ # Format Mapping: Changelog-Style (Keep a Changelog layout)
2
+
3
+ The output structure used by the `intent-release-note` skill (added in a later packet) to assemble the git commit history and the intent-matching result into a **Keep a Changelog-style release note**. SKILL.md owns the procedure (reading git, matching intent); "which material goes under which heading and in what order" is defined by this rule.
4
+
5
+ ## Responsibility boundary (a structure definition, not reading or matching)
6
+
7
+ - This rule is a **format mapping (output structure definition)**. It only defines the section layout, categorization, and ordering of the release note.
8
+ - Procedures such as reading the git log, matching commits to intent (packet name / parent intent / deltas), and interpreting the range are **SKILL.md's responsibility**; this rule does not perform them (in this seam SKILL.md is not yet present; this rule is placed ahead as a container).
9
+ - The **judgment** of attaching a "why (for which intent)" to matched commits and leaving unmatched commits as thin lines (surfacing the gap) belongs to SKILL.md. This rule only defines **which structure that result is poured into**.
10
+ - That the output goes to a derived directory (`.intent/release-note/`, git-untracked, read-only) and never rewrites the canonical intent or git is the skill's invariant; this rule provides only the structure under that premise.
11
+
12
+ ## Basic stance (classify changes and stack them chronologically)
13
+
14
+ The changelog style is a layout that **sorts the changes of one release (or one range) by category**. The reader is assumed to want to quickly grasp "what was added, changed, fixed, and removed in this version." Therefore:
15
+
16
+ - Under a version (or range) heading, distribute changes into category buckets by kind.
17
+ - Each entry is by default a concise single line; for entries tied to intent, append a brief "why" (the wording is prepared by SKILL.md; this rule places it under the relevant Added/Changed category).
18
+ - Do not invent changes absent from the material for the sake of layout (leave unmatched commits as thin lines).
19
+
20
+ ## Structure (top to bottom)
21
+
22
+ | Order | Section | What goes here |
23
+ |---|---|---|
24
+ | 1 | Heading (version / range and date) | Identifies the target range (default: previous tag..HEAD) and the generation date |
25
+ | 2 | Added | Commits that constitute new features / additions |
26
+ | 3 | Changed | Commits that change or improve existing behavior |
27
+ | 4 | Fixed | Commits that are bug fixes |
28
+ | 5 | Removed | Commits that remove a feature or element |
29
+ | 6 | Other (uncategorized / unmatched changes) | Commits that cannot be categorized above or are not tied to intent, kept as thin lines (surfacing the gap) |
30
+
31
+ - Categories (2–5) follow the standard Keep a Changelog categories. Omit any category heading that has no matching commits (do not create empty headings).
32
+ - Section 6 is the bucket that keeps unmatched / uncategorizable commits as a thin single line **without silently dropping them**. Omit it if there is no material.
33
+ - The "why" note on each entry is the matching result SKILL.md attached; place it as-is within the relevant category (this rule does not re-match).
34
+
35
+ ## Invariants
36
+
37
+ - Do not re-read or modify git or the canonical intent (reading and matching belong to SKILL.md; writes belong to SKILL.md's Write into the derived directory).
38
+ - Do not break the structure that classifies changes into per-kind categories (the core of the changelog-style layout).
39
+ - Place both the "why" of intent-matched commits and the thin lines of unmatched commits without dropping either (do not erase the gap).
40
+ - Do not add changes or background absent from the material for the sake of layout.