argos-harness 0.1.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 (217) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +21 -0
  3. package/assets/agents/auditor.md +140 -0
  4. package/assets/agents/commit-pr-pilot.md +154 -0
  5. package/assets/agents/explorer.md +93 -0
  6. package/assets/agents/implementer.md +117 -0
  7. package/assets/agents/leader.md +149 -0
  8. package/assets/agents/researcher.md +89 -0
  9. package/assets/agents/review-readability.md +87 -0
  10. package/assets/agents/review-reliability.md +100 -0
  11. package/assets/agents/review-resilience.md +87 -0
  12. package/assets/agents/review-risk.md +87 -0
  13. package/assets/agents/reviewer.md +167 -0
  14. package/assets/agents/ticket-audit.md +129 -0
  15. package/assets/hooks/argos-guard-destructive.sh +127 -0
  16. package/assets/hooks/argos-quality-gate.sh +129 -0
  17. package/assets/managed/aterrizaje.md +24 -0
  18. package/assets/managed/formato-respuesta.md +21 -0
  19. package/assets/managed/identidad.md +48 -0
  20. package/assets/managed/operaciones-seguras.md +14 -0
  21. package/assets/managed/orquestacion.md +169 -0
  22. package/assets/output-styles/argos.md +71 -0
  23. package/assets/skills/ai-sdk-5/SKILL.md +230 -0
  24. package/assets/skills/angular/SKILL.md +19 -0
  25. package/assets/skills/angular/references/architecture.md +137 -0
  26. package/assets/skills/angular/references/core.md +197 -0
  27. package/assets/skills/angular/references/forms.md +115 -0
  28. package/assets/skills/angular/references/performance.md +124 -0
  29. package/assets/skills/apollo-client/SKILL.md +61 -0
  30. package/assets/skills/app-blueprint/SKILL.md +45 -0
  31. package/assets/skills/app-blueprint/assets/module-template.md +48 -0
  32. package/assets/skills/app-blueprint/assets/system-template.md +38 -0
  33. package/assets/skills/app-blueprint/references/workflow.md +101 -0
  34. package/assets/skills/app-builder/SKILL.md +43 -0
  35. package/assets/skills/app-builder/phases/0-product.md +58 -0
  36. package/assets/skills/app-builder/phases/1-scaffold.md +33 -0
  37. package/assets/skills/app-builder/phases/10-store.md +40 -0
  38. package/assets/skills/app-builder/phases/2-data.md +34 -0
  39. package/assets/skills/app-builder/phases/3-domain.md +33 -0
  40. package/assets/skills/app-builder/phases/4-ui-nav.md +32 -0
  41. package/assets/skills/app-builder/phases/5-identity.md +30 -0
  42. package/assets/skills/app-builder/phases/6-polish.md +34 -0
  43. package/assets/skills/app-builder/phases/7-brand.md +31 -0
  44. package/assets/skills/app-builder/phases/8-web.md +30 -0
  45. package/assets/skills/app-builder/phases/9-docs.md +31 -0
  46. package/assets/skills/app-ia/SKILL.md +54 -0
  47. package/assets/skills/astro/SKILL.md +39 -0
  48. package/assets/skills/axios/SKILL.md +61 -0
  49. package/assets/skills/branch-pr/SKILL.md +200 -0
  50. package/assets/skills/bullmq/SKILL.md +55 -0
  51. package/assets/skills/chained-pr/SKILL.md +48 -0
  52. package/assets/skills/chained-pr/references/chaining-details.md +99 -0
  53. package/assets/skills/cognitive-doc-design/SKILL.md +81 -0
  54. package/assets/skills/comment-writer/SKILL.md +74 -0
  55. package/assets/skills/dashboard-ia/SKILL.md +54 -0
  56. package/assets/skills/django-drf/SKILL.md +180 -0
  57. package/assets/skills/go-testing/SKILL.md +47 -0
  58. package/assets/skills/go-testing/references/examples.md +89 -0
  59. package/assets/skills/issue-creation/SKILL.md +223 -0
  60. package/assets/skills/jira-epic/SKILL.md +306 -0
  61. package/assets/skills/jira-task/SKILL.md +382 -0
  62. package/assets/skills/judgment-day/SKILL.md +52 -0
  63. package/assets/skills/judgment-day/references/prompts-and-formats.md +98 -0
  64. package/assets/skills/lightsail-deploy/SKILL.md +44 -0
  65. package/assets/skills/lightsail-deploy/references/runbook.md +102 -0
  66. package/assets/skills/loop-back-debug/SKILL.md +102 -0
  67. package/assets/skills/mantine-form/SKILL.md +57 -0
  68. package/assets/skills/mongoose/SKILL.md +66 -0
  69. package/assets/skills/nextjs-15/SKILL.md +144 -0
  70. package/assets/skills/not-boring-mobile/SKILL.md +43 -0
  71. package/assets/skills/not-boring-mobile/references/not-boring-playbook.md +65 -0
  72. package/assets/skills/playwright/SKILL.md +315 -0
  73. package/assets/skills/pr-comments/SKILL.md +93 -0
  74. package/assets/skills/pr-create/SKILL.md +64 -0
  75. package/assets/skills/promo-video/SKILL.md +52 -0
  76. package/assets/skills/promo-video/assets/package.template.json +22 -0
  77. package/assets/skills/promo-video/assets/promo.template.tsx +469 -0
  78. package/assets/skills/promo-video/assets/theme.template.ts +27 -0
  79. package/assets/skills/promo-video/references/pipeline.md +119 -0
  80. package/assets/skills/promo-video-web/SKILL.md +51 -0
  81. package/assets/skills/promo-video-web/assets/browser-promo.template.tsx +385 -0
  82. package/assets/skills/promo-video-web/assets/capture.template.ts +70 -0
  83. package/assets/skills/promo-video-web/assets/package.template.json +26 -0
  84. package/assets/skills/promo-video-web/references/pipeline.md +84 -0
  85. package/assets/skills/pytest/SKILL.md +180 -0
  86. package/assets/skills/react-19/SKILL.md +118 -0
  87. package/assets/skills/react-hook-form/SKILL.md +59 -0
  88. package/assets/skills/react-router/SKILL.md +60 -0
  89. package/assets/skills/redux-toolkit/SKILL.md +60 -0
  90. package/assets/skills/review-diff/SKILL.md +101 -0
  91. package/assets/skills/ship-docs/SKILL.md +45 -0
  92. package/assets/skills/ship-docs/references/ship-docs-playbook.md +31 -0
  93. package/assets/skills/skill-creator/SKILL.md +97 -0
  94. package/assets/skills/skill-creator/assets/SKILL-TEMPLATE.md +68 -0
  95. package/assets/skills/skill-creator/references/skill-style-guide.md +79 -0
  96. package/assets/skills/skill-improver/SKILL.md +50 -0
  97. package/assets/skills/skill-improver/references/skill-style-guide.md +79 -0
  98. package/assets/skills/socketio/SKILL.md +58 -0
  99. package/assets/skills/spec-bootstrap/SKILL.md +62 -0
  100. package/assets/skills/store-ship/SKILL.md +52 -0
  101. package/assets/skills/store-ship/assets/android-supply.template.md +22 -0
  102. package/assets/skills/store-ship/assets/eas.template.json +32 -0
  103. package/assets/skills/store-ship/assets/maestro-flow.template.yaml +27 -0
  104. package/assets/skills/store-ship/assets/store.config.template.json +28 -0
  105. package/assets/skills/store-ship/references/pipeline.md +198 -0
  106. package/assets/skills/stripe/SKILL.md +83 -0
  107. package/assets/skills/tailwind-4/SKILL.md +193 -0
  108. package/assets/skills/tamagui/SKILL.md +60 -0
  109. package/assets/skills/tanstack-query/SKILL.md +58 -0
  110. package/assets/skills/ticket-intake/SKILL.md +55 -0
  111. package/assets/skills/typescript/SKILL.md +134 -0
  112. package/assets/skills/verify-before-done/SKILL.md +111 -0
  113. package/assets/skills/webapp-rebuilder/SKILL.md +48 -0
  114. package/assets/skills/webapp-rebuilder/assets/charter-template.md +46 -0
  115. package/assets/skills/webapp-rebuilder/references/workflow.md +47 -0
  116. package/assets/skills/winston-logging/SKILL.md +61 -0
  117. package/assets/skills/work-unit-commits/SKILL.md +84 -0
  118. package/assets/skills/zod-4/SKILL.md +210 -0
  119. package/assets/skills/zustand-5/SKILL.md +216 -0
  120. package/bin/argos.js +6 -0
  121. package/dist/commands/adopt.d.ts +35 -0
  122. package/dist/commands/adopt.d.ts.map +1 -0
  123. package/dist/commands/adopt.js +347 -0
  124. package/dist/commands/adopt.js.map +1 -0
  125. package/dist/commands/doctor.d.ts +20 -0
  126. package/dist/commands/doctor.d.ts.map +1 -0
  127. package/dist/commands/doctor.js +478 -0
  128. package/dist/commands/doctor.js.map +1 -0
  129. package/dist/commands/init.d.ts +32 -0
  130. package/dist/commands/init.d.ts.map +1 -0
  131. package/dist/commands/init.js +358 -0
  132. package/dist/commands/init.js.map +1 -0
  133. package/dist/commands/remove.d.ts +62 -0
  134. package/dist/commands/remove.d.ts.map +1 -0
  135. package/dist/commands/remove.js +487 -0
  136. package/dist/commands/remove.js.map +1 -0
  137. package/dist/commands/workspace.d.ts +73 -0
  138. package/dist/commands/workspace.d.ts.map +1 -0
  139. package/dist/commands/workspace.js +354 -0
  140. package/dist/commands/workspace.js.map +1 -0
  141. package/dist/index.d.ts +2 -0
  142. package/dist/index.d.ts.map +1 -0
  143. package/dist/index.js +24 -0
  144. package/dist/index.js.map +1 -0
  145. package/dist/lib/assets.d.ts +29 -0
  146. package/dist/lib/assets.d.ts.map +1 -0
  147. package/dist/lib/assets.js +57 -0
  148. package/dist/lib/assets.js.map +1 -0
  149. package/dist/lib/atomic-write.d.ts +17 -0
  150. package/dist/lib/atomic-write.d.ts.map +1 -0
  151. package/dist/lib/atomic-write.js +41 -0
  152. package/dist/lib/atomic-write.js.map +1 -0
  153. package/dist/lib/backup.d.ts +11 -0
  154. package/dist/lib/backup.d.ts.map +1 -0
  155. package/dist/lib/backup.js +42 -0
  156. package/dist/lib/backup.js.map +1 -0
  157. package/dist/lib/config.d.ts +36 -0
  158. package/dist/lib/config.d.ts.map +1 -0
  159. package/dist/lib/config.js +52 -0
  160. package/dist/lib/config.js.map +1 -0
  161. package/dist/lib/detect.d.ts +58 -0
  162. package/dist/lib/detect.d.ts.map +1 -0
  163. package/dist/lib/detect.js +330 -0
  164. package/dist/lib/detect.js.map +1 -0
  165. package/dist/lib/ficha.d.ts +10 -0
  166. package/dist/lib/ficha.d.ts.map +1 -0
  167. package/dist/lib/ficha.js +38 -0
  168. package/dist/lib/ficha.js.map +1 -0
  169. package/dist/lib/git.d.ts +27 -0
  170. package/dist/lib/git.d.ts.map +1 -0
  171. package/dist/lib/git.js +79 -0
  172. package/dist/lib/git.js.map +1 -0
  173. package/dist/lib/managed-files.d.ts +35 -0
  174. package/dist/lib/managed-files.d.ts.map +1 -0
  175. package/dist/lib/managed-files.js +97 -0
  176. package/dist/lib/managed-files.js.map +1 -0
  177. package/dist/lib/markers.d.ts +64 -0
  178. package/dist/lib/markers.d.ts.map +1 -0
  179. package/dist/lib/markers.js +157 -0
  180. package/dist/lib/markers.js.map +1 -0
  181. package/dist/lib/navori-import.d.ts +42 -0
  182. package/dist/lib/navori-import.d.ts.map +1 -0
  183. package/dist/lib/navori-import.js +65 -0
  184. package/dist/lib/navori-import.js.map +1 -0
  185. package/dist/lib/openclaw-agents.d.ts +53 -0
  186. package/dist/lib/openclaw-agents.d.ts.map +1 -0
  187. package/dist/lib/openclaw-agents.js +118 -0
  188. package/dist/lib/openclaw-agents.js.map +1 -0
  189. package/dist/lib/package-root.d.ts +11 -0
  190. package/dist/lib/package-root.d.ts.map +1 -0
  191. package/dist/lib/package-root.js +23 -0
  192. package/dist/lib/package-root.js.map +1 -0
  193. package/dist/lib/paths.d.ts +11 -0
  194. package/dist/lib/paths.d.ts.map +1 -0
  195. package/dist/lib/paths.js +16 -0
  196. package/dist/lib/paths.js.map +1 -0
  197. package/dist/lib/settings-merge.d.ts +125 -0
  198. package/dist/lib/settings-merge.d.ts.map +1 -0
  199. package/dist/lib/settings-merge.js +373 -0
  200. package/dist/lib/settings-merge.js.map +1 -0
  201. package/dist/lib/version.d.ts +3 -0
  202. package/dist/lib/version.d.ts.map +1 -0
  203. package/dist/lib/version.js +13 -0
  204. package/dist/lib/version.js.map +1 -0
  205. package/dist/lib/which.d.ts +8 -0
  206. package/dist/lib/which.d.ts.map +1 -0
  207. package/dist/lib/which.js +30 -0
  208. package/dist/lib/which.js.map +1 -0
  209. package/dist/lib/workspaces.d.ts +133 -0
  210. package/dist/lib/workspaces.d.ts.map +1 -0
  211. package/dist/lib/workspaces.js +241 -0
  212. package/dist/lib/workspaces.js.map +1 -0
  213. package/dist/lib/zod-messages.d.ts +4 -0
  214. package/dist/lib/zod-messages.d.ts.map +1 -0
  215. package/dist/lib/zod-messages.js +28 -0
  216. package/dist/lib/zod-messages.js.map +1 -0
  217. package/package.json +44 -0
