@dsalazardev/ai-hub-cli 0.0.0-stage → 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 (1288) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE.md +34 -0
  3. package/README.md +64 -2
  4. package/agents/cpp-build-resolver.md +25 -0
  5. package/agents/cpp-reviewer.md +28 -0
  6. package/agents/csharp-reviewer.md +28 -0
  7. package/agents/django-build-resolver.md +25 -0
  8. package/agents/django-reviewer.md +28 -0
  9. package/agents/explorer-domain.md +28 -0
  10. package/agents/fastapi-reviewer.md +28 -0
  11. package/agents/flutter-build-resolver.md +25 -0
  12. package/agents/flutter-reviewer.md +28 -0
  13. package/agents/go-build-resolver.md +25 -0
  14. package/agents/go-reviewer.md +28 -0
  15. package/agents/implementer-backend.md +30 -0
  16. package/agents/implementer-frontend.md +30 -0
  17. package/agents/java-build-resolver.md +26 -0
  18. package/agents/java-reviewer.md +29 -0
  19. package/agents/kotlin-build-resolver.md +25 -0
  20. package/agents/kotlin-reviewer.md +28 -0
  21. package/agents/mle-reviewer.md +28 -0
  22. package/agents/php-reviewer.md +29 -0
  23. package/agents/postgres-reviewer.md +28 -0
  24. package/agents/python-reviewer.md +28 -0
  25. package/agents/pytorch-build-resolver.md +25 -0
  26. package/agents/rag-reviewer.md +28 -0
  27. package/agents/react-build-resolver.md +26 -0
  28. package/agents/react-reviewer.md +29 -0
  29. package/agents/reviewer-architecture.md +32 -0
  30. package/agents/reviewer-tests.md +31 -0
  31. package/agents/rust-build-resolver.md +25 -0
  32. package/agents/rust-reviewer.md +28 -0
  33. package/agents/spec-author.md +36 -0
  34. package/agents/spec-miner.md +14 -0
  35. package/agents/swift-build-resolver.md +25 -0
  36. package/agents/swift-reviewer.md +28 -0
  37. package/agents/typescript-reviewer.md +28 -0
  38. package/agents/vue-reviewer.md +28 -0
  39. package/dist/backup/snapshots.d.ts +24 -0
  40. package/dist/backup/snapshots.js +171 -0
  41. package/dist/bin/ai-hub.d.ts +2 -0
  42. package/dist/bin/ai-hub.js +11 -0
  43. package/dist/cli/args.d.ts +4 -0
  44. package/dist/cli/args.js +63 -0
  45. package/dist/cli/context.d.ts +7 -0
  46. package/dist/cli/context.js +74 -0
  47. package/dist/cli/doctor.d.ts +14 -0
  48. package/dist/cli/doctor.js +200 -0
  49. package/dist/cli/drift.d.ts +2 -0
  50. package/dist/cli/drift.js +34 -0
  51. package/dist/cli/items.d.ts +5 -0
  52. package/dist/cli/items.js +10 -0
  53. package/dist/cli/legacy.d.ts +3 -0
  54. package/dist/cli/legacy.js +18 -0
  55. package/dist/cli/maintenance.d.ts +8 -0
  56. package/dist/cli/maintenance.js +262 -0
  57. package/dist/cli/memory.d.ts +2 -0
  58. package/dist/cli/memory.js +84 -0
  59. package/dist/cli/onboarding.d.ts +17 -0
  60. package/dist/cli/onboarding.js +234 -0
  61. package/dist/cli/run.d.ts +15 -0
  62. package/dist/cli/run.js +183 -0
  63. package/dist/cli/source.d.ts +5 -0
  64. package/dist/cli/source.js +22 -0
  65. package/dist/cli/trunk.d.ts +8 -0
  66. package/dist/cli/trunk.js +54 -0
  67. package/dist/cli/types.d.ts +17 -0
  68. package/dist/cli/types.js +4 -0
  69. package/dist/cli/worktrees.d.ts +11 -0
  70. package/dist/cli/worktrees.js +141 -0
  71. package/dist/engine/engine.d.ts +48 -0
  72. package/dist/engine/engine.js +114 -0
  73. package/dist/engine/gates.d.ts +2 -0
  74. package/dist/engine/gates.js +93 -0
  75. package/dist/frontmatter.d.ts +11 -0
  76. package/dist/frontmatter.js +30 -0
  77. package/dist/harness/guards/adapters/context.d.ts +19 -0
  78. package/dist/harness/guards/adapters/context.js +153 -0
  79. package/dist/harness/guards/adapters/hermes.d.ts +13 -0
  80. package/dist/harness/guards/adapters/hermes.js +18 -0
  81. package/dist/harness/guards/adapters/hooks.d.ts +25 -0
  82. package/dist/harness/guards/adapters/hooks.js +52 -0
  83. package/dist/harness/guards/branch.d.ts +5 -0
  84. package/dist/harness/guards/branch.js +43 -0
  85. package/dist/harness/guards/danger.d.ts +13 -0
  86. package/dist/harness/guards/danger.js +157 -0
  87. package/dist/harness/guards/index.d.ts +6 -0
  88. package/dist/harness/guards/index.js +6 -0
  89. package/dist/harness/guards/preflight.d.ts +14 -0
  90. package/dist/harness/guards/preflight.js +37 -0
  91. package/dist/harness/guards/ship.d.ts +2 -0
  92. package/dist/harness/guards/ship.js +35 -0
  93. package/dist/harness/guards/trunk.d.ts +5 -0
  94. package/dist/harness/guards/trunk.js +41 -0
  95. package/dist/harness/guards/types.d.ts +50 -0
  96. package/dist/harness/guards/types.js +1 -0
  97. package/dist/harness/memory/ledger.d.ts +53 -0
  98. package/dist/harness/memory/ledger.js +136 -0
  99. package/dist/harness/memory/state.d.ts +35 -0
  100. package/dist/harness/memory/state.js +121 -0
  101. package/dist/harness/worktree/reaper.d.ts +32 -0
  102. package/dist/harness/worktree/reaper.js +54 -0
  103. package/dist/manifest/build.d.ts +1 -0
  104. package/dist/manifest/build.js +1 -0
  105. package/dist/manifest/cli.d.ts +2 -0
  106. package/dist/manifest/cli.js +44 -0
  107. package/dist/manifest/dispatch.d.ts +13 -0
  108. package/dist/manifest/dispatch.js +36 -0
  109. package/dist/manifest/labels.d.ts +15 -0
  110. package/dist/manifest/labels.js +70 -0
  111. package/dist/manifest/manifest.d.ts +113 -0
  112. package/dist/manifest/manifest.js +202 -0
  113. package/dist/package-info.d.ts +4 -0
  114. package/dist/package-info.js +7 -0
  115. package/dist/paths.d.ts +33 -0
  116. package/dist/paths.js +123 -0
  117. package/dist/presets/detect.d.ts +24 -0
  118. package/dist/presets/detect.js +116 -0
  119. package/dist/presets/materialize.d.ts +18 -0
  120. package/dist/presets/materialize.js +101 -0
  121. package/dist/presets/resolve.d.ts +37 -0
  122. package/dist/presets/resolve.js +83 -0
  123. package/dist/presets/schema.d.ts +57 -0
  124. package/dist/presets/schema.js +68 -0
  125. package/dist/source-checkout.d.ts +8 -0
  126. package/dist/source-checkout.js +19 -0
  127. package/dist/sync/config.d.ts +47 -0
  128. package/dist/sync/config.js +85 -0
  129. package/dist/sync/lock.d.ts +16 -0
  130. package/dist/sync/lock.js +43 -0
  131. package/dist/sync/render.d.ts +18 -0
  132. package/dist/sync/render.js +255 -0
  133. package/dist/sync/sync.d.ts +38 -0
  134. package/dist/sync/sync.js +288 -0
  135. package/dist/sync/targets.d.ts +24 -0
  136. package/dist/sync/targets.js +78 -0
  137. package/engine/coupling.json +4 -0
  138. package/engine/engine.yaml +250 -0
  139. package/engine/legacy-paths.json +4 -0
  140. package/engine/preflight.md +11 -0
  141. package/manifest.json +393 -0
  142. package/package.json +61 -4
  143. package/presets/angular-express/harness/rules/01-zero-any.sh +25 -0
  144. package/presets/angular-express/harness/rules/02-no-ng-module.sh +21 -0
  145. package/presets/angular-express/harness/rules/03-no-constructor-injection.sh +21 -0
  146. package/presets/angular-express/harness/rules/04-no-legacy-directives.sh +21 -0
  147. package/presets/angular-express/harness/rules/05-no-dolibarrdal-inheritance.sh +25 -0
  148. package/presets/angular-express/harness/rules/06-no-todos.sh +22 -0
  149. package/presets/angular-express/harness/run-all.sh +13 -0
  150. package/presets/angular-express/preset.yaml +55 -0
  151. package/presets/angular-express/references/common-imports-catalog.md +146 -0
  152. package/presets/angular-express/references/fichajes-migration-notes.md +57 -0
  153. package/presets/angular-express/references/module-implementation-flow.md +260 -0
  154. package/presets/angular-express/references/products-coding-standard.md +143 -0
  155. package/presets/angular-express/references/products-module-blueprint.md +860 -0
  156. package/presets/angular-express/references/replicate-module-checklist.md +72 -0
  157. package/presets/angular-express/references/users-migration-notes.md +172 -0
  158. package/presets/angular-express/rules/architecture.md +8 -0
  159. package/presets/angular-express/rules/backend.md +4 -0
  160. package/presets/angular-express/rules/frontend.md +53 -0
  161. package/presets/angular-express/skills/angular-developer/SKILL.md +130 -0
  162. package/presets/angular-express/skills/angular-developer/references/angular-animations.md +160 -0
  163. package/presets/angular-express/skills/angular-developer/references/angular-aria.md +410 -0
  164. package/presets/angular-express/skills/angular-developer/references/cli.md +86 -0
  165. package/presets/angular-express/skills/angular-developer/references/component-harnesses.md +59 -0
  166. package/presets/angular-express/skills/angular-developer/references/component-styling.md +91 -0
  167. package/presets/angular-express/skills/angular-developer/references/components.md +117 -0
  168. package/presets/angular-express/skills/angular-developer/references/creating-services.md +97 -0
  169. package/presets/angular-express/skills/angular-developer/references/data-resolvers.md +69 -0
  170. package/presets/angular-express/skills/angular-developer/references/define-routes.md +67 -0
  171. package/presets/angular-express/skills/angular-developer/references/defining-providers.md +72 -0
  172. package/presets/angular-express/skills/angular-developer/references/di-fundamentals.md +120 -0
  173. package/presets/angular-express/skills/angular-developer/references/e2e-testing.md +66 -0
  174. package/presets/angular-express/skills/angular-developer/references/effects.md +83 -0
  175. package/presets/angular-express/skills/angular-developer/references/hierarchical-injectors.md +43 -0
  176. package/presets/angular-express/skills/angular-developer/references/host-elements.md +80 -0
  177. package/presets/angular-express/skills/angular-developer/references/injection-context.md +63 -0
  178. package/presets/angular-express/skills/angular-developer/references/inputs.md +101 -0
  179. package/presets/angular-express/skills/angular-developer/references/linked-signal.md +59 -0
  180. package/presets/angular-express/skills/angular-developer/references/loading-strategies.md +61 -0
  181. package/presets/angular-express/skills/angular-developer/references/mcp.md +106 -0
  182. package/presets/angular-express/skills/angular-developer/references/migrations.md +30 -0
  183. package/presets/angular-express/skills/angular-developer/references/navigate-to-routes.md +69 -0
  184. package/presets/angular-express/skills/angular-developer/references/outputs.md +86 -0
  185. package/presets/angular-express/skills/angular-developer/references/reactive-forms.md +122 -0
  186. package/presets/angular-express/skills/angular-developer/references/rendering-strategies.md +44 -0
  187. package/presets/angular-express/skills/angular-developer/references/resource.md +74 -0
  188. package/presets/angular-express/skills/angular-developer/references/route-animations.md +56 -0
  189. package/presets/angular-express/skills/angular-developer/references/route-guards.md +52 -0
  190. package/presets/angular-express/skills/angular-developer/references/router-lifecycle.md +45 -0
  191. package/presets/angular-express/skills/angular-developer/references/router-testing.md +87 -0
  192. package/presets/angular-express/skills/angular-developer/references/show-routes-with-outlets.md +68 -0
  193. package/presets/angular-express/skills/angular-developer/references/signal-forms.md +897 -0
  194. package/presets/angular-express/skills/angular-developer/references/signals-overview.md +94 -0
  195. package/presets/angular-express/skills/angular-developer/references/tailwind-css.md +69 -0
  196. package/presets/angular-express/skills/angular-developer/references/template-driven-forms.md +114 -0
  197. package/presets/angular-express/skills/angular-developer/references/testing-fundamentals.md +66 -0
  198. package/presets/angular-express/skills/angular-new-app/SKILL.md +62 -0
  199. package/presets/angular-express/skills/frontend-design/LICENSE.txt +177 -0
  200. package/presets/angular-express/skills/frontend-design/SKILL.md +55 -0
  201. package/presets/angular-express/skills/onna-architecture-angular/SKILL.md +229 -0
  202. package/presets/angular-express/skills/onna-architecture-bff/SKILL.md +446 -0
  203. package/presets/angular-express/skills/onna-architecture-common/SKILL.md +313 -0
  204. package/presets/angular-express/skills/onna-design-system/SKILL.md +615 -0
  205. package/presets/base/preset.yaml +27 -0
  206. package/presets/base/rules/core.md +35 -0
  207. package/presets/generic-ts/preset.yaml +46 -0
  208. package/presets/python/preset.yaml +47 -0
  209. package/presets/python/rules/python.md +10 -0
  210. package/schema/engine.schema.json +73 -0
  211. package/schema/manifest.schema.json +140 -0
  212. package/schema/preset.schema.json +98 -0
  213. package/schema/state.schema.json +27 -0
  214. package/skills/shared/ab-testing/SKILL.md +159 -0
  215. package/skills/shared/ab-testing/evals/README.md +8 -0
  216. package/skills/shared/ab-testing/evals/cases.yaml +49 -0
  217. package/skills/shared/ab-testing/references/pitfalls.md +74 -0
  218. package/skills/shared/ab-testing/references/sample-size-and-cuped.md +128 -0
  219. package/skills/shared/ab-testing/scripts/verify.sh +89 -0
  220. package/skills/shared/accessibility/SKILL.md +216 -0
  221. package/skills/shared/accessibility/evals/README.md +3 -0
  222. package/skills/shared/accessibility/evals/cases.yaml +47 -0
  223. package/skills/shared/accessibility/references/aria-patterns.md +113 -0
  224. package/skills/shared/accessibility/references/wcag22-checklist.md +83 -0
  225. package/skills/shared/accessibility/scripts/verify.sh +103 -0
  226. package/skills/shared/agent-eval/SKILL.md +187 -0
  227. package/skills/shared/agent-eval/evals/README.md +12 -0
  228. package/skills/shared/agent-eval/evals/cases.yaml +45 -0
  229. package/skills/shared/agent-eval/references/judge-design.md +118 -0
  230. package/skills/shared/agent-eval/references/runner-and-gate.md +183 -0
  231. package/skills/shared/agent-eval/scripts/verify.sh +161 -0
  232. package/skills/shared/agent-safety/SKILL.md +169 -0
  233. package/skills/shared/agent-safety/evals/README.md +12 -0
  234. package/skills/shared/agent-safety/evals/cases.yaml +46 -0
  235. package/skills/shared/agent-safety/references/threat-model.md +51 -0
  236. package/skills/shared/analyze/SKILL.md +123 -0
  237. package/skills/shared/analyze/evals/README.md +72 -0
  238. package/skills/shared/analyze/evals/cases.yaml +74 -0
  239. package/skills/shared/angular/SKILL.md +275 -0
  240. package/skills/shared/angular/evals/README.md +3 -0
  241. package/skills/shared/angular/evals/cases.yaml +38 -0
  242. package/skills/shared/angular/references/migration.md +81 -0
  243. package/skills/shared/angular/references/signals-rxjs.md +92 -0
  244. package/skills/shared/angular/scripts/verify.sh +122 -0
  245. package/skills/shared/api-connector-builder/SKILL.md +268 -0
  246. package/skills/shared/api-connector-builder/evals/README.md +11 -0
  247. package/skills/shared/api-connector-builder/evals/cases.yaml +47 -0
  248. package/skills/shared/api-connector-builder/references/auth-flows.md +132 -0
  249. package/skills/shared/api-connector-builder/references/pagination.md +144 -0
  250. package/skills/shared/api-connector-builder/scripts/verify.sh +172 -0
  251. package/skills/shared/api-design/SKILL.md +182 -0
  252. package/skills/shared/api-design/evals/README.md +3 -0
  253. package/skills/shared/api-design/evals/cases.yaml +45 -0
  254. package/skills/shared/api-design/references/graphql-design.md +70 -0
  255. package/skills/shared/api-design/references/openapi-contract.md +86 -0
  256. package/skills/shared/api-design/references/rest-conventions.md +63 -0
  257. package/skills/shared/api-design/references/versioning-and-evolution.md +49 -0
  258. package/skills/shared/api-design/scripts/verify.sh +138 -0
  259. package/skills/shared/astro/SKILL.md +257 -0
  260. package/skills/shared/astro/evals/README.md +3 -0
  261. package/skills/shared/astro/evals/cases.yaml +41 -0
  262. package/skills/shared/astro/references/content-layer.md +118 -0
  263. package/skills/shared/astro/references/deploy-and-integrations.md +163 -0
  264. package/skills/shared/astro/scripts/verify.sh +137 -0
  265. package/skills/shared/author-skill/SKILL.md +194 -0
  266. package/skills/shared/author-skill/evals/README.md +66 -0
  267. package/skills/shared/author-skill/evals/cases.yaml +75 -0
  268. package/skills/shared/author-skill/references/description-recipe.md +85 -0
  269. package/skills/shared/author-skill/references/eval-authoring.md +108 -0
  270. package/skills/shared/author-skill/references/skill-conventions.md +95 -0
  271. package/skills/shared/automation-flows/SKILL.md +122 -0
  272. package/skills/shared/automation-flows/evals/README.md +5 -0
  273. package/skills/shared/automation-flows/evals/cases.yaml +44 -0
  274. package/skills/shared/automation-flows/references/error-handling.md +58 -0
  275. package/skills/shared/automation-flows/references/n8n-workflow-json.md +63 -0
  276. package/skills/shared/automation-flows/scripts/verify.sh +78 -0
  277. package/skills/shared/aws-essentials/SKILL.md +206 -0
  278. package/skills/shared/aws-essentials/evals/README.md +10 -0
  279. package/skills/shared/aws-essentials/evals/cases.yaml +44 -0
  280. package/skills/shared/aws-essentials/references/iam-least-privilege.md +134 -0
  281. package/skills/shared/aws-essentials/references/rds-cloudfront-recipes.md +127 -0
  282. package/skills/shared/aws-essentials/scripts/verify.sh +99 -0
  283. package/skills/shared/backups/SKILL.md +131 -0
  284. package/skills/shared/backups/evals/README.md +3 -0
  285. package/skills/shared/backups/evals/cases.yaml +42 -0
  286. package/skills/shared/backups/references/engine-recipes.md +121 -0
  287. package/skills/shared/backups/references/restore-runbook.md +65 -0
  288. package/skills/shared/backups/scripts/verify.sh +80 -0
  289. package/skills/shared/bash-scripting/SKILL.md +227 -0
  290. package/skills/shared/bash-scripting/evals/README.md +3 -0
  291. package/skills/shared/bash-scripting/evals/cases.yaml +45 -0
  292. package/skills/shared/bash-scripting/references/portability.md +97 -0
  293. package/skills/shared/bash-scripting/scripts/verify.sh +140 -0
  294. package/skills/shared/building-agents/SKILL.md +386 -0
  295. package/skills/shared/building-agents/evals/README.md +68 -0
  296. package/skills/shared/building-agents/evals/cases.yaml +60 -0
  297. package/skills/shared/building-agents/references/agent-loops-and-harness.md +371 -0
  298. package/skills/shared/building-agents/references/evals-and-observability.md +420 -0
  299. package/skills/shared/building-agents/references/mcp-servers.md +294 -0
  300. package/skills/shared/building-agents/references/provider-abstraction.md +489 -0
  301. package/skills/shared/building-agents/references/tools-and-rag.md +417 -0
  302. package/skills/shared/building-agents/scripts/verify.sh +121 -0
  303. package/skills/shared/chatbot/SKILL.md +151 -0
  304. package/skills/shared/chatbot/evals/README.md +13 -0
  305. package/skills/shared/chatbot/evals/cases.yaml +43 -0
  306. package/skills/shared/chatbot/references/handoff-and-sales.md +71 -0
  307. package/skills/shared/chatbot/references/system-prompt-and-guardrails.md +78 -0
  308. package/skills/shared/chatbot/scripts/verify.sh +162 -0
  309. package/skills/shared/chrome-extension/SKILL.md +169 -0
  310. package/skills/shared/chrome-extension/evals/README.md +12 -0
  311. package/skills/shared/chrome-extension/evals/cases.yaml +40 -0
  312. package/skills/shared/chrome-extension/references/store-and-migration.md +84 -0
  313. package/skills/shared/chrome-extension/scripts/verify.sh +62 -0
  314. package/skills/shared/clarify/SKILL.md +161 -0
  315. package/skills/shared/clarify/evals/README.md +70 -0
  316. package/skills/shared/clarify/evals/cases.yaml +71 -0
  317. package/skills/shared/clickhouse-analytics/SKILL.md +159 -0
  318. package/skills/shared/clickhouse-analytics/evals/README.md +3 -0
  319. package/skills/shared/clickhouse-analytics/evals/cases.yaml +45 -0
  320. package/skills/shared/clickhouse-analytics/references/ingestion-and-mvs.md +109 -0
  321. package/skills/shared/clickhouse-analytics/references/query-optimization.md +76 -0
  322. package/skills/shared/clickhouse-analytics/references/schema-and-engines.md +63 -0
  323. package/skills/shared/clickhouse-analytics/scripts/verify.sh +109 -0
  324. package/skills/shared/cloudflare/SKILL.md +186 -0
  325. package/skills/shared/cloudflare/evals/README.md +15 -0
  326. package/skills/shared/cloudflare/evals/cases.yaml +46 -0
  327. package/skills/shared/cloudflare/references/storage-primitives.md +104 -0
  328. package/skills/shared/cloudflare/references/wrangler-config.md +91 -0
  329. package/skills/shared/cloudflare/scripts/verify.sh +133 -0
  330. package/skills/shared/code-review/SKILL.md +132 -0
  331. package/skills/shared/code-review/evals/README.md +3 -0
  332. package/skills/shared/code-review/evals/cases.yaml +55 -0
  333. package/skills/shared/code-review/references/pr-workflow.md +67 -0
  334. package/skills/shared/codebase-onboarding/SKILL.md +128 -0
  335. package/skills/shared/codebase-onboarding/evals/README.md +3 -0
  336. package/skills/shared/codebase-onboarding/evals/cases.yaml +69 -0
  337. package/skills/shared/codebase-onboarding/references/recon-playbook.md +57 -0
  338. package/skills/shared/codebase-onboarding/scripts/verify.sh +54 -0
  339. package/skills/shared/compose-multiplatform/SKILL.md +198 -0
  340. package/skills/shared/compose-multiplatform/evals/README.md +3 -0
  341. package/skills/shared/compose-multiplatform/evals/cases.yaml +40 -0
  342. package/skills/shared/compose-multiplatform/references/ios-interop.md +91 -0
  343. package/skills/shared/compose-multiplatform/references/project-setup.md +96 -0
  344. package/skills/shared/compose-multiplatform/scripts/verify.sh +123 -0
  345. package/skills/shared/connect-tool/SKILL.md +163 -0
  346. package/skills/shared/connect-tool/evals/cases.yaml +58 -0
  347. package/skills/shared/constitution/SKILL.md +158 -0
  348. package/skills/shared/constitution/evals/README.md +68 -0
  349. package/skills/shared/constitution/evals/cases.yaml +72 -0
  350. package/skills/shared/constitution/references/constitution-template.md +100 -0
  351. package/skills/shared/context-budget/SKILL.md +114 -0
  352. package/skills/shared/context-budget/evals/README.md +11 -0
  353. package/skills/shared/context-budget/evals/cases.yaml +40 -0
  354. package/skills/shared/context-budget/references/handoff-and-compaction.md +96 -0
  355. package/skills/shared/continuous-learning/SKILL.md +106 -0
  356. package/skills/shared/continuous-learning/evals/README.md +16 -0
  357. package/skills/shared/continuous-learning/evals/cases.yaml +39 -0
  358. package/skills/shared/continuous-learning/references/lesson-routing.md +106 -0
  359. package/skills/shared/coolify/SKILL.md +194 -0
  360. package/skills/shared/coolify/evals/README.md +21 -0
  361. package/skills/shared/coolify/evals/cases.yaml +46 -0
  362. package/skills/shared/coolify/references/databases-and-backups.md +99 -0
  363. package/skills/shared/coolify/references/deploy-recipes.md +105 -0
  364. package/skills/shared/coolify/references/install-and-proxy.md +80 -0
  365. package/skills/shared/coolify/scripts/verify.sh +123 -0
  366. package/skills/shared/cost-tracking/SKILL.md +176 -0
  367. package/skills/shared/cost-tracking/evals/README.md +3 -0
  368. package/skills/shared/cost-tracking/evals/cases.yaml +45 -0
  369. package/skills/shared/cost-tracking/references/cloud-caps.md +52 -0
  370. package/skills/shared/cost-tracking/references/pricing-tables.md +51 -0
  371. package/skills/shared/cost-tracking/scripts/verify.sh +135 -0
  372. package/skills/shared/cpp/SKILL.md +302 -0
  373. package/skills/shared/cpp/evals/README.md +14 -0
  374. package/skills/shared/cpp/evals/cases.yaml +44 -0
  375. package/skills/shared/cpp/references/cmake.md +167 -0
  376. package/skills/shared/cpp/references/move-and-templates.md +130 -0
  377. package/skills/shared/cpp/references/undefined-behavior.md +86 -0
  378. package/skills/shared/cpp/scripts/verify.sh +165 -0
  379. package/skills/shared/csharp-dotnet/SKILL.md +272 -0
  380. package/skills/shared/csharp-dotnet/evals/README.md +3 -0
  381. package/skills/shared/csharp-dotnet/evals/cases.yaml +48 -0
  382. package/skills/shared/csharp-dotnet/references/aspnetcore.md +99 -0
  383. package/skills/shared/csharp-dotnet/references/async.md +82 -0
  384. package/skills/shared/csharp-dotnet/references/efcore.md +96 -0
  385. package/skills/shared/csharp-dotnet/scripts/verify.sh +90 -0
  386. package/skills/shared/data-cleaning/SKILL.md +259 -0
  387. package/skills/shared/data-cleaning/evals/README.md +16 -0
  388. package/skills/shared/data-cleaning/evals/cases.yaml +57 -0
  389. package/skills/shared/data-cleaning/references/normalization-recipes.md +136 -0
  390. package/skills/shared/data-cleaning/references/validation-patterns.md +134 -0
  391. package/skills/shared/data-cleaning/scripts/verify.sh +115 -0
  392. package/skills/shared/data-scraper/SKILL.md +130 -0
  393. package/skills/shared/data-scraper/evals/README.md +3 -0
  394. package/skills/shared/data-scraper/evals/cases.yaml +46 -0
  395. package/skills/shared/data-scraper/references/anti-bot.md +85 -0
  396. package/skills/shared/data-scraper/references/frameworks.md +116 -0
  397. package/skills/shared/data-scraper/references/legal-compliance.md +64 -0
  398. package/skills/shared/data-scraper/scripts/verify.sh +166 -0
  399. package/skills/shared/db-migrations/SKILL.md +237 -0
  400. package/skills/shared/db-migrations/evals/README.md +10 -0
  401. package/skills/shared/db-migrations/evals/cases.yaml +46 -0
  402. package/skills/shared/db-migrations/references/backfill-and-batching.md +105 -0
  403. package/skills/shared/db-migrations/references/expand-contract-playbook.md +152 -0
  404. package/skills/shared/db-migrations/references/tools-and-runners.md +88 -0
  405. package/skills/shared/db-migrations/scripts/verify.sh +112 -0
  406. package/skills/shared/debug/SKILL.md +188 -0
  407. package/skills/shared/debug/evals/README.md +88 -0
  408. package/skills/shared/debug/evals/cases.yaml +74 -0
  409. package/skills/shared/decision-challenge/SKILL.md +113 -0
  410. package/skills/shared/decision-challenge/evals/README.md +3 -0
  411. package/skills/shared/decision-challenge/evals/cases.yaml +42 -0
  412. package/skills/shared/decision-records/SKILL.md +202 -0
  413. package/skills/shared/decision-records/evals/README.md +3 -0
  414. package/skills/shared/decision-records/evals/cases.yaml +43 -0
  415. package/skills/shared/decision-records/references/templates.md +252 -0
  416. package/skills/shared/decision-records/scripts/verify.sh +105 -0
  417. package/skills/shared/deep-learning/SKILL.md +226 -0
  418. package/skills/shared/deep-learning/evals/README.md +11 -0
  419. package/skills/shared/deep-learning/evals/cases.yaml +48 -0
  420. package/skills/shared/deep-learning/references/distributed.md +105 -0
  421. package/skills/shared/deep-learning/references/training-recipes.md +135 -0
  422. package/skills/shared/deployment/SKILL.md +374 -0
  423. package/skills/shared/deployment/evals/README.md +50 -0
  424. package/skills/shared/deployment/evals/cases.yaml +53 -0
  425. package/skills/shared/deployment/references/coolify.md +216 -0
  426. package/skills/shared/deployment/references/dockerfiles-by-stack.md +319 -0
  427. package/skills/shared/deployment/references/github-actions.md +295 -0
  428. package/skills/shared/deployment/references/hosting-targets.md +272 -0
  429. package/skills/shared/deployment/scripts/verify.sh +134 -0
  430. package/skills/shared/deprecation/SKILL.md +123 -0
  431. package/skills/shared/deprecation/evals/README.md +3 -0
  432. package/skills/shared/deprecation/evals/cases.yaml +42 -0
  433. package/skills/shared/design/IMPECCABLE-LICENSE.txt +191 -0
  434. package/skills/shared/design/SKILL.md +111 -0
  435. package/skills/shared/design/THIRD_PARTY.md +26 -0
  436. package/skills/shared/design/engine/LICENSE +21 -0
  437. package/skills/shared/design/engine/RUN.md +515 -0
  438. package/skills/shared/design/engine/UPSTREAM.json +4 -0
  439. package/skills/shared/design/engine/assets/app.css +216 -0
  440. package/skills/shared/design/engine/assets/base.css +105 -0
  441. package/skills/shared/design/engine/assets/base.js +37 -0
  442. package/skills/shared/design/engine/assets/charts.js +617 -0
  443. package/skills/shared/design/engine/assets/scenes/stage.css +28 -0
  444. package/skills/shared/design/engine/assets/scenes/stage.js +133 -0
  445. package/skills/shared/design/engine/library/app.json +1327 -0
  446. package/skills/shared/design/engine/library/directions.json +1078 -0
  447. package/skills/shared/design/engine/library/heroes.json +1086 -0
  448. package/skills/shared/design/engine/library/motions.json +92 -0
  449. package/skills/shared/design/engine/library/palettes.json +1485 -0
  450. package/skills/shared/design/engine/library/photos.json +7240 -0
  451. package/skills/shared/design/engine/library/sections.json +4429 -0
  452. package/skills/shared/design/engine/library/sites.json +8350 -0
  453. package/skills/shared/design/engine/library/type.json +2024 -0
  454. package/skills/shared/design/engine/references/app-screens.md +1199 -0
  455. package/skills/shared/design/engine/references/colour.md +141 -0
  456. package/skills/shared/design/engine/references/copy.md +177 -0
  457. package/skills/shared/design/engine/references/critique.md +182 -0
  458. package/skills/shared/design/engine/references/imagery.md +791 -0
  459. package/skills/shared/design/engine/references/layout.md +292 -0
  460. package/skills/shared/design/engine/references/motion.md +980 -0
  461. package/skills/shared/design/engine/references/research.md +356 -0
  462. package/skills/shared/design/engine/references/scenes.md +174 -0
  463. package/skills/shared/design/engine/references/tells.md +115 -0
  464. package/skills/shared/design/engine/references/type.md +170 -0
  465. package/skills/shared/design/engine/scripts/assets.mjs +865 -0
  466. package/skills/shared/design/engine/scripts/draw.mjs +584 -0
  467. package/skills/shared/design/engine/scripts/inspect.mjs +303 -0
  468. package/skills/shared/design/engine/scripts/lib/app-draw.mjs +203 -0
  469. package/skills/shared/design/engine/scripts/lib/cdp.mjs +248 -0
  470. package/skills/shared/design/engine/scripts/lib/probe.mjs +909 -0
  471. package/skills/shared/design/engine/scripts/lib/rules.mjs +243 -0
  472. package/skills/shared/design/engine/scripts/lint.mjs +119 -0
  473. package/skills/shared/design/engine/scripts/scenes.mjs +124 -0
  474. package/skills/shared/design/evals/cases.yaml +45 -0
  475. package/skills/shared/design/references/design-md.md +49 -0
  476. package/skills/shared/design/references/finish-review.md +46 -0
  477. package/skills/shared/design/references/modes.md +51 -0
  478. package/skills/shared/digitalocean/SKILL.md +227 -0
  479. package/skills/shared/digitalocean/evals/README.md +10 -0
  480. package/skills/shared/digitalocean/evals/cases.yaml +37 -0
  481. package/skills/shared/digitalocean/references/app-spec.md +126 -0
  482. package/skills/shared/digitalocean/references/droplet-ops.md +95 -0
  483. package/skills/shared/digitalocean/scripts/verify.sh +102 -0
  484. package/skills/shared/django/SKILL.md +263 -0
  485. package/skills/shared/django/evals/README.md +11 -0
  486. package/skills/shared/django/evals/cases.yaml +47 -0
  487. package/skills/shared/django/references/drf.md +109 -0
  488. package/skills/shared/django/references/orm-performance.md +91 -0
  489. package/skills/shared/django/references/security.md +81 -0
  490. package/skills/shared/django/references/testing.md +86 -0
  491. package/skills/shared/django/scripts/verify.sh +115 -0
  492. package/skills/shared/docker/SKILL.md +251 -0
  493. package/skills/shared/docker/evals/README.md +10 -0
  494. package/skills/shared/docker/evals/cases.yaml +44 -0
  495. package/skills/shared/docker/references/base-images-and-stages.md +104 -0
  496. package/skills/shared/docker/references/compose-recipes.md +109 -0
  497. package/skills/shared/docker/scripts/verify.sh +149 -0
  498. package/skills/shared/domains-dns/SKILL.md +131 -0
  499. package/skills/shared/domains-dns/evals/README.md +16 -0
  500. package/skills/shared/domains-dns/evals/cases.yaml +47 -0
  501. package/skills/shared/domains-dns/references/record-cookbook.md +94 -0
  502. package/skills/shared/domains-dns/references/tls-and-acme.md +90 -0
  503. package/skills/shared/domains-dns/references/verify-and-debug.md +64 -0
  504. package/skills/shared/domains-dns/scripts/verify.sh +163 -0
  505. package/skills/shared/drizzle-orm/SKILL.md +231 -0
  506. package/skills/shared/drizzle-orm/evals/README.md +12 -0
  507. package/skills/shared/drizzle-orm/evals/cases.yaml +47 -0
  508. package/skills/shared/drizzle-orm/references/relations-and-drivers.md +118 -0
  509. package/skills/shared/drizzle-orm/scripts/verify.sh +155 -0
  510. package/skills/shared/duckdb/SKILL.md +202 -0
  511. package/skills/shared/duckdb/evals/README.md +31 -0
  512. package/skills/shared/duckdb/evals/cases.yaml +41 -0
  513. package/skills/shared/duckdb/references/python-and-interop.md +105 -0
  514. package/skills/shared/duckdb/references/remote-and-lakehouse.md +101 -0
  515. package/skills/shared/duckdb/scripts/verify.sh +71 -0
  516. package/skills/shared/dynamodb/SKILL.md +204 -0
  517. package/skills/shared/dynamodb/evals/README.md +8 -0
  518. package/skills/shared/dynamodb/evals/cases.yaml +46 -0
  519. package/skills/shared/dynamodb/references/access-patterns.md +127 -0
  520. package/skills/shared/dynamodb/references/capacity-and-limits.md +78 -0
  521. package/skills/shared/dynamodb/scripts/verify.sh +108 -0
  522. package/skills/shared/e2e-testing/SKILL.md +233 -0
  523. package/skills/shared/e2e-testing/evals/README.md +10 -0
  524. package/skills/shared/e2e-testing/evals/cases.yaml +64 -0
  525. package/skills/shared/e2e-testing/references/config-and-ci.md +156 -0
  526. package/skills/shared/e2e-testing/references/flakiness-playbook.md +124 -0
  527. package/skills/shared/e2e-testing/scripts/verify.sh +117 -0
  528. package/skills/shared/electron/SKILL.md +209 -0
  529. package/skills/shared/electron/evals/README.md +13 -0
  530. package/skills/shared/electron/evals/cases.yaml +38 -0
  531. package/skills/shared/electron/references/packaging-and-updates.md +122 -0
  532. package/skills/shared/electron/references/security-and-ipc.md +158 -0
  533. package/skills/shared/electron/scripts/verify.sh +143 -0
  534. package/skills/shared/elixir/SKILL.md +209 -0
  535. package/skills/shared/elixir/evals/README.md +3 -0
  536. package/skills/shared/elixir/evals/cases.yaml +41 -0
  537. package/skills/shared/elixir/references/mix-and-releases.md +91 -0
  538. package/skills/shared/elixir/references/otp-patterns.md +96 -0
  539. package/skills/shared/elixir/scripts/verify.sh +76 -0
  540. package/skills/shared/email-deliverability/SKILL.md +148 -0
  541. package/skills/shared/email-deliverability/evals/README.md +21 -0
  542. package/skills/shared/email-deliverability/evals/cases.yaml +45 -0
  543. package/skills/shared/email-deliverability/scripts/verify.sh +98 -0
  544. package/skills/shared/embeddings-search/SKILL.md +184 -0
  545. package/skills/shared/embeddings-search/evals/README.md +10 -0
  546. package/skills/shared/embeddings-search/evals/cases.yaml +44 -0
  547. package/skills/shared/embeddings-search/references/evaluation.md +86 -0
  548. package/skills/shared/embeddings-search/references/models.md +73 -0
  549. package/skills/shared/embeddings-search/scripts/verify.sh +103 -0
  550. package/skills/shared/error-handling/SKILL.md +273 -0
  551. package/skills/shared/error-handling/evals/README.md +12 -0
  552. package/skills/shared/error-handling/evals/cases.yaml +46 -0
  553. package/skills/shared/error-handling/references/boundaries-and-messaging.md +120 -0
  554. package/skills/shared/error-handling/references/retry-and-resilience.md +154 -0
  555. package/skills/shared/error-handling/scripts/verify.sh +110 -0
  556. package/skills/shared/expo/SKILL.md +243 -0
  557. package/skills/shared/expo/evals/README.md +13 -0
  558. package/skills/shared/expo/evals/cases.yaml +44 -0
  559. package/skills/shared/expo/references/config-plugins.md +117 -0
  560. package/skills/shared/expo/references/eas-update.md +118 -0
  561. package/skills/shared/expo/scripts/verify.sh +132 -0
  562. package/skills/shared/fal/SKILL.md +196 -0
  563. package/skills/shared/fal/evals/README.md +3 -0
  564. package/skills/shared/fal/evals/cases.yaml +42 -0
  565. package/skills/shared/fal/references/models-and-cost.md +53 -0
  566. package/skills/shared/fal/references/queue-and-webhooks.md +153 -0
  567. package/skills/shared/fal/scripts/verify.sh +72 -0
  568. package/skills/shared/fastapi/SKILL.md +469 -0
  569. package/skills/shared/fastapi/evals/README.md +50 -0
  570. package/skills/shared/fastapi/evals/cases.yaml +55 -0
  571. package/skills/shared/fastapi/references/database.md +347 -0
  572. package/skills/shared/fastapi/references/production.md +338 -0
  573. package/skills/shared/fastapi/references/security.md +330 -0
  574. package/skills/shared/fastapi/references/testing.md +349 -0
  575. package/skills/shared/fastapi/scripts/verify.sh +157 -0
  576. package/skills/shared/finetuning/SKILL.md +232 -0
  577. package/skills/shared/finetuning/evals/README.md +13 -0
  578. package/skills/shared/finetuning/evals/cases.yaml +50 -0
  579. package/skills/shared/finetuning/references/hyperparameters-and-eval.md +74 -0
  580. package/skills/shared/finetuning/references/methods.md +189 -0
  581. package/skills/shared/firebase/SKILL.md +237 -0
  582. package/skills/shared/firebase/evals/README.md +12 -0
  583. package/skills/shared/firebase/evals/cases.yaml +45 -0
  584. package/skills/shared/firebase/references/cloud-functions.md +102 -0
  585. package/skills/shared/firebase/references/data-modeling.md +108 -0
  586. package/skills/shared/firebase/references/security-rules.md +137 -0
  587. package/skills/shared/firebase/scripts/verify.sh +98 -0
  588. package/skills/shared/flutter/SKILL.md +400 -0
  589. package/skills/shared/flutter/evals/README.md +54 -0
  590. package/skills/shared/flutter/evals/cases.yaml +69 -0
  591. package/skills/shared/flutter/references/architecture-and-state.md +499 -0
  592. package/skills/shared/flutter/references/i18n-and-dependencies.md +197 -0
  593. package/skills/shared/flutter/references/performance.md +299 -0
  594. package/skills/shared/flutter/references/testing.md +385 -0
  595. package/skills/shared/flutter/references/ui-and-navigation.md +378 -0
  596. package/skills/shared/flutter/scripts/verify.sh +104 -0
  597. package/skills/shared/fly-io/SKILL.md +197 -0
  598. package/skills/shared/fly-io/evals/README.md +3 -0
  599. package/skills/shared/fly-io/evals/cases.yaml +42 -0
  600. package/skills/shared/fly-io/references/fly-toml.md +155 -0
  601. package/skills/shared/fly-io/references/multi-region.md +66 -0
  602. package/skills/shared/fly-io/scripts/verify.sh +90 -0
  603. package/skills/shared/ftd/SKILL.md +111 -0
  604. package/skills/shared/ftd/evals/cases.yaml +66 -0
  605. package/skills/shared/ftd/evals/routing.json +24 -0
  606. package/skills/shared/game-design/SKILL.md +146 -0
  607. package/skills/shared/game-design/evals/README.md +13 -0
  608. package/skills/shared/game-design/evals/cases.yaml +47 -0
  609. package/skills/shared/game-design/references/mechanics-and-loops.md +78 -0
  610. package/skills/shared/game-design/references/playtesting-and-scope.md +58 -0
  611. package/skills/shared/game-design/references/progression-and-economy.md +70 -0
  612. package/skills/shared/game-storytelling/SKILL.md +134 -0
  613. package/skills/shared/game-storytelling/evals/README.md +28 -0
  614. package/skills/shared/game-storytelling/evals/cases.yaml +51 -0
  615. package/skills/shared/game-storytelling/references/branching-and-state.md +134 -0
  616. package/skills/shared/game-storytelling/references/dialogue-tools.md +117 -0
  617. package/skills/shared/game-storytelling/references/environmental-storytelling.md +71 -0
  618. package/skills/shared/gamedev-multiplayer/SKILL.md +237 -0
  619. package/skills/shared/gamedev-multiplayer/evals/README.md +12 -0
  620. package/skills/shared/gamedev-multiplayer/evals/cases.yaml +44 -0
  621. package/skills/shared/gamedev-multiplayer/references/godot-high-level-multiplayer.md +133 -0
  622. package/skills/shared/gamedev-multiplayer/references/prediction-and-latency.md +104 -0
  623. package/skills/shared/gamedev-multiplayer/references/unity-and-unreal-netcode.md +166 -0
  624. package/skills/shared/gamedev-pathing/SKILL.md +233 -0
  625. package/skills/shared/gamedev-pathing/evals/README.md +14 -0
  626. package/skills/shared/gamedev-pathing/evals/cases.yaml +49 -0
  627. package/skills/shared/gamedev-pathing/references/navmesh-workflow.md +110 -0
  628. package/skills/shared/gamedev-pathing/references/search-algorithms.md +135 -0
  629. package/skills/shared/gamedev-pathing/references/steering-and-avoidance.md +120 -0
  630. package/skills/shared/gamedev-physics/SKILL.md +225 -0
  631. package/skills/shared/gamedev-physics/evals/README.md +12 -0
  632. package/skills/shared/gamedev-physics/evals/cases.yaml +54 -0
  633. package/skills/shared/gamedev-physics/references/character-controllers.md +120 -0
  634. package/skills/shared/gamedev-physics/references/determinism-and-queries.md +124 -0
  635. package/skills/shared/gamedev-physics/references/layers-and-masks.md +115 -0
  636. package/skills/shared/gamedev-shaders/SKILL.md +232 -0
  637. package/skills/shared/gamedev-shaders/evals/README.md +14 -0
  638. package/skills/shared/gamedev-shaders/evals/cases.yaml +45 -0
  639. package/skills/shared/gamedev-shaders/references/effect-recipes.md +205 -0
  640. package/skills/shared/gamedev-shaders/references/godot-shading-language.md +133 -0
  641. package/skills/shared/gamedev-shaders/references/unity-and-unreal-shaders.md +169 -0
  642. package/skills/shared/gamedev-shipping/SKILL.md +220 -0
  643. package/skills/shared/gamedev-shipping/evals/README.md +9 -0
  644. package/skills/shared/gamedev-shipping/evals/cases.yaml +55 -0
  645. package/skills/shared/gamedev-shipping/references/mobile-and-desktop.md +127 -0
  646. package/skills/shared/gamedev-shipping/references/stores-and-ci.md +162 -0
  647. package/skills/shared/gamedev-shipping/references/web-export-headers.md +140 -0
  648. package/skills/shared/gcp-essentials/SKILL.md +324 -0
  649. package/skills/shared/gcp-essentials/evals/README.md +12 -0
  650. package/skills/shared/gcp-essentials/evals/cases.yaml +38 -0
  651. package/skills/shared/gcp-essentials/references/deploy-recipes.md +81 -0
  652. package/skills/shared/gcp-essentials/references/iam-and-auth.md +94 -0
  653. package/skills/shared/gcp-essentials/references/networking-and-sql.md +74 -0
  654. package/skills/shared/gcp-essentials/scripts/verify.sh +158 -0
  655. package/skills/shared/git-workflow/SKILL.md +214 -0
  656. package/skills/shared/git-workflow/evals/README.md +10 -0
  657. package/skills/shared/git-workflow/evals/cases.yaml +52 -0
  658. package/skills/shared/git-workflow/references/gitmoji.md +157 -0
  659. package/skills/shared/git-workflow/references/interactive-rebase.md +89 -0
  660. package/skills/shared/github-actions/SKILL.md +244 -0
  661. package/skills/shared/github-actions/evals/README.md +3 -0
  662. package/skills/shared/github-actions/evals/cases.yaml +45 -0
  663. package/skills/shared/github-actions/references/caching-and-matrix.md +92 -0
  664. package/skills/shared/github-actions/references/oidc-deploys.md +130 -0
  665. package/skills/shared/github-actions/scripts/verify.sh +105 -0
  666. package/skills/shared/gitlab-auth/SKILL.md +99 -0
  667. package/skills/shared/gitlab-workflow/SKILL.md +138 -0
  668. package/skills/shared/go/SKILL.md +390 -0
  669. package/skills/shared/go/evals/README.md +56 -0
  670. package/skills/shared/go/evals/cases.yaml +55 -0
  671. package/skills/shared/go/references/concurrency.md +557 -0
  672. package/skills/shared/go/references/http-services.md +529 -0
  673. package/skills/shared/go/references/testing.md +338 -0
  674. package/skills/shared/go/scripts/verify.sh +134 -0
  675. package/skills/shared/godot/SKILL.md +300 -0
  676. package/skills/shared/godot/evals/README.md +13 -0
  677. package/skills/shared/godot/evals/cases.yaml +50 -0
  678. package/skills/shared/godot/references/export-and-testing.md +102 -0
  679. package/skills/shared/godot/references/gdscript-style.md +84 -0
  680. package/skills/shared/godot/references/godot3-to-4-traps.md +89 -0
  681. package/skills/shared/godot/references/nodes-scenes-resources.md +109 -0
  682. package/skills/shared/harness/SKILL.md +316 -0
  683. package/skills/shared/harness/assets/_TEMPLATE/.env.example +8 -0
  684. package/skills/shared/harness/assets/_TEMPLATE/CREDENTIALS.md +25 -0
  685. package/skills/shared/harness/assets/_TEMPLATE/README.md +25 -0
  686. package/skills/shared/harness/assets/_TEMPLATE/gitignore +10 -0
  687. package/skills/shared/harness/assets/_TEMPLATE/test_connection.sh +30 -0
  688. package/skills/shared/harness/evals/README.md +54 -0
  689. package/skills/shared/harness/evals/cases.yaml +72 -0
  690. package/skills/shared/harness/examples/audit-example.md +120 -0
  691. package/skills/shared/harness/references/agents-md-template.md +41 -0
  692. package/skills/shared/harness/references/audit-report-template.html +140 -0
  693. package/skills/shared/harness/references/audit-report-template.md +116 -0
  694. package/skills/shared/harness/references/claude-md-template.md +85 -0
  695. package/skills/shared/harness/references/daily-curation-automation.md +68 -0
  696. package/skills/shared/harness/references/inbox-readme-template.md +51 -0
  697. package/skills/shared/harness/references/ingest-formats.md +185 -0
  698. package/skills/shared/harness/references/ingest-ignore-defaults.md +48 -0
  699. package/skills/shared/harness/references/obsidian-scaffolding.md +103 -0
  700. package/skills/shared/harness/references/providers.yaml +3546 -0
  701. package/skills/shared/harness/references/tools-readme-template.md +88 -0
  702. package/skills/shared/harness/references/wiki-archive-template.html +81 -0
  703. package/skills/shared/harness/references/wiki-article-template.md +60 -0
  704. package/skills/shared/harness/references/wiki-dashboard-template.html +136 -0
  705. package/skills/shared/harness/references/wiki-deep-improve-report-template.html +126 -0
  706. package/skills/shared/harness/references/wiki-gaps-template.md +22 -0
  707. package/skills/shared/harness/references/wiki-index-template.md +32 -0
  708. package/skills/shared/harness/references/wiki-protocol.md +926 -0
  709. package/skills/shared/harness/references/wiki-raw-template.md +7 -0
  710. package/skills/shared/harness/references/wiki-worklog-template.md +60 -0
  711. package/skills/shared/hetzner/SKILL.md +203 -0
  712. package/skills/shared/hetzner/evals/README.md +35 -0
  713. package/skills/shared/hetzner/evals/cases.yaml +46 -0
  714. package/skills/shared/hetzner/references/cloud-init.md +120 -0
  715. package/skills/shared/hetzner/references/plans-and-locations.md +56 -0
  716. package/skills/shared/hetzner/scripts/verify.sh +122 -0
  717. package/skills/shared/htmx/SKILL.md +261 -0
  718. package/skills/shared/htmx/evals/README.md +3 -0
  719. package/skills/shared/htmx/evals/cases.yaml +38 -0
  720. package/skills/shared/htmx/references/patterns.md +113 -0
  721. package/skills/shared/htmx/references/server-contract.md +91 -0
  722. package/skills/shared/htmx/scripts/verify.sh +93 -0
  723. package/skills/shared/huggingface/SKILL.md +191 -0
  724. package/skills/shared/huggingface/evals/README.md +11 -0
  725. package/skills/shared/huggingface/evals/cases.yaml +41 -0
  726. package/skills/shared/huggingface/references/endpoints-and-spaces.md +99 -0
  727. package/skills/shared/huggingface/references/hub-and-cli.md +85 -0
  728. package/skills/shared/huggingface/references/inference-providers.md +115 -0
  729. package/skills/shared/huggingface/scripts/verify.sh +123 -0
  730. package/skills/shared/idea-refinement/SKILL.md +121 -0
  731. package/skills/shared/idea-refinement/evals/README.md +3 -0
  732. package/skills/shared/idea-refinement/evals/cases.yaml +42 -0
  733. package/skills/shared/implement/SKILL.md +383 -0
  734. package/skills/shared/implement/evals/README.md +56 -0
  735. package/skills/shared/implement/evals/cases.yaml +43 -0
  736. package/skills/shared/implement/references/per-task-review.md +46 -0
  737. package/skills/shared/implement/scripts/review-package +59 -0
  738. package/skills/shared/implement/scripts/sdd-workspace +47 -0
  739. package/skills/shared/implement/scripts/task-brief +77 -0
  740. package/skills/shared/init/SKILL.md +209 -0
  741. package/skills/shared/init/evals/README.md +49 -0
  742. package/skills/shared/init/evals/cases.yaml +74 -0
  743. package/skills/shared/init/references/accompaniment-and-profile.md +122 -0
  744. package/skills/shared/init/references/discovery.md +90 -0
  745. package/skills/shared/init/references/recommend-skills.md +115 -0
  746. package/skills/shared/init/scripts/verify.sh +118 -0
  747. package/skills/shared/java/SKILL.md +341 -0
  748. package/skills/shared/java/evals/README.md +23 -0
  749. package/skills/shared/java/evals/cases.yaml +43 -0
  750. package/skills/shared/java/references/builds.md +133 -0
  751. package/skills/shared/java/references/concurrency.md +108 -0
  752. package/skills/shared/java/references/streams.md +102 -0
  753. package/skills/shared/java/scripts/verify.sh +107 -0
  754. package/skills/shared/knowledge-ops/SKILL.md +122 -0
  755. package/skills/shared/knowledge-ops/evals/README.md +16 -0
  756. package/skills/shared/knowledge-ops/evals/cases.yaml +50 -0
  757. package/skills/shared/knowledge-ops/references/gardening-playbook.md +126 -0
  758. package/skills/shared/kotlin-android/SKILL.md +245 -0
  759. package/skills/shared/kotlin-android/evals/README.md +13 -0
  760. package/skills/shared/kotlin-android/evals/cases.yaml +56 -0
  761. package/skills/shared/kotlin-android/references/architecture.md +200 -0
  762. package/skills/shared/kotlin-android/references/gradle-setup.md +125 -0
  763. package/skills/shared/kotlin-android/scripts/verify.sh +109 -0
  764. package/skills/shared/laravel/SKILL.md +301 -0
  765. package/skills/shared/laravel/evals/README.md +10 -0
  766. package/skills/shared/laravel/evals/cases.yaml +45 -0
  767. package/skills/shared/laravel/references/eloquent-patterns.md +126 -0
  768. package/skills/shared/laravel/references/queues-and-scheduling.md +153 -0
  769. package/skills/shared/laravel/scripts/verify.sh +128 -0
  770. package/skills/shared/level-design/SKILL.md +143 -0
  771. package/skills/shared/level-design/evals/README.md +35 -0
  772. package/skills/shared/level-design/evals/cases.yaml +58 -0
  773. package/skills/shared/level-design/references/blockout-to-art.md +118 -0
  774. package/skills/shared/level-design/references/guidance-and-readability.md +152 -0
  775. package/skills/shared/level-design/references/pacing-and-encounters.md +142 -0
  776. package/skills/shared/llm-pipeline/SKILL.md +150 -0
  777. package/skills/shared/llm-pipeline/evals/README.md +3 -0
  778. package/skills/shared/llm-pipeline/evals/cases.yaml +44 -0
  779. package/skills/shared/llm-pipeline/references/caching-layers.md +60 -0
  780. package/skills/shared/llm-pipeline/references/litellm-router.md +101 -0
  781. package/skills/shared/llm-pipeline/scripts/verify.sh +169 -0
  782. package/skills/shared/machine-learning/SKILL.md +228 -0
  783. package/skills/shared/machine-learning/evals/README.md +15 -0
  784. package/skills/shared/machine-learning/evals/cases.yaml +54 -0
  785. package/skills/shared/machine-learning/references/gbdt-and-tuning.md +83 -0
  786. package/skills/shared/machine-learning/references/metrics-and-imbalance.md +82 -0
  787. package/skills/shared/machine-learning/references/pipelines-and-cv.md +135 -0
  788. package/skills/shared/modal/SKILL.md +290 -0
  789. package/skills/shared/modal/evals/README.md +29 -0
  790. package/skills/shared/modal/evals/cases.yaml +50 -0
  791. package/skills/shared/modal/references/images-gpu-cookbook.md +160 -0
  792. package/skills/shared/modal/references/web-and-scaling.md +138 -0
  793. package/skills/shared/modal/scripts/verify.sh +127 -0
  794. package/skills/shared/mongodb/SKILL.md +342 -0
  795. package/skills/shared/mongodb/evals/README.md +29 -0
  796. package/skills/shared/mongodb/evals/cases.yaml +41 -0
  797. package/skills/shared/mongodb/references/aggregation.md +115 -0
  798. package/skills/shared/mongodb/references/data-modeling.md +135 -0
  799. package/skills/shared/mongodb/references/transactions-and-ops.md +128 -0
  800. package/skills/shared/mongodb/scripts/verify.sh +151 -0
  801. package/skills/shared/monitoring/SKILL.md +155 -0
  802. package/skills/shared/monitoring/evals/README.md +3 -0
  803. package/skills/shared/monitoring/evals/cases.yaml +47 -0
  804. package/skills/shared/monitoring/references/burn-rate-and-oncall.md +128 -0
  805. package/skills/shared/monitoring/references/tool-setup.md +154 -0
  806. package/skills/shared/monitoring/scripts/verify.sh +145 -0
  807. package/skills/shared/mysql/SKILL.md +249 -0
  808. package/skills/shared/mysql/evals/README.md +12 -0
  809. package/skills/shared/mysql/evals/cases.yaml +49 -0
  810. package/skills/shared/mysql/references/indexing-and-explain.md +161 -0
  811. package/skills/shared/mysql/references/mysql-vs-mariadb.md +78 -0
  812. package/skills/shared/mysql/references/online-ddl-and-migrations.md +120 -0
  813. package/skills/shared/mysql/references/replication-and-ha.md +115 -0
  814. package/skills/shared/mysql/scripts/verify.sh +141 -0
  815. package/skills/shared/neon/SKILL.md +218 -0
  816. package/skills/shared/neon/evals/README.md +11 -0
  817. package/skills/shared/neon/evals/cases.yaml +45 -0
  818. package/skills/shared/neon/references/branching-ci.md +86 -0
  819. package/skills/shared/neon/scripts/verify.sh +78 -0
  820. package/skills/shared/nestjs/SKILL.md +217 -0
  821. package/skills/shared/nestjs/evals/README.md +3 -0
  822. package/skills/shared/nestjs/evals/cases.yaml +38 -0
  823. package/skills/shared/nestjs/references/cross-cutting.md +135 -0
  824. package/skills/shared/nestjs/references/testing-recipes.md +105 -0
  825. package/skills/shared/nestjs/scripts/verify.sh +98 -0
  826. package/skills/shared/netlify/SKILL.md +208 -0
  827. package/skills/shared/netlify/evals/README.md +13 -0
  828. package/skills/shared/netlify/evals/cases.yaml +43 -0
  829. package/skills/shared/netlify/references/functions.md +97 -0
  830. package/skills/shared/netlify/references/netlify-toml.md +115 -0
  831. package/skills/shared/netlify/scripts/verify.sh +95 -0
  832. package/skills/shared/nextjs/SKILL.md +400 -0
  833. package/skills/shared/nextjs/evals/README.md +59 -0
  834. package/skills/shared/nextjs/evals/cases.yaml +56 -0
  835. package/skills/shared/nextjs/references/data-and-caching.md +309 -0
  836. package/skills/shared/nextjs/references/metadata.md +208 -0
  837. package/skills/shared/nextjs/references/performance.md +325 -0
  838. package/skills/shared/nextjs/references/react.md +383 -0
  839. package/skills/shared/nextjs/references/security.md +239 -0
  840. package/skills/shared/nextjs/references/testing.md +290 -0
  841. package/skills/shared/nextjs/scripts/verify.sh +141 -0
  842. package/skills/shared/nlp/SKILL.md +225 -0
  843. package/skills/shared/nlp/evals/README.md +10 -0
  844. package/skills/shared/nlp/evals/cases.yaml +45 -0
  845. package/skills/shared/nlp/references/evaluation.md +107 -0
  846. package/skills/shared/nlp/references/tokenization.md +95 -0
  847. package/skills/shared/no-code-app/SKILL.md +145 -0
  848. package/skills/shared/no-code-app/evals/README.md +3 -0
  849. package/skills/shared/no-code-app/evals/cases.yaml +43 -0
  850. package/skills/shared/no-code-app/references/platform-limits.md +100 -0
  851. package/skills/shared/nodejs/SKILL.md +229 -0
  852. package/skills/shared/nodejs/evals/README.md +3 -0
  853. package/skills/shared/nodejs/evals/cases.yaml +39 -0
  854. package/skills/shared/nodejs/references/express5-migration.md +53 -0
  855. package/skills/shared/nodejs/references/graceful-shutdown.md +73 -0
  856. package/skills/shared/nodejs/scripts/verify.sh +122 -0
  857. package/skills/shared/observability/SKILL.md +235 -0
  858. package/skills/shared/observability/evals/README.md +3 -0
  859. package/skills/shared/observability/evals/cases.yaml +51 -0
  860. package/skills/shared/observability/references/collector-config.md +98 -0
  861. package/skills/shared/observability/references/instrumentation-recipes.md +115 -0
  862. package/skills/shared/observability/scripts/verify.sh +156 -0
  863. package/skills/shared/ollama/SKILL.md +213 -0
  864. package/skills/shared/ollama/evals/README.md +9 -0
  865. package/skills/shared/ollama/evals/cases.yaml +43 -0
  866. package/skills/shared/ollama/references/api.md +148 -0
  867. package/skills/shared/ollama/references/hardware-sizing.md +87 -0
  868. package/skills/shared/ollama/scripts/verify.sh +116 -0
  869. package/skills/shared/open-weights/SKILL.md +239 -0
  870. package/skills/shared/open-weights/evals/README.md +14 -0
  871. package/skills/shared/open-weights/evals/cases.yaml +42 -0
  872. package/skills/shared/open-weights/references/licenses.md +123 -0
  873. package/skills/shared/open-weights/references/model-families.md +83 -0
  874. package/skills/shared/open-weights/references/sizing-and-quant.md +89 -0
  875. package/skills/shared/orient/SKILL.md +92 -0
  876. package/skills/shared/orient/evals/README.md +18 -0
  877. package/skills/shared/orient/evals/cases.yaml +67 -0
  878. package/skills/shared/orient/references/explain-ladder.md +93 -0
  879. package/skills/shared/orient/references/orientation-contract.md +86 -0
  880. package/skills/shared/parallel/SKILL.md +168 -0
  881. package/skills/shared/parallel/evals/README.md +62 -0
  882. package/skills/shared/parallel/evals/cases.yaml +44 -0
  883. package/skills/shared/performance/SKILL.md +229 -0
  884. package/skills/shared/performance/evals/README.md +3 -0
  885. package/skills/shared/performance/evals/cases.yaml +49 -0
  886. package/skills/shared/performance/references/profiling-playbook.md +54 -0
  887. package/skills/shared/performance/scripts/verify.sh +94 -0
  888. package/skills/shared/phoenix/SKILL.md +169 -0
  889. package/skills/shared/phoenix/evals/README.md +3 -0
  890. package/skills/shared/phoenix/evals/cases.yaml +40 -0
  891. package/skills/shared/phoenix/references/auth-and-scopes.md +82 -0
  892. package/skills/shared/phoenix/references/ecto-patterns.md +93 -0
  893. package/skills/shared/phoenix/references/liveview.md +134 -0
  894. package/skills/shared/phoenix/scripts/verify.sh +73 -0
  895. package/skills/shared/php/SKILL.md +397 -0
  896. package/skills/shared/php/evals/README.md +12 -0
  897. package/skills/shared/php/evals/cases.yaml +45 -0
  898. package/skills/shared/php/references/tooling.md +170 -0
  899. package/skills/shared/php/references/type-system.md +220 -0
  900. package/skills/shared/php/scripts/verify.sh +155 -0
  901. package/skills/shared/plan/SKILL.md +166 -0
  902. package/skills/shared/plan/evals/README.md +62 -0
  903. package/skills/shared/plan/evals/cases.yaml +49 -0
  904. package/skills/shared/plan/references/plan-template.md +153 -0
  905. package/skills/shared/planetscale/SKILL.md +198 -0
  906. package/skills/shared/planetscale/evals/README.md +11 -0
  907. package/skills/shared/planetscale/evals/cases.yaml +46 -0
  908. package/skills/shared/planetscale/references/deploy-requests.md +75 -0
  909. package/skills/shared/planetscale/references/no-foreign-keys.md +88 -0
  910. package/skills/shared/planetscale/scripts/verify.sh +115 -0
  911. package/skills/shared/planning-with-files/SKILL.md +278 -0
  912. package/skills/shared/planning-with-files/examples.md +202 -0
  913. package/skills/shared/planning-with-files/reference.md +218 -0
  914. package/skills/shared/planning-with-files/scripts/attest-plan.ps1 +118 -0
  915. package/skills/shared/planning-with-files/scripts/attest-plan.sh +110 -0
  916. package/skills/shared/planning-with-files/scripts/check-complete.ps1 +44 -0
  917. package/skills/shared/planning-with-files/scripts/check-complete.sh +46 -0
  918. package/skills/shared/planning-with-files/scripts/init-session.ps1 +166 -0
  919. package/skills/shared/planning-with-files/scripts/init-session.sh +284 -0
  920. package/skills/shared/planning-with-files/scripts/resolve-plan-dir.ps1 +44 -0
  921. package/skills/shared/planning-with-files/scripts/resolve-plan-dir.sh +76 -0
  922. package/skills/shared/planning-with-files/scripts/session-catchup.py +438 -0
  923. package/skills/shared/planning-with-files/scripts/set-active-plan.ps1 +50 -0
  924. package/skills/shared/planning-with-files/scripts/set-active-plan.sh +50 -0
  925. package/skills/shared/planning-with-files/templates/findings.md +95 -0
  926. package/skills/shared/planning-with-files/templates/progress.md +114 -0
  927. package/skills/shared/planning-with-files/templates/task_plan.md +132 -0
  928. package/skills/shared/postgresdb/SKILL.md +354 -0
  929. package/skills/shared/postgresdb/evals/README.md +55 -0
  930. package/skills/shared/postgresdb/evals/cases.yaml +57 -0
  931. package/skills/shared/postgresdb/references/migrations.md +279 -0
  932. package/skills/shared/postgresdb/references/operations-and-security.md +267 -0
  933. package/skills/shared/postgresdb/references/query-optimization.md +374 -0
  934. package/skills/shared/postgresdb/references/schema-and-indexing.md +379 -0
  935. package/skills/shared/postgresdb/scripts/verify.sh +191 -0
  936. package/skills/shared/prisma-orm/SKILL.md +313 -0
  937. package/skills/shared/prisma-orm/evals/README.md +12 -0
  938. package/skills/shared/prisma-orm/evals/cases.yaml +56 -0
  939. package/skills/shared/prisma-orm/references/migrations-and-v7-upgrade.md +197 -0
  940. package/skills/shared/prisma-orm/references/queries-and-performance.md +169 -0
  941. package/skills/shared/prisma-orm/scripts/verify.sh +137 -0
  942. package/skills/shared/prompt-engineering/SKILL.md +127 -0
  943. package/skills/shared/prompt-engineering/evals/README.md +11 -0
  944. package/skills/shared/prompt-engineering/evals/cases.yaml +46 -0
  945. package/skills/shared/prompt-engineering/references/eval-templates.md +94 -0
  946. package/skills/shared/prompt-engineering/references/output-contracts.md +120 -0
  947. package/skills/shared/prompt-engineering/scripts/verify.sh +84 -0
  948. package/skills/shared/python/SKILL.md +320 -0
  949. package/skills/shared/python/evals/README.md +19 -0
  950. package/skills/shared/python/evals/cases.yaml +46 -0
  951. package/skills/shared/python/references/async.md +136 -0
  952. package/skills/shared/python/references/stdlib.md +162 -0
  953. package/skills/shared/python/references/typing.md +160 -0
  954. package/skills/shared/python/scripts/verify.sh +125 -0
  955. package/skills/shared/rag/SKILL.md +209 -0
  956. package/skills/shared/rag/evals/README.md +13 -0
  957. package/skills/shared/rag/evals/cases.yaml +45 -0
  958. package/skills/shared/rag/references/evaluation.md +99 -0
  959. package/skills/shared/rag/references/pipeline.md +151 -0
  960. package/skills/shared/rag/scripts/verify.sh +99 -0
  961. package/skills/shared/rails/SKILL.md +264 -0
  962. package/skills/shared/rails/evals/README.md +12 -0
  963. package/skills/shared/rails/evals/cases.yaml +47 -0
  964. package/skills/shared/rails/references/activerecord.md +148 -0
  965. package/skills/shared/rails/references/hotwire.md +139 -0
  966. package/skills/shared/rails/references/testing.md +110 -0
  967. package/skills/shared/rails/scripts/verify.sh +128 -0
  968. package/skills/shared/railway/SKILL.md +245 -0
  969. package/skills/shared/railway/evals/README.md +14 -0
  970. package/skills/shared/railway/evals/cases.yaml +44 -0
  971. package/skills/shared/railway/references/cli-cookbook.md +137 -0
  972. package/skills/shared/railway/references/config-as-code.md +120 -0
  973. package/skills/shared/railway/scripts/verify.sh +162 -0
  974. package/skills/shared/react/SKILL.md +182 -0
  975. package/skills/shared/react/evals/README.md +3 -0
  976. package/skills/shared/react/evals/cases.yaml +43 -0
  977. package/skills/shared/react/references/data-and-state.md +152 -0
  978. package/skills/shared/react/references/performance.md +75 -0
  979. package/skills/shared/react/references/routing.md +99 -0
  980. package/skills/shared/react/scripts/verify.sh +123 -0
  981. package/skills/shared/react-native/SKILL.md +215 -0
  982. package/skills/shared/react-native/evals/README.md +3 -0
  983. package/skills/shared/react-native/evals/cases.yaml +42 -0
  984. package/skills/shared/react-native/references/native-modules.md +123 -0
  985. package/skills/shared/react-native/references/performance-debugging.md +46 -0
  986. package/skills/shared/react-native/scripts/verify.sh +120 -0
  987. package/skills/shared/redis/SKILL.md +298 -0
  988. package/skills/shared/redis/evals/README.md +10 -0
  989. package/skills/shared/redis/evals/cases.yaml +43 -0
  990. package/skills/shared/redis/references/caching.md +116 -0
  991. package/skills/shared/redis/references/locks-and-rate-limiting.md +140 -0
  992. package/skills/shared/redis/references/queues.md +102 -0
  993. package/skills/shared/redis/scripts/verify.sh +164 -0
  994. package/skills/shared/render/SKILL.md +256 -0
  995. package/skills/shared/render/evals/README.md +12 -0
  996. package/skills/shared/render/evals/cases.yaml +45 -0
  997. package/skills/shared/render/references/blueprint-reference.md +203 -0
  998. package/skills/shared/render/scripts/verify.sh +167 -0
  999. package/skills/shared/replicate/SKILL.md +210 -0
  1000. package/skills/shared/replicate/evals/README.md +9 -0
  1001. package/skills/shared/replicate/evals/cases.yaml +45 -0
  1002. package/skills/shared/replicate/references/cog-packaging.md +89 -0
  1003. package/skills/shared/replicate/references/deployments-api.md +87 -0
  1004. package/skills/shared/replicate/references/webhooks-and-async.md +110 -0
  1005. package/skills/shared/replicate/scripts/verify.sh +162 -0
  1006. package/skills/shared/research-ops/SKILL.md +200 -0
  1007. package/skills/shared/research-ops/evals/README.md +13 -0
  1008. package/skills/shared/research-ops/evals/cases.yaml +38 -0
  1009. package/skills/shared/research-ops/references/credibility-rubric.md +78 -0
  1010. package/skills/shared/research-ops/references/memo-template.md +63 -0
  1011. package/skills/shared/research-ops/scripts/verify.sh +181 -0
  1012. package/skills/shared/review/SKILL.md +314 -0
  1013. package/skills/shared/review/evals/README.md +84 -0
  1014. package/skills/shared/review/evals/cases.yaml +55 -0
  1015. package/skills/shared/ruby/SKILL.md +295 -0
  1016. package/skills/shared/ruby/evals/README.md +12 -0
  1017. package/skills/shared/ruby/evals/cases.yaml +41 -0
  1018. package/skills/shared/ruby/references/gems-and-testing.md +208 -0
  1019. package/skills/shared/ruby/references/metaprogramming.md +161 -0
  1020. package/skills/shared/ruby/scripts/verify.sh +83 -0
  1021. package/skills/shared/runpod/SKILL.md +238 -0
  1022. package/skills/shared/runpod/evals/README.md +11 -0
  1023. package/skills/shared/runpod/evals/cases.yaml +47 -0
  1024. package/skills/shared/runpod/references/cost-and-scaling.md +85 -0
  1025. package/skills/shared/runpod/references/serverless-workers.md +101 -0
  1026. package/skills/shared/runpod/scripts/verify.sh +126 -0
  1027. package/skills/shared/rust/SKILL.md +320 -0
  1028. package/skills/shared/rust/evals/README.md +12 -0
  1029. package/skills/shared/rust/evals/cases.yaml +42 -0
  1030. package/skills/shared/rust/references/async-tokio.md +141 -0
  1031. package/skills/shared/rust/references/axum-service.md +132 -0
  1032. package/skills/shared/rust/references/ownership.md +86 -0
  1033. package/skills/shared/rust/references/testing.md +108 -0
  1034. package/skills/shared/rust/scripts/verify.sh +91 -0
  1035. package/skills/shared/scaling/SKILL.md +137 -0
  1036. package/skills/shared/scaling/evals/README.md +3 -0
  1037. package/skills/shared/scaling/evals/cases.yaml +42 -0
  1038. package/skills/shared/scaling/references/load-testing-k6.md +127 -0
  1039. package/skills/shared/scaling/scripts/example.load.js +24 -0
  1040. package/skills/shared/scaling/scripts/verify.sh +70 -0
  1041. package/skills/shared/sdd/SKILL.md +250 -0
  1042. package/skills/shared/sdd/evals/README.md +60 -0
  1043. package/skills/shared/sdd/evals/cases.yaml +90 -0
  1044. package/skills/shared/sdd/references/model-routing.md +194 -0
  1045. package/skills/shared/sdd-init/SKILL.md +189 -0
  1046. package/skills/shared/sdd-init/evals/README.md +3 -0
  1047. package/skills/shared/sdd-init/evals/cases.yaml +43 -0
  1048. package/skills/shared/secure-coding/SKILL.md +336 -0
  1049. package/skills/shared/secure-coding/evals/README.md +68 -0
  1050. package/skills/shared/secure-coding/evals/cases.yaml +55 -0
  1051. package/skills/shared/secure-coding/references/authn-authz.md +249 -0
  1052. package/skills/shared/secure-coding/references/owasp-by-stack.md +574 -0
  1053. package/skills/shared/secure-coding/references/secrets-and-supply-chain.md +205 -0
  1054. package/skills/shared/secure-coding/references/threat-modeling.md +213 -0
  1055. package/skills/shared/secure-coding/scripts/verify.sh +208 -0
  1056. package/skills/shared/security-scan/SKILL.md +219 -0
  1057. package/skills/shared/security-scan/evals/README.md +14 -0
  1058. package/skills/shared/security-scan/evals/cases.yaml +50 -0
  1059. package/skills/shared/security-scan/references/tools.md +97 -0
  1060. package/skills/shared/security-scan/references/triage.md +92 -0
  1061. package/skills/shared/security-scan/scripts/verify.sh +108 -0
  1062. package/skills/shared/ship/SKILL.md +272 -0
  1063. package/skills/shared/ship/evals/README.md +89 -0
  1064. package/skills/shared/ship/evals/cases.yaml +44 -0
  1065. package/skills/shared/shopify/SKILL.md +229 -0
  1066. package/skills/shared/shopify/evals/README.md +14 -0
  1067. package/skills/shared/shopify/evals/cases.yaml +41 -0
  1068. package/skills/shared/shopify/references/apps-graphql.md +103 -0
  1069. package/skills/shared/shopify/references/checkout-extensibility.md +71 -0
  1070. package/skills/shared/shopify/references/liquid-themes.md +89 -0
  1071. package/skills/shared/shopify/scripts/verify.sh +120 -0
  1072. package/skills/shared/simplify-code/SKILL.md +101 -0
  1073. package/skills/shared/simplify-code/evals/README.md +3 -0
  1074. package/skills/shared/simplify-code/evals/cases.yaml +42 -0
  1075. package/skills/shared/skill-scout/SKILL.md +169 -0
  1076. package/skills/shared/skill-scout/evals/README.md +12 -0
  1077. package/skills/shared/skill-scout/evals/cases.yaml +56 -0
  1078. package/skills/shared/skill-scout/references/install-commands.md +76 -0
  1079. package/skills/shared/skill-scout/scripts/verify.sh +154 -0
  1080. package/skills/shared/solid-js/SKILL.md +260 -0
  1081. package/skills/shared/solid-js/evals/README.md +3 -0
  1082. package/skills/shared/solid-js/evals/cases.yaml +38 -0
  1083. package/skills/shared/solid-js/references/reactivity-deep-dive.md +89 -0
  1084. package/skills/shared/solid-js/references/router-and-start.md +93 -0
  1085. package/skills/shared/solid-js/scripts/verify.sh +130 -0
  1086. package/skills/shared/source-grounded-development/SKILL.md +108 -0
  1087. package/skills/shared/source-grounded-development/evals/README.md +3 -0
  1088. package/skills/shared/source-grounded-development/evals/cases.yaml +42 -0
  1089. package/skills/shared/specify/SKILL.md +391 -0
  1090. package/skills/shared/specify/evals/README.md +73 -0
  1091. package/skills/shared/specify/evals/cases.yaml +93 -0
  1092. package/skills/shared/specify/references/eliciting-requirements.md +117 -0
  1093. package/skills/shared/specify/references/spec-template.md +101 -0
  1094. package/skills/shared/speckit-analyze/SKILL.md +35 -0
  1095. package/skills/shared/speckit-assess-decide/SKILL.md +36 -0
  1096. package/skills/shared/speckit-assess-define/SKILL.md +36 -0
  1097. package/skills/shared/speckit-assess-intake/SKILL.md +38 -0
  1098. package/skills/shared/speckit-assess-research/SKILL.md +36 -0
  1099. package/skills/shared/speckit-assess-shape/SKILL.md +36 -0
  1100. package/skills/shared/speckit-bug-assess/SKILL.md +38 -0
  1101. package/skills/shared/speckit-bug-fix/SKILL.md +37 -0
  1102. package/skills/shared/speckit-bug-test/SKILL.md +37 -0
  1103. package/skills/shared/speckit-checklist/SKILL.md +35 -0
  1104. package/skills/shared/speckit-clarify/SKILL.md +32 -0
  1105. package/skills/shared/speckit-constitution/SKILL.md +35 -0
  1106. package/skills/shared/speckit-converge/SKILL.md +36 -0
  1107. package/skills/shared/speckit-implement/SKILL.md +32 -0
  1108. package/skills/shared/speckit-plan/SKILL.md +37 -0
  1109. package/skills/shared/speckit-specify/SKILL.md +36 -0
  1110. package/skills/shared/speckit-tasks/SKILL.md +34 -0
  1111. package/skills/shared/spreadsheet-ops/SKILL.md +180 -0
  1112. package/skills/shared/spreadsheet-ops/evals/README.md +33 -0
  1113. package/skills/shared/spreadsheet-ops/evals/cases.yaml +42 -0
  1114. package/skills/shared/spreadsheet-ops/references/formula-cookbook.md +70 -0
  1115. package/skills/shared/spreadsheet-ops/references/python-excel.md +87 -0
  1116. package/skills/shared/spreadsheet-ops/references/sheets-api-appsscript.md +118 -0
  1117. package/skills/shared/spreadsheet-ops/scripts/verify.sh +152 -0
  1118. package/skills/shared/spring-boot/SKILL.md +350 -0
  1119. package/skills/shared/spring-boot/evals/README.md +11 -0
  1120. package/skills/shared/spring-boot/evals/cases.yaml +49 -0
  1121. package/skills/shared/spring-boot/references/jpa.md +94 -0
  1122. package/skills/shared/spring-boot/references/security.md +92 -0
  1123. package/skills/shared/spring-boot/references/testing.md +95 -0
  1124. package/skills/shared/spring-boot/scripts/verify.sh +115 -0
  1125. package/skills/shared/sql/SKILL.md +286 -0
  1126. package/skills/shared/sql/evals/README.md +9 -0
  1127. package/skills/shared/sql/evals/cases.yaml +49 -0
  1128. package/skills/shared/sql/references/ctes-and-recursion.md +63 -0
  1129. package/skills/shared/sql/references/joins-and-sets.md +71 -0
  1130. package/skills/shared/sql/references/portability.md +38 -0
  1131. package/skills/shared/sql/references/window-functions.md +72 -0
  1132. package/skills/shared/sql/scripts/verify.sh +139 -0
  1133. package/skills/shared/sqlite-turso/SKILL.md +214 -0
  1134. package/skills/shared/sqlite-turso/evals/README.md +24 -0
  1135. package/skills/shared/sqlite-turso/evals/cases.yaml +45 -0
  1136. package/skills/shared/sqlite-turso/references/embedded-replicas.md +96 -0
  1137. package/skills/shared/sqlite-turso/scripts/verify.sh +95 -0
  1138. package/skills/shared/structured-extraction/SKILL.md +230 -0
  1139. package/skills/shared/structured-extraction/evals/README.md +13 -0
  1140. package/skills/shared/structured-extraction/evals/cases.yaml +70 -0
  1141. package/skills/shared/structured-extraction/references/providers.md +152 -0
  1142. package/skills/shared/structured-extraction/scripts/verify.sh +160 -0
  1143. package/skills/shared/suggest/SKILL.md +123 -0
  1144. package/skills/shared/suggest/evals/README.md +17 -0
  1145. package/skills/shared/suggest/evals/cases.yaml +78 -0
  1146. package/skills/shared/supabase/SKILL.md +268 -0
  1147. package/skills/shared/supabase/evals/README.md +12 -0
  1148. package/skills/shared/supabase/evals/cases.yaml +42 -0
  1149. package/skills/shared/supabase/references/auth-ssr.md +173 -0
  1150. package/skills/shared/supabase/references/rls-cookbook.md +122 -0
  1151. package/skills/shared/supabase/scripts/verify.sh +149 -0
  1152. package/skills/shared/svelte/SKILL.md +238 -0
  1153. package/skills/shared/svelte/evals/README.md +3 -0
  1154. package/skills/shared/svelte/evals/cases.yaml +41 -0
  1155. package/skills/shared/svelte/references/runes.md +97 -0
  1156. package/skills/shared/svelte/references/sveltekit-data.md +156 -0
  1157. package/skills/shared/svelte/scripts/verify.sh +128 -0
  1158. package/skills/shared/swift-ios/SKILL.md +224 -0
  1159. package/skills/shared/swift-ios/evals/README.md +3 -0
  1160. package/skills/shared/swift-ios/evals/cases.yaml +46 -0
  1161. package/skills/shared/swift-ios/references/concurrency.md +132 -0
  1162. package/skills/shared/swift-ios/references/testing.md +112 -0
  1163. package/skills/shared/swift-ios/scripts/verify.sh +98 -0
  1164. package/skills/shared/tasks/SKILL.md +265 -0
  1165. package/skills/shared/tasks/evals/README.md +70 -0
  1166. package/skills/shared/tasks/evals/cases.yaml +75 -0
  1167. package/skills/shared/tauri/SKILL.md +219 -0
  1168. package/skills/shared/tauri/evals/README.md +12 -0
  1169. package/skills/shared/tauri/evals/cases.yaml +46 -0
  1170. package/skills/shared/tauri/references/bundling-distribution.md +129 -0
  1171. package/skills/shared/tauri/references/security.md +143 -0
  1172. package/skills/shared/tauri/scripts/verify.sh +178 -0
  1173. package/skills/shared/technical-writing/SKILL.md +230 -0
  1174. package/skills/shared/technical-writing/evals/README.md +12 -0
  1175. package/skills/shared/technical-writing/evals/cases.yaml +53 -0
  1176. package/skills/shared/technical-writing/references/diataxis-modes.md +131 -0
  1177. package/skills/shared/technical-writing/references/vale-starter.md +90 -0
  1178. package/skills/shared/technical-writing/scripts/verify.sh +83 -0
  1179. package/skills/shared/testing-go/SKILL.md +263 -0
  1180. package/skills/shared/testing-go/evals/README.md +3 -0
  1181. package/skills/shared/testing-go/evals/cases.yaml +46 -0
  1182. package/skills/shared/testing-go/references/coverage-and-benchmarks.md +85 -0
  1183. package/skills/shared/testing-go/references/mocks-and-fakes.md +140 -0
  1184. package/skills/shared/testing-go/references/synctest-and-concurrency.md +82 -0
  1185. package/skills/shared/testing-go/scripts/verify.sh +72 -0
  1186. package/skills/shared/testing-py/SKILL.md +197 -0
  1187. package/skills/shared/testing-py/evals/README.md +5 -0
  1188. package/skills/shared/testing-py/evals/cases.yaml +44 -0
  1189. package/skills/shared/testing-py/references/mocking.md +141 -0
  1190. package/skills/shared/testing-py/references/property-testing.md +99 -0
  1191. package/skills/shared/testing-py/scripts/verify.sh +117 -0
  1192. package/skills/shared/testing-web/SKILL.md +244 -0
  1193. package/skills/shared/testing-web/evals/README.md +11 -0
  1194. package/skills/shared/testing-web/evals/cases.yaml +52 -0
  1195. package/skills/shared/testing-web/references/jest-setup.md +88 -0
  1196. package/skills/shared/testing-web/references/recipes.md +116 -0
  1197. package/skills/shared/testing-web/scripts/verify.sh +111 -0
  1198. package/skills/shared/together-fireworks/SKILL.md +176 -0
  1199. package/skills/shared/together-fireworks/evals/README.md +3 -0
  1200. package/skills/shared/together-fireworks/evals/cases.yaml +50 -0
  1201. package/skills/shared/together-fireworks/references/batch-and-tuning.md +59 -0
  1202. package/skills/shared/together-fireworks/references/models-and-pricing.md +79 -0
  1203. package/skills/shared/together-fireworks/scripts/verify.sh +165 -0
  1204. package/skills/shared/training-data/SKILL.md +226 -0
  1205. package/skills/shared/training-data/evals/README.md +13 -0
  1206. package/skills/shared/training-data/evals/cases.yaml +41 -0
  1207. package/skills/shared/training-data/references/formats.md +118 -0
  1208. package/skills/shared/training-data/references/synthesis-dedup-quality.md +134 -0
  1209. package/skills/shared/translation-l10n/SKILL.md +229 -0
  1210. package/skills/shared/translation-l10n/evals/README.md +3 -0
  1211. package/skills/shared/translation-l10n/evals/cases.yaml +39 -0
  1212. package/skills/shared/translation-l10n/references/icu-cookbook.md +82 -0
  1213. package/skills/shared/translation-l10n/references/rtl-and-bidi.md +60 -0
  1214. package/skills/shared/typescript/SKILL.md +225 -0
  1215. package/skills/shared/typescript/evals/README.md +15 -0
  1216. package/skills/shared/typescript/evals/cases.yaml +46 -0
  1217. package/skills/shared/typescript/references/build-and-monorepo.md +141 -0
  1218. package/skills/shared/typescript/references/type-system.md +162 -0
  1219. package/skills/shared/typescript/scripts/verify.sh +52 -0
  1220. package/skills/shared/ui-engineering/SKILL.md +113 -0
  1221. package/skills/shared/ui-engineering/evals/cases.yaml +38 -0
  1222. package/skills/shared/unity/SKILL.md +282 -0
  1223. package/skills/shared/unity/evals/README.md +8 -0
  1224. package/skills/shared/unity/evals/cases.yaml +43 -0
  1225. package/skills/shared/unity/references/build-and-platforms.md +65 -0
  1226. package/skills/shared/unity/references/input-system.md +102 -0
  1227. package/skills/shared/unity/references/lifecycle-deep-dive.md +75 -0
  1228. package/skills/shared/unreal/SKILL.md +270 -0
  1229. package/skills/shared/unreal/evals/README.md +12 -0
  1230. package/skills/shared/unreal/evals/cases.yaml +45 -0
  1231. package/skills/shared/unreal/references/blueprint-cpp-parity.md +109 -0
  1232. package/skills/shared/unreal/references/gameplay-framework.md +95 -0
  1233. package/skills/shared/unreal/references/packaging.md +83 -0
  1234. package/skills/shared/unslop/SKILL.md +143 -0
  1235. package/skills/shared/unslop/evals/README.md +25 -0
  1236. package/skills/shared/unslop/evals/cases.yaml +61 -0
  1237. package/skills/shared/unsloth/SKILL.md +254 -0
  1238. package/skills/shared/unsloth/evals/README.md +10 -0
  1239. package/skills/shared/unsloth/evals/cases.yaml +42 -0
  1240. package/skills/shared/unsloth/references/export.md +75 -0
  1241. package/skills/shared/unsloth/references/grpo.md +91 -0
  1242. package/skills/shared/unsloth/references/masking-and-templates.md +91 -0
  1243. package/skills/shared/variant-explorer/SKILL.md +93 -0
  1244. package/skills/shared/variant-explorer/evals/cases.yaml +38 -0
  1245. package/skills/shared/vector-db/SKILL.md +189 -0
  1246. package/skills/shared/vector-db/evals/README.md +10 -0
  1247. package/skills/shared/vector-db/evals/cases.yaml +45 -0
  1248. package/skills/shared/vector-db/references/engines.md +175 -0
  1249. package/skills/shared/vector-db/references/tuning.md +62 -0
  1250. package/skills/shared/vector-db/scripts/verify.sh +110 -0
  1251. package/skills/shared/vercel/SKILL.md +242 -0
  1252. package/skills/shared/vercel/evals/README.md +23 -0
  1253. package/skills/shared/vercel/evals/cases.yaml +45 -0
  1254. package/skills/shared/vercel/references/cli-cookbook.md +98 -0
  1255. package/skills/shared/vercel/references/vercel-json.md +120 -0
  1256. package/skills/shared/vercel/scripts/verify.sh +168 -0
  1257. package/skills/shared/verify/SKILL.md +230 -0
  1258. package/skills/shared/verify/evals/README.md +78 -0
  1259. package/skills/shared/verify/evals/cases.yaml +104 -0
  1260. package/skills/shared/vllm/SKILL.md +235 -0
  1261. package/skills/shared/vllm/evals/README.md +9 -0
  1262. package/skills/shared/vllm/evals/cases.yaml +47 -0
  1263. package/skills/shared/vllm/references/flags-and-endpoints.md +105 -0
  1264. package/skills/shared/vllm/references/memory-and-throughput.md +78 -0
  1265. package/skills/shared/vue-nuxt/SKILL.md +323 -0
  1266. package/skills/shared/vue-nuxt/evals/README.md +11 -0
  1267. package/skills/shared/vue-nuxt/evals/cases.yaml +49 -0
  1268. package/skills/shared/vue-nuxt/references/data-and-state.md +127 -0
  1269. package/skills/shared/vue-nuxt/references/migration-nuxt4.md +79 -0
  1270. package/skills/shared/vue-nuxt/references/nitro-and-rendering.md +117 -0
  1271. package/skills/shared/vue-nuxt/references/reactivity.md +135 -0
  1272. package/skills/shared/vue-nuxt/scripts/verify.sh +148 -0
  1273. package/skills/shared/webhooks/SKILL.md +229 -0
  1274. package/skills/shared/webhooks/evals/README.md +15 -0
  1275. package/skills/shared/webhooks/evals/cases.yaml +46 -0
  1276. package/skills/shared/webhooks/references/framework-raw-body.md +97 -0
  1277. package/skills/shared/webhooks/references/signature-schemes.md +66 -0
  1278. package/skills/shared/webhooks/scripts/verify.sh +142 -0
  1279. package/skills/shared/wordpress/SKILL.md +224 -0
  1280. package/skills/shared/wordpress/evals/README.md +3 -0
  1281. package/skills/shared/wordpress/evals/cases.yaml +50 -0
  1282. package/skills/shared/wordpress/references/hardening.md +108 -0
  1283. package/skills/shared/wordpress/references/performance.md +80 -0
  1284. package/skills/shared/wordpress/references/woocommerce.md +65 -0
  1285. package/skills/shared/wordpress/scripts/verify.sh +96 -0
  1286. package/skills/shared/worktrees/SKILL.md +204 -0
  1287. package/skills/shared/worktrees/evals/README.md +78 -0
  1288. package/skills/shared/worktrees/evals/cases.yaml +47 -0
