bigpowers 2.86.5 → 2.86.6

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 (406) hide show
  1. package/.agents/skills/commit-message/SKILL.md +1 -1
  2. package/.agents/skills/evolve-skill/SKILL.md +1 -1
  3. package/.agents/skills/write-document/SKILL.md +1 -1
  4. package/.cline/skills/align-grid/SKILL.md +110 -0
  5. package/.cline/skills/assess-impact/SKILL.md +91 -0
  6. package/.cline/skills/audit-code/SKILL.md +184 -0
  7. package/.cline/skills/audit-plan/SKILL.md +89 -0
  8. package/.cline/skills/build-epic/SKILL.md +105 -0
  9. package/.cline/skills/change-request/SKILL.md +121 -0
  10. package/.cline/skills/commit-message/SKILL.md +140 -0
  11. package/.cline/skills/compose-workflow/SKILL.md +82 -0
  12. package/.cline/skills/context7-mcp/SKILL.md +55 -0
  13. package/.cline/skills/craft-skill/SKILL.md +196 -0
  14. package/.cline/skills/deepen-architecture/SKILL.md +260 -0
  15. package/.cline/skills/define-language/SKILL.md +80 -0
  16. package/.cline/skills/define-success/SKILL.md +12 -0
  17. package/.cline/skills/delegate-task/SKILL.md +91 -0
  18. package/.cline/skills/deploy/SKILL.md +198 -0
  19. package/.cline/skills/design-interface/SKILL.md +97 -0
  20. package/.cline/skills/develop-tdd/SKILL.md +416 -0
  21. package/.cline/skills/diagnose-root/SKILL.md +24 -0
  22. package/.cline/skills/diagnose-stall/SKILL.md +54 -0
  23. package/.cline/skills/dispatch-agents/SKILL.md +118 -0
  24. package/.cline/skills/edit-document/SKILL.md +23 -0
  25. package/.cline/skills/elaborate-spec/SKILL.md +101 -0
  26. package/.cline/skills/enforce-first/SKILL.md +45 -0
  27. package/.cline/skills/evolve-skill/SKILL.md +55 -0
  28. package/.cline/skills/execute-plan/SKILL.md +61 -0
  29. package/.cline/skills/extract-design/SKILL.md +132 -0
  30. package/.cline/skills/find-way/SKILL.md +191 -0
  31. package/.cline/skills/fix-bug/SKILL.md +67 -0
  32. package/.cline/skills/gate-trace/SKILL.md +92 -0
  33. package/.cline/skills/generate-allure-report/SKILL.md +285 -0
  34. package/.cline/skills/grill-me/SKILL.md +108 -0
  35. package/.cline/skills/grill-with-docs/SKILL.md +53 -0
  36. package/.cline/skills/guard-git/SKILL.md +231 -0
  37. package/.cline/skills/harden-vps/SKILL.md +291 -0
  38. package/.cline/skills/hook-commits/SKILL.md +94 -0
  39. package/.cline/skills/inspect-quality/SKILL.md +106 -0
  40. package/.cline/skills/investigate-bug/SKILL.md +127 -0
  41. package/.cline/skills/kickoff-branch/SKILL.md +143 -0
  42. package/.cline/skills/maintain-wiki/SKILL.md +64 -0
  43. package/.cline/skills/map-codebase/SKILL.md +71 -0
  44. package/.cline/skills/migrate-spec/SKILL.md +862 -0
  45. package/.cline/skills/model-domain/SKILL.md +232 -0
  46. package/.cline/skills/orchestrate-project/SKILL.md +174 -0
  47. package/.cline/skills/organize-workspace/SKILL.md +164 -0
  48. package/.cline/skills/plan-refactor/SKILL.md +87 -0
  49. package/.cline/skills/plan-release/SKILL.md +145 -0
  50. package/.cline/skills/plan-tests/SKILL.md +75 -0
  51. package/.cline/skills/plan-work/SKILL.md +260 -0
  52. package/.cline/skills/publish-package/SKILL.md +328 -0
  53. package/.cline/skills/quick-fix/SKILL.md +114 -0
  54. package/.cline/skills/release-branch/SKILL.md +298 -0
  55. package/.cline/skills/request-review/SKILL.md +113 -0
  56. package/.cline/skills/research-first/SKILL.md +87 -0
  57. package/.cline/skills/reset-baseline/SKILL.md +21 -0
  58. package/.cline/skills/respond-review/SKILL.md +71 -0
  59. package/.cline/skills/run-benchmark/SKILL.md +85 -0
  60. package/.cline/skills/run-evals/SKILL.md +80 -0
  61. package/.cline/skills/run-planning/SKILL.md +101 -0
  62. package/.cline/skills/scope-work/SKILL.md +63 -0
  63. package/.cline/skills/search-skills/SKILL.md +73 -0
  64. package/.cline/skills/security-review/SKILL.md +384 -0
  65. package/.cline/skills/seed-conventions/SKILL.md +302 -0
  66. package/.cline/skills/session-state/SKILL.md +146 -0
  67. package/.cline/skills/setup-environment/SKILL.md +39 -0
  68. package/.cline/skills/simulate-agents/SKILL.md +26 -0
  69. package/.cline/skills/slice-tasks/SKILL.md +68 -0
  70. package/.cline/skills/smoke-test/SKILL.md +257 -0
  71. package/.cline/skills/spike-prototype/SKILL.md +95 -0
  72. package/.cline/skills/stocktake-skills/SKILL.md +74 -0
  73. package/.cline/skills/survey-context/SKILL.md +135 -0
  74. package/.cline/skills/terse-mode/SKILL.md +42 -0
  75. package/.cline/skills/trace-requirement/SKILL.md +69 -0
  76. package/.cline/skills/using-bigpowers/SKILL.md +111 -0
  77. package/.cline/skills/validate-contracts/SKILL.md +277 -0
  78. package/.cline/skills/validate-fix/SKILL.md +147 -0
  79. package/.cline/skills/verify-work/SKILL.md +191 -0
  80. package/.cline/skills/visual-dashboard/SKILL.md +50 -0
  81. package/.cline/skills/wire-ci/SKILL.md +374 -0
  82. package/.cline/skills/wire-observability/SKILL.md +97 -0
  83. package/.cline/skills/write-document/SKILL.md +255 -0
  84. package/.codebuddy/skills/commit-message/SKILL.md +1 -1
  85. package/.codebuddy/skills/evolve-skill/SKILL.md +1 -1
  86. package/.codebuddy/skills/write-document/SKILL.md +1 -1
  87. package/.codex/skills/commit-message/SKILL.md +1 -1
  88. package/.codex/skills/evolve-skill/SKILL.md +1 -1
  89. package/.codex/skills/write-document/SKILL.md +1 -1
  90. package/.copilot/skills/align-grid/SKILL.md +110 -0
  91. package/.copilot/skills/assess-impact/SKILL.md +91 -0
  92. package/.copilot/skills/audit-code/SKILL.md +184 -0
  93. package/.copilot/skills/audit-plan/SKILL.md +89 -0
  94. package/.copilot/skills/build-epic/SKILL.md +105 -0
  95. package/.copilot/skills/change-request/SKILL.md +121 -0
  96. package/.copilot/skills/commit-message/SKILL.md +140 -0
  97. package/.copilot/skills/compose-workflow/SKILL.md +82 -0
  98. package/.copilot/skills/context7-mcp/SKILL.md +55 -0
  99. package/.copilot/skills/craft-skill/SKILL.md +196 -0
  100. package/.copilot/skills/deepen-architecture/SKILL.md +260 -0
  101. package/.copilot/skills/define-language/SKILL.md +80 -0
  102. package/.copilot/skills/define-success/SKILL.md +12 -0
  103. package/.copilot/skills/delegate-task/SKILL.md +91 -0
  104. package/.copilot/skills/deploy/SKILL.md +198 -0
  105. package/.copilot/skills/design-interface/SKILL.md +97 -0
  106. package/.copilot/skills/develop-tdd/SKILL.md +416 -0
  107. package/.copilot/skills/diagnose-root/SKILL.md +24 -0
  108. package/.copilot/skills/diagnose-stall/SKILL.md +54 -0
  109. package/.copilot/skills/dispatch-agents/SKILL.md +118 -0
  110. package/.copilot/skills/edit-document/SKILL.md +23 -0
  111. package/.copilot/skills/elaborate-spec/SKILL.md +101 -0
  112. package/.copilot/skills/enforce-first/SKILL.md +45 -0
  113. package/.copilot/skills/evolve-skill/SKILL.md +55 -0
  114. package/.copilot/skills/execute-plan/SKILL.md +61 -0
  115. package/.copilot/skills/extract-design/SKILL.md +132 -0
  116. package/.copilot/skills/find-way/SKILL.md +191 -0
  117. package/.copilot/skills/fix-bug/SKILL.md +67 -0
  118. package/.copilot/skills/gate-trace/SKILL.md +92 -0
  119. package/.copilot/skills/generate-allure-report/SKILL.md +285 -0
  120. package/.copilot/skills/grill-me/SKILL.md +108 -0
  121. package/.copilot/skills/grill-with-docs/SKILL.md +53 -0
  122. package/.copilot/skills/guard-git/SKILL.md +231 -0
  123. package/.copilot/skills/harden-vps/SKILL.md +291 -0
  124. package/.copilot/skills/hook-commits/SKILL.md +94 -0
  125. package/.copilot/skills/inspect-quality/SKILL.md +106 -0
  126. package/.copilot/skills/investigate-bug/SKILL.md +127 -0
  127. package/.copilot/skills/kickoff-branch/SKILL.md +143 -0
  128. package/.copilot/skills/maintain-wiki/SKILL.md +64 -0
  129. package/.copilot/skills/map-codebase/SKILL.md +71 -0
  130. package/.copilot/skills/migrate-spec/SKILL.md +862 -0
  131. package/.copilot/skills/model-domain/SKILL.md +232 -0
  132. package/.copilot/skills/orchestrate-project/SKILL.md +174 -0
  133. package/.copilot/skills/organize-workspace/SKILL.md +164 -0
  134. package/.copilot/skills/plan-refactor/SKILL.md +87 -0
  135. package/.copilot/skills/plan-release/SKILL.md +145 -0
  136. package/.copilot/skills/plan-tests/SKILL.md +75 -0
  137. package/.copilot/skills/plan-work/SKILL.md +260 -0
  138. package/.copilot/skills/publish-package/SKILL.md +328 -0
  139. package/.copilot/skills/quick-fix/SKILL.md +114 -0
  140. package/.copilot/skills/release-branch/SKILL.md +298 -0
  141. package/.copilot/skills/request-review/SKILL.md +113 -0
  142. package/.copilot/skills/research-first/SKILL.md +87 -0
  143. package/.copilot/skills/reset-baseline/SKILL.md +21 -0
  144. package/.copilot/skills/respond-review/SKILL.md +71 -0
  145. package/.copilot/skills/run-benchmark/SKILL.md +85 -0
  146. package/.copilot/skills/run-evals/SKILL.md +80 -0
  147. package/.copilot/skills/run-planning/SKILL.md +101 -0
  148. package/.copilot/skills/scope-work/SKILL.md +63 -0
  149. package/.copilot/skills/search-skills/SKILL.md +73 -0
  150. package/.copilot/skills/security-review/SKILL.md +384 -0
  151. package/.copilot/skills/seed-conventions/SKILL.md +302 -0
  152. package/.copilot/skills/session-state/SKILL.md +146 -0
  153. package/.copilot/skills/setup-environment/SKILL.md +39 -0
  154. package/.copilot/skills/simulate-agents/SKILL.md +26 -0
  155. package/.copilot/skills/slice-tasks/SKILL.md +68 -0
  156. package/.copilot/skills/smoke-test/SKILL.md +257 -0
  157. package/.copilot/skills/spike-prototype/SKILL.md +95 -0
  158. package/.copilot/skills/stocktake-skills/SKILL.md +74 -0
  159. package/.copilot/skills/survey-context/SKILL.md +135 -0
  160. package/.copilot/skills/terse-mode/SKILL.md +42 -0
  161. package/.copilot/skills/trace-requirement/SKILL.md +69 -0
  162. package/.copilot/skills/using-bigpowers/SKILL.md +111 -0
  163. package/.copilot/skills/validate-contracts/SKILL.md +277 -0
  164. package/.copilot/skills/validate-fix/SKILL.md +147 -0
  165. package/.copilot/skills/verify-work/SKILL.md +191 -0
  166. package/.copilot/skills/visual-dashboard/SKILL.md +50 -0
  167. package/.copilot/skills/wire-ci/SKILL.md +374 -0
  168. package/.copilot/skills/wire-observability/SKILL.md +97 -0
  169. package/.copilot/skills/write-document/SKILL.md +255 -0
  170. package/.hermes/skills/commit-message/SKILL.md +1 -1
  171. package/.hermes/skills/evolve-skill/SKILL.md +1 -1
  172. package/.hermes/skills/write-document/SKILL.md +1 -1
  173. package/.kilocode/rules/commit-message.md +1 -1
  174. package/.kilocode/rules/evolve-skill.md +1 -1
  175. package/.kilocode/rules/write-document.md +1 -1
  176. package/.mimocode/skills/commit-message/SKILL.md +1 -1
  177. package/.mimocode/skills/evolve-skill/SKILL.md +1 -1
  178. package/.mimocode/skills/write-document/SKILL.md +1 -1
  179. package/.opencode/skills/align-grid/SKILL.md +110 -0
  180. package/.opencode/skills/assess-impact/SKILL.md +91 -0
  181. package/.opencode/skills/audit-code/SKILL.md +184 -0
  182. package/.opencode/skills/audit-plan/SKILL.md +89 -0
  183. package/.opencode/skills/build-epic/SKILL.md +105 -0
  184. package/.opencode/skills/change-request/SKILL.md +121 -0
  185. package/.opencode/skills/commit-message/SKILL.md +140 -0
  186. package/.opencode/skills/compose-workflow/SKILL.md +82 -0
  187. package/.opencode/skills/context7-mcp/SKILL.md +55 -0
  188. package/.opencode/skills/craft-skill/SKILL.md +196 -0
  189. package/.opencode/skills/deepen-architecture/SKILL.md +260 -0
  190. package/.opencode/skills/define-language/SKILL.md +80 -0
  191. package/.opencode/skills/define-success/SKILL.md +12 -0
  192. package/.opencode/skills/delegate-task/SKILL.md +91 -0
  193. package/.opencode/skills/deploy/SKILL.md +198 -0
  194. package/.opencode/skills/design-interface/SKILL.md +97 -0
  195. package/.opencode/skills/develop-tdd/SKILL.md +416 -0
  196. package/.opencode/skills/diagnose-root/SKILL.md +24 -0
  197. package/.opencode/skills/diagnose-stall/SKILL.md +54 -0
  198. package/.opencode/skills/dispatch-agents/SKILL.md +118 -0
  199. package/.opencode/skills/edit-document/SKILL.md +23 -0
  200. package/.opencode/skills/elaborate-spec/SKILL.md +101 -0
  201. package/.opencode/skills/enforce-first/SKILL.md +45 -0
  202. package/.opencode/skills/evolve-skill/SKILL.md +55 -0
  203. package/.opencode/skills/execute-plan/SKILL.md +61 -0
  204. package/.opencode/skills/extract-design/SKILL.md +132 -0
  205. package/.opencode/skills/find-way/SKILL.md +191 -0
  206. package/.opencode/skills/fix-bug/SKILL.md +67 -0
  207. package/.opencode/skills/gate-trace/SKILL.md +92 -0
  208. package/.opencode/skills/generate-allure-report/SKILL.md +285 -0
  209. package/.opencode/skills/grill-me/SKILL.md +108 -0
  210. package/.opencode/skills/grill-with-docs/SKILL.md +53 -0
  211. package/.opencode/skills/guard-git/SKILL.md +231 -0
  212. package/.opencode/skills/harden-vps/SKILL.md +291 -0
  213. package/.opencode/skills/hook-commits/SKILL.md +94 -0
  214. package/.opencode/skills/inspect-quality/SKILL.md +106 -0
  215. package/.opencode/skills/investigate-bug/SKILL.md +127 -0
  216. package/.opencode/skills/kickoff-branch/SKILL.md +143 -0
  217. package/.opencode/skills/maintain-wiki/SKILL.md +64 -0
  218. package/.opencode/skills/map-codebase/SKILL.md +71 -0
  219. package/.opencode/skills/migrate-spec/SKILL.md +862 -0
  220. package/.opencode/skills/model-domain/SKILL.md +232 -0
  221. package/.opencode/skills/orchestrate-project/SKILL.md +174 -0
  222. package/.opencode/skills/organize-workspace/SKILL.md +164 -0
  223. package/.opencode/skills/plan-refactor/SKILL.md +87 -0
  224. package/.opencode/skills/plan-release/SKILL.md +145 -0
  225. package/.opencode/skills/plan-tests/SKILL.md +75 -0
  226. package/.opencode/skills/plan-work/SKILL.md +260 -0
  227. package/.opencode/skills/publish-package/SKILL.md +328 -0
  228. package/.opencode/skills/quick-fix/SKILL.md +114 -0
  229. package/.opencode/skills/release-branch/SKILL.md +298 -0
  230. package/.opencode/skills/request-review/SKILL.md +113 -0
  231. package/.opencode/skills/research-first/SKILL.md +87 -0
  232. package/.opencode/skills/reset-baseline/SKILL.md +21 -0
  233. package/.opencode/skills/respond-review/SKILL.md +71 -0
  234. package/.opencode/skills/run-benchmark/SKILL.md +85 -0
  235. package/.opencode/skills/run-evals/SKILL.md +80 -0
  236. package/.opencode/skills/run-planning/SKILL.md +101 -0
  237. package/.opencode/skills/scope-work/SKILL.md +63 -0
  238. package/.opencode/skills/search-skills/SKILL.md +73 -0
  239. package/.opencode/skills/security-review/SKILL.md +384 -0
  240. package/.opencode/skills/seed-conventions/SKILL.md +302 -0
  241. package/.opencode/skills/session-state/SKILL.md +146 -0
  242. package/.opencode/skills/setup-environment/SKILL.md +39 -0
  243. package/.opencode/skills/simulate-agents/SKILL.md +26 -0
  244. package/.opencode/skills/slice-tasks/SKILL.md +68 -0
  245. package/.opencode/skills/smoke-test/SKILL.md +257 -0
  246. package/.opencode/skills/spike-prototype/SKILL.md +95 -0
  247. package/.opencode/skills/stocktake-skills/SKILL.md +74 -0
  248. package/.opencode/skills/survey-context/SKILL.md +135 -0
  249. package/.opencode/skills/terse-mode/SKILL.md +42 -0
  250. package/.opencode/skills/trace-requirement/SKILL.md +69 -0
  251. package/.opencode/skills/using-bigpowers/SKILL.md +111 -0
  252. package/.opencode/skills/validate-contracts/SKILL.md +277 -0
  253. package/.opencode/skills/validate-fix/SKILL.md +147 -0
  254. package/.opencode/skills/verify-work/SKILL.md +191 -0
  255. package/.opencode/skills/visual-dashboard/SKILL.md +50 -0
  256. package/.opencode/skills/wire-ci/SKILL.md +374 -0
  257. package/.opencode/skills/wire-observability/SKILL.md +97 -0
  258. package/.opencode/skills/write-document/SKILL.md +255 -0
  259. package/.pi/package.json +1 -1
  260. package/.pi/prompts/commit-message.md +1 -1
  261. package/.pi/prompts/evolve-skill.md +1 -1
  262. package/.pi/prompts/write-document.md +1 -1
  263. package/.pi/skills/commit-message/SKILL.md +1 -1
  264. package/.pi/skills/evolve-skill/SKILL.md +1 -1
  265. package/.pi/skills/write-document/SKILL.md +1 -1
  266. package/.qwen/skills/align-grid/SKILL.md +110 -0
  267. package/.qwen/skills/assess-impact/SKILL.md +91 -0
  268. package/.qwen/skills/audit-code/SKILL.md +184 -0
  269. package/.qwen/skills/audit-plan/SKILL.md +89 -0
  270. package/.qwen/skills/build-epic/SKILL.md +105 -0
  271. package/.qwen/skills/change-request/SKILL.md +121 -0
  272. package/.qwen/skills/commit-message/SKILL.md +140 -0
  273. package/.qwen/skills/compose-workflow/SKILL.md +82 -0
  274. package/.qwen/skills/context7-mcp/SKILL.md +55 -0
  275. package/.qwen/skills/craft-skill/SKILL.md +196 -0
  276. package/.qwen/skills/deepen-architecture/SKILL.md +260 -0
  277. package/.qwen/skills/define-language/SKILL.md +80 -0
  278. package/.qwen/skills/define-success/SKILL.md +12 -0
  279. package/.qwen/skills/delegate-task/SKILL.md +91 -0
  280. package/.qwen/skills/deploy/SKILL.md +198 -0
  281. package/.qwen/skills/design-interface/SKILL.md +97 -0
  282. package/.qwen/skills/develop-tdd/SKILL.md +416 -0
  283. package/.qwen/skills/diagnose-root/SKILL.md +24 -0
  284. package/.qwen/skills/diagnose-stall/SKILL.md +54 -0
  285. package/.qwen/skills/dispatch-agents/SKILL.md +118 -0
  286. package/.qwen/skills/edit-document/SKILL.md +23 -0
  287. package/.qwen/skills/elaborate-spec/SKILL.md +101 -0
  288. package/.qwen/skills/enforce-first/SKILL.md +45 -0
  289. package/.qwen/skills/evolve-skill/SKILL.md +55 -0
  290. package/.qwen/skills/execute-plan/SKILL.md +61 -0
  291. package/.qwen/skills/extract-design/SKILL.md +132 -0
  292. package/.qwen/skills/find-way/SKILL.md +191 -0
  293. package/.qwen/skills/fix-bug/SKILL.md +67 -0
  294. package/.qwen/skills/gate-trace/SKILL.md +92 -0
  295. package/.qwen/skills/generate-allure-report/SKILL.md +285 -0
  296. package/.qwen/skills/grill-me/SKILL.md +108 -0
  297. package/.qwen/skills/grill-with-docs/SKILL.md +53 -0
  298. package/.qwen/skills/guard-git/SKILL.md +231 -0
  299. package/.qwen/skills/harden-vps/SKILL.md +291 -0
  300. package/.qwen/skills/hook-commits/SKILL.md +94 -0
  301. package/.qwen/skills/inspect-quality/SKILL.md +106 -0
  302. package/.qwen/skills/investigate-bug/SKILL.md +127 -0
  303. package/.qwen/skills/kickoff-branch/SKILL.md +143 -0
  304. package/.qwen/skills/maintain-wiki/SKILL.md +64 -0
  305. package/.qwen/skills/map-codebase/SKILL.md +71 -0
  306. package/.qwen/skills/migrate-spec/SKILL.md +862 -0
  307. package/.qwen/skills/model-domain/SKILL.md +232 -0
  308. package/.qwen/skills/orchestrate-project/SKILL.md +174 -0
  309. package/.qwen/skills/organize-workspace/SKILL.md +164 -0
  310. package/.qwen/skills/plan-refactor/SKILL.md +87 -0
  311. package/.qwen/skills/plan-release/SKILL.md +145 -0
  312. package/.qwen/skills/plan-tests/SKILL.md +75 -0
  313. package/.qwen/skills/plan-work/SKILL.md +260 -0
  314. package/.qwen/skills/publish-package/SKILL.md +328 -0
  315. package/.qwen/skills/quick-fix/SKILL.md +114 -0
  316. package/.qwen/skills/release-branch/SKILL.md +298 -0
  317. package/.qwen/skills/request-review/SKILL.md +113 -0
  318. package/.qwen/skills/research-first/SKILL.md +87 -0
  319. package/.qwen/skills/reset-baseline/SKILL.md +21 -0
  320. package/.qwen/skills/respond-review/SKILL.md +71 -0
  321. package/.qwen/skills/run-benchmark/SKILL.md +85 -0
  322. package/.qwen/skills/run-evals/SKILL.md +80 -0
  323. package/.qwen/skills/run-planning/SKILL.md +101 -0
  324. package/.qwen/skills/scope-work/SKILL.md +63 -0
  325. package/.qwen/skills/search-skills/SKILL.md +73 -0
  326. package/.qwen/skills/security-review/SKILL.md +384 -0
  327. package/.qwen/skills/seed-conventions/SKILL.md +302 -0
  328. package/.qwen/skills/session-state/SKILL.md +146 -0
  329. package/.qwen/skills/setup-environment/SKILL.md +39 -0
  330. package/.qwen/skills/simulate-agents/SKILL.md +26 -0
  331. package/.qwen/skills/slice-tasks/SKILL.md +68 -0
  332. package/.qwen/skills/smoke-test/SKILL.md +257 -0
  333. package/.qwen/skills/spike-prototype/SKILL.md +95 -0
  334. package/.qwen/skills/stocktake-skills/SKILL.md +74 -0
  335. package/.qwen/skills/survey-context/SKILL.md +135 -0
  336. package/.qwen/skills/terse-mode/SKILL.md +42 -0
  337. package/.qwen/skills/trace-requirement/SKILL.md +69 -0
  338. package/.qwen/skills/using-bigpowers/SKILL.md +111 -0
  339. package/.qwen/skills/validate-contracts/SKILL.md +277 -0
  340. package/.qwen/skills/validate-fix/SKILL.md +147 -0
  341. package/.qwen/skills/verify-work/SKILL.md +191 -0
  342. package/.qwen/skills/visual-dashboard/SKILL.md +50 -0
  343. package/.qwen/skills/wire-ci/SKILL.md +374 -0
  344. package/.qwen/skills/wire-observability/SKILL.md +97 -0
  345. package/.qwen/skills/write-document/SKILL.md +255 -0
  346. package/.trae/skills/commit-message/SKILL.md +1 -1
  347. package/.trae/skills/evolve-skill/SKILL.md +1 -1
  348. package/.trae/skills/write-document/SKILL.md +1 -1
  349. package/.windsurf/rules/commit-message.md +1 -1
  350. package/.windsurf/rules/evolve-skill.md +1 -1
  351. package/.windsurf/rules/write-document.md +1 -1
  352. package/.zcode/skills/commit-message/SKILL.md +1 -1
  353. package/.zcode/skills/evolve-skill/SKILL.md +1 -1
  354. package/.zcode/skills/write-document/SKILL.md +1 -1
  355. package/CHANGELOG.md +7 -0
  356. package/package.json +1 -1
  357. package/scripts/adapters/agy.sh +3 -0
  358. package/scripts/adapters/continue.sh +3 -0
  359. package/scripts/adapters/cursor.sh +3 -0
  360. package/scripts/adapters/gemini.sh +5 -24
  361. package/scripts/adapters/mimo.sh +3 -0
  362. package/scripts/adapters/omp.sh +3 -0
  363. package/scripts/adapters/pi.sh +6 -3
  364. package/scripts/adapters/zcode.sh +3 -0
  365. package/scripts/adapters/zed.sh +3 -0
  366. package/scripts/generate-workflow-diagrams.sh +102 -0
  367. package/scripts/golden-g13-test-orphans.sh +70 -0
  368. package/scripts/golden-g14-adapter-dispatch.sh +113 -0
  369. package/scripts/lib/__pycache__/link_utils.cpython-312.pyc +0 -0
  370. package/scripts/lib/__pycache__/srp_engine_links.cpython-312.pyc +0 -0
  371. package/scripts/lib/adapter-guard.sh +30 -0
  372. package/scripts/lib/golden-suite-gates.sh +24 -0
  373. package/scripts/lib/install-targets-b.sh +0 -8
  374. package/scripts/lib/sync-render.sh +0 -43
  375. package/scripts/targets.yaml +35 -13
  376. package/scripts/test-adapter-render.sh +116 -0
  377. package/scripts/test-adapters.sh +10 -3
  378. package/scripts/test-install-hub.sh +139 -0
  379. package/skills/commit-message/REFERENCE.md +1 -1
  380. package/skills/evolve-skill/REFERENCE.md +1 -1
  381. package/skills/write-document/REFERENCE.md +1 -1
  382. package/scripts/test-agy-hub.sh +0 -60
  383. package/scripts/test-cline-adapter.sh +0 -55
  384. package/scripts/test-cline-hub.sh +0 -48
  385. package/scripts/test-codebuddy-adapter.sh +0 -63
  386. package/scripts/test-codebuddy-hub.sh +0 -49
  387. package/scripts/test-codex-adapter.sh +0 -63
  388. package/scripts/test-codex-hub.sh +0 -49
  389. package/scripts/test-copilot-adapter.sh +0 -47
  390. package/scripts/test-copilot-hub.sh +0 -43
  391. package/scripts/test-gemini-adapter.sh +0 -70
  392. package/scripts/test-gemini-hub.sh +0 -56
  393. package/scripts/test-hermes-adapter.sh +0 -85
  394. package/scripts/test-hermes-hub.sh +0 -52
  395. package/scripts/test-kilocode-adapter.sh +0 -55
  396. package/scripts/test-kilocode-hub.sh +0 -48
  397. package/scripts/test-mimo-hub.sh +0 -52
  398. package/scripts/test-opencode-adapter.sh +0 -47
  399. package/scripts/test-opencode-hub.sh +0 -43
  400. package/scripts/test-qwen-adapter.sh +0 -63
  401. package/scripts/test-qwen-hub.sh +0 -49
  402. package/scripts/test-trae-adapter.sh +0 -63
  403. package/scripts/test-trae-hub.sh +0 -49
  404. package/scripts/test-windsurf-adapter.sh +0 -63
  405. package/scripts/test-windsurf-hub.sh +0 -49
  406. package/scripts/test-zcode-hub.sh +0 -52