@@ -0,0 +1,39 @@
1
+ ---
2
+ name: astro
3
+ description: Trigger: Astro site, landing page, marketing site, static site, app web. Astro 5 patterns: zero-JS defaults, islands, content collections, Tailwind 4 via Vite.
4
+ ---
5
+
6
+ # Astro 5
7
+
8
+ ## Activation Contract
9
+
10
+ Activate when building or editing an Astro site — landing pages, marketing sites, docs, or any static-first web.
11
+
12
+ ## Hard Rules
13
+
14
+ - Static output by default. Add an adapter/SSR only when a route genuinely needs per-request rendering.
15
+ - Zero client JS by default: build with `.astro` components. Hydrate only real interactivity, with the narrowest `client:*` directive that works.
16
+ - Repeating content (features, FAQs, testimonials, posts) lives in content collections (`src/content.config.ts`, `defineCollection` + zod schema, `glob`/`file` loaders) — never hardcoded arrays inside pages.
17
+ - Tailwind 4 via the `@tailwindcss/vite` plugin. Do NOT use the deprecated `@astrojs/tailwind` integration.
18
+ - Local images through `astro:assets` `<Image>`, not raw `<img>`.
19
+ - Every page renders `<title>` and meta description through a shared layout; install `@astrojs/sitemap`.
20
+
21
+ ## Decision Gates
22
+
23
+ | Situation | Action |
24
+ |-----------|--------|
25
+ | Component needs interactivity | Try CSS/native HTML first; else a framework island with `client:visible` (or `client:idle`); `client:load` only for above-the-fold critical UI |
26
+ | Content will repeat or grow | Content collection with zod schema |
27
+ | One route needs fresh per-request data | Server island (`server:defer`) before converting the site to SSR |
28
+ | Dynamic routes from content | `getStaticPaths()` + `getCollection()` |
29
+
30
+ ## Execution Steps
31
+
32
+ 1. Scaffold: `npm create astro@latest` (template: minimal), add Tailwind 4 via `@tailwindcss/vite`.
33
+ 2. Create `src/layouts/Base.astro` with head, meta, fonts, and design tokens.
34
+ 3. Build pages under `src/pages/`; extract repeating content to collections.
35
+ 4. Verify: `astro build` passes and `astro preview` renders correctly; confirm no unintended client JS shipped.
36
+
37
+ ## Output Contract
38
+
39
+ A site that builds statically (`astro build` clean), ships zero JS unless justified, and lists every island added with its directive and reason.
@@ -0,0 +1,61 @@
1
+ ---
2
+ name: axios
3
+ description: Patrones de Axios en TS — instancia central, interceptores, tipado de respuestas, manejo de errores y cancelación. Trigger: al tocar llamadas HTTP a APIs.
4
+ ---
5
+
6
+ # Axios — convenciones
7
+
8
+ ## Cuándo usar este skill
9
+
10
+ Al hacer una llamada HTTP a una API: crear un endpoint del cliente, agregar auth, mapear errores, o cancelar una request. Axios se cablea **una vez** en una instancia central con interceptores — los componentes/servicios importan esa instancia, no `axios` crudo con la URL a mano en cada llamada.
11
+
12
+ ## El patrón
13
+
14
+ Una instancia por API (baseURL + interceptores), funciones tipadas encima; nunca `axios.get(fullUrl)` disperso:
15
+
16
+ ```ts
17
+ export const api = axios.create({
18
+ baseURL: import.meta.env.VITE_APP_NEXUS_URL,
19
+ timeout: 15_000,
20
+ });
21
+
22
+ api.interceptors.request.use((config) => {
23
+ const token = getToken();
24
+ if (token) config.headers.Authorization = `Bearer ${token}`;
25
+ return config;
26
+ });
27
+
28
+ api.interceptors.response.use(
29
+ (res) => res,
30
+ (error) => Promise.reject(normalizeError(error)), // un solo shape de error
31
+ );
32
+
33
+ // Servicio tipado: el genérico es el TIPO DE DATA, no el del envelope.
34
+ export const getSession = (id: string) =>
35
+ api.get<Session>(`/sessions/${id}`).then((r) => r.data);
36
+ ```
37
+
38
+ ## Gotchas que muerden
39
+
40
+ - **`api.get<T>()` tipa `response.data`, no la respuesta entera.** El `T` describe el `data`; Axios envuelve en `{ data, status, headers }`. Devuelve `r.data` desde el servicio para que el caller vea `Session`, no `AxiosResponse<Session>`.
41
+ - **Una instancia con `baseURL`, no la URL completa por llamada.** Centraliza host/timeout/headers. Repetir `axios.get('https://…/sessions')` esparce la config y rompe al cambiar de entorno.
42
+ - **Auth/refresh/logging en interceptores, no copiados en cada request.** El token va en un `request.use`; el 401→refresh y el mapeo de error van en `response.use`. Nada de `headers: { Authorization }` a mano en cada endpoint.
43
+ - **`axios.isAxiosError(err)` antes de leer `err.response`.** En el `catch`, `err` es `unknown`. Sin el type guard, `err.response.data` explota en errores de red (donde `response` es `undefined` y solo hay `err.request`).
44
+ - **Un error de red NO es un error HTTP.** Timeout/DNS/offline no traen `response`. Distingue `err.response` (el server respondió con 4xx/5xx) de `err.request` (nunca llegó) para dar el mensaje correcto.
45
+ - **Cancela requests en vuelo con `AbortController`.** En efectos/búsqueda-as-you-type pasa `{ signal: controller.signal }` y aborta en el cleanup; sin esto, una respuesta vieja pisa a una nueva (race).
46
+ - **4xx/5xx ya rechazan la promesa.** No revises `res.status` en el `.then`; el flujo de error vive en `catch`/el interceptor. Solo `validateStatus` cambia esa regla, y rara vez la necesitas.
47
+
48
+ ## Reglas duras
49
+
50
+ 1. Todo HTTP pasa por la instancia central con `baseURL` + interceptores; nada de `axios` crudo con URL completa suelta.
51
+ 2. Auth, refresh y normalización de error en interceptores, una sola vez.
52
+ 3. Servicios tipados con `api.get<Data>(...)` que devuelven `.data`; el genérico es la data, no el envelope.
53
+ 4. En `catch`, `axios.isAxiosError` antes de tocar `.response`; distingue error de red de error HTTP.
54
+ 5. Requests cancelables (`AbortController`) donde puede haber carreras.
55
+
56
+ ## Antes de declarar listo
57
+
58
+ - La llamada usa la instancia central; sin URLs absolutas ni headers de auth repetidos.
59
+ - Respuestas tipadas devolviendo `.data`; el error se maneja con `isAxiosError` y un shape único.
60
+ - Requests que compiten se cancelan en el cleanup.
61
+ - El quality gate del repo (`qualityGate.fast` en `argos.config.json`) en verde.
@@ -0,0 +1,200 @@
1
+ ---
2
+ name: branch-pr
3
+ description: Create pull requests with issue-first checks. Trigger: creating, opening, or preparing PRs for review.
4
+ ---
5
+
6
+ ## When to Use
7
+
8
+ Use this skill when:
9
+ - Creating a pull request for any change
10
+ - Preparing a branch for submission
11
+ - Helping a contributor open a PR
12
+
13
+ ---
14
+
15
+ ## Critical Rules
16
+
17
+ 1. **Every PR MUST link an approved issue** — no exceptions
18
+ 2. **Every PR MUST have exactly one `type:*` label**
19
+ 3. **Automated checks must pass** before merge is possible
20
+ 4. **Blank PRs without issue linkage will be blocked** by GitHub Actions
21
+
22
+ ---
23
+
24
+ ## Workflow
25
+
26
+ ```
27
+ 1. Verify issue has `status:approved` label
28
+ 2. Create branch: type/description (see Branch Naming below)
29
+ 3. Implement changes with conventional commits
30
+ 4. Run shellcheck on modified scripts
31
+ 5. Open PR using the template
32
+ 6. Add exactly one type:* label
33
+ 7. Wait for automated checks to pass
34
+ ```
35
+
36
+ ---
37
+
38
+ ## Branch Naming
39
+
40
+ Branch names MUST match this regex:
41
+
42
+ ```
43
+ ^(feat|fix|chore|docs|style|refactor|perf|test|build|ci|revert)\/[a-z0-9._-]+$
44
+ ```
45
+
46
+ **Format:** `type/description` — lowercase, no spaces, only `a-z0-9._-` in description.
47
+
48
+ | Type | Branch pattern | Example |
49
+ |------|---------------|---------|
50
+ | Feature | `feat/<description>` | `feat/user-login` |
51
+ | Bug fix | `fix/<description>` | `fix/zsh-glob-error` |
52
+ | Chore | `chore/<description>` | `chore/update-ci-actions` |
53
+ | Docs | `docs/<description>` | `docs/installation-guide` |
54
+ | Style | `style/<description>` | `style/format-scripts` |
55
+ | Refactor | `refactor/<description>` | `refactor/extract-shared-logic` |
56
+ | Performance | `perf/<description>` | `perf/reduce-startup-time` |
57
+ | Test | `test/<description>` | `test/add-setup-coverage` |
58
+ | Build | `build/<description>` | `build/update-shellcheck` |
59
+ | CI | `ci/<description>` | `ci/add-branch-validation` |
60
+ | Revert | `revert/<description>` | `revert/broken-setup-change` |
61
+
62
+ ---
63
+
64
+ ## PR Body Format
65
+
66
+ The PR template is at `.github/PULL_REQUEST_TEMPLATE.md`. Every PR body MUST contain:
67
+
68
+ ### 1. Linked Issue (REQUIRED)
69
+
70
+ ```markdown
71
+ Closes #<issue-number>
72
+ ```
73
+
74
+ Valid keywords: `Closes #N`, `Fixes #N`, `Resolves #N` (case insensitive).
75
+ The linked issue MUST have the `status:approved` label.
76
+
77
+ ### 2. PR Type (REQUIRED)
78
+
79
+ Check exactly ONE in the template and add the matching label:
80
+
81
+ | Checkbox | Label to add |
82
+ |----------|-------------|
83
+ | Bug fix | `type:bug` |
84
+ | New feature | `type:feature` |
85
+ | Documentation only | `type:docs` |
86
+ | Code refactoring | `type:refactor` |
87
+ | Maintenance/tooling | `type:chore` |
88
+ | Breaking change | `type:breaking-change` |
89
+
90
+ ### 3. Summary
91
+
92
+ 1-3 bullet points of what the PR does.
93
+
94
+ ### 4. Changes Table
95
+
96
+ ```markdown
97
+ | File | Change |
98
+ |------|--------|
99
+ | `path/to/file` | What changed |
100
+ ```
101
+
102
+ ### 5. Test Plan
103
+
104
+ ```markdown
105
+ - [x] Scripts run without errors: `shellcheck scripts/*.sh`
106
+ - [x] Manually tested the affected functionality
107
+ - [x] Skills load correctly in target agent
108
+ ```
109
+
110
+ ### 6. Contributor Checklist
111
+
112
+ All boxes must be checked:
113
+ - Linked an approved issue
114
+ - Added exactly one `type:*` label
115
+ - Ran shellcheck on modified scripts
116
+ - Skills tested in at least one agent
117
+ - Docs updated if behavior changed
118
+ - Conventional commit format
119
+ - No `Co-Authored-By` trailers
120
+
121
+ ---
122
+
123
+ ## Automated Checks (all must pass)
124
+
125
+ | Check | Job name | What it verifies |
126
+ |-------|----------|-----------------|
127
+ | PR Validation | `Check Issue Reference` | Body contains `Closes/Fixes/Resolves #N` |
128
+ | PR Validation | `Check Issue Has status:approved` | Linked issue has `status:approved` |
129
+ | PR Validation | `Check PR Has type:* Label` | PR has exactly one `type:*` label |
130
+ | CI | `Shellcheck` | Shell scripts pass `shellcheck` |
131
+
132
+ ---
133
+
134
+ ## Conventional Commits
135
+
136
+ Commit messages MUST match this regex:
137
+
138
+ ```
139
+ ^(build|chore|ci|docs|feat|fix|perf|refactor|revert|style|test)(\([a-z0-9\._-]+\))?!?: .+
140
+ ```
141
+
142
+ **Format:** `type(scope): description` or `type: description`
143
+
144
+ - `type` — required, one of: `build`, `chore`, `ci`, `docs`, `feat`, `fix`, `perf`, `refactor`, `revert`, `style`, `test`
145
+ - `(scope)` — optional, lowercase with `a-z0-9._-`
146
+ - `!` — optional, indicates breaking change
147
+ - `description` — required, starts after `: `
148
+
149
+ Type-to-label mapping:
150
+
151
+ | Commit type | PR label |
152
+ |-------------|----------|
153
+ | `feat` | `type:feature` |
154
+ | `fix` | `type:bug` |
155
+ | `docs` | `type:docs` |
156
+ | `refactor` | `type:refactor` |
157
+ | `chore` | `type:chore` |
158
+ | `style` | `type:chore` |
159
+ | `perf` | `type:feature` |
160
+ | `test` | `type:chore` |
161
+ | `build` | `type:chore` |
162
+ | `ci` | `type:chore` |
163
+ | `revert` | `type:bug` |
164
+ | `feat!` / `fix!` | `type:breaking-change` |
165
+
166
+ Examples:
167
+ ```
168
+ feat(scripts): add Codex support to setup.sh
169
+ fix(skills): correct topic key format in sdd-apply
170
+ docs(readme): update multi-model configuration guide
171
+ refactor(skills): extract shared persistence logic
172
+ chore(ci): add shellcheck to PR validation workflow
173
+ perf(scripts): reduce setup.sh execution time
174
+ style(skills): fix markdown formatting
175
+ test(scripts): add setup.sh integration tests
176
+ ci(workflows): add branch name validation
177
+ revert: undo broken setup change
178
+ feat!: redesign skill loading system
179
+ ```
180
+
181
+ ---
182
+
183
+ ## Commands
184
+
185
+ ```bash
186
+ # Create branch
187
+ git checkout -b feat/my-feature main
188
+
189
+ # Run shellcheck before pushing
190
+ shellcheck scripts/*.sh
191
+
192
+ # Push and create PR
193
+ git push -u origin feat/my-feature
194
+ gh pr create --title "feat(scope): description" --body "Closes #N"
195
+
196
+ # Add type label to PR
197
+ gh pr edit <pr-number> --add-label "type:feature"
198
+ ```
199
+
200
+ _Adapted from a skill originally authored by gentleman-programming._
@@ -0,0 +1,55 @@
1
+ ---
2
+ name: bullmq
3
+ description: Jobs y colas con BullMQ sobre Redis — Queue/Worker/QueueEvents, jobs idempotentes, retries con backoff, concurrency y graceful shutdown. Trigger: al crear/tocar un job, un worker o al encolar trabajo async.
4
+ ---
5
+
6
+ # BullMQ — jobs & queues
7
+
8
+ BullMQ mueve trabajo pesado o diferido fuera del request: un **productor** encola (`Queue.add`) y un **worker** (proceso aparte) lo procesa. La conexión es Redis (`ioredis`). El productor y el worker viven en procesos distintos y comparten solo el nombre de la cola.
9
+
10
+ ## Cuándo usar este skill
11
+
12
+ Al crear una cola o un job nuevo, tocar el worker, encolar trabajo desde un handler/hook, o depurar jobs que se cuelgan, se reintentan en loop o se pierden.
13
+
14
+ ## El patrón
15
+
16
+ ```ts
17
+ // Productor (en un request/hook): encola y responde rápido, NO esperes el resultado.
18
+ await queue.add("send-welcome", { userId }, {
19
+ attempts: 3,
20
+ backoff: { type: "exponential", delay: 1000 },
21
+ removeOnComplete: 1000, // no dejes que Redis crezca sin límite
22
+ removeOnFail: 5000,
23
+ });
24
+
25
+ // Worker (proceso aparte): una responsabilidad por worker/cola.
26
+ const worker = new Worker("emails", async (job) => {
27
+ // idempotente: correr dos veces el mismo job no debe duplicar efectos
28
+ return sendEmail(job.data);
29
+ }, { connection, concurrency: 5 });
30
+ ```
31
+
32
+ ## Reglas duras
33
+
34
+ 1. **Jobs idempotentes.** Un job puede reintentarse o entregarse dos veces. Usa un id determinista (`jobId`) o un guard de "ya procesado" para efectos no repetibles (cobros, emails, mutaciones críticas).
35
+ 2. **`attempts` + `backoff` siempre.** Un job sin reintentos muere al primer error transitorio; uno sin backoff martillea el recurso que falla. Exponencial por default.
36
+ 3. **El productor NO espera el resultado.** Encola y responde; el valor del job se consume por eventos (`QueueEvents`) o releyendo estado, no bloqueando el request.
37
+ 4. **`removeOnComplete`/`removeOnFail`.** Sin límites, Redis se llena de jobs viejos. Acota siempre.
38
+ 5. **Graceful shutdown.** En `SIGTERM`/`SIGINT`, `await worker.close()` antes de salir para no matar un job a medias. Un worker que no cierra limpio deja jobs en `active` colgados.
39
+ 6. **Errores que deben reintentar → lanza; errores permanentes → no.** Un input inválido no se arregla reintentando: valida antes de encolar o marca el job como fallido sin reintento (`attempts: 1` o un error no-recuperable).
40
+ 7. **Una responsabilidad por worker.** No metas varios tipos de trabajo no relacionado en un solo `Worker` con `if job.name`; sepáralos por cola.
41
+
42
+ ## Gotchas que muerden
43
+
44
+ - **La `connection` de ioredis para BullMQ necesita `maxRetriesPerRequest: null`** — si no, BullMQ lanza al reconectar.
45
+ - **`concurrency` alto no es gratis**: cada job concurrente abre conexiones/CPU. Súbelo con medida, no por default.
46
+ - **Un job "perdido"** casi siempre es: el worker no está corriendo, apunta a otra cola/Redis, o crasheó sin `removeOnFail` y quedó en `failed`. Revisa el estado del job antes de asumir un bug de lógica.
47
+ - **Delayed/repeatable jobs** viven en Redis: cambiar el patrón de un repeatable no borra el viejo — límpialo explícitamente.
48
+
49
+ ## Antes de declarar listo
50
+
51
+ - El job es idempotente (o tiene guard de duplicados) y define `attempts` + `backoff`.
52
+ - El worker cierra en `SIGTERM`/`SIGINT` (`worker.close()`).
53
+ - `removeOnComplete`/`removeOnFail` acotados; la `connection` usa `maxRetriesPerRequest: null`.
54
+ - El productor no bloquea el request esperando el job.
55
+ - El quality gate del repo (`qualityGate.fast` en `argos.config.json`) en verde.
@@ -0,0 +1,48 @@
1
+ ---
2
+ name: chained-pr
3
+ description: Split oversized changes into chained PRs that protect review focus. Trigger: PRs over 400 lines, stacked PRs, review slices.
4
+ ---
5
+
6
+ ## Activation Contract
7
+
8
+ Load this skill when a planned PR may exceed **400 changed lines**, SDD forecasts `400-line budget risk: High` or `Chained PRs recommended: Yes`, or the user asks for chained/stacked PRs, review slices, or reviewer-load control.
9
+
10
+ ## Hard Rules
11
+
12
+ - Split PRs over **400 changed lines** unless a maintainer explicitly accepts `size:exception`.
13
+ - Keep each PR reviewable in about **≤60 minutes**.
14
+ - Use one deliverable work unit per PR; keep tests/docs with the unit they verify.
15
+ - State start, end, prior dependencies, follow-up work, and out-of-scope items in every chained PR.
16
+ - Every child PR must include a dependency diagram marking the current PR with `📍`.
17
+ - In Feature Branch Chain, create a draft/no-merge tracker PR; child PR #1 targets the tracker branch, later children target the immediate parent branch.
18
+ - Treat polluted diffs as base bugs: retarget or rebase until only the current work unit appears.
19
+ - Do not mix chain strategies after the user chooses one.
20
+
21
+ ## Decision Gates
22
+
23
+ | Condition | Action |
24
+ |---|---|
25
+ | PR ≤400 changed lines and focused | Keep single PR. |
26
+ | PR >400, each slice can land independently | Use Stacked PRs to main. |
27
+ | PR >400, feature must integrate before main | Use Feature Branch Chain with tracker. |
28
+ | Generated/vendor/migration diff cannot split cleanly | Ask maintainer for `size:exception`. |
29
+ | SDD provides `delivery_strategy` | Follow it before apply/PR creation. |
30
+
31
+ ## Execution Steps
32
+
33
+ 1. Estimate changed lines and identify independent work units.
34
+ 2. Ask for a chain strategy when none is cached and the budget is exceeded.
35
+ 3. Create branches/PRs using the chosen strategy only.
36
+ 4. Add Chain Context to each PR without replacing the repo PR template.
37
+ 5. Verify each PR independently: CI/tests/docs/manual checks, rollback scope, and clean diff.
38
+ 6. Keep tracker PR draft/no-merge until all child PRs are reviewed and integrated.
39
+
40
+ ## Output Contract
41
+
42
+ Return the chosen strategy, PR order, current PR boundary, dependency diagram, review budget (`additions + deletions`), verification plan, and any `size:exception` rationale.
43
+
44
+ ## References
45
+
46
+ - [references/chaining-details.md](references/chaining-details.md) — strategy diagrams, PR body section, branch commands, and reviewer guidance.
47
+
48
+ _Adapted from a skill originally authored by gentleman-programming._
@@ -0,0 +1,99 @@
1
+ # Chained PR Details
2
+
3
+ ## Strategy Notes
4
+
5
+ | | Stacked PRs to main | Feature Branch Chain |
6
+ |---|---|---|
7
+ | Speed | Each slice can ship in order | Full feature waits for tracker merge |
8
+ | Rollback | Revert individual main PRs | Revert/hold the whole feature branch |
9
+ | Risk | Partial behavior may land | Nothing lands until the chain completes |
10
+ | Complexity | Simpler retarget/rebase flow | Requires tracker and strict diff hygiene |
11
+
12
+ ## Feature Branch Chain
13
+
14
+ Use when the feature branch accumulates the final integration while child PRs are reviewed as focused slices.
15
+
16
+ ```text
17
+ main
18
+ └── feat/my-feature ← tracker/final integration branch
19
+ ↑ PR #1 base: feat/my-feature
20
+ └── feat/my-feature-01-core
21
+ ↑ PR #2 base: feat/my-feature-01-core
22
+ └── feat/my-feature-02-shared
23
+ ↑ PR #3 base: feat/my-feature-02-shared
24
+ └── feat/my-feature-03-slice
25
+ ```
26
+
27
+ Steps:
28
+
29
+ 1. Create the feature/tracker branch from `main`.
30
+ 2. Open the tracker PR to `main`; mark it draft/no-merge.
31
+ 3. Create PR #1 from a child branch and target it to the tracker branch.
32
+ 4. Create each later child branch from the previous PR branch and target it to that parent branch.
33
+ 5. Merge/integrate children in order; merge the tracker only after the chain is complete.
34
+
35
+ ## Stacked PRs to Main
36
+
37
+ Use when each slice can land on `main` in order.
38
+
39
+ ```text
40
+ main <- PR 1: foundation
41
+ └── PR 2: feature slice built on PR 1
42
+ └── PR 3: docs/tests built on PR 2
43
+ ```
44
+
45
+ After a parent PR merges, rebase/retarget the next PR so GitHub shows only the current slice.
46
+
47
+ ## Chain Context Section
48
+
49
+ Append this section to the repo PR template; do not replace required issue/checklist sections.
50
+
51
+ ```markdown
52
+ ## Chain Context
53
+
54
+ | Field | Value |
55
+ |-------|-------|
56
+ | Chain | <feature or stack name> |
57
+ | Tracker PR | <#NNN or "Not needed"> |
58
+ | Position | <N of total> |
59
+ | Base | `<target branch>` |
60
+ | Depends on | <PR/issue/link or "None"> |
61
+ | Follow-up | <next PR or "None"> |
62
+ | Review budget | <changed lines> / 400 |
63
+ | Starts at | <branch, PR, or state this builds on> |
64
+ | Ends with | <standalone result delivered by this PR> |
65
+
66
+ ### Chain Overview
67
+
68
+ ```text
69
+ main
70
+ └── #NNN Previous PR
71
+ └── 📍 #NNN This PR
72
+ └── #NNN Next PR
73
+ ```
74
+
75
+ ### Scope
76
+ - Includes: <focused unit>
77
+ - Excludes: <deferred work>
78
+
79
+ ### Autonomy
80
+ - [ ] CI is expected to pass for this PR branch
81
+ - [ ] This PR has one deliverable scope
82
+ - [ ] This PR can be rolled back without unrelated changes
83
+ - [ ] Tests, docs, or manual verification cover this unit
84
+ ```
85
+
86
+ ## Commands
87
+
88
+ ```bash
89
+ gh pr view <PR_NUMBER> --json additions,deletions,changedFiles,title,url
90
+ gh pr create --base feat/my-feature --title "feat(scope): focused slice" --body-file pr-body.md
91
+ gh pr create --base feat/my-feature-01-core --title "feat(scope): next focused slice" --body-file pr-body.md
92
+ ```
93
+
94
+ ## Reviewer Guidance
95
+
96
+ - Ask for a split when a PR exceeds 400 changed lines without `size:exception`.
97
+ - Recommend Feature Branch Chain when work must integrate before `main`.
98
+ - Recommend stacked PRs when each slice can merge independently.
99
+ - Review child PRs against immediate parent branches; a polluted diff is a branching bug.
@@ -0,0 +1,81 @@
1
+ ---
2
+ name: cognitive-doc-design
3
+ description: Design docs that reduce cognitive load. Trigger: writing guides, READMEs, RFCs, onboarding, architecture, or review-facing docs.
4
+ ---
5
+
6
+ ## When to Use
7
+
8
+ Load this skill when creating or editing documentation that people need to understand quickly, retain, or use during review.
9
+
10
+ Use it especially for:
11
+
12
+ - PR descriptions and review notes.
13
+ - Contributor or maintainer guides.
14
+ - Architecture, workflow, or onboarding docs.
15
+ - Any doc that currently feels long, dense, or hard to scan.
16
+
17
+ ## Critical Patterns
18
+
19
+ | Pattern | Rule |
20
+ |---------|------|
21
+ | Lead with the answer | Put the decision, action, or outcome first. Context comes after. |
22
+ | Progressive disclosure | Start with the happy path, then add details, edge cases, and references. |
23
+ | Chunking | Group related information into small sections. Keep flat lists short. |
24
+ | Signposting | Use headings, labels, callouts, and summaries so readers know where they are. |
25
+ | Recognition over recall | Prefer tables, checklists, examples, and templates over prose that must be remembered. |
26
+ | Review empathy | Design docs so reviewers can verify intent without reconstructing the whole story. |
27
+
28
+ ## Documentation Shape
29
+
30
+ Use this default structure unless the repo already provides a stronger template:
31
+
32
+ ```markdown
33
+ # <Outcome-oriented title>
34
+
35
+ <One paragraph: what changed, who it helps, and why it matters.>
36
+
37
+ ## Quick path
38
+
39
+ 1. <First action>
40
+ 2. <Second action>
41
+ 3. <Verification or expected result>
42
+
43
+ ## Details
44
+
45
+ | Topic | Decision |
46
+ |-------|----------|
47
+ | <area> | <concise explanation> |
48
+
49
+ ## Checklist
50
+
51
+ - [ ] <Reader can confirm this>
52
+ - [ ] <Reader can confirm that>
53
+
54
+ ## Next step
55
+
56
+ <Link or action that continues the workflow.>
57
+ ```
58
+
59
+ ## PR and Review Docs
60
+
61
+ When documenting a PR, reduce reviewer burnout by making the review path explicit:
62
+
63
+ - State what to review first.
64
+ - State what is intentionally out of scope.
65
+ - Link the previous and next PR when work is chained.
66
+ - Keep each section focused on one decision or unit of work.
67
+ - Use checklists for acceptance criteria and verification.
68
+
69
+ ## Commands
70
+
71
+ ```bash
72
+ # Check markdown files changed in the current branch
73
+ git diff --name-only -- '*.md'
74
+
75
+ # Inspect PR changed-line count for cognitive load
76
+ gh pr view <PR_NUMBER> --json additions,deletions,changedFiles
77
+ ```
78
+
79
+ ---
80
+
81
+ _Adapted from a skill originally authored by gentleman-programming._
@@ -0,0 +1,74 @@
1
+ ---
2
+ name: comment-writer
3
+ description: Write warm, direct collaboration comments. Trigger: PR feedback, issue replies, reviews, Slack messages, or GitHub comments.
4
+ ---
5
+
6
+ ## When to Use
7
+
8
+ Load this skill whenever you write a comment that another human will read.
9
+
10
+ Use it for:
11
+
12
+ - GitHub PR or issue comments.
13
+ - Review feedback and requested changes.
14
+ - Maintainer replies.
15
+ - Slack, Discord, or async project updates.
16
+
17
+ ## Voice Rules
18
+
19
+ | Rule | Requirement |
20
+ |------|-------------|
21
+ | Be useful fast | Start with the actionable point. Do not recap the whole PR before feedback. |
22
+ | Be warm and direct | Sound like a thoughtful teammate, not a corporate bot. |
23
+ | Keep it short | Prefer 1 to 3 short paragraphs or a tight bullet list. |
24
+ | Explain why | Give the technical reason when asking for a change. |
25
+ | Avoid pile-ons | Comment on the highest-value issue, not every tiny preference. |
26
+ | Match target context language | Write in the target context language by default: Spanish issue/thread -> Spanish comment, English issue/thread -> English comment, mixed context -> target message language. If the user explicitly requests a language or tone, follow that request. For Spanish comments, use neutral/professional Spanish by default unless the user or target context clearly calls for regional tone. |
27
+ | No em dashes | Use commas, periods, or parentheses instead. |
28
+
29
+ ## Comment Formula
30
+
31
+ ```text
32
+ <Direct observation or request>
33
+
34
+ <Why it matters, only if needed>
35
+
36
+ <Concrete next action>
37
+ ```
38
+
39
+ ## Examples
40
+
41
+ ### Request change
42
+
43
+ ```markdown
44
+ Good approach overall. I'd split this into a separate commit because it mixes validation logic with UI wiring.
45
+
46
+ That keeps the reviewer's focus narrower and makes rollback cleaner if the integration fails.
47
+ ```
48
+
49
+ ### Approve with a note
50
+
51
+ ```markdown
52
+ Approved. The scope is clear and the change is well-contained.
53
+
54
+ For the next PR, add links to the previous and following PRs so the chain stays navigable.
55
+ ```
56
+
57
+ ### Ask for split
58
+
59
+ ```markdown
60
+ This PR exceeds the 400-line budget, so we need to split it or justify `size:exception`.
61
+
62
+ Suggested order: foundation + tests first, then integration, then docs. That gives each review a clear start and end.
63
+ ```
64
+
65
+ ## Commands
66
+
67
+ ```bash
68
+ # Inspect a PR before writing review feedback
69
+ gh pr view <PR_NUMBER> --json title,body,additions,deletions,changedFiles
70
+ ```
71
+
72
+ ---
73
+
74
+ _Adapted from a skill originally authored by gentleman-programming._