@imolko/ultra-agent 0.1.0-beta

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 (239) hide show
  1. package/README.md +93 -0
  2. package/bin/cli.js +2 -0
  3. package/dist-node/bin.d.ts +2 -0
  4. package/dist-node/bin.d.ts.map +1 -0
  5. package/dist-node/bin.js +5 -0
  6. package/dist-node/bin.js.map +1 -0
  7. package/dist-node/cli.d.ts +41 -0
  8. package/dist-node/cli.d.ts.map +1 -0
  9. package/dist-node/cli.js +170 -0
  10. package/dist-node/cli.js.map +1 -0
  11. package/dist-node/index.d.ts +14 -0
  12. package/dist-node/index.d.ts.map +1 -0
  13. package/dist-node/index.js +40 -0
  14. package/dist-node/index.js.map +1 -0
  15. package/dist-node/init-lint.d.ts +43 -0
  16. package/dist-node/init-lint.d.ts.map +1 -0
  17. package/dist-node/init-lint.js +84 -0
  18. package/dist-node/init-lint.js.map +1 -0
  19. package/dist-node/manifest.d.ts +33 -0
  20. package/dist-node/manifest.d.ts.map +1 -0
  21. package/dist-node/manifest.js +59 -0
  22. package/dist-node/manifest.js.map +1 -0
  23. package/dist-node/materializer.d.ts +52 -0
  24. package/dist-node/materializer.d.ts.map +1 -0
  25. package/dist-node/materializer.js +194 -0
  26. package/dist-node/materializer.js.map +1 -0
  27. package/dist-node/package-root.d.ts +5 -0
  28. package/dist-node/package-root.d.ts.map +1 -0
  29. package/dist-node/package-root.js +17 -0
  30. package/dist-node/package-root.js.map +1 -0
  31. package/dist-node/payload.d.ts +22 -0
  32. package/dist-node/payload.d.ts.map +1 -0
  33. package/dist-node/payload.js +49 -0
  34. package/dist-node/payload.js.map +1 -0
  35. package/dist-node/pointer-hub.d.ts +22 -0
  36. package/dist-node/pointer-hub.d.ts.map +1 -0
  37. package/dist-node/pointer-hub.js +50 -0
  38. package/dist-node/pointer-hub.js.map +1 -0
  39. package/dist-node/publication.cli.d.ts +9 -0
  40. package/dist-node/publication.cli.d.ts.map +1 -0
  41. package/dist-node/publication.cli.js +17 -0
  42. package/dist-node/publication.cli.js.map +1 -0
  43. package/dist-node/publication.d.ts +23 -0
  44. package/dist-node/publication.d.ts.map +1 -0
  45. package/dist-node/publication.js +47 -0
  46. package/dist-node/publication.js.map +1 -0
  47. package/dist-node/reconcile.cli.d.ts +11 -0
  48. package/dist-node/reconcile.cli.d.ts.map +1 -0
  49. package/dist-node/reconcile.cli.js +39 -0
  50. package/dist-node/reconcile.cli.js.map +1 -0
  51. package/dist-node/reconcile.d.ts +30 -0
  52. package/dist-node/reconcile.d.ts.map +1 -0
  53. package/dist-node/reconcile.js +51 -0
  54. package/dist-node/reconcile.js.map +1 -0
  55. package/dist-node/ship/prompts/fix.md +22 -0
  56. package/dist-node/ship/prompts/implement.md +34 -0
  57. package/dist-node/ship/prompts/review.md +28 -0
  58. package/dist-node/ship/ship.agent.d.ts +22 -0
  59. package/dist-node/ship/ship.agent.d.ts.map +1 -0
  60. package/dist-node/ship/ship.agent.js +142 -0
  61. package/dist-node/ship/ship.agent.js.map +1 -0
  62. package/dist-node/ship/ship.args.d.ts +15 -0
  63. package/dist-node/ship/ship.args.d.ts.map +1 -0
  64. package/dist-node/ship/ship.args.js +93 -0
  65. package/dist-node/ship/ship.args.js.map +1 -0
  66. package/dist-node/ship/ship.context.d.ts +12 -0
  67. package/dist-node/ship/ship.context.d.ts.map +1 -0
  68. package/dist-node/ship/ship.context.js +3 -0
  69. package/dist-node/ship/ship.context.js.map +1 -0
  70. package/dist-node/ship/ship.d.ts +4 -0
  71. package/dist-node/ship/ship.d.ts.map +1 -0
  72. package/dist-node/ship/ship.js +221 -0
  73. package/dist-node/ship/ship.js.map +1 -0
  74. package/dist-node/ship/ship.mr.d.ts +9 -0
  75. package/dist-node/ship/ship.mr.d.ts.map +1 -0
  76. package/dist-node/ship/ship.mr.js +171 -0
  77. package/dist-node/ship/ship.mr.js.map +1 -0
  78. package/dist-node/ship/ship.output.d.ts +9 -0
  79. package/dist-node/ship/ship.output.d.ts.map +1 -0
  80. package/dist-node/ship/ship.output.js +21 -0
  81. package/dist-node/ship/ship.output.js.map +1 -0
  82. package/dist-node/ship/ship.tracker.d.ts +37 -0
  83. package/dist-node/ship/ship.tracker.d.ts.map +1 -0
  84. package/dist-node/ship/ship.tracker.js +220 -0
  85. package/dist-node/ship/ship.tracker.js.map +1 -0
  86. package/dist-node/version.cli.d.ts +9 -0
  87. package/dist-node/version.cli.d.ts.map +1 -0
  88. package/dist-node/version.cli.js +30 -0
  89. package/dist-node/version.cli.js.map +1 -0
  90. package/dist-node/version.d.ts +24 -0
  91. package/dist-node/version.d.ts.map +1 -0
  92. package/dist-node/version.js +76 -0
  93. package/dist-node/version.js.map +1 -0
  94. package/docs/adr/ADR-0000-proceso-y-formato-de-adrs.md +115 -0
  95. package/docs/adr/foundational/A-001-clean-architecture-4-capas.md +88 -0
  96. package/docs/adr/foundational/A-002-cqrs-semantico.md +58 -0
  97. package/docs/adr/foundational/A-003-tdd.md +97 -0
  98. package/docs/adr/foundational/A-005-either-return-custom-methods.md +80 -0
  99. package/docs/adr/foundational/A-006-feature-completion-criteria.md +47 -0
  100. package/docs/adr/foundational/A-007-data-contract-fail-fast.md +109 -0
  101. package/docs/adr/foundational/A-008-bounded-context-decomposition.md +130 -0
  102. package/docs/adr/foundational/A-009-use-case-taxonomy.md +99 -0
  103. package/docs/adr/foundational/A-010-propiedad-emision-eventos-dominio.md +95 -0
  104. package/docs/adr/foundational/A-011-characterization-first-refactoring.md +90 -0
  105. package/docs/adr/foundational/A-012-helm-mecanismo-primario-despliegue.md +67 -0
  106. package/docs/adr/foundational/A-013-contrato-settings-unica-fuente-configuracion.md +74 -0
  107. package/docs/adr/foundational/A-014-generacion-artefactos-despliegue-desde-contrato-settings.md +75 -0
  108. package/docs/adr/foundational/A-015-cloudevents-estandar-eventos.md +85 -0
  109. package/docs/adr/foundational/A-016-cicd-gitlab-pipeline-raiz-pipelines-modulares.md +92 -0
  110. package/docs/adr/foundational/A-017-taxonomia-repositorios-librerias-sistemas.md +93 -0
  111. package/docs/adr/foundational/A-018-practicas-build-imagenes-docker.md +85 -0
  112. package/docs/adr/foundational/A-019-convenciones-autoria-helm-charts.md +97 -0
  113. package/docs/adr/foundational/A-020-entorno-desarrollo-estandarizado-devcontainer.md +58 -0
  114. package/docs/adr/foundational/A-022-formato-reporte-tests-ctrf.md +55 -0
  115. package/docs/adr/foundational/A-023-composicion-bloques-prompt-agentes.md +65 -0
  116. package/docs/adr/foundational/A-024-features-slices-verticales-portables.md +41 -0
  117. package/docs/adr/foundational/A-025-anatomia-mecanica-feature-puertos-adaptadores-drivers.md +104 -0
  118. package/docs/adr/foundational/A-026-infraestructura-compartida.md +44 -0
  119. package/docs/adr/foundational/A-027-patron-wiring-entry-point.md +67 -0
  120. package/docs/adr/foundational/A-029-verbos-intencion-metodos-lado-negocio.md +54 -0
  121. package/docs/adr/foundational/A-030-global-development-tooling.md +52 -0
  122. package/docs/adr/foundational/A-031-ubiquitous-language.md +64 -0
  123. package/docs/adr/foundational/A-032-domain-artifact-documentation-format.md +128 -0
  124. package/docs/adr/foundational/A-033-estandar-mensajes-commit.md +127 -0
  125. package/docs/adr/foundational/A-034-canonical-skill-set.md +64 -0
  126. package/docs/adr/foundational/A-035-captura-ideas-reanclaje-candies.md +51 -0
  127. package/docs/adr/foundational/A-036-adopcion-wayfinder-ortogonalidad-labels.md +37 -0
  128. package/docs/adr/foundational/A-037-formalizacion-taxonomia-labels.md +98 -0
  129. package/docs/adr/foundational/A-038-issues-referencian-skills-nombre.md +54 -0
  130. package/docs/adr/foundational/A-039-pipeline-ship-issues-hijos-spec.md +64 -0
  131. package/docs/adr/foundational/A-040-punteros-configuracion-repo-skills.md +44 -0
  132. package/docs/adr/foundational/A-041-estrategia-de-ramas.md +45 -0
  133. package/docs/adr/foundational/A-042-formato-documentos-issue-tracker.md +78 -0
  134. package/docs/adr/foundational/A-043-vocabulario-etiquetas-adrs.md +42 -0
  135. package/docs/adr/foundational/A-044-composicion-funcional-procesos-operaciones.md +44 -0
  136. package/docs/adr/foundational/A-045-guardrails-aplicables-no-directrices.md +48 -0
  137. package/docs/adr/foundational/A-046-metricas-de-forma-y-legibilidad-del-codigo.md +50 -0
  138. package/docs/adr/foundational/A-047-dependencias-explicitas-sin-globales-ambientales.md +40 -0
  139. package/docs/adr/foundational/A-048-cobertura-minima-codigo.md +39 -0
  140. package/docs/adr/foundational/A-049-materializacion-bucle-guardrails-extension-nativa-pi.md +49 -0
  141. package/docs/adr/foundational/A-050-el-caso-de-uso-pide-al-dominio-no-lee-su-representacion.md +50 -0
  142. package/docs/adr/foundational/A-051-orden-imports-por-distancia.md +47 -0
  143. package/docs/adr/foundational/A-052-distribucion-metodologia-paquete-versionado.md +42 -0
  144. package/docs/adr/foundational/A-053-errores-compartidos-entre-features-dos-hogares-por-capa.md +43 -0
  145. package/docs/adr/foundational/A-054-contrato-costura-driver-port-raw-data-canal-error.md +65 -0
  146. package/docs/adr/foundational/index.md +98 -0
  147. package/docs/adr/index.md +19 -0
  148. package/docs/adr/python/P-001-dependencias-por-feature-fastapi-depends.md +63 -0
  149. package/docs/adr/python/P-002-inyeccion-token-por-request-sin-persistirlo.md +35 -0
  150. package/docs/adr/python/P-003-sqlalchemy-async-connection-pooling.md +59 -0
  151. package/docs/adr/python/P-004-serializer-json-custom-modelos-pydantic.md +47 -0
  152. package/docs/adr/python/P-005-patrones-pitfalls-nicegui.md +148 -0
  153. package/docs/adr/python/P-006-convenciones-pytest.md +96 -0
  154. package/docs/adr/python/P-007-ci-python-alineacion-poetry-version-unica.md +55 -0
  155. package/docs/adr/python/P-008-empaquetado-infraestructura-compartida-por-tecnologia.md +38 -0
  156. package/docs/adr/python/index.md +14 -0
  157. package/docs/adr/typescript/T-001-ddd-artifact-validation-zod-primitives.md +136 -0
  158. package/docs/adr/typescript/T-002-test-documentation-jsdoc.md +133 -0
  159. package/docs/adr/typescript/T-003-readme-formatting-domain-artifacts.md +51 -0
  160. package/docs/adr/typescript/T-005-input-optionality-use-case-not-entity.md +130 -0
  161. package/docs/adr/typescript/T-006-small-enums-inlined-zod-regex.md +77 -0
  162. package/docs/adr/typescript/T-007-controller-input-zod-schema.md +79 -0
  163. package/docs/adr/typescript/T-008-expressive-use-case-pipe.md +207 -0
  164. package/docs/adr/typescript/T-009-mdx-brace-escaping.md +80 -0
  165. package/docs/adr/typescript/T-010-stack-tooling-typescript-dominio.md +53 -0
  166. package/docs/adr/typescript/T-011-ultra-reporter-herramienta-canonica-documentacion.md +52 -0
  167. package/docs/adr/typescript/T-012-npm-workspaces-estructura-monorepo-clean-architecture.md +54 -0
  168. package/docs/adr/typescript/T-013-definicion-eventos-versionados-ultra-ddd.md +45 -0
  169. package/docs/adr/typescript/T-014-publicacion-distribucion-librerias-npm-semver.md +53 -0
  170. package/docs/adr/typescript/T-015-method-placement-definition.md +35 -0
  171. package/docs/adr/typescript/T-016-contrato-settings-zod.md +34 -0
  172. package/docs/adr/typescript/T-017-characterization-tests-golden-files.md +39 -0
  173. package/docs/adr/typescript/T-018-procedencia-campos-frontmatter.md +55 -0
  174. package/docs/adr/typescript/T-019-ultra-generator-herramienta-canonica-generacion.md +35 -0
  175. package/docs/adr/typescript/T-020-ultra-settings-herramienta-canonica-exportacion-despliegue.md +36 -0
  176. package/docs/adr/typescript/T-021-pipe-flujo-datos-operadores-semantica-contexto-inmutable.md +105 -0
  177. package/docs/adr/typescript/T-022-construction-is-execution-single-boundary.md +112 -0
  178. package/docs/adr/typescript/T-023-registry-cli-declara-dependencias-reales.md +84 -0
  179. package/docs/adr/typescript/T-024-paquete-ultra-agent-manifiesto-pi-peers-cli.md +39 -0
  180. package/docs/adr/typescript/T-025-publicacion-npm-trusted-publishing-procedencia.md +59 -0
  181. package/docs/adr/typescript/index.md +30 -0
  182. package/eslint/index.mjs +721 -0
  183. package/package.json +94 -0
  184. package/pi/extensions/handoff/README.md +92 -0
  185. package/pi/extensions/handoff/handoff-prompt.txt +9 -0
  186. package/pi/extensions/handoff/index.ts +296 -0
  187. package/pi/extensions/handoff/package.json +12 -0
  188. package/pi/extensions/qa-guardrail/README.md +108 -0
  189. package/pi/extensions/qa-guardrail/adapters/cli.ts +100 -0
  190. package/pi/extensions/qa-guardrail/adapters/eslint.ts +90 -0
  191. package/pi/extensions/qa-guardrail/adapters/registry.ts +45 -0
  192. package/pi/extensions/qa-guardrail/baseline.ts +74 -0
  193. package/pi/extensions/qa-guardrail/cerco.ts +134 -0
  194. package/pi/extensions/qa-guardrail/check.ts +185 -0
  195. package/pi/extensions/qa-guardrail/config.ts +189 -0
  196. package/pi/extensions/qa-guardrail/delta.ts +52 -0
  197. package/pi/extensions/qa-guardrail/feedback.ts +26 -0
  198. package/pi/extensions/qa-guardrail/index.ts +311 -0
  199. package/pi/extensions/qa-guardrail/nstop.ts +82 -0
  200. package/pi/extensions/qa-guardrail/package.json +12 -0
  201. package/pi/extensions/qa-guardrail/selection.ts +98 -0
  202. package/pi/extensions/qa-guardrail/types.ts +64 -0
  203. package/scripts/copy-assets.sh +10 -0
  204. package/scripts/reconcile-tags.sh +94 -0
  205. package/scripts/release-beta.sh +64 -0
  206. package/scripts/release-build.sh +53 -0
  207. package/scripts/release.sh +51 -0
  208. package/scripts/verify-adr-consistency.py +217 -0
  209. package/skills/code-review/SKILL.md +66 -0
  210. package/skills/codebase-design/SKILL.md +46 -0
  211. package/skills/configure-repo/SKILL.md +33 -0
  212. package/skills/diagnose-bug/SKILL.md +63 -0
  213. package/skills/domain-modeling/SKILL.md +56 -0
  214. package/skills/grill-me/SKILL.md +34 -0
  215. package/skills/i-have-an-idea/SKILL.md +166 -0
  216. package/skills/implement/SKILL.md +22 -0
  217. package/skills/research/SKILL.md +17 -0
  218. package/skills/ship/SKILL.md +26 -0
  219. package/skills/spike/SKILL.md +27 -0
  220. package/skills/tdd/SKILL.md +68 -0
  221. package/skills/tdd/references/deep-modules.md +53 -0
  222. package/skills/tdd/references/interface-design.md +74 -0
  223. package/skills/tdd/references/mocking.md +80 -0
  224. package/skills/tdd/references/refactoring.md +49 -0
  225. package/skills/tdd/references/tests.md +184 -0
  226. package/skills/to-specs/SKILL.md +141 -0
  227. package/skills/to-tasks/SKILL.md +143 -0
  228. package/skills/triage/SKILL.md +73 -0
  229. package/skills/ultra-generator/SKILL.md +263 -0
  230. package/skills/ultra-generator/references/aggregate-root.md +149 -0
  231. package/skills/ultra-generator/references/domain-event.md +174 -0
  232. package/skills/ultra-generator/references/entity.md +133 -0
  233. package/skills/ultra-generator/references/service.md +92 -0
  234. package/skills/ultra-generator/references/value-object.md +135 -0
  235. package/skills/wayfinder/SKILL.md +201 -0
  236. package/skills/workflow/SKILL.md +31 -0
  237. package/skills/writing-for-agents/SKILL-MECHANICS.md +32 -0
  238. package/skills/writing-for-agents/SKILL.md +86 -0
  239. package/skills/writing-for-agents/references/adrs.md +19 -0
