@aurorajs.dev/catalyst-cli 1.0.2 → 2.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 (2916) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/generate/index.js +33 -1
  3. package/dist/commands/sheets/diff.js +2 -4
  4. package/dist/commands/sheets/pull.d.ts +0 -1
  5. package/dist/commands/sheets/pull.js +2 -14
  6. package/dist/commands/sheets/push.d.ts +0 -1
  7. package/dist/commands/sheets/push.js +2 -14
  8. package/dist/commands/sheets/validate.js +3 -4
  9. package/dist/generator/domain/column-width.d.ts +2 -2
  10. package/dist/generator/domain/column-width.js +20 -15
  11. package/dist/generator/domain/config.d.ts +45 -6
  12. package/dist/generator/domain/config.js +152 -48
  13. package/dist/generator/domain/cross-bc-relations-discovery.d.ts +38 -0
  14. package/dist/generator/domain/cross-bc-relations-discovery.js +89 -0
  15. package/dist/generator/domain/cross-schema-resolver.d.ts +54 -1
  16. package/dist/generator/domain/cross-schema-resolver.js +52 -3
  17. package/dist/generator/domain/custom-field-value.d.ts +124 -0
  18. package/dist/generator/domain/custom-field-value.js +206 -0
  19. package/dist/generator/domain/declared-surface.d.ts +45 -0
  20. package/dist/generator/domain/declared-surface.js +106 -0
  21. package/dist/generator/domain/dialog-width.d.ts +46 -0
  22. package/dist/generator/domain/dialog-width.js +70 -0
  23. package/dist/generator/domain/display-field.d.ts +28 -3
  24. package/dist/generator/domain/display-field.js +53 -3
  25. package/dist/generator/domain/form-id.d.ts +3 -0
  26. package/dist/generator/domain/form-id.js +21 -0
  27. package/dist/generator/domain/i18n-embedded.d.ts +102 -0
  28. package/dist/generator/domain/i18n-embedded.js +112 -0
  29. package/dist/generator/domain/i18n-table.d.ts +112 -0
  30. package/dist/generator/domain/i18n-table.js +189 -0
  31. package/dist/generator/domain/model.d.ts +59 -17
  32. package/dist/generator/domain/model.js +1 -3
  33. package/dist/generator/domain/module-resolution.d.ts +17 -0
  34. package/dist/generator/domain/module-resolution.js +23 -0
  35. package/dist/generator/domain/operation-names.d.ts +17 -0
  36. package/dist/generator/domain/operation-names.js +27 -0
  37. package/dist/generator/domain/pivot.js +11 -1
  38. package/dist/generator/domain/property-filters.d.ts +168 -6
  39. package/dist/generator/domain/property-filters.js +257 -13
  40. package/dist/generator/domain/property-mappers.d.ts +69 -5
  41. package/dist/generator/domain/property-mappers.js +155 -61
  42. package/dist/generator/domain/property-pick-model.d.ts +12 -0
  43. package/dist/generator/domain/property-pick-model.js +47 -0
  44. package/dist/generator/domain/property-predicates.d.ts +57 -17
  45. package/dist/generator/domain/property-predicates.js +58 -18
  46. package/dist/generator/domain/property-validators.d.ts +20 -0
  47. package/dist/generator/domain/property-validators.js +71 -0
  48. package/dist/generator/domain/property-width.js +4 -2
  49. package/dist/generator/domain/readonly-payload-types.d.ts +72 -0
  50. package/dist/generator/domain/readonly-payload-types.js +96 -0
  51. package/dist/generator/domain/relation-search-eligibility.d.ts +15 -0
  52. package/dist/generator/domain/relation-search-eligibility.js +50 -0
  53. package/dist/generator/domain/relations-builder.d.ts +113 -0
  54. package/dist/generator/domain/relations-builder.js +422 -0
  55. package/dist/generator/domain/schema-loader.d.ts +41 -0
  56. package/dist/generator/domain/schema-loader.js +414 -4
  57. package/dist/generator/domain/widget-type.d.ts +1 -0
  58. package/dist/generator/domain/widget-type.js +1 -0
  59. package/dist/generator/engine/code-writer/code-writer.d.ts +334 -23
  60. package/dist/generator/engine/code-writer/code-writer.js +1052 -145
  61. package/dist/generator/engine/code-writer/drivers/import.driver.d.ts +22 -0
  62. package/dist/generator/engine/code-writer/drivers/import.driver.js +64 -0
  63. package/dist/generator/engine/code-writer/drivers/object.driver.d.ts +30 -0
  64. package/dist/generator/engine/code-writer/drivers/object.driver.js +58 -0
  65. package/dist/generator/engine/file-manager.d.ts +29 -2
  66. package/dist/generator/engine/file-manager.js +8 -2
  67. package/dist/generator/engine/file-writer.d.ts +3 -3
  68. package/dist/generator/engine/file-writer.js +58 -58
  69. package/dist/generator/engine/ignored-file.d.ts +6 -0
  70. package/dist/generator/engine/ignored-file.js +31 -0
  71. package/dist/generator/engine/lock-file.d.ts +36 -54
  72. package/dist/generator/engine/lock-file.js +74 -168
  73. package/dist/generator/engine/template-engine.js +9 -1
  74. package/dist/generator/handlers/back.handler.d.ts +72 -0
  75. package/dist/generator/handlers/back.handler.js +354 -59
  76. package/dist/generator/handlers/front.handler.d.ts +54 -0
  77. package/dist/generator/handlers/front.handler.js +247 -29
  78. package/dist/generator/handlers/handler-utils.js +2 -1
  79. package/dist/generator/packages/front-package-helpers.d.ts +8 -1
  80. package/dist/generator/packages/front-package-helpers.js +26 -5
  81. package/dist/generator/packages/installers/auditing.js +3 -3
  82. package/dist/generator/packages/installers/authorization-code.js +2 -5
  83. package/dist/generator/packages/installers/common.js +3 -3
  84. package/dist/generator/packages/installers/front/identity.js +8 -17
  85. package/dist/generator/packages/installers/front/queue-manager.d.ts +23 -0
  86. package/dist/generator/packages/installers/front/queue-manager.js +35 -0
  87. package/dist/generator/packages/installers/identity.js +4 -0
  88. package/dist/generator/packages/installers/mcp.js +1 -1
  89. package/dist/generator/packages/installers/message.js +1 -1
  90. package/dist/generator/packages/installers/ms-email.js +1 -1
  91. package/dist/generator/packages/installers/ms-entra-id.js +3 -3
  92. package/dist/generator/packages/installers/queue-manager.js +2 -3
  93. package/dist/generator/packages/installers/storage-account-azure.js +2 -2
  94. package/dist/generator/packages/installers/storage-account.js +4 -4
  95. package/dist/generator/packages/installers/support.js +1 -1
  96. package/dist/generator/packages/installers/tools.js +1 -1
  97. package/dist/generator/packages/installers/whatsapp.js +1 -1
  98. package/dist/generator/packages/package-helpers.js +10 -10
  99. package/dist/generator/utils/code-gen.d.ts +14 -3
  100. package/dist/generator/utils/code-gen.js +77 -27
  101. package/dist/generator/utils/mocker.js +19 -10
  102. package/dist/generator/utils/path-allowed.js +23 -2
  103. package/dist/generator/utils/relations-file.d.ts +127 -0
  104. package/dist/generator/utils/relations-file.js +310 -0
  105. package/dist/generator/utils/string-utils.d.ts +7 -0
  106. package/dist/generator/utils/string-utils.js +13 -0
  107. package/dist/origin/domain/actions.d.ts +13 -0
  108. package/dist/origin/domain/actions.js +13 -1
  109. package/dist/origin/domain/diff.js +9 -1
  110. package/dist/sheets/domain/auth.d.ts +15 -1
  111. package/dist/sheets/domain/auth.js +25 -2
  112. package/dist/sheets/domain/retry.d.ts +61 -0
  113. package/dist/sheets/domain/retry.js +76 -0
  114. package/dist/sheets/domain/types.d.ts +148 -2
  115. package/dist/sheets/domain/types.js +252 -12
  116. package/dist/sheets/sync/diff-engine.js +62 -5
  117. package/dist/sheets/sync/sheet-to-yaml.d.ts +21 -0
  118. package/dist/sheets/sync/sheet-to-yaml.js +238 -58
  119. package/dist/sheets/sync/yaml-to-sheet.d.ts +62 -0
  120. package/dist/sheets/sync/yaml-to-sheet.js +277 -30
  121. package/dist/sheets/transformers/property-transformer.d.ts +39 -0
  122. package/dist/sheets/transformers/property-transformer.js +121 -23
  123. package/dist/sheets/validators/schema-validator.js +54 -38
  124. package/dist/templates/ai/claude/.claude/settings.json +1 -4
  125. package/dist/templates/backend/application/.claude/skills/catalyst-backend-testing/SKILL.md +264 -234
  126. package/dist/templates/backend/application/.claude/skills/catalyst-cross-bounded-context-ports/SKILL.md +40 -10
  127. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/SKILL.md +80 -55
  128. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/field-schema-and-decorators.md +91 -62
  129. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/query-statement.md +206 -200
  130. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/SKILL.md +66 -64
  131. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/additional-apis-workflow.md +81 -22
  132. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/cli-first-workflow.md +17 -17
  133. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/create-handler.md +10 -8
  134. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/delete-handler.md +7 -7
  135. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/read-handler.md +27 -17
  136. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/update-handler.md +35 -20
  137. package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/SKILL.md +151 -27
  138. package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/references/minimum-templates.md +1 -1
  139. package/dist/templates/backend/application/.claude/skills/catalyst-project-structure/SKILL.md +210 -246
  140. package/dist/templates/backend/application/.claude/skills/catalyst-provider-composition/SKILL.md +263 -0
  141. package/dist/templates/backend/application/.claude/skills/catalyst-schema-migrations/SKILL.md +308 -0
  142. package/dist/templates/backend/application/.claude/skills/catalyst-tools/SKILL.md +266 -0
  143. package/dist/templates/backend/application/.oxlintrc.json +171 -0
  144. package/dist/templates/backend/application/CLAUDE.md +27 -1
  145. package/dist/templates/backend/application/README.md +6 -4
  146. package/dist/templates/backend/application/drizzle.config.ts +46 -0
  147. package/dist/templates/backend/application/nest-cli.json +7 -2
  148. package/dist/templates/backend/application/package.json +56 -73
  149. package/dist/templates/backend/application/scripts/db/check.ts +80 -0
  150. package/dist/templates/backend/application/scripts/db/generate.ts +55 -0
  151. package/dist/templates/backend/application/scripts/db/migrate.ts +101 -0
  152. package/dist/templates/backend/application/scripts/db/query.spec.ts +497 -0
  153. package/dist/templates/backend/application/scripts/db/query.ts +410 -0
  154. package/dist/templates/backend/application/scripts/iam/permissions-without-role.ts +178 -0
  155. package/dist/templates/backend/application/scripts/tz-pin.spec.ts +10 -0
  156. package/dist/templates/backend/application/src/@aurora/core.module.ts +52 -32
  157. package/dist/templates/backend/application/src/@aurora/decorators/auth.decorator.ts +0 -4
  158. package/dist/templates/backend/application/src/@aurora/decorators/index.ts +1 -1
  159. package/dist/templates/backend/application/src/@aurora/modules/authentication/authentication.module.spec.ts +7 -27
  160. package/dist/templates/backend/application/src/@aurora/modules/authentication/authentication.module.ts +17 -12
  161. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/anonymous-account.spec.ts +1 -1
  162. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/anonymous-account.ts +3 -1
  163. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/index.ts +1 -0
  164. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/token-issuance-disabled.error.ts +20 -0
  165. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/index.ts +1 -0
  166. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.port.ts +17 -0
  167. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.token.ts +1 -0
  168. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-loader.port.ts +55 -1
  169. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/authentication-strategy.port.ts +10 -1
  170. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/index.ts +12 -10
  171. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/jwt-signer.port.ts +10 -1
  172. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/resolve-authentication-mode.spec.ts +1 -1
  173. package/dist/templates/backend/application/src/@aurora/modules/authentication/index.ts +5 -4
  174. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/factory/authentication-strategy.factory.spec.ts +14 -27
  175. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/factory/authentication-strategy.factory.ts +9 -5
  176. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authentication-jwt.guard.spec.ts +16 -17
  177. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authentication-jwt.guard.ts +2 -2
  178. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authorization-permissions.guard.ts +1 -2
  179. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/index.ts +2 -2
  180. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/providers/hub-session-manager.provider.ts +2 -2
  181. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/providers/jwt-signer.provider.ts +2 -2
  182. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/aurora-hub/aurora-hub-consumer.adapter.ts +18 -5
  183. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/aurora-hub/index.ts +1 -0
  184. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.spec.ts +56 -0
  185. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.ts +28 -0
  186. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/cache-key.ts +9 -0
  187. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/index.ts +11 -0
  188. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/jwt-passport.strategy.ts +1 -1
  189. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/anonymous-account-loader.adapter.spec.ts +3 -3
  190. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/anonymous-account-loader.adapter.ts +2 -2
  191. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.spec.ts +222 -25
  192. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.ts +62 -12
  193. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider-cache-invalidation.spec.ts +84 -0
  194. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.spec.ts +158 -0
  195. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.ts +30 -5
  196. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/warnings/authentication-boot-warning.spec.ts +9 -8
  197. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/warnings/authentication-boot-warning.ts +1 -1
  198. package/dist/templates/backend/application/src/@aurora/modules/criteria/criteria-config.module.ts +15 -8
  199. package/dist/templates/backend/application/src/@aurora/modules/criteria/index.ts +1 -1
  200. package/dist/templates/backend/application/src/@aurora/modules/graphql/core.graphql +197 -252
  201. package/dist/templates/backend/application/src/@aurora/modules/graphql/graphql-config.module.ts +3 -3
  202. package/dist/templates/backend/application/src/@aurora/modules/graphql/guards/gql-throttler.guard.spec.ts +7 -6
  203. package/dist/templates/backend/application/src/@aurora/modules/graphql/index.ts +3 -3
  204. package/dist/templates/backend/application/src/@aurora/modules/graphql/schema-store.module.ts +1 -1
  205. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.spec.ts +175 -0
  206. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.ts +37 -0
  207. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler-registry.module.ts +24 -0
  208. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler.decorator.ts +21 -0
  209. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/index.ts +4 -0
  210. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.spec.ts +171 -0
  211. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.ts +46 -0
  212. package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.spec.ts +65 -0
  213. package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.ts +113 -0
  214. package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.spec.ts +50 -0
  215. package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.ts +33 -0
  216. package/dist/templates/backend/application/src/@aurora/modules/health/health.module.ts +20 -0
  217. package/dist/templates/backend/application/src/@aurora/modules/health/index.ts +3 -0
  218. package/dist/templates/backend/application/src/@aurora/modules/index.ts +10 -5
  219. package/dist/templates/backend/application/src/@aurora/modules/lang/core-get-fallback-lang-from-json.service.ts +5 -3
  220. package/dist/templates/backend/application/src/@aurora/modules/lang/core-get-langs-from-json.service.ts +2 -2
  221. package/dist/templates/backend/application/src/@aurora/modules/lang/core-langs.ts +1 -1
  222. package/dist/templates/backend/application/src/@aurora/modules/lang/index.ts +3 -3
  223. package/dist/templates/backend/application/src/@aurora/modules/mailer/index.ts +2 -1
  224. package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-client.module.spec.ts +41 -33
  225. package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-client.module.ts +4 -4
  226. package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-smtp-transport.service.ts +4 -2
  227. package/dist/templates/backend/application/src/@aurora/modules/pdf/index.ts +7 -0
  228. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-document.types.ts +48 -0
  229. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-isolation.spec.ts +17 -0
  230. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdf-renderer.service.ts +12 -0
  231. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/index.ts +5 -0
  232. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/pdfmake-renderer.service.spec.ts +58 -0
  233. package/dist/templates/backend/application/src/@aurora/modules/pdf/pdfmake/pdfmake-renderer.service.ts +123 -0
  234. package/dist/templates/backend/application/src/@aurora/modules/report-engine/aurora-report.token.ts +11 -0
  235. package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.spec.ts +154 -0
  236. package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.ts +112 -0
  237. package/dist/templates/backend/application/src/@aurora/modules/report-engine/index.ts +82 -0
  238. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.spec.ts +297 -0
  239. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.ts +180 -0
  240. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.types.ts +409 -0
  241. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.spec.ts +289 -0
  242. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.ts +98 -0
  243. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.preflight.spec.ts +241 -0
  244. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.spec.ts +95 -0
  245. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.ts +74 -0
  246. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.token.ts +17 -0
  247. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.spec.ts +119 -0
  248. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.ts +105 -0
  249. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-preflight.service.ts +152 -0
  250. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.spec.ts +451 -0
  251. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.ts +319 -0
  252. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.spec.ts +176 -0
  253. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.ts +47 -0
  254. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.spec.ts +104 -0
  255. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.ts +64 -0
  256. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.spec.ts +232 -0
  257. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.ts +132 -0
  258. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.spec.ts +157 -0
  259. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.ts +93 -0
  260. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.spec.ts +289 -0
  261. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.ts +259 -0
  262. package/dist/templates/backend/application/src/@aurora/modules/server-static/index.ts +1 -1
  263. package/dist/templates/backend/application/src/@aurora/services/index.ts +2 -3
  264. package/dist/templates/backend/application/src/@aurora/services/logger.service.ts +20 -6
  265. package/dist/templates/backend/application/src/@aurora/shared.module.ts +11 -10
  266. package/dist/templates/backend/application/src/@bridges/bridges.module.ts +33 -4
  267. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/index.ts +1 -0
  268. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/index.ts +2 -0
  269. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.port.ts +29 -0
  270. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.token.ts +3 -0
  271. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/index.ts +1 -0
  272. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.spec.ts +90 -0
  273. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.ts +36 -0
  274. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/index.ts +1 -0
  275. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/index.ts +2 -0
  276. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.port.ts +47 -0
  277. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.token.ts +1 -0
  278. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/index.ts +1 -0
  279. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.spec.ts +69 -0
  280. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.ts +37 -0
  281. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/index.ts +1 -0
  282. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/index.ts +2 -0
  283. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.port.ts +21 -0
  284. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.token.ts +1 -0
  285. package/dist/templates/backend/application/src/@config/bullmq/index.ts +1 -0
  286. package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.spec.ts +238 -0
  287. package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.ts +335 -0
  288. package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.spec.ts +92 -0
  289. package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.ts +158 -0
  290. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations-journal.config.ts +31 -0
  291. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.spec.ts +153 -0
  292. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.ts +91 -0
  293. package/dist/templates/backend/application/src/@config/drizzle/index.ts +3 -0
  294. package/dist/templates/backend/application/src/@config/index.ts +6 -1
  295. package/dist/templates/backend/application/src/@config/lang/index.ts +1 -0
  296. package/dist/templates/backend/application/src/@config/lang/lang.providers.ts +26 -0
  297. package/dist/templates/backend/application/src/@config/mailer/index.ts +1 -1
  298. package/dist/templates/backend/application/src/@config/mailer/mailer-transport.module.ts +5 -1
  299. package/dist/templates/backend/application/src/@config/pdf/index.ts +1 -0
  300. package/dist/templates/backend/application/src/@config/pdf/pdf-renderer.module.spec.ts +53 -0
  301. package/dist/templates/backend/application/src/@config/pdf/pdf-renderer.module.ts +17 -0
  302. package/dist/templates/backend/application/src/@config/storage-account/index.ts +1 -0
  303. package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.spec.ts +48 -0
  304. package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.ts +34 -0
  305. package/dist/templates/backend/application/src/app.controller.spec.ts +2 -2
  306. package/dist/templates/backend/application/src/app.controller.ts +1 -1
  307. package/dist/templates/backend/application/src/app.module.ts +39 -7
  308. package/dist/templates/backend/application/src/database/migrations/0001_create_example_demo_table.sql +9 -0
  309. package/dist/templates/backend/application/src/database/migrations/0002_backfill_custom_field_group_entity_types.sql +19 -0
  310. package/dist/templates/backend/application/src/database/migrations/0003_create_production_order_header_code_sequence.sql +22 -0
  311. package/dist/templates/backend/application/src/database/migrations/0004_remove_null_elements_from_array_columns.sql +37 -0
  312. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/migration.sql +503 -0
  313. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/snapshot.json +6287 -0
  314. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/migration.sql +482 -0
  315. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/snapshot.json +12646 -0
  316. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/migration.sql +38 -0
  317. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/snapshot.json +12853 -0
  318. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/migration.sql +17 -0
  319. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/snapshot.json +13090 -0
  320. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/migration.sql +1 -0
  321. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/snapshot.json +13103 -0
  322. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/migration.sql +4 -0
  323. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/snapshot.json +13123 -0
  324. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/migration.sql +17 -0
  325. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/snapshot.json +13357 -0
  326. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/migration.sql +7 -0
  327. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/snapshot.json +13443 -0
  328. package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/migration.sql +266 -0
  329. package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/snapshot.json +17183 -0
  330. package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/migration.sql +18 -0
  331. package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/snapshot.json +17183 -0
  332. package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/migration.sql +177 -0
  333. package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/snapshot.json +19569 -0
  334. package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/migration.sql +85 -0
  335. package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/snapshot.json +20741 -0
  336. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/migration.sql +1 -0
  337. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/snapshot.json +20754 -0
  338. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/migration.sql +1 -0
  339. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/snapshot.json +20767 -0
  340. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/migration.sql +22 -0
  341. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/snapshot.json +21066 -0
  342. package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/migration.sql +8 -0
  343. package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/snapshot.json +21089 -0
  344. package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/migration.sql +42 -0
  345. package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/snapshot.json +21661 -0
  346. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/migration.sql +5 -0
  347. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/snapshot.json +21661 -0
  348. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/migration.sql +2 -0
  349. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/snapshot.json +21695 -0
  350. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/migration.sql +13 -0
  351. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/snapshot.json +21866 -0
  352. package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/migration.sql +1 -0
  353. package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/snapshot.json +21701 -0
  354. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/migration.sql +12 -0
  355. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/snapshot.json +21706 -0
  356. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/migration.sql +470 -0
  357. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/snapshot.json +21767 -0
  358. package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/migration.sql +1 -0
  359. package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/snapshot.json +21391 -0
  360. package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/migration.sql +3 -0
  361. package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/snapshot.json +21394 -0
  362. package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/migration.sql +46 -0
  363. package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/snapshot.json +14170 -0
  364. package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/migration.sql +1 -0
  365. package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/snapshot.json +14172 -0
  366. package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/migration.sql +32 -0
  367. package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/snapshot.json +14204 -0
  368. package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/migration.sql +2 -0
  369. package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/snapshot.json +14204 -0
  370. package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/migration.sql +145 -0
  371. package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/snapshot.json +16167 -0
  372. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/migration.sql +42 -0
  373. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/snapshot.json +15944 -0
  374. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/migration.sql +144 -0
  375. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/snapshot.json +17910 -0
  376. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/migration.sql +1 -0
  377. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/snapshot.json +17921 -0
  378. package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/migration.sql +2 -0
  379. package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/snapshot.json +17921 -0
  380. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/migration.sql +37 -0
  381. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/snapshot.json +17921 -0
  382. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/migration.sql +19 -0
  383. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/snapshot.json +17921 -0
  384. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/migration.sql +58 -0
  385. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/snapshot.json +17921 -0
  386. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/migration.sql +19 -0
  387. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/snapshot.json +17921 -0
  388. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/migration.sql +37 -0
  389. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/snapshot.json +17921 -0
  390. package/dist/templates/backend/application/src/database/migrations/drizzle/20260914212920_add-biller-billing-cycle-master/migration.sql +79 -0
  391. package/dist/templates/backend/application/src/database/migrations/drizzle/20260914212920_add-biller-billing-cycle-master/snapshot.json +17983 -0
  392. package/dist/templates/backend/application/src/database/migrations/drizzle/20260915072010_add-biller-charge-billed-by-billing-run/migration.sql +11 -0
  393. package/dist/templates/backend/application/src/database/migrations/drizzle/20260915072010_add-biller-charge-billed-by-billing-run/snapshot.json +18017 -0
  394. package/dist/templates/backend/application/src/database/migrations/drizzle/20260915113209_add-iam-account-has-add-child-tenants/migration.sql +1 -0
  395. package/dist/templates/backend/application/src/database/migrations/drizzle/20260915113209_add-iam-account-has-add-child-tenants/snapshot.json +17760 -0
  396. package/dist/templates/backend/application/src/database/migrations/drizzle/20260916230702_date-columns-to-real-date/migration.sql +22 -0
  397. package/dist/templates/backend/application/src/database/migrations/drizzle/20260916230702_date-columns-to-real-date/snapshot.json +18031 -0
  398. package/dist/templates/backend/application/src/database/migrations/drizzle/20260918120918_drop-biller-tables/migration.sql +14 -0
  399. package/dist/templates/backend/application/src/database/migrations/drizzle/20260918120918_drop-biller-tables/snapshot.json +14217 -0
  400. package/dist/templates/backend/application/src/database/migrations/drizzle/20260918121214_purge-biller-rows/migration.sql +28 -0
  401. package/dist/templates/backend/application/src/database/migrations/drizzle/20260918121214_purge-biller-rows/snapshot.json +14217 -0
  402. package/dist/templates/backend/application/src/database/migrations/drizzle/README.md +199 -0
  403. package/dist/templates/backend/application/src/database/procedures/calculate_order_total/1.sql +18 -0
  404. package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_header_code/1.sql +38 -0
  405. package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_position_code/1.sql +33 -0
  406. package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_header_code/1.sql +8 -0
  407. package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_position_code/1.sql +8 -0
  408. package/dist/templates/backend/application/src/main.ts +27 -19
  409. package/dist/templates/backend/application/src/repl.ts +2 -2
  410. package/dist/templates/backend/application/test/app.e2e-spec.ts +2 -1
  411. package/dist/templates/backend/application/test/vitest-setup.ts +13 -0
  412. package/dist/templates/backend/application/tsconfig.build.json +3 -1
  413. package/dist/templates/backend/application/tsconfig.json +8 -17
  414. package/dist/templates/backend/application/vitest.config.e2e.ts +24 -0
  415. package/dist/templates/backend/application/vitest.config.ts +18 -0
  416. package/dist/templates/backend/env/.env +8 -0
  417. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/authorization-code.module.ts +3 -3
  418. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.spec.ts +24 -38
  419. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.ts +2 -3
  420. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/index.ts +1 -0
  421. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/index.ts +2 -0
  422. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/pkce-helpers.spec.ts +2 -4
  423. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/pkce-verifier-store.service.spec.ts +1 -1
  424. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-create-app.controller.ts +31 -0
  425. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-delete-app-by-id.controller.ts +32 -0
  426. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app-by-id.controller.ts +31 -0
  427. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app.controller.ts +33 -0
  428. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-get-apps.controller.ts +41 -0
  429. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-my-preferences-app.controller.ts +31 -0
  430. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-paginate-apps.controller.ts +32 -0
  431. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-save-my-launchpad-layout-app.controller.ts +41 -0
  432. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-toggle-favorite-app.controller.ts +34 -0
  433. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-update-app-by-id.controller.ts +32 -0
  434. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-app.dto.ts +115 -0
  435. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-create-app.dto.ts +85 -0
  436. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-app-by-id.dto.ts +78 -0
  437. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-apps.dto.ts +78 -0
  438. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/index.ts +8 -0
  439. package/dist/templates/backend/packages/hub/src/@api/hub/app/graphql/hub-app.graphql +256 -0
  440. package/dist/templates/backend/packages/hub/src/@api/hub/app/index.ts +87 -0
  441. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-create-app.resolver.ts +27 -0
  442. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-delete-app-by-id.resolver.ts +28 -0
  443. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app-by-id.resolver.ts +26 -0
  444. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app.resolver.ts +26 -0
  445. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-get-apps.resolver.ts +33 -0
  446. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-my-preferences-app.resolver.ts +27 -0
  447. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-paginate-apps.resolver.ts +26 -0
  448. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-save-my-launchpad-layout-app.resolver.ts +34 -0
  449. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-toggle-favorite-app.resolver.ts +30 -0
  450. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-update-app-by-id.resolver.ts +28 -0
  451. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-app-account.controller.ts +29 -0
  452. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-apps-accounts.controller.ts +30 -0
  453. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-app-account-by-id.controller.ts +34 -0
  454. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-apps-accounts.controller.ts +35 -0
  455. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account-by-id.controller.ts +35 -0
  456. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account.controller.ts +36 -0
  457. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-get-apps-accounts.controller.ts +36 -0
  458. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-paginate-apps-accounts.controller.ts +32 -0
  459. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-update-app-account-by-id.controller.ts +33 -0
  460. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-app-account.dto.ts +59 -0
  461. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-create-app-account.dto.ts +44 -0
  462. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-app-account-by-id.dto.ts +44 -0
  463. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-apps-accounts.dto.ts +44 -0
  464. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/index.ts +8 -0
  465. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/graphql/hub-app-account.graphql +82 -0
  466. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/index.ts +81 -0
  467. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-app-account.resolver.ts +25 -0
  468. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-apps-accounts.resolver.ts +25 -0
  469. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-app-account-by-id.resolver.ts +27 -0
  470. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-apps-accounts.resolver.ts +26 -0
  471. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account-by-id.resolver.ts +27 -0
  472. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account.resolver.ts +26 -0
  473. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-get-apps-accounts.resolver.ts +26 -0
  474. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-paginate-apps-accounts.resolver.ts +26 -0
  475. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-update-app-account-by-id.resolver.ts +26 -0
  476. package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.spec.ts +224 -0
  477. package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.ts +131 -0
  478. package/dist/templates/backend/packages/hub/src/@api/hub/hub.module.ts +34 -0
  479. package/dist/templates/backend/packages/hub/src/@api/hub/hub.seeder.ts +33 -0
  480. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.spec.ts +521 -0
  481. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.ts +234 -0
  482. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.service.ts +19 -0
  483. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.spec.ts +419 -0
  484. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.ts +164 -0
  485. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.service.ts +24 -0
  486. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.spec.ts +132 -0
  487. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.ts +35 -0
  488. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.service.ts +22 -0
  489. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.spec.ts +172 -0
  490. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.ts +43 -0
  491. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.service.ts +27 -0
  492. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.spec.ts +331 -0
  493. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.ts +84 -0
  494. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.service.ts +27 -0
  495. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.spec.ts +146 -0
  496. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.ts +38 -0
  497. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.spec.ts +179 -0
  498. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.ts +38 -0
  499. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.service.ts +27 -0
  500. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/save-my-launchpad-layout/hub-save-my-launchpad-layout-app.handler.spec.ts +354 -0
  501. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/save-my-launchpad-layout/hub-save-my-launchpad-layout-app.handler.ts +161 -0
  502. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.spec.ts +192 -0
  503. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.ts +60 -0
  504. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.spec.ts +274 -0
  505. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.ts +82 -0
  506. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.service.ts +25 -0
  507. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app-permission.ts +18 -0
  508. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app.field-schema.ts +101 -0
  509. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/index.ts +2 -0
  510. package/dist/templates/backend/packages/hub/src/@app/hub/app/index.ts +79 -0
  511. package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.repository.ts +43 -0
  512. package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.schema.ts +40 -0
  513. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-assert-no-accounts-reference.function.spec.ts +230 -0
  514. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-assert-no-accounts-reference.function.ts +106 -0
  515. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads-vs-relation-order.spec.ts +226 -0
  516. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.spec.ts +73 -0
  517. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.ts +27 -0
  518. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.spec.ts +41 -0
  519. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.ts +49 -0
  520. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/index.ts +3 -0
  521. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/index.ts +1 -0
  522. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.handler.ts +28 -0
  523. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.service.ts +25 -0
  524. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.handler.ts +26 -0
  525. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.service.ts +19 -0
  526. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.handler.ts +41 -0
  527. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.service.ts +37 -0
  528. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.handler.ts +34 -0
  529. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.service.ts +33 -0
  530. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.handler.ts +32 -0
  531. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.service.ts +31 -0
  532. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.handler.ts +29 -0
  533. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.service.ts +27 -0
  534. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.handler.ts +23 -0
  535. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.service.ts +27 -0
  536. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.handler.ts +23 -0
  537. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.service.ts +27 -0
  538. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.handler.ts +64 -0
  539. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.service.ts +33 -0
  540. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/hub-app-account.field-schema.ts +53 -0
  541. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/index.ts +1 -0
  542. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/index.ts +82 -0
  543. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.repository.ts +40 -0
  544. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.schema.ts +17 -0
  545. package/dist/templates/backend/packages/hub/src/@app/hub/hub.relations.ts +23 -0
  546. package/dist/templates/backend/packages/hub/src/@app/hub/hub.seed.ts +117 -0
  547. package/dist/templates/backend/packages/hub/src/@app/hub/index.ts +14 -0
  548. package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-bounded-context-writer.bridge.ts +8 -0
  549. package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-permission-writer.bridge.ts +8 -0
  550. package/dist/templates/backend/packages/hub/src/@bridges/providers/o-auth-application-provisioner.bridge.ts +8 -0
  551. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-account-composite-key.e2e-spec.ts +282 -0
  552. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-deprovisioning.e2e-spec.ts +472 -0
  553. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-provisioning.e2e-spec.ts +345 -0
  554. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-per-app-access.e2e-spec.ts +655 -0
  555. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-password-me-account.controller.ts +4 -5
  556. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-unique-email-account.controller.ts +2 -2
  557. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-unique-username-account.controller.ts +2 -2
  558. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-count-account.controller.ts +32 -0
  559. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-create-account.controller.ts +6 -6
  560. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-account-by-id.controller.ts +4 -5
  561. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-accounts.controller.ts +6 -7
  562. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account-by-id.controller.ts +4 -5
  563. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account.controller.ts +6 -7
  564. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-get-accounts.controller.ts +6 -7
  565. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-me-account.controller.ts +6 -6
  566. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-accounts.controller.ts +5 -6
  567. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-with-tenant-constraint-accounts.controller.ts +4 -5
  568. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-account-by-id.controller.ts +13 -8
  569. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-accounts.controller.ts +4 -5
  570. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-me-account.controller.ts +4 -5
  571. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-account.dto.ts +20 -11
  572. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-create-account.dto.ts +9 -29
  573. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-account-by-id.dto.ts +9 -29
  574. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-accounts.dto.ts +9 -21
  575. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/index.ts +4 -4
  576. package/dist/templates/backend/packages/iam/src/@api/iam/account/graphql/iam-account.graphql +47 -44
  577. package/dist/templates/backend/packages/iam/src/@api/iam/account/index.ts +40 -34
  578. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-password-me-account.resolver.ts +4 -5
  579. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-unique-email-account.resolver.ts +2 -2
  580. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-unique-username-account.resolver.ts +2 -2
  581. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-count-account.resolver.ts +25 -0
  582. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-create-account.resolver.ts +5 -5
  583. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-account-by-id.resolver.ts +4 -5
  584. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-accounts.resolver.ts +4 -5
  585. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account-by-id.resolver.ts +4 -5
  586. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account.resolver.ts +4 -5
  587. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-get-accounts.resolver.ts +4 -5
  588. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-me-account.resolver.ts +5 -5
  589. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-accounts.resolver.ts +4 -5
  590. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-with-tenant-constraint-accounts.resolver.ts +4 -5
  591. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-account-by-id.resolver.ts +12 -7
  592. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-accounts.resolver.ts +4 -5
  593. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-me-account.resolver.ts +4 -5
  594. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-create-bounded-context.controller.ts +3 -3
  595. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-create-bounded-contexts.controller.ts +3 -3
  596. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-context-by-id.controller.ts +4 -5
  597. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-contexts.controller.ts +6 -7
  598. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context-by-id.controller.ts +4 -5
  599. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context.controller.ts +6 -7
  600. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-get-bounded-contexts.controller.ts +6 -7
  601. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-paginate-bounded-contexts.controller.ts +5 -6
  602. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-context-by-id.controller.ts +4 -5
  603. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-contexts.controller.ts +4 -5
  604. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/dto/iam-bounded-context.dto.ts +3 -2
  605. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/dto/index.ts +4 -4
  606. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/graphql/iam-bounded-context.graphql +24 -12
  607. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/index.ts +24 -24
  608. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-create-bounded-context.resolver.ts +3 -3
  609. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-create-bounded-contexts.resolver.ts +3 -3
  610. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-context-by-id.resolver.ts +4 -5
  611. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-contexts.resolver.ts +4 -5
  612. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context-by-id.resolver.ts +4 -5
  613. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context.resolver.ts +4 -5
  614. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-get-bounded-contexts.resolver.ts +4 -5
  615. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-paginate-bounded-contexts.resolver.ts +4 -5
  616. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-context-by-id.resolver.ts +4 -5
  617. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-contexts.resolver.ts +4 -5
  618. package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.spec.ts +46 -22
  619. package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.ts +36 -23
  620. package/dist/templates/backend/packages/iam/src/@api/iam/iam.module.ts +46 -20
  621. package/dist/templates/backend/packages/iam/src/@api/iam/iam.seeder.ts +7 -7
  622. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-create-permission.controller.ts +3 -3
  623. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-create-permissions.controller.ts +3 -3
  624. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permission-by-id.controller.ts +4 -5
  625. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permissions.controller.ts +6 -7
  626. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission-by-id.controller.ts +4 -5
  627. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission.controller.ts +6 -7
  628. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-get-permissions.controller.ts +6 -7
  629. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-paginate-permissions.controller.ts +5 -6
  630. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permission-by-id.controller.ts +4 -5
  631. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permissions.controller.ts +4 -5
  632. package/dist/templates/backend/packages/iam/src/@api/iam/permission/dto/iam-permission.dto.ts +5 -4
  633. package/dist/templates/backend/packages/iam/src/@api/iam/permission/dto/index.ts +4 -4
  634. package/dist/templates/backend/packages/iam/src/@api/iam/permission/graphql/iam-permission.graphql +18 -15
  635. package/dist/templates/backend/packages/iam/src/@api/iam/permission/index.ts +24 -24
  636. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-create-permission.resolver.ts +3 -3
  637. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-create-permissions.resolver.ts +3 -3
  638. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permission-by-id.resolver.ts +4 -5
  639. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permissions.resolver.ts +4 -5
  640. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission-by-id.resolver.ts +4 -5
  641. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission.resolver.ts +4 -5
  642. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-get-permissions.resolver.ts +4 -5
  643. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-paginate-permissions.resolver.ts +4 -5
  644. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permission-by-id.resolver.ts +4 -5
  645. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permissions.resolver.ts +4 -5
  646. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-create-permission-role.controller.ts +3 -3
  647. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-create-permissions-roles.controller.ts +3 -3
  648. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permission-role-by-id.controller.ts +4 -5
  649. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permissions-roles.controller.ts +6 -7
  650. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role-by-id.controller.ts +4 -5
  651. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role.controller.ts +6 -7
  652. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-get-permissions-roles.controller.ts +6 -7
  653. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-paginate-permissions-roles.controller.ts +5 -6
  654. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permission-role-by-id.controller.ts +4 -5
  655. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permissions-roles.controller.ts +4 -5
  656. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/dto/iam-permission-role.dto.ts +5 -4
  657. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/dto/index.ts +4 -4
  658. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/graphql/iam-permission-role.graphql +21 -9
  659. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/index.ts +24 -24
  660. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-create-permission-role.resolver.ts +3 -3
  661. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-create-permissions-roles.resolver.ts +3 -3
  662. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permission-role-by-id.resolver.ts +4 -5
  663. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permissions-roles.resolver.ts +4 -5
  664. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role-by-id.resolver.ts +4 -5
  665. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role.resolver.ts +4 -5
  666. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-get-permissions-roles.resolver.ts +4 -5
  667. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-paginate-permissions-roles.resolver.ts +4 -5
  668. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permission-role-by-id.resolver.ts +4 -5
  669. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permissions-roles.resolver.ts +4 -5
  670. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-create-role.controller.ts +3 -3
  671. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-create-roles.controller.ts +3 -3
  672. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-role-by-id.controller.ts +4 -5
  673. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-roles.controller.ts +6 -7
  674. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role-by-id.controller.ts +4 -5
  675. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role.controller.ts +6 -7
  676. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-get-roles.controller.ts +6 -7
  677. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-inherit-permissions-role-role.controller.ts +4 -5
  678. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-paginate-roles.controller.ts +5 -6
  679. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-role-by-id.controller.ts +4 -5
  680. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-roles.controller.ts +4 -5
  681. package/dist/templates/backend/packages/iam/src/@api/iam/role/dto/iam-role.dto.ts +5 -4
  682. package/dist/templates/backend/packages/iam/src/@api/iam/role/dto/index.ts +4 -4
  683. package/dist/templates/backend/packages/iam/src/@api/iam/role/graphql/iam-role.graphql +19 -19
  684. package/dist/templates/backend/packages/iam/src/@api/iam/role/index.ts +26 -26
  685. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-create-role.resolver.ts +3 -3
  686. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-create-roles.resolver.ts +3 -3
  687. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-role-by-id.resolver.ts +4 -5
  688. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-roles.resolver.ts +4 -5
  689. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role-by-id.resolver.ts +4 -5
  690. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role.resolver.ts +4 -5
  691. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-get-roles.resolver.ts +4 -5
  692. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-inherit-permissions-role-role.resolver.ts +4 -5
  693. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-paginate-roles.resolver.ts +4 -5
  694. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-role-by-id.resolver.ts +4 -5
  695. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-roles.resolver.ts +4 -5
  696. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-create-role-account.controller.ts +3 -3
  697. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-create-roles-accounts.controller.ts +3 -3
  698. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-role-account-by-id.controller.ts +4 -5
  699. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-roles-accounts.controller.ts +6 -7
  700. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account-by-id.controller.ts +4 -5
  701. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account.controller.ts +6 -7
  702. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-get-roles-accounts.controller.ts +6 -7
  703. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-paginate-roles-accounts.controller.ts +5 -6
  704. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-role-account-by-id.controller.ts +4 -5
  705. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-roles-accounts.controller.ts +4 -5
  706. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/dto/iam-role-account.dto.ts +5 -4
  707. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/dto/index.ts +4 -4
  708. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/graphql/iam-role-account.graphql +19 -9
  709. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/index.ts +24 -24
  710. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-create-role-account.resolver.ts +3 -3
  711. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-create-roles-accounts.resolver.ts +3 -3
  712. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-role-account-by-id.resolver.ts +4 -5
  713. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-roles-accounts.resolver.ts +4 -5
  714. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account-by-id.resolver.ts +4 -5
  715. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account.resolver.ts +4 -5
  716. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-get-roles-accounts.resolver.ts +4 -5
  717. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-paginate-roles-accounts.resolver.ts +4 -5
  718. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-role-account-by-id.resolver.ts +4 -5
  719. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-roles-accounts.resolver.ts +4 -5
  720. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-create-tag.controller.ts +3 -3
  721. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-delete-tag-by-id.controller.ts +4 -5
  722. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag-by-id.controller.ts +4 -5
  723. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag.controller.ts +6 -7
  724. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-get-tags.controller.ts +6 -7
  725. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-paginate-tags.controller.ts +5 -6
  726. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-update-tag-by-id.controller.ts +4 -5
  727. package/dist/templates/backend/packages/iam/src/@api/iam/tag/dto/index.ts +4 -4
  728. package/dist/templates/backend/packages/iam/src/@api/iam/tag/graphql/iam-tag.graphql +9 -9
  729. package/dist/templates/backend/packages/iam/src/@api/iam/tag/index.ts +18 -18
  730. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-create-tag.resolver.ts +3 -3
  731. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-delete-tag-by-id.resolver.ts +4 -5
  732. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag-by-id.resolver.ts +4 -5
  733. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag.resolver.ts +4 -5
  734. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-get-tags.resolver.ts +4 -5
  735. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-paginate-tags.resolver.ts +4 -5
  736. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-update-tag-by-id.resolver.ts +4 -5
  737. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-create-tenant.controller.ts +7 -5
  738. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-create-tenants.controller.ts +7 -5
  739. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenant-by-id.controller.ts +4 -5
  740. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenants.controller.ts +6 -7
  741. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant-by-id.controller.ts +4 -5
  742. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant.controller.ts +6 -7
  743. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-tenants.controller.ts +6 -7
  744. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-with-tenant-constraint-tenants.controller.ts +4 -5
  745. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-tenants.controller.ts +5 -6
  746. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-with-tenant-constraint-tenants.controller.ts +4 -5
  747. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenant-by-id.controller.ts +13 -6
  748. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenants.controller.ts +13 -6
  749. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/dto/iam-tenant.dto.ts +4 -3
  750. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/dto/index.ts +4 -4
  751. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/graphql/iam-tenant.graphql +24 -18
  752. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/index.ts +28 -28
  753. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-create-tenant.resolver.ts +6 -5
  754. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-create-tenants.resolver.ts +6 -5
  755. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenant-by-id.resolver.ts +4 -5
  756. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenants.resolver.ts +4 -5
  757. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant-by-id.resolver.ts +4 -5
  758. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant.resolver.ts +4 -5
  759. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-tenants.resolver.ts +4 -5
  760. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-with-tenant-constraint-tenants.resolver.ts +4 -5
  761. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-tenants.resolver.ts +4 -5
  762. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-with-tenant-constraint-tenants.resolver.ts +4 -5
  763. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenant-by-id.resolver.ts +12 -6
  764. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenants.resolver.ts +12 -6
  765. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-create-tenant-account.controller.ts +7 -5
  766. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-create-tenants-accounts.controller.ts +7 -5
  767. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenant-account-by-id.controller.ts +4 -5
  768. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenants-accounts.controller.ts +6 -7
  769. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account-by-id.controller.ts +4 -5
  770. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account.controller.ts +6 -7
  771. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-get-tenants-accounts.controller.ts +6 -7
  772. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-paginate-tenants-accounts.controller.ts +5 -6
  773. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenant-account-by-id.controller.ts +13 -6
  774. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenants-accounts.controller.ts +13 -6
  775. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/dto/iam-tenant-account.dto.ts +5 -4
  776. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/dto/index.ts +4 -4
  777. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/graphql/iam-tenant-account.graphql +21 -9
  778. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/index.ts +24 -24
  779. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-create-tenant-account.resolver.ts +6 -5
  780. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-create-tenants-accounts.resolver.ts +6 -5
  781. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenant-account-by-id.resolver.ts +4 -5
  782. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenants-accounts.resolver.ts +4 -5
  783. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account-by-id.resolver.ts +4 -5
  784. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account.resolver.ts +4 -5
  785. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-get-tenants-accounts.resolver.ts +4 -5
  786. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-paginate-tenants-accounts.resolver.ts +4 -5
  787. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenant-account-by-id.resolver.ts +12 -6
  788. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenants-accounts.resolver.ts +12 -6
  789. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-count-user.controller.ts +32 -0
  790. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-user-by-id.controller.ts +4 -5
  791. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-users.controller.ts +6 -7
  792. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user-by-id.controller.ts +4 -5
  793. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user.controller.ts +6 -7
  794. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-forgot-password-user.controller.ts +4 -5
  795. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-get-users.controller.ts +6 -7
  796. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-paginate-users.controller.ts +5 -6
  797. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-reset-password-user.controller.ts +4 -5
  798. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-user-by-id.controller.ts +4 -5
  799. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-users.controller.ts +4 -5
  800. package/dist/templates/backend/packages/iam/src/@api/iam/user/dto/iam-user.dto.ts +3 -2
  801. package/dist/templates/backend/packages/iam/src/@api/iam/user/dto/index.ts +4 -4
  802. package/dist/templates/backend/packages/iam/src/@api/iam/user/graphql/iam-user.graphql +20 -18
  803. package/dist/templates/backend/packages/iam/src/@api/iam/user/index.ts +30 -24
  804. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-count-user.resolver.ts +25 -0
  805. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-user-by-id.resolver.ts +4 -5
  806. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-users.resolver.ts +4 -5
  807. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user-by-id.resolver.ts +4 -5
  808. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user.resolver.ts +4 -5
  809. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-forgot-password-user.resolver.ts +4 -5
  810. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-get-users.resolver.ts +4 -5
  811. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-paginate-users.resolver.ts +4 -5
  812. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-reset-password-user.resolver.ts +4 -5
  813. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-user-by-id.resolver.ts +4 -5
  814. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-users.resolver.ts +4 -5
  815. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-password-me/iam-check-password-me-account.handler.ts +4 -6
  816. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.spec.ts +75 -0
  817. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.ts +5 -2
  818. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.spec.ts +75 -0
  819. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.ts +5 -2
  820. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.handler.ts +2 -3
  821. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.service.ts +3 -4
  822. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.spec.ts +236 -51
  823. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.ts +99 -42
  824. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.service.ts +4 -3
  825. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.service.ts +4 -3
  826. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.handler.ts +5 -5
  827. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.service.ts +3 -4
  828. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.handler.ts +5 -5
  829. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.service.ts +3 -4
  830. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.handler.ts +4 -5
  831. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.service.ts +7 -6
  832. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.handler.ts +4 -5
  833. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.service.ts +7 -6
  834. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.handler.ts +4 -5
  835. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.service.ts +7 -6
  836. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/iam-account.payload-types.ts +34 -0
  837. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/me/iam-me-account.handler.spec.ts +3 -3
  838. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/me/iam-me-account.handler.ts +2 -2
  839. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.handler.ts +4 -5
  840. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.service.ts +7 -6
  841. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-accounts.handler.ts +4 -6
  842. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.spec.ts +497 -38
  843. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.ts +171 -51
  844. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.service.ts +9 -6
  845. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.spec.ts +299 -0
  846. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.ts +107 -7
  847. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.service.ts +5 -5
  848. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/subscribers/iam-account-updated-cache-invalidator.subscriber.spec.ts +62 -0
  849. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/subscribers/iam-account-updated-cache-invalidator.subscriber.ts +59 -0
  850. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update-me/iam-update-me-account.handler.ts +5 -7
  851. package/dist/templates/backend/packages/iam/src/@app/iam/account/domain/iam-account.field-schema.ts +15 -7
  852. package/dist/templates/backend/packages/iam/src/@app/iam/account/domain/index.ts +1 -1
  853. package/dist/templates/backend/packages/iam/src/@app/iam/account/index.ts +45 -38
  854. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.repository.ts +144 -0
  855. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.schema.ts +46 -0
  856. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-context.handler.ts +5 -7
  857. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-context.service.ts +4 -3
  858. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-contexts.handler.ts +4 -4
  859. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-contexts.service.ts +4 -3
  860. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.handler.ts +5 -8
  861. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.service.ts +3 -4
  862. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.handler.ts +5 -8
  863. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.service.ts +3 -4
  864. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.handler.ts +4 -5
  865. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.service.ts +7 -6
  866. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.handler.ts +4 -5
  867. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.service.ts +7 -6
  868. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.handler.ts +4 -5
  869. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.service.ts +7 -6
  870. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.handler.ts +4 -5
  871. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.service.ts +7 -6
  872. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.handler.ts +12 -11
  873. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.service.ts +9 -6
  874. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.handler.ts +6 -9
  875. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.service.ts +5 -5
  876. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/domain/iam-bounded-context.field-schema.ts +4 -4
  877. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/domain/index.ts +1 -1
  878. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/index.ts +29 -29
  879. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.repository.ts +40 -0
  880. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.schema.ts +33 -0
  881. package/dist/templates/backend/packages/iam/src/@app/iam/iam.relations.ts +116 -0
  882. package/dist/templates/backend/packages/iam/src/@app/iam/iam.seed.ts +45 -45
  883. package/dist/templates/backend/packages/iam/src/@app/iam/index.ts +25 -52
  884. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permission.handler.ts +5 -4
  885. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permission.service.ts +4 -3
  886. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permissions.handler.ts +4 -4
  887. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permissions.service.ts +4 -3
  888. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.handler.ts +5 -5
  889. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.service.ts +3 -4
  890. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.handler.ts +5 -5
  891. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.service.ts +3 -4
  892. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.handler.ts +4 -5
  893. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.service.ts +7 -6
  894. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.handler.ts +4 -5
  895. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.service.ts +7 -6
  896. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.handler.ts +4 -5
  897. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.service.ts +7 -6
  898. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get-permissions-without-role/iam-get-permissions-without-role.handler.spec.ts +121 -0
  899. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get-permissions-without-role/iam-get-permissions-without-role.handler.ts +73 -0
  900. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.handler.ts +4 -5
  901. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.service.ts +7 -6
  902. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.handler.ts +12 -8
  903. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.service.ts +9 -6
  904. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.handler.ts +6 -6
  905. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.service.ts +5 -5
  906. package/dist/templates/backend/packages/iam/src/@app/iam/permission/domain/iam-permission.field-schema.ts +5 -5
  907. package/dist/templates/backend/packages/iam/src/@app/iam/permission/domain/index.ts +1 -1
  908. package/dist/templates/backend/packages/iam/src/@app/iam/permission/index.ts +32 -29
  909. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.repository.ts +100 -0
  910. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.schema.ts +23 -0
  911. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permission-role.handler.ts +5 -7
  912. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permission-role.service.ts +6 -6
  913. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permissions-roles.handler.ts +4 -4
  914. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permissions-roles.service.ts +4 -3
  915. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.handler.ts +5 -8
  916. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.service.ts +3 -4
  917. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.handler.ts +5 -8
  918. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.service.ts +3 -4
  919. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.handler.ts +4 -5
  920. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.service.ts +7 -6
  921. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.handler.ts +4 -5
  922. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.service.ts +7 -6
  923. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.handler.ts +4 -5
  924. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.service.ts +7 -6
  925. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.handler.ts +4 -5
  926. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.service.ts +7 -6
  927. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.handler.ts +12 -11
  928. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.service.ts +9 -6
  929. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.handler.ts +6 -9
  930. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.service.ts +5 -5
  931. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/domain/iam-permission-role.field-schema.ts +2 -2
  932. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/domain/index.ts +1 -1
  933. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/index.ts +29 -29
  934. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.repository.ts +40 -0
  935. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.schema.ts +14 -0
  936. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-role.handler.ts +5 -4
  937. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-role.service.ts +4 -3
  938. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-roles.handler.ts +4 -4
  939. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-roles.service.ts +4 -3
  940. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.handler.ts +5 -5
  941. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.service.ts +3 -4
  942. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.handler.ts +5 -5
  943. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.service.ts +3 -4
  944. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.handler.ts +4 -5
  945. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.service.ts +7 -6
  946. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.handler.ts +4 -5
  947. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.service.ts +7 -6
  948. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.handler.ts +4 -5
  949. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.service.ts +7 -6
  950. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/inherit-permissions-role/iam-inherit-permissions-role-role.handler.ts +5 -7
  951. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.handler.ts +4 -5
  952. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.service.ts +7 -6
  953. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.handler.ts +12 -8
  954. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.service.ts +9 -6
  955. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.handler.ts +6 -6
  956. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.service.ts +5 -5
  957. package/dist/templates/backend/packages/iam/src/@app/iam/role/domain/iam-role.field-schema.ts +5 -5
  958. package/dist/templates/backend/packages/iam/src/@app/iam/role/domain/index.ts +1 -1
  959. package/dist/templates/backend/packages/iam/src/@app/iam/role/index.ts +30 -30
  960. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.repository.ts +149 -0
  961. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.schema.ts +33 -0
  962. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-role-account.handler.ts +5 -4
  963. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-role-account.service.ts +6 -6
  964. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-roles-accounts.handler.ts +4 -4
  965. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-roles-accounts.service.ts +4 -3
  966. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.handler.ts +5 -8
  967. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.service.ts +3 -4
  968. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.handler.ts +5 -5
  969. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.service.ts +3 -4
  970. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.handler.ts +4 -5
  971. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.service.ts +7 -6
  972. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.handler.ts +4 -5
  973. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.service.ts +7 -6
  974. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.handler.ts +4 -5
  975. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.service.ts +7 -6
  976. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.handler.ts +4 -5
  977. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.service.ts +7 -6
  978. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.handler.ts +12 -11
  979. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.service.ts +9 -6
  980. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.handler.ts +6 -6
  981. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.service.ts +5 -5
  982. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/domain/iam-role-account.field-schema.ts +2 -2
  983. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/domain/index.ts +1 -1
  984. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/index.ts +29 -29
  985. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.repository.ts +40 -0
  986. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.schema.ts +14 -0
  987. package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-create-permissions-from-roles.function.ts +2 -2
  988. package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-resolve-account-tenants.function.spec.ts +100 -0
  989. package/dist/templates/backend/packages/iam/src/@app/iam/shared/functions/iam-resolve-account-tenants.function.ts +59 -0
  990. package/dist/templates/backend/packages/iam/src/@app/iam/shared/iam-bootstrap.constants.ts +19 -0
  991. package/dist/templates/backend/packages/iam/src/@app/iam/shared/index.ts +4 -2
  992. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/create/iam-create-tag.handler.ts +5 -4
  993. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/create/iam-create-tag.service.ts +4 -3
  994. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.handler.ts +5 -5
  995. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.service.ts +3 -4
  996. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.handler.ts +4 -5
  997. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.service.ts +7 -6
  998. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.handler.ts +4 -5
  999. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.service.ts +7 -6
  1000. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.handler.ts +4 -5
  1001. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.service.ts +7 -6
  1002. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.handler.ts +4 -5
  1003. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.service.ts +7 -6
  1004. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.handler.ts +12 -8
  1005. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.service.ts +9 -6
  1006. package/dist/templates/backend/packages/iam/src/@app/iam/tag/domain/iam-tag.field-schema.ts +3 -3
  1007. package/dist/templates/backend/packages/iam/src/@app/iam/tag/domain/index.ts +1 -1
  1008. package/dist/templates/backend/packages/iam/src/@app/iam/tag/index.ts +23 -23
  1009. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.repository.ts +35 -0
  1010. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.schema.ts +21 -0
  1011. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.handler.spec.ts +195 -0
  1012. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.handler.ts +85 -7
  1013. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.service.ts +4 -3
  1014. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.handler.spec.ts +98 -0
  1015. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.handler.ts +53 -7
  1016. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.service.ts +4 -3
  1017. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.handler.ts +5 -5
  1018. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.service.ts +3 -4
  1019. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.handler.ts +5 -5
  1020. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.service.ts +3 -4
  1021. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.handler.ts +4 -5
  1022. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.service.ts +7 -6
  1023. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.handler.ts +4 -5
  1024. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.service.ts +7 -6
  1025. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.handler.ts +4 -5
  1026. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.service.ts +7 -6
  1027. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get-with-tenant-constraint/iam-get-with-tenant-constraint-tenants.handler.ts +4 -6
  1028. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.handler.ts +4 -5
  1029. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.service.ts +7 -6
  1030. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-tenants.handler.ts +4 -6
  1031. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.handler.spec.ts +222 -0
  1032. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.handler.ts +83 -8
  1033. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.service.ts +9 -6
  1034. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.handler.spec.ts +75 -0
  1035. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.handler.ts +28 -7
  1036. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.service.ts +5 -5
  1037. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/domain/iam-tenant.field-schema.ts +4 -4
  1038. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/domain/index.ts +1 -1
  1039. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/index.ts +31 -31
  1040. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.repository.ts +108 -0
  1041. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.schema.ts +35 -0
  1042. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.handler.spec.ts +115 -0
  1043. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.handler.ts +38 -9
  1044. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.service.ts +6 -6
  1045. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.handler.spec.ts +105 -0
  1046. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.handler.ts +43 -7
  1047. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.service.ts +4 -3
  1048. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.handler.ts +5 -8
  1049. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.service.ts +3 -4
  1050. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.handler.ts +5 -8
  1051. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.service.ts +3 -4
  1052. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.handler.ts +4 -5
  1053. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.service.ts +7 -6
  1054. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.handler.ts +4 -5
  1055. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.service.ts +7 -6
  1056. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.handler.ts +4 -5
  1057. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.service.ts +7 -6
  1058. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.handler.ts +4 -5
  1059. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.service.ts +7 -6
  1060. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.handler.spec.ts +83 -0
  1061. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.handler.ts +33 -11
  1062. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.service.ts +9 -6
  1063. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.handler.spec.ts +78 -0
  1064. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.handler.ts +27 -10
  1065. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.service.ts +5 -5
  1066. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/domain/iam-tenant-account.field-schema.ts +2 -2
  1067. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/domain/index.ts +1 -1
  1068. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/index.ts +29 -29
  1069. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.repository.ts +40 -0
  1070. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.schema.ts +14 -0
  1071. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.handler.ts +2 -3
  1072. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.service.ts +3 -4
  1073. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-user.handler.ts +5 -4
  1074. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-user.service.ts +4 -3
  1075. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-users.handler.ts +4 -4
  1076. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-users.service.ts +4 -3
  1077. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.handler.ts +5 -5
  1078. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.service.ts +3 -4
  1079. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.handler.ts +5 -5
  1080. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.service.ts +3 -4
  1081. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.handler.ts +4 -5
  1082. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.service.ts +7 -6
  1083. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.spec.ts +24 -14
  1084. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.ts +23 -21
  1085. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.handler.ts +4 -5
  1086. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.service.ts +7 -6
  1087. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/forgot-password/iam-forgot-password-user.handler.ts +5 -7
  1088. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.handler.ts +4 -5
  1089. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.service.ts +7 -6
  1090. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.handler.ts +4 -5
  1091. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.service.ts +7 -6
  1092. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/reset-password/iam-reset-password-user.handler.ts +5 -7
  1093. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.handler.ts +12 -8
  1094. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.service.ts +9 -6
  1095. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.handler.ts +6 -6
  1096. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.service.ts +5 -5
  1097. package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.spec.ts +36 -0
  1098. package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.ts +6 -6
  1099. package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/index.ts +1 -1
  1100. package/dist/templates/backend/packages/iam/src/@app/iam/user/index.ts +42 -35
  1101. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.repository.ts +40 -0
  1102. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.schema.ts +42 -0
  1103. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.spec.ts +827 -0
  1104. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.ts +223 -20
  1105. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.spec.ts +282 -0
  1106. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.ts +121 -0
  1107. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.spec.ts +63 -0
  1108. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.ts +39 -0
  1109. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/index.ts +3 -0
  1110. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/index.ts +1 -1
  1111. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.port.ts +88 -0
  1112. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.token.ts +1 -0
  1113. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/index.ts +2 -0
  1114. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-seeder.adapter.ts +2 -2
  1115. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.spec.ts +156 -0
  1116. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.ts +75 -0
  1117. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/index.ts +2 -0
  1118. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/index.ts +1 -1
  1119. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.port.ts +49 -0
  1120. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.token.ts +1 -0
  1121. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/index.ts +4 -2
  1122. package/dist/templates/backend/packages/iam/src/@bridges/iam/client/index.ts +1 -0
  1123. package/dist/templates/backend/packages/iam/src/@bridges/iam/client/ports/index.ts +2 -2
  1124. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-seeder.adapter.ts +2 -2
  1125. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.spec.ts +315 -0
  1126. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.ts +147 -0
  1127. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/index.ts +2 -0
  1128. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/index.ts +1 -1
  1129. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.port.ts +70 -0
  1130. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.token.ts +1 -0
  1131. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/index.ts +4 -2
  1132. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.spec.ts +173 -0
  1133. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.ts +63 -0
  1134. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/index.ts +1 -0
  1135. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/index.ts +1 -0
  1136. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.port.ts +54 -0
  1137. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.token.ts +1 -0
  1138. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/index.ts +2 -0
  1139. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/iam-credential-verifier.adapter.ts +2 -2
  1140. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/index.ts +1 -0
  1141. package/dist/templates/backend/packages/iam/src/@bridges/providers/account-loader.bridge.ts +2 -2
  1142. package/dist/templates/backend/packages/iam/src/@bridges/providers/credential-verifier.bridge.ts +2 -2
  1143. package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-bounded-context-seeder.bridge.ts +2 -2
  1144. package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-permission-seeder.bridge.ts +2 -2
  1145. package/dist/templates/backend/packages/iam/test/acceptance/iam/core-back-exception-status.e2e-spec.ts +286 -0
  1146. package/dist/templates/backend/packages/iam/test/acceptance/iam/user-sensitive-fields-masking.e2e-spec.ts +289 -0
  1147. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-count-access-token.controller.ts +32 -0
  1148. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-delete-access-token-by-id.controller.ts +4 -5
  1149. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token-by-id.controller.ts +4 -5
  1150. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token.controller.ts +6 -7
  1151. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-get-access-tokens.controller.ts +6 -7
  1152. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-paginate-access-tokens.controller.ts +5 -6
  1153. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/index.ts +4 -4
  1154. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-access-token.dto.ts +6 -5
  1155. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-create-access-token.dto.ts +5 -4
  1156. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-token-by-id.dto.ts +5 -4
  1157. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-tokens.dto.ts +5 -4
  1158. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/graphql/o-auth-access-token.graphql +25 -14
  1159. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/index.ts +20 -14
  1160. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-count-access-token.resolver.ts +25 -0
  1161. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-delete-access-token-by-id.resolver.ts +4 -5
  1162. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token-by-id.resolver.ts +4 -5
  1163. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token.resolver.ts +4 -5
  1164. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-get-access-tokens.resolver.ts +4 -5
  1165. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-paginate-access-tokens.resolver.ts +4 -5
  1166. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-create-application.controller.ts +3 -3
  1167. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-delete-application-by-id.controller.ts +4 -5
  1168. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application-by-id.controller.ts +4 -5
  1169. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application.controller.ts +6 -7
  1170. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-get-applications.controller.ts +6 -7
  1171. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-paginate-applications.controller.ts +5 -6
  1172. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-update-application-by-id.controller.ts +4 -5
  1173. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/index.ts +4 -4
  1174. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-application.dto.ts +4 -3
  1175. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-create-application.dto.ts +1 -1
  1176. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-application-by-id.dto.ts +1 -1
  1177. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-applications.dto.ts +1 -1
  1178. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/graphql/o-auth-application.graphql +23 -14
  1179. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/index.ts +18 -18
  1180. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-create-application.resolver.ts +3 -3
  1181. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-delete-application-by-id.resolver.ts +4 -5
  1182. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application-by-id.resolver.ts +4 -5
  1183. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application.resolver.ts +4 -5
  1184. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-get-applications.resolver.ts +4 -5
  1185. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-paginate-applications.resolver.ts +4 -5
  1186. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-update-application-by-id.resolver.ts +4 -5
  1187. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-create-application-client.controller.ts +3 -3
  1188. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-create-applications-clients.controller.ts +3 -3
  1189. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-application-client-by-id.controller.ts +4 -5
  1190. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-applications-clients.controller.ts +6 -7
  1191. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client-by-id.controller.ts +4 -5
  1192. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client.controller.ts +6 -7
  1193. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-get-applications-clients.controller.ts +6 -7
  1194. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-paginate-applications-clients.controller.ts +5 -6
  1195. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-update-application-client-by-id.controller.ts +4 -5
  1196. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/dto/index.ts +4 -4
  1197. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/dto/o-auth-application-client.dto.ts +5 -4
  1198. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/graphql/o-auth-application-client.graphql +13 -10
  1199. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/index.ts +22 -22
  1200. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-create-application-client.resolver.ts +3 -3
  1201. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-create-applications-clients.resolver.ts +3 -3
  1202. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-application-client-by-id.resolver.ts +4 -5
  1203. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-applications-clients.resolver.ts +4 -5
  1204. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client-by-id.resolver.ts +4 -5
  1205. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client.resolver.ts +4 -5
  1206. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-get-applications-clients.resolver.ts +4 -5
  1207. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-paginate-applications-clients.resolver.ts +4 -5
  1208. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-update-application-client-by-id.resolver.ts +4 -5
  1209. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-create-authorization-code.controller.ts +3 -3
  1210. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-code-by-id.controller.ts +4 -5
  1211. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-codes.controller.ts +6 -7
  1212. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code-by-id.controller.ts +4 -5
  1213. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code.controller.ts +6 -7
  1214. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-get-authorization-codes.controller.ts +6 -7
  1215. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-paginate-authorization-codes.controller.ts +5 -6
  1216. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-update-authorization-code-by-id.controller.ts +4 -5
  1217. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/dto/index.ts +4 -4
  1218. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/dto/o-auth-authorization-code.dto.ts +3 -2
  1219. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/graphql/o-auth-authorization-code.graphql +20 -17
  1220. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/index.ts +20 -20
  1221. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-create-authorization-code.resolver.ts +3 -3
  1222. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-code-by-id.resolver.ts +4 -5
  1223. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-codes.resolver.ts +4 -5
  1224. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code-by-id.resolver.ts +4 -5
  1225. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code.resolver.ts +4 -5
  1226. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-get-authorization-codes.resolver.ts +4 -5
  1227. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-paginate-authorization-codes.resolver.ts +4 -5
  1228. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-update-authorization-code-by-id.resolver.ts +4 -5
  1229. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-create-client.controller.ts +3 -3
  1230. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-delete-client-by-id.controller.ts +4 -5
  1231. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client-by-id.controller.ts +4 -5
  1232. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client.controller.ts +6 -7
  1233. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-get-clients.controller.ts +6 -7
  1234. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-paginate-clients.controller.ts +5 -6
  1235. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-update-client-by-id.controller.ts +4 -5
  1236. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/index.ts +4 -4
  1237. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-client.dto.ts +6 -12
  1238. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-create-client.dto.ts +1 -8
  1239. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-client-by-id.dto.ts +1 -8
  1240. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-clients.dto.ts +1 -8
  1241. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/graphql/o-auth-client.graphql +16 -23
  1242. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/index.ts +18 -18
  1243. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-create-client.resolver.ts +3 -3
  1244. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-delete-client-by-id.resolver.ts +4 -5
  1245. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client-by-id.resolver.ts +4 -5
  1246. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client.resolver.ts +4 -5
  1247. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-get-clients.resolver.ts +4 -5
  1248. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-paginate-clients.resolver.ts +4 -5
  1249. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-update-client-by-id.resolver.ts +4 -5
  1250. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential-by-id.controller.ts +4 -5
  1251. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential.controller.ts +6 -7
  1252. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-get-credentials.controller.ts +6 -7
  1253. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-paginate-credentials.controller.ts +5 -6
  1254. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/dto/index.ts +1 -1
  1255. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/dto/o-auth-credential.dto.ts +24 -9
  1256. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/graphql/o-auth-credential.graphql +31 -6
  1257. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/index.ts +9 -9
  1258. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential-by-id.resolver.ts +4 -5
  1259. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential.resolver.ts +4 -5
  1260. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-get-credentials.resolver.ts +4 -5
  1261. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-paginate-credentials.resolver.ts +4 -5
  1262. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.spec.ts +33 -25
  1263. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.ts +2 -6
  1264. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-impersonate-token.controller.ts +73 -0
  1265. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.spec.ts +5 -4
  1266. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.ts +3 -6
  1267. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.spec.ts +5 -7
  1268. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.ts +1 -4
  1269. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.spec.ts +52 -31
  1270. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.ts +6 -9
  1271. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-revoke-token.controller.spec.ts +5 -4
  1272. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-revoke-token.controller.ts +2 -2
  1273. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.spec.ts +13 -12
  1274. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.ts +1 -1
  1275. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/graphql/flows.graphql +32 -0
  1276. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/index.ts +18 -10
  1277. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-impersonate-token.resolver.ts +89 -0
  1278. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.spec.ts +10 -6
  1279. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.ts +8 -8
  1280. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.spec.ts +10 -8
  1281. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.ts +7 -4
  1282. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.spec.ts +111 -41
  1283. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.ts +38 -23
  1284. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.module.ts +20 -20
  1285. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.seeder.ts +18 -7
  1286. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-delete-refresh-token-by-id.controller.ts +4 -5
  1287. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token-by-id.controller.ts +4 -5
  1288. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token.controller.ts +6 -7
  1289. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-get-refresh-tokens.controller.ts +6 -7
  1290. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-paginate-refresh-tokens.controller.ts +5 -6
  1291. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/index.ts +4 -4
  1292. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-create-refresh-token.dto.ts +1 -1
  1293. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-refresh-token.dto.ts +4 -3
  1294. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-update-refresh-token-by-id.dto.ts +1 -1
  1295. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-update-refresh-tokens.dto.ts +1 -1
  1296. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/graphql/o-auth-refresh-token.graphql +23 -14
  1297. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/index.ts +14 -14
  1298. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-delete-refresh-token-by-id.resolver.ts +4 -5
  1299. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token-by-id.resolver.ts +4 -5
  1300. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token.resolver.ts +4 -5
  1301. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-get-refresh-tokens.resolver.ts +4 -5
  1302. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-paginate-refresh-tokens.resolver.ts +4 -5
  1303. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-create-scope.controller.ts +3 -3
  1304. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-delete-scope-by-id.controller.ts +4 -5
  1305. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope-by-id.controller.ts +4 -5
  1306. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope.controller.ts +6 -7
  1307. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-get-scopes.controller.ts +6 -7
  1308. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-paginate-scopes.controller.ts +5 -6
  1309. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-update-scope-by-id.controller.ts +4 -5
  1310. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/dto/index.ts +4 -4
  1311. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/graphql/o-auth-scope.graphql +16 -13
  1312. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/index.ts +18 -18
  1313. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-create-scope.resolver.ts +3 -3
  1314. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-delete-scope-by-id.resolver.ts +4 -5
  1315. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope-by-id.resolver.ts +4 -5
  1316. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope.resolver.ts +4 -5
  1317. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-get-scopes.resolver.ts +4 -5
  1318. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-paginate-scopes.resolver.ts +4 -5
  1319. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-update-scope-by-id.resolver.ts +4 -5
  1320. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.handler.ts +20 -0
  1321. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.service.ts +24 -0
  1322. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/create/o-auth-create-access-token.handler.ts +5 -7
  1323. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/create/o-auth-create-access-token.service.ts +4 -3
  1324. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/delete/o-auth-delete-access-token-by-id.handler.ts +5 -8
  1325. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/delete/o-auth-delete-access-token-by-id.service.ts +3 -4
  1326. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.handler.ts +4 -5
  1327. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.service.ts +7 -6
  1328. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.handler.ts +4 -5
  1329. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.service.ts +7 -6
  1330. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.handler.ts +4 -5
  1331. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.service.ts +7 -6
  1332. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.handler.ts +4 -5
  1333. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.service.ts +7 -6
  1334. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/domain/index.ts +1 -1
  1335. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/domain/o-auth-access-token.field-schema.ts +8 -7
  1336. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/index.ts +27 -21
  1337. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.repository.ts +40 -0
  1338. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.schema.ts +35 -0
  1339. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/create/o-auth-create-application.handler.ts +5 -7
  1340. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/create/o-auth-create-application.service.ts +4 -3
  1341. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.handler.ts +5 -8
  1342. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.service.ts +3 -4
  1343. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.handler.ts +4 -5
  1344. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.service.ts +7 -6
  1345. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.handler.ts +4 -5
  1346. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.service.ts +7 -6
  1347. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.handler.ts +4 -5
  1348. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.service.ts +7 -6
  1349. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.handler.ts +4 -5
  1350. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.service.ts +7 -6
  1351. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.handler.spec.ts +144 -0
  1352. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.handler.ts +12 -11
  1353. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.service.ts +9 -6
  1354. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/index.ts +1 -1
  1355. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.spec.ts +20 -0
  1356. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.ts +6 -7
  1357. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/index.ts +23 -23
  1358. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.repository.ts +102 -0
  1359. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.schema.ts +32 -0
  1360. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-application-client.handler.ts +5 -7
  1361. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-application-client.service.ts +6 -6
  1362. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-applications-clients.handler.ts +4 -4
  1363. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-applications-clients.service.ts +7 -3
  1364. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-application-client-by-id.handler.ts +5 -8
  1365. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-application-client-by-id.service.ts +3 -4
  1366. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.handler.ts +5 -8
  1367. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.service.ts +3 -4
  1368. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.handler.ts +4 -5
  1369. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.service.ts +7 -6
  1370. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.handler.ts +4 -5
  1371. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.service.ts +7 -6
  1372. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.handler.ts +4 -5
  1373. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.service.ts +7 -6
  1374. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.handler.ts +4 -5
  1375. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.service.ts +7 -6
  1376. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/update/o-auth-update-application-client-by-id.handler.ts +12 -11
  1377. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/update/o-auth-update-application-client-by-id.service.ts +9 -6
  1378. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/domain/index.ts +1 -1
  1379. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/domain/o-auth-application-client.field-schema.ts +2 -2
  1380. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/index.ts +27 -27
  1381. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.repository.ts +40 -0
  1382. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.schema.ts +14 -0
  1383. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/create/o-auth-create-authorization-code.handler.ts +5 -7
  1384. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/create/o-auth-create-authorization-code.service.ts +4 -3
  1385. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-code-by-id.handler.ts +5 -8
  1386. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-code-by-id.service.ts +3 -4
  1387. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.handler.ts +5 -8
  1388. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.service.ts +3 -4
  1389. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.handler.ts +4 -5
  1390. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.service.ts +7 -6
  1391. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.handler.ts +4 -5
  1392. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.service.ts +7 -6
  1393. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.handler.ts +4 -5
  1394. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.service.ts +7 -6
  1395. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.handler.ts +4 -5
  1396. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.service.ts +7 -6
  1397. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/update/o-auth-update-authorization-code-by-id.handler.ts +12 -11
  1398. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/update/o-auth-update-authorization-code-by-id.service.ts +9 -6
  1399. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/domain/index.ts +1 -1
  1400. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/domain/o-auth-authorization-code.field-schema.ts +5 -5
  1401. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/index.ts +25 -25
  1402. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.repository.ts +66 -0
  1403. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.schema.ts +42 -0
  1404. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/create/o-auth-create-client.handler.ts +5 -4
  1405. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/create/o-auth-create-client.service.ts +4 -3
  1406. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.handler.ts +5 -5
  1407. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.service.ts +3 -4
  1408. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.handler.ts +4 -5
  1409. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.service.ts +7 -6
  1410. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.handler.ts +4 -5
  1411. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.service.ts +7 -6
  1412. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.handler.ts +4 -5
  1413. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.service.ts +7 -6
  1414. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.handler.ts +4 -5
  1415. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.service.ts +7 -6
  1416. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.handler.ts +14 -8
  1417. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.service.ts +9 -6
  1418. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/domain/index.ts +1 -1
  1419. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/domain/o-auth-client.field-schema.ts +5 -12
  1420. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/index.ts +23 -23
  1421. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.repository.ts +109 -0
  1422. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.schema.ts +35 -0
  1423. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.spec.ts +62 -0
  1424. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.ts +4 -3
  1425. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.handler.ts +4 -5
  1426. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.service.ts +7 -6
  1427. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.handler.ts +4 -5
  1428. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.service.ts +7 -6
  1429. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.handler.ts +4 -5
  1430. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.service.ts +7 -6
  1431. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.handler.ts +4 -5
  1432. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.service.ts +7 -6
  1433. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/domain/index.ts +1 -1
  1434. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/domain/o-auth-credential.field-schema.ts +19 -7
  1435. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/index.ts +18 -18
  1436. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.repository.ts +38 -0
  1437. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.schema.ts +31 -0
  1438. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.spec.ts +37 -35
  1439. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.ts +9 -18
  1440. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/o-auth-create-token.handler.spec.ts +12 -11
  1441. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/o-auth-create-token.handler.ts +5 -5
  1442. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-authorization-code.service.spec.ts +72 -36
  1443. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-authorization-code.service.ts +26 -16
  1444. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.spec.ts +58 -24
  1445. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.ts +20 -11
  1446. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.spec.ts +126 -66
  1447. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.ts +50 -33
  1448. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/get-jwks/o-auth-get-jwks.handler.spec.ts +3 -3
  1449. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/get-jwks/o-auth-get-jwks.handler.ts +4 -1
  1450. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.spec.ts +351 -0
  1451. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.ts +117 -0
  1452. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.spec.ts +242 -0
  1453. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.ts +156 -0
  1454. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/o-auth-revoke-token.handler.spec.ts +7 -6
  1455. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/o-auth-revoke-token.handler.ts +2 -2
  1456. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.spec.ts +134 -37
  1457. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.ts +67 -28
  1458. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.spec.ts +22 -18
  1459. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.ts +4 -1
  1460. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-chain.error.ts +26 -0
  1461. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-permission-refresh-failed.error.ts +34 -0
  1462. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-self.error.ts +25 -0
  1463. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-no-client.error.ts +26 -0
  1464. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-not-found.error.ts +27 -0
  1465. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-privileged.error.ts +26 -0
  1466. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-unavailable.error.ts +36 -0
  1467. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation.errors.spec.ts +132 -0
  1468. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/index.ts +12 -5
  1469. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/flows.types.ts +38 -3
  1470. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.spec.ts +281 -0
  1471. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.ts +239 -0
  1472. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/index.ts +2 -2
  1473. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/index.ts +36 -28
  1474. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/shared/pkce/o-auth-verify-pkce-s256.spec.ts +3 -3
  1475. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/shared/pkce/o-auth-verify-pkce-s256.ts +2 -2
  1476. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/index.ts +22 -48
  1477. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.relations.ts +81 -0
  1478. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.seed.ts +80 -46
  1479. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/create/o-auth-create-refresh-token.handler.ts +5 -7
  1480. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/create/o-auth-create-refresh-token.service.ts +4 -3
  1481. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/delete/o-auth-delete-refresh-token-by-id.handler.ts +5 -8
  1482. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/delete/o-auth-delete-refresh-token-by-id.service.ts +3 -4
  1483. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.handler.ts +4 -5
  1484. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.service.ts +7 -6
  1485. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.handler.ts +4 -5
  1486. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.service.ts +7 -6
  1487. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.handler.ts +4 -5
  1488. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.service.ts +7 -6
  1489. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.handler.ts +4 -5
  1490. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.service.ts +7 -6
  1491. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/domain/index.ts +1 -1
  1492. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/domain/o-auth-refresh-token.field-schema.ts +7 -6
  1493. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/index.ts +20 -20
  1494. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.repository.ts +40 -0
  1495. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.schema.ts +33 -0
  1496. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/create/o-auth-create-scope.handler.ts +5 -4
  1497. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/create/o-auth-create-scope.service.ts +4 -3
  1498. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.handler.ts +5 -5
  1499. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.service.ts +3 -4
  1500. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.handler.ts +4 -5
  1501. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.service.ts +7 -6
  1502. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.handler.ts +4 -5
  1503. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.service.ts +7 -6
  1504. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.handler.ts +4 -5
  1505. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.service.ts +7 -6
  1506. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.handler.ts +4 -5
  1507. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.service.ts +7 -6
  1508. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.handler.ts +12 -8
  1509. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.service.ts +9 -6
  1510. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/domain/index.ts +1 -1
  1511. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/domain/o-auth-scope.field-schema.ts +3 -3
  1512. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/index.ts +23 -23
  1513. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.repository.ts +40 -0
  1514. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.schema.ts +23 -0
  1515. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.spec.ts +72 -25
  1516. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.ts +31 -16
  1517. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.spec.ts +30 -0
  1518. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.ts +21 -0
  1519. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.spec.ts +43 -32
  1520. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.ts +13 -9
  1521. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/index.ts +6 -5
  1522. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.spec.ts +70 -79
  1523. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.ts +44 -38
  1524. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/index.ts +1 -0
  1525. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.spec.ts +727 -0
  1526. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.ts +274 -0
  1527. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/index.ts +1 -0
  1528. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/index.ts +2 -0
  1529. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.port.ts +79 -0
  1530. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.token.ts +1 -0
  1531. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/index.ts +1 -0
  1532. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.spec.ts +58 -0
  1533. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.ts +6 -4
  1534. package/dist/templates/backend/packages/o-auth/src/@bridges/providers/iam-client-reader.bridge.ts +2 -2
  1535. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/impersonate-token-guarded-transports.e2e-spec.ts +365 -0
  1536. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/masked-property-query-guard.e2e-spec.ts +936 -0
  1537. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/oauth-bootstrap-seeder-idempotency.e2e-spec.ts +211 -0
  1538. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/token-masking.e2e-spec.ts +232 -0
  1539. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/graphql/queue-manager.graphql +149 -0
  1540. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/index.ts +24 -0
  1541. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.auth-metadata.spec.ts +84 -0
  1542. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.spec.ts +210 -0
  1543. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.ts +228 -0
  1544. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.module.ts +84 -0
  1545. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.seeder.ts +33 -0
  1546. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/index.ts +20 -0
  1547. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-inspector.port.ts +144 -0
  1548. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-registry.token.ts +30 -0
  1549. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.spec.ts +261 -0
  1550. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.ts +388 -0
  1551. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/index.ts +1 -0
  1552. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/index.ts +1 -0
  1553. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-manager.seed.ts +51 -0
  1554. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-registry.providers.ts +37 -0
  1555. package/dist/templates/codegen/backend/@api/__bounded_context_name__.module.ts.eta +2 -4
  1556. package/dist/templates/codegen/backend/@api/__bounded_context_name__.seeder.ts.eta +7 -7
  1557. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-count-__module_name__.controller.ts.eta +69 -0
  1558. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_name__.controller.ts.eta +17 -18
  1559. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_names__.controller.ts.eta +12 -12
  1560. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_name__-by-id.controller.ts.eta +16 -17
  1561. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_names__.controller.ts.eta +15 -23
  1562. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__-by-id.controller.ts.eta +14 -17
  1563. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__.controller.ts.eta +16 -19
  1564. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-__module_names__.controller.ts.eta +16 -19
  1565. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-raw-__module_names__.controller.ts.eta +3 -28
  1566. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-max-__module_name__.controller.ts.eta +72 -0
  1567. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-min-__module_name__.controller.ts.eta +72 -0
  1568. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-paginate-__module_names__.controller.ts.eta +15 -18
  1569. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-sum-__module_name__.controller.ts.eta +72 -0
  1570. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_name__-by-id.controller.ts.eta +21 -19
  1571. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_names__.controller.ts.eta +20 -23
  1572. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-upsert-__module_name__.controller.ts.eta +12 -21
  1573. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-__module_name__.dto.ts.eta +45 -14
  1574. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-create-__module_name__.dto.ts.eta +17 -6
  1575. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_name__-by-id.dto.ts.eta +17 -6
  1576. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_names__.dto.ts.eta +17 -6
  1577. package/dist/templates/codegen/backend/@api/__module_name__/dto/index.ts.eta +4 -4
  1578. package/dist/templates/codegen/backend/@api/__module_name__/graphql/__bounded_context_name__-__module_name__.graphql.eta +185 -52
  1579. package/dist/templates/codegen/backend/@api/__module_name__/index.ts.eta +102 -30
  1580. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-__module_name__-custom-field-value.resolver.ts.eta +32 -0
  1581. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-count-__module_name__.resolver.ts.eta +62 -0
  1582. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_name__.resolver.ts.eta +16 -18
  1583. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_names__.resolver.ts.eta +12 -12
  1584. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_name__-by-id.resolver.ts.eta +17 -17
  1585. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_names__.resolver.ts.eta +14 -21
  1586. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__-by-id.resolver.ts.eta +14 -17
  1587. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__.resolver.ts.eta +14 -17
  1588. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-__module_names__.resolver.ts.eta +14 -17
  1589. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-raw-__module_names__.resolver.ts.eta +3 -28
  1590. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-max-__module_name__.resolver.ts.eta +64 -0
  1591. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-min-__module_name__.resolver.ts.eta +64 -0
  1592. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-paginate-__module_names__.resolver.ts.eta +14 -17
  1593. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-sum-__module_name__.resolver.ts.eta +64 -0
  1594. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_name__-by-id.resolver.ts.eta +23 -19
  1595. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_names__.resolver.ts.eta +23 -23
  1596. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-upsert-__module_name__.resolver.ts.eta +12 -21
  1597. package/dist/templates/codegen/backend/@app/__bounded_context_name__.seed.ts.eta +6 -4
  1598. package/dist/templates/codegen/backend/@app/__module_name__/application/__bounded_context_name__-__module_name__.payload-types.ts.eta +53 -0
  1599. package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.handler.ts.eta +6 -44
  1600. package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.service.ts.eta +5 -6
  1601. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.handler.ts.eta +61 -49
  1602. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.service.ts.eta +100 -82
  1603. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.handler.ts.eta +51 -9
  1604. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.service.ts.eta +111 -31
  1605. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.handler.ts.eta +37 -50
  1606. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.service.ts.eta +100 -80
  1607. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.handler.ts.eta +14 -52
  1608. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.service.ts.eta +39 -61
  1609. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.handler.ts.eta +21 -39
  1610. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.service.ts.eta +35 -11
  1611. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.handler.ts.eta +21 -40
  1612. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.service.ts.eta +35 -10
  1613. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.handler.ts.eta +24 -41
  1614. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.service.ts.eta +35 -10
  1615. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.handler.ts.eta +15 -46
  1616. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.service.ts.eta +5 -7
  1617. package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.handler.ts.eta +43 -0
  1618. package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.service.ts.eta +5 -6
  1619. package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.handler.ts.eta +43 -0
  1620. package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.service.ts.eta +5 -6
  1621. package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.handler.ts.eta +24 -40
  1622. package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.service.ts.eta +39 -10
  1623. package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.handler.ts.eta +43 -0
  1624. package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.service.ts.eta +5 -6
  1625. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.handler.ts.eta +78 -64
  1626. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.service.ts.eta +71 -35
  1627. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.handler.ts.eta +36 -52
  1628. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.service.ts.eta +25 -41
  1629. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-and-increment-__module_names__.service.ts.eta +24 -41
  1630. package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.handler.ts.eta +28 -52
  1631. package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.service.ts.eta +23 -83
  1632. package/dist/templates/codegen/backend/@app/__module_name__/domain/__bounded_context_name__-__module_name__.field-schema.ts.eta +41 -2
  1633. package/dist/templates/codegen/backend/@app/__module_name__/domain/index.ts.eta +1 -1
  1634. package/dist/templates/codegen/backend/@app/__module_name__/index.ts.eta +117 -122
  1635. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-custom-field-value.schema.ts.eta +37 -0
  1636. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.repository.ts.eta +65 -0
  1637. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.schema.ts.eta +47 -0
  1638. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.repository.ts.eta +180 -0
  1639. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.schema.ts.eta +154 -0
  1640. package/dist/templates/codegen/backend/@app/index.ts.eta +0 -1
  1641. package/dist/templates/codegen/backend/additional-@api/__module_name__/controllers/__additional_api_name__.controller.ts.eta +30 -25
  1642. package/dist/templates/codegen/backend/additional-@api/__module_name__/resolvers/__additional_api_name__.resolver.ts.eta +33 -25
  1643. package/dist/templates/codegen/backend/additional-@app/__module_name__/application/__additional_api_action__/__additional_api_name__.handler.ts.eta +30 -11
  1644. package/dist/templates/codegen/frontend/module/__bounded_context_name__.navigation.ts.eta +1 -0
  1645. package/dist/templates/codegen/frontend/module/__module_name__/__module_name__.columns.ts.eta +233 -30
  1646. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.detail-config.ts.eta +18 -2
  1647. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.graphql.ts.eta +223 -71
  1648. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.list-config.ts.eta +11 -2
  1649. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.resolvers.ts.eta +168 -58
  1650. package/dist/templates/codegen/frontend/module/__module_name__/data-access/index.ts.eta +8 -0
  1651. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-detail.component.ts.eta +257 -57
  1652. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form-embed.component.ts.eta +336 -89
  1653. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form.component.ts.eta +348 -141
  1654. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-actions-cell.component.ts.eta +35 -12
  1655. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-translations-cell.component.ts.eta +91 -0
  1656. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list.component.ts.eta +153 -52
  1657. package/dist/templates/codegen/frontend/module/__module_name__/features/index.ts.eta +19 -0
  1658. package/dist/templates/codegen/frontend/module/__module_name__/index.ts.eta +7 -5
  1659. package/dist/templates/codegen/partials/fields/boolean-field.eta +11 -4
  1660. package/dist/templates/codegen/partials/fields/color-picker-field.eta +8 -0
  1661. package/dist/templates/codegen/partials/fields/date-field.eta +6 -16
  1662. package/dist/templates/codegen/partials/fields/datetime-field.eta +8 -0
  1663. package/dist/templates/codegen/partials/fields/enum-field.eta +16 -10
  1664. package/dist/templates/codegen/partials/fields/number-field.eta +2 -4
  1665. package/dist/templates/codegen/partials/fields/password-field.eta +14 -18
  1666. package/dist/templates/codegen/partials/fields/text-field.eta +2 -7
  1667. package/dist/templates/codegen/partials/fields/varchar-field.eta +2 -7
  1668. package/dist/templates/codegen/partials/form/dialog-frame.eta +14 -11
  1669. package/dist/templates/codegen/partials/form/field-errors.eta +10 -0
  1670. package/dist/templates/codegen/partials/form/field-label.eta +21 -6
  1671. package/dist/templates/codegen/partials/form/form-body.eta +32 -28
  1672. package/dist/templates/codegen/partials/form/view-frame-tabbed.eta +54 -4
  1673. package/dist/templates/codegen/partials/form/view-frame.eta +62 -4
  1674. package/dist/templates/codegen/partials/i18n-recompute.eta +72 -0
  1675. package/dist/templates/codegen/partials/i18n-validate.eta +51 -0
  1676. package/dist/templates/codegen/partials/relationships/async-multiple-search-select.eta +4 -8
  1677. package/dist/templates/codegen/partials/relationships/async-search-select.eta +4 -8
  1678. package/dist/templates/codegen/partials/relationships/grid-elements-manager.eta +1 -0
  1679. package/dist/templates/codegen/partials/relationships/grid-select-element.eta +5 -7
  1680. package/dist/templates/codegen/partials/relationships/multiple-search-select.eta +4 -8
  1681. package/dist/templates/codegen/partials/relationships/multiple-select.eta +17 -8
  1682. package/dist/templates/codegen/partials/relationships/search-select.eta +5 -8
  1683. package/dist/templates/codegen/partials/relationships/select.eta +14 -6
  1684. package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/SKILL.md +67 -51
  1685. package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/references/known-patterns.md +24 -20
  1686. package/dist/templates/frontend/application/.claude/skills/catalyst-data-table-management/SKILL.md +38 -33
  1687. package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/SKILL.md +133 -73
  1688. package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/references/catalyst-detail-form-rules.md +308 -253
  1689. package/dist/templates/frontend/application/.claude/skills/catalyst-project-structure/SKILL.md +281 -173
  1690. package/dist/templates/frontend/application/.claude/skills/catalyst-review-module/SKILL.md +1 -1
  1691. package/dist/templates/frontend/application/.claude/skills/catalyst-widget-creator/SKILL.md +288 -0
  1692. package/dist/templates/frontend/application/.claude/skills/layout-design-system/SKILL.md +69 -10
  1693. package/dist/templates/frontend/application/.claude/skills/transloco-i18n/SKILL.md +21 -0
  1694. package/dist/templates/frontend/application/CLAUDE.md +18 -3
  1695. package/dist/templates/frontend/application/angular.json +6 -4
  1696. package/dist/templates/frontend/application/codegen.ts +2 -1
  1697. package/dist/templates/frontend/application/libs/ui/accordion/src/lib/hlm-accordion-trigger.ts +1 -1
  1698. package/dist/templates/frontend/application/libs/ui/alert/src/lib/hlm-alert.ts +1 -1
  1699. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/index.ts +3 -0
  1700. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-action.ts +1 -3
  1701. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-cancel.ts +3 -4
  1702. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-content.ts +5 -2
  1703. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-description.ts +5 -4
  1704. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-footer.ts +5 -4
  1705. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-header.ts +5 -4
  1706. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-media.ts +15 -0
  1707. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-overlay.ts +1 -1
  1708. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-title.ts +5 -4
  1709. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-trigger.ts +1 -3
  1710. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-content.ts +1 -1
  1711. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-empty.ts +1 -3
  1712. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-group.ts +1 -3
  1713. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-input.ts +45 -44
  1714. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-item.ts +3 -5
  1715. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-label.ts +1 -3
  1716. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-list.ts +2 -4
  1717. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-search.ts +8 -18
  1718. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-separator.ts +1 -3
  1719. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-status.ts +2 -4
  1720. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete.ts +8 -18
  1721. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-badge.ts +2 -2
  1722. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-fallback.ts +1 -1
  1723. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-image.ts +1 -1
  1724. package/dist/templates/frontend/application/libs/ui/badge/src/lib/hlm-badge.ts +1 -1
  1725. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/index.ts +0 -5
  1726. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-ellipsis.ts +12 -25
  1727. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-separator.ts +1 -1
  1728. package/dist/templates/frontend/application/libs/ui/button/src/lib/hlm-button.ts +6 -8
  1729. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-separator.ts +5 -4
  1730. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-text.ts +4 -1
  1731. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group.ts +4 -4
  1732. package/dist/templates/frontend/application/libs/ui/calendar/src/index.ts +8 -1
  1733. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-multi.ts +189 -223
  1734. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-range.ts +188 -218
  1735. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar.ts +184 -212
  1736. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-month-year-calendar.ts +139 -0
  1737. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-action.ts +1 -3
  1738. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-content.ts +2 -4
  1739. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-description.ts +1 -3
  1740. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-footer.ts +2 -5
  1741. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-header.ts +2 -4
  1742. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-title.ts +1 -3
  1743. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.token.ts +19 -0
  1744. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.ts +4 -2
  1745. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-next.ts +5 -7
  1746. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-previous.ts +5 -7
  1747. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel.ts +8 -6
  1748. package/dist/templates/frontend/application/libs/ui/checkbox/src/lib/hlm-checkbox.ts +13 -14
  1749. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-content.ts +1 -3
  1750. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-trigger.ts +1 -3
  1751. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible.ts +1 -3
  1752. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-input.ts +1 -3
  1753. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-remove.ts +2 -4
  1754. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip.ts +2 -4
  1755. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chips.ts +12 -12
  1756. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-content.ts +1 -3
  1757. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-empty.ts +1 -3
  1758. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-group.ts +1 -3
  1759. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-input.ts +58 -43
  1760. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-item.ts +3 -5
  1761. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-label.ts +1 -3
  1762. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-list.ts +2 -4
  1763. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-multiple.ts +8 -18
  1764. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-placeholder.ts +1 -1
  1765. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-separator.ts +1 -3
  1766. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-status.ts +2 -4
  1767. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-trigger.ts +17 -2
  1768. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-value.ts +1 -0
  1769. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox.ts +8 -18
  1770. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-dialog.ts +2 -2
  1771. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group-label.ts +1 -1
  1772. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group.ts +4 -1
  1773. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-input.ts +10 -4
  1774. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-item.ts +1 -1
  1775. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-list.ts +1 -1
  1776. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-separator.ts +1 -1
  1777. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-shortcut.ts +4 -1
  1778. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command.ts +1 -1
  1779. package/dist/templates/frontend/application/libs/ui/context-menu/src/lib/hlm-context-menu-trigger.ts +25 -14
  1780. package/dist/templates/frontend/application/libs/ui/date-picker/src/index.ts +24 -3
  1781. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-multi-input.ts +104 -0
  1782. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-anchor.ts +23 -0
  1783. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-input.ts +105 -0
  1784. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.token.ts +61 -0
  1785. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.ts +70 -85
  1786. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-trigger.ts +104 -0
  1787. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.token.ts +22 -0
  1788. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.ts +83 -97
  1789. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-input.ts +107 -0
  1790. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.token.ts +36 -1
  1791. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.ts +90 -89
  1792. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-input.ts +105 -0
  1793. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.token.ts +89 -0
  1794. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.ts +199 -0
  1795. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-close.ts +2 -4
  1796. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-content.ts +21 -13
  1797. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-description.ts +5 -4
  1798. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-footer.ts +1 -3
  1799. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-header.ts +2 -4
  1800. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-overlay.ts +4 -3
  1801. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-title.ts +2 -4
  1802. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-trigger.ts +1 -3
  1803. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog.service.ts +7 -4
  1804. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/index.ts +4 -0
  1805. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox-indicator.ts +3 -5
  1806. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox.ts +30 -12
  1807. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-focus-on-hover.ts +35 -0
  1808. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-group.ts +1 -3
  1809. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item-sub-indicator.ts +2 -2
  1810. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item.ts +4 -2
  1811. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-label.ts +4 -4
  1812. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio-indicator.ts +5 -7
  1813. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio.ts +26 -13
  1814. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-separator.ts +2 -4
  1815. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-shortcut.ts +5 -4
  1816. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub-trigger.ts +52 -0
  1817. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub.ts +21 -26
  1818. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-trigger.ts +14 -17
  1819. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu.ts +21 -26
  1820. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-content.ts +2 -4
  1821. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-description.ts +2 -4
  1822. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-header.ts +2 -4
  1823. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-media.ts +4 -3
  1824. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-title.ts +1 -3
  1825. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty.ts +2 -4
  1826. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-content.ts +2 -4
  1827. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-description.ts +2 -5
  1828. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-error.ts +2 -6
  1829. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-group.ts +2 -4
  1830. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-label.ts +3 -7
  1831. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-separator.ts +3 -5
  1832. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-set.ts +5 -7
  1833. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-title.ts +2 -4
  1834. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field.ts +1 -1
  1835. package/dist/templates/frontend/application/libs/ui/hover-card/src/lib/hlm-hover-card-content.ts +1 -1
  1836. package/dist/templates/frontend/application/libs/ui/input/src/lib/hlm-input.ts +10 -27
  1837. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-addon.ts +6 -6
  1838. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-button.ts +3 -3
  1839. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-input.ts +2 -4
  1840. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-text.ts +2 -2
  1841. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-textarea.ts +2 -4
  1842. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group.ts +5 -24
  1843. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-fake-caret.ts +7 -4
  1844. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-group.ts +6 -5
  1845. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-separator.ts +3 -7
  1846. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-slot.ts +22 -10
  1847. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp.ts +2 -4
  1848. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-actions.ts +2 -4
  1849. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-content.ts +5 -4
  1850. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-description.ts +6 -8
  1851. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-footer.ts +2 -4
  1852. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-group.ts +4 -1
  1853. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-header.ts +2 -4
  1854. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-media.ts +4 -3
  1855. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-separator.ts +3 -2
  1856. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-title.ts +5 -4
  1857. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item.ts +7 -6
  1858. package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd-group.ts +1 -1
  1859. package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd.ts +4 -5
  1860. package/dist/templates/frontend/application/libs/ui/label/src/lib/hlm-label.ts +3 -10
  1861. package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar-trigger.ts +23 -15
  1862. package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar.ts +1 -1
  1863. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-opt-group.ts +8 -5
  1864. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-option.ts +8 -5
  1865. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select.ts +17 -11
  1866. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-content.ts +10 -3
  1867. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-item.ts +4 -1
  1868. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-link.ts +7 -4
  1869. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-list.ts +4 -1
  1870. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-trigger.ts +18 -4
  1871. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu.ts +3 -0
  1872. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination-query-params.ts +68 -67
  1873. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination.ts +1 -3
  1874. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-content.ts +2 -4
  1875. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-ellipsis.ts +12 -18
  1876. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-item.ts +2 -9
  1877. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-link.ts +2 -1
  1878. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-next.ts +10 -9
  1879. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-previous.ts +11 -9
  1880. package/dist/templates/frontend/application/libs/ui/popover/src/index.ts +9 -0
  1881. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-content.ts +2 -1
  1882. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-description.ts +12 -0
  1883. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-header.ts +12 -0
  1884. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-title.ts +12 -0
  1885. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-trigger.ts +1 -3
  1886. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover.ts +2 -3
  1887. package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress-indicator.ts +10 -4
  1888. package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress.ts +2 -1
  1889. package/dist/templates/frontend/application/libs/ui/radio-group/src/lib/hlm-radio.ts +3 -4
  1890. package/dist/templates/frontend/application/libs/ui/resizable/src/lib/hlm-resizable-handle.ts +1 -1
  1891. package/dist/templates/frontend/application/libs/ui/scroll-area/src/lib/hlm-scroll-area.ts +6 -4
  1892. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-content.ts +1 -1
  1893. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-group.ts +1 -3
  1894. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-item.ts +3 -5
  1895. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-label.ts +2 -4
  1896. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-multiple.ts +8 -18
  1897. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-placeholder.ts +1 -1
  1898. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-down.ts +1 -1
  1899. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-up.ts +1 -1
  1900. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-separator.ts +2 -4
  1901. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-trigger.ts +16 -4
  1902. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-values-content.ts +4 -1
  1903. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select.ts +8 -18
  1904. package/dist/templates/frontend/application/libs/ui/separator/src/lib/hlm-separator.ts +4 -1
  1905. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-close.ts +2 -4
  1906. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-content.ts +14 -30
  1907. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-description.ts +1 -3
  1908. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-footer.ts +2 -4
  1909. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-header.ts +2 -4
  1910. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-overlay.ts +1 -4
  1911. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-title.ts +2 -4
  1912. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-trigger.ts +1 -3
  1913. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-content.ts +1 -1
  1914. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-footer.ts +1 -1
  1915. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-action.ts +4 -6
  1916. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-content.ts +1 -1
  1917. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-label.ts +4 -4
  1918. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group.ts +1 -1
  1919. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-header.ts +1 -1
  1920. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-input.ts +4 -7
  1921. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-inset.ts +5 -7
  1922. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-action.ts +2 -8
  1923. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-badge.ts +4 -8
  1924. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-button.ts +3 -3
  1925. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-skeleton.ts +3 -3
  1926. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub-button.ts +8 -6
  1927. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub.ts +8 -4
  1928. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu.ts +1 -1
  1929. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-rail.ts +2 -2
  1930. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-separator.ts +1 -1
  1931. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-trigger.ts +8 -19
  1932. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-wrapper.ts +1 -1
  1933. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.service.ts +28 -11
  1934. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.token.ts +2 -0
  1935. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.ts +11 -15
  1936. package/dist/templates/frontend/application/libs/ui/slider/src/lib/hlm-slider.ts +3 -3
  1937. package/dist/templates/frontend/application/libs/ui/sonner/src/lib/hlm-toaster.ts +12 -1
  1938. package/dist/templates/frontend/application/libs/ui/spinner/src/lib/hlm-spinner.ts +2 -1
  1939. package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch-thumb.ts +2 -1
  1940. package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch.ts +15 -9
  1941. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-list.ts +1 -1
  1942. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-paginated-list.ts +8 -20
  1943. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-trigger.ts +1 -1
  1944. package/dist/templates/frontend/application/libs/ui/textarea/src/lib/hlm-textarea.ts +10 -28
  1945. package/dist/templates/frontend/application/libs/ui/toggle/src/lib/hlm-toggle.ts +1 -1
  1946. package/dist/templates/frontend/application/libs/ui/tooltip/src/lib/hlm-tooltip.ts +3 -2
  1947. package/dist/templates/frontend/application/libs/ui/utils/src/index.ts +1 -0
  1948. package/dist/templates/frontend/application/libs/ui/utils/src/lib/provide-spartan-hlm.ts +34 -0
  1949. package/dist/templates/frontend/application/package.json +38 -29
  1950. package/dist/templates/frontend/application/public/i18n/en.json +18 -2
  1951. package/dist/templates/frontend/application/public/i18n/es.json +18 -2
  1952. package/dist/templates/frontend/application/public/i18n/navigation/en.json +22 -29
  1953. package/dist/templates/frontend/application/public/i18n/navigation/es.json +22 -29
  1954. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.spec.ts +11 -10
  1955. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.ts +12 -15
  1956. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.stories.ts +0 -2
  1957. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.spec.ts +19 -11
  1958. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.ts +12 -15
  1959. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.stories.ts +0 -22
  1960. package/dist/templates/frontend/application/src/@aurora/components/breadcrumb/breadcrumb.service.ts +2 -2
  1961. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.spec.ts +663 -0
  1962. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.ts +334 -0
  1963. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.stories.ts +103 -0
  1964. package/dist/templates/frontend/application/src/@aurora/components/chart/index.ts +1 -0
  1965. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.spec.ts +671 -0
  1966. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.ts +802 -0
  1967. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.stories.ts +180 -0
  1968. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.spec.ts +270 -0
  1969. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.ts +177 -0
  1970. package/dist/templates/frontend/application/src/@aurora/components/color-picker/index.ts +2 -0
  1971. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.spec.ts +344 -0
  1972. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.ts +366 -0
  1973. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/index.ts +4 -0
  1974. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.spec.ts +82 -0
  1975. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.ts +49 -0
  1976. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-form.types.ts +57 -0
  1977. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.spec.ts +28 -0
  1978. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.ts +24 -0
  1979. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.spec.ts +50 -0
  1980. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.ts +30 -0
  1981. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/boolean-cell.component.ts +3 -6
  1982. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.component.ts +62 -0
  1983. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.stories.ts +117 -0
  1984. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/enum-cell.component.ts +23 -0
  1985. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/index.ts +2 -0
  1986. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/column-toggle.component.ts +7 -29
  1987. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.spec.ts +460 -0
  1988. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.ts +17 -3
  1989. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/head-selection.component.ts +2 -1
  1990. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/row-selection.component.ts +2 -1
  1991. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/sort-button.component.ts +44 -14
  1992. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-export.component.ts +5 -9
  1993. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-filters.component.ts +2 -11
  1994. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-pagination.component.ts +16 -26
  1995. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-search.component.ts +1 -11
  1996. package/dist/templates/frontend/application/src/@aurora/components/data-table/index.ts +5 -1
  1997. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.spec.ts +123 -8
  1998. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.ts +55 -33
  1999. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.spec.ts +141 -17
  2000. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.ts +50 -21
  2001. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.spec.ts +22 -11
  2002. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.ts +25 -19
  2003. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.spec.ts +72 -0
  2004. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.ts +8 -1
  2005. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/custom-field-column.ts +141 -0
  2006. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.spec.ts +157 -0
  2007. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.ts +69 -0
  2008. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.spec.ts +217 -0
  2009. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.ts +146 -0
  2010. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/nested-column.ts +24 -23
  2011. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/relation-cell.spec.ts +33 -0
  2012. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/relation-cell.ts +13 -0
  2013. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.spec.ts +140 -0
  2014. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.ts +119 -0
  2015. package/dist/templates/frontend/application/src/@aurora/components/data-table/services/in-memory-column-config-storage.ts +2 -2
  2016. package/dist/templates/frontend/application/src/@aurora/components/data-table/types.ts +57 -8
  2017. package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.spec.ts +189 -0
  2018. package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.ts +137 -0
  2019. package/dist/templates/frontend/application/src/@aurora/components/date-picker/index.ts +1 -0
  2020. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.spec.ts +296 -0
  2021. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.ts +223 -0
  2022. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.stories.ts +143 -0
  2023. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/index.ts +1 -0
  2024. package/dist/templates/frontend/application/src/@aurora/components/grid-pick-dialog/grid-pick-dialog.component.ts +22 -26
  2025. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.spec.ts +98 -10
  2026. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.ts +41 -10
  2027. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.stories.ts +6 -0
  2028. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.spec.ts +80 -0
  2029. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.ts +10 -26
  2030. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.stories.ts +2 -2
  2031. package/dist/templates/frontend/application/src/@aurora/components/hlm-badge-icon-cell/hlm-badge-icon-cell.component.ts +4 -7
  2032. package/dist/templates/frontend/application/src/@aurora/components/hlm-password-strength/hlm-password-strength.component.ts +1 -2
  2033. package/dist/templates/frontend/application/src/@aurora/components/index.ts +11 -0
  2034. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.spec.ts +14 -15
  2035. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.ts +12 -15
  2036. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.stories.ts +0 -9
  2037. package/dist/templates/frontend/application/src/@aurora/components/password-input/index.ts +1 -0
  2038. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.spec.ts +271 -0
  2039. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.ts +181 -0
  2040. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.stories.ts +189 -0
  2041. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/index.ts +2 -0
  2042. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.component.ts +76 -0
  2043. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.service.ts +105 -0
  2044. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.spec.ts +14 -15
  2045. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.ts +17 -18
  2046. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.stories.ts +0 -14
  2047. package/dist/templates/frontend/application/src/@aurora/components/status-badge/index.ts +3 -0
  2048. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.component.ts +37 -0
  2049. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.stories.ts +74 -0
  2050. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.component.ts +63 -0
  2051. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.spec.ts +93 -0
  2052. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.stories.ts +107 -0
  2053. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.types.ts +43 -0
  2054. package/dist/templates/frontend/application/src/@aurora/composables/atoms/data-table/use-table-data.ts +3 -2
  2055. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find-by-id.ts +12 -2
  2056. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find.ts +14 -2
  2057. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-get.ts +11 -2
  2058. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-paginate.ts +9 -2
  2059. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.spec.ts +191 -0
  2060. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.ts +24 -4
  2061. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-detail.ts +23 -14
  2062. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-list.ts +14 -10
  2063. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.spec.ts +251 -0
  2064. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.ts +64 -19
  2065. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.spec.ts +142 -0
  2066. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.ts +7 -9
  2067. package/dist/templates/frontend/application/src/@aurora/directives/index.ts +1 -0
  2068. package/dist/templates/frontend/application/src/@aurora/directives/scroll-fade.directive.ts +150 -0
  2069. package/dist/templates/frontend/application/src/@aurora/index.ts +1 -0
  2070. package/dist/templates/frontend/application/src/@aurora/lib/calendar-i18n.spec.ts +138 -0
  2071. package/dist/templates/frontend/application/src/@aurora/lib/calendar-i18n.ts +93 -0
  2072. package/dist/templates/frontend/application/src/@aurora/lib/expand-display-field-template.ts +30 -0
  2073. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.spec.ts +50 -0
  2074. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.ts +43 -0
  2075. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.spec.ts +42 -0
  2076. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.ts +34 -0
  2077. package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.spec.ts +28 -0
  2078. package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.ts +23 -0
  2079. package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.spec.ts +47 -0
  2080. package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.ts +25 -0
  2081. package/dist/templates/frontend/application/src/@aurora/lib/index.ts +12 -0
  2082. package/dist/templates/frontend/application/src/@aurora/lib/item-label-of.spec.ts +45 -0
  2083. package/dist/templates/frontend/application/src/@aurora/lib/item-label-of.ts +17 -7
  2084. package/dist/templates/frontend/application/src/@aurora/lib/local-time.spec.ts +54 -0
  2085. package/dist/templates/frontend/application/src/@aurora/lib/local-time.ts +40 -0
  2086. package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.spec.ts +130 -0
  2087. package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.ts +61 -0
  2088. package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.spec.ts +101 -0
  2089. package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.ts +30 -0
  2090. package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.spec.ts +39 -0
  2091. package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.ts +38 -0
  2092. package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.spec.ts +94 -0
  2093. package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.ts +51 -0
  2094. package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.spec.ts +133 -0
  2095. package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.ts +1 -6
  2096. package/dist/templates/frontend/application/src/@aurora/lib/utc-date-prefix.ts +24 -0
  2097. package/dist/templates/frontend/application/src/@aurora/modules/authentication/README.md +59 -2
  2098. package/dist/templates/frontend/application/src/@aurora/modules/authentication/data-access/authentication.graphql.ts +15 -15
  2099. package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.spec.ts +195 -0
  2100. package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.ts +65 -0
  2101. package/dist/templates/frontend/application/src/@aurora/modules/authentication/index.ts +7 -2
  2102. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.spec.ts +92 -0
  2103. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.ts +36 -2
  2104. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.spec.ts +494 -0
  2105. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.ts +99 -50
  2106. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-disabled.service.ts +8 -4
  2107. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authenticated-initializer.ts +8 -7
  2108. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.provider.ts +2 -0
  2109. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.service.ts +27 -1
  2110. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.spec.ts +113 -0
  2111. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.ts +56 -3
  2112. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.types.ts +6 -2
  2113. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/current-account.service.ts +68 -0
  2114. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver-permission-bounce.spec.ts +80 -0
  2115. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.spec.ts +440 -0
  2116. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.ts +156 -0
  2117. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.spec.ts +75 -0
  2118. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.ts +27 -0
  2119. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.spec.ts +41 -0
  2120. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.ts +21 -0
  2121. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.spec.ts +759 -0
  2122. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.ts +310 -0
  2123. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.spec.ts +293 -0
  2124. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.ts +116 -1
  2125. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.css +150 -0
  2126. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.spec.ts +288 -0
  2127. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.ts +776 -0
  2128. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.gridstack.css +15 -0
  2129. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.helpers.ts +174 -0
  2130. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/index.ts +2 -0
  2131. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.spec.ts +261 -0
  2132. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.ts +306 -0
  2133. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/index.ts +1 -0
  2134. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/index.ts +2 -0
  2135. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/index.ts +1 -0
  2136. package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.spec.ts +1001 -530
  2137. package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.ts +108 -34
  2138. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-create.ts +17 -8
  2139. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-id.ts +14 -8
  2140. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-keys.ts +15 -7
  2141. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete.ts +18 -9
  2142. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-insert.ts +14 -8
  2143. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-update.ts +14 -8
  2144. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.spec.ts +6 -4
  2145. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.ts +12 -11
  2146. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.spec.ts +7 -5
  2147. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.ts +16 -13
  2148. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.spec.ts +6 -4
  2149. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.ts +13 -14
  2150. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.spec.ts +8 -5
  2151. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.ts +11 -9
  2152. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/types.ts +5 -3
  2153. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.spec.ts +170 -0
  2154. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.ts +36 -6
  2155. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.types.ts +24 -12
  2156. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.spec.ts +30 -108
  2157. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.ts +9 -76
  2158. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-error.handler.spec.ts +12 -3
  2159. package/dist/templates/frontend/application/src/@aurora/modules/graphql/index.ts +5 -0
  2160. package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.spec.ts +138 -0
  2161. package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.ts +60 -0
  2162. package/dist/templates/frontend/application/src/@aurora/modules/health/index.ts +1 -0
  2163. package/dist/templates/frontend/application/src/@aurora/modules/index.ts +5 -0
  2164. package/dist/templates/frontend/application/src/@aurora/modules/lang/index.ts +1 -0
  2165. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang-flag-icons.ts +34 -0
  2166. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.spec.ts +129 -0
  2167. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.ts +37 -3
  2168. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.spec.ts +367 -0
  2169. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.ts +186 -0
  2170. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/index.ts +24 -0
  2171. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-cell-renderer.registry.ts +52 -0
  2172. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.spec.ts +148 -0
  2173. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.ts +68 -0
  2174. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.component.ts +154 -0
  2175. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.spec.ts +181 -0
  2176. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-viewer.types.ts +230 -0
  2177. package/dist/templates/frontend/application/src/@aurora/modules/session/session.service.ts +2 -2
  2178. package/dist/templates/frontend/application/src/@aurora/modules/theme/index.ts +2 -0
  2179. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.spec.ts +240 -0
  2180. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.ts +128 -0
  2181. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.type.ts +4 -0
  2182. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-component-i18n.spec.ts +217 -0
  2183. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-i18n.spec.ts +221 -0
  2184. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.component.ts +318 -0
  2185. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.spec.ts +274 -0
  2186. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.ts +89 -0
  2187. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.component.ts +200 -0
  2188. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.spec.ts +373 -0
  2189. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.ts +80 -0
  2190. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget-i18n.spec.ts +176 -0
  2191. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.component.ts +230 -0
  2192. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.spec.ts +332 -0
  2193. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.ts +67 -0
  2194. package/dist/templates/frontend/application/src/@aurora/modules/widget/aurora-widget-def.ts +101 -0
  2195. package/dist/templates/frontend/application/src/@aurora/modules/widget/index.ts +17 -0
  2196. package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.spec.ts +75 -0
  2197. package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.ts +32 -0
  2198. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-category.ts +16 -0
  2199. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.spec.ts +298 -0
  2200. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.ts +103 -0
  2201. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source.ts +68 -0
  2202. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.spec.ts +195 -0
  2203. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.ts +84 -0
  2204. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.spec.ts +91 -0
  2205. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.ts +38 -0
  2206. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.spec.ts +85 -0
  2207. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.ts +41 -0
  2208. package/dist/templates/frontend/application/src/@aurora/pipes/index.ts +1 -0
  2209. package/dist/templates/frontend/application/src/@aurora/pipes/to-options.pipe.ts +2 -5
  2210. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.spec.ts +81 -0
  2211. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.ts +50 -0
  2212. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.spec.ts +197 -0
  2213. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.ts +97 -21
  2214. package/dist/templates/frontend/application/src/@aurora/query-dsl/index.ts +32 -0
  2215. package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.spec.ts +94 -0
  2216. package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.type-contract.ts +38 -0
  2217. package/dist/templates/frontend/application/src/app/app.config.ts +18 -6
  2218. package/dist/templates/frontend/application/src/app/app.routes.ts +1 -1
  2219. package/dist/templates/frontend/application/src/app/app.ts +1 -2
  2220. package/dist/templates/frontend/application/src/app/aurora-widget.providers.ts +21 -0
  2221. package/dist/templates/frontend/application/src/app/aurora.provider.spec.ts +1 -2
  2222. package/dist/templates/frontend/application/src/app/aurora.provider.ts +12 -5
  2223. package/dist/templates/frontend/application/src/app/domains/admin/home/home.component.ts +15 -0
  2224. package/dist/templates/frontend/application/src/app/domains/admin/layout/layout.component.ts +2 -3
  2225. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.spec.ts +111 -0
  2226. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.ts +74 -21
  2227. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.spec.ts +124 -0
  2228. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.ts +48 -0
  2229. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.spec.ts +203 -0
  2230. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.ts +122 -0
  2231. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-main.ts +19 -28
  2232. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-secondary.ts +1 -2
  2233. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-sub-items.ts +10 -23
  2234. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-user.ts +1 -2
  2235. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/types.ts +4 -0
  2236. package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.spec.ts +153 -0
  2237. package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.ts +109 -31
  2238. package/dist/templates/frontend/application/src/app/domains/admin/navigation-data.ts +4 -20
  2239. package/dist/templates/frontend/application/src/app/domains/admin/routes.ts +4 -3
  2240. package/dist/templates/frontend/application/src/app/domains/auth/callback-error/callback-error.component.ts +1 -2
  2241. package/dist/templates/frontend/application/src/app/domains/auth/layout.ts +1 -2
  2242. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.spec.ts +32 -31
  2243. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.ts +23 -33
  2244. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/oauth-session.service.ts +2 -4
  2245. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/sign-in.component.ts +1 -2
  2246. package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.spec.ts +13 -11
  2247. package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.ts +6 -9
  2248. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/sign-up.component.ts +1 -2
  2249. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.spec.ts +60 -0
  2250. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.ts +25 -16
  2251. package/dist/templates/frontend/application/src/app/domains/auth/signed-out/signed-out.component.ts +1 -2
  2252. package/dist/templates/frontend/application/src/app/transloco-lang.factory.spec.ts +40 -0
  2253. package/dist/templates/frontend/application/src/app/transloco-lang.factory.ts +28 -0
  2254. package/dist/templates/frontend/application/src/app/transloco-loader.ts +2 -2
  2255. package/dist/templates/frontend/application/src/environments/environment.dev.ts +46 -3
  2256. package/dist/templates/frontend/application/src/environments/environment.local.ts +47 -4
  2257. package/dist/templates/frontend/application/src/environments/environment.prod.ts +46 -3
  2258. package/dist/templates/frontend/application/src/environments/environment.qa.ts +46 -3
  2259. package/dist/templates/frontend/application/src/environments/environment.ts +46 -3
  2260. package/dist/templates/frontend/application/src/environments/environment.type.ts +61 -0
  2261. package/dist/templates/frontend/application/src/index.html +21 -1
  2262. package/dist/templates/frontend/application/src/styles.css +772 -8
  2263. package/dist/templates/frontend/application/tsconfig.app.json +3 -9
  2264. package/dist/templates/frontend/application/tsconfig.json +17 -1
  2265. package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/en.json +41 -0
  2266. package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/es.json +41 -0
  2267. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/dashboard.routes.ts +8 -0
  2268. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard-i18n.spec.ts +342 -0
  2269. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.spec.ts +349 -0
  2270. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.ts +622 -0
  2271. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.spec.ts +152 -0
  2272. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.ts +79 -0
  2273. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.orchestration.ts +159 -0
  2274. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/index.ts +1 -0
  2275. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog-dialog.component.ts +295 -0
  2276. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.spec.ts +202 -0
  2277. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.ts +58 -0
  2278. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/index.ts +3 -0
  2279. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.spec.ts +142 -0
  2280. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.ts +48 -0
  2281. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.service.ts +71 -0
  2282. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.types.ts +44 -0
  2283. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/index.ts +1 -0
  2284. package/dist/templates/frontend/packages/hub/public/i18n/hub/en.json +50 -0
  2285. package/dist/templates/frontend/packages/hub/public/i18n/hub/es.json +50 -0
  2286. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/app.columns.ts +113 -0
  2287. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/app.cross-context.spec.ts +56 -0
  2288. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.detail-config.ts +12 -0
  2289. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.graphql.ts +157 -0
  2290. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.list-config.ts +13 -0
  2291. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.resolvers.ts +39 -0
  2292. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/index.ts +8 -0
  2293. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-form.component.ts +326 -0
  2294. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list-actions-cell.component.ts +75 -0
  2295. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list.component.ts +429 -0
  2296. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/index.ts +7 -0
  2297. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/index.ts +7 -0
  2298. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.detail-config.ts +13 -0
  2299. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.graphql.ts +156 -0
  2300. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.list-config.ts +14 -0
  2301. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub-icons.providers.ts +11 -0
  2302. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.navigation.ts +39 -0
  2303. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.routes.ts +35 -0
  2304. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.types.ts +5 -0
  2305. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/index.ts +6 -0
  2306. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/data-access/launchpad.graphql.ts +48 -0
  2307. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.spec.ts +259 -0
  2308. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.ts +228 -0
  2309. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.helpers.ts +21 -0
  2310. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad-keyboard.helpers.ts +148 -0
  2311. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.spec.ts +493 -0
  2312. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.ts +612 -0
  2313. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.spec.ts +328 -0
  2314. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.ts +167 -0
  2315. package/dist/templates/frontend/packages/iam/public/i18n/iam/en.json +6 -1
  2316. package/dist/templates/frontend/packages/iam/public/i18n/iam/es.json +6 -1
  2317. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.spec.ts +459 -0
  2318. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.ts +140 -0
  2319. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/index.ts +1 -0
  2320. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.spec.ts +63 -0
  2321. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.ts +32 -0
  2322. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.detail-config.ts +12 -0
  2323. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.graphql.ts +288 -0
  2324. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.list-config.ts +13 -0
  2325. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.spec.ts +72 -0
  2326. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.ts +123 -0
  2327. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/index.ts +12 -0
  2328. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.spec.ts +78 -0
  2329. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.ts +170 -0
  2330. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.spec.ts +914 -0
  2331. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.ts +896 -0
  2332. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list-actions-cell.component.ts +113 -0
  2333. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list.component.ts +261 -0
  2334. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/index.ts +6 -0
  2335. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/index.ts +11 -0
  2336. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.detail-config.ts +12 -0
  2337. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.graphql.ts +171 -0
  2338. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.list-config.ts +13 -0
  2339. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.resolvers.ts +39 -0
  2340. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/index.ts +8 -0
  2341. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-detail.component.ts +160 -0
  2342. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-form.component.ts +150 -0
  2343. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list-actions-cell.component.ts +75 -0
  2344. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list.component.ts +242 -0
  2345. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/index.ts +8 -0
  2346. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/index.ts +7 -0
  2347. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam-icons.providers.ts +23 -0
  2348. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.navigation.ts +59 -0
  2349. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.routes.ts +92 -0
  2350. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/index.ts +8 -0
  2351. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.detail-config.ts +12 -0
  2352. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.graphql.ts +181 -0
  2353. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.list-config.ts +13 -0
  2354. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.resolvers.ts +72 -0
  2355. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/index.ts +8 -0
  2356. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form-embed.component.ts +97 -0
  2357. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form.component.ts +130 -0
  2358. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list-actions-cell.component.ts +75 -0
  2359. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list.component.ts +398 -0
  2360. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/index.ts +7 -0
  2361. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/permission.columns.ts +73 -0
  2362. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.detail-config.ts +12 -0
  2363. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.graphql.ts +200 -0
  2364. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.list-config.ts +13 -0
  2365. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/index.ts +8 -0
  2366. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.detail-config.ts +12 -0
  2367. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.graphql.ts +195 -0
  2368. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.list-config.ts +13 -0
  2369. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.resolvers.ts +39 -0
  2370. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/index.ts +8 -0
  2371. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-detail.component.ts +295 -0
  2372. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-form.component.ts +185 -0
  2373. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list-actions-cell.component.ts +75 -0
  2374. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list.component.ts +236 -0
  2375. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/index.ts +7 -0
  2376. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/role.columns.ts +119 -0
  2377. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.detail-config.ts +12 -0
  2378. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.graphql.ts +199 -0
  2379. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.list-config.ts +13 -0
  2380. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-email.validator.ts +31 -0
  2381. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-username.validator.ts +29 -0
  2382. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/index.ts +8 -0
  2383. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.detail-config.ts +12 -0
  2384. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.graphql.ts +113 -0
  2385. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.list-config.ts +13 -0
  2386. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.resolvers.ts +39 -0
  2387. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/index.ts +7 -0
  2388. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-form.component.ts +88 -0
  2389. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list-actions-cell.component.ts +75 -0
  2390. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list.component.ts +318 -0
  2391. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/index.ts +7 -0
  2392. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/index.ts +8 -0
  2393. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.detail-config.ts +12 -0
  2394. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.graphql.ts +224 -0
  2395. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.list-config.ts +13 -0
  2396. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.resolvers.ts +65 -0
  2397. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/index.ts +7 -0
  2398. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-form.component.ts +168 -0
  2399. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list-actions-cell.component.ts +75 -0
  2400. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list.component.ts +330 -0
  2401. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/index.ts +7 -0
  2402. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/tenant.columns.ts +103 -0
  2403. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.detail-config.ts +12 -0
  2404. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.graphql.ts +204 -0
  2405. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.list-config.ts +13 -0
  2406. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/index.ts +8 -0
  2407. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.detail-config.ts +11 -0
  2408. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.graphql.ts +180 -0
  2409. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.list-config.ts +13 -0
  2410. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.resolvers.ts +39 -0
  2411. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/features/index.ts +5 -0
  2412. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/index.ts +6 -0
  2413. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.spec.ts +262 -0
  2414. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.ts +156 -0
  2415. package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/en.json +7 -5
  2416. package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/es.json +8 -6
  2417. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/access-token.columns.ts +86 -0
  2418. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.detail-config.ts +10 -0
  2419. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.graphql.ts +117 -0
  2420. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.list-config.ts +13 -0
  2421. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.resolvers.ts +43 -0
  2422. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/index.ts +8 -0
  2423. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/access-token-list-actions-cell.component.ts +60 -0
  2424. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/access-token-list.component.ts +224 -0
  2425. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/index.ts +6 -0
  2426. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/index.ts +7 -0
  2427. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/application.columns.ts +78 -0
  2428. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.detail-config.ts +12 -0
  2429. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.graphql.ts +140 -0
  2430. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.list-config.ts +13 -0
  2431. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.resolvers.ts +39 -0
  2432. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/index.ts +8 -0
  2433. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-form.component.ts +198 -0
  2434. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list-actions-cell.component.ts +75 -0
  2435. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list.component.ts +322 -0
  2436. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/index.ts +7 -0
  2437. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/index.ts +7 -0
  2438. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application-client/data-access/application-client.graphql.ts +158 -0
  2439. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/authorization-code.columns.ts +123 -0
  2440. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.detail-config.ts +12 -0
  2441. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.graphql.ts +168 -0
  2442. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.list-config.ts +13 -0
  2443. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.resolvers.ts +47 -0
  2444. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/index.ts +8 -0
  2445. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-form.component.ts +218 -0
  2446. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-list-actions-cell.component.ts +76 -0
  2447. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-list.component.ts +333 -0
  2448. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/index.ts +7 -0
  2449. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/index.ts +7 -0
  2450. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/client.columns.ts +145 -0
  2451. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.detail-config.ts +12 -0
  2452. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.graphql.ts +134 -0
  2453. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.list-config.ts +13 -0
  2454. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.resolvers.ts +69 -0
  2455. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/index.ts +8 -0
  2456. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-form.component.ts +291 -0
  2457. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list-actions-cell.component.ts +75 -0
  2458. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list.component.ts +335 -0
  2459. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/index.ts +7 -0
  2460. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/index.ts +7 -0
  2461. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth-icons.providers.ts +21 -0
  2462. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth.navigation.ts +59 -0
  2463. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth.routes.ts +44 -0
  2464. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/index.ts +8 -0
  2465. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.detail-config.ts +10 -0
  2466. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.graphql.ts +104 -0
  2467. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.list-config.ts +13 -0
  2468. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.resolvers.ts +39 -0
  2469. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/index.ts +6 -0
  2470. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/refresh-token-list-actions-cell.component.ts +60 -0
  2471. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/refresh-token-list.component.ts +221 -0
  2472. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/index.ts +7 -0
  2473. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/refresh-token.columns.ts +60 -0
  2474. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/index.ts +8 -0
  2475. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.detail-config.ts +12 -0
  2476. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.graphql.ts +120 -0
  2477. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.list-config.ts +13 -0
  2478. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.resolvers.ts +39 -0
  2479. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/index.ts +7 -0
  2480. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.spec.ts +75 -0
  2481. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.ts +116 -0
  2482. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list-actions-cell.component.ts +75 -0
  2483. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list.component.ts +318 -0
  2484. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/index.ts +7 -0
  2485. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.spec.ts +338 -0
  2486. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.ts +230 -0
  2487. package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/en.json +92 -0
  2488. package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/es.json +92 -0
  2489. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/index.ts +1 -0
  2490. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.graphql.ts +214 -0
  2491. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.service.ts +301 -0
  2492. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.spec.ts +281 -0
  2493. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.ts +87 -0
  2494. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.spec.ts +345 -0
  2495. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.ts +246 -0
  2496. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-drawer.component.ts +492 -0
  2497. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-detail.component.ts +666 -0
  2498. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-list.component.ts +547 -0
  2499. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/index.ts +6 -0
  2500. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager-icons.providers.ts +5 -0
  2501. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.navigation.ts +11 -0
  2502. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.routes.ts +15 -0
  2503. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.spec.ts +154 -0
  2504. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.ts +192 -0
  2505. package/dist/templates/monorepo/.backlog/config.yml +41 -0
  2506. package/dist/templates/monorepo/.claude/agents/jd-fix-agent.md +35 -0
  2507. package/dist/templates/monorepo/.claude/agents/jd-judge-a.md +41 -0
  2508. package/dist/templates/monorepo/.claude/agents/jd-judge-b.md +41 -0
  2509. package/dist/templates/monorepo/.claude/commands/business-rules/audit.md +2 -0
  2510. package/dist/templates/monorepo/.claude/commands/business-rules/check.md +2 -0
  2511. package/dist/templates/monorepo/.claude/commands/business-rules/document.md +4 -1
  2512. package/dist/templates/monorepo/.claude/commands/business-rules/promote.md +2 -0
  2513. package/dist/templates/monorepo/.claude/commands/opsx/apply.md +36 -7
  2514. package/dist/templates/monorepo/.claude/commands/opsx/archive.md +91 -26
  2515. package/dist/templates/monorepo/.claude/commands/opsx/explore.md +51 -27
  2516. package/dist/templates/monorepo/.claude/commands/opsx/propose.md +64 -26
  2517. package/dist/templates/monorepo/.claude/commands/opsx/sync.md +258 -0
  2518. package/dist/templates/monorepo/.claude/hooks/__fixtures__/br-hr-regression-baseline.txt +263 -0
  2519. package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.test.ts +470 -0
  2520. package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.ts +395 -43
  2521. package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.test.ts +158 -0
  2522. package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.ts +314 -0
  2523. package/dist/templates/monorepo/.claude/hooks/business-rules-injector.test.ts +387 -0
  2524. package/dist/templates/monorepo/.claude/hooks/business-rules-injector.ts +231 -0
  2525. package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.test.ts +114 -0
  2526. package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.ts +260 -0
  2527. package/dist/templates/monorepo/.claude/hooks/check-required-setup.test.ts +183 -0
  2528. package/dist/templates/monorepo/.claude/hooks/check-required-setup.ts +304 -0
  2529. package/dist/templates/monorepo/.claude/hooks/format-with-prettier.ts +98 -0
  2530. package/dist/templates/monorepo/.claude/hooks/harness-rules-content-guard.ts +12 -7
  2531. package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.test.ts +453 -0
  2532. package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.ts +526 -0
  2533. package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.test.ts +131 -0
  2534. package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.ts +132 -0
  2535. package/dist/templates/monorepo/.claude/hooks/lint-barrels.test.ts +237 -0
  2536. package/dist/templates/monorepo/.claude/hooks/lint-barrels.ts +319 -0
  2537. package/dist/templates/monorepo/.claude/rules/route-aurora-components.md +24 -0
  2538. package/dist/templates/monorepo/.claude/rules/route-aurora-yaml.md +29 -0
  2539. package/dist/templates/monorepo/.claude/rules/route-backend-test.md +31 -0
  2540. package/dist/templates/monorepo/.claude/rules/route-drizzle-schema.md +35 -0
  2541. package/dist/templates/monorepo/.claude/rules/route-eta.md +17 -0
  2542. package/dist/templates/monorepo/.claude/rules/route-skill-md.md +28 -0
  2543. package/dist/templates/monorepo/.claude/rules/scope-backend.md +39 -0
  2544. package/dist/templates/monorepo/.claude/rules/scope-cli.md +28 -0
  2545. package/dist/templates/monorepo/.claude/rules/scope-frontend.md +34 -0
  2546. package/dist/templates/monorepo/.claude/scheduled_tasks.lock +1 -0
  2547. package/dist/templates/monorepo/.claude/scripts/catalyst-dev-mode.sh +2 -3
  2548. package/dist/templates/monorepo/.claude/scripts/daily-tips.txt +1 -0
  2549. package/dist/templates/monorepo/.claude/scripts/generate-skills-index.test.ts +397 -0
  2550. package/dist/templates/monorepo/.claude/scripts/generate-skills-index.ts +196 -23
  2551. package/dist/templates/monorepo/.claude/scripts/status-line.sh +13 -2
  2552. package/dist/templates/monorepo/.claude/settings.json +106 -17
  2553. package/dist/templates/monorepo/.claude/skills/REGISTRY.md +61 -28
  2554. package/dist/templates/monorepo/.claude/skills/business-rules-guard/SKILL.md +15 -2
  2555. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/audit.md +9 -7
  2556. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/format.md +70 -2
  2557. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/workflow.md +2 -1
  2558. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/SKILL.md +954 -0
  2559. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/frontier-worker-addendum.md +145 -0
  2560. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/worker-system-prompt.md +88 -0
  2561. package/dist/templates/monorepo/.claude/skills/catalyst-cli/SKILL.md +117 -38
  2562. package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/origin-conciliation.md +188 -20
  2563. package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/schema-versioning.md +1 -1
  2564. package/dist/templates/monorepo/.claude/skills/catalyst-delegation/SKILL.md +180 -0
  2565. package/dist/templates/monorepo/.claude/skills/catalyst-langs/SKILL.md +241 -0
  2566. package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/SKILL.md +236 -0
  2567. package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/references/query-language.md +265 -0
  2568. package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/SKILL.md +232 -0
  2569. package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/references/cube-authoring.md +155 -0
  2570. package/dist/templates/monorepo/.claude/skills/catalyst-schema/SKILL.md +94 -30
  2571. package/dist/templates/monorepo/.claude/skills/catalyst-schema/front-presentation.md +209 -0
  2572. package/dist/templates/monorepo/.claude/skills/catalyst-schema/patterns-workflow.md +26 -2
  2573. package/dist/templates/monorepo/.claude/skills/catalyst-schema/types-reference.md +184 -2
  2574. package/dist/templates/monorepo/.claude/skills/catalyst-skill-creator/SKILL.md +10 -2
  2575. package/dist/templates/monorepo/.claude/skills/catalyst-update-skill-registry/SKILL.md +54 -16
  2576. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/SKILL.md +24 -14
  2577. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/audit.md +384 -0
  2578. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/enforcement.md +7 -6
  2579. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/format.md +140 -6
  2580. package/dist/templates/monorepo/.claude/skills/judgment-day/SKILL.md +26 -15
  2581. package/dist/templates/monorepo/.claude/skills/judgment-day/references/prompts-and-formats.md +46 -21
  2582. package/dist/templates/monorepo/.claude/skills/openspec-apply-change/SKILL.md +35 -6
  2583. package/dist/templates/monorepo/.claude/skills/openspec-archive-change/SKILL.md +87 -22
  2584. package/dist/templates/monorepo/.claude/skills/openspec-explore/SKILL.md +89 -65
  2585. package/dist/templates/monorepo/.claude/skills/openspec-propose/SKILL.md +62 -24
  2586. package/dist/templates/monorepo/.claude/skills/openspec-sync-specs/SKILL.md +262 -0
  2587. package/dist/templates/monorepo/.claude/skills/typescript/SKILL.md +5 -0
  2588. package/dist/templates/monorepo/.claude/skills-triggers-index.json +135 -0
  2589. package/dist/templates/monorepo/.husky/post-checkout +17 -0
  2590. package/dist/templates/monorepo/.husky/post-merge +15 -0
  2591. package/dist/templates/monorepo/.husky/pre-commit +26 -0
  2592. package/dist/templates/monorepo/.mcp.json +7 -0
  2593. package/dist/templates/monorepo/CLAUDE.md +274 -327
  2594. package/dist/templates/monorepo/cliter/business-rules-index.json +9252 -269
  2595. package/dist/templates/monorepo/cliter/harness-rules/barrels.md +414 -0
  2596. package/dist/templates/monorepo/cliter/harness-rules/bridges.md +211 -0
  2597. package/dist/templates/monorepo/cliter/harness-rules/dev-modes.md +85 -0
  2598. package/dist/templates/monorepo/cliter/harness-rules/docs-location.md +67 -0
  2599. package/dist/templates/monorepo/cliter/harness-rules/generated-artifacts.md +104 -0
  2600. package/dist/templates/monorepo/cliter/harness-rules/generated-code.md +77 -0
  2601. package/dist/templates/monorepo/cliter/harness-rules/module-graph.md +89 -0
  2602. package/dist/templates/monorepo/cliter/harness-rules/modules.md +78 -0
  2603. package/dist/templates/monorepo/cliter/harness-rules/persistence-integrity.md +92 -0
  2604. package/dist/templates/monorepo/cliter/harness-rules/ports-adapters.md +82 -0
  2605. package/dist/templates/monorepo/cliter/harness-rules/protocol-flows.md +88 -0
  2606. package/dist/templates/monorepo/cliter/harness-rules/types-acl.md +93 -0
  2607. package/dist/templates/monorepo/cliter/harness-rules-index.json +1117 -0
  2608. package/dist/templates/monorepo/docs/AURORA-CATALYST-BRIEF.md +253 -0
  2609. package/dist/templates/monorepo/docs/_catalog-schema-base.json +1 -1
  2610. package/dist/templates/monorepo/docs/business-rules/ARCHITECTURE.md +14 -11
  2611. package/dist/templates/monorepo/docs/business-rules/INDEX.md +84 -5
  2612. package/dist/templates/monorepo/docs/business-rules/MIGRATION.md +11 -52
  2613. package/dist/templates/monorepo/docs/business-rules/README.md +42 -925
  2614. package/dist/templates/monorepo/docs/harness-rules/INDEX.md +14 -7
  2615. package/dist/templates/monorepo/docs/harness-rules/README.md +37 -393
  2616. package/dist/templates/monorepo/docs/langs/README.md +260 -0
  2617. package/dist/templates/monorepo/docs/superpowers/specs/2026-07-02-report-creator-skill-design.md +176 -0
  2618. package/dist/templates/monorepo/openspec/config.yaml +38 -10
  2619. package/dist/templates/monorepo/package.json +16 -3
  2620. package/dist/templates/monorepo/pnpm-workspace.yaml +10 -2
  2621. package/dist/templates/monorepo/scripts/_catalog-runtime/README.md +30 -0
  2622. package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.determinism.test.ts +81 -0
  2623. package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.ts +214 -0
  2624. package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.test.ts +146 -0
  2625. package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.ts +120 -0
  2626. package/dist/templates/monorepo/scripts/_catalog-runtime/check-core.ts +280 -0
  2627. package/dist/templates/monorepo/scripts/_catalog-runtime/cli.ts +26 -0
  2628. package/dist/templates/monorepo/scripts/_catalog-runtime/frontmatter.ts +15 -0
  2629. package/dist/templates/monorepo/scripts/_catalog-runtime/glob.ts +86 -0
  2630. package/dist/templates/monorepo/scripts/_catalog-runtime/index.ts +74 -0
  2631. package/dist/templates/monorepo/scripts/_catalog-runtime/parse.ts +159 -0
  2632. package/dist/templates/monorepo/scripts/_catalog-runtime/repo-root.ts +36 -0
  2633. package/dist/templates/monorepo/scripts/_catalog-runtime/types.ts +154 -0
  2634. package/dist/templates/monorepo/scripts/_catalog-runtime/validate.ts +254 -0
  2635. package/dist/templates/monorepo/scripts/backlog/README.md +689 -0
  2636. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-budget.jsonl +10 -0
  2637. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-crash.jsonl +9 -0
  2638. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-max-turns.jsonl +10 -0
  2639. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance-prose.jsonl +5 -0
  2640. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance.jsonl +10 -0
  2641. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-success.jsonl +10 -0
  2642. package/dist/templates/monorepo/scripts/backlog/attempt.test.ts +290 -0
  2643. package/dist/templates/monorepo/scripts/backlog/attempt.ts +181 -0
  2644. package/dist/templates/monorepo/scripts/backlog/close.test.ts +3932 -0
  2645. package/dist/templates/monorepo/scripts/backlog/close.ts +2499 -0
  2646. package/dist/templates/monorepo/scripts/backlog/contract.test.ts +174 -0
  2647. package/dist/templates/monorepo/scripts/backlog/dev.aurora.backlog-dispatch.plist +81 -0
  2648. package/dist/templates/monorepo/scripts/backlog/dispatch.test.ts +3270 -0
  2649. package/dist/templates/monorepo/scripts/backlog/dispatch.ts +2718 -0
  2650. package/dist/templates/monorepo/scripts/backlog/entry.test.ts +1654 -0
  2651. package/dist/templates/monorepo/scripts/backlog/entry.ts +791 -0
  2652. package/dist/templates/monorepo/scripts/backlog/graph-cli.ts +70 -0
  2653. package/dist/templates/monorepo/scripts/backlog/graph.test.ts +800 -0
  2654. package/dist/templates/monorepo/scripts/backlog/graph.ts +386 -0
  2655. package/dist/templates/monorepo/scripts/backlog/guards.test.ts +2259 -0
  2656. package/dist/templates/monorepo/scripts/backlog/guards.ts +1452 -0
  2657. package/dist/templates/monorepo/scripts/backlog/lanes/frontier.settings.json +116 -0
  2658. package/dist/templates/monorepo/scripts/backlog/lanes/local.settings.json +64 -0
  2659. package/dist/templates/monorepo/scripts/backlog/lanes.json +28 -0
  2660. package/dist/templates/monorepo/scripts/backlog/launch.test.ts +3126 -0
  2661. package/dist/templates/monorepo/scripts/backlog/launch.ts +1125 -0
  2662. package/dist/templates/monorepo/scripts/backlog/maintenance.test.ts +2642 -0
  2663. package/dist/templates/monorepo/scripts/backlog/maintenance.ts +1483 -0
  2664. package/dist/templates/monorepo/scripts/backlog/notify.test.ts +60 -0
  2665. package/dist/templates/monorepo/scripts/backlog/notify.ts +47 -0
  2666. package/dist/templates/monorepo/scripts/backlog/parent.test.ts +221 -0
  2667. package/dist/templates/monorepo/scripts/backlog/parent.ts +174 -0
  2668. package/dist/templates/monorepo/scripts/backlog/prompt.test.ts +928 -0
  2669. package/dist/templates/monorepo/scripts/backlog/prompt.ts +622 -0
  2670. package/dist/templates/monorepo/scripts/backlog/render.test.ts +318 -0
  2671. package/dist/templates/monorepo/scripts/backlog/render.ts +351 -0
  2672. package/dist/templates/monorepo/scripts/backlog/reviewer.test.ts +354 -0
  2673. package/dist/templates/monorepo/scripts/backlog/reviewer.ts +308 -0
  2674. package/dist/templates/monorepo/scripts/backlog/slots.test.ts +1179 -0
  2675. package/dist/templates/monorepo/scripts/backlog/slots.ts +752 -0
  2676. package/dist/templates/monorepo/scripts/backlog/task-view.test.ts +918 -0
  2677. package/dist/templates/monorepo/scripts/backlog/task-view.ts +513 -0
  2678. package/dist/templates/monorepo/scripts/backlog/types.ts +286 -0
  2679. package/dist/templates/monorepo/scripts/backlog/watch.test.ts +505 -0
  2680. package/dist/templates/monorepo/scripts/backlog/watch.ts +449 -0
  2681. package/dist/templates/monorepo/scripts/backlog/worker-edit.test.ts +484 -0
  2682. package/dist/templates/monorepo/scripts/backlog/worker-edit.ts +477 -0
  2683. package/dist/templates/monorepo/scripts/business-rules/document.ts +2 -1
  2684. package/dist/templates/monorepo/scripts/business-rules/parse-catalog.ts +2 -1
  2685. package/dist/templates/monorepo/scripts/catalyst/regen-review.test.ts +313 -0
  2686. package/dist/templates/monorepo/scripts/catalyst/regen-review.ts +287 -0
  2687. package/dist/templates/monorepo/scripts/harness-rules/audit.ts +620 -0
  2688. package/dist/templates/monorepo/scripts/harness-rules/check.ts +37 -0
  2689. package/dist/templates/monorepo/scripts/harness-rules/generate-index.ts +215 -0
  2690. package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.test.ts +1125 -0
  2691. package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.ts +1059 -0
  2692. package/dist/templates/monorepo/scripts/harness-rules/types.ts +62 -0
  2693. package/dist/templates/monorepo/scripts/harness-rules/validate-catalog.ts +121 -0
  2694. package/oclif.manifest.json +74 -74
  2695. package/package.json +14 -10
  2696. package/dist/generator/engine/code-writer/export-references.d.ts +0 -10
  2697. package/dist/generator/engine/code-writer/export-references.js +0 -69
  2698. package/dist/templates/backend/application/eslint.config.mjs +0 -40
  2699. package/dist/templates/backend/application/src/@aurora/services/bootstrap.service.ts +0 -20
  2700. package/dist/templates/backend/application/src/i18n/en/iam.json +0 -18
  2701. package/dist/templates/backend/application/src/i18n/es/iam.json +0 -18
  2702. package/dist/templates/backend/application/test/authentication-none-mode.e2e-spec.ts +0 -138
  2703. package/dist/templates/backend/application/test/jest-e2e.json +0 -18
  2704. package/dist/templates/backend/application/test/mocks/mime.mock.ts +0 -10
  2705. package/dist/templates/backend/application/test/mocks/uuid.mock.ts +0 -17
  2706. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.handler.ts +0 -26
  2707. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.model.ts +0 -197
  2708. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.repository.ts +0 -71
  2709. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.model.ts +0 -94
  2710. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.repository.ts +0 -24
  2711. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.model.ts +0 -93
  2712. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.repository.ts +0 -61
  2713. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.model.ts +0 -48
  2714. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.repository.ts +0 -24
  2715. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.model.ts +0 -116
  2716. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.repository.ts +0 -68
  2717. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.model.ts +0 -48
  2718. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.repository.ts +0 -24
  2719. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.model.ts +0 -70
  2720. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.repository.ts +0 -21
  2721. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.model.ts +0 -121
  2722. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.repository.ts +0 -57
  2723. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.model.ts +0 -48
  2724. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.repository.ts +0 -24
  2725. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.model.ts +0 -144
  2726. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.repository.ts +0 -21
  2727. package/dist/templates/backend/packages/iam/src/@bridges/iam/index.ts +0 -3
  2728. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/index.ts +0 -1
  2729. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.model.ts +0 -118
  2730. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.repository.ts +0 -24
  2731. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.model.ts +0 -101
  2732. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.repository.ts +0 -61
  2733. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.model.ts +0 -48
  2734. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.repository.ts +0 -24
  2735. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.model.ts +0 -146
  2736. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.repository.ts +0 -44
  2737. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.model.ts +0 -146
  2738. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.repository.ts +0 -57
  2739. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.model.ts +0 -139
  2740. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.repository.ts +0 -24
  2741. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.model.ts +0 -98
  2742. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.repository.ts +0 -24
  2743. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.model.ts +0 -84
  2744. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.repository.ts +0 -24
  2745. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/index.ts +0 -1
  2746. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.model.ts.eta +0 -213
  2747. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.repository.ts.eta +0 -94
  2748. package/dist/templates/codegen/partials/declare-i18n-repository.eta +0 -3
  2749. package/dist/templates/codegen/partials/import-i18n-repository.eta +0 -3
  2750. package/dist/templates/frontend/application/libs/ui/icon/src/index.ts +0 -7
  2751. package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.token.ts +0 -20
  2752. package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.ts +0 -42
  2753. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.spec.ts +0 -141
  2754. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.ts +0 -47
  2755. package/dist/templates/frontend/application/src/@aurora/modules/graphql/parse-gql-fields.ts +0 -32
  2756. package/dist/templates/frontend/application/src/app/aurora.types.ts +0 -2671
  2757. package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/dashboard.routes.ts +0 -8
  2758. package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/features/dashboard.component.ts +0 -13
  2759. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-projects.ts +0 -106
  2760. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.detail-config.ts +0 -13
  2761. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.graphql.ts +0 -291
  2762. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.list-config.ts +0 -12
  2763. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.resolvers.ts +0 -121
  2764. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/current-account.adapter.ts +0 -34
  2765. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-detail.component.ts +0 -165
  2766. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-form.component.ts +0 -915
  2767. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list-actions-cell.component.ts +0 -85
  2768. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list.component.ts +0 -260
  2769. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/index.ts +0 -8
  2770. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.detail-config.ts +0 -18
  2771. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.graphql.ts +0 -158
  2772. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.list-config.ts +0 -12
  2773. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.resolvers.ts +0 -36
  2774. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-detail.component.ts +0 -157
  2775. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-form.component.ts +0 -154
  2776. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-list-actions-cell.component.ts +0 -85
  2777. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-list.component.ts +0 -247
  2778. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/index.ts +0 -7
  2779. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam-icons.providers.ts +0 -23
  2780. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.navigation.ts +0 -42
  2781. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.routes.ts +0 -98
  2782. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.detail-config.ts +0 -13
  2783. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.graphql.ts +0 -163
  2784. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.list-config.ts +0 -12
  2785. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.resolvers.ts +0 -72
  2786. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form-embed.component.ts +0 -99
  2787. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form.component.ts +0 -141
  2788. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list-actions-cell.component.ts +0 -85
  2789. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list.component.ts +0 -404
  2790. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/index.ts +0 -7
  2791. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/permission.columns.ts +0 -56
  2792. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.detail-config.ts +0 -18
  2793. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.graphql.ts +0 -148
  2794. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.list-config.ts +0 -12
  2795. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.resolvers.ts +0 -40
  2796. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/index.ts +0 -7
  2797. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/permission-role.columns.ts +0 -38
  2798. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.detail-config.ts +0 -13
  2799. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.graphql.ts +0 -207
  2800. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.list-config.ts +0 -12
  2801. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.resolvers.ts +0 -68
  2802. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-detail.component.ts +0 -312
  2803. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-form.component.ts +0 -162
  2804. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list-actions-cell.component.ts +0 -85
  2805. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list.component.ts +0 -248
  2806. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/index.ts +0 -7
  2807. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/role.columns.ts +0 -85
  2808. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.detail-config.ts +0 -13
  2809. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.graphql.ts +0 -158
  2810. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.list-config.ts +0 -12
  2811. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-email.validator.ts +0 -31
  2812. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-username.validator.ts +0 -29
  2813. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.detail-config.ts +0 -13
  2814. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.graphql.ts +0 -129
  2815. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.list-config.ts +0 -14
  2816. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.resolvers.ts +0 -36
  2817. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-form.component.ts +0 -93
  2818. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list-actions-cell.component.ts +0 -85
  2819. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list.component.ts +0 -321
  2820. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/index.ts +0 -7
  2821. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.detail-config.ts +0 -13
  2822. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.graphql.ts +0 -203
  2823. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.list-config.ts +0 -12
  2824. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.resolvers.ts +0 -71
  2825. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-form.component.ts +0 -169
  2826. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list-actions-cell.component.ts +0 -85
  2827. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list.component.ts +0 -333
  2828. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/index.ts +0 -7
  2829. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/tenant.columns.ts +0 -86
  2830. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.detail-config.ts +0 -18
  2831. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.graphql.ts +0 -158
  2832. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.list-config.ts +0 -12
  2833. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.resolvers.ts +0 -40
  2834. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/index.ts +0 -7
  2835. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/tenant-account.columns.ts +0 -38
  2836. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.detail-config.ts +0 -13
  2837. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.graphql.ts +0 -152
  2838. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.list-config.ts +0 -12
  2839. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.resolvers.ts +0 -36
  2840. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-detail.component.ts +0 -124
  2841. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-form.component.ts +0 -215
  2842. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list-actions-cell.component.ts +0 -85
  2843. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list.component.ts +0 -237
  2844. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/index.ts +0 -7
  2845. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/user.columns.ts +0 -124
  2846. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/access-token.columns.ts +0 -97
  2847. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.detail-config.ts +0 -13
  2848. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.graphql.ts +0 -155
  2849. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.list-config.ts +0 -12
  2850. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/data-access/access-token.resolvers.ts +0 -40
  2851. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-form.component.ts +0 -152
  2852. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-list-actions-cell.component.ts +0 -85
  2853. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/features/access-token-list.component.ts +0 -331
  2854. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/index.ts +0 -7
  2855. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/application.columns.ts +0 -73
  2856. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.detail-config.ts +0 -13
  2857. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.graphql.ts +0 -146
  2858. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.list-config.ts +0 -14
  2859. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.resolvers.ts +0 -36
  2860. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-form.component.ts +0 -160
  2861. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-list-actions-cell.component.ts +0 -85
  2862. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-list.component.ts +0 -326
  2863. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/index.ts +0 -7
  2864. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application-client/data-access/application-client.graphql.ts +0 -155
  2865. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/authorization-code.columns.ts +0 -123
  2866. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.detail-config.ts +0 -18
  2867. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.graphql.ts +0 -146
  2868. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.list-config.ts +0 -19
  2869. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/data-access/authorization-code.resolvers.ts +0 -44
  2870. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-form.component.ts +0 -202
  2871. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-list-actions-cell.component.ts +0 -86
  2872. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/features/authorization-code-list.component.ts +0 -337
  2873. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/index.ts +0 -7
  2874. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/client.columns.ts +0 -140
  2875. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.detail-config.ts +0 -13
  2876. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.graphql.ts +0 -141
  2877. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.list-config.ts +0 -14
  2878. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.resolvers.ts +0 -97
  2879. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-form.component.ts +0 -358
  2880. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-list-actions-cell.component.ts +0 -85
  2881. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-list.component.ts +0 -359
  2882. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/index.ts +0 -7
  2883. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth-icons.providers.ts +0 -21
  2884. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth.navigation.ts +0 -52
  2885. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth.routes.ts +0 -44
  2886. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.detail-config.ts +0 -13
  2887. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.graphql.ts +0 -132
  2888. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.list-config.ts +0 -12
  2889. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/data-access/refresh-token.resolvers.ts +0 -36
  2890. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-form.component.ts +0 -131
  2891. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-list-actions-cell.component.ts +0 -85
  2892. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/features/refresh-token-list.component.ts +0 -330
  2893. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/index.ts +0 -7
  2894. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/refresh-token.columns.ts +0 -59
  2895. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.detail-config.ts +0 -13
  2896. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.graphql.ts +0 -131
  2897. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.list-config.ts +0 -14
  2898. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.resolvers.ts +0 -36
  2899. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-form.component.ts +0 -119
  2900. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-list-actions-cell.component.ts +0 -85
  2901. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-list.component.ts +0 -321
  2902. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/index.ts +0 -7
  2903. package/dist/templates/monorepo/.claude/hooks/check-required-plugins.ts +0 -112
  2904. package/dist/templates/monorepo/.claude/hooks/inject-rules-context.ts +0 -267
  2905. package/dist/templates/monorepo/.vscode/settings.json +0 -10
  2906. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/account/account.columns.ts +0 -0
  2907. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/bounded-context/bounded-context.columns.ts +0 -0
  2908. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/iam.types.ts +0 -0
  2909. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/index.ts +0 -0
  2910. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/shared/index.ts +0 -0
  2911. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/tag/tag.columns.ts +0 -0
  2912. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/application-client/data-access/application-client.detail-config.ts +0 -0
  2913. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/application-client/data-access/application-client.list-config.ts +0 -0
  2914. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/index.ts +0 -0
  2915. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/o-auth.types.ts +0 -0
  2916. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/scope/scope.columns.ts +0 -0
