showdar-skills 0.2.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 (304) hide show
  1. package/LICENSE +9 -0
  2. package/README.md +322 -0
  3. package/bin/showdar.js +118 -0
  4. package/bundles/bugfix.yaml +4 -0
  5. package/bundles/design.yaml +4 -0
  6. package/bundles/feature.yaml +4 -0
  7. package/bundles/release.yaml +4 -0
  8. package/bundles/upgrade.yaml +4 -0
  9. package/commands/opencode/showdar/build.md +6 -0
  10. package/commands/opencode/showdar/debug.md +6 -0
  11. package/commands/opencode/showdar/design.md +6 -0
  12. package/commands/opencode/showdar/git.md +6 -0
  13. package/commands/opencode/showdar/ops.md +7 -0
  14. package/commands/opencode/showdar/plan.md +6 -0
  15. package/commands/opencode/showdar/quality.md +7 -0
  16. package/commands/opencode/showdar/recover.md +6 -0
  17. package/commands/opencode/showdar/requirements.md +7 -0
  18. package/commands/opencode/showdar/review.md +6 -0
  19. package/commands/opencode/showdar/security.md +7 -0
  20. package/commands/opencode/showdar/ship.md +6 -0
  21. package/commands/opencode/showdar/skill.md +6 -0
  22. package/commands/opencode/showdar/test.md +6 -0
  23. package/commands/opencode/showdar/understand.md +6 -0
  24. package/commands/opencode/showdar/upgrade.md +6 -0
  25. package/engine/csv.mjs +45 -0
  26. package/engine/detect-stack.mjs +48 -0
  27. package/engine/rank.mjs +40 -0
  28. package/engine/search.mjs +20 -0
  29. package/package.json +28 -0
  30. package/profiles/backend.json +1 -0
  31. package/profiles/developer.json +1 -0
  32. package/profiles/full.json +1 -0
  33. package/profiles/minimal.json +1 -0
  34. package/profiles/product.json +1 -0
  35. package/profiles/qa.json +1 -0
  36. package/router/conflicts.yaml +50 -0
  37. package/router/skill-map.yaml +54 -0
  38. package/router/triggers.yaml +30 -0
  39. package/skills/showdar-build/SKILL.md +154 -0
  40. package/skills/showdar-build/data/change-smells.csv +24 -0
  41. package/skills/showdar-build/data/index.json +14 -0
  42. package/skills/showdar-build/examples/change-surface.md +18 -0
  43. package/skills/showdar-build/references/architecture-boundaries.md +3 -0
  44. package/skills/showdar-build/references/error-handling.md +3 -0
  45. package/skills/showdar-build/references/feature-flags.md +3 -0
  46. package/skills/showdar-build/references/minimal-change.md +3 -0
  47. package/skills/showdar-build/scripts/change-surface.mjs +5 -0
  48. package/skills/showdar-build/stacks/dart.md +3 -0
  49. package/skills/showdar-build/stacks/flutter.md +3 -0
  50. package/skills/showdar-build/stacks/kotlin.md +3 -0
  51. package/skills/showdar-build/stacks/nextjs.md +3 -0
  52. package/skills/showdar-build/stacks/node-fastify.md +3 -0
  53. package/skills/showdar-build/stacks/node-nestjs.md +3 -0
  54. package/skills/showdar-build/stacks/react-native.md +3 -0
  55. package/skills/showdar-build/stacks/react.md +3 -0
  56. package/skills/showdar-build/stacks/rust-tauri.md +3 -0
  57. package/skills/showdar-build/stacks/swift.md +3 -0
  58. package/skills/showdar-build/stacks/typescript.md +3 -0
  59. package/skills/showdar-debug/SKILL.md +179 -0
  60. package/skills/showdar-debug/data/failure-patterns.csv +34 -0
  61. package/skills/showdar-debug/data/index.json +14 -0
  62. package/skills/showdar-debug/examples/evidence-log.md +19 -0
  63. package/skills/showdar-debug/references/async-races.md +3 -0
  64. package/skills/showdar-debug/references/build-failures.md +3 -0
  65. package/skills/showdar-debug/references/hypothesis-driven-debugging.md +3 -0
  66. package/skills/showdar-debug/references/memory.md +3 -0
  67. package/skills/showdar-debug/references/networking.md +3 -0
  68. package/skills/showdar-debug/references/performance.md +3 -0
  69. package/skills/showdar-debug/scripts/collect-context.mjs +8 -0
  70. package/skills/showdar-debug/scripts/lib/detect-stack.mjs +48 -0
  71. package/skills/showdar-debug/stacks/android.md +21 -0
  72. package/skills/showdar-debug/stacks/docker.md +21 -0
  73. package/skills/showdar-debug/stacks/flutter.md +21 -0
  74. package/skills/showdar-debug/stacks/ios.md +21 -0
  75. package/skills/showdar-debug/stacks/nextjs.md +21 -0
  76. package/skills/showdar-debug/stacks/node.md +21 -0
  77. package/skills/showdar-debug/stacks/react-native.md +21 -0
  78. package/skills/showdar-debug/stacks/react.md +21 -0
  79. package/skills/showdar-debug/stacks/tauri.md +21 -0
  80. package/skills/showdar-design/SKILL.md +179 -0
  81. package/skills/showdar-design/data/accessibility.csv +16 -0
  82. package/skills/showdar-design/data/colors.csv +13 -0
  83. package/skills/showdar-design/data/components.csv +20 -0
  84. package/skills/showdar-design/data/index.json +25 -0
  85. package/skills/showdar-design/data/motion.csv +13 -0
  86. package/skills/showdar-design/data/products.csv +19 -0
  87. package/skills/showdar-design/data/stacks/compose.csv +9 -0
  88. package/skills/showdar-design/data/stacks/flutter.csv +9 -0
  89. package/skills/showdar-design/data/stacks/html-tailwind.csv +9 -0
  90. package/skills/showdar-design/data/stacks/nextjs.csv +9 -0
  91. package/skills/showdar-design/data/stacks/nuxt.csv +9 -0
  92. package/skills/showdar-design/data/stacks/react-native.csv +9 -0
  93. package/skills/showdar-design/data/stacks/react.csv +9 -0
  94. package/skills/showdar-design/data/stacks/svelte.csv +9 -0
  95. package/skills/showdar-design/data/stacks/swiftui.csv +9 -0
  96. package/skills/showdar-design/data/stacks/tauri.csv +9 -0
  97. package/skills/showdar-design/data/stacks/vue.csv +9 -0
  98. package/skills/showdar-design/data/styles.csv +13 -0
  99. package/skills/showdar-design/data/typography.csv +13 -0
  100. package/skills/showdar-design/data/ui-patterns.csv +19 -0
  101. package/skills/showdar-design/examples/design-brief.md +19 -0
  102. package/skills/showdar-design/references/accessibility.md +5 -0
  103. package/skills/showdar-design/references/anti-ai-ui.md +5 -0
  104. package/skills/showdar-design/references/architecture.md +12 -0
  105. package/skills/showdar-design/references/interaction.md +5 -0
  106. package/skills/showdar-design/references/layout.md +5 -0
  107. package/skills/showdar-design/references/release-readiness.md +12 -0
  108. package/skills/showdar-design/references/responsive.md +5 -0
  109. package/skills/showdar-design/references/security.md +12 -0
  110. package/skills/showdar-design/references/visual-hierarchy.md +7 -0
  111. package/skills/showdar-design/scripts/lib/csv.mjs +40 -0
  112. package/skills/showdar-design/scripts/lib/rank.mjs +35 -0
  113. package/skills/showdar-design/scripts/lib/search.mjs +20 -0
  114. package/skills/showdar-design/scripts/search.mjs +38 -0
  115. package/skills/showdar-design/stacks/flutter.md +13 -0
  116. package/skills/showdar-design/stacks/html-tailwind.md +12 -0
  117. package/skills/showdar-design/stacks/jetpack-compose.md +13 -0
  118. package/skills/showdar-design/stacks/nextjs.md +12 -0
  119. package/skills/showdar-design/stacks/nuxt.md +11 -0
  120. package/skills/showdar-design/stacks/react-native.md +13 -0
  121. package/skills/showdar-design/stacks/react.md +12 -0
  122. package/skills/showdar-design/stacks/svelte.md +11 -0
  123. package/skills/showdar-design/stacks/swiftui.md +12 -0
  124. package/skills/showdar-design/stacks/tauri.md +12 -0
  125. package/skills/showdar-design/stacks/vue.md +12 -0
  126. package/skills/showdar-git/SKILL.md +291 -0
  127. package/skills/showdar-git/data/git-workflows.csv +7 -0
  128. package/skills/showdar-git/data/index.json +14 -0
  129. package/skills/showdar-git/examples/commit-task-only.md +15 -0
  130. package/skills/showdar-git/examples/conflict-stop.md +7 -0
  131. package/skills/showdar-git/examples/explicit-push.md +7 -0
  132. package/skills/showdar-git/examples/feature-merge-no-push.md +13 -0
  133. package/skills/showdar-git/references/operation-safety.md +34 -0
  134. package/skills/showdar-git/scripts/inspect-git-state.mjs +53 -0
  135. package/skills/showdar-ops/SKILL.md +160 -0
  136. package/skills/showdar-ops/data/index.json +14 -0
  137. package/skills/showdar-ops/data/ops-patterns.csv +12 -0
  138. package/skills/showdar-ops/examples/explicit-deployment.md +5 -0
  139. package/skills/showdar-ops/examples/fix-existing-ci.md +5 -0
  140. package/skills/showdar-ops/examples/inspect-ci-readonly.md +7 -0
  141. package/skills/showdar-ops/examples/rollback-plan.md +5 -0
  142. package/skills/showdar-ops/examples/staging-plan.md +5 -0
  143. package/skills/showdar-ops/references/ci-cd.md +5 -0
  144. package/skills/showdar-ops/references/containers.md +5 -0
  145. package/skills/showdar-ops/references/deployment.md +5 -0
  146. package/skills/showdar-ops/references/desktop-release.md +3 -0
  147. package/skills/showdar-ops/references/environments.md +5 -0
  148. package/skills/showdar-ops/references/mobile-release.md +3 -0
  149. package/skills/showdar-ops/references/observability.md +5 -0
  150. package/skills/showdar-ops/references/rollback.md +5 -0
  151. package/skills/showdar-ops/scripts/inspect-ops-state.mjs +54 -0
  152. package/skills/showdar-plan/SKILL.md +159 -0
  153. package/skills/showdar-plan/data/index.json +14 -0
  154. package/skills/showdar-plan/data/planning-checklists.csv +25 -0
  155. package/skills/showdar-plan/examples/feature-plan.md +19 -0
  156. package/skills/showdar-plan/references/architecture.md +5 -0
  157. package/skills/showdar-plan/references/requirements.md +5 -0
  158. package/skills/showdar-plan/references/risk-analysis.md +5 -0
  159. package/skills/showdar-plan/references/scope.md +5 -0
  160. package/skills/showdar-plan/references/task-decomposition.md +5 -0
  161. package/skills/showdar-plan/scripts/collect-planning-context.mjs +9 -0
  162. package/skills/showdar-plan/scripts/lib/detect-stack.mjs +48 -0
  163. package/skills/showdar-plan/stacks/backend.md +3 -0
  164. package/skills/showdar-plan/stacks/mobile.md +3 -0
  165. package/skills/showdar-plan/stacks/web.md +3 -0
  166. package/skills/showdar-quality/SKILL.md +166 -0
  167. package/skills/showdar-quality/data/index.json +14 -0
  168. package/skills/showdar-quality/data/quality-patterns.csv +11 -0
  169. package/skills/showdar-quality/references/qa-guide.md +20 -0
  170. package/skills/showdar-recover/SKILL.md +164 -0
  171. package/skills/showdar-recover/data/index.json +14 -0
  172. package/skills/showdar-recover/data/recovery-signals.csv +23 -0
  173. package/skills/showdar-recover/examples/recovery-report.md +18 -0
  174. package/skills/showdar-recover/references/failed-runs.md +3 -0
  175. package/skills/showdar-recover/references/interrupted-session.md +3 -0
  176. package/skills/showdar-recover/references/merge-conflicts.md +3 -0
  177. package/skills/showdar-recover/references/partial-implementation.md +3 -0
  178. package/skills/showdar-recover/scripts/inspect-state.mjs +5 -0
  179. package/skills/showdar-requirements/SKILL.md +172 -0
  180. package/skills/showdar-requirements/data/index.json +14 -0
  181. package/skills/showdar-requirements/data/requirements-patterns.csv +11 -0
  182. package/skills/showdar-requirements/references/analysis-guide.md +30 -0
  183. package/skills/showdar-review/SKILL.md +155 -0
  184. package/skills/showdar-review/data/index.json +14 -0
  185. package/skills/showdar-review/data/review-patterns.csv +27 -0
  186. package/skills/showdar-review/examples/finding.md +16 -0
  187. package/skills/showdar-review/references/architecture.md +3 -0
  188. package/skills/showdar-review/references/correctness.md +3 -0
  189. package/skills/showdar-review/references/maintainability.md +3 -0
  190. package/skills/showdar-review/references/performance.md +3 -0
  191. package/skills/showdar-review/references/security.md +3 -0
  192. package/skills/showdar-review/references/testing.md +3 -0
  193. package/skills/showdar-review/scripts/collect-diff.mjs +5 -0
  194. package/skills/showdar-review/stacks/android.md +3 -0
  195. package/skills/showdar-review/stacks/flutter.md +3 -0
  196. package/skills/showdar-review/stacks/ios.md +3 -0
  197. package/skills/showdar-review/stacks/nextjs.md +3 -0
  198. package/skills/showdar-review/stacks/node-backend.md +3 -0
  199. package/skills/showdar-review/stacks/react-native.md +3 -0
  200. package/skills/showdar-review/stacks/react.md +3 -0
  201. package/skills/showdar-review/stacks/swift-kotlin.md +3 -0
  202. package/skills/showdar-review/stacks/typescript.md +3 -0
  203. package/skills/showdar-security/SKILL.md +169 -0
  204. package/skills/showdar-security/data/index.json +14 -0
  205. package/skills/showdar-security/data/security-patterns.csv +13 -0
  206. package/skills/showdar-security/examples/api-authorization-review.md +9 -0
  207. package/skills/showdar-security/examples/mobile-deeplink-review.md +7 -0
  208. package/skills/showdar-security/examples/secret-exposure-review.md +5 -0
  209. package/skills/showdar-security/examples/threat-model-open-assumptions.md +11 -0
  210. package/skills/showdar-security/references/authz-secrets.md +7 -0
  211. package/skills/showdar-security/references/mobile-security.md +7 -0
  212. package/skills/showdar-security/references/supply-chain.md +5 -0
  213. package/skills/showdar-security/references/threat-modeling.md +12 -0
  214. package/skills/showdar-security/scripts/inspect-security-surface.mjs +47 -0
  215. package/skills/showdar-ship/SKILL.md +234 -0
  216. package/skills/showdar-ship/data/index.json +14 -0
  217. package/skills/showdar-ship/data/release-checks.csv +28 -0
  218. package/skills/showdar-ship/examples/release-report.md +25 -0
  219. package/skills/showdar-ship/references/migrations.md +12 -0
  220. package/skills/showdar-ship/references/post-deploy.md +12 -0
  221. package/skills/showdar-ship/references/release-readiness.md +13 -0
  222. package/skills/showdar-ship/references/rollback.md +12 -0
  223. package/skills/showdar-ship/references/secrets.md +3 -0
  224. package/skills/showdar-ship/scripts/detect-targets.mjs +5 -0
  225. package/skills/showdar-ship/scripts/lib/detect-stack.mjs +48 -0
  226. package/skills/showdar-ship/scripts/release-check.mjs +6 -0
  227. package/skills/showdar-ship/stacks/android.md +33 -0
  228. package/skills/showdar-ship/stacks/docker.md +30 -0
  229. package/skills/showdar-ship/stacks/electron.md +7 -0
  230. package/skills/showdar-ship/stacks/ios.md +34 -0
  231. package/skills/showdar-ship/stacks/nextjs.md +30 -0
  232. package/skills/showdar-ship/stacks/node-backend.md +37 -0
  233. package/skills/showdar-ship/stacks/orchestration.md +12 -0
  234. package/skills/showdar-ship/stacks/tauri.md +35 -0
  235. package/skills/showdar-ship/stacks/web.md +35 -0
  236. package/skills/showdar-test/SKILL.md +164 -0
  237. package/skills/showdar-test/data/index.json +14 -0
  238. package/skills/showdar-test/data/test-strategy.csv +22 -0
  239. package/skills/showdar-test/examples/regression.md +14 -0
  240. package/skills/showdar-test/references/e2e.md +3 -0
  241. package/skills/showdar-test/references/integration.md +3 -0
  242. package/skills/showdar-test/references/regression.md +3 -0
  243. package/skills/showdar-test/references/test-smells.md +3 -0
  244. package/skills/showdar-test/references/unit.md +3 -0
  245. package/skills/showdar-test/scripts/detect-test-tools.mjs +6 -0
  246. package/skills/showdar-test/stacks/android-testing.md +13 -0
  247. package/skills/showdar-test/stacks/detox.md +13 -0
  248. package/skills/showdar-test/stacks/flutter-test.md +13 -0
  249. package/skills/showdar-test/stacks/integration-test.md +13 -0
  250. package/skills/showdar-test/stacks/jest.md +13 -0
  251. package/skills/showdar-test/stacks/playwright.md +13 -0
  252. package/skills/showdar-test/stacks/react-native-testing.md +17 -0
  253. package/skills/showdar-test/stacks/react-testing-library.md +13 -0
  254. package/skills/showdar-test/stacks/vitest.md +13 -0
  255. package/skills/showdar-test/stacks/xctest.md +13 -0
  256. package/skills/showdar-understand/SKILL.md +159 -0
  257. package/skills/showdar-understand/data/architecture-signals.csv +28 -0
  258. package/skills/showdar-understand/data/index.json +14 -0
  259. package/skills/showdar-understand/examples/repository-audit.md +17 -0
  260. package/skills/showdar-understand/references/architecture-signals.md +25 -0
  261. package/skills/showdar-understand/references/dependency-analysis.md +9 -0
  262. package/skills/showdar-understand/references/repository-analysis.md +24 -0
  263. package/skills/showdar-understand/scripts/inspect-repo.mjs +16 -0
  264. package/skills/showdar-understand/scripts/lib/detect-stack.mjs +48 -0
  265. package/skills/showdar-understand/stacks/android.md +3 -0
  266. package/skills/showdar-understand/stacks/backend.md +5 -0
  267. package/skills/showdar-understand/stacks/electron.md +3 -0
  268. package/skills/showdar-understand/stacks/fastify.md +3 -0
  269. package/skills/showdar-understand/stacks/flutter.md +3 -0
  270. package/skills/showdar-understand/stacks/ios.md +3 -0
  271. package/skills/showdar-understand/stacks/mobile.md +5 -0
  272. package/skills/showdar-understand/stacks/nestjs.md +3 -0
  273. package/skills/showdar-understand/stacks/nextjs.md +3 -0
  274. package/skills/showdar-understand/stacks/node.md +3 -0
  275. package/skills/showdar-understand/stacks/react-native.md +3 -0
  276. package/skills/showdar-understand/stacks/react.md +3 -0
  277. package/skills/showdar-understand/stacks/tauri.md +3 -0
  278. package/skills/showdar-upgrade/SKILL.md +162 -0
  279. package/skills/showdar-upgrade/data/compatibility-checklist.csv +24 -0
  280. package/skills/showdar-upgrade/data/index.json +14 -0
  281. package/skills/showdar-upgrade/examples/upgrade-report.md +18 -0
  282. package/skills/showdar-upgrade/references/breaking-changes.md +3 -0
  283. package/skills/showdar-upgrade/references/compatibility.md +3 -0
  284. package/skills/showdar-upgrade/references/dependency-resolution.md +3 -0
  285. package/skills/showdar-upgrade/references/migration-strategy.md +3 -0
  286. package/skills/showdar-upgrade/references/rollback.md +3 -0
  287. package/skills/showdar-upgrade/scripts/inspect-dependencies.mjs +6 -0
  288. package/skills/showdar-upgrade/scripts/lib/detect-stack.mjs +48 -0
  289. package/skills/showdar-upgrade/stacks/android.md +15 -0
  290. package/skills/showdar-upgrade/stacks/cocoapods-spm.md +17 -0
  291. package/skills/showdar-upgrade/stacks/expo.md +17 -0
  292. package/skills/showdar-upgrade/stacks/flutter.md +17 -0
  293. package/skills/showdar-upgrade/stacks/gradle.md +13 -0
  294. package/skills/showdar-upgrade/stacks/ios.md +15 -0
  295. package/skills/showdar-upgrade/stacks/nextjs.md +17 -0
  296. package/skills/showdar-upgrade/stacks/node.md +17 -0
  297. package/skills/showdar-upgrade/stacks/react-native.md +17 -0
  298. package/skills/showdar-upgrade/stacks/react.md +17 -0
  299. package/skills/showdar-upgrade/stacks/tauri-rust.md +15 -0
  300. package/src/adapters.js +44 -0
  301. package/src/catalog.js +57 -0
  302. package/src/project.js +287 -0
  303. package/src/runtime.js +9 -0
  304. package/src/validate.js +310 -0