@@ -0,0 +1,66 @@
1
+ ---
2
+ name: code-review
3
+ description: Review the changes since a fixed point (commit, branch, tag, or merge-base) along two axes — Standards (does the code follow this repo's ADRs and standards?) and Spec (does the code match the originating spec?). Use when the user wants to review a branch, a merge request, work-in-progress changes, or asks to "review since X".
4
+ ---
5
+
6
+ # Code Review
7
+
8
+ Two-axis review of the diff between `HEAD` and a fixed point the user supplies:
9
+
10
+ - **Standards** — does the code conform to this repo's documented standards (the ADR registry and commit-message standard)?
11
+ - **Spec** — does the code faithfully implement the originating spec?
12
+
13
+ Run both axes (in parallel sub-agents if your runtime supports them; otherwise sequentially), then aggregate the findings.
14
+
15
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
16
+
17
+ ## Process
18
+
19
+ ### 1. Pin the fixed point
20
+
21
+ Whatever the user said is the fixed point — a commit SHA, branch name, tag, `main`, `HEAD~5`. If they didn't specify one, ask.
22
+
23
+ Capture the diff once: `git diff <fixed-point>...HEAD` (three-dot, against the merge-base), plus `git log <fixed-point>..HEAD --oneline`. Confirm the ref resolves (`git rev-parse <fixed-point>`) and the diff is non-empty before going further.
24
+
25
+ ### 2. Identify the spec source
26
+
27
+ Look for the originating spec, in order:
28
+
29
+ 1. Issue references in the commit messages (`#123`, `Closes #45`, GitLab `!67`) — fetch via `glab issue view <id>`.
30
+ 2. A path the user passed as an argument.
31
+ 3. A spec under `docs/` or an issue matching the branch name or feature.
32
+ 4. Nothing found — ask the user. If there is no spec, the **Spec** axis skips and reports "no spec available".
33
+
34
+ ### 3. Identify the standards sources
35
+
36
+ The ADR registry (`adr_dir`) is the primary standard: A-001 (clean architecture layers), T-015 (method placement), A-005 (Either returns), A-025 (ports/adapters/drivers), A-029 (intention verbs), A-031 (ubiquitous language — the domain READMEs, `domain_dir`), A-032 (artifact README format), A-033 (commit messages). Read the tier indexes and the ADRs relevant to the diff.
37
+
38
+ On top of the registry, the Standards axis always carries the **smell baseline** below — Fowler code smells that apply even where no ADR speaks. Two rules bind it:
39
+
40
+ - **The repo overrides.** A documented ADR standard always wins; where it endorses something the baseline would flag, suppress the smell.
41
+ - **Always a judgement call.** Each smell is a labelled heuristic, never a hard violation — and skip anything tooling already enforces.
42
+
43
+ Each smell reads *what it is* → *how to fix*:
44
+
45
+ - **Mysterious Name** — a name that doesn't reveal what it does or holds. → rename it; if no honest name comes, the design's murky.
46
+ - **Duplicated Code** — the same logic shape in more than one hunk or file. → extract the shared shape.
47
+ - **Feature Envy** — a method reaching into another object's data more than its own. → move the method onto the data it envies.
48
+ - **Data Clumps** — the same few fields keep travelling together. → bundle them into one type.
49
+ - **Primitive Obsession** — a primitive standing in for a domain concept that deserves its own type. → give it a small type (A-031's value-objects).
50
+ - **Repeated Switches** — the same switch/if-cascade recurs. → polymorphism, or one shared map.
51
+ - **Shotgun Surgery** — one logical change scattered across many files. → gather what changes together.
52
+ - **Divergent Change** — one module edited for several unrelated reasons. → split it.
53
+ - **Speculative Generality** — abstraction added for needs the spec doesn't have. → delete it.
54
+ - **Message Chains** — long `a.b().c().d()` navigation. → hide the walk behind one method.
55
+ - **Middle Man** — a class that mostly delegates onward. → cut it.
56
+ - **Refused Bequest** — an implementer ignoring most of what it inherits. → drop the inheritance.
57
+
58
+ ### 4. Run both axes
59
+
60
+ **Standards axis** — check every changed file against the relevant ADRs and the smell baseline. Report: file, the standard or smell violated, the evidence, and the suggested fix.
61
+
62
+ **Spec axis** — diff the changes against the originating spec. Report: each spec requirement as met / unmet / unclear, and any code that does work the spec doesn't ask for (gold-plating).
63
+
64
+ ### 5. Aggregate and report
65
+
66
+ Report the two axes side by side — Standards findings, then Spec findings, each with severity (blocking / advisory). End with a one-line verdict.
@@ -0,0 +1,46 @@
1
+ ---
2
+ name: codebase-design
3
+ description: Vocabulary and principles for designing deep modules and placing seams. Use when designing or improving a module's interface, deciding where a seam goes, making code more testable or agent-navigable, or when another skill (tdd, code-review, implement) needs the depth/leverage/locality terms.
4
+ ---
5
+
6
+ # Codebase Design
7
+
8
+ Design **deep modules**: a lot of behaviour behind a small interface, placed at a clean seam, testable through that interface. The architectural container these terms live in is the four-layer Clean Architecture with ports, adapters, and drivers (A-001, A-025); this glossary decides *where a seam goes inside* that container and how deep the module behind it is.
9
+
10
+ ## Glossary
11
+
12
+ Use these terms exactly — consistent language is the whole point.
13
+
14
+ **Module** — anything with an interface and an implementation: a function, class, package, or a port. Scale-agnostic on purpose. _Avoid_: unit, component, service.
15
+
16
+ **Interface** — everything a caller must know to use the module correctly: the type signature plus invariants, ordering constraints, error modes, required configuration, performance. _Avoid_: API, signature (too narrow). The feature-level interface is the **domain port** (A-025).
17
+
18
+ **Implementation** — what's inside a module, behind its interface. A small interface over a large implementation is deep; a large interface over a small implementation is shallow.
19
+
20
+ **Depth** — leverage at the interface: behaviour a caller or test exercises per unit of interface learned. **Deep** = a lot of behaviour behind a small interface; **shallow** = the interface is nearly as complex as the implementation.
21
+
22
+ **Seam** _(Michael Feathers)_ — a place where you can alter behaviour without editing in that place; where a module's interface lives. Where the seam goes is a design decision, distinct from what goes behind it. At the feature level the seams are the **ports** (A-025): the domain port (use case ↔ adapter) and the driver port (adapter ↔ driver) — swapping a driver without touching the use case is the seam's payoff. _Avoid_: boundary (overloaded with DDD's bounded context).
23
+
24
+ **Adapter** (A-025) — the bridge that implements a **domain port** and delegates to a **driver port**; the one place the typed domain↔tech translation happens. In this repo "adapter" means that bridge specifically. For "the concrete thing satisfying an interface at a seam", say **driver**.
25
+
26
+ **Leverage** — what callers get from depth: more capability per unit of interface learned. One implementation pays back across N call sites and M tests.
27
+
28
+ **Locality** — what maintainers get from depth: change, bugs, knowledge and verification concentrate in one place. Fix once, fixed everywhere.
29
+
30
+ ## Deep vs shallow
31
+
32
+ A deep module is a small interface + a lot of implementation; a shallow module is a large interface + little implementation (pass-through). When designing an interface, ask:
33
+
34
+ - Can I reduce the number of methods?
35
+ - Can I simplify the parameters?
36
+ - Can I hide more complexity inside?
37
+
38
+ ## Principles
39
+
40
+ - **Push complexity down.** Hide the hard part behind the interface; the caller shouldn't see it.
41
+ - **Design for the caller, not the implementation.**
42
+ - **The seam is the leverage decision.** The right seam makes the module testable and replaceable without editing (swapping a driver without touching the use case or adapter, A-025).
43
+ - **Method placement follows T-015**: domain behaviour lives on the definition, not the facade.
44
+ - **Which layer a thing belongs to** is A-001 / A-026's question, not this glossary's.
45
+
46
+ For the DDD instantiation (value-objects, aggregates, `of()`), see `tdd`'s deep-modules and interface-design references.
@@ -0,0 +1,33 @@
1
+ ---
2
+ name: configure-repo
3
+ description: Configure the repo pointer hub (docs/agents/repo-config.md) by running the package CLI. Use once per repo, or after a folder rename.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Configure Repo
8
+
9
+ The pointer hub lives in `docs/agents/repo-config.md` and is written by the package CLI, not by hand (A-052). This skill is a thin wrapper: it runs the CLI and reports any values that diverge from the Imolko defaults.
10
+
11
+ ## Process
12
+
13
+ 1. Run the installer — it materializes the pointer hub with the Imolko defaults:
14
+
15
+ ```bash
16
+ npx @imolko/ultra-agent install
17
+ ```
18
+
19
+ The CLI writes `docs/agents/repo-config.md` with these pointers:
20
+
21
+ | Puntero | Default | Qué resuelve |
22
+ |---------|---------|--------------|
23
+ | `adr_dir` | `docs/adr/` | registro ADR (índice: `<adr_dir>/index.md`) |
24
+ | `domain_dir` | `domain/` | capa de dominio y lenguaje ubicuo (A-031, A-032) |
25
+ | `issue_language` | `es` | idioma de los issues publicados |
26
+ | `tracker_cli` | `glab` | CLI del issue tracker |
27
+ | `ship_cmd` | `npx @imolko/ultra-agent ship` | comando que dispara el pipeline ship (A-039) |
28
+
29
+ 2. If the repo diverges from a default, edit that value in place — keep the pointer keys (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`, `ship_cmd`) unchanged.
30
+
31
+ 3. Verify the pointers resolve — `npx @imolko/ultra-agent status` must exit 0.
32
+
33
+ 4. Tell the human which values differ from the Imolko defaults, if any.
@@ -0,0 +1,63 @@
1
+ ---
2
+ name: diagnose-bug
3
+ description: Diagnosis loop for hard bugs and performance regressions. Use when the user says "diagnose"/"debug this", or reports something broken/throwing/failing/slow.
4
+ ---
5
+
6
+ # Diagnosing Bugs
7
+
8
+ A discipline for hard bugs. Skip phases only when explicitly justified.
9
+
10
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
11
+
12
+ When exploring, read the relevant domain READMEs (`domain_dir`; A-031) for a mental model of the modules, and check the ADRs in the area you're touching.
13
+
14
+ ## Redact
15
+
16
+ This skill has you show commands, outputs and captured artifacts. **Redact every secret first** — write `<REDACTED>` in its place. Build loops against env vars so the credential stays in the environment. Captured artifacts carry auth headers: quote only the lines that carry the signal.
17
+
18
+ If the redacted output isn't enough to diagnose, say so and ask the user.
19
+
20
+ ## Phase 1 — Build a feedback loop
21
+
22
+ **This is the skill.** Everything else is mechanical. If you have a **tight** pass/fail signal for the bug — one that goes red on *this* bug — you will find the cause; bisection, hypothesis-testing and instrumentation all just consume it. Without one, no amount of staring at code will save you.
23
+
24
+ Spend disproportionate effort here. **Be aggressive. Be creative. Refuse to give up.**
25
+
26
+ ### Ways to construct one — roughly in order
27
+
28
+ 1. **Failing test** at the tightest test layer that exercises the bug — unit or integration (A-003) — placed at the seam (port, A-025) closest to the cause.
29
+ 2. **Curl / HTTP script** against a running dev server.
30
+ 3. **CLI invocation** with a fixture input, diffing stdout against a known-good snapshot.
31
+ 4. **Headless browser script** (Playwright) — drives the UI, asserts on DOM/console/network.
32
+ 5. **Replay a captured trace** — save a real payload/event log to disk and replay it through the code path.
33
+ 6. **Throwaway harness** — a minimal subset of the system (one service, mocked deps) that exercises the bug path with one call.
34
+ 7. **Property / fuzz loop** — 1000 random inputs looking for the failure mode.
35
+ 8. **Bisection harness** — automate "boot at state X, check" so you can `git bisect run` it.
36
+ 9. **Differential loop** — same input through old vs new version, diff outputs.
37
+ 10. **HITL script** — last resort; drive the human through a structured loop so captured output feeds back to you.
38
+
39
+ Build the right loop and the bug is 90% fixed.
40
+
41
+ ### Tighten the loop
42
+
43
+ Once you have *a* loop, **tighten** it: faster? sharper signal (assert the specific symptom, not "didn't crash")? more deterministic (pin time, seed RNG, isolate filesystem, freeze network)? A 30-second flaky loop is barely better than no loop; a 2-second deterministic one is a superpower.
44
+
45
+ ### Non-deterministic bugs
46
+
47
+ The goal isn't a clean repro but a **higher reproduction rate**. Loop the trigger 100×, parallelise, add stress, narrow timing windows, inject sleeps. 50%-flake is debuggable; 1% isn't — keep raising the rate.
48
+
49
+ ### When you genuinely cannot build a loop
50
+
51
+ Stop and say so. List what you tried. Ask the user for: (a) access to whatever environment reproduces it, (b) a redacted captured artifact (HAR, log dump, core dump, screen recording), or (c) permission to add temporary production instrumentation. Do **not** proceed to hypothesise without a loop.
52
+
53
+ ### Completion criterion — a tight loop that goes red
54
+
55
+ Phase 1 is done when the loop is **tight** and **red-capable**: you can name **one command** you have **already run at least once** (show the invocation and output, redacted), and it goes red on the bug.
56
+
57
+ ## Phase 2 — Bisect to the cause
58
+
59
+ Run the loop, form a hypothesis, test it, repeat. Prefer the cheapest discriminating experiment each time. When you find the cause, name it precisely (file, line, mechanism) and confirm by removing the suspected cause and watching the loop go green.
60
+
61
+ ## Phase 3 — Fix and verify
62
+
63
+ Hand the cause to `/skill:tdd` (red-green, A-003): the Phase 1 loop is the red signal. Fix until it's green, run the surrounding tests, and commit the loop as the regression test — it must go red without the fix.
@@ -0,0 +1,56 @@
1
+ ---
2
+ name: domain-modeling
3
+ description: Build and sharpen the system's domain model and record the decisions that change it. Use when a domain term is resolved, changed, or needs classifying (value object, entity, aggregate), a bounded context shifts, a decision crystallizes that deserves a project-tier ADR, or another skill (grill-me, implement, code-review) reaches it to record one.
4
+ ---
5
+
6
+ # Domain Modeling
7
+
8
+ Actively build and sharpen the domain model as work happens: challenge terms, stress-test boundaries, and record a decision the moment it crystallizes. This is the *active* discipline, not merely reading the glossary.
9
+
10
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
11
+
12
+ The glossary is the **ubiquitous language** (A-031): it lives in the domain layer (`domain_dir`), one `README.md` per artifact, in the A-032 format. There is no separate glossary file, and the domain layer is the authority for every term.
13
+
14
+ ## During the session
15
+
16
+ ### Challenge against the glossary
17
+
18
+ When a term conflicts with the language already in the domain layer, call it out: "Your domain README defines 'cancellation' as X, but you seem to mean Y — which is it?"
19
+
20
+ ### Sharpen fuzzy language
21
+
22
+ When a term is vague or overloaded, propose the precise canonical term: "'account' — do you mean the Customer or the User? Those are different artifacts."
23
+
24
+ ### Classify the term
25
+
26
+ The model is DDD (A-031). Name each term's artifact type from the taxonomy (A-032): value object, entity, aggregate, domain service, domain event, or enum. A term you can't classify is either missing from the model or is really two artifacts.
27
+
28
+ ### Stress-test with concrete scenarios
29
+
30
+ Invent scenarios that probe the boundaries between concepts and force the user to be precise.
31
+
32
+ ### Cross-reference with code
33
+
34
+ When the user states how something works, check whether the code agrees. If it doesn't, surface the contradiction: "Your code cancels whole Orders, but you just said partial cancellation is possible — which is right?"
35
+
36
+ ## Writing
37
+
38
+ Two artifacts are writable — domain READMEs and project-tier ADRs. Both are proposed first and written only after you confirm.
39
+
40
+ ### Domain READMEs (glossary)
41
+
42
+ When a term is resolved or changed, edit the owning artifact's `README.md` following A-032. A term that belongs to no existing artifact is a bounded-context boundary question (A-008) — raise it before writing anything.
43
+
44
+ ### Project-tier ADRs
45
+
46
+ Offer to write an ADR only when all three hold:
47
+
48
+ 1. **Hard to reverse** — changing the decision later costs something.
49
+ 2. **Surprising without context** — a future reader will wonder why.
50
+ 3. **The result of a real trade-off** — there were genuine alternatives and one was chosen.
51
+
52
+ When they do, write a project-tier ADR following ADR-0000 — the consistency gate must exit 0.
53
+
54
+ ## Write boundary
55
+
56
+ `ADR-0000` and the A, T, and P tiers are read-only; only the project tier and the domain READMEs are writable (A-034).
@@ -0,0 +1,34 @@
1
+ ---
2
+ name: grill-me
3
+ description: Relentless one-question-at-a-time interview to sharpen a plan, design, or the skill set itself, grounded in the ADR registry.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Grill Me
8
+
9
+ Interview the user relentlessly about a plan, a design, or the structure of the skill set itself, until you reach a shared understanding. Model it as a **design tree**: every decision branches into the decisions that hang off it. Ask **one question at a time**, each with your recommended answer, and let each answer reshape the tree.
10
+
11
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
12
+
13
+ ## The frontier
14
+
15
+ Track the **frontier** — the decisions whose prerequisites are already settled, the questions you can ask now without guessing at answers you haven't heard. Pick the next question from the frontier; a question whose answer depends on another still-open question waits until that one is answered. The session is done when the frontier is empty and the user confirms you share an understanding. Do not act on the plan before that confirmation.
16
+
17
+ ## Facts are your job
18
+
19
+ Never ask the user for a fact you can look up yourself. Explore the codebase and the registry instead: files, the ADR registry (`adr_dir`), the domain READMEs (`domain_dir`), `package.json`, git history.
20
+
21
+ ## Grounding in the ADR registry
22
+
23
+ Read the ADR index (`<adr_dir>/index.md`) for the tier map, then the index of the tiers relevant to the topic:
24
+
25
+ - **A** — always: the methodology governs every plan.
26
+ - **T** — when the topic touches TypeScript artifacts.
27
+ - **P** — when the topic touches Python.
28
+ - **project tier** — when the topic touches this project's domain decisions.
29
+
30
+ When the user asserts something a governing ADR constrains or contradicts, surface it: "A-029 says business-side methods use intention verbs — your plan says `getData`; which wins?" The ADRs are the authority; the plan bends, they don't.
31
+
32
+ ## Writing: reach domain-modeling
33
+
34
+ `grill-me` never edits files. When a term or decision crystallizes during the interview, reach `/skill:domain-modeling` to record it — propose the write, wait for confirmation, then delegate.
@@ -0,0 +1,166 @@
1
+ ---
2
+ name: i-have-an-idea
3
+ description: Turn a raw idea into a grab-able worker-issue — a five-probe interview, a domain-vocabulary pass, a duplicate check, and a route by candy to the right sharpener.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # I Have An Idea
8
+
9
+ Capture a raw idea — loose, pre-spec — and publish it on the issue tracker as a worker-issue a developer can grab. The interview is light but forcing: five probes, each extracting a piece the idea can't survive without; then a pass that maps the idea's words to the domain vocabulary; then a duplicate check against open and closed issues; then publish. The published issue carries the route to the sharpener that fits its size.
10
+
11
+ Reference: A-035 (the concept), A-042 (idea structure), A-037 (labels), A-038 (skill-first issues), A-031 (domain vocabulary).
12
+
13
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
14
+
15
+ ## Process
16
+
17
+ ### 1. Take the idea
18
+
19
+ Ask for the raw idea in one or two sentences. Do not shape it yet.
20
+
21
+ ### 2. Five probes — one question at a time
22
+
23
+ Ask them in order. Do not skip any, and do not accept an empty answer.
24
+
25
+ 1. **What's the idea?** — the change, stated plainly.
26
+ 2. **What's the current situation?** — where it lives, what's true today, what's the friction. This becomes `# Contexto` (reuse the wording of `to-specs`' `# Contexto`).
27
+ 3. **Why does it matter?** — then drill once: "and why does *that* matter?"
28
+ 4. **What would done look like?** — what is true when it ships.
29
+ 5. **Can you put a candy on it?** — `1`, `2`, `4`, or `8`; `?` if it can't be estimated yet; or `16`/bigger ("too big for one idea"). The human self-estimates; the skill records, never suggests.
30
+
31
+ If the answer to probe 5 is `?`, ask one more: **what is the one question whose answer would make this idea estimable?** That becomes `# Pregunta`. It must be one sharp question a decision or investigation can resolve — not a compound question, not a restatement of the idea. `# Pregunta` deliberately matches wayfinder's ticket section name, so the question lifts verbatim into the first decision ticket when the idea routes to `/skill:wayfinder`.
32
+
33
+ ### 3. Map the wording to the domain vocabulary
34
+
35
+ Read the domain READMEs (`domain_dir`; A-031, A-032). For each non-glossary term in the idea and context:
36
+
37
+ - **A canonical term exists** → propose the substitution and ask: "you said X — the domain calls this Y. Replace?"
38
+ - **No canonical term** → ask: "is X a new domain concept, or just informal wording?"
39
+
40
+ Outcome per term:
41
+
42
+ - **Replace** → use the canonical term in the title, `# Contexto`, and `# Idea` (everywhere the term appears in the issue). The proponent's raw wording lives in the conversation, not the issue.
43
+ - **New concept** → keep the proponent's wording (title, `# Contexto`, `# Idea`) and add one line to `# Contexto` per new term: `Nuevo concepto: <term> — candidato a /skill:domain-modeling`.
44
+ - **Informal wording** → keep the proponent's wording as-is; no flag, no `/skill:domain-modeling` candidate.
45
+
46
+ Only propose when a real glossary term exists — do not lecture.
47
+
48
+ ### 4. Duplicate check
49
+
50
+ Search issues — open **and** closed — for near-matches using terms from the sharpened idea (now domain-mapped):
51
+
52
+ ```bash
53
+ <tracker_cli> issue list --search "<keywords>" --all
54
+ ```
55
+
56
+ - **Candidates found** → present them and let the human judge:
57
+ - **abandon** — it's a duplicate; drop the idea.
58
+ - **link** — attach this idea to the existing issue as a comment; publish nothing new. The note carries the title, the one-line idea, and the route:
59
+ ```bash
60
+ <tracker_cli> issue note <IID_DEL_ISSUE_EXISTENTE> -m "<título> — <idea, una línea> — <ruta>"
61
+ ```
62
+ - **publish anyway** — it's distinct; continue to publish.
63
+ - **No candidates** → skip the question; go straight to publish (preview + confirm).
64
+
65
+ The human decides duplication — never the skill.
66
+
67
+ ### 5. Publish
68
+
69
+ Show a preview, ask for confirmation, then publish. The preview shows the **title, the labels that will be applied, and the full body**, with the route line called out — confirm the route (`/skill:grill-me` or `/skill:wayfinder`) before it is committed. Write all issue text in `issue_language` (default Spanish).
70
+
71
+ The idea's structure is owned by A-042 (idea pre-spec) — the templates below are its operational copy.
72
+
73
+ **Estimable (1–4 or 8):** labels `type::idea` + `candy::N`.
74
+
75
+ ```markdown
76
+ # Skill recomendado
77
+
78
+ <route line>
79
+
80
+ # Contexto
81
+
82
+ <probe 2>
83
+
84
+ Nuevo concepto: <término> — candidato a /skill:domain-modeling
85
+
86
+ # Idea
87
+
88
+ <probe 1>
89
+
90
+ # Por qué importa
91
+
92
+ <probe 3>
93
+
94
+ # Hecho se ve como
95
+
96
+ <probe 4>
97
+ ```
98
+
99
+ `# Skill recomendado` is deliberately not `# Alcance`: the idea is pre-spec and has no scope yet, so it carries A-038's first-instruction-by-name rule (`/skill:<name>` as the first thing read) in a section named for the recommended skill. Do not rename it to `# Alcance` — that name is reserved for post-spec issues (`to-specs`/`to-tasks`).
100
+
101
+ The `# Skill recomendado` line by candy:
102
+
103
+ - **1–4:** `Para comenzar, usa /skill:grill-me (→ /skill:to-specs → /skill:to-tasks → /skill:ship).`
104
+ - **8:** `Para comenzar, usa /skill:wayfinder.`
105
+
106
+ **Unestimable (`?`):** label `type::idea` only (no candy).
107
+
108
+ ```markdown
109
+ # Skill recomendado
110
+
111
+ Para comenzar, usa /skill:wayfinder.
112
+
113
+ # Contexto
114
+
115
+ <probe 2>
116
+
117
+ Nuevo concepto: <término> — candidato a /skill:domain-modeling
118
+
119
+ # Idea
120
+
121
+ <probe 1>
122
+
123
+ # Por qué importa
124
+
125
+ <probe 3>
126
+
127
+ # Hecho se ve como
128
+
129
+ <probe 4>
130
+
131
+ # Pregunta
132
+
133
+ <la única pregunta cuya respuesta hace estimable la idea>
134
+
135
+ Cuando el camino quede claro, continúa con /skill:to-specs → /skill:to-tasks → /skill:ship.
136
+ ```
137
+
138
+ **16/bigger:** publish **nothing**. It is not one idea — it is a multi-session effort. There is no preview; state the routing decision and confirm it, then tell the human to run `/skill:wayfinder` to chart the map.
139
+
140
+ Create with `tracker_cli` (default `glab`):
141
+
142
+ ```bash
143
+ cat > /tmp/issue-body.md << 'ISSUE_EOF'
144
+ <CUERPO>
145
+ ISSUE_EOF
146
+
147
+ <tracker_cli> issue create \
148
+ --title "<TITULO>" \
149
+ --description "$(cat /tmp/issue-body.md)" \
150
+ --label "type::idea,candy::<N>"
151
+ ```
152
+
153
+ For `?`, omit `,candy::<N>`. The title is the idea — concise, in `issue_language`, in domain vocabulary (from step 3).
154
+
155
+ ### 6. Confirm
156
+
157
+ Close with a one-line summary for whichever ending occurred:
158
+
159
+ - **Published** → the issue URL, number, and the route (`/skill:grill-me` or `/skill:wayfinder`).
160
+ - **Linked** → the note URL on the existing issue; nothing new published.
161
+ - **Abandoned** → "idea descartada, nada publicado".
162
+ - **16/bigger** → "sin issue publicado — traza el mapa con /skill:wayfinder".
163
+
164
+ ## Rules
165
+
166
+ The idea's formatting rules are owned by A-042 — read and apply them from there, not restated here.
@@ -0,0 +1,22 @@
1
+ ---
2
+ name: implement
3
+ description: Implement a piece of work from a spec or set of tasks, using TDD at pre-agreed seams, and finish with a code review.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Implement
8
+
9
+ Implement the work described in the spec or tasks the user supplies.
10
+
11
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
12
+
13
+ **Precondition:** a spec or tasks must exist and be sharp enough to build against. No artifact → `/skill:i-have-an-idea` (raw idea) or `/skill:wayfinder` (fog / too big); a conversation to synthesize → `/skill:to-specs`; an artifact too vague to build against → back to `/skill:to-specs` / `/skill:to-tasks`. A seam question stays here — `/skill:codebase-design` (step 2).
14
+
15
+ ## Process
16
+
17
+ 1. **Read the work.** From the spec (produced by `/skill:to-specs`) or the tasks (produced by `/skill:to-tasks`), plus their blocking edges. If a domain artifact is needed and doesn't exist, scaffold it first with `/skill:ultra-generator`.
18
+ 2. **Agree the seams.** Confirm the seams (public boundaries) you'll implement and test at — use `/skill:codebase-design` for the vocabulary when the seam is a design question.
19
+ 3. **Implement with `/skill:tdd`.**
20
+ 4. **Keep it green.** Run typechecking regularly, single test files regularly, and the full test suite once at the end.
21
+ 5. **Review.** Once done, run `/skill:code-review` against the work.
22
+ 6. **Commit.** Commit to the current branch following the commit-message standard (A-033).
@@ -0,0 +1,17 @@
1
+ ---
2
+ name: research
3
+ description: Investigate a question against high-trust primary sources and capture the findings as a cited Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated.
4
+ ---
5
+
6
+ # Research
7
+
8
+ Investigate the question against **primary sources** — official docs, source code, specs, first-party APIs — not a secondary write-up of them. Follow every claim back to the source that owns it.
9
+
10
+ ## Process
11
+
12
+ 1. **Frame the question.** One precise question, not a topic. If the user's request is vague, ask for the question first.
13
+ 2. **Hunt primary sources.** For each claim you make, find the source that owns it and cite it. Prefer official docs and first-party code over blogs and summaries.
14
+ 3. **Write the findings** to a single Markdown file, each claim carrying its source (a link or a `file:line` reference).
15
+ 4. **Save it where the repo keeps such notes.** Match the existing convention; if there is none, put it somewhere sensible (e.g. `docs/` or a notes directory) and say where.
16
+
17
+ Keep the note tight: the question, the findings, the citations, and the open questions — not a literature review.
@@ -0,0 +1,26 @@
1
+ ---
2
+ name: ship
3
+ description: Fire the deterministic ship pipeline over a parent spec — implement its child issues, review, fix, and open one MR — in one action.
4
+ disable-model-invocation: true
5
+ ---
6
+
7
+ # Ship
8
+
9
+ Fire the ship pipeline over a parent spec. The orchestrator (the `ship` subcommand of `@imolko/ultra-agent`) is deterministic and owns the whole run; you only fire it and stay out of its way.
10
+
11
+ Read `docs/agents/repo-config.md` for the repo pointer `ship_cmd` — use it instead of hardcoding the command.
12
+
13
+ Reference: A-039 (ship pipeline), A-037 (labels), A-033 (commits).
14
+
15
+ ## Invocation
16
+
17
+ ```bash
18
+ npx @imolko/ultra-agent ship --parent-iid <PARENT_IID>
19
+ ```
20
+
21
+ Run `npx @imolko/ultra-agent ship --help` for what it does and its flags. If you come from `to-tasks`, the parent's IID is already known; pass it as-is.
22
+
23
+ ## Rules
24
+
25
+ - Do not edit the tracker while it runs — the `ship` subcommand owns the labels, assignees, and comments (A-039).
26
+ - If it stops on a blocked child or a failure, report the exact state and wait for instructions.
@@ -0,0 +1,27 @@
1
+ ---
2
+ name: spike
3
+ description: Build a spike to answer a design question — a state/logic model, a UI variation, or an API shape. Use when the user wants to sanity-check whether logic or a flow feels right, explore what an interface should look like, or try out an API shape and see if it reads.
4
+ ---
5
+
6
+ # Spike
7
+
8
+ A **spike** is throwaway code that answers a question. The question decides the shape.
9
+
10
+ ## Pick a branch
11
+
12
+ Identify which question is being answered — from the user's prompt, the surrounding code, or by asking if the user is around:
13
+
14
+ - **"Does this logic / state model feel right?"** → **logic**: a single shareable HTML file — free-play buttons plus guided walkthroughs — that pushes the state machine through cases hard to reason about on paper, drivable by a non-developer.
15
+ - **"What should this look like?"** → **UI**: several radically different UI variations on one route, switchable via a URL param and a floating bar, landed in the app's web interface.
16
+ - **"What should this API look like?"** → **API**: a minimal endpoint exposing one candidate shape, called by a stub client written the way a real consumer would — if the client reads awkwardly, the shape is wrong.
17
+
18
+ The branches produce different artifacts — getting this wrong wastes the whole spike. If the question is ambiguous and the user isn't reachable, default to whichever matches the surrounding code and state the assumption at the top.
19
+
20
+ ## Rules that apply to every branch
21
+
22
+ 1. **Throwaway from day one, clearly marked.** Locate it next to where it will be used; name it so a casual reader sees it's a spike, not production.
23
+ 2. **Trivial to run.** One command in the task runner, or a single HTML file the user double-clicks. No thinking to start it.
24
+ 3. **No persistence by default.** State lives in memory. If the question involves a database, hit a scratch DB or local file with a "SPIKE — wipe me" name.
25
+ 4. **Skip the polish.** No tests, no error handling beyond what makes it runnable, no abstractions.
26
+ 5. **Surface the state.** After every action, print or render the full relevant state so the user sees what changed.
27
+ 6. **Capture it when done.** Fold any validated decision into the real code, and capture the verdict — the answer the spike settled — on the implementation task.
@@ -0,0 +1,68 @@
1
+ ---
2
+ name: tdd
3
+ description: Test-driven development with the red-green-refactor loop, applied to everything the repo builds — domain artifacts, features, apps, and shared-infra (representations, services). Use when building features or fixing bugs with TDD, mentions "red-green-refactor", wants to write tests, or asks for test-first development.
4
+ ---
5
+
6
+ # Test-Driven Development
7
+
8
+ Read `docs/agents/repo-config.md` for the repo pointers (`adr_dir`, `domain_dir`, `issue_language`, `tracker_cli`) — use them instead of hardcoded paths.
9
+
10
+ ## Principles
11
+
12
+ The methodology is owned by A-003 (`<adr_dir>/foundational/A-003-tdd.md`): the red-green-refactor loop, vertical slices, public-API testing, semantic assertions, and the tracer bullet. Read it for the rules; this skill keeps the workflow, and the language-specific patterns live in the references.
13
+
14
+ ## Workflow
15
+
16
+ ### 1. Planning
17
+
18
+ Before writing any code:
19
+
20
+ - [ ] Confirm what you're testing and its shape (domain artifact, feature/use-case, app, shared-infra)
21
+ - [ ] Identify which domain rules need testing (valid input, empty input, max length, invalid type, etc.)
22
+ - [ ] List the behaviors to test in priority order
23
+ - [ ] Determine which error cases each rule triggers
24
+ - [ ] If the seam/interface design is in question, consult `/skill:codebase-design`
25
+ - [ ] Get user approval on the test plan
26
+
27
+ Ask: "Which domain rules should we test? What are the critical boundaries?"
28
+
29
+ ### 2. Ensure the Artifact Exists
30
+
31
+ If the artifact doesn't exist, scaffold it first with the language's generator (see [Language mechanics](#language-mechanics)).
32
+
33
+ ### 3. Tracer Bullet
34
+
35
+ The first test is the valid-creation tracer bullet (A-003). A freshly scaffolded artifact usually already passes it, so this step lands GREEN immediately — it proves the test setup and the public factory, not new behavior.
36
+
37
+ ### 4. Incremental Loop
38
+
39
+ For each domain rule, follow the red-green-refactor cycle: write the test (RED) → add the minimal code to pass (GREEN) → clean up (REFACTOR).
40
+
41
+ ### 5. Refactor
42
+
43
+ After all tests pass:
44
+
45
+ - [ ] Extract duplicate test setup into helper functions or `beforeEach`
46
+ - [ ] Simplify validation rules expressed in multiple ways
47
+ - [ ] Consider if the error messages are clear and descriptive
48
+ - [ ] Run the full test suite after each refactor step
49
+
50
+ **Never refactor while RED.** Get to GREEN first.
51
+
52
+ ## Language mechanics
53
+
54
+ The concrete test mechanics live in the language tiers, not in this skill:
55
+
56
+ - **TypeScript**: file naming and JSDoc → T-002; the domain tooling stack → T-010; Zod validation errors → T-001. Test patterns and examples: [tests.md](references/tests.md), [mocking.md](references/mocking.md), [refactoring.md](references/refactoring.md), [deep-modules.md](references/deep-modules.md), [interface-design.md](references/interface-design.md).
57
+ - **Python**: pytest conventions → P-006.
58
+
59
+ ## Checklist Per Cycle
60
+
61
+ ```
62
+ [ ] Test describes domain behavior, not implementation
63
+ [ ] Test uses the artifact's public API, not its internals
64
+ [ ] Test uses semantic assertions (A-003)
65
+ [ ] Test would survive a refactor of the internals
66
+ [ ] Code is minimal for this test
67
+ [ ] No speculative features added
68
+ ```