@@ -0,0 +1,2718 @@
1
+ /**
2
+ * dispatch.ts — the reconciler's executable entry point. Every trigger (`onStatusChange`, the
3
+ * launchd timer, a `gh`-poll) invokes exactly this script (spec: "Three dispatch triggers").
4
+ *
5
+ * Builds the REAL collaborators (real fs under `.backlog/.dispatch/`, real `git`/`gh`/`backlog`
6
+ * CLI shell-outs, a real `claude` spawn) and calls `runOnce` from `entry.ts` — every actual
7
+ * decision (maintenance order, the anti-loop guard, task selection, the six guards, the model
8
+ * readiness gate, the close ordering, the scope diff, the reviewer verdict, the AC/DoD gate) lives
9
+ * in the pure/injectable modules this file only wires together. See those modules' own tests for
10
+ * the decisions themselves; this file has no test of its own beyond the manual smoke run recorded
11
+ * in tasks.md 9.
12
+ *
13
+ * Process model (design.md's Tramo 7, README's "process model"): the pass holds the single-flight
14
+ * lock only until the slot is taken and the task is `In Progress` — `entry.ts` then calls
15
+ * `releaseSingleFlight`, and this process lives on, detached by the callback's `nohup`, until its
16
+ * worker exits. `launch.ts`'s `spawnWorker` runs the worker ASYNCHRONOUSLY and streams its stdout
17
+ * line by line into the attempt's `stream.jsonl`, which is also what refreshes the task lock's
18
+ * heartbeat. A concurrent invocation can therefore run its own maintenance pass and dispatch a
19
+ * second frontier task while this one is still streaming.
20
+ *
21
+ * Remaining simplification, deliberate: `ctx.tasks` is fetched once per pass, before maintenance's
22
+ * edits, so a maintenance-driven status change is only visible to task selection on the NEXT pass.
23
+ * Every trigger re-invokes this script, so it self-heals within one interval — never permanent
24
+ * staleness.
25
+ */
26
+ import { execFileSync } from 'node:child_process';
27
+ import fs from 'node:fs';
28
+ import os from 'node:os';
29
+ import path from 'node:path';
30
+ import { fileURLToPath } from 'node:url';
31
+ import { isSkillTriggerIndex, loadJsonIndex } from '../_catalog-runtime/index.js';
32
+ import {
33
+ countAttempts,
34
+ createAttemptDir,
35
+ createAttemptSink,
36
+ hasCloseAttemptBeenEnqueued,
37
+ markCloseAttemptEnqueued,
38
+ } from './attempt.js';
39
+ import {
40
+ buildAttemptCommitMessage,
41
+ buildPrBodyArgs,
42
+ buildPrCreateArgs,
43
+ buildPrLabelArgs,
44
+ buildPrReviewerArgs,
45
+ buildPrTitle,
46
+ buildWipCommitMessage,
47
+ checkBoardIntegrity,
48
+ collectAttemptDiff,
49
+ collectChangedFiles,
50
+ collectLeftoverFiles,
51
+ DOD_SCOPED_TESTS,
52
+ evaluateAcceptanceGate,
53
+ evaluateMechanicalCheckResult,
54
+ findOpenPrUrl,
55
+ formatBlockComment,
56
+ HARNESS_REVIEW_LABEL,
57
+ planMechanicalChecks,
58
+ readPrBody,
59
+ resolveBaseRef,
60
+ runMirrorRegen,
61
+ runScopeCheck,
62
+ upsertHumanReviewSection,
63
+ type CloseRunners,
64
+ } from './close.js';
65
+ import {
66
+ acquireSingleFlight,
67
+ formatOutcome,
68
+ isDispatcherOwnedCallback,
69
+ releaseSingleFlight,
70
+ resolveContext,
71
+ resolveMainCheckout,
72
+ runOnce,
73
+ shouldDispatchFromCallback,
74
+ type RunOnceContext,
75
+ type SingleFlightFs,
76
+ type SingleFlightResult,
77
+ } from './entry.js';
78
+ import { SECURITY_PATH_PATTERNS } from './guards.js';
79
+ import {
80
+ checkLocalModelLoaded,
81
+ killProcessTree,
82
+ loadLaneConfig,
83
+ loadSettingsAllowRules,
84
+ resetInjectorCache,
85
+ resolveOrphanInProgressThresholdMs,
86
+ settingsSourcePaths,
87
+ spawnWorker,
88
+ type FrontierLaneSettings,
89
+ type LocalLaneSettings,
90
+ } from './launch.js';
91
+ import {
92
+ PR_MERGE_STATE,
93
+ recomputeParent,
94
+ REMOTE_BRANCH_DELETE_RESULT,
95
+ toDerivationNode,
96
+ type MaintenanceContext,
97
+ type MaintenanceGit,
98
+ type PrMergeState,
99
+ type RemoteBranchDeleteResult,
100
+ } from './maintenance.js';
101
+ import { notify, type OsascriptRunner } from './notify.js';
102
+ import { effectiveStatus } from './parent.js';
103
+ import { classifyStreamOutcome } from './render.js';
104
+ import {
105
+ assembleExecutorPrompt,
106
+ buildFrontierAddendum,
107
+ buildFrontierPrompt,
108
+ buildParentCloseAttemptPrompt,
109
+ computeHookOutputs,
110
+ extractDelegationContract,
111
+ isParentCloseAttempt,
112
+ matchSkillPaths,
113
+ parseAcceptanceCriteria,
114
+ parseDefinitionOfDone,
115
+ parseIndexedAcceptanceCriteria,
116
+ parseLastComment,
117
+ type HookRunners,
118
+ type OperatingEnvelope,
119
+ } from './prompt.js';
120
+ import { parseReviewerVerdict, reviewerEnv, runReviewer } from './reviewer.js';
121
+ import {
122
+ computeLockfileHash,
123
+ createRegistryLock,
124
+ detachSlot,
125
+ isLockAlive,
126
+ isProcessAlive,
127
+ needsCliInstall,
128
+ needsInstall,
129
+ provisionCliDependencies,
130
+ provisionSlot,
131
+ readLock,
132
+ refreshHeartbeat,
133
+ releaseHeldSlotEntries,
134
+ releaseLock,
135
+ releaseSlotAndDetach,
136
+ slotPathForTask,
137
+ updateSlots,
138
+ type SlotRegistryStore,
139
+ } from './slots.js';
140
+ import {
141
+ findOwnedDefinitionOfDone,
142
+ notesRegion,
143
+ parseBoardTaskIds,
144
+ parseDescription,
145
+ parseTaskStatus,
146
+ parseTaskTitle,
147
+ parseTaskView,
148
+ } from './task-view.js';
149
+ import {
150
+ LANE,
151
+ TASK_STATUS,
152
+ type BoardLoad,
153
+ type DispatchLock,
154
+ type SlotRegistry,
155
+ type Task,
156
+ type TaskStatus,
157
+ } from './types.js';
158
+ import { workerEditCommand } from './worker-edit.js';
159
+
160
+ const DISPATCH_SUBDIR = '.backlog/.dispatch';
161
+ const SKILL_TRIGGERS_INDEX_FILE = '.claude/skills-triggers-index.json';
162
+ const DELEGATION_CONTRACT_FILE = '.claude/skills/catalyst-delegation/SKILL.md';
163
+ const WORKER_SYSTEM_PROMPT_FILE = '.claude/skills/catalyst-backlog/worker-system-prompt.md';
164
+ /**
165
+ * The local lane's `--append-system-prompt-file`, resolved ABSOLUTELY against the repository root
166
+ * the dispatcher itself runs from — never left relative (T-31 round 3).
167
+ *
168
+ * `launch.ts` spawns the executor with `cwd` = the SLOT, so a relative path made the worker's own
169
+ * system prompt a file read FROM the slot: an instruction channel the attempt can write to, and one
170
+ * `--bare` does not close, because the flag is explicit on the command line. The frontier lane
171
+ * already does it this way (`writeFrontierAddendum` hands back an absolute path under the main
172
+ * checkout), and this is the same class of asset as the lane settings files and the addendum
173
+ * template — code, not board data, so it hangs off `repoRoot`.
174
+ *
175
+ * Two other mechanisms bound the same hole today (the local lane denies `.claude/**` outright, and
176
+ * `.claude/` is in `LOCAL_FORBIDDEN_PATHS`), which is exactly the "one mechanism is not enough"
177
+ * situation the hard list exists for: resolving the path closes the channel instead of watching it.
178
+ */
179
+ export function resolveWorkerSystemPromptPath(repoRoot: string): string {
180
+ return path.join(repoRoot, WORKER_SYSTEM_PROMPT_FILE);
181
+ }
182
+
183
+ /** The frontier addendum's TEMPLATE — rendered per attempt by `prompt.ts`'s `buildFrontierAddendum`. */
184
+ const FRONTIER_ADDENDUM_TEMPLATE_PATH =
185
+ '.claude/skills/catalyst-backlog/frontier-worker-addendum.md';
186
+ const LINT_BARRELS_SCRIPT = 'hr:lint-barrels';
187
+ /**
188
+ * How long a lock may go without a heartbeat before it counts as dead. Read by the maintenance
189
+ * sweep AND by the manual `--release-slot` guard: two different answers to "is this worker alive"
190
+ * is how a rescue releases a slot the sweep still considers busy.
191
+ */
192
+ const LOCK_TTL_MS = 10 * 60_000;
193
+
194
+ /**
195
+ * T-97: how long a single external CLI call (git/gh/backlog/node) may block before it fails like
196
+ * any other failure of that call — never a new destructive path (AC2).
197
+ *
198
+ * Measured defect (2026-09-15): `git ls-remote --exit-code --heads origin <branch>`'s child `ssh` to
199
+ * github.com hung 2h23m holding the per-task lock. Nothing refreshes a lock's heartbeat while a
200
+ * synchronous subprocess blocks (see this file's own header on the process model), so a hang here
201
+ * only ever surfaces once the WHOLE `LOCK_TTL_MS` has elapsed and the maintenance sweep gives up on
202
+ * the pass — every other Queued task starves meanwhile. Bounded well UNDER `LOCK_TTL_MS`, on
203
+ * purpose: a call that took the full lock TTL to time out would already read as a dead worker by the
204
+ * time it failed, which is exactly the failure mode this bound exists to close.
205
+ */
206
+ export const EXTERNAL_CALL_TIMEOUT_MS = 60_000;
207
+
208
+ /**
209
+ * The close's own mechanical checks — prettier, the barrels lint, and the task's declared Test
210
+ * command — legitimately run for minutes, so they need a longer leash than
211
+ * `EXTERNAL_CALL_TIMEOUT_MS`. The same invariant still applies: a hang here must fail well before
212
+ * `LOCK_TTL_MS`, or the exact incident that produced this task's retry (a re-run of this suite's own
213
+ * `pnpm test:backlog`, synchronous, with no bound, exhausting the lock's heartbeat) recurs on the
214
+ * next hang instead of failing fast.
215
+ */
216
+ const MECHANICAL_CHECK_TIMEOUT_MS = 8 * 60_000;
217
+
218
+ /**
219
+ * The dispatcher-owned Definition-of-Done items, and the close step that PROVES each one. The close
220
+ * ticks them itself once that step passed — see `task-view.ts`'s `DISPATCHER_OWNED_DOD_PATTERNS`.
221
+ * `DOD_SCOPED_TESTS` comes from `close.ts` instead of being redeclared here: the pre-PR gate FAILS
222
+ * on that item still being unticked, so the tick and the check must read one pattern.
223
+ */
224
+ const DOD_PRETTIER_BARRELS = /prettier and barrels lint/i;
225
+ const DOD_EVERY_AC = /every acceptance criterion is checked/i;
226
+ const DOD_PR_OPENED = /pr opened to main/i;
227
+
228
+ // ── Board loader: `backlog task list/view --plain` → `Task[]` ─────────────────
229
+
230
+ function viewTask(mainCheckoutPath: string, taskId: string): string {
231
+ return execFileSync('backlog', ['task', 'view', taskId, '--plain'], {
232
+ cwd: mainCheckoutPath,
233
+ encoding: 'utf8',
234
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
235
+ });
236
+ }
237
+
238
+ /** The board reads `loadBoard` needs, injected so the loader is testable without a real CLI. */
239
+ export interface BoardReader {
240
+ /** `backlog task list --plain`. */
241
+ list: () => string;
242
+ /** `backlog task view <id> --plain`. */
243
+ view: (taskId: string) => string;
244
+ /** How many attempt directories this task already has. */
245
+ attempts: (taskId: string) => number;
246
+ }
247
+
248
+ /**
249
+ * The board, plus whether reading it succeeded in full. Pure over the injected reader.
250
+ *
251
+ * An id whose `task view` fails is DROPPED, never stubbed: a stub carries `To Do`, no labels and no
252
+ * declared files, which reads on the board as a real untriaged task and makes every dependency on it
253
+ * look unmet. What the drop must NOT do is stay silent — hence `complete`.
254
+ */
255
+ export function loadBoard(reader: BoardReader): BoardLoad {
256
+ let listOutput: string;
257
+ try {
258
+ listOutput = reader.list();
259
+ } catch (error) {
260
+ console.error(
261
+ 'dispatch.ts: backlog task list failed; reporting an INCOMPLETE empty board:',
262
+ error,
263
+ );
264
+ return { tasks: [], complete: false };
265
+ }
266
+
267
+ let complete = true;
268
+ const tasks = parseBoardTaskIds(listOutput).flatMap((id) => {
269
+ try {
270
+ return [parseTaskView({ id, output: reader.view(id), attempts: reader.attempts(id) })];
271
+ } catch (error) {
272
+ console.error(
273
+ `dispatch.ts: backlog task view ${id} failed; dropping it from this pass:`,
274
+ error,
275
+ );
276
+ complete = false;
277
+ return [];
278
+ }
279
+ });
280
+ return { tasks, complete };
281
+ }
282
+
283
+ /** Exported for `graph.ts`'s `backlog:graph` CLI, which reuses this reader rather than a second one. */
284
+ export function loadAllTasks(mainCheckoutPath: string): BoardLoad {
285
+ const dispatchRoot = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
286
+ return loadBoard({
287
+ list: () =>
288
+ execFileSync('backlog', ['task', 'list', '--plain'], {
289
+ cwd: mainCheckoutPath,
290
+ encoding: 'utf8',
291
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
292
+ }),
293
+ view: (taskId) => viewTask(mainCheckoutPath, taskId),
294
+ attempts: (taskId) => countAttempts(dispatchRoot, taskId),
295
+ });
296
+ }
297
+
298
+ // ── Real collaborators ─────────────────────────────────────────────────────────
299
+
300
+ /**
301
+ * `mainCheckoutPath` (possibly `BACKLOG_CWD`-overridden) is where BOARD DATA lives — `backlog` CLI
302
+ * calls, dispatch locks, `slots.json`. `repoRoot` (never overridden — always this machine's
303
+ * aurora-catalyst checkout, via `resolveMainCheckout`) is where the CODE assets `lanes.json`
304
+ * describes live: `scripts/backlog/lanes.json` itself, the lane settings files, and every worktree
305
+ * slot (`.claude/worktrees/dispatch-*`) is a checkout of THIS repo, not of whatever `BACKLOG_CWD`
306
+ * points at. Both resolve the same git topology (`resolveMainCheckout`, unaffected by whether `cwd`
307
+ * is the main checkout or one of its worktrees), so these two axes coincide in real production —
308
+ * where no `BACKLOG_CWD` override is set — and diverge only when one is: an isolated test run, or a
309
+ * manual/CI invocation pointing board data at a different project.
310
+ */
311
+ export function realMaintenanceFs(mainCheckoutPath: string, repoRoot: string) {
312
+ const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
313
+ const slotsPath = path.join(dispatchDir, 'slots.json');
314
+ const locksDir = path.join(dispatchDir, 'locks');
315
+
316
+ const readSlots = (): SlotRegistry => {
317
+ if (!fs.existsSync(slotsPath)) {
318
+ const laneConfig = loadLaneConfig(path.join(repoRoot, 'scripts/backlog/lanes.json'));
319
+ return {
320
+ slots: laneConfig.slots.map((name) => ({
321
+ name,
322
+ path: path.join(repoRoot, laneConfig.slotsRoot, name),
323
+ lane: null,
324
+ taskId: null,
325
+ pid: null,
326
+ lockfileHash: null,
327
+ })),
328
+ };
329
+ }
330
+ return JSON.parse(fs.readFileSync(slotsPath, 'utf8')) as SlotRegistry;
331
+ };
332
+
333
+ // ONE store, so every writer in this process goes through the same lock file. The lock lives
334
+ // beside the registry it guards; `updateSlots` re-reads inside it, so two concurrent passes can
335
+ // never overwrite each other's slot.
336
+ const store: SlotRegistryStore = {
337
+ readSlots,
338
+ writeSlots: (registry) => {
339
+ fs.mkdirSync(dispatchDir, { recursive: true });
340
+ fs.writeFileSync(slotsPath, JSON.stringify(registry, null, 2));
341
+ },
342
+ withLock: createRegistryLock(path.join(dispatchDir, 'slots.lock')),
343
+ };
344
+
345
+ return {
346
+ readSlots,
347
+ updateSlots: (mutate: (current: SlotRegistry) => SlotRegistry): SlotRegistry =>
348
+ updateSlots(store, mutate),
349
+ readLocks: (): DispatchLock[] => {
350
+ if (!fs.existsSync(locksDir)) {
351
+ return [];
352
+ }
353
+ return fs
354
+ .readdirSync(locksDir)
355
+ .filter((name) => name.endsWith('.json'))
356
+ .map(
357
+ (name) => JSON.parse(fs.readFileSync(path.join(locksDir, name), 'utf8')) as DispatchLock,
358
+ );
359
+ },
360
+ removeLock: (taskId: string): void => releaseLock(dispatchDir, taskId),
361
+ /**
362
+ * T-8 point 10's fourth orphan check: whether `.backlog/.dispatch/<taskId>/` exists at all —
363
+ * the same directory `createAttemptDir` opens BEFORE a worker starts. A task the dispatcher has
364
+ * ever touched keeps this directory forever (it is gitignored, not cleaned up), so its presence
365
+ * means "this task WAS dispatched", independent of whether any lock or slot survives today.
366
+ */
367
+ hasAttemptDir: (taskId: string): boolean => fs.existsSync(path.join(dispatchDir, taskId)),
368
+ // T-8 defect 3: the durable enqueue-time marker, filesystem-backed like everything else under
369
+ // `.backlog/.dispatch/` — see `attempt.ts`'s own JSDoc on both functions.
370
+ hasCloseAttemptBeenEnqueued: (taskId: string): boolean =>
371
+ hasCloseAttemptBeenEnqueued(dispatchDir, taskId),
372
+ markCloseAttemptEnqueued: (taskId: string): void =>
373
+ markCloseAttemptEnqueued(dispatchDir, taskId),
374
+ // T-68: feeds the «Registro de ejecución» block's "Fallos de entorno" and "Resultado del
375
+ // intento 1" fields — `classifyStreamOutcome` is the SAME classifier `entry.ts` already runs
376
+ // live on this same file right after the worker exits (render.ts), read back here after the
377
+ // fact rather than re-implemented.
378
+ attemptStreamOutcome: (taskId: string, attempt: number): string | null => {
379
+ const streamPath = path.join(dispatchDir, taskId, `intento-${attempt}`, 'stream.jsonl');
380
+ if (!fs.existsSync(streamPath)) {
381
+ return null;
382
+ }
383
+ const lines = fs
384
+ .readFileSync(streamPath, 'utf8')
385
+ .split('\n')
386
+ .filter((line) => line.length > 0);
387
+ return classifyStreamOutcome(lines);
388
+ },
389
+ // T-68 fix 2: reuses `reviewer.ts`'s OWN parser rather than a second implementation — the exact
390
+ // same text `runReviewer`'s `writeReview` callback already persisted to this file.
391
+ attemptReviewVerdict: (taskId: string, attempt: number): string | null => {
392
+ const reviewPath = path.join(dispatchDir, taskId, `intento-${attempt}`, 'review.md');
393
+ if (!fs.existsSync(reviewPath)) {
394
+ return null;
395
+ }
396
+ return parseReviewerVerdict(fs.readFileSync(reviewPath, 'utf8'));
397
+ },
398
+ };
399
+ }
400
+
401
+ /** The `gh` runner shape, injected so `realGh` is testable without a real `gh` or a real repo. */
402
+ type GhRunner = (
403
+ command: string,
404
+ args: string[],
405
+ options: { cwd: string; env?: Record<string, string> },
406
+ ) => string;
407
+
408
+ /**
409
+ * Builds a `GhRunner` bounded at `timeoutMs` — the same injection seam `realGit`'s
410
+ * `RealGitDeps.timeoutMs` uses, so a test binds a short bound without touching the production
411
+ * default (T-97).
412
+ */
413
+ export function makeGhRunner(timeoutMs: number): GhRunner {
414
+ return (command, args, options) =>
415
+ execFileSync(command, args, {
416
+ cwd: options.cwd,
417
+ env: options.env,
418
+ encoding: 'utf8',
419
+ stdio: ['ignore', 'pipe', 'ignore'],
420
+ timeout: timeoutMs,
421
+ });
422
+ }
423
+
424
+ const defaultGhRunner: GhRunner = makeGhRunner(EXTERNAL_CALL_TIMEOUT_MS);
425
+
426
+ /** The four env keys `gh` itself prefers over its own keyring login, in that order of precedence
427
+ * (measured against `gh`'s own auth resolution: an enterprise token wins for an enterprise host,
428
+ * `GH_TOKEN`/`GITHUB_TOKEN` otherwise). `ghEnv` does not need to reproduce that order — it only
429
+ * needs every one of them gone. */
430
+ const GH_ENV_DENY = new Set([
431
+ 'GITHUB_TOKEN',
432
+ 'GH_TOKEN',
433
+ 'GH_ENTERPRISE_TOKEN',
434
+ 'GITHUB_ENTERPRISE_TOKEN',
435
+ ]);
436
+
437
+ /**
438
+ * The parent environment minus the four keys `gh` prefers over its own keyring login.
439
+ *
440
+ * Measured defect (T-5, 2026-09-07, real e2e, close attempt 2): the dispatcher's own `gh pr view
441
+ * task/T-5` failed with `HTTP 401: Bad credentials`. The reconciler process inherits the developer
442
+ * shell's `GITHUB_TOKEN`, which is stale on this machine, and `gh` prefers an env token over its
443
+ * keyring login even when that login is valid (`GITHUB_TOKEN= gh auth status` on the same machine
444
+ * showed "Logged in to github.com account … (keyring)" throughout). Workers already run with every
445
+ * credential stripped (`launch.ts`'s `sanitizeInheritedEnv`); this is the same fix for the
446
+ * dispatcher's OWN `gh` calls, deliberately narrower: unlike `reviewerEnv` — which the reviewer
447
+ * subprocess can afford, since it never touches `gh` — this keeps every OTHER key (HOME, for `gh`'s
448
+ * own config; any unrelated token another tool in the same shell happens to export) so a dispatcher
449
+ * `gh` call loses nothing it did not need to lose.
450
+ */
451
+ export function ghEnv(parentEnv: NodeJS.ProcessEnv = process.env): Record<string, string> {
452
+ const env: Record<string, string> = {};
453
+ for (const [key, value] of Object.entries(parentEnv)) {
454
+ if (value === undefined || GH_ENV_DENY.has(key)) {
455
+ continue;
456
+ }
457
+ env[key] = value;
458
+ }
459
+ return env;
460
+ }
461
+
462
+ /**
463
+ * Strips the `undefined` values `NodeJS.ProcessEnv` allows, so an env built from it (like
464
+ * `realBacklog`'s `{...process.env, BACKLOG_DISPATCH_ACTIVE: '1'}`) satisfies `RunInSlot`'s
465
+ * stricter `Record<string, string>` — unlike `ghEnv`, nothing here is DENIED, since a board write
466
+ * carries none of `gh`'s credential concerns.
467
+ */
468
+ function definedEnv(env: NodeJS.ProcessEnv): Record<string, string> {
469
+ const result: Record<string, string> = {};
470
+ for (const [key, value] of Object.entries(env)) {
471
+ if (value !== undefined) {
472
+ result[key] = value;
473
+ }
474
+ }
475
+ return result;
476
+ }
477
+
478
+ /**
479
+ * `gh` resolves the repository from the CWD it runs in, so `cwd` is not optional here: without it
480
+ * the call inherited whatever directory launched the reconciler — under launchd, `/` — and `gh pr
481
+ * view` then answered about no repository at all (or, from a nested checkout, about the wrong one).
482
+ * `false` is the answer either way, so the failure is silent: a merged subtask never moves to `Done`
483
+ * and its parent never derives.
484
+ */
485
+ export function realGh(repoRoot: string, run: GhRunner = defaultGhRunner) {
486
+ return {
487
+ isPrMerged: (branch: string): boolean => {
488
+ try {
489
+ const output = run('gh', ['pr', 'view', branch, '--json', 'state,mergedAt'], {
490
+ cwd: repoRoot,
491
+ env: ghEnv(),
492
+ });
493
+ const parsed = JSON.parse(output) as { state?: string; mergedAt?: string | null };
494
+ return parsed.state === 'MERGED' && Boolean(parsed.mergedAt);
495
+ } catch {
496
+ return false; // no PR yet, gh unavailable, or not authenticated — fail closed.
497
+ }
498
+ },
499
+ /**
500
+ * T-8 point 3: the branch's most recent PR state (`OPEN`, `CLOSED`, `MERGED`), or `null` when
501
+ * `gh` reports no PR at all (or is unavailable/unauthenticated — the same fail-closed reading
502
+ * `isPrMerged` gives). Feeds `maintenance.ts`'s step 3b revert comment, so a person can tell a
503
+ * merged PR the sweep has not yet caught up to apart from one GitHub genuinely never merged.
504
+ */
505
+ prState: (branch: string): string | null => {
506
+ try {
507
+ const output = run('gh', ['pr', 'view', branch, '--json', 'state'], {
508
+ cwd: repoRoot,
509
+ env: ghEnv(),
510
+ });
511
+ const parsed = JSON.parse(output) as { state?: string };
512
+ return parsed.state ?? null;
513
+ } catch {
514
+ return null;
515
+ }
516
+ },
517
+ /**
518
+ * T-68: the branch's PR number, or `null` on the same fail-closed conditions `prState` reads
519
+ * (no PR, `gh` unavailable/unauthenticated) — see `MaintenanceGh.prNumber`'s own JSDoc for who
520
+ * reads this and why.
521
+ */
522
+ prNumber: (branch: string): number | null => {
523
+ try {
524
+ const output = run('gh', ['pr', 'view', branch, '--json', 'number'], {
525
+ cwd: repoRoot,
526
+ env: ghEnv(),
527
+ });
528
+ const parsed = JSON.parse(output) as { number?: number };
529
+ return typeof parsed.number === 'number' ? parsed.number : null;
530
+ } catch {
531
+ return null;
532
+ }
533
+ },
534
+ /**
535
+ * T-8 defect 1's tri-state answer — see `MaintenanceGh.mergedState`'s own JSDoc for why this
536
+ * cannot reuse `isPrMerged`'s boolean or `prState`'s `string | null` for the decision.
537
+ *
538
+ * Deliberately asks `gh pr list --head <branch> --state all`, NOT `gh pr view <branch>`: `pr
539
+ * view` throws identically whether there is no PR for the branch, the `gh` binary is missing,
540
+ * the token expired, or the network is down — the exact ambiguity `isPrMerged` inherits. `pr
541
+ * list` instead SUCCEEDS with an empty array when a branch genuinely has no PR — a real,
542
+ * confirmed answer (`not-merged`) — and only THROWS when the call itself could not run to
543
+ * completion, which is the only thing that becomes `unknown`.
544
+ */
545
+ mergedState: (branch: string): PrMergeState => {
546
+ try {
547
+ const output = run(
548
+ 'gh',
549
+ [
550
+ 'pr',
551
+ 'list',
552
+ '--head',
553
+ branch,
554
+ '--state',
555
+ 'all',
556
+ '--json',
557
+ 'state,mergedAt',
558
+ '--limit',
559
+ '1',
560
+ ],
561
+ { cwd: repoRoot, env: ghEnv() },
562
+ );
563
+ const pulls = JSON.parse(output) as Array<{ state?: string; mergedAt?: string | null }>;
564
+ if (pulls.length === 0) {
565
+ return PR_MERGE_STATE.NOT_MERGED; // confirmed: no PR was ever opened for this branch.
566
+ }
567
+ const [pr] = pulls;
568
+ return pr.state === 'MERGED' && Boolean(pr.mergedAt)
569
+ ? PR_MERGE_STATE.MERGED
570
+ : PR_MERGE_STATE.NOT_MERGED;
571
+ } catch {
572
+ // gh binary missing, auth expired, network down — an unanswerable question, never "not merged".
573
+ return PR_MERGE_STATE.UNKNOWN;
574
+ }
575
+ },
576
+ };
577
+ }
578
+
579
+ /**
580
+ * Renders a failed `execFileSync` into a message that carries the child's actual stderr, not just
581
+ * the generic "Command failed: <cmd>" `error.message` gives on its own.
582
+ *
583
+ * Measured defect (T-5, 2026-09-07): every dispatcher-owned `backlog`/`git` write ran with stderr
584
+ * explicitly silenced (`stdio: 'ignore'`, or `['ignore', 'pipe', 'ignore']`), so a failed
585
+ * `-s In Progress` edit surfaced as exit 1 with `stderr: null` — the one piece of text that would
586
+ * have named the real cause (a second reconciler pass already touching the same task) was thrown
587
+ * away before it ever reached a `Blocked` comment or a log line. Capped at 500 chars: a comment or
588
+ * a log line is not the place for a multi-KB stack dump.
589
+ */
590
+ export function describeExecFailure(error: unknown): string {
591
+ const failure = error as { message?: string; stderr?: Buffer | string | null } | null;
592
+ const message = failure?.message ?? String(error);
593
+ const stderrText = Buffer.isBuffer(failure?.stderr)
594
+ ? failure.stderr.toString('utf8')
595
+ : typeof failure?.stderr === 'string'
596
+ ? failure.stderr
597
+ : '';
598
+ const trimmed = stderrText.trim();
599
+ return trimmed ? `${message} — stderr: ${trimmed.slice(0, 500)}` : message;
600
+ }
601
+
602
+ /**
603
+ * Backlog.md's own wording for "another process holds this task's lock right now" (verified
604
+ * against the real CLI's stderr, T-5's measured e2e run). Matched case-insensitively against the
605
+ * FULL failure message — `describeExecFailure` folds stderr into it — never against a raw
606
+ * `error.message` alone, which for a silenced `execFileSync` carries only "Command failed: …".
607
+ */
608
+ const BOARD_BUSY_PATTERN = /being modified by another process/i;
609
+
610
+ /**
611
+ * Git's own wording for "the remote ref this push tried to delete does not exist" (verified against
612
+ * the real CLI's stderr — the existing `realGit — deleteRemoteBranch` test fixture below). Matched
613
+ * against the failure's `.message` — real `execFileSync` failures fold stderr into that string via
614
+ * `describeExecFailure`'s wrapping `run`, and an injected test `run` throws the raw string directly,
615
+ * so one pattern covers both.
616
+ */
617
+ const REMOTE_REF_ALREADY_GONE_PATTERN = /remote ref does not exist/i;
618
+
619
+ /**
620
+ * Git's own FIXED wording for "this ref does not resolve to anything" (`git rev-parse --verify
621
+ * <ref>`, deliberately without `--quiet` — see `branchHasUnmergedCommits`'s own comment for why).
622
+ * Measured directly (2026-09-08): a genuinely absent ref fails with exactly this text, exit 128; a
623
+ * missing `git` binary fails with `spawnSync git ENOENT` (no such text, no `Command failed:`
624
+ * prefix at all); a broken checkout (`fatal: not a git repository…`) fails with DIFFERENT text.
625
+ * Matched so `branchHasUnmergedCommits`'s first check can tell a confirmed-absent remote-tracking
626
+ * ref (safe: nothing survives on the remote to lose) apart from any OTHER failure of the same
627
+ * call (S2, 2026-09-08: the previous version read every failure of this call the same way,
628
+ * silently authorising a delete on a question it never actually answered).
629
+ */
630
+ const BRANCH_REF_NOT_FOUND_PATTERN = /needed a single revision/i;
631
+
632
+ export interface BoardWriteRetryOptions {
633
+ /** Total tries, including the first one. Real callers pass 6. */
634
+ attempts: number;
635
+ /** Linear backoff step: the Nth failed attempt sleeps `baseDelayMs * N` before the next try. */
636
+ baseDelayMs: number;
637
+ /** Injected by tests so a retry never blocks on a real timer. Defaults to a blocking real sleep. */
638
+ sleep?: (ms: number) => void;
639
+ }
640
+
641
+ export const BOARD_WRITE_RETRY_DEFAULTS: BoardWriteRetryOptions = { attempts: 6, baseDelayMs: 250 };
642
+
643
+ /** Blocks the calling thread — the same pattern `slots.ts`'s registry lock retry uses, and for the
644
+ * same reason: the reconciler has nothing useful to do while Backlog.md's own lock is held, and the
645
+ * alternative is making every dispatcher-owned write asynchronous. */
646
+ function defaultBlockingSleep(ms: number): void {
647
+ Atomics.wait(new Int32Array(new SharedArrayBuffer(4)), 0, 0, ms);
648
+ }
649
+
650
+ /**
651
+ * Retries a dispatcher-owned `backlog` WRITE when Backlog.md's per-task lock is held by someone
652
+ * else at that exact instant — a person editing the same task, or a second reconciler pass.
653
+ *
654
+ * Measured defect (T-5, 2026-09-07, real e2e): the dispatcher's own `task edit T-5 -s In Progress`
655
+ * collided with the lock `onStatusChange` holds for the length of its callback and failed outright
656
+ * with `T-5 is being modified by another process; retry if appropriate.` The callback line is now
657
+ * fixed to detach its stdio so the hold is brief, but the dispatcher must still tolerate the
658
+ * instant a person or a second reconciler holds it — hence this bounded, linear-backoff retry.
659
+ *
660
+ * `command` names the call for the retry log line ONLY; it never reaches a shell. Any failure whose
661
+ * message does NOT match Backlog.md's own busy wording is not a contention symptom and rethrows at
662
+ * once — retrying it would only delay the real error behind a fixed backoff. After the last attempt
663
+ * the ORIGINAL error is rethrown untouched, so a caller (or a human reading the comment/log it
664
+ * produced) still sees the real cause, not a synthetic "gave up" wrapper.
665
+ */
666
+ export function withBoardWriteRetry<T>(
667
+ command: string,
668
+ run: () => T,
669
+ options: BoardWriteRetryOptions = BOARD_WRITE_RETRY_DEFAULTS,
670
+ ): T {
671
+ const sleep = options.sleep ?? defaultBlockingSleep;
672
+ // A non-positive `attempts` made the loop condition false on iteration 1: `run()` never executed,
673
+ // `lastError` stayed `undefined`, and `throw lastError` threw `undefined` instead of a real error —
674
+ // hiding whatever misconfiguration produced the bad count behind a useless stack trace. Guaranteed
675
+ // at least one real attempt runs, the same way every other bounded-retry helper in this file does.
676
+ const attempts = Math.max(1, options.attempts);
677
+ let lastError: unknown;
678
+ for (let attempt = 1; attempt <= attempts; attempt += 1) {
679
+ try {
680
+ return run();
681
+ } catch (error) {
682
+ const message = error instanceof Error ? error.message : String(error);
683
+ if (!BOARD_BUSY_PATTERN.test(message)) {
684
+ throw error;
685
+ }
686
+ lastError = error;
687
+ if (attempt === attempts) {
688
+ break;
689
+ }
690
+ console.error(`dispatch.ts: board busy, retry ${attempt}/${attempts} for ${command}`);
691
+ sleep(options.baseDelayMs * attempt);
692
+ }
693
+ }
694
+ throw lastError;
695
+ }
696
+
697
+ export interface RealBacklogDeps {
698
+ /**
699
+ * Injected by tests so no `backlog` CLI ever runs; the default wraps a real, stderr-capturing
700
+ * `execFileSync` and is what tests assert `env.BACKLOG_DISPATCH_ACTIVE` against.
701
+ */
702
+ run?: (args: string[], options: { cwd: string; env: NodeJS.ProcessEnv }) => void;
703
+ /**
704
+ * Injected by tests so `readDescription` is testable without a real `backlog` CLI. The default
705
+ * wraps `viewTask` — the same `backlog task view --plain` every other reader here goes through —
706
+ * and, unlike `readTaskText`, is NEVER wrapped in a try/catch: `readDescription` needs a failed
707
+ * read to be a THROW, not a swallowed `''`, so a maintenance pass or the graph CLI can tell "the
708
+ * board could not be read" apart from "this task's description is genuinely empty".
709
+ */
710
+ view?: (taskId: string) => string;
711
+ /** Overrides `withBoardWriteRetry`'s defaults — tests inject a synchronous, instant `sleep`. */
712
+ retry?: Partial<BoardWriteRetryOptions>;
713
+ }
714
+
715
+ const defaultBacklogRun: NonNullable<RealBacklogDeps['run']> = (args, options) => {
716
+ try {
717
+ execFileSync('backlog', args, {
718
+ cwd: options.cwd,
719
+ env: options.env,
720
+ stdio: ['ignore', 'pipe', 'pipe'],
721
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
722
+ });
723
+ } catch (error) {
724
+ throw new Error(`dispatch.ts: backlog ${args.join(' ')} failed: ${describeExecFailure(error)}`);
725
+ }
726
+ };
727
+
728
+ /**
729
+ * Every write here is a DISPATCHER-OWNED status/comment edit, and every one of them now runs with
730
+ * `BACKLOG_DISPATCH_ACTIVE='1'` in its env — not because this process itself must recognize its own
731
+ * writes (it already tracks that via the per-task lock and the single-flight lock), but because the
732
+ * `onStatusChange` callback THIS EDIT FIRES inherits whatever env the `backlog` CLI child ran with.
733
+ * Without the sentinel, that nested invocation had no way to tell a dispatcher-owned write apart
734
+ * from a genuine human one — see `entry.ts`'s `isDispatcherOwnedCallback`, and the measured T-5
735
+ * defect in `dispatch.test.ts`'s "the dispatcher-owned write sentinel" suite.
736
+ *
737
+ * Every write also goes through `withBoardWriteRetry`: Backlog.md holds the SAME per-task lock a
738
+ * person or a second reconciler pass can be holding at this exact instant — see that function's own
739
+ * header for the measured T-5 defect this closes.
740
+ */
741
+ export function realBacklog(mainCheckoutPath: string, deps: RealBacklogDeps = {}) {
742
+ const run = deps.run ?? defaultBacklogRun;
743
+ const view = deps.view ?? ((taskId: string) => viewTask(mainCheckoutPath, taskId));
744
+ const retryOptions: BoardWriteRetryOptions = { ...BOARD_WRITE_RETRY_DEFAULTS, ...deps.retry };
745
+ const ownedWrite = (args: string[]): void =>
746
+ withBoardWriteRetry(
747
+ `backlog ${args.join(' ')}`,
748
+ () =>
749
+ run(args, { cwd: mainCheckoutPath, env: { ...process.env, BACKLOG_DISPATCH_ACTIVE: '1' } }),
750
+ retryOptions,
751
+ );
752
+
753
+ return {
754
+ setStatus: (taskId: string, status: TaskStatus, comment?: string): void => {
755
+ const args = ['task', 'edit', taskId, '-s', status];
756
+ if (comment) {
757
+ args.push('--comment', comment);
758
+ }
759
+ ownedWrite(args);
760
+ },
761
+ comment: (taskId: string, comment: string): void => {
762
+ ownedWrite(['task', 'edit', taskId, '--comment', comment]);
763
+ },
764
+ // T-68: the «Registro de ejecución» block's only writer — `--append-notes` is the one field
765
+ // the `Queued` scope freeze (`catalyst-backlog/SKILL.md` §11) leaves open on a `Done` task.
766
+ appendNotes: (taskId: string, notes: string): void => {
767
+ ownedWrite(['task', 'edit', taskId, '--append-notes', notes]);
768
+ },
769
+ // T-68 fix 4: reuses the SAME `backlog task view --plain` reader every other close-time text
770
+ // read already goes through (`readTaskText`, hoisted below), but returns ONLY the notes
771
+ // section (`task-view.ts`'s `notesRegion`) — the whole view's DESCRIPTION, AC or a COMMENT can
772
+ // legitimately contain text that reads like the heading (a worker quoting the skill, a person
773
+ // pasting an example), and `close.ts`'s `hasExecutionRecordBlock` has no way to tell that apart
774
+ // from the real block once handed the whole text.
775
+ readNotes: (taskId: string): string | null => {
776
+ const notes = notesRegion(readTaskText(mainCheckoutPath, taskId));
777
+ return notes.length > 0 ? notes : null;
778
+ },
779
+ // T-113: the graph-holder refresh's (maintenance.ts step 5b) only writer/reader — the same
780
+ // `decideGraphWrite` decision `graph.ts`'s `pnpm backlog:graph --write` uses.
781
+ setDescription: (taskId: string, description: string): void => {
782
+ ownedWrite(['task', 'edit', taskId, '--desc', description]);
783
+ },
784
+ // Deliberately reads through `view` directly, never through `readTaskText`: a failed board read
785
+ // must THROW here — see `RealBacklogDeps.view`'s doc comment — so step 5b's try/catch (and the
786
+ // graph CLI's own) can tell a failed read apart from a description that is genuinely empty.
787
+ readDescription: (taskId: string): string | null => {
788
+ const description = parseDescription(view(taskId));
789
+ return description.length > 0 ? description : null;
790
+ },
791
+ };
792
+ }
793
+
794
+ /**
795
+ * The worktree slot currently assigned to `taskId`, or `null` when no slot holds it.
796
+ *
797
+ * `null` is a real answer the caller MUST handle, never a directory to fall back to. Falling back
798
+ * to the main checkout pointed every close runner at the developer's own working tree: a `git add
799
+ * -A` + WIP commit over whatever was in progress there, a scope diff of somebody else's changes,
800
+ * and a `gh pr create` off the main checkout's branch.
801
+ */
802
+ export function findSlotPathForTask(mainCheckoutPath: string, taskId: string): string | null {
803
+ const slotsPath = path.join(mainCheckoutPath, DISPATCH_SUBDIR, 'slots.json');
804
+ if (!fs.existsSync(slotsPath)) {
805
+ return null;
806
+ }
807
+ return slotPathForTask(JSON.parse(fs.readFileSync(slotsPath, 'utf8')) as SlotRegistry, taskId);
808
+ }
809
+
810
+ export interface RealGitDeps {
811
+ /** Injected by tests so no lookup ever reaches the real `slots.json` of a live checkout. */
812
+ slotPathFor?: (taskId: string) => string | null;
813
+ /** Injected by tests so no `git` ever runs; the default is a real, output-silenced `execFileSync`. */
814
+ run?: (command: string, args: string[], cwd: string) => void;
815
+ /** Bounds the default `run`'s `execFileSync` calls (T-97). Defaults to `EXTERNAL_CALL_TIMEOUT_MS`. */
816
+ timeoutMs?: number;
817
+ /**
818
+ * Injected by tests so no real `git status` runs when reading the `.backlog` dirt. Returns the
819
+ * SAME raw text `readBacklogStatusPorcelainZ` would (NUL-terminated records, `git status
820
+ * --porcelain=v1 -z` shape) — a test builds it with literal `\0` characters.
821
+ */
822
+ readBacklogStatus?: (cwd: string) => string;
823
+ }
824
+
825
+ /**
826
+ * The closed set of top-level `.backlog` entries Backlog.md's own CLI manages outright (verified
827
+ * against a real `.backlog/` tree, T-78): every task, milestone, archived/completed record, and
828
+ * the tool's own config file. A path under one of these is the board's own output BY WHAT IT IS,
829
+ * never by when it appeared — see `isBoardManagedBacklogPath`.
830
+ */
831
+ const STRUCTURAL_BACKLOG_ENTRIES = [
832
+ '.backlog/tasks',
833
+ '.backlog/milestones',
834
+ '.backlog/archive',
835
+ '.backlog/completed',
836
+ '.backlog/config.yml',
837
+ ] as const;
838
+
839
+ /**
840
+ * `backlog doc create` (see `.claude/skills/catalyst-backlog/SKILL.md`) names its own output
841
+ * `doc-<N> - <title>.md` directly under `.backlog/docs/`; a task also gets a `.backlog/docs/t-<N>/`
842
+ * support folder, and likewise for a milestone's `m-<N>`. Matched against the FIRST path segment
843
+ * inside `docs/` only — a `docs/` entry with no such prefix (the 2026-09-14 incident's
844
+ * `biller-dataset/` folder, hand-created, no ID) is never the board's.
845
+ */
846
+ const BACKLOG_DOC_ID_PATTERN = /^(doc|t|m)-\d+/;
847
+
848
+ /**
849
+ * True for a `.backlog` path Backlog.md's own schema produces — the closed set of entity
850
+ * directories it manages outright, plus a `docs/` entry named like the tool's own `doc-N`/`t-N`/
851
+ * `m-N` convention. Anything else under `.backlog` is content a human or another process put
852
+ * there, not the board — see T-78. Deliberately STRUCTURAL, not temporal: unlike a "was this dirty
853
+ * before the pass started" check, this never mistakes a board write left uncommitted by an earlier
854
+ * pass (`.backlog/config.yml` has `auto_commit: false`, so an interactive/MCP write routinely sits
855
+ * dirty until a LATER dispatcher pass sweeps it up) for something foreign.
856
+ */
857
+ export function isBoardManagedBacklogPath(relPath: string): boolean {
858
+ if (
859
+ STRUCTURAL_BACKLOG_ENTRIES.some(
860
+ (entry) => relPath === entry || relPath.startsWith(`${entry}/`),
861
+ )
862
+ ) {
863
+ return true;
864
+ }
865
+ const docsMatch = relPath.match(/^\.backlog\/docs\/([^/]+)/);
866
+ return docsMatch !== null && BACKLOG_DOC_ID_PATTERN.test(docsMatch[1]);
867
+ }
868
+
869
+ /**
870
+ * Parses `git status --porcelain=v1 -z -- .backlog` output (NUL-terminated records) into the paths
871
+ * it reports dirty. `-z` is not a cosmetic choice: the default (newline) format double-quotes and
872
+ * octal-escapes any non-ASCII byte in a path (measured against a real accented filename in this
873
+ * repo, T-78 D2) — several real task files here carry accents or an em-dash, and a later `git add`
874
+ * of a hand-reconstructed escaped path fails with "pathspec did not match any files", losing the
875
+ * WHOLE commit, not just that one file. `-z` prints raw, unescaped UTF-8 bytes instead.
876
+ *
877
+ * A rename or copy record (status code containing `R`/`C`) emits TWO consecutive NUL-terminated
878
+ * fields — the current path, then the original path it was renamed/copied from — instead of the
879
+ * `OLD -> NEW` arrow syntax the newline format uses. The second field carries no `XY ` status
880
+ * prefix of its own; it is discarded here since only the current path is ever a target for `git
881
+ * add`.
882
+ */
883
+ export function parseBacklogStatusPorcelainZ(porcelain: string): string[] {
884
+ const fields = porcelain.split('\0').filter((field) => field.length > 0);
885
+ const paths: string[] = [];
886
+ for (let i = 0; i < fields.length; i++) {
887
+ const field = fields[i];
888
+ const statusCode = field.slice(0, 2);
889
+ paths.push(field.slice(3));
890
+ if (/[RC]/.test(statusCode)) {
891
+ i++; // consume and discard the ORIG_PATH field a rename/copy record appends.
892
+ }
893
+ }
894
+ return paths;
895
+ }
896
+
897
+ /**
898
+ * Real `git status --porcelain=v1 -z -- .backlog` in `cwd` — safe on a non-git directory (returns
899
+ * '').
900
+ */
901
+ export function readBacklogStatusPorcelainZ(cwd: string): string {
902
+ try {
903
+ return execFileSync('git', ['status', '--porcelain=v1', '-z', '--', '.backlog'], {
904
+ cwd,
905
+ encoding: 'utf8',
906
+ stdio: ['ignore', 'pipe', 'ignore'],
907
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
908
+ });
909
+ } catch {
910
+ return '';
911
+ }
912
+ }
913
+
914
+ /**
915
+ * The dispatcher's own git side effects. Every `git commit` here runs `--no-verify`, and that is a
916
+ * safety property, not a convenience: a slot's `.husky/` hooks are FILES IN THE WORKING TREE the
917
+ * worker just wrote in, so committing its work through them would execute code the model under
918
+ * dispatch authored — with the dispatcher's own privileges. The board commit takes the same flag
919
+ * because it runs unattended in the main checkout, where a hook that stashes (lint-staged does)
920
+ * would reach into whatever a person has in progress there. Nothing is lost by it: both messages
921
+ * are machine-built and `close.test.ts` runs them through the repo's real commitlint.
922
+ */
923
+ export function realGit(mainCheckoutPath: string, deps: RealGitDeps = {}): MaintenanceGit {
924
+ const slotPathFor =
925
+ deps.slotPathFor ??
926
+ ((taskId: string): string | null => findSlotPathForTask(mainCheckoutPath, taskId));
927
+ const resolveSlotPath = (branch: string): string | null =>
928
+ slotPathFor(branch.replace(/^task\//, ''));
929
+ const run =
930
+ deps.run ??
931
+ ((command, args, cwd) => {
932
+ try {
933
+ execFileSync(command, args, {
934
+ cwd,
935
+ stdio: ['ignore', 'pipe', 'pipe'],
936
+ timeout: deps.timeoutMs ?? EXTERNAL_CALL_TIMEOUT_MS,
937
+ });
938
+ } catch (error) {
939
+ throw new Error(
940
+ `dispatch.ts: ${command} ${args.join(' ')} failed: ${describeExecFailure(error)}`,
941
+ );
942
+ }
943
+ });
944
+ // Shared by `hasPendingBacklogChanges` and `commitBacklogChanges` (D7): the two are only ever
945
+ // called back-to-back, immediately, for the SAME pass's single board-commit step (see
946
+ // `maintenance.ts` step 6) — nothing mutates `.backlog` between them — so caching the one read
947
+ // for this `realGit()` instance's lifetime removes a redundant `git status` without risking
948
+ // staleness. A fresh instance (and therefore a fresh cache) is built once per pass.
949
+ let cachedStatus: string | null = null;
950
+ const readStatus = (): string => {
951
+ if (cachedStatus === null) {
952
+ cachedStatus = (deps.readBacklogStatus ?? readBacklogStatusPorcelainZ)(mainCheckoutPath);
953
+ }
954
+ return cachedStatus;
955
+ };
956
+
957
+ return {
958
+ hasPendingBacklogChanges: (): boolean => {
959
+ // A cheap gate, deliberately unfiltered: "something is dirty under .backlog, ours or
960
+ // foreign" is all this answers. The filtering that tells the two apart lives only in
961
+ // `commitBacklogChanges` below, which is the one place that actually stages and commits.
962
+ return readStatus().trim().length > 0;
963
+ },
964
+ commitBacklogChanges: (message: string): void => {
965
+ const current = parseBacklogStatusPorcelainZ(readStatus());
966
+ const foreignPaths = current.filter((p) => !isBoardManagedBacklogPath(p));
967
+ if (foreignPaths.length > 0) {
968
+ // Design decision (T-78): ignore + log, never fail the pass — a stray file under .backlog
969
+ // must not park the whole board. Never silent either: this is the one place that decides,
970
+ // and it always says so.
971
+ console.error(
972
+ `dispatch.ts: ${foreignPaths.length} file(s) under .backlog are not part of the board's ` +
973
+ `own schema (tasks/milestones/archive/completed/config.yml, or an ID-prefixed docs/ ` +
974
+ `entry); excluding them from the sync commit: ${foreignPaths.join(', ')}`,
975
+ );
976
+ }
977
+ // Structural entries are added WHOLE (by directory/file, never a reconstructed individual
978
+ // filename): git resolves the pathspec itself, so a name with an accent or an em-dash never
979
+ // has to survive a round trip through our own parsing (T-78 D2), and an entirely-untracked
980
+ // directory — which `git status` collapses to ONE line for the whole directory, never one
981
+ // per file inside it (T-78 D3) — is still named correctly by its directory entry.
982
+ const dirtyStructural = STRUCTURAL_BACKLOG_ENTRIES.filter((entry) =>
983
+ current.some((p) => p === entry || p.startsWith(`${entry}/`)),
984
+ );
985
+ // `docs/` is not added wholesale — real board docs and foreign content share that directory
986
+ // (T-78), so only the individual ID-prefixed entries dirty right now are named.
987
+ const dirtyOwnDocs = current.filter(
988
+ (p) => p.startsWith('.backlog/docs/') && isBoardManagedBacklogPath(p),
989
+ );
990
+ const addTargets = [...dirtyStructural, ...dirtyOwnDocs];
991
+ if (addTargets.length === 0) {
992
+ return; // nothing the board's own schema produced — a foreign file alone never triggers a commit.
993
+ }
994
+ run('git', ['add', '--', ...addTargets], mainCheckoutPath);
995
+ // The trailing pathspec bounds the commit to exactly what was just staged above, so nothing
996
+ // a person had ALREADY staged in the main checkout (this runs unattended, in a shared
997
+ // checkout) rides along inside this machine-built commit.
998
+ run('git', ['commit', '-m', message, '--no-verify', '--', ...addTargets], mainCheckoutPath);
999
+ },
1000
+ saveWipAndPush: (branch: string) => {
1001
+ const cwd = resolveSlotPath(branch);
1002
+ if (cwd === null) {
1003
+ // No slot holds this task, so there is no work to save — and running `git add -A` in the
1004
+ // main checkout would commit whatever a person has in progress there.
1005
+ console.error(`dispatch.ts: no slot holds ${branch}; nothing to save.`);
1006
+ return { pushSucceeded: false };
1007
+ }
1008
+ const taskId = branch.replace(/^task\//, '');
1009
+ try {
1010
+ run('git', ['add', '-A'], cwd);
1011
+ run(
1012
+ 'git',
1013
+ ['commit', '-m', buildWipCommitMessage(taskId), '--allow-empty', '--no-verify'],
1014
+ cwd,
1015
+ );
1016
+ run('git', ['push', 'origin', branch], cwd);
1017
+ return { pushSucceeded: true };
1018
+ } catch {
1019
+ return { pushSucceeded: false };
1020
+ }
1021
+ },
1022
+ detachSlot: (slotPath: string): void =>
1023
+ detachSlot(slotPath, (args, at) => run('git', args, at)),
1024
+ branchExists: (branch: string): boolean => {
1025
+ // The local ref first — cheap, no network. `--quiet` suppresses the "not a valid ref" noise
1026
+ // `run`'s error wrapper would otherwise carry, and a throw here means only "no such local
1027
+ // ref", never a reason to stop looking: the remote is checked next.
1028
+ try {
1029
+ run('git', ['rev-parse', '--verify', '--quiet', `refs/heads/${branch}`], mainCheckoutPath);
1030
+ return true;
1031
+ } catch {
1032
+ // fall through to the remote check below.
1033
+ }
1034
+ try {
1035
+ run('git', ['ls-remote', '--exit-code', '--heads', 'origin', branch], mainCheckoutPath);
1036
+ return true;
1037
+ } catch {
1038
+ return false; // absent on both — the legitimate "never pushed" case T-8 point 7 relies on.
1039
+ }
1040
+ },
1041
+ deleteLocalBranch: (branch: string): void => {
1042
+ try {
1043
+ run('git', ['branch', '-D', branch], mainCheckoutPath);
1044
+ } catch {
1045
+ // Tolerant by design (see this method's JSDoc on `MaintenanceGit`): the common case is a
1046
+ // task never checked out in the main checkout at all, and this cleanup step must never
1047
+ // fail the `Done` transition it runs alongside.
1048
+ }
1049
+ },
1050
+ deleteRemoteBranch: (branch: string): RemoteBranchDeleteResult => {
1051
+ try {
1052
+ run('git', ['push', 'origin', '--delete', branch], mainCheckoutPath);
1053
+ return REMOTE_BRANCH_DELETE_RESULT.DELETED;
1054
+ } catch (error) {
1055
+ const message = error instanceof Error ? error.message : String(error);
1056
+ if (REMOTE_REF_ALREADY_GONE_PATTERN.test(message)) {
1057
+ // GitHub's own "Automatically delete head branches" (enabled 2026-09-08) routinely beats
1058
+ // this call to it — the NORMAL outcome, not a failure to report.
1059
+ return REMOTE_BRANCH_DELETE_RESULT.ALREADY_GONE;
1060
+ }
1061
+ // A REAL failure (bad auth, a protected-branch rule, a network timeout) — defect 7,
1062
+ // 2026-09-08: this used to be swallowed identically to the "already gone" case above, so
1063
+ // the remote ref stayed alive with no log line and no honest signal in the result. See
1064
+ // `maintenance.ts`'s `cleanupBranchOnDone` for what this outcome now does with it.
1065
+ console.error(`dispatch.ts: git push origin --delete ${branch} failed:`, message);
1066
+ return REMOTE_BRANCH_DELETE_RESULT.FAILED;
1067
+ }
1068
+ },
1069
+ branchHasUnmergedCommits: (branch: string, baseRef: string): boolean => {
1070
+ // The remote-tracking ref, not the local one: the rescue push (`saveWipAndPush`) lands its
1071
+ // commits on `origin/<branch>` from inside a SLOT, and this runs in the main checkout, which
1072
+ // never checks the branch out itself. `entry.ts` runs `git fetch origin --prune` at the top
1073
+ // of every pass, before maintenance ever executes, so this remote-tracking ref is fresh for
1074
+ // the SAME pass that is about to compare it — no extra fetch needed here.
1075
+ //
1076
+ // Deliberately WITHOUT `--quiet`: that flag suppresses git's own diagnostic on the exact
1077
+ // failure this check needs to recognise, collapsing it into the SAME silent, empty-stderr
1078
+ // failure a missing `git` binary or a broken checkout also produces through this `run` seam
1079
+ // (which only ever surfaces a thrown Error's `.message`, never the raw exit code). Keeping
1080
+ // the diagnostic is what lets `BRANCH_REF_NOT_FOUND_PATTERN` tell them apart.
1081
+ try {
1082
+ run('git', ['rev-parse', '--verify', `refs/remotes/origin/${branch}`], mainCheckoutPath);
1083
+ } catch (error) {
1084
+ const message = error instanceof Error ? error.message : String(error);
1085
+ if (BRANCH_REF_NOT_FOUND_PATTERN.test(message)) {
1086
+ // No remote-tracking ref at all (already deleted — GitHub's own auto-delete, or an
1087
+ // earlier pass — or never pushed): nothing survives on the remote to lose, so there is
1088
+ // nothing to refuse either.
1089
+ return false;
1090
+ }
1091
+ // S2 [LOW], 2026-09-08: any OTHER failure of this call (the `git` binary missing, a
1092
+ // corrupted checkout, a permissions error) is NOT a confirmed-absent answer — it is an
1093
+ // unanswerable question, and `deleteLocalBranch` runs right after this on a `true` result,
1094
+ // so misreading it as "nothing to lose" destroys the only copy of the branch on a mere
1095
+ // inability to check. Fail in the SAME safe direction as the merge-base check below.
1096
+ return true;
1097
+ }
1098
+ // `git merge-base --is-ancestor A B` exits 0 iff A is reachable from B — i.e. the branch's
1099
+ // tip is fully contained in the base, so it carries nothing beyond it. Reuses the SAME `run`
1100
+ // seam every other method here does (no new collaborator, no stdout to capture): any other
1101
+ // outcome — genuinely not an ancestor, or an unreachable/unresolvable ref — throws through
1102
+ // `run`'s wrapper, and both collapse to the SAME fail-safe refusal, since deletion is
1103
+ // destructive and only a CONFIRMED-clean answer authorises it.
1104
+ //
1105
+ // S1 (2026-09-08): this check has an UNDECLARED dependency on the GitHub merge strategy. It
1106
+ // is correct as shipped because this repo merges PRs with merge commits, so the branch tip
1107
+ // stays a real ancestor of `baseRef` once merged. A squash or a rebase merge REWRITES the
1108
+ // commits onto the base under a new SHA, so the original branch tip is no longer reachable
1109
+ // from it — `--is-ancestor` would then answer "false" for EVERY genuinely-merged branch, and
1110
+ // this refuses every delete, leaving `branchCleanupRefused` (and its PR comment) fire on
1111
+ // every single `Done` task. Flipping the repo's merge strategy is what would break this, not
1112
+ // a code change here — the next reader who considers that flip must re-derive this check.
1113
+ try {
1114
+ run('git', ['merge-base', '--is-ancestor', `origin/${branch}`, baseRef], mainCheckoutPath);
1115
+ return false;
1116
+ } catch {
1117
+ return true;
1118
+ }
1119
+ },
1120
+ };
1121
+ }
1122
+
1123
+ function runOsascript(args: string[]): void {
1124
+ try {
1125
+ execFileSync('osascript', args, { stdio: 'ignore', timeout: EXTERNAL_CALL_TIMEOUT_MS });
1126
+ } catch {
1127
+ // Best-effort: a missing osascript (non-Mac, sandboxed CI) must never fail the pass.
1128
+ }
1129
+ }
1130
+
1131
+ // ── Close runners ──────────────────────────────────────────────────────────────
1132
+
1133
+ export interface BuildCloseRunnersInput {
1134
+ mainCheckoutPath: string;
1135
+ repoRoot: string;
1136
+ task: Task;
1137
+ attempt: number;
1138
+ branch: string;
1139
+ reviewerModel: string;
1140
+ /** Wall-clock bound on the reviewer subprocess (`lanes.json`'s `reviewerTimeoutMinutes`). */
1141
+ reviewerTimeoutMs: number;
1142
+ /** Set by the close's `drain` step: main runs one more pass when the slot frees up. */
1143
+ requestDrain: () => void;
1144
+ /** The board snapshot this pass read, for the parent recomputation. */
1145
+ tasksById: Record<string, Task>;
1146
+ /**
1147
+ * Whether that snapshot is the WHOLE board (`BoardLoad.complete` of the post-sweep re-read). The
1148
+ * parent recomputation is SKIPPED when it is false: a derivation over some of the children
1149
+ * produces a confident wrong answer — the same reason the maintenance sweep refuses it — and
1150
+ * `reloadTasks` used to drop the flag, so the close derived from a partial board unaware.
1151
+ */
1152
+ boardComplete: boolean;
1153
+ /**
1154
+ * `lanes.json`'s `attempts` cap (T-8 point 6) — threaded into `openPr`'s composed PR body
1155
+ * alongside the attempt number, so a reviewer reading the PR sees "intento 2 de 3" rather than a
1156
+ * bare count with no ceiling to judge it against. Optional so a caller with no lane config in
1157
+ * hand (every existing test fixture) still gets `buildPrCreateArgs`'s own fallback.
1158
+ */
1159
+ maxAttempts?: number;
1160
+ /**
1161
+ * `lanes.json`'s optional top-level `harnessReviewer` handle (T-31, design.md decision 8). Ships
1162
+ * UNSET: `gh pr create --reviewer <self>` (and the equivalent edit) fails when the reviewer is the
1163
+ * pull request's own author, and the dispatcher opens every PR as the same account. When absent,
1164
+ * `openPr` records that once rather than attempting a call doomed to fail.
1165
+ */
1166
+ harnessReviewer?: string;
1167
+ /** Injected by tests; defaults to the real `slots.json` lookup. `null` = no slot holds the task. */
1168
+ slotPathFor?: (taskId: string) => string | null;
1169
+ /** Injected by tests; defaults to a real `execFileSync` returning stdout. */
1170
+ run?: RunInSlot;
1171
+ /** Injected by tests; defaults to `spawnCapture` — never throws, reports the exit status. */
1172
+ runCapturing?: (
1173
+ command: string,
1174
+ args: string[],
1175
+ cwd: string,
1176
+ ) => { status: number; output: string };
1177
+ /**
1178
+ * Reads `backlog task view <id> --plain`. Injected so the board reads every runner makes — the
1179
+ * integrity gate, the pre-PR gate, the PR title, the DoD ticks, the parent recomputation — are
1180
+ * driven in tests without spawning `backlog`, which is what lets the "no runner ever operates on
1181
+ * the main checkout" suite actually exercise them instead of stopping at the four that shell out.
1182
+ */
1183
+ viewTask?: (taskId: string) => string;
1184
+ /** Injected by tests; defaults to the real `osascript` call, which would pop a real notification. */
1185
+ runOsascript?: OsascriptRunner;
1186
+ }
1187
+
1188
+ type RunInSlot = (
1189
+ command: string,
1190
+ args: string[],
1191
+ options: { cwd: string; env?: Record<string, string>; timeout?: number },
1192
+ ) => string;
1193
+
1194
+ /**
1195
+ * A whole attempt diff routinely runs into megabytes, and `execFileSync`'s 1 MB default turns that
1196
+ * into a THROWN ENOBUFS rather than a big string — silently, on exactly the large changes most
1197
+ * worth reviewing. Same reason on the reviewer: its transcript carries the diff back.
1198
+ */
1199
+ const LARGE_OUTPUT_MAX_BUFFER = 50 * 1024 * 1024;
1200
+
1201
+ /** Why every runner fails when no slot holds the task — see `findSlotPathForTask`. */
1202
+ const NO_SLOT_QUESTION =
1203
+ 'la tarea no tiene slot asignado en slots.json: no hay directorio donde verificar ni guardar su trabajo.';
1204
+
1205
+ export function buildCloseRunners(input: BuildCloseRunnersInput): CloseRunners {
1206
+ const { mainCheckoutPath, repoRoot, task, attempt, branch } = input;
1207
+ const slotPath =
1208
+ input.slotPathFor ??
1209
+ ((taskId: string): string | null => findSlotPathForTask(mainCheckoutPath, taskId));
1210
+ const runIn: RunInSlot =
1211
+ input.run ??
1212
+ ((command, args, options) =>
1213
+ execFileSync(command, args, {
1214
+ cwd: options.cwd,
1215
+ encoding: 'utf8',
1216
+ env: options.env,
1217
+ // T-97: every call site through this seam used to pass no `timeout` at all — only the
1218
+ // reviewer step (below) ever set one explicitly. Falling back here, rather than at each call
1219
+ // site, is what closes the gap for git/gh/backlog/node calls the close makes without
1220
+ // duplicating the same bound at a dozen call sites.
1221
+ timeout: options.timeout ?? EXTERNAL_CALL_TIMEOUT_MS,
1222
+ maxBuffer: LARGE_OUTPUT_MAX_BUFFER,
1223
+ }));
1224
+ const runCapturing = input.runCapturing ?? spawnCapture;
1225
+ const osascript = input.runOsascript ?? runOsascript;
1226
+ const readTask = (): string => {
1227
+ try {
1228
+ return (input.viewTask ?? ((taskId: string) => viewTask(mainCheckoutPath, taskId)))(task.id);
1229
+ } catch (error) {
1230
+ console.error(`dispatch.ts: backlog task view ${task.id} failed:`, error);
1231
+ return '';
1232
+ }
1233
+ };
1234
+ // The dispatcher-owned board-write channel (`BACKLOG_DISPATCH_ACTIVE='1'`, retried over
1235
+ // Backlog.md's per-task lock) — routed through the same injected `runIn` every git/gh call in
1236
+ // this closure uses, so a test observes it exactly like any other recorded call, never through a
1237
+ // raw `backlog` invocation `entry.ts`'s dispatcher-owned-write sentinel would fail to recognize.
1238
+ const boardBacklog = realBacklog(mainCheckoutPath, {
1239
+ run: (args, options) => {
1240
+ runIn('backlog', args, { cwd: options.cwd, env: definedEnv(options.env) });
1241
+ },
1242
+ });
1243
+ /**
1244
+ * A TRAIL, not part of the close's contract: `realBacklog` throws on a write it could not
1245
+ * complete after its own retries, and `openPr` must never let that decide whether the attempt
1246
+ * itself was good — the PR already exists by the time this runs. Swallowed the same way
1247
+ * `tickOwnedDod` swallows its own failures (`console.error`, keep going), never rethrown.
1248
+ */
1249
+ const recordPrUrl = (text: string): void => {
1250
+ try {
1251
+ boardBacklog.comment(task.id, text);
1252
+ } catch (error) {
1253
+ console.error(`dispatch.ts: could not comment the PR URL on ${task.id}:`, error);
1254
+ }
1255
+ };
1256
+ const attemptDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR, task.id, `intento-${attempt}`);
1257
+ const base = resolveBaseRef(task);
1258
+ // Set by `scopeCheck` below, read by `openPr`'s human-review mark — never recomputed at PR time
1259
+ // (design.md decision 8, T-31): by then `mirrorRegen` has written into
1260
+ // `packages/cli/src/templates/`, and a recomputation would match `packages/cli/` and mark EVERY
1261
+ // attempt that touched any mirrored root, which is a mark that fires always and says nothing.
1262
+ let humanReviewFiles: readonly string[] = [];
1263
+
1264
+ return {
1265
+ // Re-read the board and compare it against the launch snapshot BEFORE any step trusts it. The
1266
+ // worker held a `backlog task edit` grant on this task for its whole run.
1267
+ boardCheck: () => checkBoardIntegrity({ taskText: readTask(), task }),
1268
+ // An absent lane is unreachable here (guard 1 blocks it), so the fallback only decides which
1269
+ // way to be wrong: LOCAL is the stricter check of the two.
1270
+ scopeCheck: () => {
1271
+ const cwd = slotPath(task.id);
1272
+ if (cwd === null) {
1273
+ return {
1274
+ ok: false,
1275
+ reason: 'scope-check-failed',
1276
+ question: NO_SLOT_QUESTION,
1277
+ humanReviewFiles: [],
1278
+ };
1279
+ }
1280
+ const result = runScopeCheck({
1281
+ lane: task.lane ?? LANE.LOCAL,
1282
+ declaredFiles: task.filesToTouch,
1283
+ base,
1284
+ runGit: (args) => runIn('git', args, { cwd }),
1285
+ });
1286
+ if (result.ok) {
1287
+ humanReviewFiles = result.humanReviewFiles;
1288
+ }
1289
+ return result;
1290
+ },
1291
+ formatLintTest: () => {
1292
+ const cwd = slotPath(task.id);
1293
+ if (cwd === null) {
1294
+ return { ok: false, reason: 'format-lint-test-failed', question: NO_SLOT_QUESTION };
1295
+ }
1296
+ // The command SNAPSHOTTED at launch, never re-read here: the worker had `backlog task edit`
1297
+ // on its own task all run, so a close that re-reads the board runs whatever the thing under
1298
+ // test decided it should be verified with.
1299
+ //
1300
+ // `task.testCommand` is non-null on every REAL dispatch: guard 1 blocks a task that declares
1301
+ // no `Test command:` line before a worker ever starts, so this close only ever sees one that
1302
+ // passed that guard. `planMechanicalChecks` still handles the null (it is a pure planner with
1303
+ // its own tests) — there is simply no branch to take here.
1304
+
1305
+ let changedFiles: string[];
1306
+ try {
1307
+ changedFiles = collectChangedFiles({ base, runGit: (args) => runIn('git', args, { cwd }) });
1308
+ } catch (error) {
1309
+ return {
1310
+ ok: false,
1311
+ reason: 'format-lint-test-failed',
1312
+ question: `git no se pudo ejecutar: ${describeExecFailure(error)}`,
1313
+ };
1314
+ }
1315
+
1316
+ const plan = planMechanicalChecks({
1317
+ testCommand: task.testCommand,
1318
+ lintBarrels: hasLintBarrelsScript(repoRoot),
1319
+ changedFiles,
1320
+ exists: (file) => fs.existsSync(path.join(cwd, file)),
1321
+ });
1322
+ if (plan.skippedPrettierFiles.length > 0) {
1323
+ // Prettier is not a root dependency, so a file outside `backend/`, `frontier/` or the two
1324
+ // core packages has no formatter to run — reported, not silently treated as formatted.
1325
+ console.warn(
1326
+ `dispatch.ts: ${task.id} — no prettier workspace covers: ${plan.skippedPrettierFiles.join(', ')}`,
1327
+ );
1328
+ }
1329
+ if (plan.refusal) {
1330
+ return { ok: false, reason: 'format-lint-test-failed', question: plan.refusal };
1331
+ }
1332
+
1333
+ for (const check of plan.checks) {
1334
+ const result = runCapturing(check.command, check.args, cwd);
1335
+ const outcome = evaluateMechanicalCheckResult(check, result.status);
1336
+ const advisoryNote = outcome.advisory
1337
+ ? `[advisory] "${check.label}" exited ${result.status}; not failing the attempt.\n`
1338
+ : '';
1339
+ fs.appendFileSync(
1340
+ path.join(attemptDir, 'test.log'),
1341
+ `$ ${check.command} ${check.args.join(' ')}\n${result.output}\n${advisoryNote}`,
1342
+ );
1343
+ if (!outcome.ok) {
1344
+ return {
1345
+ ok: false,
1346
+ reason: 'format-lint-test-failed',
1347
+ question: `Falló "${check.label}"; mira test.log.`,
1348
+ };
1349
+ }
1350
+ }
1351
+
1352
+ // The triad just proved these; ticking them here is what keeps the pre-PR gate from failing
1353
+ // a green attempt on bookkeeping the worker was never asked to do. "Scoped tests pass" is
1354
+ // ticked ONLY when a test check actually ran: ticking it because the step as a whole returned
1355
+ // green would assert a test that never existed, and the gate that follows is what turns that
1356
+ // silence into a failed attempt rather than into a PR.
1357
+ const taskText = readTask();
1358
+ if (plan.checks.some((check) => check.label === 'test')) {
1359
+ tickOwnedDod(mainCheckoutPath, task.id, taskText, DOD_SCOPED_TESTS);
1360
+ }
1361
+ tickOwnedDod(mainCheckoutPath, task.id, taskText, DOD_PRETTIER_BARRELS);
1362
+ return { ok: true };
1363
+ },
1364
+ // Regenerates the CLI scaffold mirror when the attempt touched a root the packager reads, so the
1365
+ // PR passes CI's `Check mirror <-> source drift`. It runs AFTER the triad on purpose: that step
1366
+ // rewrites the attempt's own files with `prettier --write`, and a mirror copied before it would
1367
+ // be stale the moment it did. See `runMirrorRegen` for the rest of the reasoning.
1368
+ mirrorRegen: () => {
1369
+ const cwd = slotPath(task.id);
1370
+ if (cwd === null) {
1371
+ return { ok: false, reason: 'mirror-regen-failed', question: NO_SLOT_QUESTION };
1372
+ }
1373
+
1374
+ // Both callbacks re-throw through `describeExecFailure`: an `execFileSync` throw carries only
1375
+ // "Command failed: node scripts/packager/publish.mjs" in its `message`, and the packager's
1376
+ // real complaint (a missing source directory, an fs-extra error) is in the stderr nobody
1377
+ // prints. The `Blocked` comment is the only channel telling a person why the attempt stopped.
1378
+ const result = runMirrorRegen({
1379
+ base,
1380
+ runGit: (args) => {
1381
+ try {
1382
+ return runIn('git', args, { cwd });
1383
+ } catch (error) {
1384
+ throw new Error(describeExecFailure(error));
1385
+ }
1386
+ },
1387
+ driftCheckWorkflow: readDriftCheckWorkflow(cwd),
1388
+ runPackager: () => {
1389
+ try {
1390
+ runIn('node', [MIRROR_PACKAGER_SCRIPT], { cwd });
1391
+ } catch (error) {
1392
+ throw new Error(describeExecFailure(error));
1393
+ }
1394
+ },
1395
+ });
1396
+
1397
+ if (result.regenerated) {
1398
+ console.error(
1399
+ `dispatch.ts: ${task.id} — espejo del scaffold regenerado (${result.mirrorFiles.length} ficheros bajo ` +
1400
+ 'packages/cli/src/templates/); viajan en el commit del intento.',
1401
+ );
1402
+ }
1403
+ return result;
1404
+ },
1405
+ reviewer: () => {
1406
+ const cwd = slotPath(task.id);
1407
+ if (cwd === null) {
1408
+ return { ok: false, reason: 'reviewer-failed', question: NO_SLOT_QUESTION };
1409
+ }
1410
+
1411
+ // An uncollectable diff FAILS the step. Handing the reviewer a note saying git blew up reads
1412
+ // to it as an empty change set, and it duly approves code it never saw.
1413
+ let diff: string;
1414
+ try {
1415
+ diff = collectAttemptDiff({ base, runGit: (args) => runIn('git', args, { cwd }) });
1416
+ } catch (error) {
1417
+ return {
1418
+ ok: false,
1419
+ reason: 'reviewer-failed',
1420
+ question: `no se pudo obtener el diff: ${describeExecFailure(error)}`,
1421
+ };
1422
+ }
1423
+
1424
+ return runReviewer({
1425
+ taskId: task.id,
1426
+ model: input.reviewerModel,
1427
+ diff,
1428
+ acceptanceCriteria: parseAcceptanceCriteria(readTask()),
1429
+ // The reviewer runs on the ACCOUNT, never on LM Studio. `reviewerEnv` drops every
1430
+ // `ANTHROPIC_*` key — the lane's LM Studio overlay so a weak local executor can never end up
1431
+ // reviewing itself (design.md's close diagram, `SR`), and the API key with it, because a
1432
+ // stale one in the dispatcher's shell takes precedence over the account's claude.ai login
1433
+ // and left the reviewer unable to start at all. Bounded, because it runs while this process
1434
+ // still owns the slot.
1435
+ //
1436
+ // The failure is rendered with the child's stderr: `execFileSync`'s own `error.message` is
1437
+ // "Command failed: claude -p …", and the T-5 run's `review.md` said exactly that and
1438
+ // nothing more — the auth error that explained it was in the stderr nobody printed.
1439
+ run: (command, args) => {
1440
+ try {
1441
+ return runIn(command, args, {
1442
+ cwd,
1443
+ env: reviewerEnv(),
1444
+ timeout: input.reviewerTimeoutMs,
1445
+ });
1446
+ } catch (error) {
1447
+ throw new Error(describeExecFailure(error));
1448
+ }
1449
+ },
1450
+ writeReview: (content) => fs.writeFileSync(path.join(attemptDir, 'review.md'), content),
1451
+ });
1452
+ },
1453
+ acCheck: () => {
1454
+ // Re-read the task: the worker ticked its acceptance criteria through the `backlog` CLI while
1455
+ // it worked, so the snapshot this pass started with is stale by definition here.
1456
+ const result = evaluateAcceptanceGate(readTask());
1457
+ if (result.ok) {
1458
+ tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_EVERY_AC);
1459
+ }
1460
+ return result;
1461
+ },
1462
+ openPr: () => {
1463
+ const cwd = slotPath(task.id);
1464
+ if (cwd === null) {
1465
+ return { ok: false, reason: 'open-pr-failed', question: NO_SLOT_QUESTION };
1466
+ }
1467
+ // Applies the human-review mark's two best-effort halves — a SEPARATE `gh pr edit` call each
1468
+ // (design.md decision 8, T-31): a rejected reviewer must not take the label down with it, and
1469
+ // a label the repository does not have must not fail the close at all. Each failure is
1470
+ // RECORDED (never propagated) with `describeExecFailure`, same as every other best-effort gh
1471
+ // call in this runner. No-op when the scope check reported no soft-list file.
1472
+ // The mark's BODY half, for the REUSE branch only: a newly created pull request already
1473
+ // carries it inside `gh pr create --body` (`buildPrCreateArgs`), which is what makes that half
1474
+ // unfailable. A retry has no create call at all, so without this the reused pull request names
1475
+ // no soft-list file and the whole mark rests on the two `gh pr edit` calls the design allows to
1476
+ // fail.
1477
+ //
1478
+ // It READS the body first and edits only its own delimited section
1479
+ // (`upsertHumanReviewSection`). `gh pr edit --body` is a full replacement, and these are by
1480
+ // construction the pull requests a person was asked to read and annotate — recomposing the
1481
+ // body from the board erased every word that person had added (T-31 round 2). A body that
1482
+ // cannot be read is not overwritten at all: with no idea what is there, the mark is skipped
1483
+ // and recorded, like every other best-effort half.
1484
+ const applyHumanReviewBody = (): void => {
1485
+ if (humanReviewFiles.length === 0) {
1486
+ return;
1487
+ }
1488
+ let currentBody: string;
1489
+ try {
1490
+ currentBody = readPrBody(branch, (args) => runIn('gh', args, { cwd, env: ghEnv() }));
1491
+ } catch (error) {
1492
+ console.error(
1493
+ `dispatch.ts: ${task.id} — no se pudo leer el cuerpo de la PR reutilizada, así que no se reescribe (se perdería el texto humano): ${describeExecFailure(error)}`,
1494
+ );
1495
+ return;
1496
+ }
1497
+ try {
1498
+ runIn(
1499
+ 'gh',
1500
+ buildPrBodyArgs(branch, upsertHumanReviewSection(currentBody, humanReviewFiles)),
1501
+ { cwd, env: ghEnv() },
1502
+ );
1503
+ } catch (error) {
1504
+ console.error(
1505
+ `dispatch.ts: ${task.id} — no se pudo reescribir el cuerpo de la PR reutilizada con la sección de revisión humana: ${describeExecFailure(error)}`,
1506
+ );
1507
+ }
1508
+ };
1509
+
1510
+ const markForHumanReview = (): void => {
1511
+ if (humanReviewFiles.length === 0) {
1512
+ return;
1513
+ }
1514
+ try {
1515
+ runIn('gh', buildPrLabelArgs(branch), { cwd, env: ghEnv() });
1516
+ } catch (error) {
1517
+ console.error(
1518
+ `dispatch.ts: ${task.id} — no se pudo aplicar la etiqueta ${HARNESS_REVIEW_LABEL}: ${describeExecFailure(error)}`,
1519
+ );
1520
+ }
1521
+ if (input.harnessReviewer) {
1522
+ try {
1523
+ runIn('gh', buildPrReviewerArgs(branch, input.harnessReviewer), { cwd, env: ghEnv() });
1524
+ } catch (error) {
1525
+ console.error(
1526
+ `dispatch.ts: ${task.id} — no se pudo asignar el revisor ${input.harnessReviewer}: ${describeExecFailure(error)}`,
1527
+ );
1528
+ }
1529
+ } else {
1530
+ console.error(
1531
+ `dispatch.ts: ${task.id} — PR marcada con ${HARNESS_REVIEW_LABEL}; sin revisor configurado.`,
1532
+ );
1533
+ }
1534
+ };
1535
+
1536
+ try {
1537
+ // Commit and push FIRST: `gh pr create --head <branch>` needs the branch on the remote, and
1538
+ // the executor is forbidden from running `git` itself, so on a green attempt everything it
1539
+ // wrote is still an uncommitted working tree at this point (design.md's close diagram:
1540
+ // "commit on task branch, push, PR to main or to the parent branch" is ONE step).
1541
+ runIn('git', ['add', '-A'], { cwd });
1542
+ // `--no-verify` for the same reason the WIP auto-save carries it: the hooks that would run
1543
+ // here live in the slot's working tree, which is where the worker has been writing.
1544
+ runIn(
1545
+ 'git',
1546
+ [
1547
+ 'commit',
1548
+ '-m',
1549
+ buildAttemptCommitMessage(task.id, attempt),
1550
+ '--allow-empty',
1551
+ '--no-verify',
1552
+ ],
1553
+ {
1554
+ cwd,
1555
+ },
1556
+ );
1557
+ runIn('git', ['push', '-u', 'origin', branch], { cwd });
1558
+
1559
+ // A retry pushes to the same branch, so the PR from the previous attempt is still open and
1560
+ // the push above already updated it. Creating a second one is impossible (`gh` refuses) —
1561
+ // asking first is what turns that refusal into the reuse it should always have been.
1562
+ // `env: ghEnv()` on every gh call below: see `ghEnv`'s own header for the measured 401 this
1563
+ // closes (T-5, 2026-09-07) — without it, a stale `GITHUB_TOKEN` in the dispatcher's shell
1564
+ // outranks `gh`'s own keyring login.
1565
+ const existing = findOpenPrUrl({
1566
+ branch,
1567
+ runGh: (args) => runIn('gh', args, { cwd, env: ghEnv() }),
1568
+ });
1569
+ if (existing !== null) {
1570
+ console.error(`dispatch.ts: PR existente reutilizada para ${branch}: ${existing}`);
1571
+ notify(`${task.id}: PR existente reutilizada`, existing, osascript);
1572
+ recordPrUrl(`PR existente reutilizada: ${existing}`);
1573
+ tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_PR_OPENED);
1574
+ applyHumanReviewBody();
1575
+ markForHumanReview();
1576
+ return { ok: true, compareUrl: existing };
1577
+ }
1578
+
1579
+ const title = buildPrTitle(task.id, parseTaskTitle(readTask()));
1580
+ // T-8 point 6: the board text re-read right here (never the launch-time snapshot, which a
1581
+ // worker's own notes/plan have moved past) becomes the PR's composed body via
1582
+ // `buildPrCreateArgs`'s `taskText` — omitting it falls back to the legacy one-line body,
1583
+ // which is exactly the gap this call site is closing.
1584
+ const output = runIn(
1585
+ 'gh',
1586
+ buildPrCreateArgs({
1587
+ task,
1588
+ branch,
1589
+ attempt,
1590
+ title,
1591
+ taskText: readTask(),
1592
+ maxAttempts: input.maxAttempts,
1593
+ humanReviewFiles,
1594
+ }),
1595
+ { cwd, env: ghEnv() },
1596
+ );
1597
+ const prUrl = output.trim();
1598
+ notify(`${task.id}: PR abierta`, prUrl, osascript);
1599
+ recordPrUrl(`PR abierta: ${prUrl}`);
1600
+ tickOwnedDod(mainCheckoutPath, task.id, readTask(), DOD_PR_OPENED);
1601
+ markForHumanReview();
1602
+ return { ok: true, compareUrl: prUrl };
1603
+ } catch (error) {
1604
+ return { ok: false, reason: 'open-pr-failed', question: describeExecFailure(error) };
1605
+ }
1606
+ },
1607
+ releaseSlot: () => {
1608
+ // The one release procedure every path shares (`slots.ts`): detach, then clear the entry.
1609
+ releaseSlotAndDetach({
1610
+ taskId: task.id,
1611
+ slotPath: slotPath(task.id),
1612
+ runGit: (args, at) => runIn('git', args, { cwd: at }),
1613
+ updateSlots: realMaintenanceFs(mainCheckoutPath, repoRoot).updateSlots,
1614
+ });
1615
+ releaseLock(path.join(mainCheckoutPath, DISPATCH_SUBDIR), task.id);
1616
+ },
1617
+ recomputeParent: () => {
1618
+ if (!task.parentId) {
1619
+ return;
1620
+ }
1621
+ if (!input.boardComplete) {
1622
+ console.error(
1623
+ `dispatch.ts: the post-sweep board read was incomplete; skipping ${task.parentId}'s recomputation. ` +
1624
+ 'A parent derived from half its children is a confident wrong answer — the next pass, with a readable board, does it.',
1625
+ );
1626
+ return;
1627
+ }
1628
+ const recomputed = recomputeParent({
1629
+ parentId: task.parentId,
1630
+ // The child just finished, so its snapshot status (`In Progress`) is stale; the parent's
1631
+ // derivation must see what the board now says, not what this pass read at its start.
1632
+ tasksById: {
1633
+ ...input.tasksById,
1634
+ [task.id]: { ...task, status: parseTaskStatus(readTask()) },
1635
+ },
1636
+ gh: realGh(repoRoot),
1637
+ backlog: realBacklog(mainCheckoutPath),
1638
+ fs: realMaintenanceFs(mainCheckoutPath, repoRoot),
1639
+ });
1640
+ if (recomputed) {
1641
+ console.log(
1642
+ `dispatch.ts: parent ${recomputed.id} recomputed ${recomputed.from} -> ${recomputed.to}`,
1643
+ );
1644
+ }
1645
+ },
1646
+ drain: () => input.requestDrain(),
1647
+ saveWork: () =>
1648
+ realGit(mainCheckoutPath, {
1649
+ slotPathFor: slotPath,
1650
+ run: (command, args, cwd) => void runIn(command, args, { cwd }),
1651
+ }).saveWipAndPush(branch),
1652
+ // The record for a failure that no `scope-check` preceded (T-31 rounds 3 and 4): a session-level
1653
+ // failure, or a `board-check` that diverted before it. Classified by LANE, from the same function
1654
+ // the scope check reads, so the record and the verdict cannot disagree about a path. `base` is
1655
+ // this task's own base ref — `origin/task/<parentId>` for a subtask, where diffing against
1656
+ // `origin/main` would report the parent's whole accumulated diff as this attempt's leftovers.
1657
+ // `executeClose` treats a throw as "none found": a close that already failed must not fail harder
1658
+ // over a marking concern.
1659
+ leftoverFiles: () => {
1660
+ const cwd = slotPath(task.id);
1661
+ if (cwd === null) {
1662
+ return { forbiddenFiles: [], humanReviewFiles: [] };
1663
+ }
1664
+ return collectLeftoverFiles({
1665
+ lane: task.lane ?? LANE.LOCAL,
1666
+ base,
1667
+ runGit: (args) => runIn('git', args, { cwd }),
1668
+ });
1669
+ },
1670
+ block: (details) => {
1671
+ // Blocked FIRST, released after: a task whose slot is already free but whose status still
1672
+ // says `In Progress` looks to the maintenance sweep like a worker that vanished. The reverse
1673
+ // window is the accepted one — for the few milliseconds between these two lines the task is
1674
+ // `Blocked` while its slot still names it, and step 4's manual-cancellation branch could act
1675
+ // on it. All that branch does is save work already saved and release a slot about to be
1676
+ // released, so the cost of the race is a redundant no-op, not a lost attempt.
1677
+ realBacklog(mainCheckoutPath).setStatus(
1678
+ task.id,
1679
+ TASK_STATUS.BLOCKED,
1680
+ formatBlockComment(details),
1681
+ );
1682
+ notify(`${task.id} blocked: ${details.reason}`, details.logPath, osascript);
1683
+ },
1684
+ blockKeepSlot: (details) => {
1685
+ // The push failed, so this slot holds the ONLY copy of the work: mark it so the next
1686
+ // maintenance pass retries the push, and so no acquisition ever reuses it meanwhile. The lock
1687
+ // goes, though — this reconciler process is about to exit, and its pid would be swept anyway.
1688
+ // Only the `heldForRecovery` flag is touched, so a concurrent pass's own slot survives.
1689
+ realMaintenanceFs(mainCheckoutPath, repoRoot).updateSlots((current) => ({
1690
+ slots: current.slots.map((slot) =>
1691
+ slot.taskId === task.id ? { ...slot, heldForRecovery: true } : slot,
1692
+ ),
1693
+ }));
1694
+ releaseLock(path.join(mainCheckoutPath, DISPATCH_SUBDIR), task.id);
1695
+ realBacklog(mainCheckoutPath).setStatus(
1696
+ task.id,
1697
+ TASK_STATUS.BLOCKED,
1698
+ formatBlockComment(details),
1699
+ );
1700
+ notify(`${task.id} blocked: ${details.reason}`, details.logPath, osascript);
1701
+ },
1702
+ };
1703
+ }
1704
+
1705
+ function spawnCapture(
1706
+ command: string,
1707
+ args: string[],
1708
+ cwd: string,
1709
+ ): { status: number; output: string } {
1710
+ try {
1711
+ const output = execFileSync(command, args, {
1712
+ cwd,
1713
+ encoding: 'utf8',
1714
+ stdio: ['ignore', 'pipe', 'pipe'],
1715
+ // T-97: the declared Test command (and prettier/lint before it) runs through here, unbounded
1716
+ // until now. `MECHANICAL_CHECK_TIMEOUT_MS`, not `EXTERNAL_CALL_TIMEOUT_MS`: a real test suite
1717
+ // legitimately runs for minutes, but a hang must still fail well before `LOCK_TTL_MS` — see
1718
+ // that constant's own header for the measured incident this closes.
1719
+ timeout: MECHANICAL_CHECK_TIMEOUT_MS,
1720
+ });
1721
+ return { status: 0, output };
1722
+ } catch (error) {
1723
+ const failure = error as { status?: number; stdout?: string; stderr?: string };
1724
+ return {
1725
+ status: failure.status ?? 1,
1726
+ output: `${failure.stdout ?? ''}${failure.stderr ?? ''}`,
1727
+ };
1728
+ }
1729
+ }
1730
+
1731
+ /** What `mirrorRegen` spawns, relative to the slot it runs in. */
1732
+ const MIRROR_PACKAGER_SCRIPT = 'scripts/packager/publish.mjs';
1733
+
1734
+ /** The CI gate whose `paths:` filter IS the mirrored-root list `runMirrorRegen` reads. */
1735
+ const DRIFT_CHECK_WORKFLOW_PATH = path.join('.github', 'workflows', 'cli-template-drift-check.yml');
1736
+
1737
+ /**
1738
+ * The drift-check workflow as it stands IN THE SLOT, or `null` when the repo has none — a generated
1739
+ * project, where `copyMonorepo()` ships `scripts/backlog/**` but neither `.github/**` nor
1740
+ * `scripts/packager/**`. Read from the slot rather than from the main checkout for the same reason
1741
+ * every other close read is: the attempt may legitimately have changed that file, and the roots the
1742
+ * mirror needs are the ones the PR will be judged against.
1743
+ */
1744
+ function readDriftCheckWorkflow(slotPath: string): string | null {
1745
+ try {
1746
+ return fs.readFileSync(path.join(slotPath, DRIFT_CHECK_WORKFLOW_PATH), 'utf8');
1747
+ } catch {
1748
+ return null;
1749
+ }
1750
+ }
1751
+
1752
+ function hasLintBarrelsScript(repoRoot: string): boolean {
1753
+ try {
1754
+ const pkg = JSON.parse(fs.readFileSync(path.join(repoRoot, 'package.json'), 'utf8')) as {
1755
+ scripts?: Record<string, string>;
1756
+ };
1757
+ return Boolean(pkg.scripts?.[LINT_BARRELS_SCRIPT]);
1758
+ } catch {
1759
+ return false;
1760
+ }
1761
+ }
1762
+
1763
+ function readTaskText(mainCheckoutPath: string, taskId: string): string {
1764
+ try {
1765
+ return viewTask(mainCheckoutPath, taskId);
1766
+ } catch (error) {
1767
+ console.error(`dispatch.ts: backlog task view ${taskId} failed:`, error);
1768
+ return '';
1769
+ }
1770
+ }
1771
+
1772
+ export interface TickOwnedDodDeps {
1773
+ /** Injected by tests so no `backlog` CLI ever runs; the default wraps a real, stderr-capturing `execFileSync`. */
1774
+ run?: (taskId: string, index: number) => void;
1775
+ /** Overrides `withBoardWriteRetry`'s defaults — tests inject a synchronous, instant `sleep`. */
1776
+ retry?: Partial<BoardWriteRetryOptions>;
1777
+ }
1778
+
1779
+ /**
1780
+ * Ticks the dispatcher-owned Definition-of-Done items matching `pattern` in `taskText`, by TEXT
1781
+ * rather than by a guessed index: `--check-dod` takes the `#N` the CLI prints, and that number shifts as soon as a
1782
+ * task adds a DoD item of its own. Best-effort — a failed tick is a bookkeeping loss, never a
1783
+ * reason to fail a close that already proved the thing.
1784
+ *
1785
+ * Goes through `withBoardWriteRetry` like every other dispatcher-owned write: a `--check-dod` tick
1786
+ * can race the SAME per-task lock a status edit or a person's own edit just took (measured T-5
1787
+ * defect, see that function's header). A failure that survives every retry still only logs — this
1788
+ * tick was always best-effort, and that does not change because the failure now took longer to
1789
+ * surface.
1790
+ */
1791
+ export function tickOwnedDod(
1792
+ mainCheckoutPath: string,
1793
+ taskId: string,
1794
+ taskText: string,
1795
+ pattern: RegExp,
1796
+ deps: TickOwnedDodDeps = {},
1797
+ ): void {
1798
+ const run =
1799
+ deps.run ??
1800
+ ((id: string, index: number): void => {
1801
+ try {
1802
+ execFileSync('backlog', ['task', 'edit', id, '--check-dod', String(index)], {
1803
+ cwd: mainCheckoutPath,
1804
+ env: { ...process.env, BACKLOG_DISPATCH_ACTIVE: '1' },
1805
+ stdio: ['ignore', 'pipe', 'pipe'],
1806
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
1807
+ });
1808
+ } catch (error) {
1809
+ throw new Error(
1810
+ `dispatch.ts: backlog task edit ${id} --check-dod ${index} failed: ${describeExecFailure(error)}`,
1811
+ );
1812
+ }
1813
+ });
1814
+ const retryOptions: BoardWriteRetryOptions = { ...BOARD_WRITE_RETRY_DEFAULTS, ...deps.retry };
1815
+
1816
+ for (const item of findOwnedDefinitionOfDone(taskText, pattern)) {
1817
+ try {
1818
+ // A `task edit`, so it runs with the same dispatcher-owned-write sentinel `realBacklog` uses —
1819
+ // see `isDispatcherOwnedCallback` (entry.ts) and the measured T-5 defect this closes.
1820
+ withBoardWriteRetry(
1821
+ `backlog task edit ${taskId} --check-dod ${item.index}`,
1822
+ () => run(taskId, item.index),
1823
+ retryOptions,
1824
+ );
1825
+ } catch (error) {
1826
+ console.error(
1827
+ `dispatch.ts: could not tick DoD #${item.index} on ${taskId}:`,
1828
+ describeExecFailure(error),
1829
+ );
1830
+ }
1831
+ }
1832
+ }
1833
+
1834
+ function readTaskStatus(mainCheckoutPath: string, taskId: string): TaskStatus {
1835
+ return parseTaskView({ id: taskId, output: readTaskText(mainCheckoutPath, taskId), attempts: 0 })
1836
+ .status;
1837
+ }
1838
+
1839
+ // ── Executor prompt assembly (tasks.md 4.2/4.3) ───────────────────────────────
1840
+ //
1841
+ // Runs the two hooks the SAME way the harness itself does (`npx --loglevel=error tsx <hook>`,
1842
+ // see `.claude/settings.json`), just fed synthetic stdin instead of a live UserPromptSubmit/
1843
+ // PreToolUse event — Phase 1 spike 1.3's confirmed approach. `cwd` is always the task's own
1844
+ // worktree slot, so both hooks resolve their repo root (and, for the BR injector, its per-slot
1845
+ // `.claude/.cache/br-injected.json`) against that checkout, not the main one — while `BACKLOG_CWD`
1846
+ // in their env points the BOARD read at the main checkout, the only place tasks live.
1847
+
1848
+ /**
1849
+ * Injected so `buildHookRunners`'s environment contract is testable without spawning a hook.
1850
+ * `repoRoot` is bound by the caller; `env` is layered over the inherited one.
1851
+ */
1852
+ export type HookScriptRunner = (
1853
+ hookRelativePath: string,
1854
+ cwd: string,
1855
+ env: Record<string, string>,
1856
+ stdinPayload: unknown,
1857
+ ) => string;
1858
+
1859
+ function runHookScript(
1860
+ repoRoot: string,
1861
+ hookRelativePath: string,
1862
+ cwd: string,
1863
+ env: Record<string, string>,
1864
+ stdinPayload: unknown,
1865
+ ): string {
1866
+ try {
1867
+ const result = execFileSync(
1868
+ 'npx',
1869
+ ['--loglevel=error', 'tsx', path.join(repoRoot, hookRelativePath)],
1870
+ {
1871
+ input: JSON.stringify(stdinPayload),
1872
+ cwd,
1873
+ env: { ...process.env, ...env },
1874
+ encoding: 'utf8',
1875
+ stdio: ['pipe', 'pipe', 'ignore'],
1876
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
1877
+ },
1878
+ );
1879
+ return result;
1880
+ } catch {
1881
+ return ''; // Fail open — an unavailable/erroring hook must never block prompt assembly.
1882
+ }
1883
+ }
1884
+
1885
+ /**
1886
+ * The two hook subprocesses `prompt.ts`'s precompute drives. They run with the SLOT as cwd (so they
1887
+ * resolve rules and the injector cache against the checkout the work happens in), but with
1888
+ * `BACKLOG_CWD` naming the MAIN checkout: the board lives only there, and a slot's own `.backlog/`
1889
+ * copy has no tasks in it. `BACKLOG_DISPATCH_ACTIVE` is what makes the hook state the dispatched
1890
+ * fact ("the dispatcher already set it In Progress") instead of pointing at the interactive Task
1891
+ * Gate.
1892
+ *
1893
+ * Both still travel even though the LOCAL precompute no longer asks the hook for a task block
1894
+ * (`prompt.ts`'s `buildHookPromptText` names no id, since block 1 already carries the task text):
1895
+ * they are the environment the hook is entitled to, and the moment anything here names an id again
1896
+ * the block must resolve against the real board and read as dispatched, not as a Task Gate.
1897
+ */
1898
+ export function buildHookRunners(
1899
+ repoRoot: string,
1900
+ cwd: string,
1901
+ mainCheckoutPath: string,
1902
+ runHook: HookScriptRunner = (hookRelativePath, hookCwd, env, payload) =>
1903
+ runHookScript(repoRoot, hookRelativePath, hookCwd, env, payload),
1904
+ ): HookRunners {
1905
+ const env = { BACKLOG_CWD: mainCheckoutPath, BACKLOG_DISPATCH_ACTIVE: '1' };
1906
+ return {
1907
+ resetInjectorCache: () => resetInjectorCache(cwd),
1908
+ runInjectPromptContext: (prompt) =>
1909
+ runHook('.claude/hooks/inject-prompt-context.ts', cwd, env, { prompt, cwd }),
1910
+ runBusinessRulesInjector: (filePath) => {
1911
+ const raw = runHook('.claude/hooks/business-rules-injector.ts', cwd, env, {
1912
+ tool_name: 'Edit',
1913
+ tool_input: { file_path: filePath },
1914
+ cwd,
1915
+ });
1916
+ try {
1917
+ const parsed = JSON.parse(raw) as { hookSpecificOutput?: { additionalContext?: string } };
1918
+ return parsed.hookSpecificOutput?.additionalContext ?? '';
1919
+ } catch {
1920
+ return ''; // No JSON on stdout — the hook found nothing to inject for this file.
1921
+ }
1922
+ },
1923
+ };
1924
+ }
1925
+
1926
+ /**
1927
+ * Builds the local lane's full six-block executor prompt (design.md's "Executor prompt
1928
+ * contract"; `prompt.ts`'s `assembleExecutorPrompt`). `taskText` is the same
1929
+ * `backlog task view --plain` output the board loader already knows how to fetch; the operating
1930
+ * envelope's acceptance criteria, Definition of Done, and test command are parsed back out of that
1931
+ * same text (there is no structured CLI field for any of the three — see prompt.ts's own header),
1932
+ * and a retry (`attempt > 1`) carries the task's most recent comment plus the prior attempt's
1933
+ * `review.md`, when one was written.
1934
+ */
1935
+ function buildLocalExecutorPrompt(
1936
+ mainCheckoutPath: string,
1937
+ repoRoot: string,
1938
+ task: Task,
1939
+ attempt: number,
1940
+ ): string {
1941
+ const taskText =
1942
+ readTaskText(mainCheckoutPath, task.id) || `Task ${task.id} (backlog task view failed)`;
1943
+
1944
+ const declaredFiles = task.filesToTouch;
1945
+ const slotDir = findSlotPathForTask(mainCheckoutPath, task.id);
1946
+ if (slotDir === null) {
1947
+ // Unreachable in the real flow (`runOnce` writes the registry before it builds the prompt), and
1948
+ // a throw is the right answer anyway: the abort path releases the slot and blocks the task,
1949
+ // rather than running the hooks against the main checkout.
1950
+ throw new Error(
1951
+ `dispatch.ts: ${task.id} has no slot assigned; cannot assemble its executor prompt.`,
1952
+ );
1953
+ }
1954
+ const hookOutputs = computeHookOutputs(
1955
+ buildHookRunners(repoRoot, slotDir, mainCheckoutPath),
1956
+ task,
1957
+ declaredFiles,
1958
+ );
1959
+ const triggersIndex = loadJsonIndex(repoRoot, SKILL_TRIGGERS_INDEX_FILE, isSkillTriggerIndex) ?? {
1960
+ skills: [],
1961
+ };
1962
+ const skillPaths = matchSkillPaths(declaredFiles, triggersIndex);
1963
+ const contract = extractDelegationContract(
1964
+ fs.readFileSync(path.join(repoRoot, DELEGATION_CONTRACT_FILE), 'utf8'),
1965
+ );
1966
+
1967
+ const envelope: OperatingEnvelope = {
1968
+ allowedFiles: declaredFiles,
1969
+ forbiddenPaths: SECURITY_PATH_PATTERNS,
1970
+ testCommand:
1971
+ task.testCommand ?? 'No test command declared on the task — stop and return needs-guidance.',
1972
+ taskId: task.id,
1973
+ // The same string `backlogRulesForTask` turned into the launch's `Bash(...)` rule, so the
1974
+ // command the prompt prints is the command the worker is actually allowed to run.
1975
+ editCommand: workerEditCommand(mainCheckoutPath, task.id),
1976
+ acceptanceCriteria: parseIndexedAcceptanceCriteria(taskText),
1977
+ dod: parseDefinitionOfDone(taskText),
1978
+ };
1979
+
1980
+ return assembleExecutorPrompt({
1981
+ task: taskText,
1982
+ // Named in the prompt because the worker cannot infer it: the task text carries the BOARD
1983
+ // file's path, which lives in the main checkout — and the T-5 executor read that as its
1984
+ // repository root and aimed its first `Edit` there.
1985
+ slotPath: slotDir,
1986
+ mainCheckoutPath,
1987
+ hookOutputs,
1988
+ skillPaths,
1989
+ contract,
1990
+ envelope,
1991
+ retry: readRetryContext(mainCheckoutPath, task.id, attempt),
1992
+ });
1993
+ }
1994
+
1995
+ /**
1996
+ * The prior attempt's `Blocked` comment and reviewer findings, or `undefined` on a first attempt.
1997
+ * Shared by both lanes: the frontier orchestrator gets the same context appended to its
1998
+ * `trabajemos <id>` entry, since nothing on the board tells it a previous attempt failed.
1999
+ */
2000
+ function readRetryContext(
2001
+ mainCheckoutPath: string,
2002
+ taskId: string,
2003
+ attempt: number,
2004
+ ): { blockedComment: string; reviewerFindings?: string } | undefined {
2005
+ if (attempt <= 1) {
2006
+ return undefined;
2007
+ }
2008
+ const blockedComment = parseLastComment(readTaskText(mainCheckoutPath, taskId));
2009
+ if (!blockedComment) {
2010
+ return undefined;
2011
+ }
2012
+ const reviewPath = path.join(
2013
+ mainCheckoutPath,
2014
+ DISPATCH_SUBDIR,
2015
+ taskId,
2016
+ `intento-${attempt - 1}`,
2017
+ 'review.md',
2018
+ );
2019
+ return {
2020
+ blockedComment,
2021
+ reviewerFindings: fs.existsSync(reviewPath) ? fs.readFileSync(reviewPath, 'utf8') : undefined,
2022
+ };
2023
+ }
2024
+
2025
+ /**
2026
+ * Branch names currently checked out in ANY worktree of this repo. git refuses to check the same
2027
+ * branch out twice, so a task whose branch is still held by a slot that has not released yet has to
2028
+ * wait rather than fail.
2029
+ */
2030
+ function readCheckedOutBranches(repoRoot: string): string[] {
2031
+ try {
2032
+ const output = execFileSync('git', ['worktree', 'list', '--porcelain'], {
2033
+ cwd: repoRoot,
2034
+ encoding: 'utf8',
2035
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2036
+ });
2037
+ return output
2038
+ .split('\n')
2039
+ .filter((line) => line.startsWith('branch '))
2040
+ .map((line) =>
2041
+ line
2042
+ .slice('branch '.length)
2043
+ .trim()
2044
+ .replace(/^refs\/heads\//, ''),
2045
+ )
2046
+ .filter(Boolean);
2047
+ } catch (error) {
2048
+ console.error(
2049
+ 'dispatch.ts: git worktree list failed; assuming no branch is checked out:',
2050
+ error,
2051
+ );
2052
+ return [];
2053
+ }
2054
+ }
2055
+
2056
+ /** `null` when the lockfile cannot be read — the install check then never fires spuriously. */
2057
+ export function readLockfileHash(repoRoot: string): string | null {
2058
+ try {
2059
+ return computeLockfileHash(path.join(repoRoot, 'pnpm-lock.yaml'));
2060
+ } catch (error) {
2061
+ console.error(
2062
+ 'dispatch.ts: could not hash pnpm-lock.yaml; skipping the slot install check:',
2063
+ error,
2064
+ );
2065
+ return null;
2066
+ }
2067
+ }
2068
+
2069
+ /**
2070
+ * `packages/cli`'s OWN lockfile hash, read separately from the root's (T-50): `packages/cli` is
2071
+ * deliberately not a pnpm workspace member (root `CLAUDE.md`, D8), so it carries its own
2072
+ * `pnpm-lock.yaml` outside the root's. Kept in its own function, and its own `SlotInfo` field
2073
+ * (`cliLockfileHash`), rather than folded into `readLockfileHash`'s digest: the two installs are
2074
+ * decided and persisted at different points in the dispatch sequence (the root's before
2075
+ * `prepareSlot`, the CLI's only after its own install succeeds, later in the same pass), so one
2076
+ * combined hash could not honor either success moment on its own — a single field could go stale
2077
+ * for the CLI's half while reading as current for the root's, or vice-versa, with no way to tell
2078
+ * from the outside which install a mismatch was actually about.
2079
+ *
2080
+ * Callers must check `hasCliPackage` FIRST: called on a repo with no `packages/cli` of its own (the
2081
+ * monorepo THIS CLI generates — `packages/cli/src/templates/monorepo/` has no `packages/`
2082
+ * directory at all), this always fails to read the file and logs accordingly; the caller is
2083
+ * expected to skip calling it entirely in that case, matching `needsCliInstall`'s own
2084
+ * `hasCliPackage` gate, so no such repo ever sees that log line.
2085
+ */
2086
+ export function readCliLockfileHash(repoRoot: string): string | null {
2087
+ try {
2088
+ return computeLockfileHash(path.join(repoRoot, 'packages/cli/pnpm-lock.yaml'));
2089
+ } catch (error) {
2090
+ console.error(
2091
+ 'dispatch.ts: could not hash packages/cli/pnpm-lock.yaml; skipping the CLI install check:',
2092
+ error,
2093
+ );
2094
+ return null;
2095
+ }
2096
+ }
2097
+
2098
+ // ── main ────────────────────────────────────────────────────────────────────────
2099
+
2100
+ /** A drained pass may itself drain; two is the cap, so one trigger can never loop the queue. */
2101
+ const MAX_PASSES_PER_INVOCATION = 2;
2102
+
2103
+ /** The one flag this script takes: the manual rescue of a slot held for push recovery. */
2104
+ const RELEASE_SLOT_FLAG = '--release-slot';
2105
+ /** The override for a slot the release guard refuses — see `releaseSlotByName`. */
2106
+ const FORCE_FLAG = '--force';
2107
+
2108
+ export interface ReleaseSlotRequest {
2109
+ slot: string;
2110
+ force: boolean;
2111
+ }
2112
+
2113
+ /**
2114
+ * The `--release-slot` request, or `null` when the flag is absent. Refuses a missing or flag-shaped
2115
+ * value rather than releasing something unnamed — which is how a rescue turns into a second
2116
+ * incident. `--force` is read from anywhere in the argv; the slot NAME must follow its own flag.
2117
+ */
2118
+ export function parseReleaseSlotArg(argv: readonly string[]): ReleaseSlotRequest | null {
2119
+ const index = argv.indexOf(RELEASE_SLOT_FLAG);
2120
+ if (index === -1) {
2121
+ return null;
2122
+ }
2123
+ const value = argv[index + 1];
2124
+ if (value === undefined || value.startsWith('-')) {
2125
+ throw new Error(
2126
+ `dispatch.ts: ${RELEASE_SLOT_FLAG} needs a slot name (e.g. ${RELEASE_SLOT_FLAG} dispatch-1).`,
2127
+ );
2128
+ }
2129
+ return { slot: value, force: argv.includes(FORCE_FLAG) };
2130
+ }
2131
+
2132
+ /** Every side effect the manual release performs, injected so the guard below is testable. */
2133
+ export interface ReleaseSlotDeps {
2134
+ readSlots: () => SlotRegistry;
2135
+ readLock: (taskId: string) => DispatchLock | null;
2136
+ isPidAlive: (pid: number) => boolean;
2137
+ now: number;
2138
+ ttlMs: number;
2139
+ detach: (slotPath: string) => void;
2140
+ removeLock: (taskId: string) => void;
2141
+ updateSlots: (mutate: (current: SlotRegistry) => SlotRegistry) => void;
2142
+ log: (message: string) => void;
2143
+ /**
2144
+ * The same single-flight lock a reconciler pass runs its selection under. The rescue is a
2145
+ * read→decide→detach over the very state a pass mutates, so without it the two interleave: a pass
2146
+ * that acquired this slot between the read and the detach loses its worktree under a worker that
2147
+ * is just starting.
2148
+ */
2149
+ acquireSingleFlight: () => SingleFlightResult;
2150
+ releaseSingleFlight: () => void;
2151
+ }
2152
+
2153
+ export type ReleaseSlotOutcome = { kind: 'released' } | { kind: 'refused'; reason: string };
2154
+
2155
+ /**
2156
+ * The manual counterpart to an exhausted push recovery (`maintenance.ts`'s `MAX_RECOVERY_ATTEMPTS`,
2157
+ * README's "Releasing a `Blocked` task"): clears the hold and the task binding, and detaches the
2158
+ * worktree so the branch is free for a later dispatch. A pass does NOT run — this is a person
2159
+ * rescuing a slot, not a trigger.
2160
+ *
2161
+ * It REFUSES a slot that is genuinely busy, because "release this slot" and "kill what is running in
2162
+ * it" are different requests and the flag only ever advertised the first. Detaching a worktree under
2163
+ * a live `claude` loses its uncommitted work, drops the lock the close re-reads before it runs, and
2164
+ * hands the directory to the next dispatch. A slot may be released when it is flagged
2165
+ * `heldForRecovery` (the documented case: the work is already committed, only the push failed) or
2166
+ * when its task lock is absent or dead — no such process, or a heartbeat past the TTL — which is
2167
+ * exactly the liveness question the maintenance sweep asks. `--force` is the override for a person
2168
+ * who has looked and decided.
2169
+ */
2170
+ export function releaseSlotByName(
2171
+ slotName: string,
2172
+ force: boolean,
2173
+ deps: ReleaseSlotDeps,
2174
+ ): ReleaseSlotOutcome {
2175
+ const singleFlight = deps.acquireSingleFlight();
2176
+ if (singleFlight.kind === 'already-running' && !force) {
2177
+ return {
2178
+ kind: 'refused',
2179
+ reason:
2180
+ `a reconciler pass is already running (pid ${singleFlight.pid}); releasing a slot underneath it would ` +
2181
+ `detach a worktree it is about to write in. Wait for the pass, or re-run with ${FORCE_FLAG} if you have ` +
2182
+ 'looked and decided.',
2183
+ };
2184
+ }
2185
+ try {
2186
+ return releaseSlotUnderSingleFlight(slotName, force, deps);
2187
+ } finally {
2188
+ // Only a lock this call actually took: with `--force` past a running pass there is nothing of
2189
+ // ours to release, and removing that pass's lock would let a third one start alongside it.
2190
+ if (singleFlight.kind === 'acquired') {
2191
+ deps.releaseSingleFlight();
2192
+ }
2193
+ }
2194
+ }
2195
+
2196
+ function releaseSlotUnderSingleFlight(
2197
+ slotName: string,
2198
+ force: boolean,
2199
+ deps: ReleaseSlotDeps,
2200
+ ): ReleaseSlotOutcome {
2201
+ const slot = deps.readSlots().slots.find((entry) => entry.name === slotName);
2202
+ if (!slot) {
2203
+ return { kind: 'refused', reason: `no slot named ${slotName} in the registry.` };
2204
+ }
2205
+
2206
+ const lock = slot.taskId ? deps.readLock(slot.taskId) : null;
2207
+ const busy = lock !== null && isLockAlive(lock, deps.now, deps.ttlMs, deps.isPidAlive);
2208
+ if (busy && !slot.heldForRecovery && !force) {
2209
+ return {
2210
+ kind: 'refused',
2211
+ reason:
2212
+ `${slotName} is running ${slot.taskId} (pid ${lock.workerPid ?? lock.pid}) and is not held for push recovery. ` +
2213
+ `Releasing it would detach the worktree under a live worker and lose its uncommitted work. ` +
2214
+ `Wait for the attempt, cancel the task on the board, or re-run with ${FORCE_FLAG} if you have looked and decided.`,
2215
+ };
2216
+ }
2217
+
2218
+ deps.detach(slot.path);
2219
+ if (slot.taskId) {
2220
+ deps.removeLock(slot.taskId);
2221
+ }
2222
+ deps.updateSlots((current) => ({ slots: releaseHeldSlotEntries(current.slots, slotName) }));
2223
+ deps.log(
2224
+ `dispatch.ts: ${slotName} released (was holding ${slot.taskId ?? 'nothing'}); it is back in the pool.`,
2225
+ );
2226
+ return { kind: 'released' };
2227
+ }
2228
+
2229
+ /**
2230
+ * The MAIN checkout's `.git` common directory, exactly as `git rev-parse --git-common-dir` reports
2231
+ * it — absolute when run from a worktree, relative when run from the main checkout itself. The one
2232
+ * `gitCommonDir` collaborator `entry.ts`'s `resolveContext`/`resolveMainCheckout` need, real for
2233
+ * every actual trigger; `graph-cli.ts` and `watch.ts` import this same function rather than
2234
+ * shelling out a second way to ask git the same question.
2235
+ */
2236
+ export function realGitCommonDir(cwd: string): string {
2237
+ return execFileSync('git', ['rev-parse', '--git-common-dir'], {
2238
+ cwd,
2239
+ encoding: 'utf8',
2240
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2241
+ });
2242
+ }
2243
+
2244
+ /**
2245
+ * The single-flight lock file, as one PID a process writes and reads back. Built here rather than
2246
+ * inline in `main` because the `--release-slot` rescue serializes on the SAME file: two callers of
2247
+ * one lock must not be two spellings of its path.
2248
+ */
2249
+ function realSingleFlightFs(dispatchDir: string): SingleFlightFs {
2250
+ const singleFlightFile = path.join(dispatchDir, 'dispatch.lock');
2251
+ return {
2252
+ readLockPid: () => {
2253
+ if (!fs.existsSync(singleFlightFile)) {
2254
+ return null;
2255
+ }
2256
+ const raw = fs.readFileSync(singleFlightFile, 'utf8').trim();
2257
+ const pid = Number(raw);
2258
+ return Number.isFinite(pid) ? pid : null;
2259
+ },
2260
+ writeLockPid: (pid) => fs.writeFileSync(singleFlightFile, String(pid)),
2261
+ removeLock: () => {
2262
+ if (fs.existsSync(singleFlightFile)) {
2263
+ fs.rmSync(singleFlightFile);
2264
+ }
2265
+ },
2266
+ };
2267
+ }
2268
+
2269
+ /** The real collaborators for `releaseSlotByName`, wired the way every other real runner is. */
2270
+ function realReleaseSlotDeps(mainCheckoutPath: string, repoRoot: string): ReleaseSlotDeps {
2271
+ const slotsFs = realMaintenanceFs(mainCheckoutPath, repoRoot);
2272
+ const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
2273
+ const singleFlightFs = realSingleFlightFs(dispatchDir);
2274
+ return {
2275
+ acquireSingleFlight: (): SingleFlightResult =>
2276
+ acquireSingleFlight(singleFlightFs, process.pid, isProcessAlive),
2277
+ releaseSingleFlight: () => releaseSingleFlight(singleFlightFs, process.pid),
2278
+ readSlots: () => slotsFs.readSlots(),
2279
+ readLock: (taskId) => readLock(dispatchDir, taskId),
2280
+ isPidAlive: isProcessAlive,
2281
+ now: Date.now(),
2282
+ ttlMs: LOCK_TTL_MS,
2283
+ detach: (slotPath) =>
2284
+ detachSlot(
2285
+ slotPath,
2286
+ (args, at) =>
2287
+ void execFileSync('git', args, {
2288
+ cwd: at,
2289
+ stdio: 'ignore',
2290
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2291
+ }),
2292
+ ),
2293
+ removeLock: (taskId) => releaseLock(dispatchDir, taskId),
2294
+ updateSlots: (mutate) => void slotsFs.updateSlots(mutate),
2295
+ log: (message) => console.log(message),
2296
+ };
2297
+ }
2298
+
2299
+ async function main(): Promise<void> {
2300
+ // Checked FIRST, before resolving context or running any maintenance at all: a dispatcher-owned
2301
+ // write (`realBacklog`, `tickOwnedDod`) now runs with `BACKLOG_DISPATCH_ACTIVE='1'` in its env, so
2302
+ // the `onStatusChange` callback it fires inherits the sentinel alongside the `TASK_ID`/`NEW_STATUS`
2303
+ // Backlog.md sets. `shouldDispatchFromCallback` only ever suppressed task SELECTION — maintenance
2304
+ // ran unconditionally underneath it — so this nested invocation used to run its own maintenance
2305
+ // sweep (a `.backlog` git commit among other things) concurrently with the pass that made the
2306
+ // write and was still mid-dispatch in the SAME checkout. That race is the measured T-5 defect:
2307
+ // two passes committing `.backlog` in the same checkout failed with git exit 128, and the
2308
+ // dispatcher-owned edits that followed then failed too, with no visible cause. This exits before
2309
+ // any of that runs — a genuine human callback (no sentinel) and the launchd timer / `gh`-poll
2310
+ // trigger (no `TASK_ID` at all) are unaffected and still run their normal pass.
2311
+ if (
2312
+ isDispatcherOwnedCallback({
2313
+ TASK_ID: process.env.TASK_ID,
2314
+ NEW_STATUS: process.env.NEW_STATUS,
2315
+ BACKLOG_DISPATCH_ACTIVE: process.env.BACKLOG_DISPATCH_ACTIVE,
2316
+ })
2317
+ ) {
2318
+ console.log(
2319
+ `dispatch.ts: callback from a dispatcher-owned write (${process.env.TASK_ID} → ${process.env.NEW_STATUS}); no pass`,
2320
+ );
2321
+ return;
2322
+ }
2323
+
2324
+ const cwd = process.cwd();
2325
+ const gitCommonDir = (): string => realGitCommonDir(cwd);
2326
+ const { mainCheckoutPath } = resolveContext({
2327
+ cwd,
2328
+ env: { BACKLOG_CWD: process.env.BACKLOG_CWD },
2329
+ gitCommonDir,
2330
+ });
2331
+ // Never BACKLOG_CWD-overridden, and never resolved from a worktree's own copy of this repo: the
2332
+ // code assets lanes.json describes (settings files, worktree slots, `lanes.json` itself) belong to
2333
+ // THIS MACHINE's aurora-catalyst checkout, regardless of which backlog project BACKLOG_CWD points
2334
+ // board data at (see realMaintenanceFs's doc comment) — and regardless of which worktree slot this
2335
+ // very reconciler pass happens to be running from, since `resolveMainCheckout` always walks git
2336
+ // topology up to the main checkout rather than trusting `cwd` directly.
2337
+ const repoRoot = resolveMainCheckout({ cwd, gitCommonDir });
2338
+ const dispatchDir = path.join(mainCheckoutPath, DISPATCH_SUBDIR);
2339
+ fs.mkdirSync(dispatchDir, { recursive: true });
2340
+
2341
+ const releaseRequest = parseReleaseSlotArg(process.argv.slice(2));
2342
+ if (releaseRequest !== null) {
2343
+ const outcome = releaseSlotByName(
2344
+ releaseRequest.slot,
2345
+ releaseRequest.force,
2346
+ realReleaseSlotDeps(mainCheckoutPath, repoRoot),
2347
+ );
2348
+ if (outcome.kind === 'refused') {
2349
+ // Exit 2, not 1: a refusal is this script declining a request, not a run that broke — the
2350
+ // same distinction `worker-edit.ts` draws against the `backlog` CLI's own 1.
2351
+ console.error(`dispatch.ts: ${outcome.reason}`);
2352
+ process.exit(2);
2353
+ }
2354
+ return;
2355
+ }
2356
+
2357
+ const singleFlightFs = realSingleFlightFs(dispatchDir);
2358
+
2359
+ const laneConfig = loadLaneConfig(path.join(repoRoot, 'scripts/backlog/lanes.json'));
2360
+
2361
+ for (let pass = 1; pass <= MAX_PASSES_PER_INVOCATION; pass += 1) {
2362
+ const acquireResult = acquireSingleFlight(singleFlightFs, process.pid, isProcessAlive);
2363
+ if (acquireResult.kind === 'already-running') {
2364
+ console.error(
2365
+ `dispatch.ts: another reconciler pass is already running (pid ${acquireResult.pid}); exiting.`,
2366
+ );
2367
+ return;
2368
+ }
2369
+
2370
+ let drainRequested = false;
2371
+ try {
2372
+ const result = await runPass({
2373
+ mainCheckoutPath,
2374
+ repoRoot,
2375
+ dispatchDir,
2376
+ laneConfig,
2377
+ releaseSingleFlight: () => releaseSingleFlight(singleFlightFs, process.pid),
2378
+ requestDrain: () => {
2379
+ drainRequested = true;
2380
+ },
2381
+ });
2382
+ console.log(`dispatch.ts: pass ${pass} complete — outcome=${formatOutcome(result.outcome)}`);
2383
+ } finally {
2384
+ releaseSingleFlight(singleFlightFs, process.pid);
2385
+ }
2386
+
2387
+ if (!drainRequested) {
2388
+ return;
2389
+ }
2390
+ console.log('dispatch.ts: draining — re-running one pass for the next Queued task.');
2391
+ }
2392
+ }
2393
+
2394
+ interface RunPassInput {
2395
+ mainCheckoutPath: string;
2396
+ repoRoot: string;
2397
+ dispatchDir: string;
2398
+ laneConfig: ReturnType<typeof loadLaneConfig>;
2399
+ releaseSingleFlight: () => void;
2400
+ requestDrain: () => void;
2401
+ }
2402
+
2403
+ async function runPass(input: RunPassInput) {
2404
+ const { mainCheckoutPath, repoRoot, dispatchDir, laneConfig } = input;
2405
+ // The snapshot maintenance sweeps over. `reloadTasks` below re-reads AFTER that sweep and keeps
2406
+ // `tasksById` current, so the close's parent recomputation never derives from a pre-sweep board.
2407
+ const board = loadAllTasks(mainCheckoutPath);
2408
+ let tasksById = Object.fromEntries(board.tasks.map((task) => [task.id, task]));
2409
+ // Tracked alongside `tasksById` and from the SAME read: the close's parent derivation must know
2410
+ // whether the snapshot it derives from is the whole board (see `BuildCloseRunnersInput`).
2411
+ let boardComplete = board.complete;
2412
+ const localSettings = (): LocalLaneSettings =>
2413
+ JSON.parse(
2414
+ fs.readFileSync(path.join(repoRoot, laneConfig.lanes.local.settings), 'utf8'),
2415
+ ) as LocalLaneSettings;
2416
+
2417
+ const maintenance: MaintenanceContext = {
2418
+ now: Date.now(),
2419
+ ttlMs: LOCK_TTL_MS,
2420
+ // T-8 point 5/10: `lanes.json`'s `orphanInProgressThresholdHours` converted to ms — the sweep's
2421
+ // step 3c (an orphan `In Progress` task) is gated on this being SET, so without this line the
2422
+ // step never runs at all (see `MaintenanceContext.orphanInProgressThresholdMs`'s own JSDoc).
2423
+ // Defect 12 (2026-09-08): the conversion goes through `resolveOrphanInProgressThresholdMs`
2424
+ // rather than a bare multiplication, so a configured `0` disables the sweep instead of becoming
2425
+ // the most aggressive possible threshold.
2426
+ orphanInProgressThresholdMs: resolveOrphanInProgressThresholdMs(
2427
+ laneConfig.orphanInProgressThresholdHours,
2428
+ ),
2429
+ isPidAlive: isProcessAlive,
2430
+ tasks: board.tasks,
2431
+ // A partial read must not let the sweep infer a deletion (see `MaintenanceContext`).
2432
+ boardComplete: board.complete,
2433
+ fs: realMaintenanceFs(mainCheckoutPath, repoRoot),
2434
+ gh: realGh(repoRoot),
2435
+ backlog: realBacklog(mainCheckoutPath),
2436
+ git: realGit(mainCheckoutPath),
2437
+ // The whole GROUP, not the pid: a `claude` worker spawns hooks, `pnpm test` and sub-agents, and
2438
+ // killing only its own pid leaves those running in the slot the sweep is about to release.
2439
+ killProcess: (pid) => killProcessTree(pid),
2440
+ notify: (title, body) => notify(title, body, runOsascript),
2441
+ };
2442
+
2443
+ const env = {
2444
+ NEW_STATUS: process.env.NEW_STATUS,
2445
+ OLD_STATUS: process.env.OLD_STATUS,
2446
+ BACKLOG_DISPATCH_ACTIVE: process.env.BACKLOG_DISPATCH_ACTIVE,
2447
+ };
2448
+ const slotsFs = realMaintenanceFs(mainCheckoutPath, repoRoot);
2449
+
2450
+ // Fetch before reading the remote branch list: a stale list makes a retry look like a first
2451
+ // dispatch, which branches fresh off `origin/main` and abandons the previous attempt's work.
2452
+ //
2453
+ // This list now decides more than a base ref (T-14, 2026-09-08): `guards.ts`'s guard 4b reads it
2454
+ // to refuse a subtask whose parent branch is missing, BEFORE anything else runs. A stale list can
2455
+ // therefore produce a false BLOCK (a branch that IS on the remote reads as missing here) as much
2456
+ // as it can a false PASS (a branch pruned on the remote is still present in a stale local
2457
+ // remote-tracking copy — `--prune` above is what is supposed to prevent that, so its own failure
2458
+ // is exactly the case where it cannot). Measured, not hypothetical: this machine's reconciler log
2459
+ // carries `ssh: connect to host github.com port 22: Operation timed out` from a fetch that failed
2460
+ // on 2026-09-08, the same day this guard shipped.
2461
+ try {
2462
+ execFileSync('git', ['fetch', 'origin', '--prune'], {
2463
+ cwd: repoRoot,
2464
+ stdio: ['ignore', 'pipe', 'pipe'],
2465
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2466
+ });
2467
+ } catch (error) {
2468
+ console.error(
2469
+ 'dispatch.ts: git fetch failed; the remote branch list may be stale, which can now produce ' +
2470
+ 'a false Blocked (guard 4b) as well as a stale base ref:',
2471
+ describeExecFailure(error),
2472
+ );
2473
+ }
2474
+
2475
+ let remoteBranches: string[] = [];
2476
+ try {
2477
+ const output = execFileSync('git', ['branch', '-r', '--format=%(refname:short)'], {
2478
+ cwd: repoRoot,
2479
+ encoding: 'utf8',
2480
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2481
+ });
2482
+ remoteBranches = output
2483
+ .split('\n')
2484
+ .map((line) => line.trim().replace(/^origin\//, ''))
2485
+ .filter(Boolean);
2486
+ } catch (error) {
2487
+ // Silent before T-14: an empty list used to mean "branch off origin/main", a fallback the
2488
+ // pass just ran with. Now it means EVERY subtask on the board is refused by guard 4b with a
2489
+ // cause that names a branch which may well already be on the remote — so a swallowed failure
2490
+ // here left nobody able to tell a genuine missing branch from `git branch -r` itself failing.
2491
+ console.error(
2492
+ 'dispatch.ts: git branch -r failed; treating the remote branch list as empty, which now ' +
2493
+ 'blocks EVERY subtask on the board (guard 4b) with a cause that may not be true:',
2494
+ describeExecFailure(error),
2495
+ );
2496
+ remoteBranches = [];
2497
+ }
2498
+
2499
+ const branchesCheckedOutElsewhere = readCheckedOutBranches(repoRoot);
2500
+ const lockfileHash = readLockfileHash(repoRoot);
2501
+ // T-50: a monorepo GENERATED by this CLI (`packages/cli/src/templates/monorepo/`) has no
2502
+ // `packages/cli` of its own — it consumes the npm-published `catalyst` binary instead — so the
2503
+ // CLI install/dist-removal step never applies there at all. Checked once per pass: the MAIN
2504
+ // checkout's own `packages/cli` either exists or it does not, for every slot alike. Only read
2505
+ // the CLI's own lockfile hash when the package exists at all, so a generated monorepo never logs
2506
+ // the "could not hash" line `readCliLockfileHash` would otherwise produce on every pass.
2507
+ const hasCliPackage = fs.existsSync(path.join(repoRoot, 'packages/cli'));
2508
+ const currentCliLockfileHash = hasCliPackage ? readCliLockfileHash(repoRoot) : null;
2509
+
2510
+ const ctx: RunOnceContext = {
2511
+ shouldSelect: shouldDispatchFromCallback(env),
2512
+ maintenance,
2513
+ reloadTasks: () => {
2514
+ const current = loadAllTasks(mainCheckoutPath);
2515
+ tasksById = Object.fromEntries(current.tasks.map((task) => [task.id, task]));
2516
+ boardComplete = current.complete;
2517
+ return current;
2518
+ },
2519
+ updateSlots: (mutate) => slotsFs.updateSlots(mutate),
2520
+ removeLock: (taskId) => releaseLock(dispatchDir, taskId),
2521
+ onDispatchFailure: (task, error) => {
2522
+ const comment = `Bloqueado: el dispatch falló antes de que el worker terminara: ${String(error)}`;
2523
+ realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, comment);
2524
+ notify(`${task.id} blocked: dispatch-failed`, comment, runOsascript);
2525
+ },
2526
+ mainCheckoutPath,
2527
+ currentPid: process.pid,
2528
+ attempt: (task) => task.attempts + 1,
2529
+ onBlock: (task, guardResult) => {
2530
+ realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, guardResult.comment);
2531
+ notify(`${task.id} blocked: ${guardResult.reason}`, guardResult.comment, runOsascript);
2532
+ },
2533
+ remoteBranches,
2534
+ branchesCheckedOutElsewhere,
2535
+ provisionSlot: (slot) => {
2536
+ const install = lockfileHash !== null && needsInstall(slot, lockfileHash);
2537
+ provisionSlot({
2538
+ slotPath: slot.path,
2539
+ repoRoot,
2540
+ slotExists: fs.existsSync(slot.path),
2541
+ needsInstall: install,
2542
+ run: (command, args, cwd) => {
2543
+ console.log(`dispatch.ts: provisioning ${slot.name} — ${command} ${args.join(' ')}`);
2544
+ execFileSync(command, args, { cwd, stdio: 'inherit' });
2545
+ },
2546
+ });
2547
+ return install && lockfileHash !== null ? { ...slot, lockfileHash } : slot;
2548
+ },
2549
+ // T-50: MUST run after `entry.ts` has already called `prepareSlot` — never before, never
2550
+ // folded into `provisionSlot` above. `provisionSlot` runs BEFORE `prepareSlot` (the worktree
2551
+ // may not even exist yet), so acting on `packages/cli` there could touch whatever tree the
2552
+ // slot's PREVIOUS occupant left behind rather than the one `prepareSlot` restores for THIS
2553
+ // task. Returns the slot with `cliLockfileHash` refreshed ONLY when the install actually
2554
+ // succeeded (this call returning at all means it did — a throwing `run` propagates out of
2555
+ // `provisionCliDependencies` and this function never reaches its `return`), never persisted
2556
+ // before that, per `SlotInfo.cliLockfileHash`'s two-artifact design.
2557
+ provisionCliDependencies: (slot) => {
2558
+ const cliNodeModulesExists = fs.existsSync(path.join(slot.path, 'packages/cli/node_modules'));
2559
+ const decision = needsCliInstall({
2560
+ hasCliPackage,
2561
+ cliNodeModulesExists,
2562
+ storedCliLockfileHash: slot.cliLockfileHash,
2563
+ currentCliLockfileHash,
2564
+ });
2565
+ const result = provisionCliDependencies({
2566
+ slotPath: slot.path,
2567
+ hasCliPackage,
2568
+ needsCliInstall: decision,
2569
+ run: (command, args, cwd) => {
2570
+ console.log(`dispatch.ts: provisioning ${slot.name} — ${command} ${args.join(' ')}`);
2571
+ execFileSync(command, args, { cwd, stdio: 'inherit' });
2572
+ },
2573
+ });
2574
+ const cliLockfileHash =
2575
+ result.installed && currentCliLockfileHash !== null
2576
+ ? currentCliLockfileHash
2577
+ : slot.cliLockfileHash;
2578
+ return { ...slot, cliLockfileHash };
2579
+ },
2580
+ runGit: (args, cwd) => {
2581
+ try {
2582
+ execFileSync('git', args, {
2583
+ cwd,
2584
+ stdio: ['ignore', 'pipe', 'pipe'],
2585
+ timeout: EXTERNAL_CALL_TIMEOUT_MS,
2586
+ });
2587
+ } catch (error) {
2588
+ throw new Error(`dispatch.ts: git ${args.join(' ')} failed: ${describeExecFailure(error)}`);
2589
+ }
2590
+ },
2591
+ writeLock: (lock) => {
2592
+ const file = path.join(dispatchDir, 'locks', `${lock.taskId}.json`);
2593
+ fs.mkdirSync(path.dirname(file), { recursive: true });
2594
+ fs.writeFileSync(file, JSON.stringify(lock, null, 2));
2595
+ },
2596
+ readLock: (taskId) => readLock(dispatchDir, taskId),
2597
+ setInProgress: (taskId) =>
2598
+ realBacklog(mainCheckoutPath).setStatus(taskId, TASK_STATUS.IN_PROGRESS),
2599
+ releaseSingleFlight: input.releaseSingleFlight,
2600
+ resetInjectorCache,
2601
+ isLocalModelLoaded: () =>
2602
+ checkLocalModelLoaded(fetch, laneConfig.lanes.local.healthCheckUrl, localSettings().model),
2603
+ onLocalModelMissing: (task) => {
2604
+ const comment = `Bloqueado: servidor local sin el modelo ${localSettings().model} cargado en ${laneConfig.lanes.local.healthCheckUrl}. Cárgalo en LM Studio y vuelve a poner la tarea en Queued.`;
2605
+ realBacklog(mainCheckoutPath).setStatus(task.id, TASK_STATUS.BLOCKED, comment);
2606
+ notify(`${task.id} blocked: servidor local sin el modelo`, comment, runOsascript);
2607
+ },
2608
+ beginAttempt: (task, attempt) => {
2609
+ const dir = createAttemptDir(dispatchDir, task.id, attempt);
2610
+ return createAttemptSink({
2611
+ appendStreamLine: (line) => fs.appendFileSync(path.join(dir, 'stream.jsonl'), `${line}\n`),
2612
+ writeRunLog: (lines) =>
2613
+ fs.writeFileSync(
2614
+ path.join(dir, 'run.log'),
2615
+ lines.length > 0 ? `${lines.join('\n')}\n` : '',
2616
+ ),
2617
+ refreshHeartbeat: (isoNow) => refreshHeartbeat(dispatchDir, task.id, isoNow),
2618
+ now: () => Date.now(),
2619
+ });
2620
+ },
2621
+ buildPrompt: (task, attempt) => {
2622
+ if (task.lane === LANE.LOCAL) {
2623
+ return buildLocalExecutorPrompt(mainCheckoutPath, repoRoot, task, attempt);
2624
+ }
2625
+ const retry = readRetryContext(mainCheckoutPath, task.id, attempt);
2626
+ // T-8, last point: a Complex parent whose children are all Done gets the FIXED close-attempt
2627
+ // brief instead of the task-derived entry below — read against `tasksById` as it stands at
2628
+ // THIS call (kept current by `reloadTasks` above, never the snapshot `runPass` started with),
2629
+ // since `runOnce` calls `buildPrompt` only after its own post-maintenance reload. See
2630
+ // `prompt.ts`'s `isParentCloseAttempt` for why this is re-derived here rather than threaded
2631
+ // through as a flag from the maintenance pass that enqueued it.
2632
+ //
2633
+ // Defect 11 (2026-09-08): "is this child Done" for a child that is ITSELF a parent must use
2634
+ // the SAME derivation `recomputeParent` used to decide `task` was ready to dispatch —
2635
+ // `parent.ts`'s `effectiveStatus` over `maintenance.ts`'s `toDerivationNode`, with the SAME
2636
+ // `gh`/`fs` this pass's own maintenance context already wires — never that child's literal
2637
+ // board status, which a single pass can leave one write behind for a three-level tree.
2638
+ const isChildDone = (child: Task): boolean =>
2639
+ effectiveStatus(toDerivationNode(child.id, tasksById, maintenance.gh, maintenance.fs)) ===
2640
+ TASK_STATUS.DONE;
2641
+ return isParentCloseAttempt(task, { tasksById }, isChildDone)
2642
+ ? buildParentCloseAttemptPrompt(task.id, retry)
2643
+ : // frontier, ordinary work: the same deterministic entry an interactive session uses, plus
2644
+ // the prior attempt's failure on a retry — the orchestrator reads the task itself, but
2645
+ // nothing on the board tells it that a previous attempt was blocked or why.
2646
+ buildFrontierPrompt(task.id, retry);
2647
+ },
2648
+ workerSystemPromptPath: resolveWorkerSystemPromptPath(repoRoot),
2649
+ // Rendered into the attempt directory rather than handed over as the static skill file: it names
2650
+ // this task's id and the wrapper command bound to it, neither of which a shared file can carry.
2651
+ writeFrontierAddendum: (task, attempt) => {
2652
+ const target = path.join(dispatchDir, task.id, `intento-${attempt}`, 'frontier-addendum.md');
2653
+ const slotDir = findSlotPathForTask(mainCheckoutPath, task.id);
2654
+ if (slotDir === null) {
2655
+ // Unreachable in the real flow (the slot registry is written before the launch is built),
2656
+ // and a throw is the right answer anyway: the abort path releases the slot and blocks the
2657
+ // task, rather than telling a worker its working directory is the main checkout.
2658
+ throw new Error(
2659
+ `dispatch.ts: ${task.id} has no slot assigned; cannot render its frontier addendum.`,
2660
+ );
2661
+ }
2662
+ fs.writeFileSync(
2663
+ target,
2664
+ buildFrontierAddendum({
2665
+ template: fs.readFileSync(path.join(repoRoot, FRONTIER_ADDENDUM_TEMPLATE_PATH), 'utf8'),
2666
+ taskId: task.id,
2667
+ mainCheckoutPath,
2668
+ slotPath: slotDir,
2669
+ }),
2670
+ );
2671
+ return target;
2672
+ },
2673
+ laneConfig,
2674
+ loadLocalSettings: localSettings,
2675
+ loadFrontierSettings: (): FrontierLaneSettings =>
2676
+ JSON.parse(
2677
+ fs.readFileSync(path.join(repoRoot, laneConfig.lanes.frontier.settings), 'utf8'),
2678
+ ) as FrontierLaneSettings,
2679
+ // The settings sources THIS LANE loads — the user file alone on the local lane, the user and
2680
+ // project files on the frontier one — read from `repoRoot`, the DISPATCHER's own checkout (the
2681
+ // one every slot is a worktree of) and never from the slot, for the same reason the lane
2682
+ // settings above come from there: the list that bounds a worker cannot be a file that worker
2683
+ // can edit, and both operands of the subtraction must come from the same source or the
2684
+ // comparison is between two different files.
2685
+ loadSettingsAllowRules: (lane) =>
2686
+ loadSettingsAllowRules(settingsSourcePaths(lane, repoRoot, os.homedir())),
2687
+ spawnWorker,
2688
+ logPathFor: (taskId, attempt) =>
2689
+ path.join(DISPATCH_SUBDIR, taskId, `intento-${attempt}`, 'run.log'),
2690
+ buildCloseRunners: (task, attempt, branch) =>
2691
+ buildCloseRunners({
2692
+ mainCheckoutPath,
2693
+ repoRoot,
2694
+ task,
2695
+ attempt,
2696
+ branch,
2697
+ reviewerModel: laneConfig.lanes.local.reviewerModel,
2698
+ reviewerTimeoutMs: laneConfig.lanes.local.reviewerTimeoutMinutes * 60_000,
2699
+ requestDrain: input.requestDrain,
2700
+ tasksById,
2701
+ boardComplete,
2702
+ maxAttempts: laneConfig.attempts,
2703
+ harnessReviewer: laneConfig.harnessReviewer,
2704
+ }),
2705
+ };
2706
+
2707
+ return runOnce(ctx);
2708
+ }
2709
+
2710
+ // Guarda de entry-point: el fichero se importa desde entry.ts y otros módulos, que no deben
2711
+ // disparar un pase real del reconciliador. `fileURLToPath`, no `new URL(...).pathname` — ver
2712
+ // release-cli.ts para el mismo razonamiento (un espacio en la ruta rompería la comparación).
2713
+ if (process.argv[1] === fileURLToPath(import.meta.url)) {
2714
+ main().catch((error) => {
2715
+ console.error(error instanceof Error ? error.message : String(error));
2716
+ process.exit(1);
2717
+ });
2718
+ }