artifact-chain-assistant 0.8.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (328) hide show
  1. package/.agents/plugins/marketplace.json +20 -0
  2. package/.claude-plugin/marketplace.json +20 -0
  3. package/.claude-plugin/plugin.json +11 -0
  4. package/.codex-plugin/plugin.json +27 -0
  5. package/.github/ISSUE_TEMPLATE/bug_report.yml +26 -0
  6. package/.github/ISSUE_TEMPLATE/feature_request.yml +19 -0
  7. package/.github/pull_request_template.md +14 -0
  8. package/.github/workflows/ci.yml +23 -0
  9. package/CHANGELOG.md +196 -0
  10. package/CODE_OF_CONDUCT.md +11 -0
  11. package/CONTRIBUTING.md +24 -0
  12. package/EXTENDED-ARTIFACT-CATALOG.md +312 -0
  13. package/EXTENDED-ARTIFACT-CATALOG.zh-CN.md +289 -0
  14. package/INSTALL.md +1340 -0
  15. package/LICENSE +186 -0
  16. package/NOTICE +18 -0
  17. package/README.md +426 -0
  18. package/README.zh-CN.md +409 -0
  19. package/SECURITY.md +19 -0
  20. package/adapters/claude/.claude-plugin/plugin.json +11 -0
  21. package/adapters/claude/EXTENDED-ARTIFACT-CATALOG.md +312 -0
  22. package/adapters/claude/EXTENDED-ARTIFACT-CATALOG.zh-CN.md +289 -0
  23. package/adapters/claude/INSTALL.md +1340 -0
  24. package/adapters/claude/agent-methods/catalog.yaml +260 -0
  25. package/adapters/claude/bin/version-lock-audit.sh +21 -0
  26. package/adapters/claude/bin/version-lock-refresh.sh +21 -0
  27. package/adapters/claude/commands/version-lock-audit.md +9 -0
  28. package/adapters/claude/commands/version-lock-refresh.md +9 -0
  29. package/adapters/claude/compatibility.json +9 -0
  30. package/adapters/claude/hooks/hooks.json +16 -0
  31. package/adapters/claude/hooks/version-lock-stop.mjs +77 -0
  32. package/adapters/claude/schemas/artifact-workflow-profile.schema.json +72 -0
  33. package/adapters/claude/scripts/batch-merge.mjs +276 -0
  34. package/adapters/claude/scripts/batch-split.mjs +184 -0
  35. package/adapters/claude/scripts/check-workflow-profile.mjs +64 -0
  36. package/adapters/claude/scripts/doctor.mjs +44 -0
  37. package/adapters/claude/scripts/lib/artifact-graph-runtime.mjs +189 -0
  38. package/adapters/claude/scripts/lib/compatibility-policy.mjs +435 -0
  39. package/adapters/claude/scripts/lib/inline-yaml-parser.mjs +216 -0
  40. package/adapters/claude/scripts/lib/method-registry-version.mjs +7 -0
  41. package/adapters/claude/scripts/lib/workflow-profile.mjs +645 -0
  42. package/adapters/claude/scripts/run-artifact-workflow.mjs +366 -0
  43. package/adapters/claude/skills/artifact-audit/SKILL.md +80 -0
  44. package/adapters/claude/skills/artifact-batch/SKILL.md +115 -0
  45. package/adapters/claude/skills/artifact-chain-bootstrap/SKILL.md +343 -0
  46. package/adapters/claude/skills/artifact-chain-maintainer/SKILL.md +167 -0
  47. package/adapters/claude/skills/artifact-generate/SKILL.md +89 -0
  48. package/adapters/claude/skills/artifact-repair/SKILL.md +124 -0
  49. package/adapters/claude/skills/artifact-review/SKILL.md +122 -0
  50. package/adapters/claude/skills/artifact-workflow-worker/SKILL.md +90 -0
  51. package/adapters/claude/skills/prd-feature/SKILL.md +68 -0
  52. package/adapters/claude/skills/prd-feature/author/SKILL.md +92 -0
  53. package/adapters/claude/skills/prd-feature/references/compose.md +43 -0
  54. package/adapters/claude/skills/prd-feature/references/inspect.md +94 -0
  55. package/adapters/claude/skills/prd-feature/references/validate.md +65 -0
  56. package/adapters/claude/skills/prd-feature/repair/SKILL.md +135 -0
  57. package/adapters/claude/skills/prd-feature/review/SKILL.md +134 -0
  58. package/adapters/claude/skills/scenario-script/SKILL.md +76 -0
  59. package/adapters/claude/skills/scenario-script/author/SKILL.md +111 -0
  60. package/adapters/claude/skills/scenario-script/references/compose.md +43 -0
  61. package/adapters/claude/skills/scenario-script/references/inspect.md +105 -0
  62. package/adapters/claude/skills/scenario-script/references/validate.md +72 -0
  63. package/adapters/claude/skills/scenario-script/repair/SKILL.md +135 -0
  64. package/adapters/claude/skills/scenario-script/review/SKILL.md +137 -0
  65. package/adapters/claude/skills/where-am-i/SKILL.md +233 -0
  66. package/adapters/claude/templates/README.md +159 -0
  67. package/adapters/claude/templates/core/decision/review-checklist.md +35 -0
  68. package/adapters/claude/templates/core/decision/starter.md +66 -0
  69. package/adapters/claude/templates/core/design/review-checklist.md +41 -0
  70. package/adapters/claude/templates/core/design/starter.md +84 -0
  71. package/adapters/claude/templates/core/e2e_test/review-checklist.md +43 -0
  72. package/adapters/claude/templates/core/e2e_test/starter.md +70 -0
  73. package/adapters/claude/templates/core/feature/review-checklist.md +29 -0
  74. package/adapters/claude/templates/core/feature/starter.md +43 -0
  75. package/adapters/claude/templates/core/scenario/review-checklist.md +29 -0
  76. package/adapters/claude/templates/core/scenario/starter.md +57 -0
  77. package/adapters/claude/templates/core/test/review-checklist.md +37 -0
  78. package/adapters/claude/templates/core/test/starter.md +70 -0
  79. package/adapters/claude/templates/extended/ADOPTION-GUIDE.md +263 -0
  80. package/adapters/claude/templates/extended/README.md +261 -0
  81. package/adapters/claude/templates/extended/agent/agent_skill/review-checklist.md +51 -0
  82. package/adapters/claude/templates/extended/agent/agent_skill/starter.md +133 -0
  83. package/adapters/claude/templates/extended/agent/hook_policy/review-checklist.md +58 -0
  84. package/adapters/claude/templates/extended/agent/hook_policy/starter.md +134 -0
  85. package/adapters/claude/templates/extended/agent/prompt_packet/review-checklist.md +54 -0
  86. package/adapters/claude/templates/extended/agent/prompt_packet/starter.md +106 -0
  87. package/adapters/claude/templates/extended/contracts/api_contract/review-checklist.md +43 -0
  88. package/adapters/claude/templates/extended/contracts/api_contract/starter.md +92 -0
  89. package/adapters/claude/templates/extended/contracts/batch_job_contract/review-checklist.md +82 -0
  90. package/adapters/claude/templates/extended/contracts/batch_job_contract/starter.md +158 -0
  91. package/adapters/claude/templates/extended/contracts/cli_contract/review-checklist.md +43 -0
  92. package/adapters/claude/templates/extended/contracts/cli_contract/starter.md +93 -0
  93. package/adapters/claude/templates/extended/contracts/data_contract/review-checklist.md +45 -0
  94. package/adapters/claude/templates/extended/contracts/data_contract/starter.md +88 -0
  95. package/adapters/claude/templates/extended/contracts/integration_contract/review-checklist.md +77 -0
  96. package/adapters/claude/templates/extended/contracts/integration_contract/starter.md +158 -0
  97. package/adapters/claude/templates/extended/contracts/ipc_contract/review-checklist.md +78 -0
  98. package/adapters/claude/templates/extended/contracts/ipc_contract/starter.md +214 -0
  99. package/adapters/claude/templates/extended/contracts/report_contract/review-checklist.md +61 -0
  100. package/adapters/claude/templates/extended/contracts/report_contract/starter.md +97 -0
  101. package/adapters/claude/templates/extended/contracts/ui_contract/review-checklist.md +70 -0
  102. package/adapters/claude/templates/extended/contracts/ui_contract/starter.md +150 -0
  103. package/adapters/claude/templates/extended/domain/database_migration/review-checklist.md +51 -0
  104. package/adapters/claude/templates/extended/domain/database_migration/starter.md +115 -0
  105. package/adapters/claude/templates/extended/domain/domain_model/review-checklist.md +43 -0
  106. package/adapters/claude/templates/extended/domain/domain_model/starter.md +83 -0
  107. package/adapters/claude/templates/extended/governance/oss_compliance/review-checklist.md +51 -0
  108. package/adapters/claude/templates/extended/governance/oss_compliance/starter.md +84 -0
  109. package/adapters/claude/templates/extended/governance/publish_skill/review-checklist.md +58 -0
  110. package/adapters/claude/templates/extended/governance/publish_skill/starter.md +172 -0
  111. package/adapters/claude/templates/extended/governance/release_policy/review-checklist.md +57 -0
  112. package/adapters/claude/templates/extended/governance/release_policy/starter.md +131 -0
  113. package/adapters/claude/templates/extended/ops/deployment_manifest/review-checklist.md +51 -0
  114. package/adapters/claude/templates/extended/ops/deployment_manifest/starter.md +117 -0
  115. package/adapters/claude/templates/extended/ops/migration_plan/review-checklist.md +63 -0
  116. package/adapters/claude/templates/extended/ops/migration_plan/starter.md +117 -0
  117. package/adapters/claude/templates/extended/ops/performance_budget/review-checklist.md +50 -0
  118. package/adapters/claude/templates/extended/ops/performance_budget/starter.md +117 -0
  119. package/adapters/claude/templates/extended/ops/runbook/review-checklist.md +51 -0
  120. package/adapters/claude/templates/extended/ops/runbook/starter.md +101 -0
  121. package/adapters/claude/templates/extended/ops/security_review/review-checklist.md +56 -0
  122. package/adapters/claude/templates/extended/ops/security_review/starter.md +125 -0
  123. package/adapters/codex/.codex-plugin/plugin.json +27 -0
  124. package/adapters/codex/EXTENDED-ARTIFACT-CATALOG.md +312 -0
  125. package/adapters/codex/EXTENDED-ARTIFACT-CATALOG.zh-CN.md +289 -0
  126. package/adapters/codex/INSTALL.md +1340 -0
  127. package/adapters/codex/agent-methods/catalog.yaml +260 -0
  128. package/adapters/codex/compatibility.json +9 -0
  129. package/adapters/codex/schemas/artifact-workflow-profile.schema.json +72 -0
  130. package/adapters/codex/scripts/batch-merge.mjs +276 -0
  131. package/adapters/codex/scripts/batch-split.mjs +184 -0
  132. package/adapters/codex/scripts/check-workflow-profile.mjs +64 -0
  133. package/adapters/codex/scripts/doctor.mjs +44 -0
  134. package/adapters/codex/scripts/lib/artifact-graph-runtime.mjs +189 -0
  135. package/adapters/codex/scripts/lib/compatibility-policy.mjs +435 -0
  136. package/adapters/codex/scripts/lib/inline-yaml-parser.mjs +216 -0
  137. package/adapters/codex/scripts/lib/method-registry-version.mjs +7 -0
  138. package/adapters/codex/scripts/lib/workflow-profile.mjs +645 -0
  139. package/adapters/codex/scripts/run-artifact-workflow.mjs +366 -0
  140. package/adapters/codex/skills/artifact-audit/SKILL.md +80 -0
  141. package/adapters/codex/skills/artifact-batch/SKILL.md +115 -0
  142. package/adapters/codex/skills/artifact-chain-bootstrap/SKILL.md +343 -0
  143. package/adapters/codex/skills/artifact-chain-maintainer/SKILL.md +167 -0
  144. package/adapters/codex/skills/artifact-generate/SKILL.md +89 -0
  145. package/adapters/codex/skills/artifact-repair/SKILL.md +124 -0
  146. package/adapters/codex/skills/artifact-review/SKILL.md +122 -0
  147. package/adapters/codex/skills/artifact-workflow-worker/SKILL.md +90 -0
  148. package/adapters/codex/skills/prd-feature/SKILL.md +68 -0
  149. package/adapters/codex/skills/prd-feature/author/SKILL.md +92 -0
  150. package/adapters/codex/skills/prd-feature/references/compose.md +43 -0
  151. package/adapters/codex/skills/prd-feature/references/inspect.md +94 -0
  152. package/adapters/codex/skills/prd-feature/references/validate.md +65 -0
  153. package/adapters/codex/skills/prd-feature/repair/SKILL.md +135 -0
  154. package/adapters/codex/skills/prd-feature/review/SKILL.md +134 -0
  155. package/adapters/codex/skills/scenario-script/SKILL.md +76 -0
  156. package/adapters/codex/skills/scenario-script/author/SKILL.md +111 -0
  157. package/adapters/codex/skills/scenario-script/references/compose.md +43 -0
  158. package/adapters/codex/skills/scenario-script/references/inspect.md +105 -0
  159. package/adapters/codex/skills/scenario-script/references/validate.md +72 -0
  160. package/adapters/codex/skills/scenario-script/repair/SKILL.md +135 -0
  161. package/adapters/codex/skills/scenario-script/review/SKILL.md +137 -0
  162. package/adapters/codex/skills/where-am-i/SKILL.md +233 -0
  163. package/adapters/codex/templates/README.md +159 -0
  164. package/adapters/codex/templates/core/decision/review-checklist.md +35 -0
  165. package/adapters/codex/templates/core/decision/starter.md +66 -0
  166. package/adapters/codex/templates/core/design/review-checklist.md +41 -0
  167. package/adapters/codex/templates/core/design/starter.md +84 -0
  168. package/adapters/codex/templates/core/e2e_test/review-checklist.md +43 -0
  169. package/adapters/codex/templates/core/e2e_test/starter.md +70 -0
  170. package/adapters/codex/templates/core/feature/review-checklist.md +29 -0
  171. package/adapters/codex/templates/core/feature/starter.md +43 -0
  172. package/adapters/codex/templates/core/scenario/review-checklist.md +29 -0
  173. package/adapters/codex/templates/core/scenario/starter.md +57 -0
  174. package/adapters/codex/templates/core/test/review-checklist.md +37 -0
  175. package/adapters/codex/templates/core/test/starter.md +70 -0
  176. package/adapters/codex/templates/extended/ADOPTION-GUIDE.md +263 -0
  177. package/adapters/codex/templates/extended/README.md +261 -0
  178. package/adapters/codex/templates/extended/agent/agent_skill/review-checklist.md +51 -0
  179. package/adapters/codex/templates/extended/agent/agent_skill/starter.md +133 -0
  180. package/adapters/codex/templates/extended/agent/hook_policy/review-checklist.md +58 -0
  181. package/adapters/codex/templates/extended/agent/hook_policy/starter.md +134 -0
  182. package/adapters/codex/templates/extended/agent/prompt_packet/review-checklist.md +54 -0
  183. package/adapters/codex/templates/extended/agent/prompt_packet/starter.md +106 -0
  184. package/adapters/codex/templates/extended/contracts/api_contract/review-checklist.md +43 -0
  185. package/adapters/codex/templates/extended/contracts/api_contract/starter.md +92 -0
  186. package/adapters/codex/templates/extended/contracts/batch_job_contract/review-checklist.md +82 -0
  187. package/adapters/codex/templates/extended/contracts/batch_job_contract/starter.md +158 -0
  188. package/adapters/codex/templates/extended/contracts/cli_contract/review-checklist.md +43 -0
  189. package/adapters/codex/templates/extended/contracts/cli_contract/starter.md +93 -0
  190. package/adapters/codex/templates/extended/contracts/data_contract/review-checklist.md +45 -0
  191. package/adapters/codex/templates/extended/contracts/data_contract/starter.md +88 -0
  192. package/adapters/codex/templates/extended/contracts/integration_contract/review-checklist.md +77 -0
  193. package/adapters/codex/templates/extended/contracts/integration_contract/starter.md +158 -0
  194. package/adapters/codex/templates/extended/contracts/ipc_contract/review-checklist.md +78 -0
  195. package/adapters/codex/templates/extended/contracts/ipc_contract/starter.md +214 -0
  196. package/adapters/codex/templates/extended/contracts/report_contract/review-checklist.md +61 -0
  197. package/adapters/codex/templates/extended/contracts/report_contract/starter.md +97 -0
  198. package/adapters/codex/templates/extended/contracts/ui_contract/review-checklist.md +70 -0
  199. package/adapters/codex/templates/extended/contracts/ui_contract/starter.md +150 -0
  200. package/adapters/codex/templates/extended/domain/database_migration/review-checklist.md +51 -0
  201. package/adapters/codex/templates/extended/domain/database_migration/starter.md +115 -0
  202. package/adapters/codex/templates/extended/domain/domain_model/review-checklist.md +43 -0
  203. package/adapters/codex/templates/extended/domain/domain_model/starter.md +83 -0
  204. package/adapters/codex/templates/extended/governance/oss_compliance/review-checklist.md +51 -0
  205. package/adapters/codex/templates/extended/governance/oss_compliance/starter.md +84 -0
  206. package/adapters/codex/templates/extended/governance/publish_skill/review-checklist.md +58 -0
  207. package/adapters/codex/templates/extended/governance/publish_skill/starter.md +172 -0
  208. package/adapters/codex/templates/extended/governance/release_policy/review-checklist.md +57 -0
  209. package/adapters/codex/templates/extended/governance/release_policy/starter.md +131 -0
  210. package/adapters/codex/templates/extended/ops/deployment_manifest/review-checklist.md +51 -0
  211. package/adapters/codex/templates/extended/ops/deployment_manifest/starter.md +117 -0
  212. package/adapters/codex/templates/extended/ops/migration_plan/review-checklist.md +63 -0
  213. package/adapters/codex/templates/extended/ops/migration_plan/starter.md +117 -0
  214. package/adapters/codex/templates/extended/ops/performance_budget/review-checklist.md +50 -0
  215. package/adapters/codex/templates/extended/ops/performance_budget/starter.md +117 -0
  216. package/adapters/codex/templates/extended/ops/runbook/review-checklist.md +51 -0
  217. package/adapters/codex/templates/extended/ops/runbook/starter.md +101 -0
  218. package/adapters/codex/templates/extended/ops/security_review/review-checklist.md +56 -0
  219. package/adapters/codex/templates/extended/ops/security_review/starter.md +125 -0
  220. package/agent-methods/catalog.yaml +260 -0
  221. package/compatibility.json +9 -0
  222. package/package.json +85 -0
  223. package/runtime/claude/version-lock-stop.mjs +77 -0
  224. package/schemas/artifact-workflow-profile.schema.json +72 -0
  225. package/scripts/batch-merge.mjs +276 -0
  226. package/scripts/batch-split.mjs +184 -0
  227. package/scripts/build-adapters.mjs +195 -0
  228. package/scripts/build-runtime-bundles.mjs +134 -0
  229. package/scripts/check-compatibility.mjs +19 -0
  230. package/scripts/check-method-registry.mjs +461 -0
  231. package/scripts/check-templates.mjs +348 -0
  232. package/scripts/check-workflow-profile.mjs +64 -0
  233. package/scripts/doctor.mjs +44 -0
  234. package/scripts/install-git-hooks.mjs +21 -0
  235. package/scripts/lib/artifact-graph-runtime.mjs +189 -0
  236. package/scripts/lib/compatibility-policy.mjs +435 -0
  237. package/scripts/lib/inline-yaml-parser.mjs +216 -0
  238. package/scripts/lib/method-registry-version.mjs +7 -0
  239. package/scripts/lib/workflow-profile.mjs +645 -0
  240. package/scripts/run-artifact-workflow.mjs +366 -0
  241. package/scripts/sync-skills.mjs +149 -0
  242. package/skills-src/artifact-audit/SKILL.md +80 -0
  243. package/skills-src/artifact-batch/SKILL.md +115 -0
  244. package/skills-src/artifact-chain-bootstrap/SKILL.md +343 -0
  245. package/skills-src/artifact-chain-maintainer/SKILL.md +167 -0
  246. package/skills-src/artifact-generate/SKILL.md +89 -0
  247. package/skills-src/artifact-repair/SKILL.md +124 -0
  248. package/skills-src/artifact-review/SKILL.md +122 -0
  249. package/skills-src/artifact-workflow-worker/SKILL.md +90 -0
  250. package/skills-src/prd-feature/SKILL.md +68 -0
  251. package/skills-src/prd-feature/author/SKILL.md +92 -0
  252. package/skills-src/prd-feature/references/compose.md +43 -0
  253. package/skills-src/prd-feature/references/inspect.md +94 -0
  254. package/skills-src/prd-feature/references/validate.md +65 -0
  255. package/skills-src/prd-feature/repair/SKILL.md +135 -0
  256. package/skills-src/prd-feature/review/SKILL.md +134 -0
  257. package/skills-src/scenario-script/SKILL.md +76 -0
  258. package/skills-src/scenario-script/author/SKILL.md +111 -0
  259. package/skills-src/scenario-script/references/compose.md +43 -0
  260. package/skills-src/scenario-script/references/inspect.md +105 -0
  261. package/skills-src/scenario-script/references/validate.md +72 -0
  262. package/skills-src/scenario-script/repair/SKILL.md +135 -0
  263. package/skills-src/scenario-script/review/SKILL.md +137 -0
  264. package/skills-src/where-am-i/SKILL.md.tpl +233 -0
  265. package/templates/README.md +159 -0
  266. package/templates/claude/marketplace.json.tpl +20 -0
  267. package/templates/claude/plugin.json.tpl +11 -0
  268. package/templates/claude/settings.json.tpl +16 -0
  269. package/templates/codex/marketplace.json.tpl +20 -0
  270. package/templates/codex/plugin.json.tpl +27 -0
  271. package/templates/core/decision/review-checklist.md +35 -0
  272. package/templates/core/decision/starter.md +66 -0
  273. package/templates/core/design/review-checklist.md +41 -0
  274. package/templates/core/design/starter.md +84 -0
  275. package/templates/core/e2e_test/review-checklist.md +43 -0
  276. package/templates/core/e2e_test/starter.md +70 -0
  277. package/templates/core/feature/review-checklist.md +29 -0
  278. package/templates/core/feature/starter.md +43 -0
  279. package/templates/core/scenario/review-checklist.md +29 -0
  280. package/templates/core/scenario/starter.md +57 -0
  281. package/templates/core/test/review-checklist.md +37 -0
  282. package/templates/core/test/starter.md +70 -0
  283. package/templates/extended/ADOPTION-GUIDE.md +263 -0
  284. package/templates/extended/README.md +261 -0
  285. package/templates/extended/agent/agent_skill/review-checklist.md +51 -0
  286. package/templates/extended/agent/agent_skill/starter.md +133 -0
  287. package/templates/extended/agent/hook_policy/review-checklist.md +58 -0
  288. package/templates/extended/agent/hook_policy/starter.md +134 -0
  289. package/templates/extended/agent/prompt_packet/review-checklist.md +54 -0
  290. package/templates/extended/agent/prompt_packet/starter.md +106 -0
  291. package/templates/extended/contracts/api_contract/review-checklist.md +43 -0
  292. package/templates/extended/contracts/api_contract/starter.md +92 -0
  293. package/templates/extended/contracts/batch_job_contract/review-checklist.md +82 -0
  294. package/templates/extended/contracts/batch_job_contract/starter.md +158 -0
  295. package/templates/extended/contracts/cli_contract/review-checklist.md +43 -0
  296. package/templates/extended/contracts/cli_contract/starter.md +93 -0
  297. package/templates/extended/contracts/data_contract/review-checklist.md +45 -0
  298. package/templates/extended/contracts/data_contract/starter.md +88 -0
  299. package/templates/extended/contracts/integration_contract/review-checklist.md +77 -0
  300. package/templates/extended/contracts/integration_contract/starter.md +158 -0
  301. package/templates/extended/contracts/ipc_contract/review-checklist.md +78 -0
  302. package/templates/extended/contracts/ipc_contract/starter.md +214 -0
  303. package/templates/extended/contracts/report_contract/review-checklist.md +61 -0
  304. package/templates/extended/contracts/report_contract/starter.md +97 -0
  305. package/templates/extended/contracts/ui_contract/review-checklist.md +70 -0
  306. package/templates/extended/contracts/ui_contract/starter.md +150 -0
  307. package/templates/extended/domain/database_migration/review-checklist.md +51 -0
  308. package/templates/extended/domain/database_migration/starter.md +115 -0
  309. package/templates/extended/domain/domain_model/review-checklist.md +43 -0
  310. package/templates/extended/domain/domain_model/starter.md +83 -0
  311. package/templates/extended/governance/oss_compliance/review-checklist.md +51 -0
  312. package/templates/extended/governance/oss_compliance/starter.md +84 -0
  313. package/templates/extended/governance/publish_skill/review-checklist.md +58 -0
  314. package/templates/extended/governance/publish_skill/starter.md +172 -0
  315. package/templates/extended/governance/release_policy/review-checklist.md +57 -0
  316. package/templates/extended/governance/release_policy/starter.md +131 -0
  317. package/templates/extended/ops/deployment_manifest/review-checklist.md +51 -0
  318. package/templates/extended/ops/deployment_manifest/starter.md +117 -0
  319. package/templates/extended/ops/migration_plan/review-checklist.md +63 -0
  320. package/templates/extended/ops/migration_plan/starter.md +117 -0
  321. package/templates/extended/ops/performance_budget/review-checklist.md +50 -0
  322. package/templates/extended/ops/performance_budget/starter.md +117 -0
  323. package/templates/extended/ops/runbook/review-checklist.md +51 -0
  324. package/templates/extended/ops/runbook/starter.md +101 -0
  325. package/templates/extended/ops/security_review/review-checklist.md +56 -0
  326. package/templates/extended/ops/security_review/starter.md +125 -0
  327. package/templates/git-hooks/pre-commit.sh +43 -0
  328. package/templates/git-hooks/pre-push.sh +22 -0
