@tacuchi/agent-workflow-cli 11.0.1 → 12.0.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 (447) hide show
  1. package/README.md +51 -95
  2. package/dist/application/artifacts-service.d.ts +3 -12
  3. package/dist/application/artifacts-service.d.ts.map +1 -1
  4. package/dist/application/artifacts-service.js +18 -19
  5. package/dist/application/artifacts-service.js.map +1 -1
  6. package/dist/application/branch-resolver.d.ts +16 -0
  7. package/dist/application/branch-resolver.d.ts.map +1 -0
  8. package/dist/application/branch-resolver.js +24 -0
  9. package/dist/application/branch-resolver.js.map +1 -0
  10. package/dist/application/check-branch-service.d.ts +0 -2
  11. package/dist/application/check-branch-service.d.ts.map +1 -1
  12. package/dist/application/check-branch-service.js +5 -40
  13. package/dist/application/check-branch-service.js.map +1 -1
  14. package/dist/application/checkpoint/markdown.d.ts.map +1 -1
  15. package/dist/application/checkpoint/markdown.js +1 -16
  16. package/dist/application/checkpoint/markdown.js.map +1 -1
  17. package/dist/application/checkpoint/state-reader.d.ts +1 -3
  18. package/dist/application/checkpoint/state-reader.d.ts.map +1 -1
  19. package/dist/application/checkpoint/state-reader.js +10 -31
  20. package/dist/application/checkpoint/state-reader.js.map +1 -1
  21. package/dist/application/checkpoint-service.d.ts +12 -14
  22. package/dist/application/checkpoint-service.d.ts.map +1 -1
  23. package/dist/application/checkpoint-service.js +36 -61
  24. package/dist/application/checkpoint-service.js.map +1 -1
  25. package/dist/application/checkpoint-write-service.d.ts +0 -2
  26. package/dist/application/checkpoint-write-service.d.ts.map +1 -1
  27. package/dist/application/checkpoint-write-service.js +5 -6
  28. package/dist/application/checkpoint-write-service.js.map +1 -1
  29. package/dist/application/history-update-service.js +3 -1
  30. package/dist/application/history-update-service.js.map +1 -1
  31. package/dist/application/hook-branch-check.d.ts.map +1 -1
  32. package/dist/application/hook-branch-check.js +5 -34
  33. package/dist/application/hook-branch-check.js.map +1 -1
  34. package/dist/application/hook-git-commit-advisor.d.ts.map +1 -1
  35. package/dist/application/hook-git-commit-advisor.js +18 -23
  36. package/dist/application/hook-git-commit-advisor.js.map +1 -1
  37. package/dist/application/markdown.d.ts.map +1 -1
  38. package/dist/application/markdown.js +0 -4
  39. package/dist/application/markdown.js.map +1 -1
  40. package/dist/application/parsers/project-block.d.ts +0 -8
  41. package/dist/application/parsers/project-block.d.ts.map +1 -1
  42. package/dist/application/parsers/project-block.js +13 -52
  43. package/dist/application/parsers/project-block.js.map +1 -1
  44. package/dist/application/paths-service.d.ts +7 -8
  45. package/dist/application/paths-service.d.ts.map +1 -1
  46. package/dist/application/paths-service.js +12 -8
  47. package/dist/application/paths-service.js.map +1 -1
  48. package/dist/application/project-md-upsert-service.d.ts +3 -11
  49. package/dist/application/project-md-upsert-service.d.ts.map +1 -1
  50. package/dist/application/project-md-upsert-service.js +6 -56
  51. package/dist/application/project-md-upsert-service.js.map +1 -1
  52. package/dist/application/project-tab-data.d.ts +14 -42
  53. package/dist/application/project-tab-data.d.ts.map +1 -1
  54. package/dist/application/project-tab-data.js +27 -113
  55. package/dist/application/project-tab-data.js.map +1 -1
  56. package/dist/application/release-data/artifacts.d.ts +0 -2
  57. package/dist/application/release-data/artifacts.d.ts.map +1 -1
  58. package/dist/application/release-data/artifacts.js +22 -12
  59. package/dist/application/release-data/artifacts.js.map +1 -1
  60. package/dist/application/release-data/sessions.d.ts +0 -2
  61. package/dist/application/release-data/sessions.d.ts.map +1 -1
  62. package/dist/application/release-data/sessions.js +36 -27
  63. package/dist/application/release-data/sessions.js.map +1 -1
  64. package/dist/application/release-data-service.d.ts +0 -3
  65. package/dist/application/release-data-service.d.ts.map +1 -1
  66. package/dist/application/release-data-service.js +3 -21
  67. package/dist/application/release-data-service.js.map +1 -1
  68. package/dist/application/render/history-row.d.ts +1 -9
  69. package/dist/application/render/history-row.d.ts.map +1 -1
  70. package/dist/application/render/history-row.js +3 -20
  71. package/dist/application/render/history-row.js.map +1 -1
  72. package/dist/application/render/project-block.d.ts +1 -3
  73. package/dist/application/render/project-block.d.ts.map +1 -1
  74. package/dist/application/render/project-block.js +4 -27
  75. package/dist/application/render/project-block.js.map +1 -1
  76. package/dist/application/self/doctor-self.d.ts.map +1 -1
  77. package/dist/application/self/doctor-self.js +15 -8
  78. package/dist/application/self/doctor-self.js.map +1 -1
  79. package/dist/application/self/install-hooks.d.ts +1 -1
  80. package/dist/application/self/install-hooks.d.ts.map +1 -1
  81. package/dist/application/self/install-hooks.js +3 -2
  82. package/dist/application/self/install-hooks.js.map +1 -1
  83. package/dist/application/self/install-skill.d.ts +9 -3
  84. package/dist/application/self/install-skill.d.ts.map +1 -1
  85. package/dist/application/self/install-skill.js +16 -16
  86. package/dist/application/self/install-skill.js.map +1 -1
  87. package/dist/application/self/uninstall-skill.js +14 -12
  88. package/dist/application/self/uninstall-skill.js.map +1 -1
  89. package/dist/application/self/uninstall.js +14 -12
  90. package/dist/application/self/uninstall.js.map +1 -1
  91. package/dist/application/session-artifacts.d.ts +7 -6
  92. package/dist/application/session-artifacts.d.ts.map +1 -1
  93. package/dist/application/session-artifacts.js +10 -15
  94. package/dist/application/session-artifacts.js.map +1 -1
  95. package/dist/application/session-close-service.d.ts +5 -22
  96. package/dist/application/session-close-service.d.ts.map +1 -1
  97. package/dist/application/session-close-service.js +20 -143
  98. package/dist/application/session-close-service.js.map +1 -1
  99. package/dist/application/session-create-service.d.ts +9 -29
  100. package/dist/application/session-create-service.d.ts.map +1 -1
  101. package/dist/application/session-create-service.js +44 -288
  102. package/dist/application/session-create-service.js.map +1 -1
  103. package/dist/application/session-resolver.d.ts +4 -25
  104. package/dist/application/session-resolver.d.ts.map +1 -1
  105. package/dist/application/session-resolver.js +33 -149
  106. package/dist/application/session-resolver.js.map +1 -1
  107. package/dist/application/session-resume-service.d.ts +3 -4
  108. package/dist/application/session-resume-service.d.ts.map +1 -1
  109. package/dist/application/session-resume-service.js +8 -26
  110. package/dist/application/session-resume-service.js.map +1 -1
  111. package/dist/application/sessions-service.d.ts +2 -3
  112. package/dist/application/sessions-service.d.ts.map +1 -1
  113. package/dist/application/sessions-service.js +9 -26
  114. package/dist/application/sessions-service.js.map +1 -1
  115. package/dist/application/skill-index-service.d.ts +0 -2
  116. package/dist/application/skill-index-service.d.ts.map +1 -1
  117. package/dist/application/skill-index-service.js +0 -1
  118. package/dist/application/skill-index-service.js.map +1 -1
  119. package/dist/application/skills-resolver-service.d.ts +22 -0
  120. package/dist/application/skills-resolver-service.d.ts.map +1 -0
  121. package/dist/application/skills-resolver-service.js +71 -0
  122. package/dist/application/skills-resolver-service.js.map +1 -0
  123. package/dist/application/sources-service.d.ts +0 -5
  124. package/dist/application/sources-service.d.ts.map +1 -1
  125. package/dist/application/sources-service.js +5 -44
  126. package/dist/application/sources-service.js.map +1 -1
  127. package/dist/application/templates/session.d.ts +24 -0
  128. package/dist/application/templates/session.d.ts.map +1 -0
  129. package/dist/application/templates/session.js +46 -0
  130. package/dist/application/templates/session.js.map +1 -0
  131. package/dist/application/upgrade-hub-mode-service.d.ts.map +1 -1
  132. package/dist/application/upgrade-hub-mode-service.js +0 -1
  133. package/dist/application/upgrade-hub-mode-service.js.map +1 -1
  134. package/dist/application/workspace-init-service.d.ts +60 -0
  135. package/dist/application/workspace-init-service.d.ts.map +1 -0
  136. package/dist/application/workspace-init-service.js +227 -0
  137. package/dist/application/workspace-init-service.js.map +1 -0
  138. package/dist/cli/commands/check-branch.d.ts.map +1 -1
  139. package/dist/cli/commands/check-branch.js +0 -3
  140. package/dist/cli/commands/check-branch.js.map +1 -1
  141. package/dist/cli/commands/plugin-doctor.d.ts.map +1 -1
  142. package/dist/cli/commands/plugin-doctor.js +0 -3
  143. package/dist/cli/commands/plugin-doctor.js.map +1 -1
  144. package/dist/cli/commands/project-md-upsert.d.ts.map +1 -1
  145. package/dist/cli/commands/project-md-upsert.js +5 -31
  146. package/dist/cli/commands/project-md-upsert.js.map +1 -1
  147. package/dist/cli/commands/session-close.d.ts.map +1 -1
  148. package/dist/cli/commands/session-close.js +1 -33
  149. package/dist/cli/commands/session-close.js.map +1 -1
  150. package/dist/cli/commands/session-create.d.ts.map +1 -1
  151. package/dist/cli/commands/session-create.js +5 -21
  152. package/dist/cli/commands/session-create.js.map +1 -1
  153. package/dist/cli/commands/session-resume.js +1 -1
  154. package/dist/cli/commands/session-resume.js.map +1 -1
  155. package/dist/cli/commands/set-working-branch.d.ts +3 -0
  156. package/dist/cli/commands/set-working-branch.d.ts.map +1 -0
  157. package/dist/cli/commands/set-working-branch.js +34 -0
  158. package/dist/cli/commands/set-working-branch.js.map +1 -0
  159. package/dist/cli/commands/skill-index.d.ts.map +1 -1
  160. package/dist/cli/commands/skill-index.js +0 -3
  161. package/dist/cli/commands/skill-index.js.map +1 -1
  162. package/dist/cli/commands/skills.d.ts +3 -0
  163. package/dist/cli/commands/skills.d.ts.map +1 -0
  164. package/dist/cli/commands/skills.js +10 -0
  165. package/dist/cli/commands/skills.js.map +1 -0
  166. package/dist/cli/commands/sources.d.ts.map +1 -1
  167. package/dist/cli/commands/sources.js +0 -3
  168. package/dist/cli/commands/sources.js.map +1 -1
  169. package/dist/cli/commands/workspace-init.d.ts +3 -0
  170. package/dist/cli/commands/workspace-init.d.ts.map +1 -0
  171. package/dist/cli/commands/workspace-init.js +69 -0
  172. package/dist/cli/commands/workspace-init.js.map +1 -0
  173. package/dist/cli/help-groups.d.ts.map +1 -1
  174. package/dist/cli/help-groups.js +8 -19
  175. package/dist/cli/help-groups.js.map +1 -1
  176. package/dist/cli/interactive-menu.d.ts +1 -1
  177. package/dist/cli/interactive-menu.d.ts.map +1 -1
  178. package/dist/cli/main.js +29 -37
  179. package/dist/cli/main.js.map +1 -1
  180. package/dist/cli/parser.d.ts +0 -2
  181. package/dist/cli/parser.d.ts.map +1 -1
  182. package/dist/cli/parser.js +1 -13
  183. package/dist/cli/parser.js.map +1 -1
  184. package/dist/cli/tui/app.js +3 -38
  185. package/dist/cli/tui/app.js.map +1 -1
  186. package/dist/cli/tui/components/hub-init-alias.js +1 -1
  187. package/dist/cli/tui/components/hub-init-alias.js.map +1 -1
  188. package/dist/cli/tui/components/hub-init-form.d.ts.map +1 -1
  189. package/dist/cli/tui/components/hub-init-form.js +13 -12
  190. package/dist/cli/tui/components/hub-init-form.js.map +1 -1
  191. package/dist/cli/tui/components/workspace-init-alias.d.ts +5 -0
  192. package/dist/cli/tui/components/workspace-init-alias.d.ts.map +1 -0
  193. package/dist/cli/tui/components/workspace-init-alias.js +19 -0
  194. package/dist/cli/tui/components/workspace-init-alias.js.map +1 -0
  195. package/dist/cli/tui/components/workspace-init-form.d.ts +13 -0
  196. package/dist/cli/tui/components/workspace-init-form.d.ts.map +1 -0
  197. package/dist/cli/tui/components/workspace-init-form.js +87 -0
  198. package/dist/cli/tui/components/workspace-init-form.js.map +1 -0
  199. package/dist/cli/tui/data/activity.d.ts +1 -1
  200. package/dist/cli/tui/data/activity.d.ts.map +1 -1
  201. package/dist/cli/tui/data/activity.js +2 -2
  202. package/dist/cli/tui/data/activity.js.map +1 -1
  203. package/dist/cli/tui/data/workflow-content.d.ts.map +1 -1
  204. package/dist/cli/tui/data/workflow-content.js +67 -87
  205. package/dist/cli/tui/data/workflow-content.js.map +1 -1
  206. package/dist/cli/tui/tabs/project-tab.d.ts.map +1 -1
  207. package/dist/cli/tui/tabs/project-tab.js +23 -97
  208. package/dist/cli/tui/tabs/project-tab.js.map +1 -1
  209. package/dist/cli/tui/tabs/skills-tab.d.ts.map +1 -1
  210. package/dist/cli/tui/tabs/skills-tab.js +7 -7
  211. package/dist/cli/tui/tabs/skills-tab.js.map +1 -1
  212. package/dist/cli/tui/tabs/workflow-tab.d.ts +1 -3
  213. package/dist/cli/tui/tabs/workflow-tab.d.ts.map +1 -1
  214. package/dist/cli/tui/tabs/workflow-tab.js +2 -2
  215. package/dist/cli/tui/tabs/workflow-tab.js.map +1 -1
  216. package/dist/cli/types.d.ts +3 -0
  217. package/dist/cli/types.d.ts.map +1 -1
  218. package/dist/domain/plugin.d.ts +2 -12
  219. package/dist/domain/plugin.d.ts.map +1 -1
  220. package/dist/domain/project.d.ts +0 -9
  221. package/dist/domain/project.d.ts.map +1 -1
  222. package/dist/domain/session.d.ts +7 -24
  223. package/dist/domain/session.d.ts.map +1 -1
  224. package/dist/domain/skills.d.ts +22 -0
  225. package/dist/domain/skills.d.ts.map +1 -0
  226. package/dist/domain/skills.js +37 -0
  227. package/dist/domain/skills.js.map +1 -0
  228. package/dist/domain/types.d.ts +6 -2
  229. package/dist/domain/types.d.ts.map +1 -1
  230. package/dist/index.d.ts +4 -4
  231. package/dist/index.d.ts.map +1 -1
  232. package/dist/index.js.map +1 -1
  233. package/dist/runtime/config-service.js +1 -1
  234. package/dist/runtime/config-service.js.map +1 -1
  235. package/dist/runtime/types.d.ts +0 -1
  236. package/dist/runtime/types.d.ts.map +1 -1
  237. package/dist/runtime/types.js.map +1 -1
  238. package/package.json +12 -3
  239. package/skills/w/README.md +65 -0
  240. package/skills/w/SKILL.md +153 -0
  241. package/skills/w/artifacts/README.md +60 -0
  242. package/skills/w/artifacts/artifacts-core/BACKLOG.md +12 -0
  243. package/skills/w/artifacts/artifacts-core/CHECKPOINT.md +22 -0
  244. package/skills/w/artifacts/artifacts-core/SCRIPTS.sql +39 -0
  245. package/skills/w/artifacts/artifacts-core/SESSION.md +27 -0
  246. package/skills/w/artifacts/artifacts-core/TASKS.md +18 -0
  247. package/skills/w/artifacts/artifacts-dev/DECISION.md +11 -0
  248. package/skills/w/artifacts/artifacts-dev/TECHNICAL-NOTE.md +81 -0
  249. package/skills/w/artifacts/artifacts-research/ANALYSIS-FILE.md +48 -0
  250. package/skills/w/artifacts/artifacts-research/CONCLUSIONS.md +20 -0
  251. package/skills/w/commands/README.md +116 -0
  252. package/skills/w/commands/export-diagrams.md +35 -0
  253. package/skills/w/commands/export-manuals.md +35 -0
  254. package/skills/w/commands/export-reports.md +35 -0
  255. package/skills/w/commands/export-scripts.md +35 -0
  256. package/skills/w/commands/plan-exec.md +46 -0
  257. package/skills/w/commands/plan-new.md +44 -0
  258. package/skills/w/commands/quick.md +39 -0
  259. package/skills/w/commands/spec-new.md +63 -0
  260. package/skills/w/commands/spec-refine.md +41 -0
  261. package/skills/w/commands/workspace-init.md +39 -0
  262. package/skills/w/exports/README.md +88 -0
  263. package/skills/w/exports/export-diagrams/SKILL.md +125 -0
  264. package/skills/w/exports/export-manuals/SKILL.md +127 -0
  265. package/skills/w/exports/export-reports/SKILL.md +115 -0
  266. package/skills/w/exports/export-scripts/SKILL.md +135 -0
  267. package/skills/w/hooks/README.md +15 -0
  268. package/skills/{agent-workflow → w}/hooks/hooks.template.json +2 -2
  269. package/skills/w/loops/README.md +118 -0
  270. package/skills/w/loops/plan-exec-loop/SKILL.md +161 -0
  271. package/skills/w/loops/plan-new-loop/SKILL.md +97 -0
  272. package/skills/w/loops/quick-loop/SKILL.md +102 -0
  273. package/skills/w/loops/spec-refine-loop/SKILL.md +222 -0
  274. package/skills/w/roles/README.md +154 -0
  275. package/skills/w/roles/coding-standards/SKILL.md +82 -0
  276. package/skills/w/roles/diagrams/SKILL.md +248 -0
  277. package/skills/w/roles/git/SKILL.md +98 -0
  278. package/skills/w/roles/research/SKILL.md +181 -0
  279. package/skills/w/roles/sql/SKILL.md +137 -0
  280. package/skills/w/roles/testing/SKILL.md +180 -0
  281. package/skills/w/roles/tools/SKILL.md +148 -0
  282. package/skills/w/roles/ui-spec/SKILL.md +136 -0
  283. package/skills/w/roles/writing/SKILL.md +90 -0
  284. package/skills/agent-workflow/LICENSE +0 -661
  285. package/skills/agent-workflow/MANUAL-FUNCIONAL.md +0 -298
  286. package/skills/agent-workflow/MANUAL-TECNICO.md +0 -271
  287. package/skills/agent-workflow/README.md +0 -74
  288. package/skills/agent-workflow/SKILL.md +0 -112
  289. package/skills/agent-workflow/commands/README.md +0 -26
  290. package/skills/agent-workflow/commands/compact.md +0 -24
  291. package/skills/agent-workflow/commands/doctor.md +0 -100
  292. package/skills/agent-workflow/commands/export-arq.md +0 -77
  293. package/skills/agent-workflow/commands/export-conclusions.md +0 -78
  294. package/skills/agent-workflow/commands/export-plan.md +0 -74
  295. package/skills/agent-workflow/commands/export-qa-note.md +0 -30
  296. package/skills/agent-workflow/commands/export-report.md +0 -78
  297. package/skills/agent-workflow/commands/export-requirement.md +0 -30
  298. package/skills/agent-workflow/commands/export-scripts.md +0 -82
  299. package/skills/agent-workflow/commands/export-tech-manuals.md +0 -75
  300. package/skills/agent-workflow/commands/export-tech-note.md +0 -30
  301. package/skills/agent-workflow/commands/hub-init.md +0 -58
  302. package/skills/agent-workflow/commands/migrate.md +0 -56
  303. package/skills/agent-workflow/commands/patch.md +0 -49
  304. package/skills/agent-workflow/commands/project-init.md +0 -60
  305. package/skills/agent-workflow/commands/resume.md +0 -22
  306. package/skills/agent-workflow/commands/rules.md +0 -41
  307. package/skills/agent-workflow/commands/session.md +0 -35
  308. package/skills/agent-workflow/docs/TEST-PLAN.md +0 -163
  309. package/skills/agent-workflow/doctrine/README.md +0 -15
  310. package/skills/agent-workflow/doctrine/compact/SKILL.md +0 -145
  311. package/skills/agent-workflow/doctrine/doctor/SKILL.md +0 -86
  312. package/skills/agent-workflow/doctrine/hub-init/SKILL.md +0 -77
  313. package/skills/agent-workflow/doctrine/hub-init/references/multiroot-manual.md +0 -51
  314. package/skills/agent-workflow/doctrine/implement/SKILL.md +0 -290
  315. package/skills/agent-workflow/doctrine/implement/references/branch-verification.md +0 -16
  316. package/skills/agent-workflow/doctrine/implement/references/design-md-template.md +0 -108
  317. package/skills/agent-workflow/doctrine/implement/references/rollback-guide.md +0 -83
  318. package/skills/agent-workflow/doctrine/migrate/SKILL.md +0 -281
  319. package/skills/agent-workflow/doctrine/project-init/SKILL.md +0 -100
  320. package/skills/agent-workflow/doctrine/refactor/SKILL.md +0 -208
  321. package/skills/agent-workflow/doctrine/refactor/references/refactor-md-template.md +0 -108
  322. package/skills/agent-workflow/doctrine/refactor/references/strangler-checklist.md +0 -116
  323. package/skills/agent-workflow/doctrine/resume/SKILL.md +0 -199
  324. package/skills/agent-workflow/doctrine/rules/SKILL.md +0 -250
  325. package/skills/agent-workflow/doctrine/session/SKILL.md +0 -471
  326. package/skills/agent-workflow/doctrine/session/references/auto-plan-rules.md +0 -63
  327. package/skills/agent-workflow/doctrine/session/references/backlog-template.md +0 -95
  328. package/skills/agent-workflow/doctrine/session/references/branch-verification.md +0 -198
  329. package/skills/agent-workflow/doctrine/session/references/commits-policy.md +0 -111
  330. package/skills/agent-workflow/doctrine/session/references/communication-style.md +0 -50
  331. package/skills/agent-workflow/doctrine/session/references/graduacion-routing.md +0 -88
  332. package/skills/agent-workflow/doctrine/session/references/lifecycle-deep.md +0 -160
  333. package/skills/agent-workflow/doctrine/session/references/prompts/C1-specialty-selection.md +0 -11
  334. package/skills/agent-workflow/doctrine/session/references/prompts/C2-cost-guard.md +0 -14
  335. package/skills/agent-workflow/doctrine/session/references/prompts/M1-closure-commit-prompt.md +0 -104
  336. package/skills/agent-workflow/doctrine/session/references/prompts/M10-next-step.md +0 -17
  337. package/skills/agent-workflow/doctrine/session/references/prompts/M11-context.md +0 -16
  338. package/skills/agent-workflow/doctrine/session/references/prompts/M13-closure-cleanup.md +0 -61
  339. package/skills/agent-workflow/doctrine/session/references/prompts/M2-branch-caso-A.md +0 -14
  340. package/skills/agent-workflow/doctrine/session/references/prompts/M3-branch-caso-C.md +0 -33
  341. package/skills/agent-workflow/doctrine/session/references/prompts/M4-cross-source-hard-gate.md +0 -33
  342. package/skills/agent-workflow/doctrine/session/references/prompts/M5-modality-analyze.md +0 -15
  343. package/skills/agent-workflow/doctrine/session/references/prompts/M6-phase-gate.md +0 -31
  344. package/skills/agent-workflow/doctrine/session/references/prompts/M7-refactor-legacy-detected.md +0 -28
  345. package/skills/agent-workflow/doctrine/session/references/prompts/M8-refactor-cleanup.md +0 -16
  346. package/skills/agent-workflow/doctrine/session/references/prompts/M9-contract-review.md +0 -39
  347. package/skills/agent-workflow/doctrine/session/references/prompts/S1-type-design.md +0 -15
  348. package/skills/agent-workflow/doctrine/session/references/prompts/S2-topic-change-detection.md +0 -14
  349. package/skills/agent-workflow/doctrine/session/references/prompts/S3-flow-detection.md +0 -28
  350. package/skills/agent-workflow/doctrine/session/references/prompts/S4-resume.md +0 -27
  351. package/skills/agent-workflow/doctrine/session/references/prompts/S5-post-compact.md +0 -17
  352. package/skills/agent-workflow/doctrine/session/references/prompts/S6-scope.md +0 -16
  353. package/skills/agent-workflow/doctrine/session/references/prompts/S7-design-review.md +0 -37
  354. package/skills/agent-workflow/doctrine/session/references/prompts-catalog.md +0 -213
  355. package/skills/agent-workflow/doctrine/session/references/sandbox-readonly-rules.md +0 -82
  356. package/skills/agent-workflow/doctrine/session/references/specialty-decision-tree.md +0 -56
  357. package/skills/agent-workflow/doctrine/session/references/topic-change-rules.md +0 -67
  358. package/skills/agent-workflow/exports/README.md +0 -15
  359. package/skills/agent-workflow/exports/export-arq/SKILL.md +0 -229
  360. package/skills/agent-workflow/exports/export-arq/references/lexico-tecnico.md +0 -94
  361. package/skills/agent-workflow/exports/export-arq/references/template-c4.md +0 -293
  362. package/skills/agent-workflow/exports/export-arq/references/template-plantuml.puml +0 -77
  363. package/skills/agent-workflow/exports/export-arq/references/template-structurizr.dsl +0 -72
  364. package/skills/agent-workflow/exports/export-arq/references/validations.md +0 -231
  365. package/skills/agent-workflow/exports/export-conclusions/SKILL.md +0 -169
  366. package/skills/agent-workflow/exports/export-conclusions/references/dedup-rules.md +0 -154
  367. package/skills/agent-workflow/exports/export-conclusions/references/template-conclusions.md +0 -158
  368. package/skills/agent-workflow/exports/export-plan/SKILL.md +0 -225
  369. package/skills/agent-workflow/exports/export-plan/references/state-transitions.md +0 -141
  370. package/skills/agent-workflow/exports/export-plan/references/template-plan.md +0 -132
  371. package/skills/agent-workflow/exports/export-qa-note/SKILL.md +0 -31
  372. package/skills/agent-workflow/exports/export-report/SKILL.md +0 -262
  373. package/skills/agent-workflow/exports/export-report/references/lexico.md +0 -174
  374. package/skills/agent-workflow/exports/export-report/references/template-a.md +0 -95
  375. package/skills/agent-workflow/exports/export-report/references/template-b.md +0 -221
  376. package/skills/agent-workflow/exports/export-report/references/template-c.md +0 -180
  377. package/skills/agent-workflow/exports/export-report/references/validations.md +0 -255
  378. package/skills/agent-workflow/exports/export-requirement/SKILL.md +0 -31
  379. package/skills/agent-workflow/exports/export-scripts/SKILL.md +0 -211
  380. package/skills/agent-workflow/exports/export-scripts/references/code-scan-recommendations.md +0 -83
  381. package/skills/agent-workflow/exports/export-scripts/references/deprecation-plan.md +0 -80
  382. package/skills/agent-workflow/exports/export-scripts/references/lexico-tecnico.md +0 -47
  383. package/skills/agent-workflow/exports/export-scripts/references/manifest-template.md +0 -265
  384. package/skills/agent-workflow/exports/export-scripts/references/readme-template.md +0 -49
  385. package/skills/agent-workflow/exports/export-scripts/references/theme-handling.md +0 -141
  386. package/skills/agent-workflow/exports/export-scripts/references/validations.md +0 -69
  387. package/skills/agent-workflow/exports/export-tech-manuals/SKILL.md +0 -214
  388. package/skills/agent-workflow/exports/export-tech-manuals/references/lexico-tecnico.md +0 -97
  389. package/skills/agent-workflow/exports/export-tech-manuals/references/template-index.md +0 -123
  390. package/skills/agent-workflow/exports/export-tech-manuals/references/template-manual.md +0 -143
  391. package/skills/agent-workflow/exports/export-tech-manuals/references/validations.md +0 -211
  392. package/skills/agent-workflow/exports/export-tech-note/SKILL.md +0 -31
  393. package/skills/agent-workflow/hooks/README.md +0 -15
  394. package/skills/agent-workflow/references/README.md +0 -12
  395. package/skills/agent-workflow/references/checkpoint.md +0 -59
  396. package/skills/agent-workflow/references/dev-only.md +0 -50
  397. package/skills/agent-workflow/references/doctor.md +0 -61
  398. package/skills/agent-workflow/references/history.md +0 -40
  399. package/skills/agent-workflow/references/hooks.md +0 -35
  400. package/skills/agent-workflow/references/legacy-anchors.md +0 -50
  401. package/skills/agent-workflow/references/mcp.md +0 -34
  402. package/skills/agent-workflow/references/objetivo-tasks.md +0 -64
  403. package/skills/agent-workflow/references/orchestration.md +0 -86
  404. package/skills/agent-workflow/references/profile-parametrization.md +0 -88
  405. package/skills/agent-workflow/references/self.md +0 -68
  406. package/skills/agent-workflow/references/session-mgmt.md +0 -109
  407. package/skills/agent-workflow/references/sources.md +0 -102
  408. package/skills/agent-workflow/specialties/README.md +0 -14
  409. package/skills/agent-workflow/specialties/analyze-conclude/SKILL.md +0 -181
  410. package/skills/agent-workflow/specialties/analyze-conclude/references/incident-classification.md +0 -61
  411. package/skills/agent-workflow/specialties/analyze-investigate/SKILL.md +0 -148
  412. package/skills/agent-workflow/specialties/analyze-investigate/references/cost-guard.md +0 -85
  413. package/skills/agent-workflow/specialties/analyze-synthesize/SKILL.md +0 -127
  414. package/skills/agent-workflow/specialties/design-brief/SKILL.md +0 -90
  415. package/skills/agent-workflow/specialties/design-deliver/SKILL.md +0 -121
  416. package/skills/agent-workflow/specialties/design-develop/SKILL.md +0 -115
  417. package/skills/agent-workflow/specialties/design-discover/SKILL.md +0 -103
  418. package/skills/agent-workflow/standards/README.md +0 -12
  419. package/skills/agent-workflow/standards/coding-standards/SKILL.md +0 -102
  420. package/skills/agent-workflow/standards/coding-standards/references/angular-typescript.md +0 -266
  421. package/skills/agent-workflow/standards/coding-standards/references/database-conventions.md +0 -170
  422. package/skills/agent-workflow/standards/coding-standards/references/fe-be-integration.md +0 -300
  423. package/skills/agent-workflow/standards/coding-standards/references/frontend-structure.md +0 -182
  424. package/skills/agent-workflow/standards/coding-standards/references/java-spring.md +0 -244
  425. package/skills/agent-workflow/standards/coding-standards/references/project-structure.md +0 -197
  426. package/skills/agent-workflow/standards/frontend-design/SKILL.md +0 -62
  427. package/skills/agent-workflow/standards/frontend-design/references/feedback-toasts-patterns.md +0 -249
  428. package/skills/agent-workflow/standards/frontend-design/references/form-patterns.md +0 -278
  429. package/skills/agent-workflow/standards/frontend-design/references/list-patterns.md +0 -256
  430. package/skills/agent-workflow/standards/frontend-design/references/modal-patterns.md +0 -220
  431. package/skills/agent-workflow/standards/frontend-design/references/navigation-patterns.md +0 -224
  432. package/skills/agent-workflow/standards/redaccion-simple/SKILL.md +0 -128
  433. package/skills/agent-workflow/standards/sql-rollback-generator/SKILL.md +0 -158
  434. package/skills/agent-workflow/standards/sql-rollback-generator/references/irreversible-checklist.md +0 -161
  435. package/skills/agent-workflow/standards/sql-rollback-generator/references/release-rollback.md +0 -133
  436. package/skills/agent-workflow/standards/sql-rollback-generator/references/rollback-patterns.md +0 -257
  437. package/skills/agent-workflow/standards/sql-script-organizer/SKILL.md +0 -243
  438. package/skills/agent-workflow/standards/sql-script-organizer/references/bundle-readme-template.md +0 -82
  439. package/skills/agent-workflow/standards/sql-script-organizer/references/categorization-rules.md +0 -122
  440. package/skills/agent-workflow/standards/sql-script-organizer/references/consolidation-cross-session.md +0 -125
  441. package/skills/agent-workflow/standards/sql-script-organizer/references/scripts-sql-format.md +0 -140
  442. package/skills/agent-workflow/standards/testing-strategy/SKILL.md +0 -113
  443. package/skills/agent-workflow/standards/testing-strategy/references/test-levels.md +0 -255
  444. package/skills/agent-workflow/workflows/README.md +0 -12
  445. package/skills/agent-workflow/workflows/analyze-workflow/SKILL.md +0 -94
  446. package/skills/agent-workflow/workflows/design-workflow/SKILL.md +0 -79
  447. package/skills/agent-workflow/workflows/dev-workflow/SKILL.md +0 -172
