@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,2642 @@
1
+ /**
2
+ * TDD spec for `scripts/backlog/maintenance.ts` (tasks 3.15/3.16).
3
+ *
4
+ * Runner: `node --import tsx --test scripts/backlog/maintenance.test.ts`
5
+ *
6
+ * Implements `specs/backlog-task-dispatcher/spec.md` — "Maintenance pass precedes task selection"
7
+ * (dead-lock sweep, orphan-slot release, merged-PR-to-Done, the "Pending board changes are
8
+ * committed during maintenance" scenario) and "Manual cancellation kills the worker after saving
9
+ * work"; `specs/backlog-task-lifecycle/spec.md` — "Derived parent state". Every collaborator (fs
10
+ * over `.backlog/.dispatch/`, `isPidAlive`, `now`, `gh`, `backlog`, `git`, `killProcess`) is
11
+ * injected through `MaintenanceContext`, recorded by an in-memory fake, so this suite never touches
12
+ * a real filesystem, git repo, or process.
13
+ */
14
+ import assert from 'node:assert/strict';
15
+ import { describe, it } from 'node:test';
16
+ import { ambiguousHolderNotice, renderHolderDescription } from './graph.js';
17
+ import {
18
+ buildBoardCommitMessage,
19
+ MAX_RECOVERY_ATTEMPTS,
20
+ recomputeParent,
21
+ REMOTE_BRANCH_DELETE_RESULT,
22
+ runMaintenance,
23
+ type MaintenanceContext,
24
+ type RemoteBranchDeleteResult,
25
+ } from './maintenance.js';
26
+ import { releaseSlot } from './slots.js';
27
+ import {
28
+ LANE,
29
+ TASK_STATUS,
30
+ TIER,
31
+ type DispatchLock,
32
+ type SlotInfo,
33
+ type SlotRegistry,
34
+ type Task,
35
+ } from './types.js';
36
+
37
+ const NOW = Date.parse('2026-09-06T12:00:00.000Z');
38
+ const TTL_MS = 5 * 60_000;
39
+
40
+ function freeSlot(name: string): SlotInfo {
41
+ return { name, path: `/slots/${name}`, lane: null, taskId: null, pid: null, lockfileHash: null };
42
+ }
43
+
44
+ function busySlot(name: string, lane: 'local' | 'frontier', taskId: string, pid: number): SlotInfo {
45
+ return { name, path: `/slots/${name}`, lane, taskId, pid, lockfileHash: 'abc' };
46
+ }
47
+
48
+ function makeLock(overrides: Partial<DispatchLock> & { taskId: string }): DispatchLock {
49
+ return {
50
+ slot: 'dispatch-a',
51
+ pid: 111,
52
+ startedAt: new Date(NOW - 60_000).toISOString(),
53
+ heartbeatAt: new Date(NOW - 1_000).toISOString(),
54
+ lane: LANE.LOCAL,
55
+ attempt: 1,
56
+ branch: `task/${overrides.taskId}`,
57
+ ...overrides,
58
+ };
59
+ }
60
+
61
+ function makeTask(overrides: Partial<Task> & { id: string }): Task {
62
+ return {
63
+ status: TASK_STATUS.IN_PROGRESS,
64
+ filesToTouch: [],
65
+ testCommand: null,
66
+ acceptanceCriteria: [],
67
+ definitionOfDone: [],
68
+ dependsOn: [],
69
+ attempts: 1,
70
+ priority: 0,
71
+ // Both fresh by default (T-8 defect 4, 2026-09-08): `task-view.ts`'s real parser now falls
72
+ // back `updatedAt` to `createdAt` when a task carries no `Updated:` line, so a fixture with a
73
+ // sane, non-zero `createdAt` needs no separate compensation for the point-10 orphan check any
74
+ // more — a mismatched `createdAt: 0` / `updatedAt: NOW` pair here would just re-hide the same
75
+ // hazard the parser now closes for real. A test for the orphan sweep itself overrides
76
+ // `updatedAt` to something older than the threshold.
77
+ createdAt: NOW,
78
+ updatedAt: NOW,
79
+ ...overrides,
80
+ };
81
+ }
82
+
83
+ /** The default point-10 threshold every test gets unless it overrides `orphanInProgressThresholdMs`. */
84
+ const DEFAULT_ORPHAN_THRESHOLD_MS = 4 * 60 * 60_000;
85
+
86
+ interface FakeCollaborators {
87
+ ctx: MaintenanceContext;
88
+ calls: string[];
89
+ slotsAfter: () => SlotRegistry;
90
+ lockRemovals: () => string[];
91
+ statusEdits: () => Array<{ id: string; status: string }>;
92
+ comments: () => Array<{ id: string; comment: string }>;
93
+ /** T-68: every `--append-notes` call this pass made, in call order. */
94
+ appendedNotes: () => Array<{ id: string; notes: string }>;
95
+ /** T-68: the CURRENT notes text for one task, after every write this pass made. */
96
+ notesFor: (taskId: string) => string | null;
97
+ /** T-113: the CURRENT description text for one task, after every write this pass made. */
98
+ descriptionFor: (taskId: string) => string | null;
99
+ /** T-113: every `setDescription` call this pass made, in call order. */
100
+ descriptionEdits: () => Array<{ id: string; description: string }>;
101
+ boardCommits: () => string[];
102
+ detachedSlots: () => string[];
103
+ notifications: () => Array<{ title: string; body: string }>;
104
+ deletedLocalBranches: () => string[];
105
+ deletedRemoteBranches: () => string[];
106
+ /** Every `(branch, baseRef)` pair `branchHasUnmergedCommits` was asked about, in call order. */
107
+ branchCleanupChecks: () => Array<{ branch: string; baseRef: string }>;
108
+ /** Simulates another pass writing the registry between this pass's read and its write. */
109
+ mutateRegistryConcurrently: (mutate: (slots: SlotInfo[]) => SlotInfo[]) => void;
110
+ }
111
+
112
+ function makeCollaborators(input: {
113
+ slots: SlotInfo[];
114
+ locks: DispatchLock[];
115
+ tasks: Task[];
116
+ /** Defaults to a fully-read board — the case every pre-N3 test was written against. */
117
+ boardComplete?: boolean;
118
+ isPidAlive?: (pid: number) => boolean;
119
+ isPrMerged?: (branch: string) => boolean;
120
+ prState?: (branch: string) => string | null;
121
+ mergedState?: (branch: string) => 'merged' | 'not-merged' | 'unknown';
122
+ /** T-68 latest: `taskId`'s branch -> its PR number, for the «Registro de ejecución» block's `Fuente` on a never-dispatched (`attempts: 0`) task. Defaults to unwired (`undefined`), which reads as a failed read. */
123
+ prNumber?: (branch: string) => number | null;
124
+ hasPendingBacklogChanges?: boolean;
125
+ saveWipAndPush?: (branch: string) => { pushSucceeded: boolean };
126
+ commitBacklogChanges?: (message: string) => void;
127
+ branchExists?: (branch: string) => boolean;
128
+ /** Defaults to `REMOTE_BRANCH_DELETE_RESULT.DELETED` — a defect-7 test overrides it. */
129
+ deleteRemoteBranchResult?: (branch: string) => RemoteBranchDeleteResult;
130
+ /**
131
+ * Defaults to `false` (no commit beyond the base — the branch is confirmed clean) so every
132
+ * pre-existing branch-cleanup test keeps deleting exactly as it did before this safety check
133
+ * existed. A test for the check itself overrides it to `true`.
134
+ */
135
+ branchHasUnmergedCommits?: (branch: string, baseRef: string) => boolean;
136
+ hasAttemptDir?: (taskId: string) => boolean;
137
+ orphanInProgressThresholdMs?: number;
138
+ /** Task ids whose close-attempt marker (T-8 defect 3) already exists before this pass runs. */
139
+ closeAttemptAlreadyEnqueued?: string[];
140
+ /** T-68: `taskId` + `attempt` -> the classified stream outcome. Defaults to `null` (unread). */
141
+ attemptStreamOutcome?: (taskId: string, attempt: number) => string | null;
142
+ /** T-68 fix 2: `taskId` + `attempt` -> the `review.md` verdict. Defaults to `null` (no review.md). */
143
+ attemptReviewVerdict?: (taskId: string, attempt: number) => string | null;
144
+ /** T-68: a task's notes BEFORE this pass runs — the §12.3 idempotence check reads these first. */
145
+ notesBefore?: Record<string, string>;
146
+ /** T-68 fix 1: `appendNotes` throws for a task id this returns `true` for — simulates a board write failure. */
147
+ appendNotesShouldThrow?: (taskId: string) => boolean;
148
+ /** T-68: `comment` throws for a task id this returns `true` for — simulates a SECOND board write failure, on top of `appendNotesShouldThrow`. */
149
+ commentShouldThrow?: (taskId: string) => boolean;
150
+ /** T-113: a task's description BEFORE this pass runs — step 5b's `readDescription` reads these first. */
151
+ descriptionsBefore?: Record<string, string>;
152
+ /** T-113: `setDescription` throws for a task id this returns `true` for — simulates a board write failure. */
153
+ setDescriptionShouldThrow?: (taskId: string) => boolean;
154
+ /** T-113: `readDescription` throws for a task id this returns `true` for — simulates a board read failure. */
155
+ readDescriptionShouldThrow?: (taskId: string) => boolean;
156
+ }): FakeCollaborators {
157
+ const calls: string[] = [];
158
+ let slots: SlotInfo[] = input.slots;
159
+ const closeAttemptEnqueued = new Set<string>(input.closeAttemptAlreadyEnqueued ?? []);
160
+ const notes: Record<string, string> = { ...(input.notesBefore ?? {}) };
161
+ const appendedNotes: Array<{ id: string; notes: string }> = [];
162
+ const descriptions: Record<string, string> = { ...(input.descriptionsBefore ?? {}) };
163
+ const descriptionEdits: Array<{ id: string; description: string }> = [];
164
+ const removedLocks: string[] = [];
165
+ const detachedSlots: string[] = [];
166
+ const notifications: Array<{ title: string; body: string }> = [];
167
+ const statusEdits: Array<{ id: string; status: string }> = [];
168
+ const comments: Array<{ id: string; comment: string }> = [];
169
+ const boardCommits: string[] = [];
170
+ const deletedLocalBranches: string[] = [];
171
+ const deletedRemoteBranches: string[] = [];
172
+ const branchCleanupChecks: Array<{ branch: string; baseRef: string }> = [];
173
+
174
+ const ctx: MaintenanceContext = {
175
+ now: NOW,
176
+ ttlMs: TTL_MS,
177
+ orphanInProgressThresholdMs: input.orphanInProgressThresholdMs ?? DEFAULT_ORPHAN_THRESHOLD_MS,
178
+ isPidAlive: input.isPidAlive ?? (() => true),
179
+ tasks: input.tasks,
180
+ boardComplete: input.boardComplete ?? true,
181
+ fs: {
182
+ readSlots: () => ({ slots }),
183
+ // Mirrors the real primitive: the mutation is applied to the registry as it is AT WRITE TIME,
184
+ // not to the snapshot the pass read at its start.
185
+ updateSlots: (mutate) => {
186
+ const next = mutate({ slots });
187
+ slots = next.slots;
188
+ calls.push('updateSlots');
189
+ return next;
190
+ },
191
+ readLocks: () => input.locks,
192
+ removeLock: (taskId) => {
193
+ removedLocks.push(taskId);
194
+ calls.push(`removeLock(${taskId})`);
195
+ },
196
+ hasAttemptDir: (taskId) => input.hasAttemptDir?.(taskId) ?? false,
197
+ hasCloseAttemptBeenEnqueued: (taskId) => closeAttemptEnqueued.has(taskId),
198
+ markCloseAttemptEnqueued: (taskId) => {
199
+ closeAttemptEnqueued.add(taskId);
200
+ calls.push(`markCloseAttemptEnqueued(${taskId})`);
201
+ },
202
+ attemptStreamOutcome: (taskId, attempt) => input.attemptStreamOutcome?.(taskId, attempt) ?? null,
203
+ attemptReviewVerdict: (taskId, attempt) => input.attemptReviewVerdict?.(taskId, attempt) ?? null,
204
+ },
205
+ gh: {
206
+ isPrMerged: input.isPrMerged ?? (() => false),
207
+ prState: input.prState ?? (() => null),
208
+ // Defaults to a WIRED fake answering "not merged" — `MaintenanceGh.mergedState` is required
209
+ // (T-20 point 4, 2026-09-11), so every real `gh` collaborator answers it; a test silent on
210
+ // this feature should see a normal answer rather than have to think about it.
211
+ mergedState: input.mergedState ?? (() => 'not-merged'),
212
+ prNumber: input.prNumber,
213
+ },
214
+ backlog: {
215
+ setStatus: (id, status, comment) => {
216
+ statusEdits.push({ id, status });
217
+ calls.push(`setStatus(${id},${status})`);
218
+ // The real `MaintenanceBacklog.setStatus` carries an optional comment (a `--comment` on the
219
+ // same `backlog task edit`), and several T-8 tests assert its TEXT — recorded into the same
220
+ // `comments` list a bare `ctx.backlog.comment()` call fills, so a test can read either kind
221
+ // of comment through one accessor without caring which call produced it.
222
+ if (comment) {
223
+ comments.push({ id, comment });
224
+ }
225
+ },
226
+ comment: (id, comment) => {
227
+ if (input.commentShouldThrow?.(id)) {
228
+ calls.push(`comment(${id}) THREW`);
229
+ throw new Error(`simulated comment failure for ${id}`);
230
+ }
231
+ comments.push({ id, comment });
232
+ calls.push(`comment(${id})`);
233
+ },
234
+ appendNotes: (id, appended) => {
235
+ if (input.appendNotesShouldThrow?.(id)) {
236
+ calls.push(`appendNotes(${id}) THREW`);
237
+ throw new Error(`simulated appendNotes failure for ${id}`);
238
+ }
239
+ notes[id] = `${notes[id] ?? ''}\n\n${appended}`;
240
+ appendedNotes.push({ id, notes: appended });
241
+ calls.push(`appendNotes(${id})`);
242
+ },
243
+ readNotes: (id) => notes[id] ?? null,
244
+ setDescription: (id, description) => {
245
+ if (input.setDescriptionShouldThrow?.(id)) {
246
+ calls.push(`setDescription(${id}) THREW`);
247
+ throw new Error(`simulated setDescription failure for ${id}`);
248
+ }
249
+ descriptions[id] = description;
250
+ descriptionEdits.push({ id, description });
251
+ calls.push(`setDescription(${id})`);
252
+ },
253
+ readDescription: (id) => {
254
+ if (input.readDescriptionShouldThrow?.(id)) {
255
+ calls.push(`readDescription(${id}) THREW`);
256
+ throw new Error(`simulated readDescription failure for ${id}`);
257
+ }
258
+ calls.push(`readDescription(${id})`);
259
+ return descriptions[id] ?? null;
260
+ },
261
+ },
262
+ git: {
263
+ hasPendingBacklogChanges: () => input.hasPendingBacklogChanges ?? false,
264
+ commitBacklogChanges: (message) => {
265
+ boardCommits.push(message);
266
+ calls.push('commitBacklogChanges');
267
+ input.commitBacklogChanges?.(message);
268
+ },
269
+ saveWipAndPush: (branch) => {
270
+ calls.push(`saveWipAndPush(${branch})`);
271
+ return input.saveWipAndPush ? input.saveWipAndPush(branch) : { pushSucceeded: true };
272
+ },
273
+ detachSlot: (slotPath) => {
274
+ detachedSlots.push(slotPath);
275
+ calls.push(`detachSlot(${slotPath})`);
276
+ },
277
+ branchExists: (branch) => input.branchExists?.(branch) ?? false,
278
+ deleteLocalBranch: (branch) => {
279
+ deletedLocalBranches.push(branch);
280
+ calls.push(`deleteLocalBranch(${branch})`);
281
+ },
282
+ deleteRemoteBranch: (branch) => {
283
+ deletedRemoteBranches.push(branch);
284
+ calls.push(`deleteRemoteBranch(${branch})`);
285
+ return input.deleteRemoteBranchResult?.(branch) ?? REMOTE_BRANCH_DELETE_RESULT.DELETED;
286
+ },
287
+ branchHasUnmergedCommits: (branch, baseRef) => {
288
+ branchCleanupChecks.push({ branch, baseRef });
289
+ calls.push(`branchHasUnmergedCommits(${branch},${baseRef})`);
290
+ return input.branchHasUnmergedCommits?.(branch, baseRef) ?? false;
291
+ },
292
+ },
293
+ killProcess: (pid) => {
294
+ calls.push(`killProcess(${pid})`);
295
+ },
296
+ notify: (title, body) => {
297
+ notifications.push({ title, body });
298
+ calls.push('notify');
299
+ },
300
+ };
301
+
302
+ return {
303
+ ctx,
304
+ calls,
305
+ slotsAfter: () => ({ slots }),
306
+ lockRemovals: () => removedLocks,
307
+ statusEdits: () => statusEdits,
308
+ comments: () => comments,
309
+ appendedNotes: () => appendedNotes,
310
+ notesFor: (taskId) => notes[taskId] ?? null,
311
+ descriptionFor: (taskId) => descriptions[taskId] ?? null,
312
+ descriptionEdits: () => descriptionEdits,
313
+ boardCommits: () => boardCommits,
314
+ detachedSlots: () => detachedSlots,
315
+ notifications: () => notifications,
316
+ deletedLocalBranches: () => deletedLocalBranches,
317
+ deletedRemoteBranches: () => deletedRemoteBranches,
318
+ branchCleanupChecks: () => branchCleanupChecks,
319
+ mutateRegistryConcurrently: (mutate) => {
320
+ slots = mutate(slots);
321
+ },
322
+ };
323
+ }
324
+
325
+ // ── Step 1: dead-PID / expired-TTL locks ───────────────────────────────────────
326
+
327
+ describe('runMaintenance — dead lock sweep', () => {
328
+ it('releases a lock whose PID is dead, and releases its slot', () => {
329
+ const collaborators = makeCollaborators({
330
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
331
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
332
+ tasks: [makeTask({ id: 'T-1' })],
333
+ isPidAlive: () => false,
334
+ });
335
+
336
+ const result = runMaintenance(collaborators.ctx);
337
+
338
+ assert.deepEqual(result.releasedLocks, ['T-1']);
339
+ assert.deepEqual(collaborators.lockRemovals(), ['T-1']);
340
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, null);
341
+ });
342
+
343
+ it('releases a lock whose heartbeat exceeded the TTL, even with a live PID', () => {
344
+ const collaborators = makeCollaborators({
345
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 111)],
346
+ locks: [
347
+ makeLock({ taskId: 'T-1', heartbeatAt: new Date(NOW - TTL_MS - 1_000).toISOString() }),
348
+ ],
349
+ tasks: [makeTask({ id: 'T-1' })],
350
+ isPidAlive: () => true,
351
+ });
352
+
353
+ const result = runMaintenance(collaborators.ctx);
354
+
355
+ assert.deepEqual(result.releasedLocks, ['T-1']);
356
+ });
357
+
358
+ // J15: the release is a TRANSFORM replayed against the registry at the end of the pass, so by
359
+ // then the entry no longer says where the work is. The detach has to happen eagerly, against the
360
+ // snapshot that still names the slot — asserting only that both happened would pass either way.
361
+ it('detaches the worktree BEFORE the slot entry stops naming it', () => {
362
+ const collaborators = makeCollaborators({
363
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
364
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
365
+ tasks: [makeTask({ id: 'T-1' })],
366
+ isPidAlive: () => false,
367
+ });
368
+
369
+ runMaintenance(collaborators.ctx);
370
+
371
+ const detachIndex = collaborators.calls.findIndex((call) => call.startsWith('detachSlot('));
372
+ const updateIndex = collaborators.calls.indexOf('updateSlots');
373
+ assert.notEqual(detachIndex, -1, 'the swept slot must be detached');
374
+ assert.notEqual(updateIndex, -1, 'the registry must be written');
375
+ assert.ok(
376
+ detachIndex < updateIndex,
377
+ 'detaching after the registry write leaves nothing to detach',
378
+ );
379
+ });
380
+
381
+ it('keeps a lock alive when the PID lives and the heartbeat is within the TTL', () => {
382
+ const collaborators = makeCollaborators({
383
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 111)],
384
+ locks: [makeLock({ taskId: 'T-1' })],
385
+ tasks: [makeTask({ id: 'T-1' })],
386
+ isPidAlive: () => true,
387
+ });
388
+
389
+ const result = runMaintenance(collaborators.ctx);
390
+
391
+ assert.deepEqual(result.releasedLocks, []);
392
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, 'T-1');
393
+ });
394
+ });
395
+
396
+ // ── Step 2: orphan slots (no live process) ─────────────────────────────────────
397
+
398
+ describe('runMaintenance — orphan slot release', () => {
399
+ it('releases a slot that is occupied but has no lock at all', () => {
400
+ const collaborators = makeCollaborators({
401
+ slots: [busySlot('dispatch-b', 'frontier', 'T-2', 222)],
402
+ locks: [],
403
+ tasks: [makeTask({ id: 'T-2' })],
404
+ });
405
+
406
+ const result = runMaintenance(collaborators.ctx);
407
+
408
+ assert.deepEqual(result.releasedOrphanSlots, ['T-2']);
409
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, null);
410
+ });
411
+ });
412
+
413
+ // ── Step 3: merged PR -> Done ───────────────────────────────────────────────────
414
+
415
+ describe('runMaintenance — merged PR moves a task to Done', () => {
416
+ it('moves an In Progress task to Done when gh reports its branch merged', () => {
417
+ const collaborators = makeCollaborators({
418
+ slots: [],
419
+ locks: [],
420
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
421
+ isPrMerged: (branch) => branch === 'task/T-3',
422
+ });
423
+
424
+ const result = runMaintenance(collaborators.ctx);
425
+
426
+ assert.deepEqual(result.movedToDone, ['T-3']);
427
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-3', status: TASK_STATUS.DONE }]);
428
+ });
429
+
430
+ // K9: a retry runs on the SAME branch, and the previous attempt's PR may already be merged. This
431
+ // step then declared the task Done while its worker was mid-run — the close that followed found a
432
+ // task nobody was waiting for, and step 4 read `Done` as "not cancelled" and left the worker
433
+ // running against a closed task. An alive lock means a live attempt: this step is not its judge.
434
+ it('leaves a task with a LIVE worker alone, even when a previous attempt PR is merged', () => {
435
+ const collaborators = makeCollaborators({
436
+ slots: [busySlot('dispatch-a', 'local', 'T-3', 111)],
437
+ locks: [makeLock({ taskId: 'T-3' })],
438
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
439
+ isPidAlive: () => true,
440
+ isPrMerged: (branch) => branch === 'task/T-3',
441
+ });
442
+
443
+ const result = runMaintenance(collaborators.ctx);
444
+
445
+ assert.deepEqual(result.movedToDone, []);
446
+ assert.ok(
447
+ !collaborators.statusEdits().some((edit) => edit.status === TASK_STATUS.DONE),
448
+ 'a live attempt must not be closed out from under its own worker',
449
+ );
450
+ });
451
+
452
+ it('leaves an In Progress task alone when its PR is not merged', () => {
453
+ const collaborators = makeCollaborators({
454
+ slots: [],
455
+ locks: [],
456
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
457
+ isPrMerged: () => false,
458
+ });
459
+
460
+ const result = runMaintenance(collaborators.ctx);
461
+
462
+ assert.deepEqual(result.movedToDone, []);
463
+ });
464
+ });
465
+
466
+ // ── T-68: the «Registro de ejecución» block, written at the SAME Done transition ────────────
467
+
468
+ describe('runMaintenance — the «Registro de ejecución» block at the Done transition', () => {
469
+ it('appends the block once the task reaches Done, built from its own attempts data', () => {
470
+ const collaborators = makeCollaborators({
471
+ slots: [],
472
+ locks: [],
473
+ tasks: [
474
+ makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, lane: LANE.LOCAL, attempts: 1 }),
475
+ ],
476
+ isPrMerged: (branch) => branch === 'task/T-3',
477
+ attemptStreamOutcome: (taskId, attempt) =>
478
+ taskId === 'T-3' && attempt === 1 ? 'completed' : null,
479
+ });
480
+
481
+ const result = runMaintenance(collaborators.ctx);
482
+
483
+ assert.deepEqual(result.movedToDone, ['T-3']);
484
+ const appended = collaborators.appendedNotes();
485
+ assert.equal(appended.length, 1, 'the block is appended exactly once for this task');
486
+ assert.equal(appended[0]?.id, 'T-3');
487
+ assert.match(appended[0]?.notes ?? '', /^## Registro de ejecución/);
488
+ assert.match(appended[0]?.notes ?? '', /\*\*Resultado del intento 1:\*\* Done/);
489
+ assert.match(appended[0]?.notes ?? '', /\*\*Fuente:\*\* \.backlog\/\.dispatch\/T-3\/intento-1/);
490
+ });
491
+
492
+ it('does not duplicate the block on a pass that finds the heading already in the notes (§12.3)', () => {
493
+ const collaborators = makeCollaborators({
494
+ slots: [],
495
+ locks: [],
496
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, attempts: 1 })],
497
+ isPrMerged: (branch) => branch === 'task/T-3',
498
+ // Simulates a task whose record was already written (by an earlier pass, or this same one
499
+ // re-entering step 3 before its own board snapshot caught up) — the sentinel must stop a
500
+ // second append regardless of how the notes got there.
501
+ notesBefore: { 'T-3': 'Some earlier note.\n\n## Registro de ejecución\n\n- **Modo:** headless' },
502
+ });
503
+
504
+ const result = runMaintenance(collaborators.ctx);
505
+
506
+ assert.deepEqual(result.movedToDone, ['T-3'], 'the task still reaches Done on its own merit');
507
+ assert.deepEqual(collaborators.appendedNotes(), []);
508
+ });
509
+
510
+ // ── T-68: the record write is attempted BEFORE the transition, but a failed write NEVER blocks
511
+ // it — a merged PR is a confirmed fact. A task kept out of `Done` would be invisible to the orphan
512
+ // sweep AND to `cleanupBranchOnDone`, and no later pass would revisit it.
513
+
514
+ it('appendNotes throws: the task still reaches Done in the SAME pass, branch cleanup still runs, one comment', () => {
515
+ const collaborators = makeCollaborators({
516
+ slots: [],
517
+ locks: [],
518
+ tasks: [
519
+ makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, lane: LANE.LOCAL, attempts: 1 }),
520
+ ],
521
+ isPrMerged: (branch) => branch === 'task/T-3',
522
+ attemptStreamOutcome: (taskId, attempt) =>
523
+ taskId === 'T-3' && attempt === 1 ? 'completed' : null,
524
+ appendNotesShouldThrow: (taskId) => taskId === 'T-3',
525
+ });
526
+
527
+ const result = runMaintenance(collaborators.ctx);
528
+
529
+ assert.deepEqual(
530
+ result.movedToDone,
531
+ ['T-3'],
532
+ 'a failed record write must never hold the merged-PR transition hostage',
533
+ );
534
+ assert.deepEqual(
535
+ result.cleanedUpBranches,
536
+ ['T-3'],
537
+ 'the transition proceeded for real — branch cleanup ran exactly as it would on a clean write',
538
+ );
539
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-3', status: TASK_STATUS.DONE }]);
540
+ assert.deepEqual(collaborators.appendedNotes(), [], 'the block itself never landed on the board');
541
+ // `collaborators.comments()` also carries the ORDINARY "PR mergeado" comment `setStatus` posts
542
+ // on every Done transition (fixture design: both kinds land in one list) — filtering by content
543
+ // isolates the ONE comment this failure itself produced, apart from that unrelated one.
544
+ const failureComments = collaborators
545
+ .comments()
546
+ .filter((entry) => entry.id === 'T-3' && entry.comment.includes('Registro de ejecución'));
547
+ assert.equal(failureComments.length, 1, 'exactly one comment records the gap');
548
+
549
+ // Item 4: "no spam" — proved, not assumed. A FRESH pass whose board read already shows this
550
+ // task `Done` (the real shape a later `loadBoard` would report, now that `setStatus` landed for
551
+ // real above) must never revisit it: step 3's own `status === IN_PROGRESS` guard is what stops
552
+ // a second appendNotes/comment attempt, not any bookkeeping this write introduces.
553
+ const nextPassCollaborators = makeCollaborators({
554
+ slots: [],
555
+ locks: [],
556
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.DONE, lane: LANE.LOCAL, attempts: 1 })],
557
+ isPrMerged: (branch) => branch === 'task/T-3',
558
+ appendNotesShouldThrow: (taskId) => taskId === 'T-3',
559
+ });
560
+ const nextPass = runMaintenance(nextPassCollaborators.ctx);
561
+ assert.deepEqual(nextPass.movedToDone, []);
562
+ assert.deepEqual(nextPassCollaborators.comments(), [], 'a Done task is never revisited at all');
563
+ });
564
+
565
+ it('comment ALSO throws: the pass itself never throws, and the task still reaches Done', () => {
566
+ const collaborators = makeCollaborators({
567
+ slots: [],
568
+ locks: [],
569
+ tasks: [
570
+ makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, lane: LANE.LOCAL, attempts: 1 }),
571
+ ],
572
+ isPrMerged: (branch) => branch === 'task/T-3',
573
+ appendNotesShouldThrow: (taskId) => taskId === 'T-3',
574
+ commentShouldThrow: (taskId) => taskId === 'T-3',
575
+ });
576
+
577
+ let result: ReturnType<typeof runMaintenance> | undefined;
578
+ assert.doesNotThrow(() => {
579
+ result = runMaintenance(collaborators.ctx);
580
+ });
581
+ assert.deepEqual(result?.movedToDone, ['T-3']);
582
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-3', status: TASK_STATUS.DONE }]);
583
+ });
584
+
585
+ it('a field the attempts hold no data for is written as desconocido, never guessed (AC3)', () => {
586
+ const collaborators = makeCollaborators({
587
+ slots: [],
588
+ locks: [],
589
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, lane: LANE.FRONTIER, attempts: 1 })],
590
+ isPrMerged: (branch) => branch === 'task/T-3',
591
+ // No fake wired for `attemptStreamOutcome` at all — every attempt reads as unknown, exactly
592
+ // the "no attempt data" case AC3 exercises.
593
+ });
594
+
595
+ runMaintenance(collaborators.ctx);
596
+
597
+ const notes = collaborators.notesFor('T-3') ?? '';
598
+ assert.match(notes, /\*\*Fallos de entorno:\*\* desconocido/);
599
+ assert.match(notes, /\*\*Tiempo de ciclo:\*\* desconocido/);
600
+ });
601
+
602
+ it('carries a real Blocked cause from a retried attempt into the record, not just the retry count', () => {
603
+ const collaborators = makeCollaborators({
604
+ slots: [],
605
+ locks: [],
606
+ tasks: [
607
+ makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, lane: LANE.LOCAL, attempts: 2 }),
608
+ ],
609
+ isPrMerged: (branch) => branch === 'task/T-3',
610
+ attemptStreamOutcome: (taskId, attempt) => {
611
+ if (taskId !== 'T-3') return null;
612
+ return attempt === 1 ? 'needs-guidance' : attempt === 2 ? 'completed' : null;
613
+ },
614
+ // Attempt 1 never reached the reviewer step (it hit `needs-guidance` before the close's own
615
+ // steps ran) — no `review.md`. Attempt 2 completed and its close reviewer passed it.
616
+ attemptReviewVerdict: (taskId, attempt) => {
617
+ if (taskId !== 'T-3') return null;
618
+ return attempt === 2 ? 'pass' : null;
619
+ },
620
+ });
621
+
622
+ runMaintenance(collaborators.ctx);
623
+
624
+ const notes = collaborators.notesFor('T-3') ?? '';
625
+ assert.match(notes, /\*\*Resultado del intento 1:\*\* Blocked \(needs-guidance\)/);
626
+ // Fix 2: "Rondas de corrección" comes from `review.md` FAIL verdicts, not the retry count — one
627
+ // review.md exists (attempt 2, PASS), zero FAILs, so 0 rounds, never `attempts - 1` (which
628
+ // would wrongly say 1: a needs-guidance retry is not a correction round).
629
+ assert.match(notes, /\*\*Rondas de corrección:\*\* 0 — revisor: code-review/);
630
+ assert.match(notes, /\*\*Intervenciones humanas:\*\* 1 — tipo: respuesta a Blocked/);
631
+ });
632
+
633
+ // ── T-68 latest: a merged-PR task never dispatched at all (attempts: 0) is a SUPERVISADA task —
634
+ // the Worktree Gate forces even an interactive session onto `task/T-nn`, so step 3 closes it out
635
+ // exactly like a headless one the instant its PR merges. ────────────────────────────────────────
636
+
637
+ it('a never-dispatched (attempts: 0) merged-PR task gets the supervisada block, with its PR number as Fuente', () => {
638
+ const collaborators = makeCollaborators({
639
+ slots: [],
640
+ locks: [],
641
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, attempts: 0 })],
642
+ isPrMerged: (branch) => branch === 'task/T-3',
643
+ prNumber: (branch) => (branch === 'task/T-3' ? 188 : null),
644
+ });
645
+
646
+ const result = runMaintenance(collaborators.ctx);
647
+
648
+ assert.deepEqual(result.movedToDone, ['T-3']);
649
+ const notes = collaborators.notesFor('T-3') ?? '';
650
+ assert.match(notes, /\*\*Modo:\*\* supervisada — desconocido/);
651
+ assert.match(notes, /\*\*Intervenciones humanas:\*\* desconocido — tipo: desconocido/);
652
+ assert.match(notes, /\*\*Fuente:\*\* PR #188/);
653
+ });
654
+
655
+ it('a never-dispatched task whose notes ALREADY carry the heading (orchestrator-written) gets no append', () => {
656
+ const collaborators = makeCollaborators({
657
+ slots: [],
658
+ locks: [],
659
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS, attempts: 0 })],
660
+ isPrMerged: (branch) => branch === 'task/T-3',
661
+ prNumber: () => 188,
662
+ // The orchestrator (a person, in the supervisada session itself) already appended its OWN
663
+ // block by hand before the reconciler's next pass ever sees the merged PR.
664
+ notesBefore: {
665
+ 'T-3': 'Some earlier note.\n\n## Registro de ejecución\n\n- **Modo:** supervisada — el humano lo escribió',
666
+ },
667
+ });
668
+
669
+ const result = runMaintenance(collaborators.ctx);
670
+
671
+ assert.deepEqual(result.movedToDone, ['T-3'], 'the task still reaches Done on its own merit');
672
+ assert.deepEqual(collaborators.appendedNotes(), []);
673
+ });
674
+
675
+ it('never appends the block for step 3b\'s revert — that moves a task AWAY from Done', () => {
676
+ const collaborators = makeCollaborators({
677
+ slots: [],
678
+ locks: [],
679
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.DONE, attempts: 1 })],
680
+ branchExists: (branch) => branch === 'task/T-3',
681
+ mergedState: () => 'not-merged',
682
+ });
683
+
684
+ const result = runMaintenance(collaborators.ctx);
685
+
686
+ assert.deepEqual(result.revertedHandwrittenDone, ['T-3']);
687
+ assert.deepEqual(collaborators.appendedNotes(), []);
688
+ });
689
+ });
690
+
691
+ // ── T-8 point 5: branch cleanup once a task reaches Done ─────────────────────
692
+
693
+ describe('runMaintenance — branch cleanup on Done', () => {
694
+ it('deletes the local and remote task/<id> branch once the merged-PR check moves the task to Done', () => {
695
+ const collaborators = makeCollaborators({
696
+ slots: [],
697
+ locks: [],
698
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
699
+ isPrMerged: (branch) => branch === 'task/T-3',
700
+ });
701
+
702
+ const result = runMaintenance(collaborators.ctx);
703
+
704
+ assert.deepEqual(result.movedToDone, ['T-3']);
705
+ assert.deepEqual(result.cleanedUpBranches, ['T-3']);
706
+ assert.deepEqual(collaborators.deletedLocalBranches(), ['task/T-3']);
707
+ assert.deepEqual(collaborators.deletedRemoteBranches(), ['task/T-3']);
708
+ });
709
+
710
+ // Defect 7 (2026-09-08): a failed remote delete used to be swallowed identically to an
711
+ // already-absent ref, and the task was reported in `cleanedUpBranches` either way — a field whose
712
+ // own JSDoc promises "this pass deleted" the branch. A REAL failure (bad auth, a protected-branch
713
+ // rule, a network timeout) must be distinguishable and must keep the task OUT of that field.
714
+ it('does not report the branch as cleaned up when the remote delete genuinely fails', () => {
715
+ const collaborators = makeCollaborators({
716
+ slots: [],
717
+ locks: [],
718
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
719
+ isPrMerged: (branch) => branch === 'task/T-3',
720
+ deleteRemoteBranchResult: () => REMOTE_BRANCH_DELETE_RESULT.FAILED,
721
+ });
722
+
723
+ const result = runMaintenance(collaborators.ctx);
724
+
725
+ assert.deepEqual(result.movedToDone, ['T-3'], 'the task still reaches Done on its own merit');
726
+ assert.deepEqual(
727
+ result.cleanedUpBranches,
728
+ [],
729
+ 'a failed remote delete must not read as cleaned up',
730
+ );
731
+ // The local ref is still removed — only the REMOTE outcome gates the result.
732
+ assert.deepEqual(collaborators.deletedLocalBranches(), ['task/T-3']);
733
+ assert.deepEqual(collaborators.deletedRemoteBranches(), ['task/T-3']);
734
+ });
735
+
736
+ // The mirror case: an ALREADY-ABSENT remote ref (GitHub's own auto-delete beat this pass to it)
737
+ // is the legitimate, common outcome and must still count as cleaned up.
738
+ it('still reports the branch as cleaned up when the remote ref was already gone', () => {
739
+ const collaborators = makeCollaborators({
740
+ slots: [],
741
+ locks: [],
742
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
743
+ isPrMerged: (branch) => branch === 'task/T-3',
744
+ deleteRemoteBranchResult: () => REMOTE_BRANCH_DELETE_RESULT.ALREADY_GONE,
745
+ });
746
+
747
+ const result = runMaintenance(collaborators.ctx);
748
+
749
+ assert.deepEqual(result.cleanedUpBranches, ['T-3']);
750
+ });
751
+
752
+ it('deletes the branch of a PARENT the recompute step itself closes', () => {
753
+ const collaborators = makeCollaborators({
754
+ slots: [],
755
+ locks: [],
756
+ tasks: [
757
+ makeTask({ id: 'T-10', status: TASK_STATUS.IN_PROGRESS }),
758
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.DONE }),
759
+ ],
760
+ isPrMerged: (branch) => branch === 'task/T-10',
761
+ });
762
+
763
+ const result = runMaintenance(collaborators.ctx);
764
+
765
+ // Step 3's generic merged-PR check catches T-10 directly (it is In Progress with its own
766
+ // merged PR) — the SAME path a leaf task takes. `recomputeParent` never runs a second
767
+ // transition on top of it (see the "never double-transitions" test above), so the branch
768
+ // cleanup fires exactly once, from step 3, not from the parent-recompute step.
769
+ assert.deepEqual(result.movedToDone, ['T-10']);
770
+ assert.deepEqual(result.cleanedUpBranches, ['T-10']);
771
+ assert.deepEqual(collaborators.deletedLocalBranches(), ['task/T-10']);
772
+ });
773
+
774
+ // The task's own wording: "Nunca en Blocked" — a task the dead-worker sweep blocks is the one
775
+ // case the cleanup must never reach, because that branch is the only copy of the work a person
776
+ // will come back to.
777
+ it('never deletes a branch when a task moves to Blocked', () => {
778
+ const collaborators = makeCollaborators({
779
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
780
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
781
+ tasks: [makeTask({ id: 'T-1' })],
782
+ isPidAlive: () => false,
783
+ });
784
+
785
+ const result = runMaintenance(collaborators.ctx);
786
+
787
+ assert.deepEqual(result.releasedLocks, ['T-1']);
788
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-1', status: TASK_STATUS.BLOCKED }]);
789
+ assert.deepEqual(result.cleanedUpBranches, []);
790
+ assert.deepEqual(collaborators.deletedLocalBranches(), []);
791
+ assert.deepEqual(collaborators.deletedRemoteBranches(), []);
792
+ });
793
+
794
+ it('leaves an In Progress task with an unmerged PR untouched — no branch deleted', () => {
795
+ const collaborators = makeCollaborators({
796
+ slots: [],
797
+ locks: [],
798
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
799
+ isPrMerged: () => false,
800
+ });
801
+
802
+ runMaintenance(collaborators.ctx);
803
+
804
+ assert.deepEqual(collaborators.deletedLocalBranches(), []);
805
+ assert.deepEqual(collaborators.deletedRemoteBranches(), []);
806
+ });
807
+
808
+ // The remaining T-8 point 5 data-loss path (2026-09-08), the exact T-6.3 shape: a `gh` outage
809
+ // makes the dead-worker rescue (step 1) push WIP commits onto task/T-20, whose PR was in fact
810
+ // already merged (defect 8's deliberate `unknown` → still-push behaviour, which must stay). `gh`
811
+ // then recovers, step 3 reads `merged`, and — before this fix — deleted both refs unconditionally,
812
+ // destroying those commits outright rather than merely stranding them. Before this fix,
813
+ // `branchHasUnmergedCommits` did not exist at all and `cleanupBranchOnDone` always deleted once
814
+ // the PR read merged, so this assertion FAILS against that code: `cleanedUpBranches` held `T-20`
815
+ // and both branches were deleted.
816
+ it('refuses to delete a Done task branch that carries commits not reachable from its base', () => {
817
+ const collaborators = makeCollaborators({
818
+ slots: [],
819
+ locks: [],
820
+ tasks: [makeTask({ id: 'T-20', status: TASK_STATUS.IN_PROGRESS })],
821
+ isPrMerged: (branch) => branch === 'task/T-20',
822
+ // Simulates the rescue push having landed a WIP commit after the merge: git confirms the
823
+ // branch is NOT fully contained in its base.
824
+ branchHasUnmergedCommits: (branch) => branch === 'task/T-20',
825
+ });
826
+
827
+ const result = runMaintenance(collaborators.ctx);
828
+
829
+ assert.deepEqual(result.movedToDone, ['T-20'], 'the task still reaches Done on its own merit');
830
+ assert.deepEqual(
831
+ result.cleanedUpBranches,
832
+ [],
833
+ 'a branch with unmerged commits must never read as cleaned up',
834
+ );
835
+ assert.deepEqual(
836
+ result.branchCleanupRefused,
837
+ ['T-20'],
838
+ 'the refusal must be reported, distinct from cleanedUpBranches and from a delete failure',
839
+ );
840
+ assert.deepEqual(
841
+ collaborators.deletedLocalBranches(),
842
+ [],
843
+ 'neither ref may be touched once the branch fails the safety check',
844
+ );
845
+ assert.deepEqual(collaborators.deletedRemoteBranches(), []);
846
+ // Two comments land on T-20: the setStatus one from moving it to Done, and this refusal's
847
+ // own — matched by its content, not just the id, since `.find` on id alone would silently pick
848
+ // whichever comment happens to come first.
849
+ const comment =
850
+ collaborators
851
+ .comments()
852
+ .find((entry) => entry.id === 'T-20' && /NO borrada/.test(entry.comment))?.comment ?? '';
853
+ assert.match(comment, /task\/T-20/, 'the comment must name the branch');
854
+ assert.match(comment, /origin\/main/, 'the comment must name the base it was compared against');
855
+ });
856
+
857
+ it('deletes the branch normally once the safety check confirms it carries nothing beyond base', () => {
858
+ const collaborators = makeCollaborators({
859
+ slots: [],
860
+ locks: [],
861
+ tasks: [makeTask({ id: 'T-20', status: TASK_STATUS.IN_PROGRESS })],
862
+ isPrMerged: (branch) => branch === 'task/T-20',
863
+ branchHasUnmergedCommits: () => false,
864
+ });
865
+
866
+ const result = runMaintenance(collaborators.ctx);
867
+
868
+ assert.deepEqual(result.cleanedUpBranches, ['T-20']);
869
+ assert.deepEqual(result.branchCleanupRefused, []);
870
+ assert.deepEqual(collaborators.deletedLocalBranches(), ['task/T-20']);
871
+ assert.deepEqual(collaborators.deletedRemoteBranches(), ['task/T-20']);
872
+ });
873
+
874
+ // A subtask's base is its PARENT's branch, never `main` — comparing against `main` would report
875
+ // every commit the parent branch already carries as this subtask's own and refuse every subtask
876
+ // cleanup. Uses `resolveTaskBase`'s naming (`guards.ts`'s `taskBaseBranch`), the SAME base the
877
+ // scope check and the PR diff already use.
878
+ it('compares a subtask against its PARENT branch, never main', () => {
879
+ const collaborators = makeCollaborators({
880
+ slots: [],
881
+ locks: [],
882
+ tasks: [makeTask({ id: 'T-21', parentId: 'T-10', status: TASK_STATUS.IN_PROGRESS })],
883
+ isPrMerged: (branch) => branch === 'task/T-21',
884
+ branchHasUnmergedCommits: () => false,
885
+ });
886
+
887
+ runMaintenance(collaborators.ctx);
888
+
889
+ assert.deepEqual(collaborators.branchCleanupChecks(), [
890
+ { branch: 'task/T-21', baseRef: 'origin/task/T-10' },
891
+ ]);
892
+ });
893
+
894
+ // Refusal on the PARENT-recomputation path (step 5), not just the leaf path (step 3).
895
+ it('also refuses branch cleanup on the parent-recomputation path when unmerged commits remain', () => {
896
+ const collaborators = makeCollaborators({
897
+ slots: [],
898
+ locks: [],
899
+ tasks: [
900
+ makeTask({ id: 'T-30', status: TASK_STATUS.TO_DO }),
901
+ makeTask({ id: 'T-31', parentId: 'T-30', status: TASK_STATUS.DONE }),
902
+ ],
903
+ isPrMerged: (branch) => branch === 'task/T-30',
904
+ mergedState: (branch) => (branch === 'task/T-30' ? 'merged' : 'not-merged'),
905
+ branchHasUnmergedCommits: (branch) => branch === 'task/T-30',
906
+ });
907
+
908
+ const result = runMaintenance(collaborators.ctx);
909
+
910
+ assert.deepEqual(result.recomputedParents, [
911
+ { id: 'T-30', from: TASK_STATUS.TO_DO, to: TASK_STATUS.DONE },
912
+ ]);
913
+ assert.deepEqual(result.cleanedUpBranches, []);
914
+ assert.deepEqual(result.branchCleanupRefused, ['T-30']);
915
+ assert.deepEqual(collaborators.deletedLocalBranches(), []);
916
+ assert.deepEqual(collaborators.deletedRemoteBranches(), []);
917
+ });
918
+ });
919
+
920
+ // ── T-8 point 7: a hand-written Done never merged is reverted ────────────────
921
+
922
+ describe('runMaintenance — hand-written Done reverted when its PR is not merged', () => {
923
+ it('reverts a Done task to In Progress when its branch exists but GitHub does not report the PR merged', () => {
924
+ const collaborators = makeCollaborators({
925
+ slots: [],
926
+ locks: [],
927
+ tasks: [makeTask({ id: 'T-9', status: TASK_STATUS.DONE })],
928
+ branchExists: (branch) => branch === 'task/T-9',
929
+ mergedState: () => 'not-merged',
930
+ prState: () => 'OPEN',
931
+ });
932
+
933
+ const result = runMaintenance(collaborators.ctx);
934
+
935
+ assert.deepEqual(result.revertedHandwrittenDone, ['T-9']);
936
+ assert.deepEqual(collaborators.statusEdits(), [
937
+ { id: 'T-9', status: TASK_STATUS.IN_PROGRESS },
938
+ ]);
939
+ const comment = collaborators.comments().find((entry) => entry.id === 'T-9')?.comment ?? '';
940
+ assert.match(comment, /task\/T-9/, 'the comment must name the branch');
941
+ assert.match(comment, /OPEN/, 'the comment must name the PR state GitHub reported');
942
+ });
943
+
944
+ it('leaves a Done task with no branch and no PR untouched — legitimately finished by hand', () => {
945
+ const collaborators = makeCollaborators({
946
+ slots: [],
947
+ locks: [],
948
+ tasks: [makeTask({ id: 'T-9', status: TASK_STATUS.DONE })],
949
+ branchExists: () => false,
950
+ });
951
+
952
+ const result = runMaintenance(collaborators.ctx);
953
+
954
+ assert.deepEqual(result.revertedHandwrittenDone, []);
955
+ assert.deepEqual(collaborators.statusEdits(), []);
956
+ });
957
+
958
+ it('leaves a Done task alone when its branch exists and its PR IS merged', () => {
959
+ const collaborators = makeCollaborators({
960
+ slots: [],
961
+ locks: [],
962
+ tasks: [makeTask({ id: 'T-9', status: TASK_STATUS.DONE })],
963
+ branchExists: (branch) => branch === 'task/T-9',
964
+ mergedState: (branch) => (branch === 'task/T-9' ? 'merged' : 'unknown'),
965
+ });
966
+
967
+ const result = runMaintenance(collaborators.ctx);
968
+
969
+ assert.deepEqual(result.revertedHandwrittenDone, []);
970
+ assert.deepEqual(collaborators.statusEdits(), []);
971
+ });
972
+
973
+ it('does not revert a Done task this SAME pass just produced via the merged-PR check', () => {
974
+ const collaborators = makeCollaborators({
975
+ slots: [],
976
+ locks: [],
977
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
978
+ isPrMerged: (branch) => branch === 'task/T-3',
979
+ branchExists: (branch) => branch === 'task/T-3',
980
+ mergedState: (branch) => (branch === 'task/T-3' ? 'merged' : 'not-merged'),
981
+ });
982
+
983
+ const result = runMaintenance(collaborators.ctx);
984
+
985
+ assert.deepEqual(result.movedToDone, ['T-3']);
986
+ assert.deepEqual(result.revertedHandwrittenDone, []);
987
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-3', status: TASK_STATUS.DONE }]);
988
+ });
989
+
990
+ // T-8 defect 1 [CRITICAL]: a `gh` outage (missing binary, expired token, network failure) used
991
+ // to answer `isPrMerged` with the SAME `false` a genuinely-unmerged PR gets. Step 3b read that
992
+ // `false` as "GitHub confirms this is not merged" and reverted EVERY `Done` task whose local
993
+ // `task/<id>` ref still existed — a whole reconciler pass mass-reverting the `Done` column,
994
+ // including tasks that merged perfectly correctly. `mergedState` must answer `unknown` for an
995
+ // outage, never `not-merged`, and step 3b must SKIP (never revert) on `unknown`.
996
+ it('does not revert any hand-written Done when gh is unavailable — unknown is not "not merged"', () => {
997
+ const collaborators = makeCollaborators({
998
+ slots: [],
999
+ locks: [],
1000
+ tasks: [
1001
+ makeTask({ id: 'T-9', status: TASK_STATUS.DONE }),
1002
+ makeTask({ id: 'T-20', status: TASK_STATUS.DONE }),
1003
+ ],
1004
+ // Every task's local `task/<id>` ref still exists — the exact fan-out that turned a single
1005
+ // `gh` outage into a mass-revert.
1006
+ branchExists: () => true,
1007
+ mergedState: () => 'unknown',
1008
+ });
1009
+
1010
+ const result = runMaintenance(collaborators.ctx);
1011
+
1012
+ assert.deepEqual(result.revertedHandwrittenDone, []);
1013
+ assert.deepEqual(collaborators.statusEdits(), []);
1014
+ });
1015
+ });
1016
+
1017
+ // ── T-8 defect 2 [HIGH]: step 3b's revert must not cascade into step 3c the SAME pass ────────
1018
+
1019
+ describe('runMaintenance — a step 3b revert is never re-blocked as an orphan in the same pass', () => {
1020
+ it('does not orphan-block a task step 3b just reverted, even though updated_date is stale', () => {
1021
+ const FIVE_HOURS_MS = 5 * 3_600_000; // > the 4h default orphan threshold (DEFAULT_ORPHAN_THRESHOLD_MS)
1022
+ const collaborators = makeCollaborators({
1023
+ slots: [],
1024
+ locks: [],
1025
+ // Measured scenario: a person pushes task/T-20, opens a PR, and marks the task Done by hand
1026
+ // at 09:00. This pass runs at 14:00 — updated_date is still stamped at 09:00, five hours old.
1027
+ tasks: [makeTask({ id: 'T-20', status: TASK_STATUS.DONE, updatedAt: NOW - FIVE_HOURS_MS })],
1028
+ branchExists: (branch) => branch === 'task/T-20',
1029
+ mergedState: () => 'not-merged', // the PR is still open — step 3b correctly reverts it (AC7).
1030
+ hasAttemptDir: () => false,
1031
+ });
1032
+
1033
+ const result = runMaintenance(collaborators.ctx);
1034
+
1035
+ assert.deepEqual(result.revertedHandwrittenDone, ['T-20']);
1036
+ assert.deepEqual(
1037
+ result.orphanInProgressBlocked,
1038
+ [],
1039
+ 'a task step 3b just reverted to In Progress must not be re-blocked as an orphan in the SAME pass',
1040
+ );
1041
+ assert.deepEqual(collaborators.statusEdits(), [
1042
+ { id: 'T-20', status: TASK_STATUS.IN_PROGRESS },
1043
+ ]);
1044
+ });
1045
+ });
1046
+
1047
+ // ── T-8 point 10: an orphan In Progress is blocked ────────────────────────────
1048
+
1049
+ describe('runMaintenance — orphan In Progress detection', () => {
1050
+ const OLD_ENOUGH = NOW - DEFAULT_ORPHAN_THRESHOLD_MS - 60_000;
1051
+
1052
+ it('blocks an In Progress task with no lock, no slot, no attempt dir and a stale updated_date', () => {
1053
+ const collaborators = makeCollaborators({
1054
+ slots: [],
1055
+ locks: [],
1056
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH })],
1057
+ hasAttemptDir: () => false,
1058
+ });
1059
+
1060
+ const result = runMaintenance(collaborators.ctx);
1061
+
1062
+ assert.deepEqual(result.orphanInProgressBlocked, ['T-8']);
1063
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-8', status: TASK_STATUS.BLOCKED }]);
1064
+ const comment = collaborators.comments().find((entry) => entry.id === 'T-8')?.comment ?? '';
1065
+ assert.match(comment, /lock/i);
1066
+ assert.match(comment, /slot/i);
1067
+ assert.match(comment, /intento/i);
1068
+ assert.match(comment, /updated_date|actualizaci/i);
1069
+ });
1070
+
1071
+ it('leaves it alone when updated_date is within the threshold — a live interactive session', () => {
1072
+ const collaborators = makeCollaborators({
1073
+ slots: [],
1074
+ locks: [],
1075
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.IN_PROGRESS, updatedAt: NOW - 60_000 })],
1076
+ hasAttemptDir: () => false,
1077
+ });
1078
+
1079
+ const result = runMaintenance(collaborators.ctx);
1080
+
1081
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1082
+ assert.deepEqual(collaborators.statusEdits(), []);
1083
+ });
1084
+
1085
+ it('leaves it alone when a live lock still holds it — the dead-worker sweep territory', () => {
1086
+ const collaborators = makeCollaborators({
1087
+ slots: [busySlot('dispatch-a', 'local', 'T-8', 111)],
1088
+ locks: [makeLock({ taskId: 'T-8' })],
1089
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH })],
1090
+ isPidAlive: () => true,
1091
+ hasAttemptDir: () => false,
1092
+ });
1093
+
1094
+ const result = runMaintenance(collaborators.ctx);
1095
+
1096
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1097
+ });
1098
+
1099
+ it('leaves it alone when a slot still claims the task even with no live lock (held for recovery)', () => {
1100
+ const held: SlotInfo = {
1101
+ ...busySlot('dispatch-a', 'local', 'T-8', 999),
1102
+ heldForRecovery: true,
1103
+ };
1104
+ const collaborators = makeCollaborators({
1105
+ slots: [held],
1106
+ locks: [],
1107
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH })],
1108
+ hasAttemptDir: () => false,
1109
+ // Step 0 retries a held-for-recovery slot's push FIRST and releases it on success — pinning
1110
+ // the push as still-failing is what keeps the slot claiming T-8 through to step 3c, which is
1111
+ // the scenario this test means to exercise.
1112
+ saveWipAndPush: () => ({ pushSucceeded: false }),
1113
+ });
1114
+
1115
+ const result = runMaintenance(collaborators.ctx);
1116
+
1117
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1118
+ });
1119
+
1120
+ it('leaves it alone when an attempt directory exists — it WAS dispatched at some point', () => {
1121
+ const collaborators = makeCollaborators({
1122
+ slots: [],
1123
+ locks: [],
1124
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH })],
1125
+ hasAttemptDir: (taskId) => taskId === 'T-8',
1126
+ });
1127
+
1128
+ const result = runMaintenance(collaborators.ctx);
1129
+
1130
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1131
+ });
1132
+
1133
+ it('never touches a task in any status other than In Progress', () => {
1134
+ const collaborators = makeCollaborators({
1135
+ slots: [],
1136
+ locks: [],
1137
+ tasks: [makeTask({ id: 'T-8', status: TASK_STATUS.TO_DO, updatedAt: OLD_ENOUGH })],
1138
+ hasAttemptDir: () => false,
1139
+ });
1140
+
1141
+ const result = runMaintenance(collaborators.ctx);
1142
+
1143
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1144
+ });
1145
+
1146
+ // Measured incident: a Complex parent whose children are (Done, Done, To Do, To Do) derives
1147
+ // `In Progress` (parent.ts) with no lock/slot/attempt-dir of its own, since a parent's status is
1148
+ // never written by hand. Step 3c saw the same absence a real orphan leaves and blocked it,
1149
+ // writing a false "orphan" comment on every pass since it was set to `In Progress`.
1150
+ it('does not block a parent In Progress whose status is derived from its children', () => {
1151
+ const collaborators = makeCollaborators({
1152
+ slots: [],
1153
+ locks: [],
1154
+ tasks: [
1155
+ makeTask({ id: 'T-4', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH }),
1156
+ makeTask({ id: 'T-4.1', status: TASK_STATUS.DONE, parentId: 'T-4' }),
1157
+ makeTask({ id: 'T-4.2', status: TASK_STATUS.DONE, parentId: 'T-4' }),
1158
+ makeTask({ id: 'T-4.3', status: TASK_STATUS.TO_DO, parentId: 'T-4' }),
1159
+ makeTask({ id: 'T-4.4', status: TASK_STATUS.TO_DO, parentId: 'T-4' }),
1160
+ ],
1161
+ hasAttemptDir: () => false,
1162
+ });
1163
+
1164
+ const result = runMaintenance(collaborators.ctx);
1165
+
1166
+ assert.deepEqual(result.orphanInProgressBlocked, []);
1167
+ assert.deepEqual(
1168
+ collaborators.statusEdits().filter((edit) => edit.id === 'T-4'),
1169
+ [],
1170
+ 'a parent must never be moved to Blocked by the orphan sweep — its status is derived, never orphaned',
1171
+ );
1172
+ });
1173
+
1174
+ // Sibling of the test above: a CHILDLESS In Progress task in the exact same state (no lock, no
1175
+ // slot, no attempt dir, stale updated_date) is still a real orphan and must still be blocked —
1176
+ // the parent exemption must not become a blanket exemption.
1177
+ it('still blocks a childless In Progress task in the same state — no regression', () => {
1178
+ const collaborators = makeCollaborators({
1179
+ slots: [],
1180
+ locks: [],
1181
+ tasks: [makeTask({ id: 'T-9', status: TASK_STATUS.IN_PROGRESS, updatedAt: OLD_ENOUGH })],
1182
+ hasAttemptDir: () => false,
1183
+ });
1184
+
1185
+ const result = runMaintenance(collaborators.ctx);
1186
+
1187
+ assert.deepEqual(result.orphanInProgressBlocked, ['T-9']);
1188
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-9', status: TASK_STATUS.BLOCKED }]);
1189
+ });
1190
+ });
1191
+
1192
+ // ── Step 4: manual cancellation — save before kill before release ─────────────
1193
+
1194
+ describe('runMaintenance — manual cancellation ordering', () => {
1195
+ it('saves work, THEN kills the worker, THEN releases the lock/slot — never any other order', () => {
1196
+ const collaborators = makeCollaborators({
1197
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1198
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1199
+ // The person moved it back to Blocked by hand; the lock is still alive.
1200
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.BLOCKED })],
1201
+ isPidAlive: () => true,
1202
+ });
1203
+
1204
+ const result = runMaintenance(collaborators.ctx);
1205
+
1206
+ assert.deepEqual(result.cancelledWorkers, ['T-4']);
1207
+ const relevant = collaborators.calls.filter(
1208
+ (call) =>
1209
+ call.startsWith('saveWipAndPush') ||
1210
+ call.startsWith('killProcess') ||
1211
+ call.startsWith('removeLock'),
1212
+ );
1213
+ assert.deepEqual(relevant, [
1214
+ 'saveWipAndPush(task/T-4)',
1215
+ 'killProcess(444)',
1216
+ 'removeLock(T-4)',
1217
+ ]);
1218
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, null);
1219
+ });
1220
+
1221
+ it('does not kill or release when the WIP push fails — retried on the next pass', () => {
1222
+ const collaborators = makeCollaborators({
1223
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1224
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1225
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.TO_DO })],
1226
+ isPidAlive: () => true,
1227
+ saveWipAndPush: () => ({ pushSucceeded: false }),
1228
+ });
1229
+
1230
+ const result = runMaintenance(collaborators.ctx);
1231
+
1232
+ assert.deepEqual(result.cancelledWorkers, []);
1233
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('killProcess')));
1234
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('removeLock')));
1235
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, 'T-4');
1236
+ });
1237
+
1238
+ it('does not touch a lock whose task is still legitimately In Progress', () => {
1239
+ const collaborators = makeCollaborators({
1240
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1241
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1242
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.IN_PROGRESS })],
1243
+ isPidAlive: () => true,
1244
+ });
1245
+
1246
+ const result = runMaintenance(collaborators.ctx);
1247
+
1248
+ assert.deepEqual(result.cancelledWorkers, []);
1249
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('saveWipAndPush')));
1250
+ });
1251
+
1252
+ // G13: cancellation is an explicit human act — moving the task to Blocked or To Do. Any OTHER
1253
+ // status is a state this pass does not understand, and killing on it kills a healthy worker.
1254
+ for (const status of [TASK_STATUS.DONE, TASK_STATUS.QUEUED, TASK_STATUS.UNKNOWN] as const) {
1255
+ it(`never cancels on ${status}: only an explicit Blocked or To Do is a cancellation`, () => {
1256
+ const collaborators = makeCollaborators({
1257
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1258
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1259
+ tasks: [makeTask({ id: 'T-4', status })],
1260
+ isPidAlive: () => true,
1261
+ });
1262
+
1263
+ const result = runMaintenance(collaborators.ctx);
1264
+
1265
+ assert.deepEqual(result.cancelledWorkers, []);
1266
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('killProcess')));
1267
+ });
1268
+ }
1269
+
1270
+ it('still cancels a lock whose task no longer exists on the board at all', () => {
1271
+ const collaborators = makeCollaborators({
1272
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1273
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1274
+ tasks: [],
1275
+ isPidAlive: () => true,
1276
+ });
1277
+
1278
+ const result = runMaintenance(collaborators.ctx);
1279
+
1280
+ assert.deepEqual(result.cancelledWorkers, ['T-4']);
1281
+ });
1282
+
1283
+ // N3: "the task is not on the board" means "a person deleted it" ONLY when the board was read in
1284
+ // full. `backlog task list` failing, or one `task view` throwing, produces the same absence — and
1285
+ // reading it as a deletion killed EVERY live worker at once, the one failure mode a maintenance
1286
+ // sweep must not have.
1287
+ it('never reads an absent task as a cancellation when the board came back incomplete', () => {
1288
+ const collaborators = makeCollaborators({
1289
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1290
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1291
+ tasks: [],
1292
+ boardComplete: false,
1293
+ isPidAlive: () => true,
1294
+ });
1295
+
1296
+ const result = runMaintenance(collaborators.ctx);
1297
+
1298
+ assert.deepEqual(result.cancelledWorkers, []);
1299
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('killProcess')));
1300
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, 'T-4');
1301
+ });
1302
+
1303
+ // The status-based half still runs: a task this pass DID read as `Blocked` is an explicit human
1304
+ // act, and a partial board says nothing about it.
1305
+ it('still cancels on an explicit Blocked that WAS read, even on an incomplete board', () => {
1306
+ const collaborators = makeCollaborators({
1307
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
1308
+ locks: [makeLock({ taskId: 'T-4', pid: 444 })],
1309
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.BLOCKED })],
1310
+ boardComplete: false,
1311
+ isPidAlive: () => true,
1312
+ });
1313
+
1314
+ const result = runMaintenance(collaborators.ctx);
1315
+
1316
+ assert.deepEqual(result.cancelledWorkers, ['T-4']);
1317
+ });
1318
+ });
1319
+
1320
+ // ── Step 5: recompute every parent ──────────────────────────────────────────────
1321
+
1322
+ describe('runMaintenance — parent recomputation', () => {
1323
+ // N3: a parent's state is DERIVED from the full set of its children. Half a child set derives a
1324
+ // parent status that is simply wrong — two children read as `Done` while the third, dropped by a
1325
+ // failed `task view`, is still `In Progress`, and the parent moves to `Done`. The derivation is
1326
+ // skipped entirely rather than run on a partial board.
1327
+ it('writes no parent status at all when the board came back incomplete', () => {
1328
+ const collaborators = makeCollaborators({
1329
+ slots: [],
1330
+ locks: [],
1331
+ tasks: [
1332
+ makeTask({ id: 'T-10', status: TASK_STATUS.TO_DO }),
1333
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.DONE }),
1334
+ makeTask({ id: 'T-12', parentId: 'T-10', status: TASK_STATUS.DONE }),
1335
+ ],
1336
+ boardComplete: false,
1337
+ isPrMerged: () => false,
1338
+ });
1339
+
1340
+ const result = runMaintenance(collaborators.ctx);
1341
+
1342
+ assert.deepEqual(result.recomputedParents, []);
1343
+ assert.deepEqual(collaborators.statusEdits(), []);
1344
+ });
1345
+
1346
+ it('recomputes a parent whose children are all Done as In Progress (own PR not merged)', () => {
1347
+ const collaborators = makeCollaborators({
1348
+ slots: [],
1349
+ locks: [],
1350
+ tasks: [
1351
+ makeTask({ id: 'T-10', status: TASK_STATUS.TO_DO }),
1352
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.DONE }),
1353
+ makeTask({ id: 'T-12', parentId: 'T-10', status: TASK_STATUS.DONE }),
1354
+ ],
1355
+ isPrMerged: () => false,
1356
+ mergedState: () => 'not-merged',
1357
+ });
1358
+
1359
+ const result = runMaintenance(collaborators.ctx);
1360
+
1361
+ assert.deepEqual(result.recomputedParents, [
1362
+ { id: 'T-10', from: TASK_STATUS.TO_DO, to: TASK_STATUS.IN_PROGRESS },
1363
+ ]);
1364
+ });
1365
+
1366
+ it('recomputes a parent whose own PR just merged and every child is Done, via the generic merged-PR check', () => {
1367
+ // A parent is itself a normal task: when it is In Progress and its own branch's PR merges,
1368
+ // step 3's generic check already moves it to Done — the recompute step then finds no further
1369
+ // change needed (never double-transitions the same task).
1370
+ const collaborators = makeCollaborators({
1371
+ slots: [],
1372
+ locks: [],
1373
+ tasks: [
1374
+ makeTask({ id: 'T-10', status: TASK_STATUS.IN_PROGRESS }),
1375
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.DONE }),
1376
+ ],
1377
+ isPrMerged: (branch) => branch === 'task/T-10',
1378
+ mergedState: (branch) => (branch === 'task/T-10' ? 'merged' : 'not-merged'),
1379
+ });
1380
+
1381
+ const result = runMaintenance(collaborators.ctx);
1382
+
1383
+ assert.deepEqual(result.movedToDone, ['T-10']);
1384
+ assert.deepEqual(result.recomputedParents, []);
1385
+ });
1386
+
1387
+ it('recomputes recursively: a Blocked grandchild bubbles Blocked up through every ancestor', () => {
1388
+ const collaborators = makeCollaborators({
1389
+ slots: [],
1390
+ locks: [],
1391
+ tasks: [
1392
+ makeTask({ id: 'T-10', status: TASK_STATUS.IN_PROGRESS }),
1393
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.IN_PROGRESS }),
1394
+ makeTask({ id: 'T-12', parentId: 'T-11', status: TASK_STATUS.BLOCKED }),
1395
+ ],
1396
+ });
1397
+
1398
+ const result = runMaintenance(collaborators.ctx);
1399
+
1400
+ assert.deepEqual(result.recomputedParents, [
1401
+ { id: 'T-10', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.BLOCKED },
1402
+ { id: 'T-11', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.BLOCKED },
1403
+ ]);
1404
+ });
1405
+
1406
+ it('leaves the parent alone when the derived status matches its current status', () => {
1407
+ const collaborators = makeCollaborators({
1408
+ slots: [],
1409
+ locks: [],
1410
+ tasks: [
1411
+ makeTask({ id: 'T-10', status: TASK_STATUS.TO_DO }),
1412
+ makeTask({ id: 'T-11', parentId: 'T-10', status: TASK_STATUS.TO_DO }),
1413
+ ],
1414
+ });
1415
+
1416
+ const result = runMaintenance(collaborators.ctx);
1417
+
1418
+ assert.deepEqual(result.recomputedParents, []);
1419
+ });
1420
+ });
1421
+
1422
+ // ── Step 5b: refresh the graph-holder task ──────────────────────────────────────
1423
+
1424
+ describe('runMaintenance — graph-holder refresh (step 5b)', () => {
1425
+ const holder = (): Task => makeTask({ id: 'T-112', status: TASK_STATUS.TO_DO, isGraphHolder: true });
1426
+ const openTask = (): Task => makeTask({ id: 'T-1', status: TASK_STATUS.TO_DO });
1427
+ const boardFrom = (tasks: Task[]): { tasksById: Record<string, Task> } => ({
1428
+ tasksById: Object.fromEntries(tasks.map((task) => [task.id, task])),
1429
+ });
1430
+
1431
+ it('does not call setDescription when the rendered view already matches the holder description', () => {
1432
+ const tasks = [holder(), openTask()];
1433
+ const collaborators = makeCollaborators({
1434
+ slots: [],
1435
+ locks: [],
1436
+ tasks,
1437
+ descriptionsBefore: { 'T-112': renderHolderDescription(boardFrom(tasks)) },
1438
+ });
1439
+
1440
+ const result = runMaintenance(collaborators.ctx);
1441
+
1442
+ assert.equal(collaborators.descriptionEdits().length, 0);
1443
+ assert.equal(result.graphHolderRefreshed, null);
1444
+ });
1445
+
1446
+ it('calls setDescription once with the fresh text, before the board commit', () => {
1447
+ const tasks = [holder(), openTask()];
1448
+ const collaborators = makeCollaborators({
1449
+ slots: [],
1450
+ locks: [],
1451
+ tasks,
1452
+ descriptionsBefore: { 'T-112': 'stale text' },
1453
+ hasPendingBacklogChanges: true,
1454
+ });
1455
+
1456
+ const result = runMaintenance(collaborators.ctx);
1457
+
1458
+ const expected = renderHolderDescription(boardFrom(tasks));
1459
+ assert.deepEqual(collaborators.descriptionEdits(), [{ id: 'T-112', description: expected }]);
1460
+ assert.equal(result.graphHolderRefreshed, 'T-112');
1461
+ const setIndex = collaborators.calls.indexOf('setDescription(T-112)');
1462
+ const commitIndex = collaborators.calls.indexOf('commitBacklogChanges');
1463
+ assert.ok(setIndex >= 0, 'setDescription must have been called');
1464
+ assert.ok(commitIndex >= 0, 'commitBacklogChanges must have been called');
1465
+ assert.ok(setIndex < commitIndex, 'the holder refresh must land before the board commit');
1466
+ });
1467
+
1468
+ // Step 5b must render over `tasksById` AS STEP 5 (parent recompute) LEFT IT, not the board the
1469
+ // pass started with — the module comment's own justification for the ordering. Asserts on the
1470
+ // WRITTEN DESCRIPTION's content, not merely a call-index comparison, so a regression that renders
1471
+ // from a stale snapshot (right index, wrong data) would still be caught.
1472
+ it('renders the view AFTER parent recomputation: a parent this pass just closed is not an open wait', () => {
1473
+ const tasks = [
1474
+ holder(),
1475
+ makeTask({ id: 'T-1', status: TASK_STATUS.TO_DO, dependsOn: ['T-30'] }),
1476
+ makeTask({ id: 'T-30', status: TASK_STATUS.TO_DO }),
1477
+ makeTask({ id: 'T-31', parentId: 'T-30', status: TASK_STATUS.DONE }),
1478
+ ];
1479
+ const collaborators = makeCollaborators({
1480
+ slots: [],
1481
+ locks: [],
1482
+ tasks,
1483
+ descriptionsBefore: { 'T-112': 'stale text' },
1484
+ // T-30's only child is Done and its own PR is merged: step 5 (parent recompute) moves T-30
1485
+ // from To Do to Done in THIS pass.
1486
+ isPrMerged: (branch) => branch === 'task/T-30',
1487
+ mergedState: (branch) => (branch === 'task/T-30' ? 'merged' : 'not-merged'),
1488
+ hasPendingBacklogChanges: true,
1489
+ });
1490
+
1491
+ const result = runMaintenance(collaborators.ctx);
1492
+
1493
+ assert.deepEqual(result.recomputedParents, [
1494
+ { id: 'T-30', from: TASK_STATUS.TO_DO, to: TASK_STATUS.DONE },
1495
+ ]);
1496
+ assert.equal(result.graphHolderRefreshed, 'T-112');
1497
+ const written = collaborators.descriptionFor('T-112');
1498
+ assert.ok(written, 'the holder must have a description after this pass');
1499
+ assert.doesNotMatch(
1500
+ written!,
1501
+ /T-30/,
1502
+ 'T-30 is Done by the time step 5b runs, so it must not appear at all — neither as an open task nor as something T-1 waits for',
1503
+ );
1504
+ assert.match(written!, /T-1 \[To Do\]/, 'T-1 must render as READY once T-30 is Done');
1505
+ });
1506
+
1507
+ it('skips the refresh over an incomplete board read, never calling readDescription', () => {
1508
+ const tasks = [holder(), openTask()];
1509
+ const collaborators = makeCollaborators({
1510
+ slots: [],
1511
+ locks: [],
1512
+ tasks,
1513
+ boardComplete: false,
1514
+ descriptionsBefore: { 'T-112': 'stale text' },
1515
+ });
1516
+
1517
+ const result = runMaintenance(collaborators.ctx);
1518
+
1519
+ assert.equal(result.graphHolderRefreshed, null);
1520
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('readDescription')));
1521
+ assert.ok(!collaborators.calls.some((call) => call.startsWith('setDescription')));
1522
+ });
1523
+
1524
+ it('writes nothing when no task carries board:graph', () => {
1525
+ const tasks = [openTask()];
1526
+ const collaborators = makeCollaborators({ slots: [], locks: [], tasks });
1527
+
1528
+ const result = runMaintenance(collaborators.ctx);
1529
+
1530
+ assert.equal(result.graphHolderRefreshed, null);
1531
+ assert.deepEqual(result.graphHolderAmbiguous, []);
1532
+ assert.equal(collaborators.descriptionEdits().length, 0);
1533
+ });
1534
+
1535
+ it('writes the ambiguity notice to BOTH holders and reports every id when two or more carry board:graph', () => {
1536
+ const tasks = [
1537
+ holder(),
1538
+ makeTask({ id: 'T-113', status: TASK_STATUS.TO_DO, isGraphHolder: true }),
1539
+ openTask(),
1540
+ ];
1541
+ const collaborators = makeCollaborators({
1542
+ slots: [],
1543
+ locks: [],
1544
+ tasks,
1545
+ descriptionsBefore: { 'T-112': 'stale text', 'T-113': 'other stale text' },
1546
+ hasPendingBacklogChanges: true,
1547
+ });
1548
+
1549
+ const result = runMaintenance(collaborators.ctx);
1550
+
1551
+ assert.equal(result.graphHolderRefreshed, null);
1552
+ assert.deepEqual(result.graphHolderAmbiguous, ['T-112', 'T-113']);
1553
+ const notice = ambiguousHolderNotice(['T-112', 'T-113']);
1554
+ assert.deepEqual(
1555
+ collaborators.descriptionEdits().map((edit) => edit.id).sort(),
1556
+ ['T-112', 'T-113'],
1557
+ 'both holders receive the notice',
1558
+ );
1559
+ for (const edit of collaborators.descriptionEdits()) {
1560
+ assert.equal(edit.description, notice);
1561
+ }
1562
+ // The commit still happens: the ambiguity notice is a legitimate board change like any other.
1563
+ assert.equal(result.committedBoard, true);
1564
+ });
1565
+
1566
+ it('does not rewrite a holder that already shows the ambiguity notice', () => {
1567
+ const tasks = [
1568
+ holder(),
1569
+ makeTask({ id: 'T-113', status: TASK_STATUS.TO_DO, isGraphHolder: true }),
1570
+ openTask(),
1571
+ ];
1572
+ const notice = ambiguousHolderNotice(['T-112', 'T-113']);
1573
+ const collaborators = makeCollaborators({
1574
+ slots: [],
1575
+ locks: [],
1576
+ tasks,
1577
+ descriptionsBefore: { 'T-112': notice, 'T-113': 'stale text' },
1578
+ hasPendingBacklogChanges: true,
1579
+ });
1580
+
1581
+ const result = runMaintenance(collaborators.ctx);
1582
+
1583
+ assert.deepEqual(result.graphHolderAmbiguous, ['T-112', 'T-113']);
1584
+ assert.deepEqual(collaborators.descriptionEdits(), [{ id: 'T-113', description: notice }]);
1585
+ });
1586
+
1587
+ it('a throw writing the notice to one holder does not prevent the other, and the pass still commits', () => {
1588
+ const tasks = [
1589
+ holder(),
1590
+ makeTask({ id: 'T-113', status: TASK_STATUS.TO_DO, isGraphHolder: true }),
1591
+ openTask(),
1592
+ ];
1593
+ const collaborators = makeCollaborators({
1594
+ slots: [],
1595
+ locks: [],
1596
+ tasks,
1597
+ descriptionsBefore: { 'T-112': 'stale text', 'T-113': 'other stale text' },
1598
+ setDescriptionShouldThrow: (id) => id === 'T-112',
1599
+ hasPendingBacklogChanges: true,
1600
+ });
1601
+
1602
+ const result = runMaintenance(collaborators.ctx);
1603
+
1604
+ assert.deepEqual(result.graphHolderAmbiguous, ['T-112', 'T-113']);
1605
+ assert.deepEqual(collaborators.descriptionEdits().map((edit) => edit.id), ['T-113']);
1606
+ assert.equal(result.graphHolderRefreshError, null, 'a single holder write failure is not a step failure');
1607
+ assert.equal(result.committedBoard, true);
1608
+ });
1609
+
1610
+ it('records the failure and still closes merged tasks, recomputes parents and commits when the write throws', () => {
1611
+ const tasks = [
1612
+ holder(),
1613
+ openTask(),
1614
+ makeTask({ id: 'T-20', status: TASK_STATUS.IN_PROGRESS }),
1615
+ makeTask({ id: 'T-30', status: TASK_STATUS.TO_DO }),
1616
+ makeTask({ id: 'T-31', parentId: 'T-30', status: TASK_STATUS.DONE }),
1617
+ ];
1618
+ const collaborators = makeCollaborators({
1619
+ slots: [],
1620
+ locks: [],
1621
+ tasks,
1622
+ descriptionsBefore: { 'T-112': 'stale text' },
1623
+ setDescriptionShouldThrow: (id) => id === 'T-112',
1624
+ isPrMerged: (branch) => branch === 'task/T-20',
1625
+ mergedState: (branch) => (branch === 'task/T-20' ? 'merged' : 'not-merged'),
1626
+ hasPendingBacklogChanges: true,
1627
+ });
1628
+
1629
+ const result = runMaintenance(collaborators.ctx);
1630
+
1631
+ assert.ok(result.graphHolderRefreshError, 'the failure must be recorded on the result');
1632
+ assert.equal(result.graphHolderRefreshed, null);
1633
+ assert.deepEqual(result.movedToDone, ['T-20']);
1634
+ assert.deepEqual(result.recomputedParents, [
1635
+ { id: 'T-30', from: TASK_STATUS.TO_DO, to: TASK_STATUS.IN_PROGRESS },
1636
+ ]);
1637
+ assert.equal(result.committedBoard, true);
1638
+ });
1639
+
1640
+ it('records the failure and still closes merged tasks, recomputes parents and commits when the read throws', () => {
1641
+ const tasks = [
1642
+ holder(),
1643
+ openTask(),
1644
+ makeTask({ id: 'T-20', status: TASK_STATUS.IN_PROGRESS }),
1645
+ makeTask({ id: 'T-30', status: TASK_STATUS.TO_DO }),
1646
+ makeTask({ id: 'T-31', parentId: 'T-30', status: TASK_STATUS.DONE }),
1647
+ ];
1648
+ const collaborators = makeCollaborators({
1649
+ slots: [],
1650
+ locks: [],
1651
+ tasks,
1652
+ descriptionsBefore: { 'T-112': 'stale text' },
1653
+ readDescriptionShouldThrow: (id) => id === 'T-112',
1654
+ isPrMerged: (branch) => branch === 'task/T-20',
1655
+ mergedState: (branch) => (branch === 'task/T-20' ? 'merged' : 'not-merged'),
1656
+ hasPendingBacklogChanges: true,
1657
+ });
1658
+
1659
+ const result = runMaintenance(collaborators.ctx);
1660
+
1661
+ assert.ok(result.graphHolderRefreshError, 'the failure must be recorded on the result');
1662
+ assert.equal(result.graphHolderRefreshed, null);
1663
+ assert.equal(collaborators.descriptionEdits().length, 0, 'a read failure must never reach the writer');
1664
+ assert.deepEqual(result.movedToDone, ['T-20']);
1665
+ assert.deepEqual(result.recomputedParents, [
1666
+ { id: 'T-30', from: TASK_STATUS.TO_DO, to: TASK_STATUS.IN_PROGRESS },
1667
+ ]);
1668
+ assert.equal(result.committedBoard, true);
1669
+ });
1670
+ });
1671
+
1672
+ // ── Step 6: commit pending .backlog/** changes ─────────────────────────────────
1673
+
1674
+ describe('runMaintenance — board commit', () => {
1675
+ it('commits pending .backlog changes with a conventional chore(backlog) message summarizing transitions', () => {
1676
+ const collaborators = makeCollaborators({
1677
+ slots: [],
1678
+ locks: [],
1679
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.IN_PROGRESS })],
1680
+ isPrMerged: (branch) => branch === 'task/T-3',
1681
+ hasPendingBacklogChanges: true,
1682
+ });
1683
+
1684
+ const result = runMaintenance(collaborators.ctx);
1685
+
1686
+ assert.equal(result.committedBoard, true);
1687
+ assert.equal(collaborators.boardCommits().length, 1);
1688
+ assert.match(
1689
+ collaborators.boardCommits()[0],
1690
+ /^chore\(backlog\): sync board state \(.*T-3.*\)$/,
1691
+ );
1692
+ });
1693
+
1694
+ it('does not commit when there is nothing pending under .backlog', () => {
1695
+ const collaborators = makeCollaborators({
1696
+ slots: [],
1697
+ locks: [],
1698
+ tasks: [],
1699
+ hasPendingBacklogChanges: false,
1700
+ });
1701
+
1702
+ const result = runMaintenance(collaborators.ctx);
1703
+
1704
+ assert.equal(result.committedBoard, false);
1705
+ assert.deepEqual(collaborators.boardCommits(), []);
1706
+ });
1707
+
1708
+ it('still commits with a generic message when changes are pending but nothing transitioned this pass', () => {
1709
+ const collaborators = makeCollaborators({
1710
+ slots: [],
1711
+ locks: [],
1712
+ tasks: [],
1713
+ hasPendingBacklogChanges: true,
1714
+ });
1715
+
1716
+ const result = runMaintenance(collaborators.ctx);
1717
+
1718
+ assert.equal(result.committedBoard, true);
1719
+ assert.match(collaborators.boardCommits()[0], /^chore\(backlog\): sync board state/);
1720
+ });
1721
+ });
1722
+
1723
+ // ── recomputeParent, called directly by the close ─────────────────────────────
1724
+
1725
+ describe('recomputeParent', () => {
1726
+ /**
1727
+ * A bare `hasCloseAttemptBeenEnqueued`/`markCloseAttemptEnqueued` pair, Set-backed, plus T-68's
1728
+ * two read-only attempt probes — both default to "no data", the ordinary answer every fixture in
1729
+ * THIS describe block needs: it asserts the DERIVED STATUS, never the execution record's own
1730
+ * content (that is `runMaintenance — the «Registro de ejecución» block...`, above).
1731
+ */
1732
+ function fakeCloseAttemptFs(alreadyEnqueued: string[] = []) {
1733
+ const enqueued = new Set(alreadyEnqueued);
1734
+ return {
1735
+ hasCloseAttemptBeenEnqueued: (taskId: string) => enqueued.has(taskId),
1736
+ markCloseAttemptEnqueued: (taskId: string) => enqueued.add(taskId),
1737
+ attemptStreamOutcome: (): string | null => null,
1738
+ attemptReviewVerdict: (): string | null => null,
1739
+ };
1740
+ }
1741
+
1742
+ /**
1743
+ * A `setStatus` recorder (into the caller's own `edits` array, when given one) plus T-68's
1744
+ * `appendNotes`/`readNotes`/`comment` no-ops — a parent this suite derives to `Done` still goes
1745
+ * through `writeExecutionRecordOnce`, and a silent no-op is the right default for a suite that is
1746
+ * not asserting the record's content.
1747
+ */
1748
+ function fakeParentBacklog(edits: Array<[string, string]> = []) {
1749
+ return {
1750
+ setStatus: (id: string, status: string) => edits.push([id, status]),
1751
+ appendNotes: (): void => {},
1752
+ readNotes: (): string | null => null,
1753
+ comment: (): void => {},
1754
+ };
1755
+ }
1756
+
1757
+ const parentAndChild = (
1758
+ childStatus: Task['status'],
1759
+ parentStatus: Task['status'] = TASK_STATUS.IN_PROGRESS,
1760
+ ) => ({
1761
+ 'T-10': makeTask({ id: 'T-10', status: parentStatus }),
1762
+ 'T-11': makeTask({ id: 'T-11', status: childStatus, parentId: 'T-10' }),
1763
+ });
1764
+
1765
+ it('writes the derived status when it differs from what the board says', () => {
1766
+ const edits: Array<[string, string]> = [];
1767
+ const result = recomputeParent({
1768
+ parentId: 'T-10',
1769
+ tasksById: parentAndChild(TASK_STATUS.BLOCKED),
1770
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1771
+ backlog: fakeParentBacklog(edits),
1772
+ fs: fakeCloseAttemptFs(),
1773
+ });
1774
+
1775
+ assert.deepEqual(result, {
1776
+ id: 'T-10',
1777
+ from: TASK_STATUS.IN_PROGRESS,
1778
+ to: TASK_STATUS.BLOCKED,
1779
+ });
1780
+ assert.deepEqual(edits, [['T-10', TASK_STATUS.BLOCKED]]);
1781
+ });
1782
+
1783
+ it('writes nothing when the derived status already matches (no churn on the board)', () => {
1784
+ const edits: Array<[string, string]> = [];
1785
+ const result = recomputeParent({
1786
+ parentId: 'T-10',
1787
+ tasksById: parentAndChild(TASK_STATUS.IN_PROGRESS),
1788
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1789
+ backlog: fakeParentBacklog(edits),
1790
+ fs: fakeCloseAttemptFs(),
1791
+ });
1792
+
1793
+ assert.equal(result, null);
1794
+ assert.deepEqual(edits, []);
1795
+ });
1796
+
1797
+ it('closes the parent only when its children are Done AND its own PR merged', () => {
1798
+ const tasksById = parentAndChild(TASK_STATUS.DONE);
1799
+ const unmerged = recomputeParent({
1800
+ parentId: 'T-10',
1801
+ tasksById,
1802
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1803
+ backlog: fakeParentBacklog(),
1804
+ fs: fakeCloseAttemptFs(),
1805
+ });
1806
+ const merged = recomputeParent({
1807
+ parentId: 'T-10',
1808
+ tasksById,
1809
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
1810
+ backlog: fakeParentBacklog(),
1811
+ fs: fakeCloseAttemptFs(),
1812
+ });
1813
+
1814
+ assert.equal(unmerged, null, 'children Done but the parent PR unmerged stays In Progress');
1815
+ assert.deepEqual(merged, { id: 'T-10', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.DONE });
1816
+ });
1817
+
1818
+ // ── T-68 fix 3: a parent reaching Done through THIS derivation gets the block too (§12: "every
1819
+ // task") — `runMaintenance`'s step 3 is not the only place `Done` is written. ──────────────────
1820
+
1821
+ it('a parent that reaches Done through this derivation gets its OWN «Registro de ejecución» block', () => {
1822
+ const tasksById = parentAndChild(TASK_STATUS.DONE);
1823
+ const appended: Array<{ id: string; notes: string }> = [];
1824
+ const edits: Array<[string, string]> = [];
1825
+ const result = recomputeParent({
1826
+ parentId: 'T-10',
1827
+ tasksById,
1828
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
1829
+ backlog: {
1830
+ setStatus: (id, status) => edits.push([id, status]),
1831
+ appendNotes: (id, notes) => appended.push({ id, notes }),
1832
+ readNotes: () => null,
1833
+ comment: () => {},
1834
+ },
1835
+ fs: fakeCloseAttemptFs(),
1836
+ });
1837
+
1838
+ assert.deepEqual(result, { id: 'T-10', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.DONE });
1839
+ assert.equal(appended.length, 1, 'the parent gets its own record, exactly once');
1840
+ assert.equal(appended[0]?.id, 'T-10');
1841
+ assert.match(appended[0]?.notes ?? '', /^## Registro de ejecución/);
1842
+ // Written BEFORE `setStatus` — the same ordering fix 1 established for a leaf task, and for the
1843
+ // identical reason: a `Done` parent never re-enters this derivation with a status to correct.
1844
+ assert.deepEqual(edits, [['T-10', TASK_STATUS.DONE]]);
1845
+ });
1846
+
1847
+ it('appendNotes throws: the parent still moves to Done, with exactly one comment', () => {
1848
+ const tasksById = parentAndChild(TASK_STATUS.DONE);
1849
+ const edits: Array<[string, string]> = [];
1850
+ const appended: Array<{ id: string; notes: string }> = [];
1851
+ const comments: Array<{ id: string; comment: string }> = [];
1852
+ const result = recomputeParent({
1853
+ parentId: 'T-10',
1854
+ tasksById,
1855
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
1856
+ backlog: {
1857
+ setStatus: (id, status) => edits.push([id, status]),
1858
+ appendNotes: (id, notes) => {
1859
+ appended.push({ id, notes });
1860
+ throw new Error('simulated appendNotes failure');
1861
+ },
1862
+ readNotes: () => null,
1863
+ comment: (id, comment) => comments.push({ id, comment }),
1864
+ },
1865
+ fs: fakeCloseAttemptFs(),
1866
+ });
1867
+
1868
+ assert.deepEqual(
1869
+ result,
1870
+ { id: 'T-10', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.DONE },
1871
+ 'a failed record write must never hold the parent Done transition hostage',
1872
+ );
1873
+ assert.deepEqual(edits, [['T-10', TASK_STATUS.DONE]]);
1874
+ assert.equal(comments.length, 1, 'exactly one comment records the gap');
1875
+ assert.match(comments[0]?.comment ?? '', /Registro de ejecución/);
1876
+ });
1877
+
1878
+ it('comment ALSO throws: recomputeParent itself never throws, and the parent still moves to Done', () => {
1879
+ const tasksById = parentAndChild(TASK_STATUS.DONE);
1880
+ const edits: Array<[string, string]> = [];
1881
+ let result: ReturnType<typeof recomputeParent> | undefined;
1882
+ assert.doesNotThrow(() => {
1883
+ result = recomputeParent({
1884
+ parentId: 'T-10',
1885
+ tasksById,
1886
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
1887
+ backlog: {
1888
+ setStatus: (id, status) => edits.push([id, status]),
1889
+ appendNotes: () => {
1890
+ throw new Error('simulated appendNotes failure');
1891
+ },
1892
+ readNotes: () => null,
1893
+ comment: () => {
1894
+ throw new Error('simulated comment failure too');
1895
+ },
1896
+ },
1897
+ fs: fakeCloseAttemptFs(),
1898
+ });
1899
+ });
1900
+
1901
+ assert.deepEqual(result, { id: 'T-10', from: TASK_STATUS.IN_PROGRESS, to: TASK_STATUS.DONE });
1902
+ assert.deepEqual(edits, [['T-10', TASK_STATUS.DONE]]);
1903
+ });
1904
+
1905
+ // F1 [BLOCKER] (2026-09-08): `isPrMerged` collapses "confirmed not merged" and "gh outage" into
1906
+ // the SAME `false` — see `MaintenanceGh.mergedState`'s own JSDoc for the identical trap step 3b
1907
+ // was built to avoid. Before this fix, an all-Done parent whose own merge state is genuinely
1908
+ // UNKNOWN (a `gh` outage) read that `false` as "confirmed not merged", derived `In Progress` (or,
1909
+ // for a Complex parent, `Queued` — burning the one-shot close-attempt marker), and wrote it
1910
+ // because the derived status differs from the board's actual `Done`.
1911
+ it('derives nothing when a gh outage hides whether the all-Done parent is really merged (F1)', () => {
1912
+ const edits: Array<[string, string]> = [];
1913
+ const result = recomputeParent({
1914
+ parentId: 'T-10',
1915
+ tasksById: parentAndChild(TASK_STATUS.DONE, TASK_STATUS.DONE),
1916
+ gh: { isPrMerged: () => false, mergedState: () => 'unknown' },
1917
+ backlog: fakeParentBacklog(edits),
1918
+ fs: fakeCloseAttemptFs(),
1919
+ });
1920
+
1921
+ assert.equal(result, null, 'a gh outage must never be read as a confirmed not-merged answer');
1922
+ assert.deepEqual(edits, [], 'the board Done status must survive an unanswerable gh outage');
1923
+ });
1924
+
1925
+ it('is a no-op for a task with no children — a leaf has nothing to derive from', () => {
1926
+ const result = recomputeParent({
1927
+ parentId: 'T-10',
1928
+ tasksById: { 'T-10': makeTask({ id: 'T-10', status: TASK_STATUS.IN_PROGRESS }) },
1929
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
1930
+ backlog: fakeParentBacklog(),
1931
+ fs: fakeCloseAttemptFs(),
1932
+ });
1933
+ assert.equal(result, null);
1934
+ });
1935
+
1936
+ it('is a no-op for a parent id absent from the board snapshot', () => {
1937
+ const result = recomputeParent({
1938
+ parentId: 'T-99',
1939
+ tasksById: parentAndChild(TASK_STATUS.BLOCKED),
1940
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1941
+ backlog: fakeParentBacklog(),
1942
+ fs: fakeCloseAttemptFs(),
1943
+ });
1944
+ assert.equal(result, null);
1945
+ });
1946
+
1947
+ // ── T-8, last point: the Complex parent's one automated close attempt ──────
1948
+ // T-8 defect 3, HIGH, 2026-09-08: rewritten from `attempts > 0` to the durable enqueue-time
1949
+ // marker (`hasCloseAttemptBeenEnqueued`/`markCloseAttemptEnqueued`) — see `MaintenanceFs
1950
+ // .hasCloseAttemptBeenEnqueued`'s own JSDoc for why `attempts` (an `intento-N` directory count
1951
+ // `beginAttempt` creates LATE) could stay `0` forever while the SAME "all Done, unmerged" state
1952
+ // kept re-deriving `Queued` on every later pass.
1953
+ describe('a Complex parent, all children Done', () => {
1954
+ const complexParentAndChild = (parentStatus: Task['status']) => ({
1955
+ 'T-10': makeTask({ id: 'T-10', status: parentStatus, tier: TIER.COMPLEX }),
1956
+ 'T-11': makeTask({ id: 'T-11', status: TASK_STATUS.DONE, parentId: 'T-10' }),
1957
+ });
1958
+
1959
+ it('enqueues it for a close attempt the first time, and MARKS it enqueued durably', () => {
1960
+ const edits: Array<[string, string]> = [];
1961
+ const fs = fakeCloseAttemptFs();
1962
+ const result = recomputeParent({
1963
+ parentId: 'T-10',
1964
+ tasksById: complexParentAndChild(TASK_STATUS.IN_PROGRESS),
1965
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1966
+ backlog: fakeParentBacklog(edits),
1967
+ fs,
1968
+ });
1969
+
1970
+ assert.deepEqual(result, {
1971
+ id: 'T-10',
1972
+ from: TASK_STATUS.IN_PROGRESS,
1973
+ to: TASK_STATUS.QUEUED,
1974
+ });
1975
+ assert.deepEqual(edits, [['T-10', TASK_STATUS.QUEUED]]);
1976
+ assert.equal(
1977
+ fs.hasCloseAttemptBeenEnqueued('T-10'),
1978
+ true,
1979
+ 'rule 4 firing must mark the parent enqueued the instant it fires, not wait for a worker to start',
1980
+ );
1981
+ });
1982
+
1983
+ it('does NOT re-enqueue a close attempt already marked enqueued (a live retry running)', () => {
1984
+ const edits: Array<[string, string]> = [];
1985
+ const result = recomputeParent({
1986
+ parentId: 'T-10',
1987
+ tasksById: complexParentAndChild(TASK_STATUS.IN_PROGRESS),
1988
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
1989
+ backlog: fakeParentBacklog(edits),
1990
+ fs: fakeCloseAttemptFs(['T-10']),
1991
+ });
1992
+
1993
+ assert.equal(result, null, 'a live close attempt must not be clobbered back to Queued');
1994
+ assert.deepEqual(edits, []);
1995
+ });
1996
+
1997
+ it('does NOT clear a Blocked close attempt back to Queued (that is section 10, a human decision)', () => {
1998
+ const edits: Array<[string, string]> = [];
1999
+ const result = recomputeParent({
2000
+ parentId: 'T-10',
2001
+ tasksById: complexParentAndChild(TASK_STATUS.BLOCKED),
2002
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
2003
+ backlog: fakeParentBacklog(edits),
2004
+ fs: fakeCloseAttemptFs(['T-10']),
2005
+ });
2006
+
2007
+ assert.equal(result, null, 'a Blocked close attempt report must survive an untouched pass');
2008
+ assert.deepEqual(edits, []);
2009
+ });
2010
+
2011
+ it('still reaches Done once the close attempt PR merges', () => {
2012
+ const result = recomputeParent({
2013
+ parentId: 'T-10',
2014
+ tasksById: complexParentAndChild(TASK_STATUS.IN_PROGRESS),
2015
+ gh: { isPrMerged: () => true, mergedState: () => 'merged' },
2016
+ backlog: fakeParentBacklog(),
2017
+ fs: fakeCloseAttemptFs(['T-10']),
2018
+ });
2019
+
2020
+ assert.deepEqual(result, {
2021
+ id: 'T-10',
2022
+ from: TASK_STATUS.IN_PROGRESS,
2023
+ to: TASK_STATUS.DONE,
2024
+ });
2025
+ });
2026
+
2027
+ // The reproducing test for T-8 defect 3 itself: a guard blocks the dispatch BEFORE any worker
2028
+ // starts (e.g. no declared `Test command:`), so `attempts` NEVER moves off `0` — exactly the
2029
+ // condition that used to fool `own.attempts > 0` into re-deriving `Queued` forever.
2030
+ it('does not re-derive Queued on the next pass when a guard blocked the dispatch before any attempt directory existed', () => {
2031
+ const fs = fakeCloseAttemptFs();
2032
+ const child = makeTask({ id: 'T-11', status: TASK_STATUS.DONE, parentId: 'T-10' });
2033
+ const parent = (status: Task['status']) =>
2034
+ makeTask({ id: 'T-10', status, tier: TIER.COMPLEX, attempts: 0 });
2035
+
2036
+ const firstPass = recomputeParent({
2037
+ parentId: 'T-10',
2038
+ tasksById: { 'T-10': parent(TASK_STATUS.IN_PROGRESS), 'T-11': child },
2039
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
2040
+ backlog: fakeParentBacklog(),
2041
+ fs,
2042
+ });
2043
+ assert.deepEqual(firstPass, {
2044
+ id: 'T-10',
2045
+ from: TASK_STATUS.IN_PROGRESS,
2046
+ to: TASK_STATUS.QUEUED,
2047
+ });
2048
+
2049
+ // Guard 1 blocks it (no declared "Test command:") before `beginAttempt` ever runs — `attempts`
2050
+ // stays 0, exactly as it does in the real dispatch pipeline for this path.
2051
+ const secondPass = recomputeParent({
2052
+ parentId: 'T-10',
2053
+ tasksById: { 'T-10': parent(TASK_STATUS.BLOCKED), 'T-11': child },
2054
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
2055
+ backlog: fakeParentBacklog(),
2056
+ fs,
2057
+ });
2058
+ assert.equal(
2059
+ secondPass,
2060
+ null,
2061
+ 'the durable enqueue marker set on the first pass must survive a dispatch that never created an attempt directory',
2062
+ );
2063
+ });
2064
+
2065
+ // F1 [BLOCKER] (2026-09-08): the worse half of the same gh-outage bug — for a Complex parent
2066
+ // this path is rule 4 (`Queued`), which also burns the one-shot `markCloseAttemptEnqueued`
2067
+ // marker. A `gh` outage must never be able to consume that marker: it must derive nothing at
2068
+ // all, exactly like the non-Complex case above.
2069
+ it('does not enqueue a close attempt, and does not burn the one-shot marker, on a gh outage (F1)', () => {
2070
+ const edits: Array<[string, string]> = [];
2071
+ const fs = fakeCloseAttemptFs();
2072
+ const result = recomputeParent({
2073
+ parentId: 'T-10',
2074
+ tasksById: complexParentAndChild(TASK_STATUS.IN_PROGRESS),
2075
+ gh: { isPrMerged: () => false, mergedState: () => 'unknown' },
2076
+ backlog: fakeParentBacklog(edits),
2077
+ fs,
2078
+ });
2079
+
2080
+ assert.equal(result, null, 'an unanswerable gh outage must not enqueue a close attempt');
2081
+ assert.deepEqual(edits, []);
2082
+ assert.equal(
2083
+ fs.hasCloseAttemptBeenEnqueued('T-10'),
2084
+ false,
2085
+ 'the irreversible one-shot marker must survive an outage untouched — a merged parent must still get its automated close later',
2086
+ );
2087
+ });
2088
+
2089
+ // F2 [MEDIUM] (2026-09-08): the marker must be written the instant rule 4's derivation fires,
2090
+ // not only when that derivation also CHANGES the board. A person can set a Complex parent to
2091
+ // `Queued` by hand (the release flow, section 10) while children are still running; once the
2092
+ // last one finishes, rule 4 derives `Queued` again — same as the board already reads — and the
2093
+ // early "nothing changed" return must not skip the marker, or a later `Blocked` close-attempt
2094
+ // report gets silently re-queued on the NEXT pass (the marker would still read `false`).
2095
+ it('marks the close attempt enqueued even when the board already reads Queued (F2)', () => {
2096
+ const edits: Array<[string, string]> = [];
2097
+ const fs = fakeCloseAttemptFs();
2098
+ const result = recomputeParent({
2099
+ parentId: 'T-10',
2100
+ tasksById: complexParentAndChild(TASK_STATUS.QUEUED),
2101
+ gh: { isPrMerged: () => false, mergedState: () => 'not-merged' },
2102
+ backlog: fakeParentBacklog(edits),
2103
+ fs,
2104
+ });
2105
+
2106
+ assert.equal(result, null, 'no board write: the derived status already matches Queued');
2107
+ assert.deepEqual(edits, []);
2108
+ assert.equal(
2109
+ fs.hasCloseAttemptBeenEnqueued('T-10'),
2110
+ true,
2111
+ 'rule 4 fired even though the status did not change, so the marker must still be recorded — otherwise a later Blocked close-attempt report gets clobbered back to Queued on the next pass',
2112
+ );
2113
+ });
2114
+ });
2115
+ });
2116
+
2117
+ // ── F8: sweep semantics, recovery holds, and the board commit header ──────────
2118
+
2119
+ describe('runMaintenance — a dead worker never loses its work', () => {
2120
+ it('saves the branch BEFORE releasing the slot, then blocks the task saying the work survived', () => {
2121
+ const collaborators = makeCollaborators({
2122
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2123
+ locks: [makeLock({ taskId: 'T-1', pid: 999, workerPid: 4242 })],
2124
+ tasks: [makeTask({ id: 'T-1' })],
2125
+ isPidAlive: () => false,
2126
+ });
2127
+
2128
+ const result = runMaintenance(collaborators.ctx);
2129
+
2130
+ const saveIndex = collaborators.calls.indexOf('saveWipAndPush(task/T-1)');
2131
+ const writeIndex = collaborators.calls.indexOf('updateSlots');
2132
+ assert.ok(
2133
+ saveIndex > -1 && saveIndex < writeIndex,
2134
+ 'the WIP save must precede the slot write-back',
2135
+ );
2136
+ assert.deepEqual(result.releasedLocks, ['T-1']);
2137
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, null);
2138
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-1', status: TASK_STATUS.BLOCKED }]);
2139
+ });
2140
+
2141
+ it('kills a HUNG worker (expired heartbeat, live pid) before treating its lock as dead', () => {
2142
+ const collaborators = makeCollaborators({
2143
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 111)],
2144
+ locks: [
2145
+ makeLock({
2146
+ taskId: 'T-1',
2147
+ pid: 111,
2148
+ workerPid: 4242,
2149
+ heartbeatAt: new Date(NOW - TTL_MS - 1_000).toISOString(),
2150
+ }),
2151
+ ],
2152
+ tasks: [makeTask({ id: 'T-1' })],
2153
+ isPidAlive: () => true,
2154
+ });
2155
+
2156
+ runMaintenance(collaborators.ctx);
2157
+
2158
+ assert.deepEqual(collaborators.calls.slice(0, 2), [
2159
+ 'killProcess(4242)',
2160
+ 'saveWipAndPush(task/T-1)',
2161
+ ]);
2162
+ });
2163
+
2164
+ it('holds the slot instead of releasing it when the rescue push fails', () => {
2165
+ const collaborators = makeCollaborators({
2166
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2167
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
2168
+ tasks: [makeTask({ id: 'T-1' })],
2169
+ isPidAlive: () => false,
2170
+ saveWipAndPush: () => ({ pushSucceeded: false }),
2171
+ });
2172
+
2173
+ const result = runMaintenance(collaborators.ctx);
2174
+
2175
+ assert.deepEqual(result.heldForRecovery, ['T-1']);
2176
+ const slot = collaborators.slotsAfter().slots[0];
2177
+ assert.equal(slot.taskId, 'T-1', 'the slot still holds the only copy of the work');
2178
+ assert.equal(slot.heldForRecovery, true);
2179
+ assert.deepEqual(result.releasedOrphanSlots, [], 'the orphan sweep must not release it either');
2180
+ });
2181
+
2182
+ // Defect 8 (2026-09-08): the dead-worker rescue is the SECOND pusher T-8 point 4's gate never
2183
+ // reached — it could push a dead worker's WIP onto a branch whose PR already merged, and T-8
2184
+ // point 5 now deletes that branch on `Done`, destroying the commit instead of merely stranding it.
2185
+ it('never pushes a dead worker WIP onto a branch that already reads confirmed merged', () => {
2186
+ const collaborators = makeCollaborators({
2187
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2188
+ locks: [makeLock({ taskId: 'T-1', pid: 999, workerPid: 4242, branch: 'task/T-1' })],
2189
+ tasks: [makeTask({ id: 'T-1' })],
2190
+ isPidAlive: () => false,
2191
+ mergedState: (branch) => (branch === 'task/T-1' ? 'merged' : 'unknown'),
2192
+ saveWipAndPush: () => assert.fail('a confirmed-merged branch must never be pushed to'),
2193
+ });
2194
+
2195
+ const result = runMaintenance(collaborators.ctx);
2196
+
2197
+ assert.deepEqual(result.pushRefusedMergedBranches, ['T-1']);
2198
+ // Still held for recovery — the WIP is unpushed and the slot is the only copy — but the
2199
+ // comment must say WHY, distinctly from the generic dead-worker one (no push was even tried).
2200
+ assert.deepEqual(result.heldForRecovery, ['T-1']);
2201
+ const comment = collaborators.comments().find((entry) => entry.id === 'T-1')?.comment ?? '';
2202
+ assert.match(comment, /ya consta como mergeada/);
2203
+ assert.match(comment, /task\/T-1/);
2204
+ assert.doesNotMatch(
2205
+ comment,
2206
+ /trabajo guardado/,
2207
+ 'must not reuse the generic push-attempt wording',
2208
+ );
2209
+ });
2210
+
2211
+ // T-20 point 4 (2026-09-11, hardened): `mergedState` is now REQUIRED on `MaintenanceGh`, so a
2212
+ // caller with no way to answer this question no longer type-checks — the fail-closed behaviour
2213
+ // moved from a runtime guard here to the compiler. What stays a runtime concern is the legitimate
2214
+ // third answer a WIRED collaborator can still give: `unknown`, from a real `gh` outage, which
2215
+ // must keep pushing through (rescue reasoning unchanged) rather than being read as a confirmed
2216
+ // merge.
2217
+ it('still saves a dead worker WIP when mergedState is unknown — refusing risks the only copy', () => {
2218
+ const collaborators = makeCollaborators({
2219
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2220
+ locks: [makeLock({ taskId: 'T-1', pid: 999, workerPid: 4242, branch: 'task/T-1' })],
2221
+ tasks: [makeTask({ id: 'T-1' })],
2222
+ isPidAlive: () => false,
2223
+ mergedState: () => 'unknown',
2224
+ });
2225
+
2226
+ const result = runMaintenance(collaborators.ctx);
2227
+
2228
+ assert.deepEqual(result.pushRefusedMergedBranches, []);
2229
+ assert.ok(collaborators.calls.includes('saveWipAndPush(task/T-1)'));
2230
+ });
2231
+ });
2232
+
2233
+ describe('runMaintenance — pending push retry', () => {
2234
+ it('retries a held slot, releases it on success, and says so on the task', () => {
2235
+ const held: SlotInfo = {
2236
+ ...busySlot('dispatch-a', 'local', 'T-1', 999),
2237
+ heldForRecovery: true,
2238
+ };
2239
+ const collaborators = makeCollaborators({
2240
+ slots: [held],
2241
+ locks: [],
2242
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2243
+ });
2244
+
2245
+ const result = runMaintenance(collaborators.ctx);
2246
+
2247
+ assert.deepEqual(result.recoveredPushes, ['T-1']);
2248
+ const slot = collaborators.slotsAfter().slots[0];
2249
+ assert.equal(slot.taskId, null);
2250
+ assert.equal(slot.heldForRecovery, false);
2251
+ assert.deepEqual(collaborators.statusEdits(), [{ id: 'T-1', status: TASK_STATUS.BLOCKED }]);
2252
+ });
2253
+
2254
+ // G9: a person may already have released the task while the push was pending. Re-writing
2255
+ // `Blocked` then drags it back out of the queue it was deliberately put into.
2256
+ it('leaves a re-queued task in Queued, commenting the recovery instead of blocking it again', () => {
2257
+ const held: SlotInfo = {
2258
+ ...busySlot('dispatch-a', 'local', 'T-1', 999),
2259
+ heldForRecovery: true,
2260
+ };
2261
+ const collaborators = makeCollaborators({
2262
+ slots: [held],
2263
+ locks: [],
2264
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.QUEUED })],
2265
+ });
2266
+
2267
+ const result = runMaintenance(collaborators.ctx);
2268
+
2269
+ assert.deepEqual(result.recoveredPushes, ['T-1']);
2270
+ assert.deepEqual(
2271
+ collaborators.statusEdits(),
2272
+ [],
2273
+ 'a Queued task must not be moved by a push retry',
2274
+ );
2275
+ assert.equal(collaborators.comments().length, 1);
2276
+ assert.equal(collaborators.comments()[0].id, 'T-1');
2277
+ assert.match(collaborators.comments()[0].comment, /push recuperado/);
2278
+ const slot = collaborators.slotsAfter().slots[0];
2279
+ assert.equal(slot.taskId, null);
2280
+ assert.equal(slot.heldForRecovery, false);
2281
+ });
2282
+
2283
+ it('keeps holding the slot when the retry fails again', () => {
2284
+ const held: SlotInfo = {
2285
+ ...busySlot('dispatch-a', 'local', 'T-1', 999),
2286
+ heldForRecovery: true,
2287
+ };
2288
+ const collaborators = makeCollaborators({
2289
+ slots: [held],
2290
+ locks: [],
2291
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2292
+ saveWipAndPush: () => ({ pushSucceeded: false }),
2293
+ });
2294
+
2295
+ const result = runMaintenance(collaborators.ctx);
2296
+
2297
+ assert.deepEqual(result.recoveredPushes, []);
2298
+ assert.equal(collaborators.slotsAfter().slots[0].heldForRecovery, true);
2299
+ });
2300
+ });
2301
+
2302
+ // G2: the pass drops the single-flight lock as soon as a slot is taken, so a SECOND pass writes
2303
+ // `slots.json` while this one is still sweeping. A whole-registry write built on the snapshot read
2304
+ // at the start silently reverted that write.
2305
+ describe('runMaintenance — a concurrent per-slot change made mid-pass', () => {
2306
+ it('keeps a slot another pass acquired while this sweep was running', () => {
2307
+ const collaborators = makeCollaborators({
2308
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999), freeSlot('dispatch-b')],
2309
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
2310
+ tasks: [makeTask({ id: 'T-1' })],
2311
+ isPidAlive: () => false,
2312
+ });
2313
+
2314
+ // Another pass takes dispatch-b after this pass has already read the registry.
2315
+ collaborators.ctx.gh = {
2316
+ isPrMerged: () => {
2317
+ collaborators.mutateRegistryConcurrently((slots) =>
2318
+ slots.map((slot) =>
2319
+ slot.name === 'dispatch-b'
2320
+ ? { ...slot, lane: LANE.LOCAL, taskId: 'T-2', pid: 7 }
2321
+ : slot,
2322
+ ),
2323
+ );
2324
+ return false;
2325
+ },
2326
+ // Wired, answering "not merged" — this test is about the registry race, not the merged-branch
2327
+ // gate, so it must NOT trip T-20 point 4's fail-closed refusal for an unwired collaborator.
2328
+ mergedState: () => 'not-merged',
2329
+ };
2330
+
2331
+ runMaintenance(collaborators.ctx);
2332
+
2333
+ const after = collaborators.slotsAfter().slots;
2334
+ assert.equal(after[0].taskId, null, 'this pass own release still lands');
2335
+ assert.equal(after[1].taskId, 'T-2', 'the other pass acquisition must survive this write');
2336
+ });
2337
+ });
2338
+
2339
+ describe('runMaintenance — the post-maintenance registry is returned', () => {
2340
+ it('hands back the registry AFTER its releases, so the same pass can use the freed slot', () => {
2341
+ const collaborators = makeCollaborators({
2342
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2343
+ locks: [],
2344
+ tasks: [makeTask({ id: 'T-1' })],
2345
+ });
2346
+
2347
+ const result = runMaintenance(collaborators.ctx);
2348
+
2349
+ assert.equal(result.slots.slots[0].taskId, null);
2350
+ });
2351
+ });
2352
+
2353
+ describe('runMaintenance — manual cancellation kills the WORKER', () => {
2354
+ it('kills the worker pid, not the reconciler pid that owns the lock', () => {
2355
+ const collaborators = makeCollaborators({
2356
+ slots: [busySlot('dispatch-a', 'local', 'T-4', 444)],
2357
+ locks: [makeLock({ taskId: 'T-4', pid: 444, workerPid: 5150 })],
2358
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.BLOCKED })],
2359
+ isPidAlive: () => true,
2360
+ });
2361
+
2362
+ runMaintenance(collaborators.ctx);
2363
+
2364
+ assert.ok(collaborators.calls.includes('killProcess(5150)'));
2365
+ assert.ok(!collaborators.calls.includes('killProcess(444)'));
2366
+ });
2367
+ });
2368
+
2369
+ describe('buildBoardCommitMessage', () => {
2370
+ it('names the single transition inline', () => {
2371
+ assert.equal(
2372
+ buildBoardCommitMessage(['T-12 -> Done']),
2373
+ 'chore(backlog): sync board state (T-12 -> Done)',
2374
+ );
2375
+ });
2376
+
2377
+ it('counts several transitions in the header and enumerates them in the body', () => {
2378
+ const message = buildBoardCommitMessage([
2379
+ 'T-1 -> Done',
2380
+ 'T-2 -> Blocked',
2381
+ 'T-3 -> Done',
2382
+ 'T-4 -> Done',
2383
+ ]);
2384
+ const [header, blank, ...body] = message.split('\n');
2385
+ assert.equal(header, 'chore(backlog): sync board state (4 transitions)');
2386
+ assert.equal(blank, '');
2387
+ assert.deepEqual(body, ['T-1 -> Done', 'T-2 -> Blocked', 'T-3 -> Done', 'T-4 -> Done']);
2388
+ assert.ok(header.length <= 100);
2389
+ assert.ok(body.every((line) => line.length < 100));
2390
+ });
2391
+
2392
+ it('falls back to housekeeping when nothing moved', () => {
2393
+ assert.equal(buildBoardCommitMessage([]), 'chore(backlog): sync board state (housekeeping)');
2394
+ });
2395
+ });
2396
+
2397
+ describe('runMaintenance — a failing board commit', () => {
2398
+ it('does not abort the pass: the sweep it already did still stands', () => {
2399
+ const collaborators = makeCollaborators({
2400
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2401
+ locks: [],
2402
+ tasks: [makeTask({ id: 'T-1' })],
2403
+ hasPendingBacklogChanges: true,
2404
+ commitBacklogChanges: () => {
2405
+ throw new Error('commit-msg hook rejected the message');
2406
+ },
2407
+ });
2408
+
2409
+ const result = runMaintenance(collaborators.ctx);
2410
+
2411
+ assert.equal(result.committedBoard, false);
2412
+ assert.deepEqual(result.releasedOrphanSlots, ['T-1']);
2413
+ });
2414
+ });
2415
+
2416
+ describe('runMaintenance — gh polling', () => {
2417
+ it('asks gh about each branch at most once per pass', () => {
2418
+ const asked: string[] = [];
2419
+ const collaborators = makeCollaborators({
2420
+ slots: [],
2421
+ locks: [],
2422
+ tasks: [
2423
+ makeTask({ id: 'T-10', status: TASK_STATUS.IN_PROGRESS }),
2424
+ makeTask({ id: 'T-10.1', status: TASK_STATUS.IN_PROGRESS, parentId: 'T-10' }),
2425
+ makeTask({ id: 'T-10.2', status: TASK_STATUS.IN_PROGRESS, parentId: 'T-10' }),
2426
+ ],
2427
+ isPrMerged: (branch) => {
2428
+ asked.push(branch);
2429
+ return false;
2430
+ },
2431
+ });
2432
+
2433
+ runMaintenance(collaborators.ctx);
2434
+
2435
+ assert.deepEqual(
2436
+ asked,
2437
+ [...new Set(asked)],
2438
+ `gh was polled twice for the same branch: ${asked.join(', ')}`,
2439
+ );
2440
+ });
2441
+ });
2442
+
2443
+ // ── H1/H4/H7: release means the same thing on every path, and recovery is bounded ─────────────
2444
+
2445
+ describe('runMaintenance — every release detaches the slot', () => {
2446
+ const detachOf = (name: string): string => `/slots/${name}`;
2447
+
2448
+ it('detaches the slot it releases after sweeping a dead lock', () => {
2449
+ const collaborators = makeCollaborators({
2450
+ slots: [busySlot('dispatch-a', 'local', 'T-1', 999)],
2451
+ locks: [makeLock({ taskId: 'T-1', pid: 999 })],
2452
+ tasks: [makeTask({ id: 'T-1' })],
2453
+ isPidAlive: () => false,
2454
+ });
2455
+
2456
+ runMaintenance(collaborators.ctx);
2457
+
2458
+ assert.deepEqual(collaborators.detachedSlots(), [detachOf('dispatch-a')]);
2459
+ });
2460
+
2461
+ it('detaches the slot it releases as an orphan', () => {
2462
+ const collaborators = makeCollaborators({
2463
+ slots: [busySlot('dispatch-b', 'local', 'T-2', 999)],
2464
+ locks: [],
2465
+ tasks: [makeTask({ id: 'T-2' })],
2466
+ });
2467
+
2468
+ const result = runMaintenance(collaborators.ctx);
2469
+
2470
+ assert.deepEqual(result.releasedOrphanSlots, ['T-2']);
2471
+ assert.deepEqual(collaborators.detachedSlots(), [detachOf('dispatch-b')]);
2472
+ });
2473
+
2474
+ it('detaches the slot it releases on a manual cancellation', () => {
2475
+ const collaborators = makeCollaborators({
2476
+ slots: [busySlot('dispatch-c', 'local', 'T-3', 111)],
2477
+ locks: [makeLock({ taskId: 'T-3', slot: 'dispatch-c' })],
2478
+ tasks: [makeTask({ id: 'T-3', status: TASK_STATUS.BLOCKED })],
2479
+ });
2480
+
2481
+ const result = runMaintenance(collaborators.ctx);
2482
+
2483
+ assert.deepEqual(result.cancelledWorkers, ['T-3']);
2484
+ assert.deepEqual(collaborators.detachedSlots(), [detachOf('dispatch-c')]);
2485
+ });
2486
+
2487
+ it('detaches the slot it releases after a recovered push', () => {
2488
+ const held: SlotInfo = {
2489
+ ...busySlot('dispatch-a', 'local', 'T-4', 999),
2490
+ heldForRecovery: true,
2491
+ };
2492
+ const collaborators = makeCollaborators({
2493
+ slots: [held],
2494
+ locks: [],
2495
+ tasks: [makeTask({ id: 'T-4', status: TASK_STATUS.BLOCKED })],
2496
+ });
2497
+
2498
+ const result = runMaintenance(collaborators.ctx);
2499
+
2500
+ assert.deepEqual(result.recoveredPushes, ['T-4']);
2501
+ assert.deepEqual(collaborators.detachedSlots(), [detachOf('dispatch-a')]);
2502
+ });
2503
+
2504
+ // H4: the sweep used to carry its own copy of the release transform. Comparing against the real
2505
+ // one is what keeps "released" from meaning two different things on two paths.
2506
+ it('releases exactly what slots.ts releaseSlot releases, field for field', () => {
2507
+ const busy = busySlot('dispatch-a', 'local', 'T-5', 999);
2508
+ const collaborators = makeCollaborators({
2509
+ slots: [busy],
2510
+ locks: [],
2511
+ tasks: [makeTask({ id: 'T-5' })],
2512
+ });
2513
+
2514
+ const result = runMaintenance(collaborators.ctx);
2515
+
2516
+ assert.deepEqual(result.slots, releaseSlot('T-5', { slots: [busy] }));
2517
+ });
2518
+ });
2519
+
2520
+ describe('runMaintenance — the push recovery retry is bounded', () => {
2521
+ const heldSlot = (attempts: number | undefined): SlotInfo => ({
2522
+ ...busySlot('dispatch-a', 'local', 'T-1', 999),
2523
+ heldForRecovery: true,
2524
+ ...(attempts === undefined ? {} : { recoveryAttempts: attempts }),
2525
+ });
2526
+
2527
+ it('counts a failed retry on the slot instead of retrying forever', () => {
2528
+ const collaborators = makeCollaborators({
2529
+ slots: [heldSlot(undefined)],
2530
+ locks: [],
2531
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2532
+ saveWipAndPush: () => ({ pushSucceeded: false }),
2533
+ });
2534
+
2535
+ runMaintenance(collaborators.ctx);
2536
+
2537
+ assert.equal(collaborators.slotsAfter().slots[0].recoveryAttempts, 1);
2538
+ assert.equal(collaborators.slotsAfter().slots[0].heldForRecovery, true);
2539
+ });
2540
+
2541
+ it('gives up at the cap: notifies, says so on the task, and keeps the slot for a person', () => {
2542
+ const collaborators = makeCollaborators({
2543
+ slots: [heldSlot(MAX_RECOVERY_ATTEMPTS - 1)],
2544
+ locks: [],
2545
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2546
+ saveWipAndPush: () => ({ pushSucceeded: false }),
2547
+ });
2548
+
2549
+ const result = runMaintenance(collaborators.ctx);
2550
+
2551
+ assert.deepEqual(result.exhaustedRecoveries, ['T-1']);
2552
+ assert.equal(collaborators.notifications().length, 1);
2553
+ assert.match(collaborators.comments()[0]?.comment ?? '', /recuperaci\u00f3n del push agotada/);
2554
+ assert.match(collaborators.comments()[0]?.comment ?? '', /task\/T-1/);
2555
+ assert.match(collaborators.comments()[0]?.comment ?? '', /\/slots\/dispatch-a/);
2556
+ // N5: "rescue it by hand" named no hand to use. The slot stays out of the pool until somebody
2557
+ // clears the hold, so the comment must name the command that does it and the file behind it.
2558
+ assert.match(collaborators.comments()[0]?.comment ?? '', /--release-slot dispatch-a/);
2559
+ assert.match(collaborators.comments()[0]?.comment ?? '', /heldForRecovery/);
2560
+ assert.match(collaborators.comments()[0]?.comment ?? '', /recoveryAttempts/);
2561
+ assert.match(collaborators.comments()[0]?.comment ?? '', /slots\.json/);
2562
+ assert.equal(
2563
+ collaborators.slotsAfter().slots[0].heldForRecovery,
2564
+ true,
2565
+ 'the work is still only here',
2566
+ );
2567
+ assert.equal(collaborators.slotsAfter().slots[0].taskId, 'T-1');
2568
+ });
2569
+
2570
+ it('stops retrying once the cap is reached — no further push, no repeated comment', () => {
2571
+ const collaborators = makeCollaborators({
2572
+ slots: [heldSlot(MAX_RECOVERY_ATTEMPTS)],
2573
+ locks: [],
2574
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2575
+ saveWipAndPush: () => assert.fail('an exhausted recovery must not push again'),
2576
+ });
2577
+
2578
+ const result = runMaintenance(collaborators.ctx);
2579
+
2580
+ assert.deepEqual(result.exhaustedRecoveries, []);
2581
+ assert.deepEqual(collaborators.comments(), []);
2582
+ assert.deepEqual(collaborators.notifications(), []);
2583
+ });
2584
+
2585
+ it('clears the counter when the push finally lands, so a later hold starts from zero', () => {
2586
+ const collaborators = makeCollaborators({
2587
+ slots: [heldSlot(2)],
2588
+ locks: [],
2589
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2590
+ });
2591
+
2592
+ const result = runMaintenance(collaborators.ctx);
2593
+
2594
+ assert.deepEqual(result.recoveredPushes, ['T-1']);
2595
+ assert.equal(collaborators.slotsAfter().slots[0].recoveryAttempts, 0);
2596
+ });
2597
+
2598
+ // Defect 8 (2026-09-08): T-8 point 4 stops the CLOSE from pushing to an already-merged branch
2599
+ // (`checkBranchNotMerged`), but the recovery retry never consulted it — it could still push a
2600
+ // held WIP commit onto a branch whose PR already merged, and T-8 point 5 now deletes that
2601
+ // branch once the task reaches `Done`, destroying the commit rather than merely stranding it.
2602
+ it('never retries the push once the branch reads confirmed merged, and stops future retries', () => {
2603
+ const collaborators = makeCollaborators({
2604
+ slots: [heldSlot(undefined)],
2605
+ locks: [],
2606
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2607
+ mergedState: (branch) => (branch === 'task/T-1' ? 'merged' : 'unknown'),
2608
+ saveWipAndPush: () => assert.fail('a confirmed-merged branch must never be pushed to'),
2609
+ });
2610
+
2611
+ const result = runMaintenance(collaborators.ctx);
2612
+
2613
+ assert.deepEqual(result.pushRefusedMergedBranches, ['T-1']);
2614
+ assert.deepEqual(result.recoveredPushes, []);
2615
+ // Marked exhausted immediately, the same cap the notify-once-and-stop path uses below — a
2616
+ // merge does not un-merge on the next pass, so retrying it again would only repeat the refusal.
2617
+ assert.equal(collaborators.slotsAfter().slots[0].recoveryAttempts, MAX_RECOVERY_ATTEMPTS);
2618
+ assert.equal(collaborators.slotsAfter().slots[0].heldForRecovery, true);
2619
+ assert.equal(collaborators.notifications().length, 1);
2620
+ assert.match(collaborators.comments()[0]?.comment ?? '', /ya consta como mergeada/);
2621
+ assert.match(collaborators.comments()[0]?.comment ?? '', /task\/T-1/);
2622
+ });
2623
+
2624
+ // `unknown` (a `gh` outage) must not be read as "safe to push" EITHER — but for a rescue path,
2625
+ // the safe DECISION under genuine uncertainty is still to push: refusing risks losing the only
2626
+ // unpushed copy of the work, while pushing under uncertainty only risks a few commits landing on
2627
+ // a branch that might already be merged (recoverable — they still exist on the remote).
2628
+ it('still retries the push when mergedState is unknown — refusing risks the only unpushed copy', () => {
2629
+ const collaborators = makeCollaborators({
2630
+ slots: [heldSlot(undefined)],
2631
+ locks: [],
2632
+ tasks: [makeTask({ id: 'T-1', status: TASK_STATUS.BLOCKED })],
2633
+ mergedState: () => 'unknown',
2634
+ });
2635
+
2636
+ const result = runMaintenance(collaborators.ctx);
2637
+
2638
+ assert.deepEqual(result.pushRefusedMergedBranches, []);
2639
+ assert.deepEqual(result.recoveredPushes, ['T-1']);
2640
+ assert.ok(collaborators.calls.includes('saveWipAndPush(task/T-1)'));
2641
+ });
2642
+ });