@@ -0,0 +1,102 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # generate-workflow-diagrams.sh — render docs/WORKFLOWS.md from specs/workflows/*.yaml.
4
+ #
5
+ # specs/assets/bigpowers-workflow.svg was a find-and-replace of a BMad Method
6
+ # chart with bigpowers skill names dropped into BMad's slots. Nothing regenerated
7
+ # it, so it drifted: it routed PLAN through define-success (archived), placed
8
+ # seed-conventions in PHASE 4 when it is the greenfield entry point, omitted the
9
+ # whole planning spine, build-epic and the entire verify/release arc, and used
10
+ # "Sprints" — a word absent from every bigpowers doctrine file.
11
+ #
12
+ # A diagram nothing regenerates is a diagram that lies. This derives the chains
13
+ # from the same YAML the /slash commands read, so the source cannot drift from
14
+ # the picture without the picture changing.
15
+ #
16
+ # Usage: bash scripts/generate-workflow-diagrams.sh [--check]
17
+ # --check fail if the committed output is stale (for CI)
18
+
19
+ set -euo pipefail
20
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/python-env.sh"
21
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
22
+ resolve_repo_root
23
+ cd "$REPO_ROOT"
24
+
25
+ OUT="docs/WORKFLOWS.md"
26
+ CHECK=0
27
+ [[ "${1:-}" == "--check" ]] && CHECK=1
28
+
29
+ TMP=$(mktemp)
30
+ trap 'rm -f "$TMP"' EXIT
31
+
32
+ $PYTHON - "$TMP" <<'PY'
33
+ import sys, glob, os
34
+ import yaml
35
+
36
+ out = open(sys.argv[1], "w", encoding="utf-8")
37
+ w = out.write
38
+
39
+ w("# bigpowers Workflows\n\n")
40
+ w("<!-- story: e37s05 -->\n\n")
41
+ w("> **Generated** by `scripts/generate-workflow-diagrams.sh` from\n")
42
+ w("> `specs/workflows/*.yaml`. Do not hand-edit — change the YAML and re-run.\n")
43
+ w("> CI enforces freshness via `--check`.\n\n")
44
+ w("Each recipe below is a composed chain of skills, invocable as a slash command.\n\n")
45
+
46
+ recipes = []
47
+ for path in sorted(glob.glob("specs/workflows/*.yaml")):
48
+ d = yaml.safe_load(open(path, encoding="utf-8")) or {}
49
+ if d.get("name") and d.get("skills"):
50
+ recipes.append(d)
51
+
52
+ w("## Recipes\n\n")
53
+ w("| Command | Chain | Purpose |\n|---|---|---|\n")
54
+ for r in recipes:
55
+ chain = " → ".join("`%s`" % s for s in r["skills"])
56
+ desc = (r.get("description") or "").replace("|", "\\|").strip()
57
+ w("| `%s` | %s | %s |\n" % (r.get("command", "/" + r["name"]), chain, desc))
58
+ w("\n")
59
+
60
+ w("## Chains\n\n```mermaid\nflowchart LR\n")
61
+ for i, r in enumerate(recipes):
62
+ w(" subgraph %s[\"%s\"]\n" % ("w%d" % i, r.get("command", r["name"])))
63
+ prev = None
64
+ for j, s in enumerate(r["skills"]):
65
+ node = "n%d_%d" % (i, j)
66
+ w(" %s[\"%s\"]\n" % (node, s))
67
+ if prev:
68
+ w(" %s --> %s\n" % (prev, node))
69
+ prev = node
70
+ w(" end\n")
71
+ w("```\n\n")
72
+
73
+ # Skill reuse across recipes is the interesting structural fact: it shows which
74
+ # skills are load-bearing across the catalog.
75
+ counts = {}
76
+ for r in recipes:
77
+ for s in r["skills"]:
78
+ counts[s] = counts.get(s, 0) + 1
79
+ shared = sorted([(v, k) for k, v in counts.items() if v > 1], reverse=True)
80
+ if shared:
81
+ w("## Skills shared across recipes\n\n")
82
+ w("| Skill | Recipes |\n|---|---|\n")
83
+ for v, k in shared:
84
+ w("| `%s` | %d |\n" % (k, v))
85
+ w("\n")
86
+
87
+ w("_%d recipes, %d distinct skills._\n" % (len(recipes), len(counts)))
88
+ out.close()
89
+ PY
90
+
91
+ if [[ "$CHECK" -eq 1 ]]; then
92
+ if [[ ! -f "$OUT" ]] || ! diff -q "$TMP" "$OUT" >/dev/null 2>&1; then
93
+ echo "generate-workflow-diagrams: $OUT is stale — run bash scripts/generate-workflow-diagrams.sh" >&2
94
+ exit 1
95
+ fi
96
+ echo "generate-workflow-diagrams: $OUT is current"
97
+ exit 0
98
+ fi
99
+
100
+ mkdir -p "$(dirname "$OUT")"
101
+ cp "$TMP" "$OUT"
102
+ echo "generate-workflow-diagrams: wrote $OUT"
@@ -0,0 +1,70 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # golden-g13-test-orphans.sh — every scripts/test-*.sh must be wired into a gate.
4
+ #
5
+ # Before this gate, 33 of 35 test scripts were reachable from nothing: not CI,
6
+ # not Preflight, not package.json, not another script. Writing a test was not
7
+ # enough to make it run, so tests accumulated as dead weight and regressions
8
+ # they would have caught shipped anyway (test-adapters.sh silently exercised 1
9
+ # of 21 adapters for months).
10
+ #
11
+ # Usage: bash scripts/golden-g13-test-orphans.sh [--self-test]
12
+ # Exit 0: every test script is referenced by the gate list
13
+ # Exit 1: at least one orphan (or, under --self-test, the gate failed to notice
14
+ # a deliberately unlisted script)
15
+
16
+ set -euo pipefail
17
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
18
+ resolve_repo_root
19
+ cd "$REPO_ROOT"
20
+
21
+ RED='\033[0;31m'
22
+ GREEN='\033[0;32m'
23
+ NC='\033[0m'
24
+
25
+ GATES_FILE="scripts/lib/golden-suite-gates.sh"
26
+
27
+ find_orphans() { # $1 = extra script basename to consider (may be empty)
28
+ local extra="${1:-}"
29
+ local orphans=""
30
+ local f b
31
+ for f in scripts/test-*.sh; do
32
+ [[ -e "$f" ]] || continue
33
+ b="$(basename "$f")"
34
+ grep -q "$b" "$GATES_FILE" || orphans+=" $b"$'\n'
35
+ done
36
+ if [[ -n "$extra" ]]; then
37
+ grep -q "$extra" "$GATES_FILE" || orphans+=" $extra"$'\n'
38
+ fi
39
+ printf '%s' "$orphans"
40
+ }
41
+
42
+ if [[ "${1:-}" == "--self-test" ]]; then
43
+ echo "=== G-13 self-test: prove the gate can fail ==="
44
+ # A name that is definitely not in the gate list must be reported.
45
+ if [[ -n "$(find_orphans "test-definitely-not-wired.sh")" ]]; then
46
+ echo -e "${GREEN}PASS${NC} G-13 reports an unlisted test script"
47
+ echo "G-13 self-test: PASS"
48
+ exit 0
49
+ fi
50
+ echo -e "${RED}FAIL${NC} G-13 did not report an unlisted script — vacuous gate"
51
+ echo "G-13 self-test: FAIL"
52
+ exit 1
53
+ fi
54
+
55
+ echo "=== G-13: test-script orphan check ==="
56
+ ORPHANS="$(find_orphans "")"
57
+ TOTAL=$(ls scripts/test-*.sh 2>/dev/null | wc -l | tr -d ' ')
58
+
59
+ if [[ -z "$ORPHANS" ]]; then
60
+ echo " ok : all $TOTAL test script(s) are wired into $GATES_FILE"
61
+ echo -e "${GREEN}PASS${NC}"
62
+ echo "G-13: PASS"
63
+ exit 0
64
+ fi
65
+
66
+ echo " orphaned test scripts (present but reachable from no gate):"
67
+ printf '%s' "$ORPHANS"
68
+ echo -e "${RED}FAIL${NC} add them to GOLDEN_GATES in $GATES_FILE, or delete them"
69
+ echo "G-13: FAIL"
70
+ exit 1
@@ -0,0 +1,113 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # golden-g14-adapter-dispatch.sh — an adapter that can render must be dispatched.
4
+ #
5
+ # scripts/lib/srp-engine.py builds its dispatch list from targets.yaml entries
6
+ # carrying a skill.adapter. An adapter that defines render_skill() but is
7
+ # declared `skill: null` therefore never runs during sync, while its install
8
+ # function still reads a rendered directory that is never produced — the target
9
+ # reports success and installs nothing
10
+ # (BUG-2026-07-26-null-skill-adapters-install-nothing).
11
+ #
12
+ # Context-only bridges (aider, goose, ...) are exempt by construction: they
13
+ # define no render_skill, so there is nothing to dispatch.
14
+ #
15
+ # Usage: bash scripts/golden-g14-adapter-dispatch.sh [--self-test]
16
+ # Exit 0: every rendering adapter is dispatched
17
+ # Exit 1: at least one rendering adapter is undispatched (or, under
18
+ # --self-test, the gate failed to notice an injected one)
19
+
20
+ set -euo pipefail
21
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/python-env.sh"
22
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
23
+ resolve_repo_root
24
+ cd "$REPO_ROOT"
25
+
26
+ RED='\033[0;31m'
27
+ GREEN='\033[0;32m'
28
+ NC='\033[0m'
29
+
30
+ check() { # $1 = targets.yaml path
31
+ $PYTHON - "$1" <<'PY'
32
+ import sys, os, re
33
+ import yaml
34
+
35
+ targets_path = sys.argv[1]
36
+ data = yaml.safe_load(open(targets_path, encoding="utf-8")) or {}
37
+
38
+ dispatched = set()
39
+ for t in data.get("targets") or []:
40
+ skill = t.get("skill")
41
+ if isinstance(skill, dict) and skill.get("adapter"):
42
+ dispatched.add(skill["adapter"])
43
+
44
+ problems = []
45
+ adapter_dir = os.path.join("scripts", "adapters")
46
+ for fn in sorted(os.listdir(adapter_dir)):
47
+ if not fn.endswith(".sh"):
48
+ continue
49
+ aid = fn[:-3]
50
+ src = open(os.path.join(adapter_dir, fn), encoding="utf-8").read()
51
+ if not re.search(r"^render_skill\(\)", src, re.M):
52
+ continue # context-only bridge — nothing to dispatch
53
+ if aid not in dispatched:
54
+ problems.append(
55
+ f"{aid}: defines render_skill() but targets.yaml does not dispatch it "
56
+ f"(skill.adapter missing or null) — sync renders nothing for it"
57
+ )
58
+
59
+ if problems:
60
+ for p in problems:
61
+ print(f" UNDISPATCHED {p}")
62
+ print(f"\n{len(problems)} rendering adapter(s) never run during sync")
63
+ sys.exit(1)
64
+
65
+ print(f" ok : all rendering adapters are dispatched ({len(dispatched)} in registry)")
66
+ sys.exit(0)
67
+ PY
68
+ }
69
+
70
+ if [[ "${1:-}" == "--self-test" ]]; then
71
+ echo "=== G-14 self-test: prove the gate can fail ==="
72
+ TMP=$(mktemp -d)
73
+ trap 'rm -rf "$TMP"' EXIT
74
+ $PYTHON - "$TMP/targets.yaml" <<'PY'
75
+ import sys, yaml
76
+ d = yaml.safe_load(open("scripts/targets.yaml", encoding="utf-8"))
77
+ # Null out the first dispatched adapter — the gate must notice.
78
+ for t in d.get("targets") or []:
79
+ s = t.get("skill")
80
+ if isinstance(s, dict) and s.get("adapter"):
81
+ print(f"injected: {t['id']} skill -> null")
82
+ t["skill"] = None
83
+ break
84
+ yaml.dump(d, open(sys.argv[1], "w", encoding="utf-8"), default_flow_style=False, sort_keys=False)
85
+ PY
86
+ set +e
87
+ check "$TMP/targets.yaml" >/dev/null 2>&1
88
+ rc=$?
89
+ set -e
90
+ if [[ $rc -ne 0 ]]; then
91
+ echo -e "${GREEN}PASS${NC} G-14 detected an injected undispatched adapter"
92
+ echo "G-14 self-test: PASS"
93
+ exit 0
94
+ fi
95
+ echo -e "${RED}FAIL${NC} G-14 passed on an injected null adapter — vacuous gate"
96
+ echo "G-14 self-test: FAIL"
97
+ exit 1
98
+ fi
99
+
100
+ echo "=== G-14: adapter dispatch coverage ==="
101
+ set +e
102
+ out=$(check "scripts/targets.yaml" 2>&1)
103
+ rc=$?
104
+ set -e
105
+ echo "$out"
106
+ if [[ $rc -eq 0 ]]; then
107
+ echo -e "${GREEN}PASS${NC}"
108
+ echo "G-14: PASS"
109
+ exit 0
110
+ fi
111
+ echo -e "${RED}FAIL${NC} see BUG-2026-07-26-null-skill-adapters-install-nothing"
112
+ echo "G-14: FAIL"
113
+ exit 1
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # adapter-guard.sh — shared skill-name validation for every render adapter.
4
+ #
5
+ # Adapters interpolate the SkillIR `name` straight into a filesystem path
6
+ # (mkdir -p "$dir/$IR_NAME"). A name containing "/" or ".." therefore writes
7
+ # outside the destination directory.
8
+ #
9
+ # Ten adapters carried a private copy of this check (qwen_is_unsafe_skill_name
10
+ # and friends) and nine had none at all — and the nine unguarded ones were
11
+ # exactly the nine that never got a per-target test. One guard, sourced by every
12
+ # adapter, replaces both the duplication and the gap.
13
+
14
+ # Returns 0 (true) when the name must not be used as a path component.
15
+ bp_is_unsafe_skill_name() {
16
+ local name="${1-}"
17
+ [[ -z "$name" || "$name" == "null" || "$name" == *"/"* || "$name" == *".."* || "$name" == .* ]]
18
+ }
19
+
20
+ # Echoes the name when safe; otherwise reports on stderr and returns 1.
21
+ # Usage inside render_skill: name="$(bp_assert_safe_skill_name "$IR_NAME" adaptername)" || return 1
22
+ bp_assert_safe_skill_name() {
23
+ local name="${1-}"
24
+ local adapter="${2:-adapter}"
25
+ if bp_is_unsafe_skill_name "$name"; then
26
+ echo "${adapter}: refusing unsafe skill name: ${name:-<empty>}" >&2
27
+ return 1
28
+ fi
29
+ printf '%s' "$name"
30
+ }
@@ -22,7 +22,31 @@ GOLDEN_GATES=(
22
22
  # Anti-vacuity for the target-contract seam: every contract declared in
23
23
  # targets.yaml must have a real assertion, and an unknown contract must FAIL
24
24
  # rather than SKIP+exit 0 (seven contracts were fail-open before this).
25
+ # Writing a test must be enough to make it run: G-13 fails if any
26
+ # scripts/test-*.sh is absent from this list.
27
+ "g13-test-orphans-selftest:bash scripts/golden-g13-test-orphans.sh --self-test:false"
28
+ "g13-test-orphans:bash scripts/golden-g13-test-orphans.sh:false"
29
+ # An adapter that defines render_skill() must be dispatched by targets.yaml,
30
+ # or sync renders nothing for it while its install still claims success.
31
+ # docs/WORKFLOWS.md is generated from specs/workflows/*.yaml; a diagram nothing
32
+ # regenerates is a diagram that lies (see specs/archive/assets/README.md).
33
+ "workflow-diagrams-fresh:bash scripts/generate-workflow-diagrams.sh --check:false"
34
+ "g14-adapter-dispatch-selftest:bash scripts/golden-g14-adapter-dispatch.sh --self-test:false"
35
+ "g14-adapter-dispatch:bash scripts/golden-g14-adapter-dispatch.sh:false"
25
36
  "target-contracts:bash scripts/test-target-contracts.sh:false"
37
+ # Registry-driven replacements for the 25 hand-written per-target scripts.
38
+ "install-hub:bash scripts/test-install-hub.sh:false"
39
+ "adapter-render:bash scripts/test-adapter-render.sh:false"
40
+ "adapters:bash scripts/test-adapters.sh:false"
41
+ # Previously orphaned: present in scripts/ but reachable from no gate.
42
+ "tombstone-mechanism:bash scripts/test-tombstone-mechanism.sh:false"
43
+ "trace-strict:bash scripts/test-trace-strict.sh:false"
44
+ "trace-matrix-size:bash scripts/test-trace-matrix-size.sh:false"
45
+ "setup-no-pyyaml:bash scripts/test-setup-no-pyyaml.sh:false"
46
+ "install-distribute-only:bash scripts/test-install-distribute-only.sh:false"
47
+ "completeness-critic-scope:bash scripts/test-completeness-critic-scope.sh:false"
48
+ "epics-wiki-zero-stories:bash scripts/test-generate-epics-wiki-zero-stories.sh:false"
49
+ "golden-g11-worktree-venv:bash scripts/test-golden-g11-worktree-venv.sh:false"
26
50
  "install-helpers:bash scripts/test-install-helpers.sh:false"
27
51
  "import-boundaries:bash scripts/check-import-boundaries.sh:false"
28
52
  "skill-catalog:bash scripts/validate-skill-catalog.sh:false"
@@ -107,10 +107,6 @@ install_agy() {
107
107
  echo " NOTE: Antigravity uses ~/.gemini/antigravity-cli/skills/ — not .gemini/extensions/ (Gemini CLI)"
108
108
  }
109
109
 
110
- install_antigravity() {
111
- install_agy
112
- }
113
-
114
110
  uninstall_agy() {
115
111
  echo ""
116
112
  echo "Antigravity CLI → removing management from $AGY_CONFIG_DIR/"
@@ -122,10 +118,6 @@ uninstall_agy() {
122
118
  fi
123
119
  }
124
120
 
125
- uninstall_antigravity() {
126
- uninstall_agy
127
- }
128
-
129
121
  # ── Codex CLI (e65s02) ───────────────────────────────────────────────────────
130
122
 
131
123
  CODEX_CONFIG_DIR="$HOME/.codex"
@@ -54,49 +54,6 @@ render_gemini_command() {
54
54
  } > "$GEMINI_COMMANDS/$IR_NAME.toml"
55
55
  }
56
56
 
57
- render_gemini_hooks_manifest() {
58
- local hookdir="${GEMINI_HOOKS_DIR:-$GEMINI_EXT_DIR/hooks}"
59
- mkdir -p "$hookdir"
60
- cat > "$hookdir/hooks-manifest.json" <<'JSON'
61
- {
62
- "schema_version": 1,
63
- "target": "gemini",
64
- "config_path": "~/.gemini/settings.json",
65
- "events_total": 11,
66
- "events": [
67
- "BeforeTool",
68
- "AfterTool",
69
- "BeforeAgent",
70
- "AfterAgent",
71
- "BeforeModel",
72
- "BeforeToolSelection",
73
- "AfterModel",
74
- "SessionStart",
75
- "SessionEnd",
76
- "Notification",
77
- "PreCompress"
78
- ],
79
- "shipped_hooks": [
80
- {
81
- "event": "SessionStart",
82
- "script": "session-start",
83
- "matcher": "startup|clear|compact",
84
- "wave": "a",
85
- "status": "shipped"
86
- },
87
- {
88
- "event": "BeforeTool",
89
- "script": "before-tool-git-guard.sh",
90
- "matcher": "run_shell_command",
91
- "wave": "a",
92
- "status": "template"
93
- }
94
- ],
95
- "polyglot_launcher": "run-hook.cmd"
96
- }
97
- JSON
98
- }
99
-
100
57
  render_pi_skill() {
101
58
  mkdir -p "$PI_SKILLS/$IR_NAME"
102
59
  {
@@ -47,7 +47,9 @@ targets:
47
47
  - id: cline
48
48
  name: Cline
49
49
  tier: default_on
50
- skill: null
50
+ skill:
51
+ adapter: cline
52
+ output: .cline/skills
51
53
  context:
52
54
  adapter: cline
53
55
  mode: native
@@ -164,7 +166,9 @@ targets:
164
166
  # story: e68s02
165
167
  name: Qwen (Alibaba)
166
168
  tier: opt_in
167
- skill: null
169
+ skill:
170
+ adapter: qwen
171
+ output: .qwen/skills
168
172
  context:
169
173
  adapter: qwen
170
174
  mode: symlink
@@ -172,17 +176,6 @@ targets:
172
176
  contracts:
173
177
  - agents_md_exists
174
178
  - qwen_hooks_manifest
175
- name: Kilocode
176
- tier: opt_in
177
- skill:
178
- adapter: kilocode
179
- output: .kilocode/rules
180
- context:
181
- adapter: kilocode
182
- mode: copy
183
- file: AGENTS.md
184
- contracts:
185
- - agents_md_exists
186
179
 
187
180
  # Wave D (e37s12)
188
181
  - id: continue
@@ -303,3 +296,32 @@ targets:
303
296
  file: AGENTS.md
304
297
  contracts:
305
298
  - windsurf_hooks_manifest
299
+
300
+ # Registered by BUG-2026-07-26-null-skill-adapters-install-nothing: both ship
301
+ # a render_skill() adapter and an install function, but had no registry row,
302
+ # so srp-engine never rendered for them and install found nothing.
303
+ - id: opencode
304
+ name: OpenCode
305
+ tier: opt_in
306
+ skill:
307
+ adapter: opencode
308
+ output: .opencode/skills
309
+ context:
310
+ adapter: opencode
311
+ mode: symlink
312
+ file: AGENTS.md
313
+ contracts:
314
+ - agents_md_exists
315
+
316
+ - id: copilot
317
+ name: Copilot CLI
318
+ tier: opt_in
319
+ skill:
320
+ adapter: copilot
321
+ output: .copilot/skills
322
+ context:
323
+ adapter: copilot
324
+ mode: copy
325
+ file: AGENTS.md
326
+ contracts:
327
+ - agents_md_exists
@@ -0,0 +1,116 @@
1
+ #!/usr/bin/env bash
2
+ # story: e37s05
3
+ # test-adapter-render.sh — render, path-traversal and hook-guard checks for
4
+ # every adapter, replacing 11 hand-written test-<target>-adapter.sh scripts.
5
+ #
6
+ # The 11 originals were the same five assertions with the target name
7
+ # substituted, none of them reachable from any gate, and they covered 11 of the
8
+ # 18 adapters that define render_skill(). Their fifth assertion was pure
9
+ # delegation to test-adapters.sh, which is already registry-driven.
10
+ #
11
+ # Adapters are discovered from scripts/adapters/*.sh, and each adapter's output
12
+ # directory variable is read out of its own source (they vary: *_SKILLS,
13
+ # *_RULES, *_EXT_DIR), so adding an adapter needs no edit here.
14
+ #
15
+ # Usage: bash scripts/test-adapter-render.sh
16
+ set -euo pipefail
17
+ source "$(dirname "${BASH_SOURCE[0]}")/lib/skill-common.sh"
18
+ resolve_repo_root
19
+ cd "$REPO_ROOT"
20
+
21
+ PASS=0
22
+ FAIL=0
23
+ pass() { echo "PASS: $1"; PASS=$((PASS + 1)); }
24
+ fail() { echo "FAIL: $1" >&2; FAIL=$((FAIL + 1)); }
25
+
26
+ TMP_ROOT=$(mktemp -d)
27
+ trap 'rm -rf "$TMP_ROOT"' EXIT
28
+
29
+
30
+
31
+
32
+ echo "=== test-adapter-render.sh ==="
33
+
34
+ for adapter in scripts/adapters/*.sh; do
35
+ id="$(basename "$adapter" .sh)"
36
+
37
+ grep -q "^render_skill()" "$adapter" || continue
38
+
39
+ # Adapters are sourced, not executed: several (continue, omp, zed) are stubs
40
+ # with no stdin entrypoint and would silently no-op — and exit 0 — if run as
41
+ # scripts. Sourcing and calling render_skill directly is how test-adapters.sh
42
+ # drives them, and it exercises every adapter the same way.
43
+ #
44
+ # An adapter may read more than one output variable (gemini uses GEMINI_SKILLS
45
+ # and GEMINI_EXT_DIR), so point all of them at the sandbox rather than
46
+ # guessing which one matters.
47
+ mapfile -t outvars < <(grep -oE '\$\{?[A-Z][A-Z0-9_]*_(SKILLS|RULES|EXT_DIR|OUT|COMMANDS|PROMPTS|HOOKS_DIR)[:-]' "$adapter" \
48
+ | tr -d '${:-' | sort -u)
49
+ if [[ ${#outvars[@]} -eq 0 ]]; then
50
+ echo " skip: $id — no output directory variable found"
51
+ continue
52
+ fi
53
+
54
+ render_into() { # $1 = destination dir, $2 = skill name
55
+ local dir="$1" nm="$2" v
56
+ local -a envs=()
57
+ for v in "${outvars[@]}"; do envs+=("$v=$dir"); done
58
+ ( set +e
59
+ env "${envs[@]}" bash -c '
60
+ source "$1" 2>/dev/null || exit 1
61
+ IR_NAME="$2"; IR_DESCRIPTION="test desc"; IR_BODY="test body"
62
+ IR_DESC_ESCAPED="test desc"; IR_MODEL=""
63
+ declare -f render_skill >/dev/null || exit 1
64
+ render_skill
65
+ ' _ "$PWD/$adapter" "$nm" >/dev/null 2>&1 )
66
+ }
67
+
68
+ dest="$TMP_ROOT/$id"
69
+ mkdir -p "$dest"
70
+ if render_into "$dest" "test-skill" && [[ -n "$(find "$dest" -mindepth 1 2>/dev/null)" ]]; then
71
+ pass "$id: render_skill writes an artifact from a SkillIR"
72
+ else
73
+ fail "$id: render_skill produced no artifact (${outvars[*]})"
74
+ fi
75
+
76
+ # Path traversal must be refused — this is the security assertion the
77
+ # per-target scripts carried and nothing else covers.
78
+ #
79
+ # Each adapter gets its own sandbox parent so the escape probe is isolated:
80
+ # ../escape from <sandbox>/out lands in <sandbox>, and a single shared parent
81
+ # would make one adapter's artifact fail every later adapter.
82
+ sandbox="$TMP_ROOT/sandbox-$id"
83
+ mkdir -p "$sandbox/out"
84
+ if render_into "$sandbox/out" "../escape"; then
85
+ fail "$id: accepted a path-traversal skill name"
86
+ else
87
+ pass "$id: rejects path traversal in skill name"
88
+ fi
89
+ if [[ -e "$sandbox/escape" ]]; then
90
+ fail "$id: path traversal escaped into $sandbox"
91
+ else
92
+ pass "$id: traversal wrote nothing outside the destination"
93
+ fi
94
+
95
+ # Hook bundle + guard behaviour, only where the target ships hooks.
96
+ hookdir="scripts/hooks/$id"
97
+ guard="$hookdir/pre-tool-git-guard.sh"
98
+ if [[ -f "$guard" ]]; then
99
+ out="$(echo '{"tool_input":{"command":"git push --force origin main"}}' \
100
+ | bash "$guard" 2>/dev/null || true)"
101
+ grep -q 'block' <<<"$out" \
102
+ && pass "$id: pre-tool guard blocks a dangerous git command" \
103
+ || fail "$id: pre-tool guard did not block git push --force"
104
+ fi
105
+ done
106
+
107
+ # The generic adapter-contract runner stays the source of truth for
108
+ # render_skill/wire_context wiring; assert it is green rather than restating it.
109
+ if bash scripts/test-adapters.sh 2>&1 | grep -q '0 failed'; then
110
+ pass "test-adapters.sh reports 0 failed across the registry"
111
+ else
112
+ fail "test-adapters.sh reported failures"
113
+ fi
114
+
115
+ echo "test-adapter-render: $PASS passed, $FAIL failed"
116
+ [[ "$FAIL" -eq 0 ]] || exit 1
@@ -40,8 +40,13 @@ test_adapter() {
40
40
  [[ -f "$adapter_file" ]] || { ta_fail "$id: adapter missing"; return; }
41
41
  ta_pass "$id: exists"
42
42
 
43
+ # </dev/null is load-bearing. The caller feeds the target list into a
44
+ # `while read` loop, so a sourced adapter inherits it on fd 0 — and every
45
+ # adapter ends in a main block that reads stdin. agy.sh was consuming the
46
+ # remaining target list and running render_skill with an empty IR_NAME, so
47
+ # this "registry-driven" runner silently tested exactly one adapter.
43
48
  # shellcheck source=/dev/null
44
- source "$adapter_file" 2>/dev/null && ta_pass "$id: sourceable" || { ta_fail "$id: source error"; return; }
49
+ source "$adapter_file" </dev/null 2>/dev/null && ta_pass "$id: sourceable" || { ta_fail "$id: source error"; return; }
45
50
 
46
51
  local has_skill has_context mode
47
52
  has_skill=$(yq -r ".targets[] | select(.id==\"$id\") | .skill != null" "$TARGETS_FILE")
@@ -62,11 +67,13 @@ test_adapter() {
62
67
  # to print 5 PASS lines and report 4. Capture the status, tally in-process.
63
68
  if (
64
69
  cd "$TA_TMPDIR"
70
+ # </dev/null for the same reason as above — this subshell also inherits
71
+ # the caller's target list on fd 0.
65
72
  # shellcheck source=/dev/null
66
- source "$adapter_file"
73
+ source "$adapter_file" </dev/null
67
74
  wire_context >/dev/null 2>&1 || true
68
75
  wire_context >/dev/null 2>&1
69
- ); then
76
+ ) </dev/null; then
70
77
  ta_pass "$id: idempotent wire_context"
71
78
  else
72
79
  ta_fail "$id: wire_context failed"