@@ -1,170 +0,0 @@
1
- # Convenciones de Base de Datos
2
-
3
- PostgreSQL. Todas las convenciones son snake_case en español.
4
-
5
- ## Esquemas
6
-
7
- Prefijo `esq_` + dominio: `esq_credito`, `esq_seguridad`, `esq_motor`, `esq_contabilidad`, `esq_liquidacion`, `esq_pago`, `esq_movimiento`, `esq_reportes`, `esq_audit`, `esq_sistema`, `esq_pos`, `esq_promocion`, `esq_planeamiento`, `esq_seguro`, `esq_reclamo`, `esq_request`, `esq_kashio`.
8
-
9
- Cada microservicio trabaja con 1-2 esquemas. Siempre referenciar el schema explícitamente en queries nativas y en `@Table`.
10
-
11
- ## Tablas
12
-
13
- - Prefijo `tb_` + entidad: `tb_credito`, `tb_cliente`, `tb_solicitud`
14
- - Relaciones: `tb_pago_cronograma`, `tb_usuario_sucursal`
15
- - Cabecera/detalle: sufijo `_cab` / `_det` → `tb_lote_cab`, `tb_lote_det`
16
-
17
- ## Columnas
18
-
19
- ### Primary Keys
20
- `id_` + entidad → `id_credito`, `id_cliente`, `id_solicitud`
21
-
22
- ### Foreign Keys
23
- Mismo nombre que la PK referenciada → `id_cliente` en `tb_credito` apunta a `tb_cliente.id_cliente`
24
-
25
- ### Fechas
26
- `fecha_` + acción → `fecha_registro`, `fecha_modificacion`, `fecha_solicitud`, `fecha_aprobacion`, `fecha_prestamo`
27
-
28
- ### Montos
29
- `monto_` + concepto → `monto_prestamo`, `monto_cuota`, `monto_pagar`, `monto_desembolsado`
30
-
31
- ### Estados
32
- - `estado` → integer genérico (1=activo, 0=inactivo)
33
- - `estado_proceso`, `estado_aprobacion` → integer, referencia a `tb_maestra_detalle.id_maestra_detalle`
34
-
35
- ### Flags
36
- `flag_` + concepto → `flag_extorno` (integer 0/1)
37
-
38
- ### Tipos de datos
39
- - `integer` → IDs, estados, flags
40
- - `numeric` → montos, tasas, porcentajes
41
- - `character varying` → textos
42
- - `timestamp without time zone` → fechas con hora
43
- - `date` → fechas sin hora
44
- - `boolean` → flags en tablas más nuevas
45
-
46
- ## Auditoría
47
-
48
- Campos presentes en casi todas las tablas (mapeados por la clase base `Auditoria` en Java):
49
-
50
- ```
51
- estado integer NOT NULL -- 1=activo, 0=inactivo
52
- usuario_registro varchar NOT NULL -- usuario que creó
53
- fecha_registro timestamp NOT NULL -- cuándo se creó
54
- usuario_modificacion varchar NULL -- usuario última modificación
55
- fecha_modificacion timestamp NULL -- cuándo se modificó
56
- ```
57
-
58
- ## Sequences
59
-
60
- Patrón: `seq_tb_[entidad]` en el mismo esquema → `esq_credito.seq_tb_credito`
61
-
62
- ## Índices
63
-
64
- - PK: `pk_tb_[entidad]`
65
- - Índices: `idx_tb_[entidad]_[columna]` o `idx_[entidad]_[columnas]`
66
-
67
- ## Funciones y Stored Procedures
68
-
69
- - Funciones: `fn_` + verbo + sustantivo → `fn_obtener_segmento`, `fn_calcular_cuota_oferta`
70
- - Procedures: `sp_` + verbo + sustantivo → `sp_genera_credito`, `sp_recalcula_credito`
71
- - Versionado: sufijo `_v2`, `_v3` para versiones nuevas (no se borran las anteriores)
72
-
73
- ## Patrón Maestra-Detalle
74
-
75
- `tb_maestra` + `tb_maestra_detalle` es el catálogo centralizado. Estados, tipos de documento, tipos de crédito, etc. se referencian vía `id_maestra_detalle`. El campo `codprog` identifica el grupo funcional dentro de la maestra.
76
-
77
- Al crear nuevos estados o tipos, siempre usar `tb_maestra_detalle` en lugar de hardcodear valores.
78
-
79
- ## Estilo de scripts SQL
80
-
81
- Reglas de escritura para todos los scripts SQL de la sesión. Aplicar desde el primer `.sql`.
82
-
83
- ### Transacciones
84
-
85
- ```sql
86
- BEGIN;
87
- -- cuerpo del script
88
- COMMIT;
89
- ```
90
-
91
- `ROLLBACK` explícito en bloques con manejo de errores:
92
-
93
- ```sql
94
- DO $$ BEGIN
95
- -- lógica
96
- EXCEPTION WHEN OTHERS THEN
97
- RAISE;
98
- END; $$;
99
- ```
100
-
101
- ### Idempotencia
102
-
103
- | Operación | Forma idempotente |
104
- |---|---|
105
- | Crear tabla | `CREATE TABLE IF NOT EXISTS` |
106
- | Eliminar objeto | `DROP ... IF EXISTS` |
107
- | Crear/actualizar función | `CREATE OR REPLACE FUNCTION` |
108
- | Insertar sin duplicar | `INSERT ... ON CONFLICT DO NOTHING` |
109
- | Actualizar o insertar | `INSERT ... ON CONFLICT DO UPDATE` |
110
-
111
- ### CTEs sobre subqueries anidados
112
-
113
- Usar CTE cuando hay ≥2 joins encadenados o cuando el mismo subquery se reutiliza:
114
-
115
- ```sql
116
- -- Evitar:
117
- SELECT * FROM tb_a WHERE id IN (SELECT id FROM tb_b WHERE id IN (SELECT id FROM tb_c));
118
-
119
- -- Preferir:
120
- WITH ids_c AS (SELECT id FROM tb_c),
121
- ids_b AS (SELECT b.id FROM tb_b b JOIN ids_c c ON b.id = c.id)
122
- SELECT * FROM tb_a a JOIN ids_b b ON a.id = b.id;
123
- ```
124
-
125
- ### Comentarios ligeros
126
-
127
- Header canónico de 4 líneas (Script / Sesion / Objeto / Alcance) entre dos líneas de iguales:
128
-
129
- ```sql
130
- -- ============================================================================
131
- -- Script: 003-ddl-tb-solicitud-credito.sql
132
- -- Sesion: s003
133
- -- Objeto: Crear tabla de solicitudes de crédito.
134
- -- Alcance: Esquema esq_credito; sin migración de datos.
135
- -- ============================================================================
136
- ```
137
-
138
- Detalles, separadores entre secciones del cuerpo y la regla "CTEs sobre `DO`/`LOOP`" en `sql-script-organizer/SKILL.md#header-canónico`. Autor / Fecha / Motor / "Defensa futura" no van adentro del header — si el caso lo amerita, van como nota libre en una línea suelta debajo. Solo comentar el **por qué** cuando no es obvio. Nunca documentar qué hace una línea si el nombre ya lo dice.
139
-
140
- ### Sin funciones utilitarias efímeras
141
-
142
- No crear `fn_*` o `sp_*` solo para reusar lógica dentro de un script. Usar CTE o repetir inline. Las `fn_`/`sp_` permanentes siguen la convención versionada (`_v2`, `_v3`).
143
-
144
- ### Esquema siempre explícito
145
-
146
- ```sql
147
- -- Correcto:
148
- SELECT * FROM esq_credito.tb_credito;
149
-
150
- -- Incorrecto:
151
- SELECT * FROM public.tb_credito;
152
- SELECT * FROM tb_credito; -- sin schema
153
- ```
154
-
155
- ### Portabilidad
156
-
157
- PostgreSQL es el motor primario. Si el destino es otro motor, indicarlo en `Objeto:` o como nota libre debajo del header (no como campo nuevo). Ver `sql-rollback-generator/references/rollback-patterns.md` para equivalencias Oracle/SQL Server.
158
-
159
- ### Seguridad en SQL dinámico
160
-
161
- Nunca concatenar strings en SQL dinámico. Usar `$1`/`$2` en queries parametrizados, o `%L` con `format()` en PL/pgSQL.
162
-
163
- ---
164
-
165
- Para organización de scripts en sesiones de desarrollo: ver skill `sql-script-organizer`.
166
- Para rollback de scripts: ver skill `sql-rollback-generator`.
167
-
168
- ## Scripts SQL
169
-
170
- Modificaciones a BD solo mediante scripts SQL versionados en el proyecto. Nunca ejecutar INSERT/UPDATE/DELETE/DDL directamente contra la BD.
@@ -1,300 +0,0 @@
1
- # FE-BE Integration — reglas transversales
2
-
3
- > Anchor: `agent-workflow:fe-be-integration`. Reglas canónicas para la integración Frontend ↔ Backend en proyectos agent-workflow a partir de qtc-dev v2.6 (session013) — actualizado en v2.7 (session015) para reflejar el modelo phased extendido Phase 0-5. Aplica a sesiones `flow=dev` con `## Type: feature|refactor` y a refactors guiados por el skill `agent-workflow:refactor`.
4
- >
5
- > Origen: session013-dev-flujo-feature-refactor-phased + session015-dev-aplicar-flujo-fases-extendido. Prior art: [JSON Merge Patch RFC 7396](https://datatracker.ietf.org/doc/html/rfc7396), [Walking Skeleton — Cockburn](https://codeclimate.com/blog/kickstart-your-next-project-with-a-walking-skeleton), [CQRS — Microsoft Learn](https://learn.microsoft.com/en-us/azure/architecture/patterns/cqrs).
6
-
7
- ## Resumen ejecutivo
8
-
9
- | Regla | Qué aplicar | Por qué |
10
- |---|---|---|
11
- | **R1 — Sparse DTO unificado** | Mismo DTO para create + edit, todos los campos nullable. `null` = "no tocar". | Reduce duplicación, hace explícita la intención del FE, simplifica el BE. |
12
- | **R2 — PATCH para edit** | `@PatchMapping` en BE, `http.patch()` en FE. POST queda solo para create. | Semántica HTTP correcta. PATCH = mutación parcial; PUT = reemplazo total. |
13
- | **R3 — FE envía solo cambios** | El FE construye el payload con campos modificados; el resto se omite o queda `null`. | Reduce payload, evita race conditions con campos no editados. |
14
- | **R4 — Sin fallbacks que oculten errores** | Prohibido `catchError(() => of([]))` en FE. Prohibido `try/catch` que retorne mock en BE durante migraciones. | Los errores deben fallar ruidosamente para detectarse en cert antes de prod. |
15
- | **R5 — Validación en BE con Bean Validation** | DTOs con `@NotNull`/`@Size`/etc. Errores → 400 estructurado con `field` y `message`. | El FE muestra el error sin lógica adicional. |
16
- | **R6 — DB stub-first** | Funciones/SP nuevas arrancan en Phase 0 devolviendo mock. Implementación real en Phase 1/2. | Separación de cableado vs lógica; permite testear el contrato antes de comprometer SQL. |
17
-
18
- ## R1 — Sparse DTO unificado
19
-
20
- ### Patrón
21
-
22
- Un único DTO `<Feature>SaveRequest` que sirve para POST (create) y PATCH (edit). Todos los campos son nullable. Convención:
23
-
24
- - En **POST** (create): el FE envía todos los campos requeridos; los opcionales pueden venir `null`.
25
- - En **PATCH** (edit): el FE envía solo los campos que cambian; el resto omitido o `null` significa "no tocar".
26
-
27
- ### Tradeoff aceptado
28
-
29
- **No se puede setear un campo a `null` intencionalmente.** Si el dominio requiere "limpiar a null" un campo (ej. fecha de baja → null), modelarlo como:
30
- - Endpoint dedicado (`POST /api/<feature>/{id}/limpiar-fecha-baja`) para semántica clara.
31
- - O bien, campo separado `clearFechaBaja: boolean` en el DTO.
32
-
33
- Esto es deliberado: optar por simplicidad sobre completitud (vs. JSON Patch RFC 6902 que sí permite operaciones explícitas pero añade complejidad).
34
-
35
- ### Ejemplo Java/Spring
36
-
37
- ```java
38
- public record CategoriaSaveRequest(
39
- @Size(max = 100) String nombre,
40
- @Size(max = 500) String descripcion,
41
- Boolean activo,
42
- Integer ordenVisual
43
- ) {}
44
-
45
- @RestController
46
- @RequestMapping("/api/categorias")
47
- @RequiredArgsConstructor
48
- public class CategoriasController {
49
-
50
- private final CategoriasService service;
51
-
52
- @PostMapping
53
- public ResponseEntity<CategoriaResponse> create(
54
- @Valid @RequestBody CategoriaSaveRequest req
55
- ) {
56
- return ResponseEntity.ok(service.create(req));
57
- }
58
-
59
- @PatchMapping("/{id}")
60
- public ResponseEntity<CategoriaResponse> edit(
61
- @PathVariable Long id,
62
- @Valid @RequestBody CategoriaSaveRequest req
63
- ) {
64
- return ResponseEntity.ok(service.patch(id, req));
65
- }
66
- }
67
- ```
68
-
69
- En el service, el método `patch(id, req)` ignora campos `null` del request:
70
-
71
- ```java
72
- @Transactional
73
- public CategoriaResponse patch(Long id, CategoriaSaveRequest req) {
74
- Categoria entity = repo.findById(id).orElseThrow(NotFoundException::new);
75
- if (req.nombre() != null) entity.setNombre(req.nombre());
76
- if (req.descripcion() != null) entity.setDescripcion(req.descripcion());
77
- if (req.activo() != null) entity.setActivo(req.activo());
78
- if (req.ordenVisual() != null) entity.setOrdenVisual(req.ordenVisual());
79
- return mapper.toResponse(repo.save(entity));
80
- }
81
- ```
82
-
83
- ### Ejemplo Angular/TypeScript
84
-
85
- ```typescript
86
- export interface CategoriaSaveRequest {
87
- nombre?: string | null;
88
- descripcion?: string | null;
89
- activo?: boolean | null;
90
- ordenVisual?: number | null;
91
- }
92
-
93
- @Injectable({ providedIn: 'root' })
94
- export class CategoriasApiService {
95
- private readonly base = `${environment.apiUrl}/api/categorias`;
96
-
97
- constructor(private http: HttpClient) {}
98
-
99
- create(req: CategoriaSaveRequest): Observable<CategoriaResponse> {
100
- return this.http.post<CategoriaResponse>(this.base, req);
101
- }
102
-
103
- edit(id: number, cambios: CategoriaSaveRequest): Observable<CategoriaResponse> {
104
- return this.http.patch<CategoriaResponse>(`${this.base}/${id}`, cambios);
105
- }
106
- }
107
- ```
108
-
109
- En el componente de edit, el FE construye el payload solo con cambios:
110
-
111
- ```typescript
112
- guardar(): void {
113
- const original = this.categoriaOriginal;
114
- const form = this.form.value;
115
- const cambios: CategoriaSaveRequest = {};
116
- if (form.nombre !== original.nombre) cambios.nombre = form.nombre;
117
- if (form.descripcion !== original.descripcion) cambios.descripcion = form.descripcion;
118
- if (form.activo !== original.activo) cambios.activo = form.activo;
119
- if (form.ordenVisual !== original.ordenVisual) cambios.ordenVisual = form.ordenVisual;
120
-
121
- if (Object.keys(cambios).length === 0) return; // nada cambió
122
-
123
- this.api.edit(original.id, cambios).subscribe({
124
- next: (res) => this.toast.success('Guardado'),
125
- error: (err) => this.errorHandler.handle(err) // R4: no silenciar
126
- });
127
- }
128
- ```
129
-
130
- ## R2 — PATCH para edit
131
-
132
- | Verbo | Cuándo | DTO | Idempotente |
133
- |---|---|---|---|
134
- | `POST /api/<feature>` | Crear nueva entidad | `<Feature>SaveRequest` (todos los required cargados) | No |
135
- | `GET /api/<feature>` y `GET /api/<feature>/{id}` | Listar / obtener | — | Sí |
136
- | `PATCH /api/<feature>/{id}` | Editar parcial | `<Feature>SaveRequest` (solo campos cambiados) | No (orden importa si dos PATCHes pisan el mismo campo) |
137
- | `DELETE /api/<feature>/{id}` | Eliminar | — | Sí |
138
-
139
- **No usar `PUT`** salvo casos excepcionales (replace total con todos los campos). El default es PATCH.
140
-
141
- ## R3 — FE envía solo cambios
142
-
143
- Reduce payload y evita pisar campos no editados. Implementación: FE compara `formValue` con `entidadOriginal` y arma diff. Ver ejemplo en R1.
144
-
145
- **Anti-pattern**: enviar todo el formulario incluyendo campos no editados — equivale a PUT y rompe la semántica de PATCH sparse.
146
-
147
- ## R4 — Sin fallbacks que oculten errores
148
-
149
- ### Prohibido en FE
150
-
151
- ```typescript
152
- // ❌ NO HACER: silencia errores HTTP
153
- this.api.list().pipe(
154
- catchError(() => of([])) // <-- usuario nunca ve el error
155
- ).subscribe(items => this.items = items);
156
- ```
157
-
158
- ```typescript
159
- // ✅ HACER: propagar al usuario via toast/handler
160
- this.api.list().subscribe({
161
- next: (items) => this.items = items,
162
- error: (err) => this.errorHandler.handle(err)
163
- });
164
- ```
165
-
166
- ### Prohibido en BE durante migraciones
167
-
168
- ```java
169
- // ❌ NO HACER: fallback al método legacy oculta bugs
170
- public List<Categoria> listar() {
171
- try {
172
- return nuevoListarConSparse();
173
- } catch (Exception e) {
174
- log.warn("Nuevo método falló, usando legacy", e);
175
- return legacyListar(); // <-- usuario nunca se entera
176
- }
177
- }
178
- ```
179
-
180
- ```java
181
- // ✅ HACER: dejar que el nuevo método falle ruidosamente
182
- public List<Categoria> listar() {
183
- return nuevoListarConSparse();
184
- }
185
- ```
186
-
187
- Si necesitás rollout gradual, usá feature flag explícita:
188
-
189
- ```java
190
- public List<Categoria> listar() {
191
- if (featureFlags.isEnabled("categorias-sparse-dto")) {
192
- return nuevoListarConSparse();
193
- }
194
- return legacyListar();
195
- }
196
- ```
197
-
198
- La feature flag es **explícita y observable** (vs. fallback silencioso).
199
-
200
- ## R5 — Validación en BE con Bean Validation
201
-
202
- > **Phase 3 marker (v2.7+)**: Bean Validation se materializa en **Phase 3 — Validaciones / Correcciones**, no en Phase 2 — Escritura. Phase 2 produce endpoints funcionales que mutan estado pero pueden devolver 500 ante input malformado. Phase 3 agrega `@NotNull`/`@Size`/etc. + handler global 400 estructurado. Trade-off aceptado: temporalmente el código de Phase 2 no es robusto contra input malformado; el usuario debe ser consciente de no testear edge cases hasta cerrar Phase 3.
203
-
204
- ```java
205
- public record CategoriaSaveRequest(
206
- @NotNull(message = "El nombre es obligatorio")
207
- @Size(min = 1, max = 100, message = "Entre 1 y 100 caracteres")
208
- String nombre,
209
-
210
- @Size(max = 500)
211
- String descripcion,
212
-
213
- @NotNull
214
- Boolean activo,
215
-
216
- @PositiveOrZero(message = "Debe ser ≥0")
217
- Integer ordenVisual
218
- ) {}
219
- ```
220
-
221
- Handler global devuelve estructura uniforme:
222
-
223
- ```java
224
- @RestControllerAdvice
225
- public class GlobalExceptionHandler {
226
-
227
- @ExceptionHandler(MethodArgumentNotValidException.class)
228
- public ResponseEntity<ValidationErrorResponse> onValidation(MethodArgumentNotValidException ex) {
229
- var fields = ex.getBindingResult().getFieldErrors().stream()
230
- .map(fe -> new FieldError(fe.getField(), fe.getDefaultMessage()))
231
- .toList();
232
- return ResponseEntity.badRequest().body(new ValidationErrorResponse(fields));
233
- }
234
- }
235
-
236
- public record ValidationErrorResponse(List<FieldError> errors) {}
237
- public record FieldError(String field, String message) {}
238
- ```
239
-
240
- El FE recibe 400 con estructura predecible y muestra los errores junto a cada campo.
241
-
242
- **Limitación con Sparse DTO**: `@NotNull` en el DTO unificado **NO se valida en PATCH**, porque PATCH permite enviar campos `null`. Soluciones:
243
-
244
- - **Validation groups**: `@NotNull(groups = OnCreate.class)` y aplicar grupo distinto en POST vs PATCH.
245
- - **DTO separado solo para POST**: `<Feature>CreateRequest extends <Feature>SaveRequest` con campos requeridos no-null. Aceptable cuando el escenario lo justifica.
246
-
247
- Documentar la decisión en DECISIONS.md de la sesión.
248
-
249
- ## R6 — DB stub-first
250
-
251
- > **Flujo phased v2.7+**: Phase 0 mock → Phase 1 query real → Phase 3 validaciones de input/integridad referencial. El stub en Phase 0 permite probar el cableado e2e + routing sin comprometer SQL real.
252
-
253
- En Phase 0 (contrato), funciones/SP nuevas devuelven mock:
254
-
255
- ```sql
256
- -- Phase 0: stub
257
- CREATE OR REPLACE FUNCTION fn_categorias_listar(
258
- p_filtro TEXT DEFAULT NULL,
259
- p_pagina INT DEFAULT 1,
260
- p_tamanio INT DEFAULT 20
261
- ) RETURNS JSONB AS $$
262
- BEGIN
263
- -- TODO Phase 1: implementar query real con filtro y paginación
264
- RETURN '[]'::jsonb;
265
- END;
266
- $$ LANGUAGE plpgsql STABLE;
267
- ```
268
-
269
- ```sql
270
- -- Phase 1: implementación real
271
- CREATE OR REPLACE FUNCTION fn_categorias_listar(
272
- p_filtro TEXT DEFAULT NULL,
273
- p_pagina INT DEFAULT 1,
274
- p_tamanio INT DEFAULT 20
275
- ) RETURNS JSONB AS $$
276
- WITH base AS (
277
- SELECT id, nombre, descripcion, activo, orden_visual
278
- FROM esq_admin.tb_categorias
279
- WHERE p_filtro IS NULL OR nombre ILIKE '%' || p_filtro || '%'
280
- )
281
- SELECT COALESCE(jsonb_agg(row_to_json(base)), '[]'::jsonb)
282
- FROM base
283
- ORDER BY orden_visual
284
- OFFSET (p_pagina - 1) * p_tamanio
285
- LIMIT p_tamanio;
286
- $$ LANGUAGE sql STABLE;
287
- ```
288
-
289
- Reglas de `agent-workflow:coding-standards/references/database-conventions.md` siguen aplicando (header de 4 líneas, idempotencia, schema explícito, BEGIN/COMMIT en scripts).
290
-
291
- ## Refs
292
-
293
- - `agent-workflow:coding-standards/references/java-spring.md` — convenciones Spring Boot (Constructor Injection, @Transactional, records).
294
- - `agent-workflow:coding-standards/references/angular-typescript.md` — convenciones Angular (HttpClient, ApiService, environments).
295
- - `agent-workflow:coding-standards/references/database-conventions.md` — convenciones BD agent-workflow (schemas, naming, scripts).
296
- - `agent-workflow:implement/SKILL.md` — phased mode (Phase 0/1/2 + gate M6 entre phases; S7 design-review antes de Phase 0 desde planning closure).
297
- - `agent-workflow:refactor/SKILL.md` — Strangler Fig para refactors completos.
298
- - `agent-workflow:prompts-catalog#M6,S7` — gates phased (S7 design-review antes de Phase 0; M6 entre phases). M9 retirado v2.8+.
299
- - [JSON Merge Patch RFC 7396](https://datatracker.ietf.org/doc/html/rfc7396) — spec del comportamiento PATCH sparse (agent-workflow usa **convención simple sparse** en lugar del Content-Type RFC 7396, pero la semántica conceptual es idéntica salvo el caso "set to null intencional").
300
- - [JSON Patch RFC 6902](https://datatracker.ietf.org/doc/html/rfc6902) — alternativa con array de operaciones; descartada por complejidad.
@@ -1,182 +0,0 @@
1
- # Estructura de Proyecto Frontend
2
-
3
- Convenciones de estructura para aplicaciones Angular de tu ecosistema.
4
-
5
- ## Versiones en uso
6
-
7
- - Angular 15 (pefectivo-front-angular)
8
- - Angular 16 (core-frontend-miscuotas-externo)
9
- - TypeScript 4.9 - 5.1
10
-
11
- ## Arquitectura `@data` / `@presentation`
12
-
13
- ```
14
- src/app/
15
- ├── @data/ ← Capa de datos
16
- │ ├── interfaces/ ← Interfaces TypeScript (espejean el backend)
17
- │ ├── services/ ← ApiService central + services de datos
18
- │ ├── guards/ ← Route guards
19
- │ ├── interceptors/ ← HTTP interceptors
20
- │ └── directive/ ← Directivas custom
21
- ├── @presentation/ ← Capa de presentación
22
- │ ├── components/ ← Componentes de UI organizados por feature
23
- │ ├── services/ ← Services de negocio/UI que consumen ApiService
24
- │ ├── shared/ ← Componentes y módulos compartidos
25
- │ ├── auth/ ← Módulo de autenticación (si aplica)
26
- │ ├── home/ ← Página principal
27
- │ └── pages/ ← Páginas de la aplicación
28
- ├── Utils/ ← Utilidades (armarPayload, requestFilter, etc.)
29
- ├── app.module.ts
30
- ├── app-routing.module.ts
31
- └── app.component.ts
32
- ```
33
-
34
- ## ApiService — Wrapper HTTP central
35
-
36
- Todas las llamadas HTTP pasan por `@data/services/api.service.ts`. No usar `HttpClient` directamente en otros services.
37
-
38
- ```typescript
39
- @Injectable({ providedIn: 'root' })
40
- export class ApiService {
41
- constructor(
42
- private toast: ToastService,
43
- private http: HttpClient,
44
- private storageService: StorageService
45
- ) {}
46
-
47
- get(path: string, params?: any): Observable<any> {
48
- return this.http.get(path, { params }).pipe(
49
- catchError((error: HttpErrorResponse) => {
50
- if (error.status === 401) {
51
- window.location.href = this.storage.url; // Redirección en 401
52
- }
53
- const errorMessage = error?.error?.status?.error?.messages?.[0] ?? 'Error inesperado';
54
- this.toast.showToast(errorMessage, 'danger');
55
- return this.formatErrors(error);
56
- })
57
- );
58
- }
59
-
60
- post(path: string, body: any): Observable<any> { /* mismo patrón */ }
61
- put(path: string, body: object = {}): Observable<any> { /* mismo patrón */ }
62
- patch(path: string, body: object = {}): Observable<any> { /* mismo patrón */ }
63
- delete(path: string): Observable<any> { /* mismo patrón */ }
64
- }
65
- ```
66
-
67
- ## Interfaces — Espejeo del backend
68
-
69
- En `@data/interfaces/` se definen interfaces que reflejan las estructuras del backend:
70
-
71
- ```typescript
72
- // generics.ts — Equivale a RespBase<T> del backend
73
- export interface IResponsePayload<T> {
74
- trace: Trace;
75
- status: Status;
76
- payload: T;
77
- }
78
-
79
- export interface IPayloadListG<T> {
80
- count: number;
81
- total: number;
82
- items: T[];
83
- }
84
-
85
- export interface ResponseDTO {
86
- identificador: number;
87
- cuerpo: string;
88
- mensaje: string;
89
- }
90
- ```
91
-
92
- Cada entidad de negocio tiene su propia interface: `solicitud.ts`, `credito.ts`, `cliente.ts`, `oferta.ts`, etc.
93
-
94
- ## Services de presentación
95
-
96
- En `@presentation/services/` se crean services que consumen `ApiService`:
97
-
98
- ```typescript
99
- @Injectable({ providedIn: 'root' })
100
- export class SolicitudService {
101
- constructor(private apiService: ApiService) {}
102
-
103
- generaSolicitud(solicitud: Solicitud): Observable<IResponsePayload<ResponseDTO>> {
104
- const request = armarPayload<any>(solicitud);
105
- const url = `${env.API_PRESTAMO}v1/solicitud`;
106
- return this.apiService.post(url, request);
107
- }
108
- }
109
- ```
110
-
111
- Patrón: URL desde environment + payload armado con `armarPayload()` de `Utils/`.
112
-
113
- ## Utilidades
114
-
115
- `Utils/utils.ts` provee funciones compartidas:
116
- - `armarPayload<T>(data)` — Envuelve datos en la estructura `ReqBase` con trace
117
- - `requestFilter(params)` — Convierte un objeto a query string
118
-
119
- ## Environments
120
-
121
- Tres archivos de configuración con URLs de API:
122
-
123
- - `environment.ts` — Base (vacío)
124
- - `environment.dev.ts` — Desarrollo/certificación
125
- - `environment.prod.ts` — Producción
126
-
127
- ```typescript
128
- export const environment = {
129
- production: false,
130
- API_PRESTAMO: 'https://api-cert.example.com/',
131
- API_SOLICITUD: 'https://api-solicitud-cert.example.com/',
132
- API_IDENTIDAD: '',
133
- API_MOTOR: '',
134
- };
135
- ```
136
-
137
- ## Dependencias comunes
138
-
139
- - **Angular Material** — Componentes UI (`@angular/material`, `@angular/cdk`)
140
- - **Bootstrap** — Grid y utilidades CSS
141
- - **ngx-toastr** — Notificaciones toast
142
- - **RxJS** — Programación reactiva
143
- - **moment** — Manejo de fechas
144
- - **STOMP/SockJS** — WebSockets para notificaciones en tiempo real
145
-
146
- ## Componentes compartidos (`shared/`)
147
-
148
- Convención: todo patrón que aparezca en **2+ vistas** vive en `@presentation/shared/` (o `@shared/` según convención del proyecto).
149
-
150
- **Heurística de extracción:** al empezar una vista nueva, escanear `shared/` antes de codear. Si un patrón recurrente aún no está en `shared/`, proponer **extracción explícita con un diff aislado** — no mezclar con el feature nuevo (dos commits separados).
151
-
152
- **Candidatos típicos:**
153
-
154
- - `readonly-input` — input + candado + fondo atenuado.
155
- - `section-card` — wrapper con section-title + icono + contenido.
156
- - `switch-aligned` — switch con label alineado verticalmente.
157
- - `combo-hint` — select + hint muted debajo.
158
- - `primary-button-spinner` — botón de acción con estado de loading.
159
-
160
- **Regla para el asistente:** al implementar un patrón del skill `frontend-design` en código, primero `grep`/`glob` por nombres similares en `shared/`; si existe, usar; si no, preguntar al usuario si vale extraerlo antes de inline-ar.
161
-
162
- ## Framework-first CSS
163
-
164
- Aplicar el principio ~90/10 documentado en `frontend-design` (§11): utilities del framework primero, CSS custom sólo cuando el framework no da la variante o la combinación se repite 5+ veces y amerita una clase semántica.
165
-
166
- En este monorepo: **SCSS + Bootstrap + Angular Material**. Regla práctica:
167
-
168
- - **Spacing / flex / grid / tipografía / colores semánticos** → utilities Bootstrap (`p-3`, `d-flex align-items-center gap-2`, `text-muted small`, `fw-bold`, `text-danger`).
169
- - **Componentes complejos** (autocomplete, datepicker, dialog) → Angular Material.
170
- - **SCSS custom** reservado para **tema**: colores del sistema (en secciones específicas), dimensiones custom de switch (3em×1.5em), tema de readonly (fondo atenuado con candado).
171
-
172
- **Anti-patrón:** reescribir `.my-card { border: 1px solid; padding: 1rem; box-shadow: ... }` cuando `border rounded-3 shadow-sm p-3` lo resuelve.
173
-
174
- **Criterio práctico:** antes de escribir una regla CSS custom, revisar utilities del framework. Si no existe la utility, evaluar si el tema aplicará a 3+ lugares antes de crear clase.
175
-
176
- ## Build
177
-
178
- - Producción: `npm run build:prod` → `ng build -c=production`
179
- - Desarrollo: `npm run build:dev` → `ng build -c=development`
180
- - Serve local: `npm run start:dev` → `ng serve -c=development`
181
- - Tests: `ng test --watch=false`
182
- - Estilos: SCSS