@@ -0,0 +1,47 @@
1
+ #!/usr/bin/env node
2
+ import { readdir, readFile, stat } from 'node:fs/promises';
3
+ import path from 'node:path';
4
+
5
+ const root = path.resolve(process.argv[2] ?? process.cwd());
6
+
7
+ function add(groups, group, relative) {
8
+ groups[group].push(relative || '.');
9
+ }
10
+
11
+ function classify(relative, groups) {
12
+ const name = path.basename(relative).toLowerCase();
13
+ const normalized = relative.toLowerCase().replaceAll(path.sep, '/');
14
+ if (/^\.env(?:\.|$)/.test(name)) add(groups, 'envFiles', relative);
15
+ if (/^(package(-lock)?\.json|yarn\.lock|pnpm-lock\.yaml|bun\.lockb?|composer\.lock|go\.sum|cargo\.lock)$/.test(name)) add(groups, 'dependencyManifests', relative);
16
+ if (/(auth|security|permission|token|session|crypto|oauth|login|biometric|deep[-_ ]?link|webview|key|cert|credential)/.test(name)) add(groups, 'securitySensitiveFiles', relative);
17
+ if (/\.(ya?ml|json|toml|xml|plist|conf|config)$/.test(name)) add(groups, 'configurationFiles', relative);
18
+ if (/(^|\/)(android|ios|mobile)(\/|$)/.test(normalized)) add(groups, 'platformSecurityFiles', relative);
19
+ }
20
+
21
+ async function walk(directory, relative = '', depth = 0, groups = {
22
+ envFiles: [], dependencyManifests: [], securitySensitiveFiles: [], configurationFiles: [], platformSecurityFiles: [],
23
+ }) {
24
+ if (depth > 4) return groups;
25
+ let entries = [];
26
+ try { entries = await readdir(directory, { withFileTypes: true }); } catch { return groups; }
27
+ entries.sort((a, b) => a.name.localeCompare(b.name));
28
+ for (const entry of entries) {
29
+ if (entry.name === 'node_modules' || entry.name === '.git') continue;
30
+ const childRelative = relative ? path.join(relative, entry.name) : entry.name;
31
+ const child = path.join(directory, entry.name);
32
+ if (entry.isDirectory()) await walk(child, childRelative, depth + 1, groups);
33
+ else classify(childRelative, groups);
34
+ }
35
+ return groups;
36
+ }
37
+
38
+ try {
39
+ const info = await stat(root);
40
+ if (!info.isDirectory()) throw new Error('target must be a directory');
41
+ const groups = await walk(root);
42
+ for (const values of Object.values(groups)) values.sort();
43
+ console.log(JSON.stringify({ root, ...groups }, null, 2));
44
+ } catch (error) {
45
+ console.error(`inspect-security-surface: ${error.message}`);
46
+ process.exitCode = 1;
47
+ }
@@ -0,0 +1,234 @@
1
+ ---
2
+ name: showdar-ship
3
+ description: Use when checking whether a change, artifact, or release is ready for handoff or external release.
4
+ ---
5
+
6
+ # Showdar Ship
7
+
8
+ ## Purpose
9
+
10
+ `showdar-ship` is a delivery-verification skill. Its normal job is to decide
11
+ whether the requested change is safe to hand off, merge, package, publish, or
12
+ release, using fresh local evidence and repository-defined checks.
13
+
14
+ It may inspect existing release, deployment, and CI configuration as evidence.
15
+ It does not create or modify that infrastructure in its normal verification
16
+ mode. A readiness report is not an instruction to deploy.
17
+
18
+ ## When to use
19
+
20
+ - Verifying a completed change before handoff or merge.
21
+ - Assessing release readiness for a web, backend, mobile, Docker, or desktop artifact.
22
+ - Checking package/export/type/build metadata before a requested handoff.
23
+ - Reviewing existing release or CI configuration for canonical commands and gaps.
24
+ - Verifying an explicitly requested deployment, store submission, or release execution.
25
+
26
+ ## When not to use
27
+
28
+ - Routine implementation, debugging, code review, or test-strategy work.
29
+ - Creating CI/CD, deployment, release, secrets, or environment infrastructure.
30
+ - Treating “ship”, “release checklist”, or “is this ready?” as permission to deploy or publish.
31
+ - Requiring a deployed endpoint when local artifact and repository checks answer the request.
32
+
33
+ ## Inputs and assumptions
34
+
35
+ - The requested outcome and whether it explicitly names release/deployment execution.
36
+ - Current Git/worktree state and the exact change or artifact under review.
37
+ - Repository-owned test, typecheck, lint, build, package, and smoke commands.
38
+ - Existing release/CI configuration may be inspected read-only to discover commands.
39
+ - Secret, signing, store, deployment, and production access remains external; never request values.
40
+ - `scripts/detect-targets.mjs` and `scripts/release-check.mjs` provide read-only preflight signals.
41
+
42
+ ## Non-negotiable rules
43
+
44
+ - Default mode is delivery verification, not deployment execution.
45
+ - No readiness claim without fresh checks appropriate to the requested change.
46
+ - Ordinary Ship verification does not require CI/CD, a hosted provider, or a deployed endpoint.
47
+ - Existing CI is read-only by default: inspect it for commands or inconsistencies, but do not modify it.
48
+ - A deployed endpoint is not required for ordinary ship verification. Report external checks as unavailable when they are outside the request.
49
+ - Never print, commit, embed, or copy secret values into artifacts, logs, or reports.
50
+ - Publishing, deploying, tagging, pushing, store submission, production mutation, and destructive migration require explicit user intent and any separate approval required by repository policy.
51
+ - Keep release-specific metadata, symbols, mappings, migration compatibility, and rollback evidence when they are relevant to the requested artifact.
52
+
53
+ ## Hard scope boundary
54
+
55
+ Unless the current user/task explicitly requests deployment or release execution,
56
+ `showdar-ship` MUST NOT:
57
+
58
+ - create or modify `.github/workflows/**`;
59
+ - create GitHub Actions, CI/CD pipelines, or release automation;
60
+ - configure deployment providers, coverage/SaaS CI services, branch protection, or environment/secrets infrastructure;
61
+ - add Docker solely for CI or deployment;
62
+ - deploy anything, publish packages/apps, or change production infrastructure.
63
+
64
+ `.github/workflows/**` is outside normal Ship mutation scope even when an
65
+ existing workflow is failing. An explicit CI/CD task must be routed and scoped
66
+ as that task before any CI change is proposed.
67
+
68
+ ## Explicit intent gate
69
+
70
+ Words such as “ship”, “release-ready”, “prepare a checklist”, “handoff”, or
71
+ “verify” select verification mode. Execution mode is activated only when the
72
+ request explicitly names an action, target, and release/deployment context,
73
+ such as “deploy this service to staging”, “publish this package”, “submit this
74
+ build to TestFlight”, or “create the GitHub Actions workflow”.
75
+
76
+ Only when explicit deployment or release-execution intent exists may the skill
77
+ prepare execution-specific commands or load `references/post-deploy.md`,
78
+ `references/rollback.md`, or rollout guidance. Even then, describe the command
79
+ and its risk before running it, and stop for any required approval.
80
+
81
+ ## Existing CI is read-only
82
+
83
+ If `.github/workflows/**`, `.gitlab-ci.yml`, `Jenkinsfile`, or another CI file
84
+ already exists:
85
+
86
+ Inspect existing CI configuration without modifying it.
87
+
88
+ - read it to discover canonical test/build/package commands and target assumptions;
89
+ - compare it with local scripts and report drift, missing coverage, or failures;
90
+ - do not edit, add, delete, enable, or “repair” the CI file in ordinary Ship mode;
91
+ - do not infer that CI must exist, must pass, or must be recreated for local readiness.
92
+
93
+ ## Workflow
94
+
95
+ ### Phase 1 — classify request and scope
96
+
97
+ - Read the exact request and classify it as verification or explicit execution.
98
+ - Record the target artifact/platform only when relevant.
99
+ - If intent is ambiguous, stay in verification mode and report the missing decision.
100
+
101
+ ### Phase 2 — inspect repository state
102
+
103
+ - Run `git status`, inspect the requested diff, and confirm the active branch.
104
+ - Identify repository-owned scripts from `package.json`, Makefiles, task runners, and existing CI configuration without changing them.
105
+ - Use read-only target detection when platform selection is unclear.
106
+
107
+ ### Phase 3 — run local readiness checks
108
+
109
+ Run the smallest relevant set of existing commands:
110
+
111
+ - focused tests and the repository test command;
112
+ - typecheck, analyzer, and lint when configured;
113
+ - production/release build or package/export validation when the artifact is in scope;
114
+ - install, smoke, API, or native checks that can run locally;
115
+ - version, build number, changelog, package exports, and generated-file checks when relevant.
116
+
117
+ Do not add a workflow, hosted service, deployed endpoint, or production secret
118
+ just to obtain one of these checks.
119
+
120
+ ### Phase 4 — inspect platform guidance
121
+
122
+ - Web/static web -> `stacks/web.md`.
123
+ - Next.js -> `stacks/nextjs.md` plus applicable web checks.
124
+ - Node backend -> `stacks/node-backend.md`.
125
+ - Docker -> `stacks/docker.md`.
126
+ - iOS -> `stacks/ios.md`.
127
+ - Android -> `stacks/android.md`.
128
+ - Tauri/desktop -> `stacks/tauri.md`.
129
+ - Container orchestration -> `stacks/orchestration.md` only when the request explicitly concerns that execution surface.
130
+
131
+ Keep platform checks focused on evidence that can be gathered locally. Store,
132
+ provider, deployed-service, and production-observability checks are external
133
+ unless the request explicitly asks for their verification.
134
+
135
+ ### Phase 5 — optional explicit execution branch
136
+
137
+ When the explicit intent gate is satisfied, identify the exact command, target,
138
+ credentials boundary, irreversible effects, rollout/rollback constraints, and
139
+ post-execution evidence before acting. Load the execution references only for
140
+ that branch. Do not convert a checklist request into execution permission.
141
+
142
+ ### Phase 6 — readiness report
143
+
144
+ Report passed, failed, blocked, and unverified checks. Distinguish local proof
145
+ from external proof. State whether execution was requested and whether any
146
+ execution occurred. Do not call a change ready merely because a workflow is
147
+ green or an upload command succeeded.
148
+
149
+ ## Decision points
150
+
151
+ - Ordinary code/package change? Verify local scope, tests, static checks, build, and exports; no endpoint or CI change is needed.
152
+ - Existing CI found? Inspect commands and report drift; keep it unchanged.
153
+ - Static web? Inspect generated files, routes, asset paths, and cache intent; do not publish an artifact by default.
154
+ - Backend or Docker? Verify local startup, health/readiness behavior, config names, migrations, and graceful shutdown where reproducible.
155
+ - Mobile/native artifact? Verify identifiers, signing metadata, permissions, symbols, and installable output when available; store submission is separate.
156
+ - Stateful change? Assess backward compatibility and rollback safety; do not run production data mutation without explicit approval.
157
+ - Explicit deployment/release execution? Add target-specific external checks only after the intent gate is satisfied.
158
+
159
+ ## Stack detection
160
+
161
+ - Detect targets before choosing local checks, but do not turn detected CI or deployment files into a mutation request.
162
+ - Web and backend checks remain separate when a repository contains both.
163
+ - React Native and Flutter release artifacts may need native iOS/Android checks even when shared code changed only once.
164
+ - Tauri/Electron signing and updater surfaces are distinct from frontend build verification.
165
+ - Docker is an artifact/runtime layer; orchestration execution is a separate, explicit scope.
166
+ - Existing CI detection is evidence collection only.
167
+
168
+ ## Failure modes
169
+
170
+ - “CI green” treated as proof that the requested local artifact or diff is ready.
171
+ - A checklist request interpreted as deploy, publish, tag, or workflow creation permission.
172
+ - A local readiness task blocked because no deployed endpoint exists.
173
+ - Existing workflow edited to make a local test pass.
174
+ - Upload or package command treated as proof of user-visible health.
175
+ - Secrets printed while proving configuration presence.
176
+ - Migration, signing, symbol, mapping, or package metadata omitted from the evidence.
177
+ - Production behavior guessed from a development server or preview configuration.
178
+
179
+ ## Stop conditions
180
+
181
+ - Stop before creating or modifying CI/CD, deployment, release, provider, secret, environment, branch-protection, or production infrastructure unless explicitly requested.
182
+ - Stop before deploy, publish, tag, push, store submission, destructive migration, credential operation, or production mutation without explicit intent and required approval.
183
+ - Stop when the request is ordinary verification but the next proposed action would change external state.
184
+ - Stop when required local evidence is unavailable; report it as blocked or unverified instead of inventing a hosted check.
185
+ - Stop when repository instructions conflict with this playbook; user and repository instructions win.
186
+
187
+ ## Escalation conditions
188
+
189
+ - Ask for the target and explicit action when execution intent is unclear.
190
+ - Escalate signing, store, provider, production, irreversible data, and credential decisions without requesting secret values.
191
+ - Escalate CI changes as a separate task; do not smuggle them into Ship readiness work.
192
+ - Escalate missing rollback or observability evidence when the user explicitly requests deployment/release execution.
193
+
194
+ ## Verification
195
+
196
+ - Run fresh relevant local test, typecheck/analyzer, lint, build, package, export, install, and smoke commands.
197
+ - Inspect `git status` and the requested diff for scope and generated artifacts.
198
+ - Confirm package exports, public types, version/build metadata, and changelog only when relevant.
199
+ - Read existing CI/release configuration without modifying it.
200
+ - Record external endpoint, store, provider, deployment, and observability checks as unverified unless explicitly requested and actually observed.
201
+ - For explicit execution, record the exact target, artifact/version, command status, and post-execution evidence separately.
202
+
203
+ ## Output contract
204
+
205
+ - **Intent and scope** — verification or explicitly requested execution.
206
+ - **Target/artifact** — only the platform and version relevant to the request.
207
+ - **Local evidence** — commands and exact results.
208
+ - **Existing CI/release inspection** — read-only findings, if any.
209
+ - **Readiness** — ready, not ready, blocked, or unverified with reasons.
210
+ - **External checks** — clearly separated from local proof; not required for ordinary Ship verification.
211
+ - **Execution status** — not requested / not performed / performed with explicit authorization.
212
+ - **Next decision** — the smallest user decision needed, if any.
213
+
214
+ ## Anti-patterns
215
+
216
+ - Creating `.github/workflows/**` because a normal change needs verification.
217
+ - Adding CI/CD, a hosted coverage service, Docker, deployment config, or secrets infrastructure to complete a checklist.
218
+ - Auto-deploying because the user said “ship”.
219
+ - Requiring a production URL for local readiness.
220
+ - Editing existing CI when the task is only implementation, testing, review, or release-readiness assessment.
221
+ - Printing environment, signing, store, or deployment secrets.
222
+ - Claiming “deployed”, “published”, or “healthy” without observing the corresponding external state.
223
+
224
+ ## Example
225
+
226
+ User request: “Ship the current fix and tell me if it is ready.”
227
+
228
+ - Stay in verification mode: inspect the diff, run repository tests/typecheck/lint/build, inspect package or release metadata when relevant, and report readiness.
229
+ - Read an existing workflow only to find the canonical command if useful; do not create or modify CI.
230
+ - Do not require a deployed endpoint and do not deploy or publish.
231
+
232
+ User request: “Deploy this backend to staging and verify the deployed health endpoint.”
233
+
234
+ - Use the explicit execution branch, name the target and artifact, present the command/risk boundary, obtain required approval, then use `references/post-deploy.md` for the requested external verification.
@@ -0,0 +1,14 @@
1
+ {
2
+ "version": 1,
3
+ "skill": "showdar-ship",
4
+ "datasets": [
5
+ {
6
+ "file": "data/release-checks.csv",
7
+ "idField": "id",
8
+ "requiredColumns": ["id", "target", "category", "check", "critical", "evidence", "owner", "rollback_or_followup", "tags", "reference", "stack"],
9
+ "searchableFields": ["target", "category", "check", "evidence", "owner", "rollback_or_followup", "tags"],
10
+ "filterFields": ["target", "category", "critical", "stack"],
11
+ "reference": "references/release-readiness.md"
12
+ }
13
+ ]
14
+ }
@@ -0,0 +1,28 @@
1
+ id,target,category,check,critical,evidence,owner,rollback_or_followup,tags,reference,stack
2
+ web-build,web,build,release candidate build completes locally,yes,build exit code and artifact manifest,change owner,record prior artifact for explicit rollback assessment,web build,references/release-readiness.md,*
3
+ web-env,web,environment,required environment names are present without exposing values,yes,redacted config metadata and startup check,release owner,restore prior environment mapping,web environment,references/secrets.md,*
4
+ web-routes,web,smoke,critical routes and assets load in a local production-like preview,yes,authenticated and unauthenticated local smoke result,product owner,record external route failure for explicit execution review,web smoke,references/release-readiness.md,nextjs
5
+ web-cache,web,delivery,headers and cache freshness match release intent,no,response headers and local cache/revalidation evidence,change owner,record external cache action as unverified,web cache,references/release-readiness.md,*
6
+ backend-artifact,backend,build,backend artifact starts with a release-like runtime locally,yes,start log and artifact digest,change owner,record prior digest for explicit rollback assessment,backend artifact,references/release-readiness.md,node
7
+ backend-config,backend,environment,config and secret references resolve by name,yes,startup/readiness result without values,backend owner,restore prior config mapping,backend config,references/secrets.md,node
8
+ backend-migration,backend,data,migration is compatible with old and new app,yes,schema diff and compatibility analysis,change owner,document compatibility limits for explicit execution,backend migration,references/migrations.md,node
9
+ backend-health,backend,health,health and readiness checks pass in a local release-like runtime,yes,versioned response from local instance,change owner,report external health as unverified unless explicitly requested,backend health,references/release-readiness.md,node
10
+ backend-shutdown,backend,reliability,graceful shutdown drains work,yes,termination test and no dropped in-flight work,backend owner,restore prior process config,graceful shutdown,references/release-readiness.md,node
11
+ backend-observability,backend,observability,local logs metrics traces and alert assumptions identify the candidate,yes,local release marker and alert configuration check,change owner,inspect external dashboard only for explicit execution,observability,references/release-readiness.md,node
12
+ docker-build,docker,build,image builds reproducibly,yes,digest and build command output,release owner,retain prior image digest,docker image,references/release-readiness.md,docker
13
+ docker-runtime,docker,smoke,container starts expected entrypoint as non-root where practical,yes,local container smoke and health result,change owner,record prior image for explicit rollback assessment,docker runtime,references/release-readiness.md,docker
14
+ docker-secrets,docker,security,secrets are injected at runtime not baked into layers,yes,config inspection and secret scan without values,platform owner,rebuild from prior safe image,docker secrets,references/secrets.md,docker
15
+ orchestration-rollout,docker,rollout,explicit orchestration task has readiness gates and replica assumptions,yes,configuration inspection and recorded target evidence,change owner,leave cluster action for explicit execution,orchestration,references/release-readiness.md,kubernetes
16
+ orchestration-rollback,docker,rollback,explicit orchestration task has a recoverable previous image and config,yes,dry-run or recorded rollback plan,change owner,execute only after explicit approval,orchestration rollback,references/rollback.md,kubernetes
17
+ ios-version,ios,version,bundle ID and marketing/build version are deliberate,yes,archive metadata,release owner,restore prior version metadata,ios version,references/release-readiness.md,ios
18
+ ios-signing,ios,signing,scheme signing entitlements and provisioning validate,yes,archive validation result,release owner,use prior signed artifact,ios signing,references/secrets.md,ios
19
+ ios-privacy,ios,compliance,privacy manifest and usage descriptions match APIs,yes,archive/store validation,release owner,withdraw build and keep prior release,ios privacy,references/release-readiness.md,ios
20
+ ios-symbols,ios,diagnostics,dSYM and archive are retained with release identity,yes,artifact checksum and local symbol identity,change owner,retain prior symbols for explicit release recovery,ios symbols,references/release-readiness.md,ios
21
+ ios-smoke,ios,smoke,install launch login push/deep-link critical flow on a local device or simulator,yes,local device smoke result,QA owner,record TestFlight/store verification as unverified,ios smoke,references/release-readiness.md,ios
22
+ android-version,android,version,application ID versionCode and versionName are correct,yes,AAB metadata,release owner,restore prior version config,android version,references/release-readiness.md,android
23
+ android-signing,android,signing,release signing and permissions validate,yes,bundle build and signing result,release owner,use prior signed bundle,android signing,references/secrets.md,android
24
+ android-symbols,android,diagnostics,R8 mapping and native symbols are retained,yes,mapping artifact linked to candidate version,change owner,retain prior mapping for explicit release recovery,android symbols,references/release-readiness.md,android
25
+ android-smoke,android,smoke,install launch update and critical journey pass on a local device,yes,local device result,QA owner,record Play track verification as unverified,android smoke,references/release-readiness.md,android
26
+ tauri-artifact,desktop,build,Rust/frontend bundle and updater metadata are correct,yes,platform artifact and checksum,release owner,retain previous bundle,tauri artifact,references/release-readiness.md,tauri
27
+ tauri-signing,desktop,signing,desktop signing/notarization and update path validate,yes,platform verification result,release owner,serve previous signed release,tauri signing,references/secrets.md,tauri
28
+ tauri-smoke,desktop,smoke,clean-machine install launch and update smoke pass,yes,clean local environment result,QA owner,record updater-channel action for explicit execution,desktop smoke,references/release-readiness.md,tauri
@@ -0,0 +1,25 @@
1
+ # Example delivery-readiness report
2
+
3
+ Intent: verify whether the iOS candidate is ready for handoff; no store
4
+ submission or deployment was requested.
5
+
6
+ Target: iOS candidate `2.4.0 (318)`.
7
+
8
+ Local evidence: focused tests, typecheck, archive, signing, entitlements,
9
+ version/build-number, privacy strings, push/deep-link configuration, dSYM
10
+ identity, and clean-device smoke passed.
11
+
12
+ Existing CI: inspected the workflow to confirm its canonical test command;
13
+ unchanged because CI modification was outside scope.
14
+
15
+ External/unverified: App Store/TestFlight processing, production push delivery,
16
+ provider monitoring, and rollout state. These are not required for this local
17
+ readiness decision and must not be reported as passed.
18
+
19
+ Readiness: ready for the requested handoff, subject to the release owner's
20
+ separate decision about any later submission or deployment.
21
+
22
+ If the user explicitly requests TestFlight submission or deployment
23
+ verification, record the target, artifact, authorized command, processing
24
+ result, install/launch smoke, observation owner, and recovery trigger
25
+ separately. Use `references/post-deploy.md` only for that explicit scope.
@@ -0,0 +1,12 @@
1
+ # Migration readiness
2
+
3
+ Classify migrations as additive/backward-compatible, lock-heavy, backfill,
4
+ destructive, or irreversible. For a readiness assessment, inspect the schema
5
+ diff, compatibility window, lock/timeout behavior, retry/idempotency, ordering,
6
+ rollback compatibility, and abort trigger without mutating production data.
7
+
8
+ If the task explicitly requests deployment execution, the expand/migrate/contract
9
+ sequence may be evaluated: add a compatible shape, run compatible readers and
10
+ writers, backfill with observable progress, then contract after old consumers
11
+ are gone. Production data mutation still requires explicit approval and
12
+ backup/recovery evidence.
@@ -0,0 +1,12 @@
1
+ # Explicit deployment verification
2
+
3
+ Only load this reference when the task explicitly requests deployment or
4
+ release-execution verification. It is not part of ordinary delivery readiness
5
+ and does not authorize a deploy.
6
+
7
+ For that explicit scope, verify the deployed version or artifact digest,
8
+ health/readiness, critical user/API flows, logs/error rate, dependency
9
+ reachability, queue/migration state, and platform-specific distribution status.
10
+ Define a risk-appropriate observation window and abort threshold. Separate
11
+ successful upload/deploy from successful behavior, and record which external
12
+ signals remain manual or unavailable.
@@ -0,0 +1,13 @@
1
+ # Delivery readiness
2
+
3
+ Delivery readiness is a verification decision, not an execution command. Gather
4
+ fresh evidence for relevant tests, typecheck/analyzer, lint, build, package or
5
+ export output, artifact metadata, and target-specific prerequisites. Confirm
6
+ version, environment names, feature flags, migrations, secret references
7
+ without values, and observability assumptions when they are in scope.
8
+
9
+ Inspect existing CI or release configuration read-only when it helps discover
10
+ canonical commands. A deployed endpoint, provider result, store result, or
11
+ green CI run is not required for ordinary local readiness. Separate local proof
12
+ from external proof and report external checks as unverified unless the task
13
+ explicitly requests release/deployment verification.
@@ -0,0 +1,12 @@
1
+ # Rollback readiness
2
+
3
+ Use this reference to assess rollback safety; do not execute a rollback during
4
+ ordinary delivery verification. Record the previous artifact/version/digest,
5
+ schema compatibility, feature-flag state, config changes, secret references,
6
+ data irreversibility, traffic assumptions, and trigger conditions. Check that
7
+ old code can read current data and that a recovery path does not repeat a
8
+ migration.
9
+
10
+ Only an explicitly requested deployment/release-execution task may exercise the
11
+ rollback mechanics. Otherwise list the command or external check as unverified
12
+ and leave production state unchanged.
@@ -0,0 +1,3 @@
1
+ # Secrets
2
+
3
+ Never print, copy into source, or include secrets in generated artifacts, logs, screenshots, or issue text. Verify presence by variable/key name, provider metadata, or a safe startup check only. Distinguish public build configuration from server, signing, updater, and store secrets. Use platform secret stores, least privilege, rotation, and redaction. Treat a secret exposed once as compromised and escalate rotation without requesting the value.
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env node
2
+ import { detectStacks } from './lib/detect-stack.mjs'; import path from 'node:path';
3
+ const root=path.resolve(process.argv[2]??process.cwd()); const stacks=await detectStacks(root); const targets=[];
4
+ if(stacks.some(s=>['nextjs','react','vue','svelte'].includes(s)))targets.push('web'); if(stacks.some(s=>['node','fastify','nestjs'].includes(s)))targets.push('backend'); if(stacks.includes('ios'))targets.push('ios'); if(stacks.includes('android'))targets.push('android'); if(stacks.includes('tauri'))targets.push('desktop');
5
+ console.log(JSON.stringify({root,stacks,targets:[...new Set(targets)]},null,2));
@@ -0,0 +1,48 @@
1
+ import { access, readdir, readFile } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+
4
+ async function exists(target) { try { await access(target); return true; } catch { return false; } }
5
+
6
+ export async function detectStacks(projectRoot) {
7
+ const found = new Set();
8
+ try {
9
+ const names = await readdir(projectRoot);
10
+ if (names.some((name) => ['package-lock.json', 'yarn.lock', 'pnpm-lock.yaml', 'bun.lockb'].includes(name))) found.add('package-manager');
11
+ if (names.some((name) => ['pnpm-workspace.yaml', 'lerna.json', 'turbo.json', 'nx.json'].includes(name))) found.add('workspace');
12
+ if (names.some((name) => name.endsWith('.xcodeproj') || name.endsWith('.xcworkspace'))) found.add('ios');
13
+ } catch { /* inaccessible repository is reported by the caller */ }
14
+ const packageFile = path.join(projectRoot, 'package.json');
15
+ if (await exists(packageFile)) {
16
+ try {
17
+ const pkg = JSON.parse(await readFile(packageFile, 'utf8'));
18
+ const deps = { ...(pkg.dependencies ?? {}), ...(pkg.devDependencies ?? {}), ...(pkg.peerDependencies ?? {}) };
19
+ if (pkg.packageManager) found.add('package-manager');
20
+ if (pkg.workspaces) found.add('workspace');
21
+ if (deps.next) found.add('nextjs');
22
+ if (deps.react) found.add('react');
23
+ if (deps['react-native']) found.add('react-native');
24
+ if (deps.vue) found.add('vue');
25
+ if (deps.svelte) found.add('svelte');
26
+ if (deps.tailwindcss) found.add('html-tailwind');
27
+ if (deps.fastify || deps['@fastify/core']) found.add('fastify');
28
+ if (deps['@nestjs/core']) found.add('nestjs');
29
+ if (deps['@tauri-apps/api']) found.add('tauri');
30
+ if (deps.electron) found.add('electron');
31
+ if (deps.expo || deps['expo-router']) found.add('expo');
32
+ found.add('node');
33
+ } catch { /* malformed package is reported by higher-level skills */ }
34
+ }
35
+ if (await exists(path.join(projectRoot, 'pubspec.yaml'))) {
36
+ const pubspec = await readFile(path.join(projectRoot, 'pubspec.yaml'), 'utf8');
37
+ if (/\bflutter\s*:/m.test(pubspec)) found.add('flutter');
38
+ found.add('dart');
39
+ }
40
+ if (await exists(path.join(projectRoot, 'ios'))) found.add('ios');
41
+ if (await exists(path.join(projectRoot, 'android'))) found.add('android');
42
+ if (await exists(path.join(projectRoot, 'Package.swift'))) { found.add('swift'); found.add('spm'); }
43
+ if (await exists(path.join(projectRoot, 'Cargo.toml'))) found.add('rust');
44
+ if (await exists(path.join(projectRoot, 'go.mod'))) found.add('go');
45
+ if (await exists(path.join(projectRoot, 'pyproject.toml')) || await exists(path.join(projectRoot, 'requirements.txt'))) found.add('python');
46
+ if (await exists(path.join(projectRoot, '.github', 'workflows')) || await exists(path.join(projectRoot, '.gitlab-ci.yml')) || await exists(path.join(projectRoot, 'Jenkinsfile'))) found.add('ci');
47
+ return [...found].sort();
48
+ }
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env node
2
+ import { access, readFile } from 'node:fs/promises'; import path from 'node:path';
3
+ const root=path.resolve(process.argv[2]??process.cwd()); const exists=async p=>{try{await access(p);return true}catch{return false}}; const checks=[];
4
+ if(await exists(path.join(root,'package.json'))){const p=JSON.parse(await readFile(path.join(root,'package.json'),'utf8'));checks.push({check:'package version',status:p.version?'present':'missing',value:p.version??null});checks.push({check:'build script',status:p.scripts?.build?'present':'missing'});checks.push({check:'test script',status:p.scripts?.test?'present':'missing'})}
5
+ checks.push({check:'git repository',status:await exists(path.join(root,'.git'))?'present':'not-detected'}); checks.push({check:'ios project',status:await exists(path.join(root,'ios'))?'present':'not-applicable'}); checks.push({check:'android project',status:await exists(path.join(root,'android'))?'present':'not-applicable'});
6
+ console.log(JSON.stringify({root,checks,note:'Read-only preflight. It does not prove release readiness; run project verification commands and platform checks.'},null,2));
@@ -0,0 +1,33 @@
1
+ # Android delivery verification
2
+
3
+ Verify the signed release artifact locally by default. Play Console upload,
4
+ track changes, and staged rollout require explicit release-execution intent.
5
+
6
+ ## Identity, SDK, and signing
7
+
8
+ Record `applicationId`, `versionCode`, `versionName`, min/target/compile SDK, release variant, JDK/AGP/Gradle/Kotlin versions, and the exact signing configuration. Verify the keystore/alias reference and Play app identity without printing secrets. Check manifest merger output, exported components, permissions, app links, notification/push configuration, network security, and target-SDK behavior changes for the supported API range.
9
+
10
+ ## Artifact and symbols
11
+
12
+ Prefer the signed AAB for Play distribution and inspect generated APKs/splits for ABI, resource, and permission behavior. Run R8/ProGuard in the release path and retain the exact mapping file, native symbols, build ID, and artifact digest; a release crash without matching mapping cannot be diagnosed reliably. Validate version code monotonicity and any signing-key/Play App Signing constraint before upload.
13
+
14
+ ## Distribution readiness (explicit execution only)
15
+
16
+ Smoke clean install, upgrade install, process death/restore, permissions,
17
+ deep links/push, offline/reconnect, and release-only code paths locally. Play
18
+ Console upload, internal/closed tracks, staged rollout, and external crash/ANR
19
+ observation are execution-only checks. Android rollback is limited by
20
+ monotonic version codes, installed clients, data/schema changes, and track
21
+ state; record forward-fix or halt options without changing Play state by
22
+ default.
23
+
24
+ ## Wrong turns and caveats
25
+
26
+ Do not test only a debug APK, disable R8 to make a release pass, or assume emulator behavior covers ABI/OEM/API differences. Target/min SDK implications and Play policy requirements change over time; verify current requirements and the target device matrix.
27
+
28
+ ## Verification
29
+
30
+ Run tests and the release bundle task, inspect manifest/resources and signing,
31
+ install generated artifacts with `adb`, and preserve mapping/native symbols for
32
+ the candidate build. Upload/validate the AAB in a track only when explicitly
33
+ requested.
@@ -0,0 +1,30 @@
1
+ # Docker delivery verification
2
+
3
+ Build and inspect Docker locally by default. Do not add Docker, deployment
4
+ configuration, or registry/host changes to an ordinary readiness task.
5
+
6
+ ## Build an immutable artifact
7
+
8
+ Pin the base image by an approved tag/digest and record the resulting image digest. Use a multi-stage build so compilers, package-manager caches, tests, and source-only files do not enter the runtime image. Keep the build context minimal, run as a non-root UID/GID where compatible, define an explicit exec-form entrypoint, and make the target architecture (`linux/amd64`, `linux/arm64`, or both) deliberate.
9
+
10
+ ## Runtime contract
11
+
12
+ Inject secrets at runtime and verify only variable names/references, never values. Check ports, DNS/service names, writable paths, persistent volumes, time zone/CA requirements, resource limits, and PID 1 signal handling. A health check should test the service's readiness contract without depending on a permanently unavailable external system; startup ordering is not readiness. Preserve data volumes and migration order separately from image rollout.
13
+
14
+ ## Artifact and local runtime verification
15
+
16
+ Scan/build the intended image, inspect labels and entrypoint, then run it by
17
+ digest in an isolated local network with non-secret configuration. Verify health
18
+ transitions, critical smoke flow, graceful stop/restart, dependency outage,
19
+ volume ownership, and architecture-specific startup. Keep prior digest/config
20
+ as readiness evidence; read `references/rollback.md` for safety assessment and
21
+ `references/post-deploy.md` only for explicit external verification.
22
+
23
+ ## Wrong turns and edge cases
24
+
25
+ For an explicitly requested deployment, do not use a mutable `latest` tag, bake
26
+ `.env` or credentials into a layer, use `localhost` for another service, or run
27
+ as root to bypass a permissions defect. In ordinary verification, still watch
28
+ for native addon/libc mismatch, line endings, shell-form signal loss,
29
+ bind-mount masking, and a container that is “healthy” while its worker/queue
30
+ path is dead.
@@ -0,0 +1,7 @@
1
+ # Electron delivery verification
2
+
3
+ Verify renderer production assets, main/preload packaging, context isolation,
4
+ application ID/version, platform signing, update metadata, and clean-machine
5
+ install/update behavior locally. Retain symbols and previous signed artifacts.
6
+ Treat successful packaging or upload as incomplete until launch and critical IPC
7
+ flows pass; upload and updater publication require explicit execution intent.
@@ -0,0 +1,34 @@
1
+ # iOS delivery verification
2
+
3
+ Verify the archive and installable artifact locally by default. TestFlight,
4
+ App Store, signing-service, and rollout actions are separate explicit scopes.
5
+
6
+ ## Identity and signing
7
+
8
+ Record the bundle identifier, marketing version, build number, release scheme/configuration, deployment target, and archive export method. Confirm the identifier matches App Store Connect and the intended provisioning profile; certificates, distribution profiles, entitlements, capabilities, and keychain access groups must belong to the same app identity. Validate push, associated domains, background modes, Sign in with Apple, and other capabilities against the archive rather than the project editor alone.
9
+
10
+ ## Privacy and artifact evidence
11
+
12
+ Check privacy manifests, permission usage descriptions, SDK-required declarations, URL schemes, and tracking disclosures for every native dependency. Archive with release settings, retain the matching dSYM/BCSymbolMaps and exported IPA metadata, and verify bitcode/symbol expectations for the current toolchain. Do not treat a successful archive as proof that launch, permissions, deep links, push, or background behavior works on a device.
13
+
14
+ ## Distribution readiness (explicit execution only)
15
+
16
+ Run archive validation and install the exact build on a clean simulator/device
17
+ when available. Smoke first launch, upgrade from the previous version, login,
18
+ critical native capabilities, push/deep links, offline/reconnect,
19
+ background/foreground, and crash reporting. TestFlight groups, App Store
20
+ rollout, and external observation are execution-only checks; use them only when
21
+ explicitly requested. iOS rollback is constrained after users migrate local
22
+ data or distribution advances, so record recovery assumptions without
23
+ submitting or changing store state.
24
+
25
+ ## Wrong turns and caveats
26
+
27
+ Do not reuse a development profile, increment only the marketing version, or copy entitlements from another target. Signing, privacy, Xcode, SDK, and App Store rules are version-sensitive; verify current target requirements and provider status. Report store processing, phased rollout, and crash-observability checks that cannot be verified locally.
28
+
29
+ ## Verification
30
+
31
+ Run repository tests plus `xcodebuild archive`/export and validation for the
32
+ affected scheme, inspect signing/entitlements, verify dSYM UUIDs, and install
33
+ the exported artifact. Record TestFlight/store status only for an explicit
34
+ external-verification request, without exposing credentials.
@@ -0,0 +1,30 @@
1
+ # Next.js delivery verification
2
+
3
+ Default to local build and runtime verification. Do not deploy or change
4
+ provider configuration unless the task explicitly requests deployment.
5
+
6
+ ## Choose the runtime
7
+
8
+ Record Next.js version, router, Node version, output mode, hosting target, and whether each route is static, Node/serverless, or edge. Static export removes server runtime features; Node and edge deployments differ in available APIs, startup, streaming, caching, and environment access. Confirm provider support for the exact output mode before treating `next build` as deployable.
9
+
10
+ ## Build-time and runtime configuration
11
+
12
+ Classify public `NEXT_PUBLIC_*` values and server-only variables. Public values are commonly embedded during build, so changing them after deployment may require rebuilding; server variables must exist in the runtime environment. Inspect route output, middleware/runtime assignments, image/font assets, base path, redirects/headers, and source-map/secret exposure. For App Router, verify server/client boundaries, server actions, and cache/revalidation behavior in the production build.
13
+
14
+ ## Artifact and local smoke
15
+
16
+ Run the repository's tests, typecheck/lint, and `next build`; start the
17
+ production artifact with `next start` when possible. Smoke direct load and
18
+ client navigation for critical routes, auth/session, API/route handlers, image
19
+ assets, error/404 paths, and local cache behavior. Check deployed health,
20
+ logs, CDN behavior, or deployed commit/version only through the explicit
21
+ deployment-verification gate in `references/post-deploy.md`.
22
+
23
+ ## Wrong turns and caveats
24
+
25
+ Do not use a development server as release evidence, assume preview environment
26
+ variables match another environment, or add `dynamic`/`no-store` merely to
27
+ force a passing build. React/Next cache APIs, bundlers, edge support, and
28
+ provider output rules are version-sensitive; verify migration/release notes
29
+ when relevant and record prior-artifact rollback assumptions without changing
30
+ provider state.