@@ -0,0 +1,461 @@
1
+ #!/usr/bin/env node
2
+ // @feature ACA12 @scenario S-36,S-37,S-38,S-39
3
+ // @feature ACA17 @scenario S-55
4
+ // Deterministic test for agent-method-registry catalog integration.
5
+ // No network access, no reading agent-method-registry source paths.
6
+ import { execFileSync } from 'node:child_process';
7
+ import { existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
8
+ import { dirname, join } from 'node:path';
9
+ import { fileURLToPath } from 'node:url';
10
+ import { validateCatalogPackageVersion } from './lib/method-registry-version.mjs';
11
+
12
+ const root = dirname(dirname(fileURLToPath(import.meta.url)));
13
+ const catalogPath = join(root, 'agent-methods', 'catalog.yaml');
14
+ const codexCatalogPath = join(root, 'adapters', 'codex', 'agent-methods', 'catalog.yaml');
15
+ const claudeCatalogPath = join(root, 'adapters', 'claude', 'agent-methods', 'catalog.yaml');
16
+ const codexSkillsDir = join(root, 'adapters', 'codex', 'skills');
17
+ const claudeSkillsDir = join(root, 'adapters', 'claude', 'skills');
18
+
19
+ const REGISTRY_CLI = join(root, 'node_modules', '.bin', 'agent-method-registry');
20
+
21
+ if (!existsSync(REGISTRY_CLI)) {
22
+ console.log('agent-method-registry CLI not found; skipping method registry check (devDependency not installed).');
23
+ process.exit(0);
24
+ }
25
+
26
+ const tmpRoot = join(root, '.tmp');
27
+ mkdirSync(tmpRoot, { recursive: true });
28
+ const tmpDir = mkdtempSync(join(tmpRoot, `method-registry-test-${process.pid}-`));
29
+
30
+ const issues = [];
31
+
32
+ try {
33
+ const packageJson = JSON.parse(readFileSync(join(root, 'package.json'), 'utf8'));
34
+ const catalogText = readFileSync(catalogPath, 'utf8');
35
+ const catalogVersionMatches = [...catalogText.matchAll(/^\s*version:\s*["']?([^"'\s]+)["']?\s*$/gm)];
36
+ const catalogVersion = catalogVersionMatches.length === 1 ? catalogVersionMatches[0][1] : undefined;
37
+ issues.push(...validateCatalogPackageVersion({ catalog: { version: catalogVersion } }, packageJson));
38
+
39
+ function assert(condition, message) {
40
+ if (!condition) {
41
+ issues.push(message);
42
+ }
43
+ }
44
+
45
+ function runRegistry(args) {
46
+ try {
47
+ const stdout = execFileSync(REGISTRY_CLI, args, { encoding: 'utf-8', cwd: root });
48
+ return JSON.parse(stdout);
49
+ } catch (error) {
50
+ // CLI returns non-zero on failure; parse stdout for diagnostics
51
+ const stdout = error.stdout ?? '';
52
+ try {
53
+ return JSON.parse(stdout);
54
+ } catch {
55
+ issues.push(`Registry CLI error (exit ${error.status}): ${error.message}`);
56
+ return { ok: false, diagnostics: [{ message: error.message }] };
57
+ }
58
+ }
59
+ }
60
+
61
+ function runRegistryExpectFail(args) {
62
+ try {
63
+ const stdout = execFileSync(REGISTRY_CLI, args, { encoding: 'utf-8', cwd: root });
64
+ // Should have failed but didn't
65
+ const result = JSON.parse(stdout);
66
+ if (result.ok) {
67
+ return { failed: false, result };
68
+ }
69
+ return { failed: true, result };
70
+ } catch (error) {
71
+ const stdout = error.stdout ?? '';
72
+ try {
73
+ return { failed: true, result: JSON.parse(stdout) };
74
+ } catch {
75
+ return { failed: true, result: { ok: false } };
76
+ }
77
+ }
78
+ }
79
+
80
+ // ── 1. Schema validation ──
81
+ const validation = runRegistry(['validate', '--catalog', catalogPath]);
82
+ assert(validation.ok === true, 'catalog schema validation should pass');
83
+
84
+ // ── 1b. Adapter catalog consistency ──
85
+ const rootCatalogContent = readFileSync(catalogPath, 'utf-8');
86
+ assert(existsSync(codexCatalogPath), 'codex adapter should have agent-methods/catalog.yaml');
87
+ assert(existsSync(claudeCatalogPath), 'claude adapter should have agent-methods/catalog.yaml');
88
+ assert(
89
+ readFileSync(codexCatalogPath, 'utf-8') === rootCatalogContent,
90
+ 'codex adapter catalog should match root catalog',
91
+ );
92
+ assert(
93
+ readFileSync(claudeCatalogPath, 'utf-8') === rootCatalogContent,
94
+ 'claude adapter catalog should match root catalog',
95
+ );
96
+
97
+ // ── 1c. Validate adapter catalogs ──
98
+ const codexValidation = runRegistry(['validate', '--catalog', codexCatalogPath]);
99
+ assert(codexValidation.ok === true, 'codex adapter catalog schema validation should pass');
100
+ const claudeValidation = runRegistry(['validate', '--catalog', claudeCatalogPath]);
101
+ assert(claudeValidation.ok === true, 'claude adapter catalog schema validation should pass');
102
+
103
+ // ── 2. Build effective index from catalog only ──
104
+ const indexPath = join(tmpDir, 'effective-index.json');
105
+ const indexResult = runRegistry(['index', '--catalog', catalogPath, '--out', indexPath]);
106
+ assert(indexResult.ok === true, 'index build should succeed');
107
+ assert(existsSync(indexPath), 'effective-index.json should be created');
108
+
109
+ const index = JSON.parse(readFileSync(indexPath, 'utf-8'));
110
+
111
+ // ── 3. Exactly 14 entries ──
112
+ assert(index.entries.length === 14, `expected 14 entries, got ${index.entries.length}`);
113
+ for (const entry of index.entries) {
114
+ if (entry.ref === 'artifact-chain-help') {
115
+ assert(entry.kind === 'operation', `entry ${entry.ref} should be operation, got ${entry.kind}`);
116
+ } else {
117
+ assert(entry.kind === 'workflow', `entry ${entry.ref} should be workflow, got ${entry.kind}`);
118
+ }
119
+ }
120
+
121
+ // ── 4. Expected refs ──
122
+ const expectedRefs = [
123
+ 'artifact.prd-feature.default',
124
+ 'artifact.prd-feature.author',
125
+ 'artifact.prd-feature.review',
126
+ 'artifact.prd-feature.repair',
127
+ 'artifact.scenario-script.default',
128
+ 'artifact.scenario-script.author',
129
+ 'artifact.scenario-script.review',
130
+ 'artifact.scenario-script.repair',
131
+ 'artifact.review',
132
+ 'artifact.repair',
133
+ 'artifact.batch',
134
+ 'artifact.audit',
135
+ 'artifact.generate',
136
+ 'artifact-chain-help',
137
+ ];
138
+ const actualRefs = index.entries.map(e => e.ref).sort();
139
+ const sortedExpected = [...expectedRefs].sort();
140
+ assert(
141
+ JSON.stringify(actualRefs) === JSON.stringify(sortedExpected),
142
+ `ref mismatch: expected ${JSON.stringify(sortedExpected)}, got ${JSON.stringify(actualRefs)}`
143
+ );
144
+
145
+ // ── 4b. Verify artifact.generate exists and artifact-workflow-worker does NOT exist ──
146
+ const hasGenerate = index.entries.some(e => e.ref === 'artifact.generate');
147
+ assert(hasGenerate, 'artifact.generate entry should exist in catalog');
148
+ const hasWorkflowWorker = index.entries.some(e => e.ref === 'artifact-workflow-worker');
149
+ assert(!hasWorkflowWorker, 'artifact-workflow-worker should NOT exist in catalog');
150
+ for (const entry of index.entries) {
151
+ assert(
152
+ !entry.ref.includes('artifact-workflow-worker') && !entry.provider.skill.includes('artifact-workflow-worker'),
153
+ `entry ${entry.ref} must not expose artifact-workflow-worker through ref or provider.skill`,
154
+ );
155
+ }
156
+
157
+ // ── 5. No internal skills ──
158
+ const forbiddenPatterns = ['inspect', 'compose', 'validate'];
159
+ for (const entry of index.entries) {
160
+ for (const pattern of forbiddenPatterns) {
161
+ assert(
162
+ !entry.ref.includes(pattern) && !entry.provider.skill.includes(pattern),
163
+ `entry ${entry.ref} should not reference internal skill "${pattern}"`
164
+ );
165
+ }
166
+ }
167
+
168
+ // ── 6. Query: PRD domain/type/kind = 4 ──
169
+ const prdQuery = runRegistry([
170
+ 'query', '--index', indexPath,
171
+ '--domain', 'artifact',
172
+ '--artifact-type', 'prd-feature',
173
+ '--kind', 'workflow',
174
+ ]);
175
+ assert(prdQuery.ok === true, 'PRD query should succeed');
176
+ assert(
177
+ prdQuery.data?.entries?.length === 4,
178
+ `PRD query should return 4 results, got ${prdQuery.data?.entries?.length}`
179
+ );
180
+
181
+ // ── 7. Query: scenario domain/type/kind = 4 ──
182
+ const scenarioQuery = runRegistry([
183
+ 'query', '--index', indexPath,
184
+ '--domain', 'artifact',
185
+ '--artifact-type', 'scenario-script',
186
+ '--kind', 'workflow',
187
+ ]);
188
+ assert(scenarioQuery.ok === true, 'scenario query should succeed');
189
+ assert(
190
+ scenarioQuery.data?.entries?.length === 4,
191
+ `scenario query should return 4 results, got ${scenarioQuery.data?.entries?.length}`
192
+ );
193
+
194
+ // ── 7b. Query: generic review intent = 1 unique ──
195
+ const genericReviewQuery = runRegistry([
196
+ 'query', '--index', indexPath,
197
+ '--domain', 'artifact',
198
+ '--intent', 'review',
199
+ ]);
200
+ assert(genericReviewQuery.ok === true, 'generic review query should succeed');
201
+ // Should find at least the generic review entry
202
+ const hasGenericReview = genericReviewQuery.data?.entries?.some(e => e.ref === 'artifact.review');
203
+ assert(hasGenericReview, 'generic review query should include artifact.review');
204
+
205
+ // ── 7c. Query: generic audit intent = 1 unique ──
206
+ const genericAuditQuery = runRegistry([
207
+ 'query', '--index', indexPath,
208
+ '--domain', 'artifact',
209
+ '--intent', 'audit',
210
+ ]);
211
+ assert(genericAuditQuery.ok === true, 'generic audit query should succeed');
212
+ const hasGenericAudit = genericAuditQuery.data?.entries?.some(e => e.ref === 'artifact.audit');
213
+ assert(hasGenericAudit, 'generic audit query should include artifact.audit');
214
+
215
+ // ── 7d. Per generic artifact-type: each intent resolves to exactly one unique ref ──
216
+ const genericTypes = ['design-spec', 'link', 'e2e', 'domain', 'contract', 'blueprint', 'verification'];
217
+ const genericIntentToRef = {
218
+ review: 'artifact.review',
219
+ repair: 'artifact.repair',
220
+ batch: 'artifact.batch',
221
+ audit: 'artifact.audit',
222
+ health: 'artifact.audit',
223
+ generate: 'artifact.generate',
224
+ };
225
+
226
+ for (const artifactType of genericTypes) {
227
+ for (const [intent, expectedRef] of Object.entries(genericIntentToRef)) {
228
+ const query = runRegistry([
229
+ 'query', '--index', indexPath,
230
+ '--domain', 'artifact',
231
+ '--artifact-type', artifactType,
232
+ '--intent', intent,
233
+ ]);
234
+ assert(
235
+ query.ok === true,
236
+ `query ${artifactType}/${intent} should succeed`,
237
+ );
238
+ const entries = query.data?.entries ?? [];
239
+ assert(
240
+ entries.length === 1,
241
+ `query ${artifactType}/${intent} should return exactly 1 entry, got ${entries.length}`,
242
+ );
243
+ assert(
244
+ entries[0]?.ref === expectedRef,
245
+ `query ${artifactType}/${intent} should resolve to ${expectedRef}, got ${entries[0]?.ref}`,
246
+ );
247
+ }
248
+ }
249
+
250
+ // ── 8. Query: intent author for PRD = 1 unique ──
251
+ const authorQuery = runRegistry([
252
+ 'query', '--index', indexPath,
253
+ '--domain', 'artifact',
254
+ '--artifact-type', 'prd-feature',
255
+ '--intent', 'author',
256
+ ]);
257
+ assert(authorQuery.ok === true, 'PRD author query should succeed');
258
+ assert(
259
+ authorQuery.data?.entries?.length === 1 && authorQuery.data.entries[0].ref === 'artifact.prd-feature.author',
260
+ `PRD author query should return exactly artifact.prd-feature.author, got ${JSON.stringify(authorQuery.data?.entries?.map(e => e.ref))}`
261
+ );
262
+
263
+ // ── 9. Query: intent review for scenario = 1 unique ──
264
+ const reviewQuery = runRegistry([
265
+ 'query', '--index', indexPath,
266
+ '--domain', 'artifact',
267
+ '--artifact-type', 'scenario-script',
268
+ '--intent', 'review',
269
+ ]);
270
+ assert(reviewQuery.ok === true, 'scenario review query should succeed');
271
+ assert(
272
+ reviewQuery.data?.entries?.length === 1 && reviewQuery.data.entries[0].ref === 'artifact.scenario-script.review',
273
+ `scenario review query should return exactly artifact.scenario-script.review`
274
+ );
275
+
276
+ // ── 10. Resolve all 13 entries for Codex host (using adapter catalog) ──
277
+ const codexIndexPath = join(tmpDir, 'codex-effective-index.json');
278
+ const codexIndexResult = runRegistry(['index', '--catalog', codexCatalogPath, '--out', codexIndexPath]);
279
+ assert(codexIndexResult.ok === true, 'codex adapter index build should succeed');
280
+ for (const ref of expectedRefs) {
281
+ const result = runRegistry([
282
+ 'resolve', '--index', codexIndexPath,
283
+ '--ref', ref, '--host', 'codex',
284
+ '--plugin-root', codexSkillsDir,
285
+ ]);
286
+ assert(result.ok === true, `resolve ${ref} for codex from adapter catalog should succeed`);
287
+ assert(
288
+ result.data?.verification?.status === 'verified',
289
+ `resolve ${ref} for codex should be verified, got ${result.data?.verification?.status}`
290
+ );
291
+ }
292
+
293
+ // ── 11. Resolve all 13 entries for Claude host (using adapter catalog) ──
294
+ const claudeIndexPath = join(tmpDir, 'claude-effective-index.json');
295
+ const claudeIndexResult = runRegistry(['index', '--catalog', claudeCatalogPath, '--out', claudeIndexPath]);
296
+ assert(claudeIndexResult.ok === true, 'claude adapter index build should succeed');
297
+ for (const ref of expectedRefs) {
298
+ const result = runRegistry([
299
+ 'resolve', '--index', claudeIndexPath,
300
+ '--ref', ref, '--host', 'claude-code',
301
+ '--plugin-root', claudeSkillsDir,
302
+ ]);
303
+ assert(result.ok === true, `resolve ${ref} for claude-code from adapter catalog should succeed`);
304
+ assert(
305
+ result.data?.verification?.status === 'verified',
306
+ `resolve ${ref} for claude-code should be verified, got ${result.data?.verification?.status}`
307
+ );
308
+ }
309
+
310
+ // ── 12. Project overlay: override one ref ──
311
+ const projectYaml = `schemaVersion: 1
312
+ overrides:
313
+ artifact.prd-feature.default:
314
+ provider:
315
+ scope: project
316
+ skill: prd-feature
317
+ `;
318
+ const projectPath = join(tmpDir, 'project.yaml');
319
+ writeFileSync(projectPath, projectYaml);
320
+
321
+ const overlayIndexPath = join(tmpDir, 'overlay-index.json');
322
+ const overlayResult = runRegistry([
323
+ 'index',
324
+ '--catalog', catalogPath,
325
+ '--project', projectPath,
326
+ '--out', overlayIndexPath,
327
+ ]);
328
+ assert(overlayResult.ok === true, 'overlay index build should succeed');
329
+
330
+ const overlayIndex = JSON.parse(readFileSync(overlayIndexPath, 'utf-8'));
331
+ const overriddenEntry = overlayIndex.entries.find(e => e.ref === 'artifact.prd-feature.default');
332
+ assert(overriddenEntry != null, 'overridden entry should exist');
333
+ assert(
334
+ overriddenEntry.provider.scope === 'project',
335
+ `overridden entry should have project scope, got ${overriddenEntry.provider.scope}`
336
+ );
337
+ assert(
338
+ overriddenEntry.provenance?.overriddenBy != null,
339
+ 'overridden entry provenance should indicate override source'
340
+ );
341
+
342
+ // Resolve project override BEFORE SKILL.md exists — expect PROVIDER_NOT_FOUND
343
+ const projectResolve = runRegistry([
344
+ 'resolve', '--index', overlayIndexPath,
345
+ '--ref', 'artifact.prd-feature.default',
346
+ '--host', 'codex',
347
+ '--project-root', join(tmpDir, 'project-skills'),
348
+ ]);
349
+ assert(projectResolve.ok === false, 'project resolve before SKILL.md exists should fail (ok: false)');
350
+ const providerDiag = (projectResolve.diagnostics ?? []).find(d => d.code === 'PROVIDER_NOT_FOUND');
351
+ assert(providerDiag != null, `project resolve should report PROVIDER_NOT_FOUND, got codes: ${(projectResolve.diagnostics ?? []).map(d => d.code).join(', ')}`);
352
+
353
+ // Create the project skill for resolution
354
+ const projectSkillDir = join(tmpDir, 'project-skills', 'prd-feature');
355
+ mkdirSync(projectSkillDir, { recursive: true });
356
+ writeFileSync(join(projectSkillDir, 'SKILL.md'), '# Project PRD Feature\n');
357
+
358
+ const projectResolve2 = runRegistry([
359
+ 'resolve', '--index', overlayIndexPath,
360
+ '--ref', 'artifact.prd-feature.default',
361
+ '--host', 'codex',
362
+ '--project-root', join(tmpDir, 'project-skills'),
363
+ ]);
364
+ assert(projectResolve2.ok === true, 'project override resolve should succeed');
365
+ assert(
366
+ projectResolve2.data?.verification?.status === 'verified',
367
+ `project override resolve should be verified, got ${projectResolve2.data?.verification?.status}`
368
+ );
369
+
370
+ // ── 12b. Negative: resolve nonexistent ref — expect ENTRY_NOT_FOUND
371
+ const nonexistentResolve = runRegistry([
372
+ 'resolve', '--index', overlayIndexPath,
373
+ '--ref', 'artifact.nonexistent.missing',
374
+ '--host', 'codex',
375
+ '--plugin-root', codexSkillsDir,
376
+ ]);
377
+ assert(nonexistentResolve.ok === false, 'resolve for nonexistent ref should fail (ok: false)');
378
+ const entryDiag = (nonexistentResolve.diagnostics ?? []).find(d => d.code === 'ENTRY_NOT_FOUND');
379
+ assert(entryDiag != null, `resolve nonexistent ref should report ENTRY_NOT_FOUND, got codes: ${(nonexistentResolve.diagnostics ?? []).map(d => d.code).join(', ')}`);
380
+
381
+ // ── 13. Compact query: only ref, kind, summary ──
382
+ const compactQuery = runRegistry([
383
+ 'query', '--index', indexPath,
384
+ '--domain', 'artifact',
385
+ '--artifact-type', 'prd-feature',
386
+ '--kind', 'workflow',
387
+ '--format', 'compact',
388
+ ]);
389
+ if (compactQuery.ok && compactQuery.data?.entries) {
390
+ for (const entry of compactQuery.data.entries) {
391
+ const keys = Object.keys(entry);
392
+ assert(
393
+ keys.includes('ref') && keys.includes('kind') && keys.includes('summary'),
394
+ `compact entry should have ref/kind/summary, got keys: ${keys.join(',')}`
395
+ );
396
+ assert(
397
+ !keys.includes('match') && !keys.includes('accepts') && !keys.includes('produces'),
398
+ `compact entry should not include full metadata, got keys: ${keys.join(',')}`
399
+ );
400
+ }
401
+ }
402
+
403
+ // ── 14. Negative: missing schemaVersion ──
404
+ const badCatalog = join(tmpDir, 'bad-catalog.yaml');
405
+ writeFileSync(badCatalog, `catalog:\n id: test\n version: "1.0.0"\nentries: []\n`);
406
+ const badValidation = runRegistryExpectFail(['validate', '--catalog', badCatalog]);
407
+ assert(badValidation.failed === true, 'catalog without schemaVersion should fail validation');
408
+
409
+ // ── 15. Negative: duplicate ref ──
410
+ const dupCatalog = join(tmpDir, 'dup-catalog.yaml');
411
+ writeFileSync(dupCatalog, `schemaVersion: 1
412
+ catalog:
413
+ id: test
414
+ version: "1.0.0"
415
+ entries:
416
+ - ref: artifact.prd-feature.default
417
+ provider:
418
+ scope: plugin
419
+ plugin: test
420
+ skill: test
421
+ kind: workflow
422
+ summary: test entry
423
+ match:
424
+ domains: [artifact]
425
+ artifactTypes: [prd-feature]
426
+ intents: [route]
427
+ accepts: [input]
428
+ produces: [output]
429
+ sideEffects: [write-project-artifacts]
430
+ - ref: artifact.prd-feature.default
431
+ provider:
432
+ scope: plugin
433
+ plugin: test
434
+ skill: test2
435
+ kind: workflow
436
+ summary: duplicate entry
437
+ match:
438
+ domains: [artifact]
439
+ artifactTypes: [prd-feature]
440
+ intents: [route]
441
+ accepts: [input]
442
+ produces: [output]
443
+ sideEffects: [write-project-artifacts]
444
+ `);
445
+ const dupValidation = runRegistryExpectFail(['validate', '--catalog', dupCatalog]);
446
+ assert(dupValidation.failed === true, 'catalog with duplicate refs should fail validation');
447
+
448
+ } finally {
449
+ // Cleanup temp directory
450
+ rmSync(tmpDir, { recursive: true, force: true });
451
+ }
452
+
453
+ if (issues.length > 0) {
454
+ console.error(`Method registry check FAILED with ${issues.length} issue(s):`);
455
+ for (const issue of issues) {
456
+ console.error(` - ${issue}`);
457
+ }
458
+ process.exit(1);
459
+ } else {
460
+ console.log('Method registry check passed: 13 workflow entries, schema/query/resolve/overlay all verified.');
461
+ }