@@ -0,0 +1,860 @@
1
+ # Blueprint: módulo `products` — referencia para replicar en otros módulos
2
+
3
+ > **Audiencia**: agentes de implementación (Claude Sonnet 4.6 u otros) que deben crear o migrar módulos (`fichajes`, `users`, etc.) siguiendo el mismo patrón que `products`.
4
+ >
5
+ > **Fuente de verdad viva**: el código en `backend/src/products`, `frontend/src/app/products` y `common` en ambos lados.
6
+ >
7
+ > **Última revisión**: 2026-06-26
8
+
9
+ ---
10
+
11
+ ## 0. Reglas obligatorias para el agente
12
+
13
+ 1. **No inventar código ni endpoints**. Si no está en este documento ni en el código de referencia, **preguntar al usuario** por chat antes de implementar.
14
+ 2. **No fallbacks innecesarios** ni ramas defensivas para casos que el spec no define.
15
+ 3. **No magic strings** sueltos: usar enums, constantes nombradas o valores documentados en dominio/DTO.
16
+ 4. **Prohibido `any`**. Usar tipos explícitos o `unknown` con type guards.
17
+ 5. **`id`**: en `domain/` y en `*DolibarrDto`, `id` es **siempre** `id: number` **sin** `?` (como `productDolibarrDto` / `serviceDolibarrDto`). Único campo obligatorio en la entidad; el resto con `?`. Prohibido `id?:`, `number | string`, `id: string` en dominio. Si Dolibarr envía `"1"` como string JSON, el mapper hace `Number(item.id)`. Detalle y checklist: [products-coding-standard.md](./products-coding-standard.md).
18
+ 6. **No copiar archivos legacy** listados en la sección 12. Usar solo la ruta **canónica (nuevo patrón)**.
19
+ 7. **Sincronía FE ↔ BE**: DTOs con `@Field` y la entidad `Product` deben ser **idénticos** en frontend y backend (salvo imports relativos vs `@app/`).
20
+ 8. **Spec Kit obligatorio**: `/speckit.specify` → aprobación humana → `/speckit.implement`. No escribir código productivo sin spec.
21
+ 9. Si `AppQueryBase` / `AppServiceBase` tienen mensajes hardcodeados a "Producto", **parametrizar o sobrescribir** en el módulo nuevo (deuda conocida).
22
+ 10. **KPIs en listados**: calcular en **frontend** con `statusCounts` desde `response.data` en cada `load()`, UI con `KpiCardComponent` + pipes `{entity}Status*` del módulo (patrón `products-getall`).
23
+ 11. **Regla de paridad products** (users, fichajes y cualquier módulo migrado): lo **general** se hace **igual** que en `products`; solo cambian los **datos del dominio** (entidad, enum, campos, endpoint, permisos). Ver sección 0.1.
24
+
25
+ ---
26
+
27
+ ## 0.1 Regla de paridad products (general igual, datos distintos)
28
+
29
+ > Decisión proyecto (2026-06-26): **users** y **fichajes** (y el resto de módulos) replican el **mismo esqueleto** que `products`. No inventar variantes legacy en listados, DALs, KPIs o formularios si products ya define el patrón.
30
+
31
+ ### Igual en todos los módulos (copiar de products)
32
+
33
+ | Área | Patrón canónico |
34
+ |------|-----------------|
35
+ | **Backend dominio** | `domain/{entity}.ts`, `domain/enums/`, DTOs `{Entity}s{Op}Dto`; **`id: number` sin `?`** (único obligatorio) |
36
+ | **Backend infra** | `{entity}DolibarrDto` snake_case, `mappers/` con `toDomain`/`fromDomain`, DAL `run(dto)`, `DolibarrDal` composición |
37
+ | **Backend router** | `createRequestScope` + Awilix, Zod en escritura, `AuthenticatedRequest` |
38
+ | **Frontend dominio** | Espejo byte-a-byte del backend |
39
+ | **Frontend DAL** | `infrastructure/dal/backend/`, `QueryBackendDal` / `ServiceBackendDal` |
40
+ | **Listado** | `extends AppQueryBase`, `load()` + `setStatus()`, **sin** `*RetrieveService` |
41
+ | **KPIs** | Mismo mecanismo: `statusCounts` en `load()`, `KpiCardComponent`, pipes `{entity}Status*`, `setStatus()` |
42
+ | **Tabla / UI** | `col-*`, `card-header`, `card-empty`, `form-field-*` desde **common** |
43
+ | **Create/Update** | `extends AppServiceBase`, `formGroupFromDto` |
44
+ | **Tests** | Vitest, mocks de DAL, sin `any` |
45
+
46
+ ### Cambia por módulo (solo datos / negocio)
47
+
48
+ | Qué varía | products | users (employees) | fichajes (workdays / punches) |
49
+ |-----------|----------|-------------------|-------------------------------|
50
+ | Carpeta / URL BFF | `products` → `/api/products` | `users` → `/api/users/employees` | `workdays` → `/api/workdays`, `punches` → `/api/punches` |
51
+ | Entidad listado | `Product` | `EmployeeListItem` | `Workday`, `Punch` |
52
+ | Enum estado | `ProductStatus` | `UserStatus` | `WorkdayStatus`, `PunchStatus`, … |
53
+ | Pipes | `productStatus*` | `userStatus*` | `workdayStatus*`, `punchStatus*`, … |
54
+ | Campos `@Field` / filtros | `filterBy`, `status`, `ref`… | `filterBy`, `status`, `login`… | Según spec Dolibarr |
55
+ | Operaciones extra | `ChangePrice` | Auth, rights (fuera CRUD) | `clock-in`, `break-start`, … (`IServiceDal`) |
56
+ | Nº tarjetas KPI | 3 estado | 2 estado + 2 fichajes (opcional) | Según spec |
57
+ | API Dolibarr | `/products` estándar | `/users` + filtros employee | API custom `fichajestrabajadoresapi` |
58
+
59
+ **Prohibido** en migraciones: servicios retrieve paralelos, KPIs con `stats` del BFF, `<div class="kpi-card">` manual, `EstadosUsuario` en listados nuevos, DAL monolítico, tipos en routers.
60
+
61
+ **Permitido** solo si el spec lo documenta: operaciones no-CRUD (perfil B fichajes), rutas anidadas (`/users/employees`), **más o menos tarjetas KPI** que products si el módulo lo necesita (employees: 2 estado + 2 fichajes), extensiones de listado.
62
+
63
+ **Paridad ≠ copiar cantidad de KPIs**: products tiene 3 tarjetas de estado; employees puede tener 2 u otras — lo que debe ser **igual** es el **mecanismo** (`statusCounts` en `load()`, `KpiCardComponent`, pipes `{entity}Status*`, `setStatus()`), no el número de tarjetas.
64
+
65
+ ## 1. Stack y versiones
66
+
67
+ | Entorno | Tecnología | Versión (package.json) |
68
+ |---------|------------|------------------------|
69
+ | Frontend | Angular | ^21.0.0 |
70
+ | Frontend | Angular Material | ^21.2.10 |
71
+ | Frontend | TypeScript | ~5.9.2 |
72
+ | Frontend | Tailwind CSS | ^4.1.12 |
73
+ | Frontend | Vitest | ^4.x (tests) |
74
+ | Backend | Node.js | 20+ (runtime Docker) |
75
+ | Backend | Express | ^5.2.1 |
76
+ | Backend | TypeScript | ^5.x |
77
+ | Backend | Awilix (DI) | ^13.0.3 |
78
+ | Backend | Zod | ^4.3.6 |
79
+ | Backend | RxJS | ^7.8.2 (solo en DALs de listado backend) |
80
+ | Backend | Vitest | tests |
81
+
82
+ **Angular obligatorio**: standalone components, `inject()`, `@if` / `@for` / `@switch` (prohibido `*ngIf`, `*ngFor`, `NgModule`).
83
+
84
+ ---
85
+
86
+ ## 2. Convenciones de nomenclatura e idioma
87
+
88
+ ### 2.1 Idioma
89
+
90
+ | Qué | Idioma | Ejemplo |
91
+ |-----|--------|---------|
92
+ | Carpetas de módulo / URL / archivos de código | Inglés | `products`, `products-getall` |
93
+ | Interfaces y clases de dominio | Inglés | `Product`, `toSell`, `costPrice` |
94
+ | Labels `@Field` | Español | `'Referencia'`, `'Buscar por...'` |
95
+ | Mensajes HTTP / snackbar / diálogos | Español | `'Payload de producto invalido'` |
96
+ | Comentarios de código | Español o inglés técnico breve | Preferir autoexplicativo sin comentar |
97
+
98
+ ### 2.2 Convenciones de casing
99
+
100
+ | Artefacto | Convención | Ejemplo |
101
+ |-----------|------------|---------|
102
+ | Carpeta módulo | kebab-case, plural (inglés) | `products/` |
103
+ | Carpeta componente | kebab-case, `{recurso}-{accion}` | `products-getall/`, `products-create/` |
104
+ | Archivo componente | igual que carpeta | `products-getall.ts` |
105
+ | Selector componente | kebab-case (inconsistente en products) | `products-getall`, `app-products-create` |
106
+ | Entidad dominio | PascalCase singular | `Product` |
107
+ | Enum | PascalCase | `ProductStatus` |
108
+ | Archivo enum | camelCase | `productStatus.ts` en `domain/enums/` |
109
+ | DTO operación | `{Recurso}s{Operacion}Dto` | `ProductsGetAllDto`, `ProductsCreateDto` |
110
+ | DTO Dolibarr (infra) | `{Entidad}DolibarrDto` | `ProductDolibarrDto` |
111
+ | DAL backend | `{Recurso}s{Operacion}Dal` | `ProductsGetAllDal` |
112
+ | DAL frontend activo | `{Recurso}s{Operacion}Dal` en `dal/backend/` | `ProductsGetAllDal` |
113
+ | Mapper | `{Entidad}Mapper` | `ProductMapper` |
114
+ | Mapper enum | `{Entidad}{Aspecto}Mapper` | `ProductStatusMapper` |
115
+ | Pipe | camelCase descriptivo | `productStatusLabel` |
116
+ | Router backend | `{recurso}Router.ts` | `productsRouter.ts` |
117
+ | Método DAL | `run(request: Dto): Promise/ Observable` | Un solo método público |
118
+ | Propiedades dominio | camelCase | `ivaRate`, `notePublic` |
119
+ | Campos API Dolibarr | snake_case | `tva_tx`, `cost_price` |
120
+ | Endpoint Dolibarr | string literal en propiedad privada | `private endpoint = "products"` |
121
+ | Ruta BFF | `/api/{recurso-plural}` | `/api/products` |
122
+ | Token Awilix | camelCase | `productsGetAllDal` |
123
+
124
+ ### 2.3 Operaciones CRUD estándar
125
+
126
+ | Operación | Sufijo DTO | Sufijo DAL | HTTP |
127
+ |-----------|------------|------------|------|
128
+ | Listado | `GetAllDto` | `GetAllDal` | GET `/` |
129
+ | Detalle | `GetByIdDto` | `GetByIdDal` | GET `/:id` |
130
+ | Crear | `CreateDto` | `CreateDal` | POST `/` |
131
+ | Actualizar | `UpdateDto` | `UpdateDal` | PUT `/:id` |
132
+ | Eliminar | `DeleteDto` | `DeleteDal` | DELETE `/:id` |
133
+
134
+ `CreateDto` en products **extiende** `UpdateDto` sin campos extra.
135
+
136
+ ---
137
+
138
+ ## 3. Estructura de carpetas canónica
139
+
140
+ ### 3.1 Backend — `backend/src/products/`
141
+
142
+ ```
143
+ products/
144
+ ├── domain/
145
+ │ ├── product.ts # interface Product (dominio limpio)
146
+ │ ├── productsGetAllDto.ts
147
+ │ ├── productsGetByIdDto.ts
148
+ │ ├── productsCreateDto.ts # extends ProductsUpdateDto
149
+ │ ├── productsUpdateDto.ts # @Field para formularios + Zod
150
+ │ ├── productsDeleteDto.ts
151
+ │ └── enums/
152
+ │ ├── productType.ts
153
+ │ ├── productStatus.ts
154
+ │ └── productPriceBaseType.ts
155
+ └── infrastructure/
156
+ ├── router/
157
+ │ └── productsRouter.ts
158
+ └── dal/
159
+ └── dolibarr/
160
+ ├── productsGetAllDal.ts
161
+ ├── productsGetByIdDal.ts
162
+ ├── productsCreateDal.ts
163
+ ├── productsUpdateDal.ts
164
+ ├── productsDeleteDal.ts
165
+ ├── productDolibarrDto.ts # shape API externa (snake_case)
166
+ ├── enums/
167
+ │ └── productMode.ts # solo infra (filtro query Dolibarr)
168
+ └── mappers/
169
+ ├── productMapper.ts
170
+ ├── productStatusMapper.ts
171
+ ├── productModeMapper.ts
172
+ └── productPriceBaseTypeMapper.ts
173
+ ```
174
+
175
+ **Capas opcionales en products (no replicar salvo necesidad):**
176
+
177
+ - `application/catalogGetAllUseCase.ts` — orquesta productos + servicios
178
+ - `application/productSchemas.ts` — schemas adicionales
179
+ - Routers hermanos: `services.ts`, `catalogRouter.ts`
180
+
181
+ ### 3.2 Frontend — `frontend/src/app/products/`
182
+
183
+ ```
184
+ products/
185
+ ├── domain/ # ESPEJO del backend (mismos DTOs y Product)
186
+ │ ├── product.ts
187
+ │ ├── productsGetAllDto.ts
188
+ │ ├── productsGetByIdDto.ts
189
+ │ ├── productsCreateDto.ts
190
+ │ ├── productsUpdateDto.ts
191
+ │ ├── productsDeleteDto.ts
192
+ │ └── enums/
193
+ │ ├── productType.ts
194
+ │ ├── productStatus.ts
195
+ │ └── productPriceBaseType.ts
196
+ ├── application/ # LEGACY comentado — NO usar como referencia
197
+ └── infrastructure/
198
+ ├── components/
199
+ │ ├── products-getall/
200
+ │ ├── products-create/
201
+ │ ├── products-update/
202
+ │ └── product-updateprice-dialog/ # modal específico del dominio
203
+ ├── dal/
204
+ │ └── backend/ # CANÓNICO — DALs activos
205
+ │ ├── productsGetAllDal.ts
206
+ │ ├── productsGetByIdDal.ts
207
+ │ ├── productsCreate.dal.ts # nota: extensión .dal.ts en algunos archivos
208
+ │ ├── productsUpdate.dal.ts
209
+ │ └── productsChangePriceDal.ts
210
+ ├── dal/products-retrieve.dal.ts # delete (nombre legacy pero activo)
211
+ └── pipes/
212
+ ├── product-status-color.pipe.ts
213
+ ├── product-status-icon.pipe.ts
214
+ ├── product-status-label.pipe.ts
215
+ └── product-price-base-type-label.pipe.ts
216
+ ```
217
+
218
+ **Rutas**: definidas en `frontend/src/app/app.routes.ts` (no hay `products.routes.ts`).
219
+
220
+ Orden crítico: `create` **antes** de `:id`.
221
+
222
+ ### 3.3 Qué va en cada carpeta (backend)
223
+
224
+ **Raíz del slice**: `backend/src/{modulo}/` (ej. `products/`, `users/`).
225
+
226
+ | Carpeta / archivo | DEBE contener | NO debe contener |
227
+ |-------------------|---------------|------------------|
228
+ | `domain/{entity}.ts` | `interface` dominio limpio (camelCase, composición de objetos) | snake_case, `fk_*`, tipos Dolibarr, clases, lógica HTTP |
229
+ | `domain/{entity}ListItem.ts` | Proyección de listado si la entidad completa es más grande (ej. `EmployeeListItem`) | Campos que solo existen en formulario CRUD |
230
+ | `domain/enums/{name}.ts` | Enums de **negocio** usados en dominio y DTOs (`ProductStatus`, `UserStatus`) | Valores solo de filtro API Dolibarr |
231
+ | `domain/{Entity}sGetAllDto.ts` | `class extends QueryListDto` + `@Field` en filtros | Validación Zod (va en router) |
232
+ | `domain/{Entity}sGetByIdDto.ts` | `extends QueryItemDto` | — |
233
+ | `domain/{Entity}sUpdateDto.ts` | Campos formulario con `@Field` (español en labels) | — |
234
+ | `domain/{Entity}sCreateDto.ts` | `extends UpdateDto` (products) | Campos distintos al update salvo spec |
235
+ | `domain/{Entity}sDeleteDto.ts` | `id` + metadata `@Field` si aplica | — |
236
+ | `infrastructure/router/{modulo}Router.ts` | Rutas Express, `buildZodSchema`, `createRequestScope`, `requireHttpRight` | Interfaces, DTOs definidos aquí, lógica de mapeo |
237
+ | `infrastructure/dal/dolibarr/{Entity}sGetAllDal.ts` | `class extends DolibarrDal implements IQueryGetListDal` + `run(dto)` | Tipos de dominio definidos aquí |
238
+ | `infrastructure/dal/dolibarr/{entity}DolibarrDto.ts` | Shape fila Dolibarr (snake_case, campos opcionales `?`) | camelCase de dominio |
239
+ | `infrastructure/dal/dolibarr/enums/` | Enums **solo infra** (ej. `productMode` para `sqlfilters`) | Enums que el frontend muestra al usuario |
240
+ | `infrastructure/dal/dolibarr/mappers/{entity}Mapper.ts` | `toDomain` / `fromDomain` **síncronos** | `async`, llamadas HTTP |
241
+ | `infrastructure/dal/dolibarr/mappers/{entity}{Aspect}Mapper.ts` | Traducción enum dominio ↔ valor Dolibarr | — |
242
+
243
+ **Legacy users (hasta migración router)**: rutas pueden vivir en `backend/routes/users.ts`; el **código nuevo** del slice va en `backend/src/users/` como arriba. Objetivo final: `usersRouter.ts` en `infrastructure/router/`.
244
+
245
+ **Fichajes (perfil B)**: mismo `domain/` + `infrastructure/dal/`; DALs pueden llamar API custom (`fichajestrabajadoresapi`). `application/` solo para orquestación que no encaja en un solo `run()` — no sustituye al DAL.
246
+
247
+ ### 3.4 Qué va en cada carpeta (frontend)
248
+
249
+ **Raíz del slice**: `frontend/src/app/{modulo}/` (ej. `products/`, `users/`, `fichajes/`).
250
+
251
+ | Carpeta / archivo | DEBE contener | NO debe contener |
252
+ |-------------------|---------------|------------------|
253
+ | `domain/` | **Espejo byte-a-byte** del backend (mismas interfaces, enums, DTOs) | Servicios, HTTP, componentes |
254
+ | `domain/enums/` | Enums de negocio (`productStatus.ts`) | Carpeta `Enumerations/` PascalCase (legacy) |
255
+ | `application/` | Solo lógica pura: formatters, mappers de error API, validators de dominio | DALs, estado de listado, `HttpClient` (legacy en users — no replicar en módulos nuevos) |
256
+ | `infrastructure/components/{recurso}-{accion}/` | `.ts` + `.html` del componente standalone | `.css` en listados estándar (ver §3.5) |
257
+ | `infrastructure/components/.../*.ts` | `inject()`, signals, `extends AppQueryBase` / `AppServiceBase` | `constructor()`, NgModule, tipos definidos en el componente |
258
+ | `infrastructure/dal/backend/{Entity}sGetAllDal.ts` | `extends QueryBackendDal`, `basePath`, `run()` → `api.queryList` | Lógica de UI, snake_case en tipos de dominio |
259
+ | `infrastructure/dal/backend/{Entity}sGetByIdDal.ts` | `extends QueryBackendDal` o patrón item | — |
260
+ | `infrastructure/dal/backend/{Entity}sCreate.dal.ts` | `extends ServiceBackendDal`, `post` | — |
261
+ | `infrastructure/pipes/{entity}-{aspect}-label.pipe.ts` | Pipe standalone para labels de enum | Lógica de negocio pesada |
262
+ | `infrastructure/pipes/{entity}-status-color.pipe.ts` | Color hex / token para badge | — |
263
+ | `infrastructure/pipes/{entity}-status-icon.pipe.ts` | Nombre icono Lucide | — |
264
+
265
+ **Prohibido en módulos migrados al patrón products**:
266
+
267
+ - `infrastructure/dtos/` con shapes de API (usar `domain/` + `QueryResult`)
268
+ - `*-retrieve.service.ts` para listados (usar `AppQueryBase` en el componente)
269
+ - `infrastructure/dal/` en raíz del módulo sin `backend/` (legacy `empleados-retrieve.dal.ts`)
270
+ - Componente hijo solo para búsqueda (`empleados-filters`) — todo en `{modulo}-getall`
271
+
272
+ ### 3.5 Estilos CSS — global primero (patrón products)
273
+
274
+ **Regla**: pantallas tipo listado/formulario CRUD siguen **products**: clases globales en el HTML, **sin** `styleUrl` en el componente salvo excepción documentada.
275
+
276
+ | Referencia | Ubicación |
277
+ |------------|-----------|
278
+ | Tokens, dark mode | `frontend/src/assets/styles/variables.css` |
279
+ | Utilidades layout, KPI, mobile-card | `frontend/src/assets/styles/design-system.css` |
280
+ | Tablas, acciones fila | `frontend/src/assets/styles/tables.css` |
281
+ | Cards, page-container | `frontend/src/assets/styles/panels.css` |
282
+ | Formularios ventana | `frontend/src/assets/styles/form-window.css`, `forms.css` |
283
+ | Componentes Material | `frontend/src/assets/styles/components.css` |
284
+
285
+ **Ejemplo canónico** — `products-getall` solo declara `templateUrl`; **no** tiene `products-getall.css`:
286
+
287
+ ```typescript
288
+ @Component({
289
+ selector: 'products-getall',
290
+ standalone: true,
291
+ imports: [/* common + pipes */],
292
+ templateUrl: './products-getall.html',
293
+ })
294
+ ```
295
+
296
+ **Clases habituales en templates** (Tailwind + utilidades globales):
297
+
298
+ - Contenedor: `page-container`
299
+ - KPIs: `kpi-grid`, `kpi-grid--cols-2`, `kpi-grid--cols-3` + `<kpi-card>`
300
+ - Card listado: `premium-card`, `mat-card`
301
+ - Cabecera: `card-header`, `card-header-title`, `card-header-subtitle`
302
+ - Tabla desktop: `table-container`, `col-status`, componentes `col-*`
303
+ - Móvil: `mobile-list-container`, `mobile-card`, `mobile-only` / `desktop-only`
304
+ - Vacío: `<card-empty>` (common)
305
+
306
+ **Cuándo SÍ crear `.css` local** en el componente:
307
+
308
+ - Modales/diálogos con layout propio (ej. `product-updateprice-dialog.component.css`)
309
+ - Posicionamiento o animación que **no** existe en global y no debe reutilizarse
310
+ - Overrides Material muy específicos del diálogo
311
+
312
+ **Cuándo NO crear `.css` local**:
313
+
314
+ - Listados (`{modulo}-getall`), create/update estándar si el HTML puede usar solo global + Tailwind
315
+ - Duplicar estilos ya en `design-system.css` / `panels.css`
316
+
317
+ Al migrar `employees-list`: eliminar `empleados-list.css` / `empleados-filters.css` si el HTML pasa a las mismas clases que `products-getall.html`.
318
+
319
+ ### 3.6 Árbol objetivo por módulo (sustituir nombres, misma forma)
320
+
321
+ Sustituir `{entity}`, `{modulo}`, `{recurso}` manteniendo la **misma profundidad de carpetas**:
322
+
323
+ #### `users` — slice listado empleados (`migrate-employees-list`)
324
+
325
+ ```
326
+ backend/src/users/
327
+ ├── domain/
328
+ │ ├── employeeListItem.ts
329
+ │ ├── employeesGetAllDto.ts
330
+ │ ├── userGroup.ts # UserGroupRef existente
331
+ │ └── enums/
332
+ │ └── userStatus.ts
333
+ └── infrastructure/
334
+ └── dal/dolibarr/
335
+ ├── employeesGetAllDal.ts
336
+ ├── userDolibarrDto.ts
337
+ ├── userGroupDolibarrDto.ts
338
+ └── mappers/
339
+ ├── employeeListItemMapper.ts
340
+ ├── userGroupMapper.ts
341
+ └── userStatusMapper.ts
342
+ # Router: GET /employees en usersRouter (legacy path) hasta move a infrastructure/router/
343
+
344
+ frontend/src/app/users/
345
+ ├── domain/ # espejo de lo anterior
346
+ │ ├── employeeListItem.ts
347
+ │ ├── employeesGetAllDto.ts
348
+ │ ├── userGroup.ts
349
+ │ └── enums/userStatus.ts
350
+ ├── application/ # solo form/validators legacy hasta CRUD migrate
351
+ └── infrastructure/
352
+ ├── components/
353
+ │ └── employees-list/ # antes empleados-list; SIN employees-filters
354
+ │ ├── employees-list.ts
355
+ │ └── employees-list.html
356
+ ├── dal/backend/
357
+ │ └── employeesGetAllDal.ts # basePath = 'users/employees'
358
+ ├── pipes/
359
+ │ ├── user-status-label.pipe.ts
360
+ │ ├── user-status-color.pipe.ts
361
+ │ └── user-status-icon.pipe.ts
362
+ └── employees-export.service.ts
363
+ ```
364
+
365
+ #### `fichajes` — objetivo (change futuro; nombres en inglés)
366
+
367
+ ```
368
+ backend/src/fichajes/
369
+ ├── domain/
370
+ │ ├── punch.ts / workday.ts # según spec punches + workdays
371
+ │ └── enums/
372
+ │ └── punchStatus.ts # migrar desde Enumerations/
373
+ └── infrastructure/
374
+ ├── router/fichajesRouter.ts # objetivo
375
+ └── dal/dolibarr/ o dal/custom/
376
+ ├── punchesClockInDal.ts
377
+ └── mappers/
378
+
379
+ frontend/src/app/fichajes/
380
+ ├── domain/ # espejo
381
+ ├── application/ # formatters puros (locationStatusMessage, etc.)
382
+ └── infrastructure/
383
+ ├── components/
384
+ │ ├── punches-getall/ # ejemplo listado futuro
385
+ │ └── workdays-getall/
386
+ ├── dal/backend/
387
+ └── pipes/
388
+ ```
389
+
390
+ Hoy fichajes tiene más `.css` local y `Enumerations/` — al migrar, alinear enums a `domain/enums/` y reducir CSS a global donde coincida con products.
391
+
392
+ ### 3.7 Plantilla de nombres al clonar products → otro módulo
393
+
394
+ | products | users (empleados) | fichajes (ejemplo) |
395
+ |----------|-------------------|---------------------|
396
+ | `Product` | `EmployeeListItem` (listado) / `User` (CRUD futuro) | `Punch`, `Workday` |
397
+ | `products-getall` | `employees-list` | `punches-getall` |
398
+ | `ProductsGetAllDto` | `EmployeesGetAllDto` | `PunchesGetAllDto` |
399
+ | `ProductsGetAllDal` (BE) | `EmployeesGetAllDal` | `PunchesGetAllDal` |
400
+ | `productsGetAllDal` (FE) | `employeesGetAllDal` | `punchesGetAllDal` |
401
+ | `productStatus` | `userStatus` | `punchStatus` |
402
+ | `product-status-label.pipe` | `user-status-label.pipe` | `punch-status-label.pipe` |
403
+ | `/api/products` | `/api/users/employees` | `/api/fichajes/...` |
404
+
405
+ ---
406
+
407
+ ## 4. Arquitectura backend (patrón products)
408
+
409
+ ### 4.1 Separación de responsabilidades
410
+
411
+ ```
412
+ HTTP Request
413
+ → productsRouter.ts (validación Zod, permisos, scope DI)
414
+ → ProductsXxxDal.run(dto) (orquestación Dolibarr)
415
+ → ProductMapper (DolibarrDto ↔ Product)
416
+ → DolibarrClient (HTTP axios)
417
+ ```
418
+
419
+ | Capa | Qué va | Qué NO va |
420
+ |------|--------|-----------|
421
+ | `domain/` | `Product`, enums, DTOs | Tipos Dolibarr, lógica HTTP |
422
+ | `infrastructure/dal/` | DALs, mappers, `ProductDolibarrDto` | Interfaces de negocio nuevas |
423
+ | `infrastructure/router/` | Express, `buildZodSchema`, `createRequestScope` | Definir tipos/DTOs |
424
+
425
+ ### 4.2 Interfaces DAL (`backend/src/common/domain/`)
426
+
427
+ ```typescript
428
+ // Listado
429
+ interface IQueryGetListDal<P, T> {
430
+ run(request: P): Promise<QueryListResult<T>>;
431
+ }
432
+
433
+ // Detalle
434
+ interface IQueryGetItemDal<P, T> {
435
+ run(request: P): Promise<QueryItemResult<T>>;
436
+ }
437
+
438
+ // Comandos (create/update/delete)
439
+ interface IServiceDal<P, T> {
440
+ run(request: P): Promise<T>;
441
+ }
442
+ ```
443
+
444
+ ### 4.3 `DolibarrDal` (clase abstracta)
445
+
446
+ Ubicación: `backend/src/common/infrastructure/dolibarr/dolibarrDal.ts`
447
+
448
+ - Instancia `DolibarrClient` en constructor `(dolikey, entityId)`.
449
+ - Helpers protegidos:
450
+ - `mapFiltersFromDomain(value, columns[])` → fragmentos `sqlfilters` Dolibarr
451
+ - `combineSqlFilters(...filters)` → une con ` and `
452
+ - `mapStatusFilterFrom(status, column)`
453
+
454
+ **GetAll** extiende `DolibarrDal`. **GetById** usa `DolibarrClient` por composición directa (inconsistencia menor aceptada).
455
+
456
+ ### 4.4 `ProductsGetAllDal` — patrón de listado (el más complejo)
457
+
458
+ Responsabilidades:
459
+
460
+ 1. Normalizar `sortfield` → `t.${sortfield || "rowid"}`
461
+ 2. Construir `paramsSql` (sqlfilters, mode, status)
462
+ 3. `this.dolibarr.query2<ProductDolibarrDto>(endpoint, paramsSql, request)`
463
+ 4. Pipeline RxJS: `map(toDomain)` → `pick(fields)` → `toArray()`
464
+ 5. Retornar `{ data, pagination }`
465
+
466
+ **Por qué es más grande que GetById/Create**: paginación, ordenación, filtros SQL, proyección de campos y traducción masiva de filas.
467
+
468
+ ### 4.5 Mappers
469
+
470
+ - `ProductMapper.toDomain(dto: ProductDolibarrDto): Product`
471
+ - `ProductMapper.fromDomain(product: Product): ProductDolibarrDto`
472
+ - Mappers pequeños para enums (`ProductStatusMapper`, `ProductModeMapper`, `ProductPriceBaseTypeMapper`)
473
+ - Todos extienden `DolibarrMapper` (marcador vacío en common)
474
+
475
+ **Regla**: dominio limpio en camelCase; DTO Dolibarr en snake_case. Nunca mezclar en `domain/product.ts`.
476
+
477
+ ### 4.6 Router (`productsRouter.ts`)
478
+
479
+ Patrón por ruta:
480
+
481
+ ```typescript
482
+ router.get("/", async (req, res, next) => {
483
+ const { session, query } = req as AuthenticatedRequest;
484
+ const queryRequest = new ProductsGetAllDto(query);
485
+ const scope = createRequestScope(session.dolikey, session.entity);
486
+ const dal = scope.resolve(InjectionTokens.productsGetAllDal);
487
+ const result = await dal.run(queryRequest);
488
+ res.json(result);
489
+ });
490
+ ```
491
+
492
+ Mutaciones (POST/PUT/DELETE):
493
+
494
+ ```typescript
495
+ const parsed = buildZodSchema(ProductsCreateDto).safeParse({ ...req.body, type: ProductType.Product });
496
+ if (!parsed.success) {
497
+ return res.status(400).json({ error: "Payload de producto invalido", statusCode: 400, details: z.flattenError(parsed.error) });
498
+ }
499
+ ```
500
+
501
+ Middleware global del router: `requireHttpRight(productHttpRightPolicy, "No tienes permiso...")`.
502
+
503
+ ### 4.7 DI Awilix (`backend/src/container.ts`)
504
+
505
+ ```typescript
506
+ productsGetAllDal: asClass(ProductsGetAllDal, { lifetime: Lifetime.SCOPED }),
507
+ // ... una línea por DAL
508
+ ```
509
+
510
+ Uso:
511
+
512
+ ```typescript
513
+ const scope = createRequestScope(session.dolikey, session.entity);
514
+ const dal = scope.resolve(InjectionTokens.productsGetAllDal);
515
+ ```
516
+
517
+ Constructor DAL: `constructor(dolikey: string, entityId: number = 1)` — Awilix inyecta por nombre.
518
+
519
+ Montaje: `server.ts` → `app.use('/api/products', productsRouter)`.
520
+
521
+ ---
522
+
523
+ ## 5. Arquitectura frontend (patrón products)
524
+
525
+ ### 5.1 Flujo de datos
526
+
527
+ ```
528
+ Componente (extends AppQueryBase / AppServiceBase)
529
+ → DAL en dal/backend/ (extends QueryBackendDal / ServiceBackendDal)
530
+ → ApiDalService.queryList | queryItem | post | put | delete
531
+ → BFF /api/products
532
+ ```
533
+
534
+ ### 5.2 Bases comunes
535
+
536
+ | Clase | Archivo | Uso |
537
+ |-------|---------|-----|
538
+ | `AppBase` | `common/infrastructure/app-base.ts` | Snackbar, router, `isMobile` |
539
+ | `AppQueryBase<DTO, T>` | `app-query-base.ts` | Listados: `formGroupFromDto`, `dal.run()` |
540
+ | `AppServiceBase<DTO, T>` | `app-service-base.ts` | Create/Update: `loadDal` + `dal`, `form.disable()` en update |
541
+
542
+ Constructor en componente hijo:
543
+
544
+ ```typescript
545
+ constructor() {
546
+ super(ProductsGetAllDto); // o ProductsUpdateDto
547
+ this.dal = this.productsGetAllDal;
548
+ // update además:
549
+ this.loadDal = this.productsGetByIdDal;
550
+ }
551
+ ```
552
+
553
+ ### 5.3 DAL frontend canónico
554
+
555
+ ```typescript
556
+ @Injectable({ providedIn: 'root' })
557
+ export class ProductsGetAllDal extends QueryBackendDal<ProductsGetAllDto, QueryResult<Product>> {
558
+ private api = inject(ApiDalService);
559
+ private basePath = 'products';
560
+
561
+ run(request: ProductsGetAllDto): Observable<QueryResult<Product>> {
562
+ return this.api.queryList<QueryResult<Product>>(this.basePath, request);
563
+ }
564
+ }
565
+ ```
566
+
567
+ - **Lectura lista**: `QueryBackendDal` + `api.queryList`
568
+ - **Lectura item**: `QueryBackendDal` + `api.queryItem`
569
+ - **Mutación**: `ServiceBackendDal` + `api.post` / `api.put` / `api.delete`
570
+
571
+ ### 5.4 Componente listado (`ProductsGetAllComponent`)
572
+
573
+ Extiende `AppQueryBase<ProductsGetAllDto, QueryResult<Product>>`.
574
+
575
+ Patrones UI:
576
+
577
+ - KPIs (`kpi-card`) filtran por `status`
578
+ - Filtro texto en `filterBy` vía `form-field-text`
579
+ - Tabla desktop: `mat-table` + columnas `col-icon`, `col-text`, `col-currency`, `col-button`
580
+ - Mobile: cards expandibles con `selectedId` signal
581
+ - Permisos: `computed` desde `GlobalInfoService`
582
+ - `dataSource`: array directo `items()` (no `MatTableDataSource` en este módulo)
583
+ - Pipes de dominio para estado (color, icono, label)
584
+
585
+ ### 5.5 Componentes create / update
586
+
587
+ Extienden `AppServiceBase<ProductsCreateDto | ProductsUpdateDto, Product>`.
588
+
589
+ - Formulario generado desde `@Field` en DTO (`formGroupFromDto`)
590
+ - Secciones: `mat-card` + `card-section` + `form-field-*`
591
+ - Update: `ngOnInit` → `this.form.disable()` → botón "Modificar" habilita edición
592
+ - Enums en selects: pipe con método `selector()` → `SelectorResult[]`
593
+
594
+ ### 5.6 Pipes de dominio (patrón)
595
+
596
+ ```typescript
597
+ @Pipe({ name: 'productStatusLabel', standalone: true })
598
+ export class ProductStatusLabelPipe implements PipeTransform {
599
+ transform(status?: ProductStatus): string { /* español */ }
600
+ selector(): SelectorResult[] { /* para mat-select */ }
601
+ }
602
+ ```
603
+
604
+ Replicar por cada enum visible en UI: `color`, `icon`, `label` si aplica.
605
+
606
+ ### 5.7 Rutas y guards (`app.routes.ts`)
607
+
608
+ ```typescript
609
+ {
610
+ path: 'products',
611
+ children: [
612
+ { path: '', loadComponent: () => import('...products-getall')..., canActivate: [canReadProductsGuard] },
613
+ { path: 'create', loadComponent: () => import('...products-create')..., canActivate: [canCreateProductsGuard] },
614
+ { path: ':id', loadComponent: () => import('...products-update')..., canActivate: [canCreateProductsGuard] },
615
+ ]
616
+ }
617
+ ```
618
+
619
+ Guards: `common/infrastructure/guards/commercial-module.guards.ts`.
620
+
621
+ ---
622
+
623
+ ## 6. `common` — qué reutilizar (DRY / KISS)
624
+
625
+ ### 6.1 Backend `backend/src/common/`
626
+
627
+ | Artefacto | Ruta | Cuándo usar |
628
+ |-----------|------|-------------|
629
+ | `QueryListDto` | `domain/queryListDto.ts` | Todo listado paginado |
630
+ | `QueryItemDto` | `domain/queryItemDto.ts` | GET por id |
631
+ | `QueryListResult` / `QueryItemResult` | `domain/` | Respuestas DAL |
632
+ | `field-meta` + `@Field` | `domain/field-meta.ts` | DTOs con metadata |
633
+ | `buildZodSchema` | `infrastructure/zodSchemas.ts` | Validación router |
634
+ | `DolibarrDal` | `infrastructure/dolibarr/dolibarrDal.ts` | DALs con filtros SQL |
635
+ | `DolibarrClient` | `infrastructure/dolibarr/dolibarrClient.ts` | HTTP Dolibarr |
636
+ | `DolibarrMapper` | `infrastructure/dolibarr/dolibarrMapper.ts` | Base mappers |
637
+ | `AuthenticatedRequest` | `domain/AuthenticatedRequest.ts` | Routers |
638
+ | `pick` (RxJS) | `utils/rxjs-utils.ts` | Proyección `fields` en GetAll |
639
+ | `EntityResolver` | `infrastructure/EntityResolver.ts` | Hidratar relaciones (órdenes, facturas) |
640
+ | Errores tipados | `backend/src/errors/domain/` | Jerarquía `BaseError` |
641
+
642
+ **No duplicar** en el módulo: lógica de paginación, generación Zod, filtros SQL base.
643
+
644
+ ### 6.2 Frontend `frontend/src/app/common/`
645
+
646
+ | Artefacto | Cuándo usar |
647
+ |-----------|-------------|
648
+ | `ApiDalService` | Único HTTP al BFF (`withCredentials: true`) |
649
+ | `QueryBackendDal` / `ServiceBackendDal` | Bases DAL |
650
+ | `AppQueryBase` / `AppServiceBase` | Componentes listado / formulario |
651
+ | `formGroupFromDto` | Formularios desde `@Field` |
652
+ | `col-*`, `form-field-*`, `card-*`, `kpi-card` | UI listados y formularios |
653
+ | `confirm-dialog` | Borrados |
654
+ | Guards en `guards/` | Permisos por módulo |
655
+ | DTOs base (`QueryListDto`, etc.) | Espejo backend |
656
+
657
+ **Imports**: preferir alias `@app/common/...` y `@app/{modulo}/...`.
658
+
659
+ ### 6.3 Contrato `@Field` (un DTO, dos usos)
660
+
661
+ ```
662
+ ProductsUpdateDto con @Field
663
+ ├─ buildZodSchema() → validación backend (router)
664
+ └─ formGroupFromDto() → FormGroup Angular (frontend)
665
+ ```
666
+
667
+ Labels en **español**; nombres de propiedad en **inglés camelCase**.
668
+
669
+ ---
670
+
671
+ ## 7. Flujo end-to-end (listado)
672
+
673
+ ```
674
+ Browser GET /api/products?page=0&limit=50&filterBy=mesa&status=1
675
+ → productsRouter: new ProductsGetAllDto(query)
676
+ → ProductsGetAllDal.run(dto)
677
+ → sqlfilters + query2 → Dolibarr /products
678
+ → ProductDolibarrDto[] → ProductMapper.toDomain → Product[]
679
+ → JSON { data: Product[], pagination: {...} }
680
+
681
+ Angular ProductsGetAllComponent.load()
682
+ → ProductsGetAllDal.run(dto)
683
+ → ApiDalService.queryList('products', dto)
684
+ → mismo JSON
685
+ → items.set(response.data)
686
+ ```
687
+
688
+ ---
689
+
690
+ ## 8. Checklist para replicar un módulo CRUD (ej. `users`, `fichajes`)
691
+
692
+ ### Backend
693
+
694
+ - [ ] `domain/{entity}.ts` — interface dominio
695
+ - [ ] `domain/enums/` — enums de negocio
696
+ - [ ] `domain/{Entity}sGetAllDto.ts` extends `QueryListDto` + filtros `@Field`
697
+ - [ ] `domain/{Entity}sGetByIdDto.ts` extends `QueryItemDto`
698
+ - [ ] `domain/{Entity}sCreateDto.ts` / `UpdateDto` con `@Field`
699
+ - [ ] `domain/{Entity}sDeleteDto.ts`
700
+ - [ ] `infrastructure/dal/dolibarr/{entity}DolibarrDto.ts`
701
+ - [ ] `infrastructure/dal/dolibarr/mappers/{entity}Mapper.ts`
702
+ - [ ] 5 DALs (GetAll, GetById, Create, Update, Delete)
703
+ - [ ] `infrastructure/router/{entity}Router.ts`
704
+ - [ ] Registrar DALs en `container.ts` (`Lifetime.SCOPED`)
705
+ - [ ] Montar en `server.ts` `/api/{entities}`
706
+ - [ ] Policy `requireHttpRight` del módulo
707
+ - [ ] Tests Vitest (DAL + routes)
708
+ - [ ] Verificar: `cd backend && npx tsc --noEmit`
709
+
710
+ ### Frontend
711
+
712
+ - [ ] Espejar `domain/` del backend
713
+ - [ ] `infrastructure/dal/backend/{Entity}sGetAllDal.ts` etc.
714
+ - [ ] `{entity}s-getall` extends `AppQueryBase`
715
+ - [ ] `{entity}s-create` / `{entity}s-update` extends `AppServiceBase`
716
+ - [ ] Pipes de enums si hay estados visibles
717
+ - [ ] Rutas en `app.routes.ts` (estáticas antes de dinámicas)
718
+ - [ ] Guards existentes o nuevos en `common/guards/`
719
+ - [ ] Verificar: `cd frontend && ng build`
720
+
721
+ ---
722
+
723
+ ## 9. Variaciones esperadas por módulo
724
+
725
+ | Aspecto | products | users (`migrate-employees-list`) | fichajes (esperado) |
726
+ |---------|----------|-----------------------------------|---------------------|
727
+ | Patrón | Nuevo (referencia) | En curso — listado GetAll | Legacy hoy — migrar |
728
+ | DI Awilix | Sí | Solo `employeesGetAllDal` en listado | No aún — añadir |
729
+ | API Dolibarr | `/products` estándar | `/users` + filtros employee | API custom `fichajestrabajadoresapi` |
730
+ | CRUD puro | Sí | Parcial (solo listado en change 1) | No — acciones (`clock-in`, etc.) |
731
+ | Entidad listado | `Product` completa | `EmployeeListItem` (proyección) | `Punch` / `Workday` |
732
+ | KPIs estado | `statusCounts` página | **Igual** (`statusCounts` + `kpi-card`) | FE (definir en spec) |
733
+ | DTOs `@Field` | Sí | Sí en `EmployeesGetAllDto` | Migrar formularios de acción |
734
+ | Common UI | col-*, form-field-* | Reutilizar + pipes `userStatus*` | `punch-card`, `time-hm-input` |
735
+ | EntityResolver | Sí (otros módulos) | No en listado (grupos N+1 legacy) | Si hidrata `User` |
736
+
737
+ **Fichajes**: modelar cada acción como `IServiceDal` con su DTO (`PunchesClockInDto`, etc.), no forzar CRUD si la API no lo es.
738
+
739
+ **Users**: spec `migrate-employees-list` cerrado — sin `stats` en BFF; `UserGroupRef` en `userGroup.ts`; ruta FE DAL `users/employees`.
740
+
741
+ ---
742
+
743
+ ## 10. Archivos de referencia (leer antes de codificar)
744
+
745
+ ### Backend
746
+
747
+ | Propósito | Archivo |
748
+ |-----------|---------|
749
+ | Router + Zod + DI | `products/infrastructure/router/productsRouter.ts` |
750
+ | List DAL completo | `products/infrastructure/dal/dolibarr/productsGetAllDal.ts` |
751
+ | GetById DAL | `products/infrastructure/dal/dolibarr/productsGetByIdDal.ts` |
752
+ | Mapper principal | `products/infrastructure/dal/dolibarr/mappers/productMapper.ts` |
753
+ | DTO formulario | `products/domain/productsUpdateDto.ts` |
754
+ | DTO listado | `products/domain/productsGetAllDto.ts` |
755
+ | DI | `container.ts` |
756
+ | Filtros SQL | `common/infrastructure/dolibarr/dolibarrDal.ts` |
757
+ | Zod desde @Field | `common/infrastructure/zodSchemas.ts` |
758
+
759
+ ### Frontend
760
+
761
+ | Propósito | Archivo |
762
+ |-----------|---------|
763
+ | Listado | `products/infrastructure/components/products-getall/products-getall.ts` + `.html` (**sin .css**) |
764
+ | Create | `products/infrastructure/components/products-create/products-create.ts` |
765
+ | Update | `products/infrastructure/components/products-update/products-update.ts` |
766
+ | DAL listado | `products/infrastructure/dal/backend/productsGetAllDal.ts` |
767
+ | AppQueryBase | `common/infrastructure/app-query-base.ts` |
768
+ | AppServiceBase | `common/infrastructure/app-service-base.ts` |
769
+ | ApiDalService | `common/infrastructure/api.dal.service.ts` |
770
+ | Form desde DTO | `common/infrastructure/formField.ts` |
771
+
772
+ ---
773
+
774
+ ## 11. Estado de madurez en `products` (no replicar bugs)
775
+
776
+ | Área | Estado |
777
+ |------|--------|
778
+ | GetAll + GetById + mappers | Referencia estable |
779
+ | Create / Update / Delete backend | **WIP** — mapper/retornos incompletos |
780
+ | Delete frontend en listado | UI preparada, llamada comentada |
781
+ | Paginador en template | Comentado |
782
+ | `application/*.service.ts` frontend | Comentado — no usar |
783
+ | DALs duplicados en `dal/` raíz vs `dal/backend/` | Usar solo `dal/backend/` |
784
+ | `domain/Enumerations/` (PascalCase) | Legacy — usar `domain/enums/` |
785
+ | `AppServiceBase.onSave` mensajes | Hardcodeados a "Producto" |
786
+ | GetById no extiende `DolibarrDal` | Inconsistencia menor |
787
+
788
+ Antes de replicar mutaciones, **confirmar con usuario** si products debe terminarse primero o si el nuevo módulo debe implementar Create/Update/Delete completos desde el inicio.
789
+
790
+ ---
791
+
792
+ ## 12. Archivos legacy — NO usar como plantilla
793
+
794
+ ### Backend
795
+
796
+ - `products/infrastructure/dal/dolibarr/productsDal.ts`
797
+ - `productMappers.ts`, `productMapper.ts` (raíz dolibarr, fuera de `mappers/`)
798
+ - `domain/Enumerations/*` (duplicado de `domain/enums/`)
799
+ - `DolibarrProductResponse.ts` si existe duplicado con `productDolibarrDto.ts`
800
+
801
+ ### Frontend
802
+
803
+ - `application/productsGetAllService.ts` (comentado)
804
+ - `application/products-update.service.ts` (comentado)
805
+ - `infrastructure/dal/productsGetAllDal.ts` (raíz, usar `dal/backend/`)
806
+ - `infrastructure/dal/products-update.dal.ts` (legacy ApiDalService)
807
+ - `domain/Enumerations/` vs `domain/enums/` — consolidar en `enums/`
808
+
809
+ ---
810
+
811
+ ## 13. Verificación obligatoria
812
+
813
+ ```bash
814
+ # Backend
815
+ cd backend && npx tsc --noEmit
816
+ cd backend && npm test -- tests/products # si existen tests del módulo
817
+
818
+ # Frontend
819
+ cd frontend && ng build
820
+
821
+ # Zero-Any (muestra debe estar vacía en código productivo)
822
+ rg "\bany\b" backend/src/{modulo}/ frontend/src/app/{modulo}/
823
+ ```
824
+
825
+ Backend Docker tras cambios BFF:
826
+
827
+ ```bash
828
+ docker compose down && docker compose build --no-cache backend && docker compose up -d backend
829
+ ```
830
+
831
+ ---
832
+
833
+ ## 14. Preguntas abiertas — escalar al usuario
834
+
835
+ El agente **debe preguntar** si no tiene respuesta en spec ni en este documento:
836
+
837
+ 1. ¿El módulo nuevo es CRUD estándar Dolibarr o API custom (como fichajes)?
838
+ 2. ¿Qué política de permisos `requireHttpRight` / guards aplicar?
839
+ 3. ¿Los KPIs del listado vienen del backend o se calculan en frontend (como products hoy con `statusCounts`)?
840
+ 4. ¿Campos del formulario y filtros exactos (lista de `@Field`)?
841
+ 5. ¿El módulo necesita `EntityResolver` / objetos compuestos en dominio?
842
+ 6. ¿Create/Update/Delete deben estar completos en la primera entrega o solo listado + detalle?
843
+ 7. ¿Endpoint Dolibarr exacto y parámetros documentados en `backend/doc/swagger.json`?
844
+
845
+ ---
846
+
847
+ ## 15. Documentos relacionados
848
+
849
+ | Documento | Propósito |
850
+ |-----------|-----------|
851
+ | `AGENTS.md` | Constitución global |
852
+ | [module-implementation-flow.md](./module-implementation-flow.md) | Orden paso a paso (domain → BE → FE) |
853
+ | [common-imports-catalog.md](./common-imports-catalog.md) | Imports de common usados por products |
854
+ | [fichajes-migration-notes.md](./fichajes-migration-notes.md) | Plan fichajes (renombres, endpoints) |
855
+ | [users-migration-notes.md](./users-migration-notes.md) | Plan users/employees |
856
+ | [replicate-module-checklist.md](./replicate-module-checklist.md) | Checklist corto |
857
+
858
+ ---
859
+
860
+ *Mantener este archivo actualizado cuando `products` evolucione o cuando un módulo migrado establezca un patrón nuevo validado.*