@aurorajs.dev/catalyst-cli 1.0.1 → 1.1.3

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 (2662) hide show
  1. package/README.md +1 -1
  2. package/dist/commands/generate/index.d.ts +3 -0
  3. package/dist/commands/generate/index.js +72 -4
  4. package/dist/commands/origin/review.js +7 -87
  5. package/dist/commands/sheets/diff.js +2 -4
  6. package/dist/commands/sheets/pull.d.ts +0 -1
  7. package/dist/commands/sheets/pull.js +2 -14
  8. package/dist/commands/sheets/push.d.ts +0 -1
  9. package/dist/commands/sheets/push.js +2 -14
  10. package/dist/commands/sheets/validate.js +3 -4
  11. package/dist/generator/domain/column-width.d.ts +2 -2
  12. package/dist/generator/domain/column-width.js +20 -15
  13. package/dist/generator/domain/config.d.ts +45 -6
  14. package/dist/generator/domain/config.js +152 -48
  15. package/dist/generator/domain/cross-bc-relations-discovery.d.ts +38 -0
  16. package/dist/generator/domain/cross-bc-relations-discovery.js +89 -0
  17. package/dist/generator/domain/cross-schema-resolver.d.ts +54 -1
  18. package/dist/generator/domain/cross-schema-resolver.js +52 -3
  19. package/dist/generator/domain/custom-field-value.d.ts +124 -0
  20. package/dist/generator/domain/custom-field-value.js +206 -0
  21. package/dist/generator/domain/declared-surface.d.ts +45 -0
  22. package/dist/generator/domain/declared-surface.js +106 -0
  23. package/dist/generator/domain/dialog-width.d.ts +46 -0
  24. package/dist/generator/domain/dialog-width.js +70 -0
  25. package/dist/generator/domain/display-field.d.ts +4 -3
  26. package/dist/generator/domain/display-field.js +11 -3
  27. package/dist/generator/domain/form-id.d.ts +3 -0
  28. package/dist/generator/domain/form-id.js +21 -0
  29. package/dist/generator/domain/i18n-embedded.d.ts +102 -0
  30. package/dist/generator/domain/i18n-embedded.js +112 -0
  31. package/dist/generator/domain/i18n-table.d.ts +112 -0
  32. package/dist/generator/domain/i18n-table.js +189 -0
  33. package/dist/generator/domain/model.d.ts +44 -16
  34. package/dist/generator/domain/model.js +1 -3
  35. package/dist/generator/domain/module-resolution.d.ts +17 -0
  36. package/dist/generator/domain/module-resolution.js +23 -0
  37. package/dist/generator/domain/operation-names.d.ts +17 -0
  38. package/dist/generator/domain/operation-names.js +27 -0
  39. package/dist/generator/domain/pivot.js +11 -1
  40. package/dist/generator/domain/property-filters.d.ts +68 -5
  41. package/dist/generator/domain/property-filters.js +97 -12
  42. package/dist/generator/domain/property-mappers.d.ts +67 -5
  43. package/dist/generator/domain/property-mappers.js +143 -59
  44. package/dist/generator/domain/property-pick-model.d.ts +12 -0
  45. package/dist/generator/domain/property-pick-model.js +47 -0
  46. package/dist/generator/domain/property-predicates.d.ts +55 -16
  47. package/dist/generator/domain/property-predicates.js +56 -17
  48. package/dist/generator/domain/property-validators.d.ts +20 -0
  49. package/dist/generator/domain/property-validators.js +66 -0
  50. package/dist/generator/domain/property-width.js +4 -2
  51. package/dist/generator/domain/readonly-payload-types.d.ts +72 -0
  52. package/dist/generator/domain/readonly-payload-types.js +96 -0
  53. package/dist/generator/domain/relation-search-eligibility.d.ts +15 -0
  54. package/dist/generator/domain/relation-search-eligibility.js +50 -0
  55. package/dist/generator/domain/relations-builder.d.ts +103 -0
  56. package/dist/generator/domain/relations-builder.js +413 -0
  57. package/dist/generator/domain/schema-loader.js +65 -2
  58. package/dist/generator/domain/widget-type.d.ts +1 -0
  59. package/dist/generator/domain/widget-type.js +1 -0
  60. package/dist/generator/engine/code-writer/code-writer.d.ts +330 -23
  61. package/dist/generator/engine/code-writer/code-writer.js +959 -141
  62. package/dist/generator/engine/code-writer/drivers/import.driver.d.ts +22 -0
  63. package/dist/generator/engine/code-writer/drivers/import.driver.js +64 -0
  64. package/dist/generator/engine/code-writer/drivers/object.driver.d.ts +30 -0
  65. package/dist/generator/engine/code-writer/drivers/object.driver.js +58 -0
  66. package/dist/generator/engine/file-manager.d.ts +29 -2
  67. package/dist/generator/engine/file-manager.js +8 -2
  68. package/dist/generator/engine/file-writer.d.ts +3 -3
  69. package/dist/generator/engine/file-writer.js +58 -58
  70. package/dist/generator/engine/ignored-file.d.ts +6 -0
  71. package/dist/generator/engine/ignored-file.js +31 -0
  72. package/dist/generator/engine/lock-file.d.ts +36 -54
  73. package/dist/generator/engine/lock-file.js +74 -168
  74. package/dist/generator/engine/template-engine.js +9 -1
  75. package/dist/generator/handlers/back.handler.d.ts +45 -0
  76. package/dist/generator/handlers/back.handler.js +252 -59
  77. package/dist/generator/handlers/front.handler.d.ts +54 -0
  78. package/dist/generator/handlers/front.handler.js +247 -29
  79. package/dist/generator/handlers/handler-utils.js +2 -1
  80. package/dist/generator/packages/front-package-helpers.d.ts +8 -1
  81. package/dist/generator/packages/front-package-helpers.js +26 -5
  82. package/dist/generator/packages/installers/front/identity.js +8 -17
  83. package/dist/generator/packages/installers/front/queue-manager.d.ts +23 -0
  84. package/dist/generator/packages/installers/front/queue-manager.js +35 -0
  85. package/dist/generator/packages/installers/identity.js +4 -0
  86. package/dist/generator/packages/installers/queue-manager.js +2 -3
  87. package/dist/generator/utils/code-gen.d.ts +9 -2
  88. package/dist/generator/utils/code-gen.js +72 -26
  89. package/dist/generator/utils/mocker.js +19 -10
  90. package/dist/generator/utils/path-allowed.js +23 -2
  91. package/dist/generator/utils/relations-file.d.ts +127 -0
  92. package/dist/generator/utils/relations-file.js +248 -0
  93. package/dist/generator/utils/string-utils.d.ts +7 -0
  94. package/dist/generator/utils/string-utils.js +13 -0
  95. package/dist/origin/domain/actions.d.ts +13 -0
  96. package/dist/origin/domain/actions.js +13 -1
  97. package/dist/origin/domain/diff.js +9 -1
  98. package/dist/origin/interactive/review-mode.d.ts +25 -0
  99. package/dist/origin/interactive/review-mode.js +22 -0
  100. package/dist/origin/interactive/review-session.d.ts +36 -0
  101. package/dist/origin/interactive/review-session.js +123 -0
  102. package/dist/sheets/domain/auth.d.ts +15 -1
  103. package/dist/sheets/domain/auth.js +25 -2
  104. package/dist/sheets/domain/retry.d.ts +61 -0
  105. package/dist/sheets/domain/retry.js +76 -0
  106. package/dist/sheets/domain/types.d.ts +144 -2
  107. package/dist/sheets/domain/types.js +249 -12
  108. package/dist/sheets/sync/diff-engine.js +62 -5
  109. package/dist/sheets/sync/sheet-to-yaml.d.ts +20 -0
  110. package/dist/sheets/sync/sheet-to-yaml.js +139 -51
  111. package/dist/sheets/sync/yaml-to-sheet.d.ts +62 -0
  112. package/dist/sheets/sync/yaml-to-sheet.js +271 -29
  113. package/dist/sheets/transformers/property-transformer.js +60 -23
  114. package/dist/sheets/validators/schema-validator.js +54 -38
  115. package/dist/templates/ai/claude/.claude/settings.json +1 -4
  116. package/dist/templates/backend/application/.claude/skills/catalyst-backend-testing/SKILL.md +15 -6
  117. package/dist/templates/backend/application/.claude/skills/catalyst-cross-bounded-context-ports/SKILL.md +39 -9
  118. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/SKILL.md +68 -48
  119. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/field-schema-and-decorators.md +38 -20
  120. package/dist/templates/backend/application/.claude/skills/catalyst-field-schema/references/query-statement.md +194 -201
  121. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/SKILL.md +62 -60
  122. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/additional-apis-workflow.md +4 -4
  123. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/cli-first-workflow.md +17 -17
  124. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/create-handler.md +3 -3
  125. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/delete-handler.md +7 -7
  126. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/read-handler.md +27 -17
  127. package/dist/templates/backend/application/.claude/skills/catalyst-handler-composer/references/update-handler.md +34 -19
  128. package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/SKILL.md +6 -4
  129. package/dist/templates/backend/application/.claude/skills/catalyst-nestjs-primitives/references/minimum-templates.md +1 -1
  130. package/dist/templates/backend/application/.claude/skills/catalyst-project-structure/SKILL.md +167 -246
  131. package/dist/templates/backend/application/.claude/skills/catalyst-provider-composition/SKILL.md +260 -0
  132. package/dist/templates/backend/application/.claude/skills/catalyst-schema-migrations/SKILL.md +215 -0
  133. package/dist/templates/backend/application/.claude/skills/catalyst-tools/SKILL.md +266 -0
  134. package/dist/templates/backend/application/CLAUDE.md +5 -1
  135. package/dist/templates/backend/application/README.md +6 -4
  136. package/dist/templates/backend/application/drizzle.config.ts +46 -0
  137. package/dist/templates/backend/application/eslint.config.mjs +54 -0
  138. package/dist/templates/backend/application/nest-cli.json +5 -0
  139. package/dist/templates/backend/application/package.json +25 -10
  140. package/dist/templates/backend/application/scripts/db/check.ts +80 -0
  141. package/dist/templates/backend/application/scripts/db/generate.ts +55 -0
  142. package/dist/templates/backend/application/scripts/db/migrate.ts +101 -0
  143. package/dist/templates/backend/application/scripts/iam/permissions-without-role.ts +177 -0
  144. package/dist/templates/backend/application/src/@aurora/core.module.ts +50 -30
  145. package/dist/templates/backend/application/src/@aurora/decorators/auth.decorator.ts +1 -4
  146. package/dist/templates/backend/application/src/@aurora/modules/authentication/authentication.module.ts +7 -2
  147. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/anonymous-account.ts +1 -0
  148. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/index.ts +1 -0
  149. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/errors/token-issuance-disabled.error.ts +20 -0
  150. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/index.ts +1 -0
  151. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.port.ts +17 -0
  152. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-cache-invalidator.token.ts +1 -0
  153. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/account-loader.port.ts +29 -1
  154. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/authentication-strategy.port.ts +10 -1
  155. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/index.ts +2 -0
  156. package/dist/templates/backend/application/src/@aurora/modules/authentication/domain/ports/jwt-signer.port.ts +10 -1
  157. package/dist/templates/backend/application/src/@aurora/modules/authentication/index.ts +1 -0
  158. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/factory/authentication-strategy.factory.ts +6 -2
  159. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/guards/authorization-permissions.guard.ts +1 -2
  160. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/aurora-hub/aurora-hub-consumer.adapter.ts +17 -5
  161. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.spec.ts +56 -0
  162. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/authentication-cache-invalidator.adapter.ts +28 -0
  163. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/cache-key.ts +9 -0
  164. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/index.ts +11 -0
  165. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/anonymous-account-loader.adapter.spec.ts +1 -1
  166. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.spec.ts +219 -22
  167. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/jwt-signer.adapter.ts +60 -10
  168. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.spec.ts +156 -0
  169. package/dist/templates/backend/application/src/@aurora/modules/authentication/infrastructure/strategies/local-provider/local-provider.adapter.ts +28 -3
  170. package/dist/templates/backend/application/src/@aurora/modules/criteria/criteria-config.module.ts +15 -8
  171. package/dist/templates/backend/application/src/@aurora/modules/graphql/core.graphql +197 -252
  172. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.spec.ts +175 -0
  173. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/event-dispatcher.ts +37 -0
  174. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler-registry.module.ts +24 -0
  175. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/handler.decorator.ts +21 -0
  176. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/index.ts +4 -0
  177. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.spec.ts +171 -0
  178. package/dist/templates/backend/application/src/@aurora/modules/handler-registry/keyed-handler-registry.ts +46 -0
  179. package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.spec.ts +65 -0
  180. package/dist/templates/backend/application/src/@aurora/modules/health/app-version.provider.ts +112 -0
  181. package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.spec.ts +50 -0
  182. package/dist/templates/backend/application/src/@aurora/modules/health/health.controller.ts +33 -0
  183. package/dist/templates/backend/application/src/@aurora/modules/health/health.module.ts +20 -0
  184. package/dist/templates/backend/application/src/@aurora/modules/health/index.ts +3 -0
  185. package/dist/templates/backend/application/src/@aurora/modules/index.ts +4 -0
  186. package/dist/templates/backend/application/src/@aurora/modules/mailer/index.ts +1 -0
  187. package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-client.module.ts +2 -2
  188. package/dist/templates/backend/application/src/@aurora/modules/mailer/mailer-smtp-transport.service.ts +4 -2
  189. package/dist/templates/backend/application/src/@aurora/modules/report-engine/aurora-report.token.ts +11 -0
  190. package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.spec.ts +154 -0
  191. package/dist/templates/backend/application/src/@aurora/modules/report-engine/execute-report.service.ts +112 -0
  192. package/dist/templates/backend/application/src/@aurora/modules/report-engine/index.ts +82 -0
  193. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.spec.ts +297 -0
  194. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cardinality.guard.ts +180 -0
  195. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.types.ts +409 -0
  196. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.spec.ts +289 -0
  197. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-cube.validator.ts +98 -0
  198. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.preflight.spec.ts +241 -0
  199. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.spec.ts +95 -0
  200. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.provider.ts +74 -0
  201. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-db-pool.token.ts +17 -0
  202. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.spec.ts +120 -0
  203. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-engine.module.ts +106 -0
  204. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-preflight.service.ts +152 -0
  205. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.spec.ts +448 -0
  206. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-query.builder.ts +319 -0
  207. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.spec.ts +179 -0
  208. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-registry.ts +47 -0
  209. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.spec.ts +104 -0
  210. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-selection.validator.ts +64 -0
  211. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.spec.ts +232 -0
  212. package/dist/templates/backend/application/src/@aurora/modules/report-engine/report-tenant.scoper.ts +132 -0
  213. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.spec.ts +156 -0
  214. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/client-mode.ts +93 -0
  215. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.spec.ts +288 -0
  216. package/dist/templates/backend/application/src/@aurora/modules/report-engine/result-modes/server-mode.ts +254 -0
  217. package/dist/templates/backend/application/src/@aurora/services/index.ts +0 -1
  218. package/dist/templates/backend/application/src/@aurora/shared.module.ts +11 -9
  219. package/dist/templates/backend/application/src/@bridges/bridges.module.ts +39 -4
  220. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/index.ts +1 -0
  221. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/index.ts +2 -0
  222. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.port.ts +29 -0
  223. package/dist/templates/backend/application/src/@bridges/production-planning/operator-account/ports/production-planning-operator-account-reader.token.ts +3 -0
  224. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/index.ts +1 -0
  225. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.spec.ts +89 -0
  226. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/adapters/storage-account-file-manager.adapter.ts +36 -0
  227. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/index.ts +1 -0
  228. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/index.ts +2 -0
  229. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.port.ts +47 -0
  230. package/dist/templates/backend/application/src/@bridges/storage-account/file-manager/ports/storage-account-file-manager.token.ts +1 -0
  231. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/index.ts +1 -0
  232. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.spec.ts +68 -0
  233. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/adapters/storage-account-signed-url.adapter.ts +37 -0
  234. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/index.ts +1 -0
  235. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/index.ts +2 -0
  236. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.port.ts +21 -0
  237. package/dist/templates/backend/application/src/@bridges/storage-account/signed-url/ports/storage-account-signed-url.token.ts +1 -0
  238. package/dist/templates/backend/application/src/@config/bullmq/index.ts +1 -0
  239. package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.spec.ts +251 -0
  240. package/dist/templates/backend/application/src/@config/drizzle/aurora-drizzle-schema.ts +353 -0
  241. package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.spec.ts +94 -0
  242. package/dist/templates/backend/application/src/@config/drizzle/aurora-field-schemas.ts +182 -0
  243. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations-journal.config.ts +31 -0
  244. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.spec.ts +152 -0
  245. package/dist/templates/backend/application/src/@config/drizzle/drizzle-migrations.module.ts +84 -0
  246. package/dist/templates/backend/application/src/@config/drizzle/index.ts +3 -0
  247. package/dist/templates/backend/application/src/@config/index.ts +4 -0
  248. package/dist/templates/backend/application/src/@config/lang/index.ts +1 -0
  249. package/dist/templates/backend/application/src/@config/lang/lang.providers.ts +26 -0
  250. package/dist/templates/backend/application/src/@config/mailer/mailer-transport.module.ts +4 -0
  251. package/dist/templates/backend/application/src/@config/storage-account/index.ts +1 -0
  252. package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.spec.ts +48 -0
  253. package/dist/templates/backend/application/src/@config/storage-account/storage-account.providers.ts +34 -0
  254. package/dist/templates/backend/application/src/app.module.ts +35 -3
  255. package/dist/templates/backend/application/src/database/migrations/0001_create_example_demo_table.sql +9 -0
  256. package/dist/templates/backend/application/src/database/migrations/0002_backfill_custom_field_group_entity_types.sql +19 -0
  257. package/dist/templates/backend/application/src/database/migrations/0003_create_production_order_header_code_sequence.sql +22 -0
  258. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/migration.sql +503 -0
  259. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705093120_baseline/snapshot.json +6287 -0
  260. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/migration.sql +482 -0
  261. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705095048_gap-finder/snapshot.json +12646 -0
  262. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/migration.sql +38 -0
  263. package/dist/templates/backend/application/src/database/migrations/drizzle/20260705144001_gap-finder-fixes/snapshot.json +12853 -0
  264. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/migration.sql +17 -0
  265. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706090131_gap-finder-fx-normalization/snapshot.json +13090 -0
  266. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/migration.sql +1 -0
  267. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706102144_gap-finder-reported-currency/snapshot.json +13103 -0
  268. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/migration.sql +4 -0
  269. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706104434_gap-finder-market-share-engine-version/snapshot.json +13123 -0
  270. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/migration.sql +17 -0
  271. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706121044_gap-finder-historical-price/snapshot.json +13357 -0
  272. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/migration.sql +7 -0
  273. package/dist/templates/backend/application/src/database/migrations/drizzle/20260706143916_gap-finder-backtest-run-state-block/snapshot.json +13443 -0
  274. package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/migration.sql +266 -0
  275. package/dist/templates/backend/application/src/database/migrations/drizzle/20260707080202_business-partner-portal/snapshot.json +17183 -0
  276. package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/migration.sql +18 -0
  277. package/dist/templates/backend/application/src/database/migrations/drizzle/20260710072059_bpp-supplier-document-invoice-unique/snapshot.json +17183 -0
  278. package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/migration.sql +177 -0
  279. package/dist/templates/backend/application/src/database/migrations/drizzle/20260712072603_busy_mystique/snapshot.json +19569 -0
  280. package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/migration.sql +85 -0
  281. package/dist/templates/backend/application/src/database/migrations/drizzle/20260714215357_custom-fields/snapshot.json +20741 -0
  282. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/migration.sql +1 -0
  283. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715072820_gap-finder-source-registry-latency/snapshot.json +20754 -0
  284. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/migration.sql +1 -0
  285. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715110357_gap-finder-peer-group-curation-reason/snapshot.json +20767 -0
  286. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/migration.sql +22 -0
  287. package/dist/templates/backend/application/src/database/migrations/drizzle/20260715151843_add-common-lang/snapshot.json +21066 -0
  288. package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/migration.sql +8 -0
  289. package/dist/templates/backend/application/src/database/migrations/drizzle/20260716165704_add_pivot_table_equipment_process/snapshot.json +21089 -0
  290. package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/migration.sql +42 -0
  291. package/dist/templates/backend/application/src/database/migrations/drizzle/20260717132829_common-country/snapshot.json +21661 -0
  292. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/migration.sql +5 -0
  293. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719084905_custom-field-group-label-i18n-embedded/snapshot.json +21661 -0
  294. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/migration.sql +2 -0
  295. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719175835_add-custom-field-group-entity-types/snapshot.json +21695 -0
  296. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/migration.sql +13 -0
  297. package/dist/templates/backend/application/src/database/migrations/drizzle/20260719235605_add-custom-field-entity-registry/snapshot.json +21866 -0
  298. package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/migration.sql +1 -0
  299. package/dist/templates/backend/application/src/database/migrations/drizzle/20260720094932_drop-custom-field-group-entity-pivot/snapshot.json +21701 -0
  300. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/migration.sql +12 -0
  301. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722150640_close-labeli18n-rename-and-tag-index-drift/snapshot.json +21706 -0
  302. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/migration.sql +470 -0
  303. package/dist/templates/backend/application/src/database/migrations/drizzle/20260722165358_normalize-legacy-index-names/snapshot.json +21767 -0
  304. package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/migration.sql +1 -0
  305. package/dist/templates/backend/application/src/database/migrations/drizzle/20260728173835_drop-iam-tag-custom-field-value/snapshot.json +21391 -0
  306. package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/migration.sql +3 -0
  307. package/dist/templates/backend/application/src/database/migrations/drizzle/20260804193217_align-custom-field-option-i18n/snapshot.json +21394 -0
  308. package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/migration.sql +46 -0
  309. package/dist/templates/backend/application/src/database/migrations/drizzle/20260818175624_drop-gap-finder-tables/snapshot.json +14170 -0
  310. package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/migration.sql +1 -0
  311. package/dist/templates/backend/application/src/database/migrations/drizzle/20260822160309_rename-position-total-processed-weight/snapshot.json +14172 -0
  312. package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/migration.sql +32 -0
  313. package/dist/templates/backend/application/src/database/migrations/drizzle/20260830220002_add-impersonation-credential/snapshot.json +14204 -0
  314. package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/migration.sql +2 -0
  315. package/dist/templates/backend/application/src/database/migrations/drizzle/20260902105452_mask-oauth-token-columns/snapshot.json +14204 -0
  316. package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/migration.sql +145 -0
  317. package/dist/templates/backend/application/src/database/migrations/drizzle/20260903214717_add-biller-master-data-tables/snapshot.json +16167 -0
  318. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/migration.sql +42 -0
  319. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904195613_simplify-biller-tariff-model/snapshot.json +15944 -0
  320. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/migration.sql +144 -0
  321. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235448_add-biller-billing-run-pipeline/snapshot.json +17910 -0
  322. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/migration.sql +1 -0
  323. package/dist/templates/backend/application/src/database/migrations/drizzle/20260904235725_add-biller-invoice-number-sequence/snapshot.json +17921 -0
  324. package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/migration.sql +2 -0
  325. package/dist/templates/backend/application/src/database/migrations/drizzle/20260905090449_make-remittance-run-index-non-unique/snapshot.json +17921 -0
  326. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/migration.sql +37 -0
  327. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907223122_normalize-tools-native-enums/snapshot.json +17921 -0
  328. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/migration.sql +19 -0
  329. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907224811_normalize-lacrem-native-enums/snapshot.json +17921 -0
  330. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/migration.sql +58 -0
  331. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907225915_normalize-sap-integration-native-enums/snapshot.json +17921 -0
  332. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/migration.sql +19 -0
  333. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907231830_normalize-iam-native-enums/snapshot.json +17921 -0
  334. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/migration.sql +37 -0
  335. package/dist/templates/backend/application/src/database/migrations/drizzle/20260907232903_normalize-o-auth-native-enums/snapshot.json +17921 -0
  336. package/dist/templates/backend/application/src/database/migrations/drizzle/README.md +199 -0
  337. package/dist/templates/backend/application/src/database/procedures/calculate_order_total/1.sql +18 -0
  338. package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_header_code/1.sql +38 -0
  339. package/dist/templates/backend/application/src/database/procedures/production_planning_set_production_order_position_code/1.sql +33 -0
  340. package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_header_code/1.sql +8 -0
  341. package/dist/templates/backend/application/src/database/procedures/production_planning_trg_set_production_order_position_code/1.sql +8 -0
  342. package/dist/templates/backend/application/src/main.ts +13 -6
  343. package/dist/templates/backend/application/test/app.e2e-spec.ts +18 -0
  344. package/dist/templates/backend/application/test/jest-e2e.json +3 -0
  345. package/dist/templates/backend/application/test/jest-global-setup.ts +15 -0
  346. package/dist/templates/backend/application/test/mocks/uuid.mock.ts +4 -1
  347. package/dist/templates/backend/application/tsconfig.json +7 -17
  348. package/dist/templates/backend/env/.env +1 -1
  349. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/authorization-code.module.ts +2 -2
  350. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.spec.ts +6 -8
  351. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/auth.controller.ts +1 -2
  352. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/controllers/index.ts +1 -0
  353. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/index.ts +2 -0
  354. package/dist/templates/backend/packages/authorization-code/src/@api/authorization-code/pkce/pkce-helpers.spec.ts +1 -3
  355. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-create-app.controller.ts +31 -0
  356. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-delete-app-by-id.controller.ts +32 -0
  357. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app-by-id.controller.ts +31 -0
  358. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-find-app.controller.ts +33 -0
  359. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-get-apps.controller.ts +41 -0
  360. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-my-preferences-app.controller.ts +31 -0
  361. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-paginate-apps.controller.ts +32 -0
  362. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-save-my-launchpad-layout-app.controller.ts +41 -0
  363. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-toggle-favorite-app.controller.ts +34 -0
  364. package/dist/templates/backend/packages/hub/src/@api/hub/app/controllers/hub-update-app-by-id.controller.ts +32 -0
  365. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-app.dto.ts +114 -0
  366. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-create-app.dto.ts +85 -0
  367. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-app-by-id.dto.ts +78 -0
  368. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/hub-update-apps.dto.ts +78 -0
  369. package/dist/templates/backend/packages/hub/src/@api/hub/app/dto/index.ts +8 -0
  370. package/dist/templates/backend/packages/hub/src/@api/hub/app/graphql/hub-app.graphql +256 -0
  371. package/dist/templates/backend/packages/hub/src/@api/hub/app/index.ts +87 -0
  372. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-create-app.resolver.ts +27 -0
  373. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-delete-app-by-id.resolver.ts +28 -0
  374. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app-by-id.resolver.ts +26 -0
  375. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-find-app.resolver.ts +26 -0
  376. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-get-apps.resolver.ts +33 -0
  377. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-my-preferences-app.resolver.ts +27 -0
  378. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-paginate-apps.resolver.ts +26 -0
  379. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-save-my-launchpad-layout-app.resolver.ts +34 -0
  380. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-toggle-favorite-app.resolver.ts +30 -0
  381. package/dist/templates/backend/packages/hub/src/@api/hub/app/resolvers/hub-update-app-by-id.resolver.ts +28 -0
  382. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-app-account.controller.ts +29 -0
  383. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-create-apps-accounts.controller.ts +30 -0
  384. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-app-account-by-id.controller.ts +34 -0
  385. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-delete-apps-accounts.controller.ts +35 -0
  386. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account-by-id.controller.ts +35 -0
  387. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-find-app-account.controller.ts +36 -0
  388. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-get-apps-accounts.controller.ts +36 -0
  389. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-paginate-apps-accounts.controller.ts +32 -0
  390. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/controllers/hub-update-app-account-by-id.controller.ts +33 -0
  391. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-app-account.dto.ts +58 -0
  392. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-create-app-account.dto.ts +44 -0
  393. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-app-account-by-id.dto.ts +44 -0
  394. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/hub-update-apps-accounts.dto.ts +44 -0
  395. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/dto/index.ts +8 -0
  396. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/graphql/hub-app-account.graphql +75 -0
  397. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/index.ts +81 -0
  398. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-app-account.resolver.ts +25 -0
  399. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-create-apps-accounts.resolver.ts +25 -0
  400. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-app-account-by-id.resolver.ts +27 -0
  401. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-delete-apps-accounts.resolver.ts +26 -0
  402. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account-by-id.resolver.ts +27 -0
  403. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-find-app-account.resolver.ts +26 -0
  404. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-get-apps-accounts.resolver.ts +26 -0
  405. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-paginate-apps-accounts.resolver.ts +26 -0
  406. package/dist/templates/backend/packages/hub/src/@api/hub/app-account/resolvers/hub-update-app-account-by-id.resolver.ts +26 -0
  407. package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.spec.ts +222 -0
  408. package/dist/templates/backend/packages/hub/src/@api/hub/hub-per-app-permission.seeder.ts +131 -0
  409. package/dist/templates/backend/packages/hub/src/@api/hub/hub.module.ts +34 -0
  410. package/dist/templates/backend/packages/hub/src/@api/hub/hub.seeder.ts +33 -0
  411. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.spec.ts +504 -0
  412. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.handler.ts +234 -0
  413. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/create/hub-create-app.service.ts +19 -0
  414. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.spec.ts +390 -0
  415. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.handler.ts +159 -0
  416. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/delete/hub-delete-app-by-id.service.ts +24 -0
  417. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.spec.ts +99 -0
  418. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.handler.ts +32 -0
  419. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app-by-id.service.ts +20 -0
  420. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.spec.ts +110 -0
  421. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.handler.ts +39 -0
  422. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/find/hub-find-app.service.ts +25 -0
  423. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.spec.ts +275 -0
  424. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.handler.ts +80 -0
  425. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/get/hub-get-apps.service.ts +25 -0
  426. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.spec.ts +146 -0
  427. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/my-preferences/hub-my-preferences-app.handler.ts +38 -0
  428. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.spec.ts +116 -0
  429. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.handler.ts +34 -0
  430. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/paginate/hub-paginate-apps.service.ts +25 -0
  431. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/save-my-launchpad-layout/hub-save-my-launchpad-layout-app.handler.spec.ts +355 -0
  432. 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
  433. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.spec.ts +193 -0
  434. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/toggle-favorite/hub-toggle-favorite-app.handler.ts +60 -0
  435. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.spec.ts +255 -0
  436. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.handler.ts +78 -0
  437. package/dist/templates/backend/packages/hub/src/@app/hub/app/application/update/hub-update-app-by-id.service.ts +25 -0
  438. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app-permission.ts +18 -0
  439. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/hub-app.field-schema.ts +101 -0
  440. package/dist/templates/backend/packages/hub/src/@app/hub/app/domain/index.ts +2 -0
  441. package/dist/templates/backend/packages/hub/src/@app/hub/app/index.ts +79 -0
  442. package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.repository.ts +43 -0
  443. package/dist/templates/backend/packages/hub/src/@app/hub/app/infrastructure/drizzle/hub-drizzle-app.schema.ts +40 -0
  444. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads-vs-relation-order.spec.ts +226 -0
  445. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.spec.ts +73 -0
  446. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-sanitize-eager-loads.function.ts +27 -0
  447. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.spec.ts +41 -0
  448. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/hub-validate-redirect-uri.function.ts +49 -0
  449. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/functions/index.ts +2 -0
  450. package/dist/templates/backend/packages/hub/src/@app/hub/app/shared/index.ts +1 -0
  451. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.handler.ts +27 -0
  452. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-app-account.service.ts +25 -0
  453. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.handler.ts +26 -0
  454. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/create/hub-create-apps-accounts.service.ts +19 -0
  455. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.handler.ts +40 -0
  456. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-app-account-by-id.service.ts +37 -0
  457. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.handler.ts +33 -0
  458. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/delete/hub-delete-apps-accounts.service.ts +33 -0
  459. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.handler.ts +32 -0
  460. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account-by-id.service.ts +29 -0
  461. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.handler.ts +29 -0
  462. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/find/hub-find-app-account.service.ts +25 -0
  463. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.handler.ts +23 -0
  464. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/get/hub-get-apps-accounts.service.ts +25 -0
  465. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.handler.ts +23 -0
  466. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/paginate/hub-paginate-apps-accounts.service.ts +25 -0
  467. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.handler.ts +64 -0
  468. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/application/update/hub-update-app-account-by-id.service.ts +33 -0
  469. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/hub-app-account.field-schema.ts +53 -0
  470. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/domain/index.ts +1 -0
  471. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/index.ts +82 -0
  472. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.repository.ts +40 -0
  473. package/dist/templates/backend/packages/hub/src/@app/hub/app-account/infrastructure/drizzle/hub-drizzle-app-account.schema.ts +17 -0
  474. package/dist/templates/backend/packages/hub/src/@app/hub/hub.relations.ts +23 -0
  475. package/dist/templates/backend/packages/hub/src/@app/hub/hub.seed.ts +117 -0
  476. package/dist/templates/backend/packages/hub/src/@app/hub/index.ts +21 -0
  477. package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-bounded-context-writer.bridge.ts +8 -0
  478. package/dist/templates/backend/packages/hub/src/@bridges/providers/iam-permission-writer.bridge.ts +8 -0
  479. package/dist/templates/backend/packages/hub/src/@bridges/providers/o-auth-application-provisioner.bridge.ts +8 -0
  480. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-account-composite-key.e2e-spec.ts +297 -0
  481. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-deprovisioning.e2e-spec.ts +488 -0
  482. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-app-provisioning.e2e-spec.ts +366 -0
  483. package/dist/templates/backend/packages/hub/test/acceptance/hub/hub-per-app-access.e2e-spec.ts +672 -0
  484. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-check-password-me-account.controller.ts +1 -2
  485. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-count-account.controller.ts +32 -0
  486. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-create-account.controller.ts +2 -2
  487. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-account-by-id.controller.ts +1 -2
  488. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-delete-accounts.controller.ts +3 -4
  489. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account-by-id.controller.ts +1 -2
  490. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-find-account.controller.ts +3 -4
  491. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-get-accounts.controller.ts +3 -4
  492. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-me-account.controller.ts +2 -2
  493. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-accounts.controller.ts +3 -4
  494. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-paginate-with-tenant-constraint-accounts.controller.ts +1 -2
  495. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-account-by-id.controller.ts +9 -4
  496. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-accounts.controller.ts +1 -2
  497. package/dist/templates/backend/packages/iam/src/@api/iam/account/controllers/iam-update-me-account.controller.ts +1 -2
  498. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-account.dto.ts +1 -1
  499. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-create-account.dto.ts +1 -1
  500. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-account-by-id.dto.ts +1 -1
  501. package/dist/templates/backend/packages/iam/src/@api/iam/account/dto/iam-update-accounts.dto.ts +1 -1
  502. package/dist/templates/backend/packages/iam/src/@api/iam/account/graphql/iam-account.graphql +41 -39
  503. package/dist/templates/backend/packages/iam/src/@api/iam/account/index.ts +6 -0
  504. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-check-password-me-account.resolver.ts +1 -2
  505. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-count-account.resolver.ts +25 -0
  506. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-create-account.resolver.ts +2 -2
  507. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-account-by-id.resolver.ts +1 -2
  508. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-delete-accounts.resolver.ts +1 -2
  509. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account-by-id.resolver.ts +1 -2
  510. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-find-account.resolver.ts +1 -2
  511. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-get-accounts.resolver.ts +1 -2
  512. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-me-account.resolver.ts +2 -2
  513. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-accounts.resolver.ts +1 -2
  514. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-paginate-with-tenant-constraint-accounts.resolver.ts +1 -2
  515. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-account-by-id.resolver.ts +9 -4
  516. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-accounts.resolver.ts +1 -2
  517. package/dist/templates/backend/packages/iam/src/@api/iam/account/resolvers/iam-update-me-account.resolver.ts +1 -2
  518. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-context-by-id.controller.ts +1 -2
  519. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-delete-bounded-contexts.controller.ts +3 -4
  520. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context-by-id.controller.ts +1 -2
  521. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-find-bounded-context.controller.ts +3 -4
  522. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-get-bounded-contexts.controller.ts +3 -4
  523. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-paginate-bounded-contexts.controller.ts +3 -4
  524. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-context-by-id.controller.ts +1 -2
  525. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/controllers/iam-update-bounded-contexts.controller.ts +1 -2
  526. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/graphql/iam-bounded-context.graphql +24 -12
  527. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-context-by-id.resolver.ts +1 -2
  528. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-delete-bounded-contexts.resolver.ts +1 -2
  529. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context-by-id.resolver.ts +1 -2
  530. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-find-bounded-context.resolver.ts +1 -2
  531. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-get-bounded-contexts.resolver.ts +1 -2
  532. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-paginate-bounded-contexts.resolver.ts +1 -2
  533. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-context-by-id.resolver.ts +1 -2
  534. package/dist/templates/backend/packages/iam/src/@api/iam/bounded-context/resolvers/iam-update-bounded-contexts.resolver.ts +1 -2
  535. package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.spec.ts +24 -0
  536. package/dist/templates/backend/packages/iam/src/@api/iam/iam-bootstrap.seeder.ts +22 -13
  537. package/dist/templates/backend/packages/iam/src/@api/iam/iam.module.ts +27 -7
  538. package/dist/templates/backend/packages/iam/src/@api/iam/iam.seeder.ts +4 -4
  539. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permission-by-id.controller.ts +1 -2
  540. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-delete-permissions.controller.ts +3 -4
  541. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission-by-id.controller.ts +1 -2
  542. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-find-permission.controller.ts +3 -4
  543. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-get-permissions.controller.ts +3 -4
  544. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-paginate-permissions.controller.ts +3 -4
  545. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permission-by-id.controller.ts +1 -2
  546. package/dist/templates/backend/packages/iam/src/@api/iam/permission/controllers/iam-update-permissions.controller.ts +1 -2
  547. package/dist/templates/backend/packages/iam/src/@api/iam/permission/graphql/iam-permission.graphql +27 -15
  548. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permission-by-id.resolver.ts +1 -2
  549. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-delete-permissions.resolver.ts +1 -2
  550. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission-by-id.resolver.ts +1 -2
  551. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-find-permission.resolver.ts +1 -2
  552. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-get-permissions.resolver.ts +1 -2
  553. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-paginate-permissions.resolver.ts +1 -2
  554. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permission-by-id.resolver.ts +1 -2
  555. package/dist/templates/backend/packages/iam/src/@api/iam/permission/resolvers/iam-update-permissions.resolver.ts +1 -2
  556. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permission-role-by-id.controller.ts +1 -2
  557. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-delete-permissions-roles.controller.ts +3 -4
  558. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role-by-id.controller.ts +1 -2
  559. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-find-permission-role.controller.ts +3 -4
  560. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-get-permissions-roles.controller.ts +3 -4
  561. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-paginate-permissions-roles.controller.ts +3 -4
  562. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permission-role-by-id.controller.ts +1 -2
  563. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/controllers/iam-update-permissions-roles.controller.ts +1 -2
  564. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/graphql/iam-permission-role.graphql +21 -9
  565. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permission-role-by-id.resolver.ts +1 -2
  566. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-delete-permissions-roles.resolver.ts +1 -2
  567. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role-by-id.resolver.ts +1 -2
  568. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-find-permission-role.resolver.ts +1 -2
  569. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-get-permissions-roles.resolver.ts +1 -2
  570. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-paginate-permissions-roles.resolver.ts +1 -2
  571. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permission-role-by-id.resolver.ts +1 -2
  572. package/dist/templates/backend/packages/iam/src/@api/iam/permission-role/resolvers/iam-update-permissions-roles.resolver.ts +1 -2
  573. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-role-by-id.controller.ts +1 -2
  574. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-delete-roles.controller.ts +3 -4
  575. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role-by-id.controller.ts +1 -2
  576. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-find-role.controller.ts +3 -4
  577. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-get-roles.controller.ts +3 -4
  578. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-inherit-permissions-role-role.controller.ts +1 -2
  579. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-paginate-roles.controller.ts +3 -4
  580. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-role-by-id.controller.ts +1 -2
  581. package/dist/templates/backend/packages/iam/src/@api/iam/role/controllers/iam-update-roles.controller.ts +1 -2
  582. package/dist/templates/backend/packages/iam/src/@api/iam/role/graphql/iam-role.graphql +28 -19
  583. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-role-by-id.resolver.ts +1 -2
  584. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-delete-roles.resolver.ts +1 -2
  585. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role-by-id.resolver.ts +1 -2
  586. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-find-role.resolver.ts +1 -2
  587. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-get-roles.resolver.ts +1 -2
  588. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-inherit-permissions-role-role.resolver.ts +1 -2
  589. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-paginate-roles.resolver.ts +1 -2
  590. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-role-by-id.resolver.ts +1 -2
  591. package/dist/templates/backend/packages/iam/src/@api/iam/role/resolvers/iam-update-roles.resolver.ts +1 -2
  592. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-role-account-by-id.controller.ts +1 -2
  593. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-delete-roles-accounts.controller.ts +3 -4
  594. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account-by-id.controller.ts +1 -2
  595. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-find-role-account.controller.ts +3 -4
  596. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-get-roles-accounts.controller.ts +3 -4
  597. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-paginate-roles-accounts.controller.ts +3 -4
  598. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-role-account-by-id.controller.ts +1 -2
  599. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/controllers/iam-update-roles-accounts.controller.ts +1 -2
  600. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/graphql/iam-role-account.graphql +29 -9
  601. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-role-account-by-id.resolver.ts +1 -2
  602. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-delete-roles-accounts.resolver.ts +1 -2
  603. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account-by-id.resolver.ts +1 -2
  604. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-find-role-account.resolver.ts +1 -2
  605. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-get-roles-accounts.resolver.ts +1 -2
  606. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-paginate-roles-accounts.resolver.ts +1 -2
  607. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-role-account-by-id.resolver.ts +1 -2
  608. package/dist/templates/backend/packages/iam/src/@api/iam/role-account/resolvers/iam-update-roles-accounts.resolver.ts +1 -2
  609. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-delete-tag-by-id.controller.ts +1 -2
  610. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag-by-id.controller.ts +1 -2
  611. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-find-tag.controller.ts +3 -4
  612. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-get-tags.controller.ts +3 -4
  613. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-paginate-tags.controller.ts +3 -4
  614. package/dist/templates/backend/packages/iam/src/@api/iam/tag/controllers/iam-update-tag-by-id.controller.ts +1 -2
  615. package/dist/templates/backend/packages/iam/src/@api/iam/tag/graphql/iam-tag.graphql +9 -9
  616. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-delete-tag-by-id.resolver.ts +1 -2
  617. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag-by-id.resolver.ts +1 -2
  618. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-find-tag.resolver.ts +1 -2
  619. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-get-tags.resolver.ts +1 -2
  620. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-paginate-tags.resolver.ts +1 -2
  621. package/dist/templates/backend/packages/iam/src/@api/iam/tag/resolvers/iam-update-tag-by-id.resolver.ts +1 -2
  622. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenant-by-id.controller.ts +1 -2
  623. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-delete-tenants.controller.ts +3 -4
  624. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant-by-id.controller.ts +1 -2
  625. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-find-tenant.controller.ts +3 -4
  626. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-tenants.controller.ts +3 -4
  627. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-get-with-tenant-constraint-tenants.controller.ts +1 -2
  628. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-tenants.controller.ts +3 -4
  629. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-paginate-with-tenant-constraint-tenants.controller.ts +1 -2
  630. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenant-by-id.controller.ts +1 -2
  631. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/controllers/iam-update-tenants.controller.ts +1 -2
  632. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/graphql/iam-tenant.graphql +33 -18
  633. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenant-by-id.resolver.ts +1 -2
  634. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-delete-tenants.resolver.ts +1 -2
  635. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant-by-id.resolver.ts +1 -2
  636. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-find-tenant.resolver.ts +1 -2
  637. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-tenants.resolver.ts +1 -2
  638. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-get-with-tenant-constraint-tenants.resolver.ts +1 -2
  639. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-tenants.resolver.ts +1 -2
  640. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-paginate-with-tenant-constraint-tenants.resolver.ts +1 -2
  641. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenant-by-id.resolver.ts +1 -2
  642. package/dist/templates/backend/packages/iam/src/@api/iam/tenant/resolvers/iam-update-tenants.resolver.ts +1 -2
  643. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenant-account-by-id.controller.ts +1 -2
  644. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-delete-tenants-accounts.controller.ts +3 -4
  645. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account-by-id.controller.ts +1 -2
  646. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-find-tenant-account.controller.ts +3 -4
  647. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-get-tenants-accounts.controller.ts +3 -4
  648. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-paginate-tenants-accounts.controller.ts +3 -4
  649. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenant-account-by-id.controller.ts +1 -2
  650. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/controllers/iam-update-tenants-accounts.controller.ts +1 -2
  651. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/graphql/iam-tenant-account.graphql +21 -9
  652. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenant-account-by-id.resolver.ts +1 -2
  653. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-delete-tenants-accounts.resolver.ts +1 -2
  654. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account-by-id.resolver.ts +1 -2
  655. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-find-tenant-account.resolver.ts +1 -2
  656. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-get-tenants-accounts.resolver.ts +1 -2
  657. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-paginate-tenants-accounts.resolver.ts +1 -2
  658. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenant-account-by-id.resolver.ts +1 -2
  659. package/dist/templates/backend/packages/iam/src/@api/iam/tenant-account/resolvers/iam-update-tenants-accounts.resolver.ts +1 -2
  660. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-count-user.controller.ts +32 -0
  661. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-user-by-id.controller.ts +1 -2
  662. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-delete-users.controller.ts +3 -4
  663. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user-by-id.controller.ts +1 -2
  664. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-find-user.controller.ts +3 -4
  665. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-forgot-password-user.controller.ts +1 -2
  666. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-get-users.controller.ts +3 -4
  667. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-paginate-users.controller.ts +3 -4
  668. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-reset-password-user.controller.ts +1 -2
  669. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-user-by-id.controller.ts +1 -2
  670. package/dist/templates/backend/packages/iam/src/@api/iam/user/controllers/iam-update-users.controller.ts +1 -2
  671. package/dist/templates/backend/packages/iam/src/@api/iam/user/graphql/iam-user.graphql +20 -18
  672. package/dist/templates/backend/packages/iam/src/@api/iam/user/index.ts +6 -0
  673. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-count-user.resolver.ts +25 -0
  674. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-user-by-id.resolver.ts +1 -2
  675. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-delete-users.resolver.ts +1 -2
  676. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user-by-id.resolver.ts +1 -2
  677. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-find-user.resolver.ts +1 -2
  678. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-forgot-password-user.resolver.ts +1 -2
  679. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-get-users.resolver.ts +1 -2
  680. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-paginate-users.resolver.ts +1 -2
  681. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-reset-password-user.resolver.ts +1 -2
  682. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-user-by-id.resolver.ts +1 -2
  683. package/dist/templates/backend/packages/iam/src/@api/iam/user/resolvers/iam-update-users.resolver.ts +1 -2
  684. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-password-me/iam-check-password-me-account.handler.ts +3 -5
  685. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.spec.ts +75 -0
  686. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-email/iam-check-unique-email-account.handler.ts +4 -1
  687. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.spec.ts +75 -0
  688. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/check-unique-username/iam-check-unique-username-account.handler.ts +4 -1
  689. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.handler.ts +1 -2
  690. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/count/iam-count-account.service.ts +3 -4
  691. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.spec.ts +41 -18
  692. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.handler.ts +23 -11
  693. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-account.service.ts +4 -3
  694. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.service.ts +4 -3
  695. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.handler.ts +1 -2
  696. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-account-by-id.service.ts +3 -4
  697. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.handler.ts +1 -2
  698. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/delete/iam-delete-accounts.service.ts +3 -4
  699. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.handler.ts +1 -2
  700. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account-by-id.service.ts +3 -4
  701. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.handler.ts +1 -2
  702. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/find/iam-find-account.service.ts +3 -4
  703. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.handler.ts +1 -2
  704. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/get/iam-get-accounts.service.ts +3 -4
  705. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/me/iam-me-account.handler.ts +1 -1
  706. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.handler.ts +1 -2
  707. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate/iam-paginate-accounts.service.ts +3 -4
  708. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-accounts.handler.ts +3 -5
  709. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.spec.ts +94 -13
  710. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.handler.ts +60 -18
  711. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-account-by-id.service.ts +9 -6
  712. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.spec.ts +216 -0
  713. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.handler.ts +87 -4
  714. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update/iam-update-accounts.service.ts +5 -5
  715. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/update-me/iam-update-me-account.handler.ts +3 -5
  716. package/dist/templates/backend/packages/iam/src/@app/iam/account/domain/iam-account.field-schema.ts +3 -3
  717. package/dist/templates/backend/packages/iam/src/@app/iam/account/index.ts +39 -37
  718. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.repository.ts +144 -0
  719. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/drizzle/iam-drizzle-account.schema.ts +45 -0
  720. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-context.service.ts +4 -3
  721. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/create/iam-create-bounded-contexts.service.ts +4 -3
  722. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.handler.ts +1 -2
  723. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-context-by-id.service.ts +3 -4
  724. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.handler.ts +1 -2
  725. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/delete/iam-delete-bounded-contexts.service.ts +3 -4
  726. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.handler.ts +1 -2
  727. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context-by-id.service.ts +3 -4
  728. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.handler.ts +1 -2
  729. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/find/iam-find-bounded-context.service.ts +3 -4
  730. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.handler.ts +1 -2
  731. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/get/iam-get-bounded-contexts.service.ts +3 -4
  732. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.handler.ts +1 -2
  733. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/paginate/iam-paginate-bounded-contexts.service.ts +3 -4
  734. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.handler.ts +7 -3
  735. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-context-by-id.service.ts +9 -6
  736. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.handler.ts +1 -2
  737. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/application/update/iam-update-bounded-contexts.service.ts +5 -5
  738. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/domain/iam-bounded-context.field-schema.ts +3 -3
  739. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/index.ts +32 -32
  740. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.repository.ts +40 -0
  741. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/drizzle/iam-drizzle-bounded-context.schema.ts +30 -0
  742. package/dist/templates/backend/packages/iam/src/@app/iam/iam.relations.ts +116 -0
  743. package/dist/templates/backend/packages/iam/src/@app/iam/iam.seed.ts +45 -45
  744. package/dist/templates/backend/packages/iam/src/@app/iam/index.ts +20 -47
  745. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permission.service.ts +4 -3
  746. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/create/iam-create-permissions.service.ts +4 -3
  747. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.handler.ts +1 -2
  748. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permission-by-id.service.ts +3 -4
  749. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.handler.ts +1 -2
  750. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/delete/iam-delete-permissions.service.ts +3 -4
  751. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.handler.ts +1 -2
  752. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission-by-id.service.ts +3 -4
  753. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.handler.ts +1 -2
  754. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/find/iam-find-permission.service.ts +3 -4
  755. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.handler.ts +1 -2
  756. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get/iam-get-permissions.service.ts +3 -4
  757. 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
  758. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/get-permissions-without-role/iam-get-permissions-without-role.handler.ts +73 -0
  759. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.handler.ts +1 -2
  760. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/paginate/iam-paginate-permissions.service.ts +3 -4
  761. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.handler.ts +7 -3
  762. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permission-by-id.service.ts +9 -6
  763. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.handler.ts +1 -2
  764. package/dist/templates/backend/packages/iam/src/@app/iam/permission/application/update/iam-update-permissions.service.ts +5 -5
  765. package/dist/templates/backend/packages/iam/src/@app/iam/permission/domain/iam-permission.field-schema.ts +3 -3
  766. package/dist/templates/backend/packages/iam/src/@app/iam/permission/index.ts +34 -32
  767. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.repository.ts +100 -0
  768. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/drizzle/iam-drizzle-permission.schema.ts +23 -0
  769. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permission-role.service.ts +6 -6
  770. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/create/iam-create-permissions-roles.service.ts +4 -3
  771. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.handler.ts +1 -2
  772. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permission-role-by-id.service.ts +3 -4
  773. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.handler.ts +1 -2
  774. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/delete/iam-delete-permissions-roles.service.ts +3 -4
  775. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.handler.ts +1 -2
  776. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role-by-id.service.ts +3 -4
  777. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.handler.ts +1 -2
  778. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/find/iam-find-permission-role.service.ts +3 -4
  779. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.handler.ts +1 -2
  780. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/get/iam-get-permissions-roles.service.ts +3 -4
  781. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.handler.ts +1 -2
  782. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/paginate/iam-paginate-permissions-roles.service.ts +3 -4
  783. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.handler.ts +7 -3
  784. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permission-role-by-id.service.ts +9 -6
  785. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.handler.ts +1 -2
  786. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/application/update/iam-update-permissions-roles.service.ts +5 -5
  787. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/index.ts +32 -32
  788. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.repository.ts +40 -0
  789. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/drizzle/iam-drizzle-permission-role.schema.ts +14 -0
  790. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-role.service.ts +4 -3
  791. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/create/iam-create-roles.service.ts +4 -3
  792. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.handler.ts +1 -2
  793. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-role-by-id.service.ts +3 -4
  794. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.handler.ts +1 -2
  795. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/delete/iam-delete-roles.service.ts +3 -4
  796. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.handler.ts +1 -2
  797. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role-by-id.service.ts +3 -4
  798. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.handler.ts +1 -2
  799. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/find/iam-find-role.service.ts +3 -4
  800. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.handler.ts +1 -2
  801. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/get/iam-get-roles.service.ts +3 -4
  802. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/inherit-permissions-role/iam-inherit-permissions-role-role.handler.ts +3 -5
  803. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.handler.ts +1 -2
  804. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/paginate/iam-paginate-roles.service.ts +3 -4
  805. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.handler.ts +7 -3
  806. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-role-by-id.service.ts +9 -6
  807. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.handler.ts +1 -2
  808. package/dist/templates/backend/packages/iam/src/@app/iam/role/application/update/iam-update-roles.service.ts +5 -5
  809. package/dist/templates/backend/packages/iam/src/@app/iam/role/domain/iam-role.field-schema.ts +3 -3
  810. package/dist/templates/backend/packages/iam/src/@app/iam/role/index.ts +33 -33
  811. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.repository.ts +149 -0
  812. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/drizzle/iam-drizzle-role.schema.ts +30 -0
  813. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-role-account.service.ts +6 -6
  814. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/create/iam-create-roles-accounts.service.ts +4 -3
  815. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.handler.ts +1 -2
  816. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-role-account-by-id.service.ts +3 -4
  817. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.handler.ts +1 -2
  818. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/delete/iam-delete-roles-accounts.service.ts +3 -4
  819. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.handler.ts +1 -2
  820. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account-by-id.service.ts +3 -4
  821. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.handler.ts +1 -2
  822. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/find/iam-find-role-account.service.ts +3 -4
  823. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.handler.ts +1 -2
  824. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/get/iam-get-roles-accounts.service.ts +3 -4
  825. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.handler.ts +1 -2
  826. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/paginate/iam-paginate-roles-accounts.service.ts +3 -4
  827. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.handler.ts +7 -3
  828. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-role-account-by-id.service.ts +9 -6
  829. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.handler.ts +1 -2
  830. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/application/update/iam-update-roles-accounts.service.ts +5 -5
  831. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/index.ts +32 -32
  832. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.repository.ts +40 -0
  833. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/drizzle/iam-drizzle-role-account.schema.ts +14 -0
  834. package/dist/templates/backend/packages/iam/src/@app/iam/shared/iam-bootstrap.constants.ts +20 -0
  835. package/dist/templates/backend/packages/iam/src/@app/iam/shared/index.ts +1 -0
  836. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/create/iam-create-tag.service.ts +4 -3
  837. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.handler.ts +1 -2
  838. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/delete/iam-delete-tag-by-id.service.ts +3 -4
  839. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.handler.ts +1 -2
  840. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag-by-id.service.ts +6 -5
  841. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.handler.ts +1 -2
  842. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/find/iam-find-tag.service.ts +6 -5
  843. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.handler.ts +1 -2
  844. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/get/iam-get-tags.service.ts +6 -5
  845. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.handler.ts +1 -2
  846. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/paginate/iam-paginate-tags.service.ts +6 -5
  847. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.handler.ts +7 -4
  848. package/dist/templates/backend/packages/iam/src/@app/iam/tag/application/update/iam-update-tag-by-id.service.ts +9 -6
  849. package/dist/templates/backend/packages/iam/src/@app/iam/tag/domain/iam-tag.field-schema.ts +3 -3
  850. package/dist/templates/backend/packages/iam/src/@app/iam/tag/index.ts +22 -22
  851. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.repository.ts +35 -0
  852. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/drizzle/iam-drizzle-tag.schema.ts +21 -0
  853. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenant.service.ts +4 -3
  854. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/create/iam-create-tenants.service.ts +4 -3
  855. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.handler.ts +1 -2
  856. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenant-by-id.service.ts +3 -4
  857. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.handler.ts +1 -2
  858. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/delete/iam-delete-tenants.service.ts +3 -4
  859. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.handler.ts +1 -2
  860. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant-by-id.service.ts +3 -4
  861. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.handler.ts +1 -2
  862. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/find/iam-find-tenant.service.ts +3 -4
  863. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.handler.ts +1 -2
  864. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get/iam-get-tenants.service.ts +3 -4
  865. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/get-with-tenant-constraint/iam-get-with-tenant-constraint-tenants.handler.ts +3 -5
  866. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.handler.ts +1 -2
  867. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate/iam-paginate-tenants.service.ts +3 -4
  868. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/paginate-with-tenant-constraint/iam-paginate-with-tenant-constraint-tenants.handler.ts +3 -5
  869. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.handler.ts +7 -3
  870. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenant-by-id.service.ts +9 -6
  871. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.handler.ts +1 -2
  872. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/application/update/iam-update-tenants.service.ts +5 -5
  873. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/domain/iam-tenant.field-schema.ts +3 -3
  874. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/index.ts +34 -34
  875. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.repository.ts +102 -0
  876. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/drizzle/iam-drizzle-tenant.schema.ts +32 -0
  877. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenant-account.service.ts +6 -6
  878. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/create/iam-create-tenants-accounts.service.ts +4 -3
  879. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.handler.ts +1 -2
  880. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenant-account-by-id.service.ts +3 -4
  881. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.handler.ts +1 -2
  882. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/delete/iam-delete-tenants-accounts.service.ts +3 -4
  883. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.handler.ts +1 -2
  884. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account-by-id.service.ts +3 -4
  885. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.handler.ts +1 -2
  886. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/find/iam-find-tenant-account.service.ts +3 -4
  887. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.handler.ts +1 -2
  888. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/get/iam-get-tenants-accounts.service.ts +3 -4
  889. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.handler.ts +1 -2
  890. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/paginate/iam-paginate-tenants-accounts.service.ts +3 -4
  891. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.handler.ts +7 -3
  892. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenant-account-by-id.service.ts +9 -6
  893. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.handler.ts +1 -2
  894. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/application/update/iam-update-tenants-accounts.service.ts +5 -5
  895. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/index.ts +32 -32
  896. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.repository.ts +40 -0
  897. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/drizzle/iam-drizzle-tenant-account.schema.ts +14 -0
  898. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.handler.ts +2 -3
  899. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/count/iam-count-user.service.ts +3 -4
  900. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-user.service.ts +4 -3
  901. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/create/iam-create-users.service.ts +4 -3
  902. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.handler.ts +3 -3
  903. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-user-by-id.service.ts +3 -4
  904. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.handler.ts +3 -3
  905. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/delete/iam-delete-users.service.ts +3 -4
  906. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.handler.ts +2 -3
  907. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-id.service.ts +3 -4
  908. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.spec.ts +20 -11
  909. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user-by-username-password.service.ts +23 -21
  910. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.handler.ts +2 -3
  911. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/find/iam-find-user.service.ts +3 -4
  912. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/forgot-password/iam-forgot-password-user.handler.ts +3 -5
  913. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.handler.ts +2 -3
  914. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/get/iam-get-users.service.ts +3 -4
  915. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.handler.ts +2 -3
  916. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/paginate/iam-paginate-users.service.ts +3 -4
  917. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/reset-password/iam-reset-password-user.handler.ts +3 -5
  918. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.handler.ts +7 -3
  919. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-user-by-id.service.ts +9 -6
  920. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.handler.ts +3 -3
  921. package/dist/templates/backend/packages/iam/src/@app/iam/user/application/update/iam-update-users.service.ts +5 -5
  922. package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.spec.ts +45 -0
  923. package/dist/templates/backend/packages/iam/src/@app/iam/user/domain/iam-user.field-schema.ts +5 -5
  924. package/dist/templates/backend/packages/iam/src/@app/iam/user/index.ts +45 -38
  925. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.repository.ts +40 -0
  926. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/drizzle/iam-drizzle-user.schema.ts +42 -0
  927. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.spec.ts +522 -0
  928. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-loader.adapter.ts +112 -18
  929. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.spec.ts +261 -0
  930. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-account-provisioner.adapter.ts +115 -0
  931. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.spec.ts +63 -0
  932. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/iam-operator-account-reader.adapter.ts +39 -0
  933. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/adapters/index.ts +3 -0
  934. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/index.ts +1 -1
  935. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.port.ts +81 -0
  936. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/iam-account-provisioner.token.ts +1 -0
  937. package/dist/templates/backend/packages/iam/src/@bridges/iam/account/ports/index.ts +2 -0
  938. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-seeder.adapter.ts +1 -1
  939. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.spec.ts +155 -0
  940. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/iam-bounded-context-writer.adapter.ts +75 -0
  941. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/adapters/index.ts +2 -0
  942. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/index.ts +1 -1
  943. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.port.ts +49 -0
  944. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/iam-bounded-context-writer.token.ts +1 -0
  945. package/dist/templates/backend/packages/iam/src/@bridges/iam/bounded-context/ports/index.ts +2 -0
  946. package/dist/templates/backend/packages/iam/src/@bridges/iam/client/index.ts +1 -0
  947. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-seeder.adapter.ts +1 -1
  948. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.spec.ts +315 -0
  949. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/iam-permission-writer.adapter.ts +147 -0
  950. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/adapters/index.ts +2 -0
  951. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/index.ts +1 -1
  952. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.port.ts +70 -0
  953. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/iam-permission-writer.token.ts +1 -0
  954. package/dist/templates/backend/packages/iam/src/@bridges/iam/permission/ports/index.ts +2 -0
  955. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.spec.ts +169 -0
  956. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/iam-tenant-writer.adapter.ts +57 -0
  957. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/adapters/index.ts +1 -0
  958. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/index.ts +1 -0
  959. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.port.ts +54 -0
  960. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/iam-tenant-writer.token.ts +1 -0
  961. package/dist/templates/backend/packages/iam/src/@bridges/iam/tenant/ports/index.ts +2 -0
  962. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/iam-credential-verifier.adapter.ts +1 -1
  963. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/adapters/index.ts +1 -0
  964. package/dist/templates/backend/packages/iam/src/@bridges/providers/account-loader.bridge.ts +2 -2
  965. package/dist/templates/backend/packages/iam/src/@bridges/providers/credential-verifier.bridge.ts +2 -2
  966. package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-bounded-context-seeder.bridge.ts +2 -2
  967. package/dist/templates/backend/packages/iam/src/@bridges/providers/iam-permission-seeder.bridge.ts +2 -2
  968. package/dist/templates/backend/packages/iam/test/acceptance/iam/core-back-exception-status.e2e-spec.ts +304 -0
  969. package/dist/templates/backend/packages/iam/test/acceptance/iam/user-sensitive-fields-masking.e2e-spec.ts +297 -0
  970. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-count-access-token.controller.ts +32 -0
  971. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-delete-access-token-by-id.controller.ts +1 -2
  972. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token-by-id.controller.ts +1 -2
  973. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-find-access-token.controller.ts +3 -4
  974. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-get-access-tokens.controller.ts +3 -4
  975. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/controllers/o-auth-paginate-access-tokens.controller.ts +3 -4
  976. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-access-token.dto.ts +1 -1
  977. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-create-access-token.dto.ts +1 -1
  978. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-token-by-id.dto.ts +1 -1
  979. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/dto/o-auth-update-access-tokens.dto.ts +1 -1
  980. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/graphql/o-auth-access-token.graphql +28 -14
  981. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/index.ts +6 -0
  982. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-count-access-token.resolver.ts +25 -0
  983. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-delete-access-token-by-id.resolver.ts +1 -2
  984. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token-by-id.resolver.ts +1 -2
  985. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-find-access-token.resolver.ts +1 -2
  986. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-get-access-tokens.resolver.ts +1 -2
  987. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/access-token/resolvers/o-auth-paginate-access-tokens.resolver.ts +1 -2
  988. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-delete-application-by-id.controller.ts +1 -2
  989. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application-by-id.controller.ts +1 -2
  990. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-find-application.controller.ts +3 -4
  991. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-get-applications.controller.ts +3 -4
  992. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-paginate-applications.controller.ts +3 -4
  993. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/controllers/o-auth-update-application-by-id.controller.ts +1 -2
  994. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-application.dto.ts +1 -1
  995. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-create-application.dto.ts +1 -1
  996. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-application-by-id.dto.ts +1 -1
  997. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/dto/o-auth-update-applications.dto.ts +1 -1
  998. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/graphql/o-auth-application.graphql +14 -14
  999. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-delete-application-by-id.resolver.ts +1 -2
  1000. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application-by-id.resolver.ts +1 -2
  1001. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-find-application.resolver.ts +1 -2
  1002. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-get-applications.resolver.ts +1 -2
  1003. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-paginate-applications.resolver.ts +1 -2
  1004. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application/resolvers/o-auth-update-application-by-id.resolver.ts +1 -2
  1005. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-application-client-by-id.controller.ts +1 -2
  1006. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-delete-applications-clients.controller.ts +3 -4
  1007. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client-by-id.controller.ts +1 -2
  1008. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-find-application-client.controller.ts +3 -4
  1009. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-get-applications-clients.controller.ts +3 -4
  1010. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-paginate-applications-clients.controller.ts +3 -4
  1011. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/controllers/o-auth-update-application-client-by-id.controller.ts +1 -2
  1012. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/graphql/o-auth-application-client.graphql +13 -10
  1013. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-application-client-by-id.resolver.ts +1 -2
  1014. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-delete-applications-clients.resolver.ts +1 -2
  1015. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client-by-id.resolver.ts +1 -2
  1016. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-find-application-client.resolver.ts +1 -2
  1017. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-get-applications-clients.resolver.ts +1 -2
  1018. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-paginate-applications-clients.resolver.ts +1 -2
  1019. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/application-client/resolvers/o-auth-update-application-client-by-id.resolver.ts +1 -2
  1020. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-code-by-id.controller.ts +1 -2
  1021. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-delete-authorization-codes.controller.ts +3 -4
  1022. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code-by-id.controller.ts +1 -2
  1023. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-find-authorization-code.controller.ts +3 -4
  1024. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-get-authorization-codes.controller.ts +3 -4
  1025. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-paginate-authorization-codes.controller.ts +3 -4
  1026. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/controllers/o-auth-update-authorization-code-by-id.controller.ts +1 -2
  1027. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/graphql/o-auth-authorization-code.graphql +26 -17
  1028. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-code-by-id.resolver.ts +1 -2
  1029. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-delete-authorization-codes.resolver.ts +1 -2
  1030. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code-by-id.resolver.ts +1 -2
  1031. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-find-authorization-code.resolver.ts +1 -2
  1032. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-get-authorization-codes.resolver.ts +1 -2
  1033. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-paginate-authorization-codes.resolver.ts +1 -2
  1034. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/authorization-code/resolvers/o-auth-update-authorization-code-by-id.resolver.ts +1 -2
  1035. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-delete-client-by-id.controller.ts +1 -2
  1036. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client-by-id.controller.ts +1 -2
  1037. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-find-client.controller.ts +3 -4
  1038. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-get-clients.controller.ts +3 -4
  1039. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-paginate-clients.controller.ts +3 -4
  1040. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/controllers/o-auth-update-client-by-id.controller.ts +1 -2
  1041. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-client.dto.ts +0 -7
  1042. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-create-client.dto.ts +0 -7
  1043. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-client-by-id.dto.ts +0 -7
  1044. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/dto/o-auth-update-clients.dto.ts +0 -7
  1045. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/graphql/o-auth-client.graphql +25 -23
  1046. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-delete-client-by-id.resolver.ts +1 -2
  1047. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client-by-id.resolver.ts +1 -2
  1048. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-find-client.resolver.ts +1 -2
  1049. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-get-clients.resolver.ts +1 -2
  1050. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-paginate-clients.resolver.ts +1 -2
  1051. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/client/resolvers/o-auth-update-client-by-id.resolver.ts +1 -2
  1052. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential-by-id.controller.ts +1 -2
  1053. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-find-credential.controller.ts +3 -4
  1054. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-get-credentials.controller.ts +3 -4
  1055. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/controllers/o-auth-paginate-credentials.controller.ts +3 -4
  1056. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/dto/o-auth-credential.dto.ts +16 -2
  1057. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/graphql/o-auth-credential.graphql +31 -6
  1058. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential-by-id.resolver.ts +1 -2
  1059. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-find-credential.resolver.ts +1 -2
  1060. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-get-credentials.resolver.ts +1 -2
  1061. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/credential/resolvers/o-auth-paginate-credentials.resolver.ts +1 -2
  1062. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.spec.ts +22 -15
  1063. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-authorize.controller.ts +2 -6
  1064. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-impersonate-token.controller.ts +72 -0
  1065. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.spec.ts +1 -1
  1066. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-create-token.controller.ts +2 -5
  1067. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.spec.ts +1 -4
  1068. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-get-jwks.controller.ts +1 -4
  1069. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.spec.ts +38 -12
  1070. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-logout.controller.ts +2 -4
  1071. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.spec.ts +1 -1
  1072. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/controllers/o-auth-session.controller.ts +1 -1
  1073. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/graphql/flows.graphql +32 -0
  1074. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/index.ts +10 -2
  1075. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-impersonate-token.resolver.ts +88 -0
  1076. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.spec.ts +3 -1
  1077. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-create-token.resolver.ts +4 -5
  1078. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.spec.ts +2 -0
  1079. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/flows/resolvers/o-auth-revoke-token.resolver.ts +3 -1
  1080. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.spec.ts +98 -29
  1081. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth-bootstrap.seeder.ts +34 -19
  1082. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.module.ts +6 -6
  1083. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/o-auth.seeder.ts +16 -5
  1084. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-delete-refresh-token-by-id.controller.ts +1 -2
  1085. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token-by-id.controller.ts +1 -2
  1086. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-find-refresh-token.controller.ts +3 -4
  1087. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-get-refresh-tokens.controller.ts +3 -4
  1088. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/controllers/o-auth-paginate-refresh-tokens.controller.ts +3 -4
  1089. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-create-refresh-token.dto.ts +1 -1
  1090. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-refresh-token.dto.ts +1 -1
  1091. 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
  1092. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/dto/o-auth-update-refresh-tokens.dto.ts +1 -1
  1093. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/graphql/o-auth-refresh-token.graphql +23 -14
  1094. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-delete-refresh-token-by-id.resolver.ts +1 -2
  1095. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token-by-id.resolver.ts +1 -2
  1096. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-find-refresh-token.resolver.ts +1 -2
  1097. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-get-refresh-tokens.resolver.ts +1 -2
  1098. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/refresh-token/resolvers/o-auth-paginate-refresh-tokens.resolver.ts +1 -2
  1099. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-delete-scope-by-id.controller.ts +1 -2
  1100. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope-by-id.controller.ts +1 -2
  1101. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-find-scope.controller.ts +3 -4
  1102. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-get-scopes.controller.ts +3 -4
  1103. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-paginate-scopes.controller.ts +3 -4
  1104. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/controllers/o-auth-update-scope-by-id.controller.ts +1 -2
  1105. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/graphql/o-auth-scope.graphql +25 -13
  1106. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-delete-scope-by-id.resolver.ts +1 -2
  1107. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope-by-id.resolver.ts +1 -2
  1108. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-find-scope.resolver.ts +1 -2
  1109. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-get-scopes.resolver.ts +1 -2
  1110. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-paginate-scopes.resolver.ts +1 -2
  1111. package/dist/templates/backend/packages/o-auth/src/@api/o-auth/scope/resolvers/o-auth-update-scope-by-id.resolver.ts +1 -2
  1112. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.handler.ts +20 -0
  1113. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/count/o-auth-count-access-token.service.ts +24 -0
  1114. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/create/o-auth-create-access-token.service.ts +4 -3
  1115. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/delete/o-auth-delete-access-token-by-id.handler.ts +3 -6
  1116. 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
  1117. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.handler.ts +2 -3
  1118. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token-by-id.service.ts +6 -5
  1119. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.handler.ts +2 -3
  1120. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/find/o-auth-find-access-token.service.ts +6 -5
  1121. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.handler.ts +2 -3
  1122. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/get/o-auth-get-access-tokens.service.ts +6 -5
  1123. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.handler.ts +2 -3
  1124. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/application/paginate/o-auth-paginate-access-tokens.service.ts +6 -5
  1125. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/domain/o-auth-access-token.field-schema.ts +6 -5
  1126. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/index.ts +30 -24
  1127. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.repository.ts +40 -0
  1128. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/drizzle/o-auth-drizzle-access-token.schema.ts +35 -0
  1129. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/create/o-auth-create-application.service.ts +4 -3
  1130. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.handler.ts +1 -2
  1131. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/delete/o-auth-delete-application-by-id.service.ts +3 -4
  1132. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.handler.ts +1 -2
  1133. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application-by-id.service.ts +3 -4
  1134. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.handler.ts +1 -2
  1135. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/find/o-auth-find-application.service.ts +3 -4
  1136. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.handler.ts +1 -2
  1137. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/get/o-auth-get-applications.service.ts +3 -4
  1138. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.handler.ts +1 -2
  1139. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/paginate/o-auth-paginate-applications.service.ts +3 -4
  1140. 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
  1141. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.handler.ts +7 -3
  1142. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/application/update/o-auth-update-application-by-id.service.ts +9 -6
  1143. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.spec.ts +28 -0
  1144. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/domain/o-auth-application.field-schema.ts +5 -6
  1145. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/index.ts +26 -26
  1146. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.repository.ts +102 -0
  1147. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/drizzle/o-auth-drizzle-application.schema.ts +29 -0
  1148. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-application-client.service.ts +6 -6
  1149. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/create/o-auth-create-applications-clients.service.ts +7 -3
  1150. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-application-client-by-id.handler.ts +1 -2
  1151. 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
  1152. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.handler.ts +1 -2
  1153. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/delete/o-auth-delete-applications-clients.service.ts +3 -4
  1154. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.handler.ts +1 -2
  1155. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client-by-id.service.ts +3 -4
  1156. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.handler.ts +1 -2
  1157. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/find/o-auth-find-application-client.service.ts +3 -4
  1158. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.handler.ts +1 -2
  1159. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/get/o-auth-get-applications-clients.service.ts +3 -4
  1160. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.handler.ts +1 -2
  1161. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/paginate/o-auth-paginate-applications-clients.service.ts +3 -4
  1162. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/application/update/o-auth-update-application-client-by-id.handler.ts +7 -3
  1163. 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
  1164. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/index.ts +30 -30
  1165. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.repository.ts +40 -0
  1166. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/drizzle/o-auth-drizzle-application-client.schema.ts +14 -0
  1167. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/create/o-auth-create-authorization-code.service.ts +4 -3
  1168. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-code-by-id.handler.ts +1 -2
  1169. 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
  1170. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.handler.ts +1 -2
  1171. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/delete/o-auth-delete-authorization-codes.service.ts +3 -4
  1172. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.handler.ts +1 -2
  1173. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code-by-id.service.ts +3 -4
  1174. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.handler.ts +1 -2
  1175. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/find/o-auth-find-authorization-code.service.ts +3 -4
  1176. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.handler.ts +1 -2
  1177. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/get/o-auth-get-authorization-codes.service.ts +3 -4
  1178. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.handler.ts +1 -2
  1179. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/paginate/o-auth-paginate-authorization-codes.service.ts +3 -4
  1180. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/application/update/o-auth-update-authorization-code-by-id.handler.ts +7 -3
  1181. 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
  1182. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/domain/o-auth-authorization-code.field-schema.ts +4 -4
  1183. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/index.ts +28 -28
  1184. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.repository.ts +66 -0
  1185. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/drizzle/o-auth-drizzle-authorization-code.schema.ts +42 -0
  1186. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/create/o-auth-create-client.service.ts +4 -3
  1187. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.handler.ts +1 -2
  1188. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/delete/o-auth-delete-client-by-id.service.ts +3 -4
  1189. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.handler.ts +1 -2
  1190. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client-by-id.service.ts +3 -4
  1191. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.handler.ts +1 -2
  1192. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/find/o-auth-find-client.service.ts +3 -4
  1193. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.handler.ts +1 -2
  1194. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/get/o-auth-get-clients.service.ts +3 -4
  1195. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.handler.ts +1 -2
  1196. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/paginate/o-auth-paginate-clients.service.ts +3 -4
  1197. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.handler.ts +9 -3
  1198. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/application/update/o-auth-update-client-by-id.service.ts +9 -6
  1199. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/domain/o-auth-client.field-schema.ts +3 -10
  1200. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/index.ts +26 -26
  1201. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.repository.ts +109 -0
  1202. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/drizzle/o-auth-drizzle-client.schema.ts +35 -0
  1203. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.spec.ts +60 -0
  1204. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/create/o-auth-create-credential.service.ts +4 -3
  1205. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.handler.ts +2 -3
  1206. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential-by-id.service.ts +6 -5
  1207. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.handler.ts +2 -3
  1208. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/find/o-auth-find-credential.service.ts +6 -5
  1209. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.handler.ts +2 -3
  1210. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/get/o-auth-get-credentials.service.ts +6 -5
  1211. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.handler.ts +2 -3
  1212. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/application/paginate/o-auth-paginate-credentials.service.ts +6 -5
  1213. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/domain/o-auth-credential.field-schema.ts +16 -4
  1214. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/index.ts +21 -21
  1215. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.repository.ts +38 -0
  1216. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/drizzle/o-auth-drizzle-credential.schema.ts +31 -0
  1217. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.spec.ts +22 -21
  1218. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/authorize/o-auth-authorize.handler.ts +5 -14
  1219. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/o-auth-create-token.handler.spec.ts +1 -1
  1220. 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 +34 -18
  1221. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-authorization-code.service.ts +18 -10
  1222. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.spec.ts +22 -4
  1223. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-password.service.ts +13 -6
  1224. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.spec.ts +92 -48
  1225. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/create-token/services/o-auth-create-token-refresh.service.ts +43 -28
  1226. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/get-jwks/o-auth-get-jwks.handler.ts +3 -1
  1227. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.spec.ts +350 -0
  1228. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/o-auth-create-impersonate-token.handler.ts +117 -0
  1229. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.spec.ts +228 -0
  1230. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/impersonate-token/services/o-auth-create-impersonate-token.service.ts +153 -0
  1231. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.spec.ts +126 -31
  1232. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/revoke-token/services/o-auth-revoke-token.service.ts +63 -25
  1233. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.spec.ts +3 -1
  1234. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/application/session/o-auth-hub-session.service.ts +2 -0
  1235. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-chain.error.ts +26 -0
  1236. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-permission-refresh-failed.error.ts +34 -0
  1237. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-self.error.ts +25 -0
  1238. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-no-client.error.ts +26 -0
  1239. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-not-found.error.ts +27 -0
  1240. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-target-privileged.error.ts +26 -0
  1241. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation-unavailable.error.ts +36 -0
  1242. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/impersonation.errors.spec.ts +132 -0
  1243. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/errors/index.ts +7 -0
  1244. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/flows.types.ts +38 -3
  1245. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.spec.ts +281 -0
  1246. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/domain/impersonation-privilege-denylist.ts +239 -0
  1247. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/index.ts +26 -18
  1248. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/flows/shared/pkce/o-auth-verify-pkce-s256.ts +1 -1
  1249. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/index.ts +16 -42
  1250. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.relations.ts +81 -0
  1251. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/o-auth.seed.ts +80 -46
  1252. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/create/o-auth-create-refresh-token.service.ts +4 -3
  1253. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/delete/o-auth-delete-refresh-token-by-id.handler.ts +3 -6
  1254. 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
  1255. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.handler.ts +2 -3
  1256. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token-by-id.service.ts +6 -5
  1257. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.handler.ts +2 -3
  1258. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/find/o-auth-find-refresh-token.service.ts +6 -5
  1259. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.handler.ts +2 -3
  1260. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/get/o-auth-get-refresh-tokens.service.ts +6 -5
  1261. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.handler.ts +2 -3
  1262. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/application/paginate/o-auth-paginate-refresh-tokens.service.ts +6 -5
  1263. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/domain/o-auth-refresh-token.field-schema.ts +6 -5
  1264. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/index.ts +23 -23
  1265. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.repository.ts +40 -0
  1266. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/drizzle/o-auth-drizzle-refresh-token.schema.ts +33 -0
  1267. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/create/o-auth-create-scope.service.ts +4 -3
  1268. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.handler.ts +1 -2
  1269. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/delete/o-auth-delete-scope-by-id.service.ts +3 -4
  1270. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.handler.ts +1 -2
  1271. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope-by-id.service.ts +3 -4
  1272. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.handler.ts +1 -2
  1273. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/find/o-auth-find-scope.service.ts +3 -4
  1274. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.handler.ts +1 -2
  1275. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/get/o-auth-get-scopes.service.ts +3 -4
  1276. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.handler.ts +1 -2
  1277. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/paginate/o-auth-paginate-scopes.service.ts +3 -4
  1278. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.handler.ts +7 -3
  1279. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/application/update/o-auth-update-scope-by-id.service.ts +9 -6
  1280. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/domain/o-auth-scope.field-schema.ts +3 -3
  1281. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/index.ts +26 -26
  1282. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.repository.ts +40 -0
  1283. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/drizzle/o-auth-drizzle-scope.schema.ts +20 -0
  1284. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.spec.ts +67 -21
  1285. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-authenticate-application.function.ts +29 -14
  1286. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.spec.ts +30 -0
  1287. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-generate-application-secret.function.ts +20 -0
  1288. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.spec.ts +24 -14
  1289. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/functions/o-auth-resolve-application-client.function.ts +10 -6
  1290. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/index.ts +1 -0
  1291. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.spec.ts +67 -77
  1292. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/shared/services/token-retention.service.ts +44 -38
  1293. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/index.ts +1 -0
  1294. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.spec.ts +727 -0
  1295. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/adapters/o-auth-application-provisioner.adapter.ts +274 -0
  1296. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/index.ts +1 -0
  1297. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/index.ts +2 -0
  1298. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.port.ts +79 -0
  1299. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/application/ports/o-auth-application-provisioner.token.ts +1 -0
  1300. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/index.ts +1 -0
  1301. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.spec.ts +57 -0
  1302. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/adapters/o-auth-client-reader.adapter.ts +5 -3
  1303. package/dist/templates/backend/packages/o-auth/src/@bridges/providers/iam-client-reader.bridge.ts +2 -2
  1304. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/impersonate-token-guarded-transports.e2e-spec.ts +386 -0
  1305. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/masked-property-query-guard.e2e-spec.ts +950 -0
  1306. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/oauth-bootstrap-seeder-idempotency.e2e-spec.ts +228 -0
  1307. package/dist/templates/backend/packages/o-auth/test/acceptance/o-auth/token-masking.e2e-spec.ts +247 -0
  1308. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/graphql/queue-manager.graphql +149 -0
  1309. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/index.ts +24 -0
  1310. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.auth-metadata.spec.ts +105 -0
  1311. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.spec.ts +220 -0
  1312. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/flows/resolvers/queue-manager.resolver.ts +228 -0
  1313. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.module.ts +84 -0
  1314. package/dist/templates/backend/packages/queue-manager/src/@api/queue-manager/queue-manager.seeder.ts +33 -0
  1315. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/index.ts +20 -0
  1316. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-inspector.port.ts +144 -0
  1317. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/domain/ports/queue-registry.token.ts +30 -0
  1318. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.spec.ts +172 -0
  1319. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/bull-board-queue-inspector.adapter.ts +352 -0
  1320. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/adapters/index.ts +1 -0
  1321. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/infrastructure/index.ts +1 -0
  1322. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-manager.seed.ts +51 -0
  1323. package/dist/templates/backend/packages/queue-manager/src/@app/queue-manager/queue-registry.providers.ts +37 -0
  1324. package/dist/templates/codegen/backend/@api/__bounded_context_name__.module.ts.eta +0 -2
  1325. package/dist/templates/codegen/backend/@api/__bounded_context_name__.seeder.ts.eta +4 -4
  1326. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-count-__module_name__.controller.ts.eta +69 -0
  1327. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_name__.controller.ts.eta +7 -8
  1328. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-create-__module_names__.controller.ts.eta +2 -2
  1329. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_name__-by-id.controller.ts.eta +4 -7
  1330. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-delete-__module_names__.controller.ts.eta +3 -13
  1331. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__-by-id.controller.ts.eta +4 -7
  1332. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-find-__module_name__.controller.ts.eta +6 -9
  1333. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-__module_names__.controller.ts.eta +6 -9
  1334. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-get-raw-__module_names__.controller.ts.eta +0 -9
  1335. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-max-__module_name__.controller.ts.eta +72 -0
  1336. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-min-__module_name__.controller.ts.eta +72 -0
  1337. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-paginate-__module_names__.controller.ts.eta +6 -9
  1338. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-sum-__module_name__.controller.ts.eta +72 -0
  1339. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_name__-by-id.controller.ts.eta +6 -9
  1340. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-update-__module_names__.controller.ts.eta +3 -13
  1341. package/dist/templates/codegen/backend/@api/__module_name__/controllers/__bounded_context_name__-upsert-__module_name__.controller.ts.eta +2 -11
  1342. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-__module_name__.dto.ts.eta +18 -2
  1343. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-create-__module_name__.dto.ts.eta +10 -2
  1344. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_name__-by-id.dto.ts.eta +10 -2
  1345. package/dist/templates/codegen/backend/@api/__module_name__/dto/__bounded_context_name__-update-__module_names__.dto.ts.eta +10 -2
  1346. package/dist/templates/codegen/backend/@api/__module_name__/graphql/__bounded_context_name__-__module_name__.graphql.eta +139 -38
  1347. package/dist/templates/codegen/backend/@api/__module_name__/index.ts.eta +72 -0
  1348. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-__module_name__-custom-field-value.resolver.ts.eta +32 -0
  1349. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-count-__module_name__.resolver.ts.eta +62 -0
  1350. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_name__.resolver.ts.eta +6 -8
  1351. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-create-__module_names__.resolver.ts.eta +2 -2
  1352. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_name__-by-id.resolver.ts.eta +4 -7
  1353. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-delete-__module_names__.resolver.ts.eta +1 -11
  1354. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__-by-id.resolver.ts.eta +4 -7
  1355. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-find-__module_name__.resolver.ts.eta +4 -7
  1356. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-__module_names__.resolver.ts.eta +4 -7
  1357. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-get-raw-__module_names__.resolver.ts.eta +0 -9
  1358. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-max-__module_name__.resolver.ts.eta +64 -0
  1359. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-min-__module_name__.resolver.ts.eta +64 -0
  1360. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-paginate-__module_names__.resolver.ts.eta +4 -7
  1361. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-sum-__module_name__.resolver.ts.eta +64 -0
  1362. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_name__-by-id.resolver.ts.eta +6 -9
  1363. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-update-__module_names__.resolver.ts.eta +3 -13
  1364. package/dist/templates/codegen/backend/@api/__module_name__/resolvers/__bounded_context_name__-upsert-__module_name__.resolver.ts.eta +2 -11
  1365. package/dist/templates/codegen/backend/@app/__bounded_context_name__.seed.ts.eta +6 -4
  1366. package/dist/templates/codegen/backend/@app/__module_name__/application/__bounded_context_name__-__module_name__.payload-types.ts.eta +53 -0
  1367. package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.handler.ts.eta +3 -41
  1368. package/dist/templates/codegen/backend/@app/__module_name__/application/count/__bounded_context_name__-count-__module_name__.service.ts.eta +5 -6
  1369. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.handler.ts.eta +56 -44
  1370. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_name__.service.ts.eta +99 -81
  1371. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.handler.ts.eta +46 -4
  1372. package/dist/templates/codegen/backend/@app/__module_name__/application/create/__bounded_context_name__-create-__module_names__.service.ts.eta +111 -31
  1373. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.handler.ts.eta +33 -46
  1374. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_name__-by-id.service.ts.eta +100 -80
  1375. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.handler.ts.eta +10 -48
  1376. package/dist/templates/codegen/backend/@app/__module_name__/application/delete/__bounded_context_name__-delete-__module_names__.service.ts.eta +39 -61
  1377. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.handler.ts.eta +18 -36
  1378. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__-by-id.service.ts.eta +34 -10
  1379. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.handler.ts.eta +18 -37
  1380. package/dist/templates/codegen/backend/@app/__module_name__/application/find/__bounded_context_name__-find-__module_name__.service.ts.eta +34 -9
  1381. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.handler.ts.eta +21 -38
  1382. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-__module_names__.service.ts.eta +34 -9
  1383. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.handler.ts.eta +14 -39
  1384. package/dist/templates/codegen/backend/@app/__module_name__/application/get/__bounded_context_name__-get-raw-__module_names__.service.ts.eta +4 -6
  1385. package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.handler.ts.eta +43 -0
  1386. package/dist/templates/codegen/backend/@app/__module_name__/application/max/__bounded_context_name__-max-__module_name__.service.ts.eta +5 -6
  1387. package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.handler.ts.eta +43 -0
  1388. package/dist/templates/codegen/backend/@app/__module_name__/application/min/__bounded_context_name__-min-__module_name__.service.ts.eta +5 -6
  1389. package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.handler.ts.eta +21 -37
  1390. package/dist/templates/codegen/backend/@app/__module_name__/application/paginate/__bounded_context_name__-paginate-__module_names__.service.ts.eta +37 -9
  1391. package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.handler.ts.eta +43 -0
  1392. package/dist/templates/codegen/backend/@app/__module_name__/application/sum/__bounded_context_name__-sum-__module_name__.service.ts.eta +5 -6
  1393. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.handler.ts.eta +73 -59
  1394. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_name__-by-id.service.ts.eta +71 -35
  1395. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.handler.ts.eta +31 -47
  1396. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-__module_names__.service.ts.eta +25 -41
  1397. package/dist/templates/codegen/backend/@app/__module_name__/application/update/__bounded_context_name__-update-and-increment-__module_names__.service.ts.eta +24 -41
  1398. package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.handler.ts.eta +23 -47
  1399. package/dist/templates/codegen/backend/@app/__module_name__/application/upsert/__bounded_context_name__-upsert-__module_name__.service.ts.eta +23 -83
  1400. package/dist/templates/codegen/backend/@app/__module_name__/domain/__bounded_context_name__-__module_name__.field-schema.ts.eta +38 -2
  1401. package/dist/templates/codegen/backend/@app/__module_name__/index.ts.eta +116 -121
  1402. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-custom-field-value.schema.ts.eta +37 -0
  1403. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.repository.ts.eta +65 -0
  1404. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__-i18n.schema.ts.eta +47 -0
  1405. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.repository.ts.eta +180 -0
  1406. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/drizzle/__bounded_context_name__-drizzle-__module_name__.schema.ts.eta +154 -0
  1407. package/dist/templates/codegen/backend/@app/index.ts.eta +0 -1
  1408. package/dist/templates/codegen/backend/additional-@api/__module_name__/controllers/__additional_api_name__.controller.ts.eta +9 -13
  1409. package/dist/templates/codegen/backend/additional-@api/__module_name__/resolvers/__additional_api_name__.resolver.ts.eta +9 -13
  1410. package/dist/templates/codegen/backend/additional-@app/__module_name__/application/__additional_api_action__/__additional_api_name__.handler.ts.eta +7 -6
  1411. package/dist/templates/codegen/frontend/module/__bounded_context_name__.navigation.ts.eta +1 -0
  1412. package/dist/templates/codegen/frontend/module/__module_name__/__module_name__.columns.ts.eta +231 -30
  1413. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.detail-config.ts.eta +18 -2
  1414. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.graphql.ts.eta +223 -71
  1415. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.list-config.ts.eta +11 -2
  1416. package/dist/templates/codegen/frontend/module/__module_name__/data-access/__module_name__.resolvers.ts.eta +159 -52
  1417. package/dist/templates/codegen/frontend/module/__module_name__/data-access/index.ts.eta +8 -0
  1418. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-detail.component.ts.eta +248 -57
  1419. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form-embed.component.ts.eta +181 -59
  1420. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-form.component.ts.eta +230 -114
  1421. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-actions-cell.component.ts.eta +35 -12
  1422. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list-translations-cell.component.ts.eta +91 -0
  1423. package/dist/templates/codegen/frontend/module/__module_name__/features/__module_name__-list.component.ts.eta +145 -47
  1424. package/dist/templates/codegen/frontend/module/__module_name__/features/index.ts.eta +19 -0
  1425. package/dist/templates/codegen/frontend/module/__module_name__/index.ts.eta +7 -5
  1426. package/dist/templates/codegen/partials/fields/boolean-field.eta +11 -4
  1427. package/dist/templates/codegen/partials/fields/color-picker-field.eta +8 -0
  1428. package/dist/templates/codegen/partials/fields/date-field.eta +6 -16
  1429. package/dist/templates/codegen/partials/fields/datetime-field.eta +8 -0
  1430. package/dist/templates/codegen/partials/fields/enum-field.eta +14 -10
  1431. package/dist/templates/codegen/partials/fields/number-field.eta +2 -4
  1432. package/dist/templates/codegen/partials/fields/password-field.eta +14 -18
  1433. package/dist/templates/codegen/partials/fields/text-field.eta +2 -7
  1434. package/dist/templates/codegen/partials/fields/varchar-field.eta +2 -7
  1435. package/dist/templates/codegen/partials/form/dialog-frame.eta +14 -11
  1436. package/dist/templates/codegen/partials/form/field-errors.eta +10 -0
  1437. package/dist/templates/codegen/partials/form/field-label.eta +18 -6
  1438. package/dist/templates/codegen/partials/form/form-body.eta +36 -9
  1439. package/dist/templates/codegen/partials/form/view-frame-tabbed.eta +36 -2
  1440. package/dist/templates/codegen/partials/form/view-frame.eta +40 -2
  1441. package/dist/templates/codegen/partials/i18n-recompute.eta +68 -0
  1442. package/dist/templates/codegen/partials/i18n-validate.eta +51 -0
  1443. package/dist/templates/codegen/partials/relationships/async-multiple-search-select.eta +12 -11
  1444. package/dist/templates/codegen/partials/relationships/async-search-select.eta +12 -11
  1445. package/dist/templates/codegen/partials/relationships/grid-elements-manager.eta +1 -0
  1446. package/dist/templates/codegen/partials/relationships/grid-select-element.eta +5 -7
  1447. package/dist/templates/codegen/partials/relationships/multiple-search-select.eta +12 -11
  1448. package/dist/templates/codegen/partials/relationships/multiple-select.eta +5 -7
  1449. package/dist/templates/codegen/partials/relationships/search-select.eta +13 -11
  1450. package/dist/templates/codegen/partials/relationships/select.eta +3 -5
  1451. package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/SKILL.md +67 -51
  1452. package/dist/templates/frontend/application/.claude/skills/catalyst-data-layer/references/known-patterns.md +24 -20
  1453. package/dist/templates/frontend/application/.claude/skills/catalyst-data-table-management/SKILL.md +38 -33
  1454. package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/SKILL.md +133 -73
  1455. package/dist/templates/frontend/application/.claude/skills/catalyst-form-composer-auditor/references/catalyst-detail-form-rules.md +308 -253
  1456. package/dist/templates/frontend/application/.claude/skills/catalyst-project-structure/SKILL.md +281 -173
  1457. package/dist/templates/frontend/application/.claude/skills/catalyst-review-module/SKILL.md +1 -1
  1458. package/dist/templates/frontend/application/.claude/skills/catalyst-widget-creator/SKILL.md +288 -0
  1459. package/dist/templates/frontend/application/.claude/skills/layout-design-system/SKILL.md +69 -10
  1460. package/dist/templates/frontend/application/.claude/skills/transloco-i18n/SKILL.md +21 -0
  1461. package/dist/templates/frontend/application/CLAUDE.md +18 -3
  1462. package/dist/templates/frontend/application/angular.json +6 -4
  1463. package/dist/templates/frontend/application/codegen.ts +2 -1
  1464. package/dist/templates/frontend/application/libs/ui/accordion/src/lib/hlm-accordion-trigger.ts +1 -1
  1465. package/dist/templates/frontend/application/libs/ui/alert/src/lib/hlm-alert.ts +1 -1
  1466. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/index.ts +3 -0
  1467. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-action.ts +1 -3
  1468. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-cancel.ts +3 -4
  1469. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-content.ts +5 -2
  1470. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-description.ts +5 -4
  1471. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-footer.ts +5 -4
  1472. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-header.ts +5 -4
  1473. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-media.ts +15 -0
  1474. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-overlay.ts +1 -1
  1475. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-title.ts +5 -4
  1476. package/dist/templates/frontend/application/libs/ui/alert-dialog/src/lib/hlm-alert-dialog-trigger.ts +1 -3
  1477. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-content.ts +1 -1
  1478. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-empty.ts +1 -3
  1479. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-group.ts +1 -3
  1480. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-input.ts +45 -44
  1481. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-item.ts +3 -5
  1482. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-label.ts +1 -3
  1483. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-list.ts +2 -4
  1484. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-search.ts +8 -18
  1485. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-separator.ts +1 -3
  1486. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete-status.ts +2 -4
  1487. package/dist/templates/frontend/application/libs/ui/autocomplete/src/lib/hlm-autocomplete.ts +8 -18
  1488. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-badge.ts +2 -2
  1489. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-fallback.ts +1 -1
  1490. package/dist/templates/frontend/application/libs/ui/avatar/src/lib/hlm-avatar-image.ts +1 -1
  1491. package/dist/templates/frontend/application/libs/ui/badge/src/lib/hlm-badge.ts +1 -1
  1492. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/index.ts +0 -5
  1493. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-ellipsis.ts +12 -25
  1494. package/dist/templates/frontend/application/libs/ui/breadcrumb/src/lib/hlm-breadcrumb-separator.ts +1 -1
  1495. package/dist/templates/frontend/application/libs/ui/button/src/lib/hlm-button.ts +6 -8
  1496. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-separator.ts +5 -4
  1497. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group-text.ts +4 -1
  1498. package/dist/templates/frontend/application/libs/ui/button-group/src/lib/hlm-button-group.ts +4 -4
  1499. package/dist/templates/frontend/application/libs/ui/calendar/src/index.ts +8 -1
  1500. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-multi.ts +189 -223
  1501. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar-range.ts +188 -218
  1502. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-calendar.ts +184 -212
  1503. package/dist/templates/frontend/application/libs/ui/calendar/src/lib/hlm-month-year-calendar.ts +139 -0
  1504. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-action.ts +1 -3
  1505. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-content.ts +2 -4
  1506. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-description.ts +1 -3
  1507. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-footer.ts +2 -5
  1508. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-header.ts +2 -4
  1509. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card-title.ts +1 -3
  1510. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.token.ts +19 -0
  1511. package/dist/templates/frontend/application/libs/ui/card/src/lib/hlm-card.ts +4 -2
  1512. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-next.ts +5 -7
  1513. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel-previous.ts +5 -7
  1514. package/dist/templates/frontend/application/libs/ui/carousel/src/lib/hlm-carousel.ts +8 -6
  1515. package/dist/templates/frontend/application/libs/ui/checkbox/src/lib/hlm-checkbox.ts +13 -14
  1516. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-content.ts +1 -3
  1517. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible-trigger.ts +1 -3
  1518. package/dist/templates/frontend/application/libs/ui/collapsible/src/lib/hlm-collapsible.ts +1 -3
  1519. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-input.ts +1 -3
  1520. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip-remove.ts +2 -4
  1521. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chip.ts +2 -4
  1522. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-chips.ts +12 -12
  1523. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-content.ts +1 -3
  1524. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-empty.ts +1 -3
  1525. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-group.ts +1 -3
  1526. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-input.ts +58 -43
  1527. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-item.ts +3 -5
  1528. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-label.ts +1 -3
  1529. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-list.ts +2 -4
  1530. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-multiple.ts +8 -18
  1531. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-placeholder.ts +1 -1
  1532. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-separator.ts +1 -3
  1533. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-status.ts +2 -4
  1534. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-trigger.ts +17 -2
  1535. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox-value.ts +1 -0
  1536. package/dist/templates/frontend/application/libs/ui/combobox/src/lib/hlm-combobox.ts +8 -18
  1537. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-dialog.ts +2 -2
  1538. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group-label.ts +1 -1
  1539. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-group.ts +4 -1
  1540. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-input.ts +10 -4
  1541. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-item.ts +1 -1
  1542. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-list.ts +1 -1
  1543. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-separator.ts +1 -1
  1544. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command-shortcut.ts +4 -1
  1545. package/dist/templates/frontend/application/libs/ui/command/src/lib/hlm-command.ts +1 -1
  1546. package/dist/templates/frontend/application/libs/ui/context-menu/src/lib/hlm-context-menu-trigger.ts +25 -14
  1547. package/dist/templates/frontend/application/libs/ui/date-picker/src/index.ts +24 -3
  1548. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-multi-input.ts +104 -0
  1549. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-anchor.ts +23 -0
  1550. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-input.ts +105 -0
  1551. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.token.ts +61 -0
  1552. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-multi.ts +70 -85
  1553. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker-trigger.ts +104 -0
  1554. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.token.ts +22 -0
  1555. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-picker.ts +83 -97
  1556. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-input.ts +107 -0
  1557. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.token.ts +36 -1
  1558. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-date-range-picker.ts +90 -89
  1559. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-input.ts +105 -0
  1560. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.token.ts +89 -0
  1561. package/dist/templates/frontend/application/libs/ui/date-picker/src/lib/hlm-month-year-picker.ts +199 -0
  1562. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-close.ts +2 -4
  1563. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-content.ts +21 -13
  1564. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-description.ts +5 -4
  1565. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-footer.ts +1 -3
  1566. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-header.ts +2 -4
  1567. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-overlay.ts +4 -3
  1568. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-title.ts +2 -4
  1569. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog-trigger.ts +1 -3
  1570. package/dist/templates/frontend/application/libs/ui/dialog/src/lib/hlm-dialog.service.ts +7 -4
  1571. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/index.ts +4 -0
  1572. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox-indicator.ts +3 -5
  1573. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-checkbox.ts +30 -12
  1574. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-focus-on-hover.ts +35 -0
  1575. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-group.ts +1 -3
  1576. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item-sub-indicator.ts +2 -2
  1577. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-item.ts +4 -2
  1578. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-label.ts +4 -4
  1579. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio-indicator.ts +5 -7
  1580. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-radio.ts +26 -13
  1581. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-separator.ts +2 -4
  1582. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-shortcut.ts +5 -4
  1583. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub-trigger.ts +52 -0
  1584. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-sub.ts +21 -26
  1585. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu-trigger.ts +14 -17
  1586. package/dist/templates/frontend/application/libs/ui/dropdown-menu/src/lib/hlm-dropdown-menu.ts +21 -26
  1587. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-content.ts +2 -4
  1588. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-description.ts +2 -4
  1589. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-header.ts +2 -4
  1590. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-media.ts +4 -3
  1591. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty-title.ts +1 -3
  1592. package/dist/templates/frontend/application/libs/ui/empty/src/lib/hlm-empty.ts +2 -4
  1593. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-content.ts +2 -4
  1594. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-description.ts +2 -5
  1595. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-error.ts +2 -6
  1596. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-group.ts +2 -4
  1597. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-label.ts +3 -7
  1598. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-separator.ts +3 -5
  1599. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-set.ts +5 -7
  1600. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field-title.ts +2 -4
  1601. package/dist/templates/frontend/application/libs/ui/field/src/lib/hlm-field.ts +1 -1
  1602. package/dist/templates/frontend/application/libs/ui/hover-card/src/lib/hlm-hover-card-content.ts +1 -1
  1603. package/dist/templates/frontend/application/libs/ui/input/src/lib/hlm-input.ts +10 -27
  1604. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-addon.ts +6 -6
  1605. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-button.ts +3 -3
  1606. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-input.ts +2 -4
  1607. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-text.ts +2 -2
  1608. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group-textarea.ts +2 -4
  1609. package/dist/templates/frontend/application/libs/ui/input-group/src/lib/hlm-input-group.ts +5 -24
  1610. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-fake-caret.ts +7 -4
  1611. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-group.ts +6 -5
  1612. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-separator.ts +3 -7
  1613. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp-slot.ts +22 -10
  1614. package/dist/templates/frontend/application/libs/ui/input-otp/src/lib/hlm-input-otp.ts +2 -4
  1615. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-actions.ts +2 -4
  1616. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-content.ts +5 -4
  1617. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-description.ts +6 -8
  1618. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-footer.ts +2 -4
  1619. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-group.ts +4 -1
  1620. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-header.ts +2 -4
  1621. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-media.ts +4 -3
  1622. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-separator.ts +3 -2
  1623. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item-title.ts +5 -4
  1624. package/dist/templates/frontend/application/libs/ui/item/src/lib/hlm-item.ts +7 -6
  1625. package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd-group.ts +1 -1
  1626. package/dist/templates/frontend/application/libs/ui/kbd/src/lib/hlm-kbd.ts +4 -5
  1627. package/dist/templates/frontend/application/libs/ui/label/src/lib/hlm-label.ts +3 -10
  1628. package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar-trigger.ts +23 -15
  1629. package/dist/templates/frontend/application/libs/ui/menubar/src/lib/hlm-menubar.ts +1 -1
  1630. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-opt-group.ts +8 -5
  1631. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select-option.ts +8 -5
  1632. package/dist/templates/frontend/application/libs/ui/native-select/src/lib/hlm-native-select.ts +17 -11
  1633. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-content.ts +10 -3
  1634. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-item.ts +4 -1
  1635. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-link.ts +7 -4
  1636. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-list.ts +4 -1
  1637. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu-trigger.ts +18 -4
  1638. package/dist/templates/frontend/application/libs/ui/navigation-menu/src/lib/hlm-navigation-menu.ts +3 -0
  1639. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination-query-params.ts +68 -67
  1640. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-numbered-pagination.ts +1 -3
  1641. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-content.ts +2 -4
  1642. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-ellipsis.ts +12 -18
  1643. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-item.ts +2 -9
  1644. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-link.ts +2 -1
  1645. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-next.ts +10 -9
  1646. package/dist/templates/frontend/application/libs/ui/pagination/src/lib/hlm-pagination-previous.ts +11 -9
  1647. package/dist/templates/frontend/application/libs/ui/popover/src/index.ts +9 -0
  1648. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-content.ts +2 -1
  1649. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-description.ts +12 -0
  1650. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-header.ts +12 -0
  1651. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-title.ts +12 -0
  1652. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover-trigger.ts +1 -3
  1653. package/dist/templates/frontend/application/libs/ui/popover/src/lib/hlm-popover.ts +2 -3
  1654. package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress-indicator.ts +10 -4
  1655. package/dist/templates/frontend/application/libs/ui/progress/src/lib/hlm-progress.ts +2 -1
  1656. package/dist/templates/frontend/application/libs/ui/radio-group/src/lib/hlm-radio.ts +3 -4
  1657. package/dist/templates/frontend/application/libs/ui/resizable/src/lib/hlm-resizable-handle.ts +1 -1
  1658. package/dist/templates/frontend/application/libs/ui/scroll-area/src/lib/hlm-scroll-area.ts +6 -4
  1659. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-content.ts +1 -1
  1660. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-group.ts +1 -3
  1661. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-item.ts +3 -5
  1662. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-label.ts +2 -4
  1663. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-multiple.ts +8 -18
  1664. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-placeholder.ts +1 -1
  1665. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-down.ts +1 -1
  1666. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-scroll-up.ts +1 -1
  1667. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-separator.ts +2 -4
  1668. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-trigger.ts +16 -4
  1669. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select-values-content.ts +4 -1
  1670. package/dist/templates/frontend/application/libs/ui/select/src/lib/hlm-select.ts +8 -18
  1671. package/dist/templates/frontend/application/libs/ui/separator/src/lib/hlm-separator.ts +4 -1
  1672. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-close.ts +2 -4
  1673. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-content.ts +14 -30
  1674. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-description.ts +1 -3
  1675. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-footer.ts +2 -4
  1676. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-header.ts +2 -4
  1677. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-overlay.ts +1 -4
  1678. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-title.ts +2 -4
  1679. package/dist/templates/frontend/application/libs/ui/sheet/src/lib/hlm-sheet-trigger.ts +1 -3
  1680. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-content.ts +1 -1
  1681. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-footer.ts +1 -1
  1682. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-action.ts +4 -6
  1683. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-content.ts +1 -1
  1684. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group-label.ts +4 -4
  1685. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-group.ts +1 -1
  1686. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-header.ts +1 -1
  1687. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-input.ts +4 -7
  1688. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-inset.ts +5 -7
  1689. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-action.ts +2 -8
  1690. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-badge.ts +4 -8
  1691. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-button.ts +3 -3
  1692. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-skeleton.ts +3 -3
  1693. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub-button.ts +8 -6
  1694. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu-sub.ts +8 -4
  1695. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-menu.ts +1 -1
  1696. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-rail.ts +2 -2
  1697. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-separator.ts +1 -1
  1698. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-trigger.ts +8 -19
  1699. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar-wrapper.ts +1 -1
  1700. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.service.ts +28 -11
  1701. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.token.ts +2 -0
  1702. package/dist/templates/frontend/application/libs/ui/sidebar/src/lib/hlm-sidebar.ts +11 -15
  1703. package/dist/templates/frontend/application/libs/ui/slider/src/lib/hlm-slider.ts +3 -3
  1704. package/dist/templates/frontend/application/libs/ui/sonner/src/lib/hlm-toaster.ts +12 -1
  1705. package/dist/templates/frontend/application/libs/ui/spinner/src/lib/hlm-spinner.ts +2 -1
  1706. package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch-thumb.ts +2 -1
  1707. package/dist/templates/frontend/application/libs/ui/switch/src/lib/hlm-switch.ts +15 -9
  1708. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-list.ts +1 -1
  1709. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-paginated-list.ts +8 -20
  1710. package/dist/templates/frontend/application/libs/ui/tabs/src/lib/hlm-tabs-trigger.ts +1 -1
  1711. package/dist/templates/frontend/application/libs/ui/textarea/src/lib/hlm-textarea.ts +10 -28
  1712. package/dist/templates/frontend/application/libs/ui/toggle/src/lib/hlm-toggle.ts +1 -1
  1713. package/dist/templates/frontend/application/libs/ui/tooltip/src/lib/hlm-tooltip.ts +3 -2
  1714. package/dist/templates/frontend/application/libs/ui/utils/src/index.ts +1 -0
  1715. package/dist/templates/frontend/application/libs/ui/utils/src/lib/provide-spartan-hlm.ts +34 -0
  1716. package/dist/templates/frontend/application/package.json +38 -29
  1717. package/dist/templates/frontend/application/public/i18n/en.json +17 -2
  1718. package/dist/templates/frontend/application/public/i18n/es.json +17 -2
  1719. package/dist/templates/frontend/application/public/i18n/navigation/en.json +22 -29
  1720. package/dist/templates/frontend/application/public/i18n/navigation/es.json +22 -29
  1721. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.spec.ts +11 -10
  1722. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.component.ts +12 -15
  1723. package/dist/templates/frontend/application/src/@aurora/components/async-multiple-search-select/async-multiple-search-select.stories.ts +0 -2
  1724. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.spec.ts +19 -11
  1725. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.component.ts +12 -15
  1726. package/dist/templates/frontend/application/src/@aurora/components/async-search-select/async-search-select.stories.ts +0 -22
  1727. package/dist/templates/frontend/application/src/@aurora/components/breadcrumb/breadcrumb.service.ts +2 -2
  1728. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.spec.ts +663 -0
  1729. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.component.ts +334 -0
  1730. package/dist/templates/frontend/application/src/@aurora/components/chart/chart.stories.ts +103 -0
  1731. package/dist/templates/frontend/application/src/@aurora/components/chart/index.ts +1 -0
  1732. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.spec.ts +671 -0
  1733. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.component.ts +802 -0
  1734. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-picker.stories.ts +180 -0
  1735. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.spec.ts +270 -0
  1736. package/dist/templates/frontend/application/src/@aurora/components/color-picker/color-utils.ts +177 -0
  1737. package/dist/templates/frontend/application/src/@aurora/components/color-picker/index.ts +2 -0
  1738. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.spec.ts +344 -0
  1739. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/custom-field-capture-form.component.ts +366 -0
  1740. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/index.ts +4 -0
  1741. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.spec.ts +82 -0
  1742. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/build-custom-field-capture-model.ts +49 -0
  1743. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-form.types.ts +57 -0
  1744. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.spec.ts +28 -0
  1745. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/custom-field-capture-value-equality.ts +24 -0
  1746. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.spec.ts +50 -0
  1747. package/dist/templates/frontend/application/src/@aurora/components/custom-field-capture-form/lib/validate-custom-field-capture-value.ts +30 -0
  1748. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/boolean-cell.component.ts +3 -6
  1749. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.component.ts +62 -0
  1750. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/date-cell.stories.ts +117 -0
  1751. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/enum-cell.component.ts +23 -0
  1752. package/dist/templates/frontend/application/src/@aurora/components/data-table/cells/index.ts +2 -0
  1753. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/column-toggle.component.ts +7 -29
  1754. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.spec.ts +460 -0
  1755. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/data-table.component.ts +17 -3
  1756. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/head-selection.component.ts +2 -1
  1757. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/row-selection.component.ts +2 -1
  1758. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/sort-button.component.ts +44 -14
  1759. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-export.component.ts +5 -9
  1760. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-filters.component.ts +2 -11
  1761. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-pagination.component.ts +16 -26
  1762. package/dist/templates/frontend/application/src/@aurora/components/data-table/components/table-search.component.ts +1 -11
  1763. package/dist/templates/frontend/application/src/@aurora/components/data-table/index.ts +4 -1
  1764. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.spec.ts +123 -8
  1765. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-filter-where.ts +55 -33
  1766. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.spec.ts +141 -17
  1767. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-search-where.ts +50 -21
  1768. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.spec.ts +22 -11
  1769. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/build-sort-order.ts +25 -19
  1770. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.spec.ts +72 -0
  1771. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/column-helpers.ts +8 -1
  1772. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/custom-field-column.ts +141 -0
  1773. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.spec.ts +157 -0
  1774. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relations-node.ts +69 -0
  1775. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.spec.ts +217 -0
  1776. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/merge-custom-field-columns.ts +146 -0
  1777. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/nested-column.ts +24 -23
  1778. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.spec.ts +140 -0
  1779. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/resolve-custom-field-filter.ts +119 -0
  1780. package/dist/templates/frontend/application/src/@aurora/components/data-table/services/in-memory-column-config-storage.ts +2 -2
  1781. package/dist/templates/frontend/application/src/@aurora/components/data-table/types.ts +57 -8
  1782. package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.spec.ts +189 -0
  1783. package/dist/templates/frontend/application/src/@aurora/components/date-picker/date-picker.component.ts +133 -0
  1784. package/dist/templates/frontend/application/src/@aurora/components/date-picker/index.ts +1 -0
  1785. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.spec.ts +274 -0
  1786. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.component.ts +208 -0
  1787. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/datetime-picker.stories.ts +121 -0
  1788. package/dist/templates/frontend/application/src/@aurora/components/datetime-picker/index.ts +1 -0
  1789. package/dist/templates/frontend/application/src/@aurora/components/grid-pick-dialog/grid-pick-dialog.component.ts +22 -26
  1790. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.spec.ts +98 -10
  1791. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.component.ts +41 -10
  1792. package/dist/templates/frontend/application/src/@aurora/components/grid-select-element/grid-select-element.stories.ts +6 -0
  1793. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.spec.ts +80 -0
  1794. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.component.ts +10 -26
  1795. package/dist/templates/frontend/application/src/@aurora/components/grid-select-multiple-elements/grid-select-multiple-elements.stories.ts +2 -2
  1796. package/dist/templates/frontend/application/src/@aurora/components/hlm-badge-icon-cell/hlm-badge-icon-cell.component.ts +4 -7
  1797. package/dist/templates/frontend/application/src/@aurora/components/hlm-password-strength/hlm-password-strength.component.ts +1 -2
  1798. package/dist/templates/frontend/application/src/@aurora/components/index.ts +11 -0
  1799. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.spec.ts +14 -15
  1800. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.component.ts +12 -15
  1801. package/dist/templates/frontend/application/src/@aurora/components/multiple-search-select/multiple-search-select.stories.ts +0 -9
  1802. package/dist/templates/frontend/application/src/@aurora/components/password-input/index.ts +1 -0
  1803. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.spec.ts +271 -0
  1804. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.component.ts +181 -0
  1805. package/dist/templates/frontend/application/src/@aurora/components/password-input/password-input.stories.ts +189 -0
  1806. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/index.ts +2 -0
  1807. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.component.ts +76 -0
  1808. package/dist/templates/frontend/application/src/@aurora/components/progress-uploader/progress-uploader.service.ts +105 -0
  1809. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.spec.ts +14 -15
  1810. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.component.ts +17 -18
  1811. package/dist/templates/frontend/application/src/@aurora/components/search-select/search-select.stories.ts +0 -14
  1812. package/dist/templates/frontend/application/src/@aurora/components/status-badge/index.ts +3 -0
  1813. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.component.ts +37 -0
  1814. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge-cell.stories.ts +74 -0
  1815. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.component.ts +63 -0
  1816. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.spec.ts +93 -0
  1817. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.stories.ts +107 -0
  1818. package/dist/templates/frontend/application/src/@aurora/components/status-badge/status-badge.types.ts +43 -0
  1819. package/dist/templates/frontend/application/src/@aurora/composables/atoms/data-table/use-table-data.ts +3 -2
  1820. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find-by-id.ts +12 -2
  1821. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-find.ts +14 -2
  1822. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-get.ts +11 -2
  1823. package/dist/templates/frontend/application/src/@aurora/composables/atoms/graphql/use-graphql-paginate.ts +9 -2
  1824. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.spec.ts +191 -0
  1825. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-aggregate-shell.ts +24 -4
  1826. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-detail.ts +23 -14
  1827. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-graphql-list.ts +14 -10
  1828. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.spec.ts +251 -0
  1829. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-paginated-data-table.ts +64 -19
  1830. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.spec.ts +142 -0
  1831. package/dist/templates/frontend/application/src/@aurora/composables/presets/use-pivot-membership.ts +7 -9
  1832. package/dist/templates/frontend/application/src/@aurora/directives/index.ts +1 -0
  1833. package/dist/templates/frontend/application/src/@aurora/directives/scroll-fade.directive.ts +150 -0
  1834. package/dist/templates/frontend/application/src/@aurora/index.ts +1 -0
  1835. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.spec.ts +50 -0
  1836. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-date.ts +42 -0
  1837. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.spec.ts +42 -0
  1838. package/dist/templates/frontend/application/src/@aurora/lib/format-iso-datetime.ts +34 -0
  1839. package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.spec.ts +28 -0
  1840. package/dist/templates/frontend/application/src/@aurora/lib/format-local-date.ts +23 -0
  1841. package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.spec.ts +47 -0
  1842. package/dist/templates/frontend/application/src/@aurora/lib/format-utc-date.ts +25 -0
  1843. package/dist/templates/frontend/application/src/@aurora/lib/index.ts +11 -0
  1844. package/dist/templates/frontend/application/src/@aurora/lib/local-time.spec.ts +54 -0
  1845. package/dist/templates/frontend/application/src/@aurora/lib/local-time.ts +40 -0
  1846. package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.spec.ts +130 -0
  1847. package/dist/templates/frontend/application/src/@aurora/lib/resolve-enum-label.ts +61 -0
  1848. package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.spec.ts +101 -0
  1849. package/dist/templates/frontend/application/src/@aurora/lib/resolve-i18n-value.ts +30 -0
  1850. package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.spec.ts +39 -0
  1851. package/dist/templates/frontend/application/src/@aurora/lib/resolve-storage-file-url.ts +38 -0
  1852. package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.spec.ts +94 -0
  1853. package/dist/templates/frontend/application/src/@aurora/lib/scroll-fade.ts +51 -0
  1854. package/dist/templates/frontend/application/src/@aurora/lib/to-wire-date.spec.ts +63 -0
  1855. package/dist/templates/frontend/application/src/@aurora/lib/to-wire-date.ts +70 -0
  1856. package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.spec.ts +133 -0
  1857. package/dist/templates/frontend/application/src/@aurora/lib/use-async-search-list.ts +1 -6
  1858. package/dist/templates/frontend/application/src/@aurora/lib/utc-date-prefix.ts +24 -0
  1859. package/dist/templates/frontend/application/src/@aurora/modules/authentication/README.md +59 -2
  1860. package/dist/templates/frontend/application/src/@aurora/modules/authentication/data-access/authentication.graphql.ts +15 -15
  1861. package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.spec.ts +195 -0
  1862. package/dist/templates/frontend/application/src/@aurora/modules/authentication/guards/permission.guard.ts +65 -0
  1863. package/dist/templates/frontend/application/src/@aurora/modules/authentication/index.ts +7 -2
  1864. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.spec.ts +92 -0
  1865. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/anonymous-current-account.adapter.ts +36 -2
  1866. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.spec.ts +494 -0
  1867. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-aurora-adapter.service.ts +99 -50
  1868. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/adapters/authentication-disabled.service.ts +8 -4
  1869. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authenticated-initializer.ts +8 -7
  1870. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.provider.ts +2 -0
  1871. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.service.ts +27 -1
  1872. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.spec.ts +113 -0
  1873. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.ts +56 -3
  1874. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/authentication.types.ts +6 -2
  1875. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/current-account.service.ts +68 -0
  1876. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver-permission-bounce.spec.ts +80 -0
  1877. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.spec.ts +440 -0
  1878. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/landing-resolver.service.ts +156 -0
  1879. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.spec.ts +75 -0
  1880. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/resolve-landing-route.ts +27 -0
  1881. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.spec.ts +41 -0
  1882. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/safe-redirect-path.ts +21 -0
  1883. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.spec.ts +759 -0
  1884. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/session-recovery-coordinator.service.ts +310 -0
  1885. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.spec.ts +293 -0
  1886. package/dist/templates/frontend/application/src/@aurora/modules/authentication/shared/token-store.service.ts +116 -1
  1887. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.css +150 -0
  1888. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.spec.ts +288 -0
  1889. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.component.ts +776 -0
  1890. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.gridstack.css +15 -0
  1891. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/dashboard-grid.helpers.ts +174 -0
  1892. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-grid/index.ts +2 -0
  1893. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.spec.ts +261 -0
  1894. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/dashboard-tile.component.ts +306 -0
  1895. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/dashboard-tile/index.ts +1 -0
  1896. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/components/index.ts +2 -0
  1897. package/dist/templates/frontend/application/src/@aurora/modules/dashboard/index.ts +1 -0
  1898. package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.spec.ts +1001 -530
  1899. package/dist/templates/frontend/application/src/@aurora/modules/graphql/apollo.factory.ts +108 -34
  1900. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-create.ts +17 -8
  1901. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-id.ts +14 -8
  1902. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete-by-keys.ts +15 -7
  1903. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-delete.ts +18 -9
  1904. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-insert.ts +14 -8
  1905. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/mutate-update.ts +14 -8
  1906. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.spec.ts +6 -4
  1907. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find-by-id.ts +12 -11
  1908. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.spec.ts +7 -5
  1909. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-find.ts +16 -13
  1910. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.spec.ts +6 -4
  1911. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-get.ts +13 -14
  1912. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.spec.ts +8 -5
  1913. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/query-paginate.ts +11 -9
  1914. package/dist/templates/frontend/application/src/@aurora/modules/graphql/fetchers/types.ts +5 -3
  1915. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.spec.ts +170 -0
  1916. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.ts +36 -6
  1917. package/dist/templates/frontend/application/src/@aurora/modules/graphql/graphql.types.ts +24 -12
  1918. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.spec.ts +30 -108
  1919. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-auth.handler.ts +9 -76
  1920. package/dist/templates/frontend/application/src/@aurora/modules/graphql/handlers/aurora-graphql-error.handler.spec.ts +12 -3
  1921. package/dist/templates/frontend/application/src/@aurora/modules/graphql/index.ts +5 -0
  1922. package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.spec.ts +138 -0
  1923. package/dist/templates/frontend/application/src/@aurora/modules/health/health.service.ts +60 -0
  1924. package/dist/templates/frontend/application/src/@aurora/modules/health/index.ts +1 -0
  1925. package/dist/templates/frontend/application/src/@aurora/modules/index.ts +5 -0
  1926. package/dist/templates/frontend/application/src/@aurora/modules/lang/index.ts +1 -0
  1927. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang-flag-icons.ts +34 -0
  1928. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.spec.ts +129 -0
  1929. package/dist/templates/frontend/application/src/@aurora/modules/lang/lang.service.ts +37 -3
  1930. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.spec.ts +367 -0
  1931. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/build-report-columns.ts +186 -0
  1932. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/index.ts +24 -0
  1933. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-cell-renderer.registry.ts +52 -0
  1934. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.spec.ts +148 -0
  1935. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-fetch-adapter.ts +68 -0
  1936. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.component.ts +154 -0
  1937. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-filter-form.spec.ts +181 -0
  1938. package/dist/templates/frontend/application/src/@aurora/modules/report-viewer/report-viewer.types.ts +230 -0
  1939. package/dist/templates/frontend/application/src/@aurora/modules/session/session.service.ts +2 -2
  1940. package/dist/templates/frontend/application/src/@aurora/modules/theme/index.ts +2 -0
  1941. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.spec.ts +240 -0
  1942. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.service.ts +128 -0
  1943. package/dist/templates/frontend/application/src/@aurora/modules/theme/theme-palette.type.ts +4 -0
  1944. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-component-i18n.spec.ts +217 -0
  1945. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget-i18n.spec.ts +221 -0
  1946. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.component.ts +318 -0
  1947. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.spec.ts +274 -0
  1948. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/chart-widget.ts +89 -0
  1949. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.component.ts +200 -0
  1950. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.spec.ts +373 -0
  1951. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/stat-widget.ts +80 -0
  1952. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget-i18n.spec.ts +176 -0
  1953. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.component.ts +230 -0
  1954. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.spec.ts +332 -0
  1955. package/dist/templates/frontend/application/src/@aurora/modules/widget/archetypes/table-widget.ts +67 -0
  1956. package/dist/templates/frontend/application/src/@aurora/modules/widget/aurora-widget-def.ts +101 -0
  1957. package/dist/templates/frontend/application/src/@aurora/modules/widget/index.ts +17 -0
  1958. package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.spec.ts +75 -0
  1959. package/dist/templates/frontend/application/src/@aurora/modules/widget/refreshable-widget.ts +32 -0
  1960. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-category.ts +16 -0
  1961. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.spec.ts +298 -0
  1962. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source-runner.ts +103 -0
  1963. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-data-source.ts +68 -0
  1964. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.spec.ts +195 -0
  1965. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-permission-filter.ts +84 -0
  1966. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.spec.ts +91 -0
  1967. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-registry.ts +38 -0
  1968. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.spec.ts +85 -0
  1969. package/dist/templates/frontend/application/src/@aurora/modules/widget/widget-scope-deriver.ts +41 -0
  1970. package/dist/templates/frontend/application/src/@aurora/pipes/index.ts +1 -0
  1971. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.spec.ts +81 -0
  1972. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message-legacy.pipe.ts +50 -0
  1973. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.spec.ts +197 -0
  1974. package/dist/templates/frontend/application/src/@aurora/pipes/validation-message.pipe.ts +97 -21
  1975. package/dist/templates/frontend/application/src/@aurora/query-dsl/index.ts +32 -0
  1976. package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.spec.ts +94 -0
  1977. package/dist/templates/frontend/application/src/@aurora/query-dsl/query-statement.type-contract.ts +38 -0
  1978. package/dist/templates/frontend/application/src/app/app.config.ts +16 -6
  1979. package/dist/templates/frontend/application/src/app/app.routes.ts +1 -1
  1980. package/dist/templates/frontend/application/src/app/app.ts +1 -2
  1981. package/dist/templates/frontend/application/src/app/aurora-widget.providers.ts +21 -0
  1982. package/dist/templates/frontend/application/src/app/aurora.provider.spec.ts +1 -2
  1983. package/dist/templates/frontend/application/src/app/aurora.provider.ts +12 -5
  1984. package/dist/templates/frontend/application/src/app/domains/admin/home/home.component.ts +15 -0
  1985. package/dist/templates/frontend/application/src/app/domains/admin/layout/layout.component.ts +2 -3
  1986. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.spec.ts +111 -0
  1987. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/app-sidebar.ts +74 -21
  1988. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.spec.ts +124 -0
  1989. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-active.ts +48 -0
  1990. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.spec.ts +203 -0
  1991. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-filter.ts +122 -0
  1992. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-main.ts +19 -28
  1993. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-secondary.ts +1 -2
  1994. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-sub-items.ts +10 -23
  1995. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-user.ts +1 -2
  1996. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/types.ts +4 -0
  1997. package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.spec.ts +153 -0
  1998. package/dist/templates/frontend/application/src/app/domains/admin/layout/site-header.ts +109 -31
  1999. package/dist/templates/frontend/application/src/app/domains/admin/navigation-data.ts +4 -20
  2000. package/dist/templates/frontend/application/src/app/domains/admin/routes.ts +4 -3
  2001. package/dist/templates/frontend/application/src/app/domains/auth/callback-error/callback-error.component.ts +1 -2
  2002. package/dist/templates/frontend/application/src/app/domains/auth/layout.ts +1 -2
  2003. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.spec.ts +32 -31
  2004. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/login-form.ts +23 -33
  2005. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/oauth-session.service.ts +2 -4
  2006. package/dist/templates/frontend/application/src/app/domains/auth/sign-in/sign-in.component.ts +1 -2
  2007. package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.spec.ts +13 -11
  2008. package/dist/templates/frontend/application/src/app/domains/auth/sign-out/sign-out.component.ts +6 -9
  2009. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/sign-up.component.ts +1 -2
  2010. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.spec.ts +60 -0
  2011. package/dist/templates/frontend/application/src/app/domains/auth/sign-up/signup-form.ts +25 -16
  2012. package/dist/templates/frontend/application/src/app/domains/auth/signed-out/signed-out.component.ts +1 -2
  2013. package/dist/templates/frontend/application/src/app/transloco-lang.factory.spec.ts +40 -0
  2014. package/dist/templates/frontend/application/src/app/transloco-lang.factory.ts +28 -0
  2015. package/dist/templates/frontend/application/src/app/transloco-loader.ts +2 -2
  2016. package/dist/templates/frontend/application/src/environments/environment.dev.ts +43 -3
  2017. package/dist/templates/frontend/application/src/environments/environment.local.ts +44 -4
  2018. package/dist/templates/frontend/application/src/environments/environment.prod.ts +43 -3
  2019. package/dist/templates/frontend/application/src/environments/environment.qa.ts +43 -3
  2020. package/dist/templates/frontend/application/src/environments/environment.ts +43 -3
  2021. package/dist/templates/frontend/application/src/environments/environment.type.ts +48 -0
  2022. package/dist/templates/frontend/application/src/index.html +21 -1
  2023. package/dist/templates/frontend/application/src/styles.css +772 -8
  2024. package/dist/templates/frontend/application/tsconfig.app.json +3 -9
  2025. package/dist/templates/frontend/application/tsconfig.json +17 -1
  2026. package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/en.json +41 -0
  2027. package/dist/templates/frontend/packages/dashboard/public/i18n/dashboard/es.json +41 -0
  2028. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/dashboard.routes.ts +8 -0
  2029. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard-i18n.spec.ts +342 -0
  2030. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.spec.ts +349 -0
  2031. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.component.ts +622 -0
  2032. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.spec.ts +152 -0
  2033. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.helpers.ts +79 -0
  2034. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/dashboard.orchestration.ts +159 -0
  2035. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/index.ts +1 -0
  2036. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog-dialog.component.ts +295 -0
  2037. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.spec.ts +202 -0
  2038. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/features/widget-catalog.helpers.ts +58 -0
  2039. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/index.ts +3 -0
  2040. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.spec.ts +142 -0
  2041. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.graphql.ts +48 -0
  2042. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.service.ts +71 -0
  2043. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/data-access/layout.types.ts +44 -0
  2044. package/dist/templates/frontend/packages/dashboard/src/app/domains/admin/apps/dashboard/layout/index.ts +1 -0
  2045. package/dist/templates/frontend/packages/hub/public/i18n/hub/en.json +50 -0
  2046. package/dist/templates/frontend/packages/hub/public/i18n/hub/es.json +50 -0
  2047. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/app.columns.ts +124 -0
  2048. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.detail-config.ts +12 -0
  2049. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.graphql.ts +162 -0
  2050. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.list-config.ts +13 -0
  2051. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/app.resolvers.ts +39 -0
  2052. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/data-access/index.ts +8 -0
  2053. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-form.component.ts +305 -0
  2054. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list-actions-cell.component.ts +75 -0
  2055. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/app-list.component.ts +433 -0
  2056. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/features/index.ts +7 -0
  2057. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app/index.ts +7 -0
  2058. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.detail-config.ts +13 -0
  2059. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.graphql.ts +156 -0
  2060. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/app-account/data-access/app-account.list-config.ts +14 -0
  2061. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub-icons.providers.ts +11 -0
  2062. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.navigation.ts +39 -0
  2063. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.routes.ts +35 -0
  2064. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/hub.types.ts +5 -0
  2065. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/index.ts +6 -0
  2066. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/data-access/launchpad.graphql.ts +48 -0
  2067. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.spec.ts +259 -0
  2068. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.component.ts +228 -0
  2069. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-app-card.helpers.ts +21 -0
  2070. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad-keyboard.helpers.ts +148 -0
  2071. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.spec.ts +493 -0
  2072. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.component.ts +612 -0
  2073. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.spec.ts +328 -0
  2074. package/dist/templates/frontend/packages/hub/src/app/domains/admin/apps/hub/launchpad/features/hub-launchpad.helpers.ts +167 -0
  2075. package/dist/templates/frontend/packages/iam/public/i18n/iam/en.json +6 -1
  2076. package/dist/templates/frontend/packages/iam/public/i18n/iam/es.json +6 -1
  2077. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.spec.ts +459 -0
  2078. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/current-account.adapter.ts +140 -0
  2079. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/adapters/index.ts +1 -0
  2080. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.spec.ts +63 -0
  2081. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.derive.ts +32 -0
  2082. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.detail-config.ts +12 -0
  2083. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.graphql.ts +287 -0
  2084. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.list-config.ts +13 -0
  2085. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.spec.ts +72 -0
  2086. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/account.resolvers.ts +123 -0
  2087. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/data-access/index.ts +12 -0
  2088. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.spec.ts +78 -0
  2089. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-detail.component.ts +170 -0
  2090. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.spec.ts +886 -0
  2091. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-form.component.ts +904 -0
  2092. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list-actions-cell.component.ts +113 -0
  2093. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/account-list.component.ts +261 -0
  2094. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/features/index.ts +6 -0
  2095. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/account/index.ts +11 -0
  2096. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.detail-config.ts +12 -0
  2097. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.graphql.ts +171 -0
  2098. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.list-config.ts +13 -0
  2099. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/bounded-context.resolvers.ts +39 -0
  2100. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/data-access/index.ts +8 -0
  2101. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-detail.component.ts +160 -0
  2102. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-form.component.ts +150 -0
  2103. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list-actions-cell.component.ts +75 -0
  2104. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/bounded-context-list.component.ts +242 -0
  2105. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/features/index.ts +8 -0
  2106. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/bounded-context/index.ts +7 -0
  2107. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam-icons.providers.ts +23 -0
  2108. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.navigation.ts +59 -0
  2109. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/iam.routes.ts +96 -0
  2110. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/index.ts +8 -0
  2111. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.detail-config.ts +12 -0
  2112. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.graphql.ts +181 -0
  2113. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.list-config.ts +13 -0
  2114. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/data-access/permission.resolvers.ts +72 -0
  2115. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/index.ts +8 -0
  2116. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form-embed.component.ts +96 -0
  2117. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-form.component.ts +118 -0
  2118. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list-actions-cell.component.ts +75 -0
  2119. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/features/permission-list.component.ts +398 -0
  2120. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/index.ts +7 -0
  2121. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission/permission.columns.ts +73 -0
  2122. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.detail-config.ts +12 -0
  2123. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.graphql.ts +200 -0
  2124. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/permission-role/data-access/permission-role.list-config.ts +13 -0
  2125. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/index.ts +8 -0
  2126. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.detail-config.ts +12 -0
  2127. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.graphql.ts +194 -0
  2128. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.list-config.ts +13 -0
  2129. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/data-access/role.resolvers.ts +39 -0
  2130. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/index.ts +8 -0
  2131. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-detail.component.ts +295 -0
  2132. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-form.component.ts +157 -0
  2133. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list-actions-cell.component.ts +75 -0
  2134. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/features/role-list.component.ts +236 -0
  2135. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/index.ts +7 -0
  2136. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role/role.columns.ts +119 -0
  2137. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.detail-config.ts +12 -0
  2138. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.graphql.ts +198 -0
  2139. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/role-account/data-access/role-account.list-config.ts +13 -0
  2140. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-email.validator.ts +31 -0
  2141. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/shared/validators/unique-username.validator.ts +29 -0
  2142. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/index.ts +8 -0
  2143. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.detail-config.ts +12 -0
  2144. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.graphql.ts +113 -0
  2145. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.list-config.ts +13 -0
  2146. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/data-access/tag.resolvers.ts +39 -0
  2147. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/index.ts +7 -0
  2148. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-form.component.ts +88 -0
  2149. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list-actions-cell.component.ts +75 -0
  2150. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/features/tag-list.component.ts +318 -0
  2151. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tag/index.ts +7 -0
  2152. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/index.ts +8 -0
  2153. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.detail-config.ts +12 -0
  2154. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.graphql.ts +223 -0
  2155. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.list-config.ts +13 -0
  2156. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/data-access/tenant.resolvers.ts +65 -0
  2157. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/index.ts +7 -0
  2158. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-form.component.ts +149 -0
  2159. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list-actions-cell.component.ts +75 -0
  2160. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/features/tenant-list.component.ts +330 -0
  2161. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/index.ts +7 -0
  2162. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant/tenant.columns.ts +103 -0
  2163. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.detail-config.ts +12 -0
  2164. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.graphql.ts +203 -0
  2165. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/tenant-account/data-access/tenant-account.list-config.ts +13 -0
  2166. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/index.ts +8 -0
  2167. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.detail-config.ts +11 -0
  2168. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.graphql.ts +180 -0
  2169. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.list-config.ts +13 -0
  2170. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/data-access/user.resolvers.ts +39 -0
  2171. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/features/index.ts +5 -0
  2172. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/user/index.ts +6 -0
  2173. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.spec.ts +262 -0
  2174. package/dist/templates/frontend/packages/iam/src/app/domains/admin/apps/iam/widgets/iam.widgets.ts +156 -0
  2175. package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/en.json +6 -4
  2176. package/dist/templates/frontend/packages/o-auth/public/i18n/o-auth/es.json +7 -5
  2177. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/access-token.columns.ts +86 -0
  2178. 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
  2179. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.graphql.ts +117 -0
  2180. 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
  2181. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/access-token.resolvers.ts +43 -0
  2182. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/data-access/index.ts +8 -0
  2183. 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
  2184. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/access-token-list.component.ts +224 -0
  2185. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/features/index.ts +6 -0
  2186. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/access-token/index.ts +7 -0
  2187. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/application.columns.ts +78 -0
  2188. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.detail-config.ts +12 -0
  2189. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.graphql.ts +140 -0
  2190. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.list-config.ts +13 -0
  2191. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/application.resolvers.ts +39 -0
  2192. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/data-access/index.ts +8 -0
  2193. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-form.component.ts +162 -0
  2194. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list-actions-cell.component.ts +75 -0
  2195. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/application-list.component.ts +323 -0
  2196. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/features/index.ts +7 -0
  2197. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application/index.ts +7 -0
  2198. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/application-client/data-access/application-client.graphql.ts +158 -0
  2199. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/authorization-code.columns.ts +123 -0
  2200. 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
  2201. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.graphql.ts +168 -0
  2202. 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
  2203. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/authorization-code.resolvers.ts +47 -0
  2204. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/data-access/index.ts +8 -0
  2205. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-form.component.ts +199 -0
  2206. 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
  2207. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/authorization-code-list.component.ts +334 -0
  2208. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/features/index.ts +7 -0
  2209. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/authorization-code/index.ts +7 -0
  2210. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/client.columns.ts +145 -0
  2211. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.detail-config.ts +12 -0
  2212. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.graphql.ts +134 -0
  2213. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.list-config.ts +13 -0
  2214. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/client.resolvers.ts +69 -0
  2215. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/data-access/index.ts +8 -0
  2216. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-form.component.ts +291 -0
  2217. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list-actions-cell.component.ts +75 -0
  2218. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/client-list.component.ts +335 -0
  2219. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/features/index.ts +7 -0
  2220. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/client/index.ts +7 -0
  2221. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth-icons.providers.ts +21 -0
  2222. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/o-auth.navigation.ts +59 -0
  2223. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/index.ts +8 -0
  2224. 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
  2225. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.graphql.ts +104 -0
  2226. 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
  2227. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/data-access/refresh-token.resolvers.ts +39 -0
  2228. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/index.ts +6 -0
  2229. 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
  2230. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/features/refresh-token-list.component.ts +221 -0
  2231. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/index.ts +7 -0
  2232. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/refresh-token/refresh-token.columns.ts +60 -0
  2233. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/index.ts +8 -0
  2234. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.detail-config.ts +12 -0
  2235. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.graphql.ts +120 -0
  2236. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.list-config.ts +13 -0
  2237. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/data-access/scope.resolvers.ts +39 -0
  2238. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/index.ts +7 -0
  2239. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.spec.ts +75 -0
  2240. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-form.component.ts +116 -0
  2241. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list-actions-cell.component.ts +75 -0
  2242. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/features/scope-list.component.ts +318 -0
  2243. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/scope/index.ts +7 -0
  2244. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.spec.ts +338 -0
  2245. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/apps/o-auth/widgets/o-auth.widgets.ts +230 -0
  2246. package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/en.json +92 -0
  2247. package/dist/templates/frontend/packages/queue-manager/public/i18n/queue-manager/es.json +92 -0
  2248. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/index.ts +1 -0
  2249. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.graphql.ts +214 -0
  2250. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/queue.service.ts +301 -0
  2251. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.spec.ts +281 -0
  2252. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/data-access/use-queue-polling.ts +87 -0
  2253. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.spec.ts +345 -0
  2254. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-data-dialog.component.ts +246 -0
  2255. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/job-drawer.component.ts +492 -0
  2256. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-detail.component.ts +666 -0
  2257. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/features/queue-list.component.ts +547 -0
  2258. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue/index.ts +6 -0
  2259. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager-icons.providers.ts +5 -0
  2260. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.navigation.ts +11 -0
  2261. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.routes.ts +15 -0
  2262. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.spec.ts +154 -0
  2263. package/dist/templates/frontend/packages/queue-manager/src/app/domains/admin/apps/queue-manager/queue-manager.types.ts +192 -0
  2264. package/dist/templates/monorepo/.backlog/config.yml +38 -0
  2265. package/dist/templates/monorepo/.claude/agents/jd-fix-agent.md +32 -0
  2266. package/dist/templates/monorepo/.claude/agents/jd-judge-a.md +36 -0
  2267. package/dist/templates/monorepo/.claude/agents/jd-judge-b.md +36 -0
  2268. package/dist/templates/monorepo/.claude/commands/business-rules/audit.md +2 -0
  2269. package/dist/templates/monorepo/.claude/commands/business-rules/check.md +2 -0
  2270. package/dist/templates/monorepo/.claude/commands/business-rules/document.md +4 -1
  2271. package/dist/templates/monorepo/.claude/commands/business-rules/promote.md +2 -0
  2272. package/dist/templates/monorepo/.claude/commands/opsx/apply.md +36 -7
  2273. package/dist/templates/monorepo/.claude/commands/opsx/archive.md +91 -26
  2274. package/dist/templates/monorepo/.claude/commands/opsx/explore.md +51 -27
  2275. package/dist/templates/monorepo/.claude/commands/opsx/propose.md +64 -26
  2276. package/dist/templates/monorepo/.claude/commands/opsx/sync.md +258 -0
  2277. package/dist/templates/monorepo/.claude/hooks/__fixtures__/br-hr-regression-baseline.txt +251 -0
  2278. package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.test.ts +470 -0
  2279. package/dist/templates/monorepo/.claude/hooks/architecture-checkpoint.ts +395 -43
  2280. package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.test.ts +158 -0
  2281. package/dist/templates/monorepo/.claude/hooks/auto-allow-readonly-bash.ts +314 -0
  2282. package/dist/templates/monorepo/.claude/hooks/business-rules-injector.test.ts +387 -0
  2283. package/dist/templates/monorepo/.claude/hooks/business-rules-injector.ts +231 -0
  2284. package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.test.ts +114 -0
  2285. package/dist/templates/monorepo/.claude/hooks/catalyst-regen-review.ts +260 -0
  2286. package/dist/templates/monorepo/.claude/hooks/check-required-setup.test.ts +183 -0
  2287. package/dist/templates/monorepo/.claude/hooks/check-required-setup.ts +304 -0
  2288. package/dist/templates/monorepo/.claude/hooks/format-with-prettier.ts +98 -0
  2289. package/dist/templates/monorepo/.claude/hooks/harness-rules-content-guard.ts +12 -7
  2290. package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.test.ts +453 -0
  2291. package/dist/templates/monorepo/.claude/hooks/inject-prompt-context.ts +526 -0
  2292. package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.test.ts +131 -0
  2293. package/dist/templates/monorepo/.claude/hooks/instructions-loaded-log.ts +132 -0
  2294. package/dist/templates/monorepo/.claude/hooks/lint-barrels.test.ts +232 -0
  2295. package/dist/templates/monorepo/.claude/hooks/lint-barrels.ts +317 -0
  2296. package/dist/templates/monorepo/.claude/rules/route-aurora-components.md +24 -0
  2297. package/dist/templates/monorepo/.claude/rules/route-aurora-yaml.md +29 -0
  2298. package/dist/templates/monorepo/.claude/rules/route-backend-test.md +31 -0
  2299. package/dist/templates/monorepo/.claude/rules/route-drizzle-schema.md +35 -0
  2300. package/dist/templates/monorepo/.claude/rules/route-eta.md +17 -0
  2301. package/dist/templates/monorepo/.claude/rules/route-skill-md.md +28 -0
  2302. package/dist/templates/monorepo/.claude/rules/scope-backend.md +39 -0
  2303. package/dist/templates/monorepo/.claude/rules/scope-cli.md +28 -0
  2304. package/dist/templates/monorepo/.claude/rules/scope-frontend.md +34 -0
  2305. package/dist/templates/monorepo/.claude/scheduled_tasks.lock +1 -0
  2306. package/dist/templates/monorepo/.claude/scripts/catalyst-dev-mode.sh +2 -2
  2307. package/dist/templates/monorepo/.claude/scripts/daily-tips.txt +1 -0
  2308. package/dist/templates/monorepo/.claude/scripts/generate-skills-index.test.ts +397 -0
  2309. package/dist/templates/monorepo/.claude/scripts/generate-skills-index.ts +196 -23
  2310. package/dist/templates/monorepo/.claude/scripts/status-line.sh +13 -2
  2311. package/dist/templates/monorepo/.claude/settings.json +103 -16
  2312. package/dist/templates/monorepo/.claude/skills/REGISTRY.md +59 -26
  2313. package/dist/templates/monorepo/.claude/skills/business-rules-guard/SKILL.md +15 -2
  2314. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/audit.md +9 -7
  2315. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/format.md +70 -2
  2316. package/dist/templates/monorepo/.claude/skills/business-rules-guard/references/workflow.md +2 -1
  2317. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/SKILL.md +604 -0
  2318. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/frontier-worker-addendum.md +137 -0
  2319. package/dist/templates/monorepo/.claude/skills/catalyst-backlog/worker-system-prompt.md +88 -0
  2320. package/dist/templates/monorepo/.claude/skills/catalyst-cli/SKILL.md +117 -38
  2321. package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/origin-conciliation.md +116 -20
  2322. package/dist/templates/monorepo/.claude/skills/catalyst-cli/references/schema-versioning.md +1 -1
  2323. package/dist/templates/monorepo/.claude/skills/catalyst-delegation/SKILL.md +180 -0
  2324. package/dist/templates/monorepo/.claude/skills/catalyst-langs/SKILL.md +241 -0
  2325. package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/SKILL.md +236 -0
  2326. package/dist/templates/monorepo/.claude/skills/catalyst-query-dsl/references/query-language.md +265 -0
  2327. package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/SKILL.md +232 -0
  2328. package/dist/templates/monorepo/.claude/skills/catalyst-report-creator/references/cube-authoring.md +155 -0
  2329. package/dist/templates/monorepo/.claude/skills/catalyst-schema/SKILL.md +93 -5
  2330. package/dist/templates/monorepo/.claude/skills/catalyst-schema/patterns-workflow.md +24 -0
  2331. package/dist/templates/monorepo/.claude/skills/catalyst-schema/types-reference.md +2 -1
  2332. package/dist/templates/monorepo/.claude/skills/catalyst-skill-creator/SKILL.md +10 -2
  2333. package/dist/templates/monorepo/.claude/skills/catalyst-update-skill-registry/SKILL.md +54 -16
  2334. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/SKILL.md +16 -12
  2335. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/enforcement.md +7 -6
  2336. package/dist/templates/monorepo/.claude/skills/harness-rules-guard/references/format.md +140 -6
  2337. package/dist/templates/monorepo/.claude/skills/judgment-day/SKILL.md +8 -0
  2338. package/dist/templates/monorepo/.claude/skills/openspec-apply-change/SKILL.md +35 -6
  2339. package/dist/templates/monorepo/.claude/skills/openspec-archive-change/SKILL.md +87 -22
  2340. package/dist/templates/monorepo/.claude/skills/openspec-explore/SKILL.md +89 -65
  2341. package/dist/templates/monorepo/.claude/skills/openspec-propose/SKILL.md +62 -24
  2342. package/dist/templates/monorepo/.claude/skills/openspec-sync-specs/SKILL.md +262 -0
  2343. package/dist/templates/monorepo/.claude/skills/typescript/SKILL.md +5 -0
  2344. package/dist/templates/monorepo/.claude/skills-triggers-index.json +128 -0
  2345. package/dist/templates/monorepo/.husky/pre-commit +26 -0
  2346. package/dist/templates/monorepo/.mcp.json +7 -0
  2347. package/dist/templates/monorepo/CLAUDE.md +204 -303
  2348. package/dist/templates/monorepo/cliter/business-rules-index.json +11044 -259
  2349. package/dist/templates/monorepo/cliter/harness-rules/barrels.md +294 -0
  2350. package/dist/templates/monorepo/cliter/harness-rules/bridges.md +88 -0
  2351. package/dist/templates/monorepo/cliter/harness-rules/dev-modes.md +85 -0
  2352. package/dist/templates/monorepo/cliter/harness-rules/docs-location.md +67 -0
  2353. package/dist/templates/monorepo/cliter/harness-rules/generated-code.md +77 -0
  2354. package/dist/templates/monorepo/cliter/harness-rules/module-graph.md +89 -0
  2355. package/dist/templates/monorepo/cliter/harness-rules/modules.md +78 -0
  2356. package/dist/templates/monorepo/cliter/harness-rules/persistence-integrity.md +92 -0
  2357. package/dist/templates/monorepo/cliter/harness-rules/ports-adapters.md +82 -0
  2358. package/dist/templates/monorepo/cliter/harness-rules/protocol-flows.md +88 -0
  2359. package/dist/templates/monorepo/cliter/harness-rules/types-acl.md +93 -0
  2360. package/dist/templates/monorepo/cliter/harness-rules-index.json +857 -0
  2361. package/dist/templates/monorepo/docs/AURORA-CATALYST-BRIEF.md +253 -0
  2362. package/dist/templates/monorepo/docs/_catalog-schema-base.json +1 -1
  2363. package/dist/templates/monorepo/docs/business-rules/ARCHITECTURE.md +14 -11
  2364. package/dist/templates/monorepo/docs/business-rules/INDEX.md +108 -5
  2365. package/dist/templates/monorepo/docs/business-rules/MIGRATION.md +11 -52
  2366. package/dist/templates/monorepo/docs/business-rules/README.md +42 -925
  2367. package/dist/templates/monorepo/docs/harness-rules/INDEX.md +11 -7
  2368. package/dist/templates/monorepo/docs/harness-rules/README.md +37 -393
  2369. package/dist/templates/monorepo/docs/langs/README.md +260 -0
  2370. package/dist/templates/monorepo/docs/superpowers/specs/2026-07-02-report-creator-skill-design.md +176 -0
  2371. package/dist/templates/monorepo/openspec/config.yaml +31 -7
  2372. package/dist/templates/monorepo/package.json +14 -3
  2373. package/dist/templates/monorepo/pnpm-workspace.yaml +10 -2
  2374. package/dist/templates/monorepo/scripts/_catalog-runtime/README.md +30 -0
  2375. package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.determinism.test.ts +81 -0
  2376. package/dist/templates/monorepo/scripts/_catalog-runtime/build-index.ts +214 -0
  2377. package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.test.ts +146 -0
  2378. package/dist/templates/monorepo/scripts/_catalog-runtime/catalog-index.ts +120 -0
  2379. package/dist/templates/monorepo/scripts/_catalog-runtime/check-core.ts +280 -0
  2380. package/dist/templates/monorepo/scripts/_catalog-runtime/cli.ts +26 -0
  2381. package/dist/templates/monorepo/scripts/_catalog-runtime/frontmatter.ts +15 -0
  2382. package/dist/templates/monorepo/scripts/_catalog-runtime/glob.ts +86 -0
  2383. package/dist/templates/monorepo/scripts/_catalog-runtime/index.ts +74 -0
  2384. package/dist/templates/monorepo/scripts/_catalog-runtime/parse.ts +159 -0
  2385. package/dist/templates/monorepo/scripts/_catalog-runtime/repo-root.ts +36 -0
  2386. package/dist/templates/monorepo/scripts/_catalog-runtime/types.ts +154 -0
  2387. package/dist/templates/monorepo/scripts/_catalog-runtime/validate.ts +254 -0
  2388. package/dist/templates/monorepo/scripts/backlog/README.md +1601 -0
  2389. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-budget.jsonl +10 -0
  2390. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-crash.jsonl +9 -0
  2391. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-max-turns.jsonl +10 -0
  2392. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance-prose.jsonl +5 -0
  2393. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-needs-guidance.jsonl +10 -0
  2394. package/dist/templates/monorepo/scripts/backlog/__fixtures__/stream-success.jsonl +10 -0
  2395. package/dist/templates/monorepo/scripts/backlog/attempt.test.ts +290 -0
  2396. package/dist/templates/monorepo/scripts/backlog/attempt.ts +179 -0
  2397. package/dist/templates/monorepo/scripts/backlog/close.test.ts +3358 -0
  2398. package/dist/templates/monorepo/scripts/backlog/close.ts +2066 -0
  2399. package/dist/templates/monorepo/scripts/backlog/contract.test.ts +174 -0
  2400. package/dist/templates/monorepo/scripts/backlog/dev.aurora.backlog-dispatch.plist +76 -0
  2401. package/dist/templates/monorepo/scripts/backlog/dispatch.test.ts +2607 -0
  2402. package/dist/templates/monorepo/scripts/backlog/dispatch.ts +2304 -0
  2403. package/dist/templates/monorepo/scripts/backlog/entry.test.ts +1545 -0
  2404. package/dist/templates/monorepo/scripts/backlog/entry.ts +734 -0
  2405. package/dist/templates/monorepo/scripts/backlog/guards.test.ts +1766 -0
  2406. package/dist/templates/monorepo/scripts/backlog/guards.ts +1234 -0
  2407. package/dist/templates/monorepo/scripts/backlog/lanes/frontier.settings.json +104 -0
  2408. package/dist/templates/monorepo/scripts/backlog/lanes/local.settings.json +44 -0
  2409. package/dist/templates/monorepo/scripts/backlog/lanes.json +28 -0
  2410. package/dist/templates/monorepo/scripts/backlog/launch.test.ts +2750 -0
  2411. package/dist/templates/monorepo/scripts/backlog/launch.ts +1125 -0
  2412. package/dist/templates/monorepo/scripts/backlog/maintenance.test.ts +1965 -0
  2413. package/dist/templates/monorepo/scripts/backlog/maintenance.ts +1185 -0
  2414. package/dist/templates/monorepo/scripts/backlog/notify.test.ts +60 -0
  2415. package/dist/templates/monorepo/scripts/backlog/notify.ts +47 -0
  2416. package/dist/templates/monorepo/scripts/backlog/parent.test.ts +221 -0
  2417. package/dist/templates/monorepo/scripts/backlog/parent.ts +174 -0
  2418. package/dist/templates/monorepo/scripts/backlog/prompt.test.ts +928 -0
  2419. package/dist/templates/monorepo/scripts/backlog/prompt.ts +622 -0
  2420. package/dist/templates/monorepo/scripts/backlog/render.test.ts +247 -0
  2421. package/dist/templates/monorepo/scripts/backlog/render.ts +289 -0
  2422. package/dist/templates/monorepo/scripts/backlog/reviewer.test.ts +354 -0
  2423. package/dist/templates/monorepo/scripts/backlog/reviewer.ts +308 -0
  2424. package/dist/templates/monorepo/scripts/backlog/slots.test.ts +991 -0
  2425. package/dist/templates/monorepo/scripts/backlog/slots.ts +641 -0
  2426. package/dist/templates/monorepo/scripts/backlog/task-view.test.ts +763 -0
  2427. package/dist/templates/monorepo/scripts/backlog/task-view.ts +444 -0
  2428. package/dist/templates/monorepo/scripts/backlog/types.ts +256 -0
  2429. package/dist/templates/monorepo/scripts/backlog/watch.test.ts +360 -0
  2430. package/dist/templates/monorepo/scripts/backlog/watch.ts +333 -0
  2431. package/dist/templates/monorepo/scripts/backlog/worker-edit.test.ts +469 -0
  2432. package/dist/templates/monorepo/scripts/backlog/worker-edit.ts +464 -0
  2433. package/dist/templates/monorepo/scripts/business-rules/document.ts +2 -1
  2434. package/dist/templates/monorepo/scripts/business-rules/parse-catalog.ts +2 -1
  2435. package/dist/templates/monorepo/scripts/catalyst/regen-review.test.ts +313 -0
  2436. package/dist/templates/monorepo/scripts/catalyst/regen-review.ts +287 -0
  2437. package/dist/templates/monorepo/scripts/harness-rules/audit.ts +620 -0
  2438. package/dist/templates/monorepo/scripts/harness-rules/check.ts +37 -0
  2439. package/dist/templates/monorepo/scripts/harness-rules/generate-index.ts +215 -0
  2440. package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.test.ts +872 -0
  2441. package/dist/templates/monorepo/scripts/harness-rules/lint-barrels.ts +1016 -0
  2442. package/dist/templates/monorepo/scripts/harness-rules/types.ts +62 -0
  2443. package/dist/templates/monorepo/scripts/harness-rules/validate-catalog.ts +121 -0
  2444. package/oclif.manifest.json +242 -224
  2445. package/package.json +14 -10
  2446. package/dist/generator/engine/code-writer/export-references.d.ts +0 -10
  2447. package/dist/generator/engine/code-writer/export-references.js +0 -69
  2448. package/dist/templates/backend/application/src/@aurora/services/bootstrap.service.ts +0 -20
  2449. package/dist/templates/backend/application/src/i18n/en/iam.json +0 -18
  2450. package/dist/templates/backend/application/src/i18n/es/iam.json +0 -18
  2451. package/dist/templates/backend/application/test/authentication-none-mode.e2e-spec.ts +0 -138
  2452. package/dist/templates/backend/packages/iam/src/@app/iam/account/application/create/iam-create-accounts.handler.ts +0 -26
  2453. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.model.ts +0 -197
  2454. package/dist/templates/backend/packages/iam/src/@app/iam/account/infrastructure/sequelize/iam-sequelize-account.repository.ts +0 -71
  2455. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.model.ts +0 -94
  2456. package/dist/templates/backend/packages/iam/src/@app/iam/bounded-context/infrastructure/sequelize/iam-sequelize-bounded-context.repository.ts +0 -24
  2457. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.model.ts +0 -93
  2458. package/dist/templates/backend/packages/iam/src/@app/iam/permission/infrastructure/sequelize/iam-sequelize-permission.repository.ts +0 -61
  2459. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.model.ts +0 -48
  2460. package/dist/templates/backend/packages/iam/src/@app/iam/permission-role/infrastructure/sequelize/iam-sequelize-permission-role.repository.ts +0 -24
  2461. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.model.ts +0 -116
  2462. package/dist/templates/backend/packages/iam/src/@app/iam/role/infrastructure/sequelize/iam-sequelize-role.repository.ts +0 -68
  2463. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.model.ts +0 -48
  2464. package/dist/templates/backend/packages/iam/src/@app/iam/role-account/infrastructure/sequelize/iam-sequelize-role-account.repository.ts +0 -24
  2465. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.model.ts +0 -70
  2466. package/dist/templates/backend/packages/iam/src/@app/iam/tag/infrastructure/sequelize/iam-sequelize-tag.repository.ts +0 -21
  2467. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.model.ts +0 -121
  2468. package/dist/templates/backend/packages/iam/src/@app/iam/tenant/infrastructure/sequelize/iam-sequelize-tenant.repository.ts +0 -57
  2469. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.model.ts +0 -48
  2470. package/dist/templates/backend/packages/iam/src/@app/iam/tenant-account/infrastructure/sequelize/iam-sequelize-tenant-account.repository.ts +0 -24
  2471. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.model.ts +0 -144
  2472. package/dist/templates/backend/packages/iam/src/@app/iam/user/infrastructure/sequelize/iam-sequelize-user.repository.ts +0 -21
  2473. package/dist/templates/backend/packages/iam/src/@bridges/iam/index.ts +0 -3
  2474. package/dist/templates/backend/packages/iam/src/@bridges/iam/user/index.ts +0 -1
  2475. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.model.ts +0 -118
  2476. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/access-token/infrastructure/sequelize/o-auth-sequelize-access-token.repository.ts +0 -24
  2477. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.model.ts +0 -101
  2478. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application/infrastructure/sequelize/o-auth-sequelize-application.repository.ts +0 -61
  2479. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.model.ts +0 -48
  2480. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/application-client/infrastructure/sequelize/o-auth-sequelize-application-client.repository.ts +0 -24
  2481. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.model.ts +0 -146
  2482. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/authorization-code/infrastructure/sequelize/o-auth-sequelize-authorization-code.repository.ts +0 -44
  2483. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.model.ts +0 -146
  2484. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/client/infrastructure/sequelize/o-auth-sequelize-client.repository.ts +0 -57
  2485. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.model.ts +0 -139
  2486. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/credential/infrastructure/sequelize/o-auth-sequelize-credential.repository.ts +0 -24
  2487. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.model.ts +0 -98
  2488. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/refresh-token/infrastructure/sequelize/o-auth-sequelize-refresh-token.repository.ts +0 -24
  2489. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.model.ts +0 -84
  2490. package/dist/templates/backend/packages/o-auth/src/@app/o-auth/scope/infrastructure/sequelize/o-auth-sequelize-scope.repository.ts +0 -24
  2491. package/dist/templates/backend/packages/o-auth/src/@bridges/o-auth/client/index.ts +0 -1
  2492. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.model.ts.eta +0 -213
  2493. package/dist/templates/codegen/backend/@app/__module_name__/infrastructure/sequelize/__bounded_context_name__-sequelize-__module_name__.repository.ts.eta +0 -94
  2494. package/dist/templates/codegen/partials/declare-i18n-repository.eta +0 -3
  2495. package/dist/templates/codegen/partials/import-i18n-repository.eta +0 -3
  2496. package/dist/templates/frontend/application/libs/ui/icon/src/index.ts +0 -7
  2497. package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.token.ts +0 -20
  2498. package/dist/templates/frontend/application/libs/ui/icon/src/lib/hlm-icon.ts +0 -42
  2499. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.spec.ts +0 -141
  2500. package/dist/templates/frontend/application/src/@aurora/components/data-table/lib/get-relation-includes.ts +0 -47
  2501. package/dist/templates/frontend/application/src/@aurora/modules/graphql/parse-gql-fields.ts +0 -32
  2502. package/dist/templates/frontend/application/src/app/aurora.types.ts +0 -2671
  2503. package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/dashboard.routes.ts +0 -8
  2504. package/dist/templates/frontend/application/src/app/domains/admin/bounded-contexts/dashboard/features/dashboard.component.ts +0 -13
  2505. package/dist/templates/frontend/application/src/app/domains/admin/layout/sidebar/nav-projects.ts +0 -106
  2506. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.detail-config.ts +0 -13
  2507. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.graphql.ts +0 -291
  2508. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.list-config.ts +0 -12
  2509. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/account.resolvers.ts +0 -121
  2510. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/data-access/current-account.adapter.ts +0 -34
  2511. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-detail.component.ts +0 -165
  2512. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-form.component.ts +0 -915
  2513. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list-actions-cell.component.ts +0 -85
  2514. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/features/account-list.component.ts +0 -260
  2515. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/account/index.ts +0 -8
  2516. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.detail-config.ts +0 -18
  2517. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.graphql.ts +0 -158
  2518. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.list-config.ts +0 -12
  2519. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/data-access/bounded-context.resolvers.ts +0 -36
  2520. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-detail.component.ts +0 -157
  2521. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-form.component.ts +0 -154
  2522. 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
  2523. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/features/bounded-context-list.component.ts +0 -247
  2524. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/bounded-context/index.ts +0 -7
  2525. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam-icons.providers.ts +0 -23
  2526. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.navigation.ts +0 -42
  2527. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/iam.routes.ts +0 -98
  2528. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.detail-config.ts +0 -13
  2529. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.graphql.ts +0 -163
  2530. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.list-config.ts +0 -12
  2531. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/data-access/permission.resolvers.ts +0 -72
  2532. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form-embed.component.ts +0 -99
  2533. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-form.component.ts +0 -141
  2534. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list-actions-cell.component.ts +0 -85
  2535. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/features/permission-list.component.ts +0 -404
  2536. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/index.ts +0 -7
  2537. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission/permission.columns.ts +0 -56
  2538. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.detail-config.ts +0 -18
  2539. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.graphql.ts +0 -148
  2540. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.list-config.ts +0 -12
  2541. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/data-access/permission-role.resolvers.ts +0 -40
  2542. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/index.ts +0 -7
  2543. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/permission-role/permission-role.columns.ts +0 -38
  2544. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.detail-config.ts +0 -13
  2545. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.graphql.ts +0 -207
  2546. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.list-config.ts +0 -12
  2547. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/data-access/role.resolvers.ts +0 -68
  2548. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-detail.component.ts +0 -312
  2549. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-form.component.ts +0 -162
  2550. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list-actions-cell.component.ts +0 -85
  2551. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/features/role-list.component.ts +0 -248
  2552. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/index.ts +0 -7
  2553. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role/role.columns.ts +0 -85
  2554. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.detail-config.ts +0 -13
  2555. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.graphql.ts +0 -158
  2556. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/role-account/data-access/role-account.list-config.ts +0 -12
  2557. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-email.validator.ts +0 -31
  2558. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/shared/validators/unique-username.validator.ts +0 -29
  2559. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.detail-config.ts +0 -13
  2560. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.graphql.ts +0 -129
  2561. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.list-config.ts +0 -14
  2562. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/data-access/tag.resolvers.ts +0 -36
  2563. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-form.component.ts +0 -93
  2564. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list-actions-cell.component.ts +0 -85
  2565. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/features/tag-list.component.ts +0 -321
  2566. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tag/index.ts +0 -7
  2567. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.detail-config.ts +0 -13
  2568. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.graphql.ts +0 -203
  2569. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.list-config.ts +0 -12
  2570. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/data-access/tenant.resolvers.ts +0 -71
  2571. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-form.component.ts +0 -169
  2572. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list-actions-cell.component.ts +0 -85
  2573. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/features/tenant-list.component.ts +0 -333
  2574. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/index.ts +0 -7
  2575. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant/tenant.columns.ts +0 -86
  2576. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.detail-config.ts +0 -18
  2577. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.graphql.ts +0 -158
  2578. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.list-config.ts +0 -12
  2579. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/data-access/tenant-account.resolvers.ts +0 -40
  2580. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/index.ts +0 -7
  2581. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/tenant-account/tenant-account.columns.ts +0 -38
  2582. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.detail-config.ts +0 -13
  2583. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.graphql.ts +0 -152
  2584. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.list-config.ts +0 -12
  2585. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/data-access/user.resolvers.ts +0 -36
  2586. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-detail.component.ts +0 -124
  2587. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-form.component.ts +0 -215
  2588. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list-actions-cell.component.ts +0 -85
  2589. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/features/user-list.component.ts +0 -237
  2590. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/index.ts +0 -7
  2591. package/dist/templates/frontend/packages/iam/src/app/domains/admin/bounded-contexts/iam/user/user.columns.ts +0 -124
  2592. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/access-token.columns.ts +0 -97
  2593. 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
  2594. 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
  2595. 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
  2596. 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
  2597. 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
  2598. 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
  2599. 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
  2600. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/access-token/index.ts +0 -7
  2601. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/application.columns.ts +0 -73
  2602. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.detail-config.ts +0 -13
  2603. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.graphql.ts +0 -146
  2604. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.list-config.ts +0 -14
  2605. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/data-access/application.resolvers.ts +0 -36
  2606. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-form.component.ts +0 -160
  2607. 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
  2608. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/features/application-list.component.ts +0 -326
  2609. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/application/index.ts +0 -7
  2610. 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
  2611. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/authorization-code.columns.ts +0 -123
  2612. 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
  2613. 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
  2614. 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
  2615. 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
  2616. 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
  2617. 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
  2618. 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
  2619. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/authorization-code/index.ts +0 -7
  2620. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/client.columns.ts +0 -140
  2621. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.detail-config.ts +0 -13
  2622. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.graphql.ts +0 -141
  2623. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.list-config.ts +0 -14
  2624. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/data-access/client.resolvers.ts +0 -97
  2625. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-form.component.ts +0 -358
  2626. 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
  2627. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/features/client-list.component.ts +0 -359
  2628. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/client/index.ts +0 -7
  2629. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth-icons.providers.ts +0 -21
  2630. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/o-auth.navigation.ts +0 -52
  2631. 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
  2632. 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
  2633. 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
  2634. 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
  2635. 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
  2636. 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
  2637. 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
  2638. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/index.ts +0 -7
  2639. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/refresh-token/refresh-token.columns.ts +0 -59
  2640. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.detail-config.ts +0 -13
  2641. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.graphql.ts +0 -131
  2642. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.list-config.ts +0 -14
  2643. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/data-access/scope.resolvers.ts +0 -36
  2644. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-form.component.ts +0 -119
  2645. 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
  2646. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/features/scope-list.component.ts +0 -321
  2647. package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/bounded-contexts/o-auth/scope/index.ts +0 -7
  2648. package/dist/templates/monorepo/.claude/hooks/check-required-plugins.ts +0 -112
  2649. package/dist/templates/monorepo/.claude/hooks/inject-rules-context.ts +0 -267
  2650. package/dist/templates/monorepo/.vscode/settings.json +0 -10
  2651. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/account/account.columns.ts +0 -0
  2652. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/bounded-context/bounded-context.columns.ts +0 -0
  2653. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/iam.types.ts +0 -0
  2654. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/index.ts +0 -0
  2655. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/shared/index.ts +0 -0
  2656. /package/dist/templates/frontend/packages/iam/src/app/domains/admin/{bounded-contexts → apps}/iam/tag/tag.columns.ts +0 -0
  2657. /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
  2658. /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
  2659. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/index.ts +0 -0
  2660. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/o-auth.routes.ts +0 -0
  2661. /package/dist/templates/frontend/packages/o-auth/src/app/domains/admin/{bounded-contexts → apps}/o-auth/o-auth.types.ts +0 -0
  2662. /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,3358 @@
1
+ /**
2
+ * TDD spec for `scripts/backlog/close.ts` (tasks 3.11/3.12).
3
+ *
4
+ * Runner: `node --import tsx --test scripts/backlog/close.test.ts`
5
+ *
6
+ * Covers `planClose`'s ordering per `specs/backlog-task-dispatcher/spec.md` — "Dispatch close
7
+ * ordering" (success path), "Failure path preserves work before blocking" (save-before-release,
8
+ * push-failure keeps the slot, the terminal attempt cap); `checkScope`'s per-lane mechanical
9
+ * verification (local: declared-files allowlist + security paths; frontier: forbidden-paths list)
10
+ * per "Retry reuses the same branch and prior context" and
11
+ * `specs/headless-harness-execution/spec.md` — "Security paths never dispatch to the local lane"
12
+ * (the close-time re-check against the real diff); and `executeClose`'s actual save-before-release
13
+ * call ordering through a recording runner, for both a mechanical-step failure mid-plan and a
14
+ * session-level failure that starts the plan directly at `save-work`.
15
+ */
16
+ import assert from 'node:assert/strict';
17
+ import { execFileSync } from 'node:child_process';
18
+ import fs from 'node:fs';
19
+ import path from 'node:path';
20
+ import { describe, it } from 'node:test';
21
+ import {
22
+ buildAttemptCommitMessage,
23
+ buildPrCreateArgs,
24
+ buildPrLabelArgs,
25
+ buildPrReviewerArgs,
26
+ buildPrTitle,
27
+ buildWipCommitMessage,
28
+ checkBoardIntegrity,
29
+ checkBranchNotMerged,
30
+ checkScope,
31
+ collectAttemptDiff,
32
+ collectLeftoverFiles,
33
+ composePrBody,
34
+ evaluateAcceptanceGate,
35
+ executeClose,
36
+ findOpenPrUrl,
37
+ formatBlockComment,
38
+ HUMAN_REVIEW_SECTION_END,
39
+ HUMAN_REVIEW_SECTION_START,
40
+ needsGuidanceQuestion,
41
+ parseMirroredRoots,
42
+ planClose,
43
+ planMechanicalChecks,
44
+ resolveBaseBranch,
45
+ resolveBaseRef,
46
+ runMirrorRegen,
47
+ runScopeCheck,
48
+ sanitizeCommentBody,
49
+ touchesMirroredRoot,
50
+ upsertHumanReviewSection,
51
+ type CloseRunners,
52
+ } from './close.js';
53
+ import { HUMAN_REVIEW_PATHS } from './guards.js';
54
+ import { resolveBranch } from './slots.js';
55
+ import { EXECUTION_PATH, LANE, TASK_STATUS, TIER, type Task } from './types.js';
56
+
57
+ /** This checkout's root — `scripts/backlog/` is two levels down from it. */
58
+ const REPO_ROOT = path.resolve(import.meta.dirname, '..', '..');
59
+
60
+ // ── planClose: success ordering ────────────────────────────────────────────────
61
+
62
+ describe('planClose — success path', () => {
63
+ it('orders the local lane through board-check, scope, format/lint/test, reviewer, ac-check, PR, release, recompute, drain', () => {
64
+ const plan = planClose({ outcome: 'success', lane: LANE.LOCAL });
65
+ assert.deepEqual(
66
+ plan.map((step) => step.kind),
67
+ [
68
+ 'board-check',
69
+ 'scope-check',
70
+ 'format-lint-test',
71
+ 'mirror-regen',
72
+ 'reviewer',
73
+ 'ac-check',
74
+ 'open-pr',
75
+ 'release-slot',
76
+ 'recompute-parent',
77
+ 'drain',
78
+ ],
79
+ );
80
+ });
81
+
82
+ it('skips the extra reviewer on the frontier lane, going straight to ac-check', () => {
83
+ const plan = planClose({ outcome: 'success', lane: LANE.FRONTIER });
84
+ assert.deepEqual(
85
+ plan.map((step) => step.kind),
86
+ [
87
+ 'board-check',
88
+ 'scope-check',
89
+ 'format-lint-test',
90
+ 'mirror-regen',
91
+ 'ac-check',
92
+ 'open-pr',
93
+ 'release-slot',
94
+ 'recompute-parent',
95
+ 'drain',
96
+ ],
97
+ );
98
+ });
99
+
100
+ // J5: it runs FIRST because every step after it trusts the board — the scope check reads the
101
+ // declared files, the triad the test command, the gate and the reviewer the criteria.
102
+ it('checks the board before any step that trusts what the board says', () => {
103
+ const kinds = planClose({ outcome: 'success', lane: LANE.LOCAL }).map((step) => step.kind);
104
+ assert.equal(kinds[0], 'board-check');
105
+ });
106
+
107
+ // The mirror regen sits between the triad and the reviewer, and BOTH edges are load-bearing:
108
+ // - AFTER `format-lint-test`, because that step runs `prettier --write` over the attempt's own
109
+ // source files. A mirror regenerated before it would be a byte-copy of the UNFORMATTED source
110
+ // and would be stale again the moment the triad rewrote it.
111
+ // - BEFORE `reviewer` and `ac-check`, because the reviewer judges the diff that will actually be
112
+ // pushed. Regenerating after it would put files in the PR that no reviewer ever saw.
113
+ // - AFTER `scope-check`, which is what keeps `packages/cli/` forbidden for the WORKER: the scope
114
+ // verdict is taken over the pre-regen file set, so a hand-written mirror edit is still a
115
+ // violation and the dispatcher-owned output arrives after the judging is done.
116
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER] as const) {
117
+ it(`places mirror-regen after the triad and before the reviewer/AC gate on the ${lane} lane`, () => {
118
+ const kinds = planClose({ outcome: 'success', lane }).map((step) => step.kind);
119
+ assert.equal(kinds[kinds.indexOf('format-lint-test') + 1], 'mirror-regen');
120
+ assert.ok(kinds.indexOf('scope-check') < kinds.indexOf('mirror-regen'));
121
+ assert.ok(kinds.indexOf('mirror-regen') < kinds.indexOf('ac-check'));
122
+ assert.ok(kinds.indexOf('mirror-regen') < kinds.indexOf('open-pr'));
123
+ });
124
+ }
125
+ });
126
+
127
+ // ── planClose: failure ordering ────────────────────────────────────────────────
128
+
129
+ describe('planClose — failure path', () => {
130
+ it('a push success returns save-then-block-then-release (never release-then-save)', () => {
131
+ const plan = planClose({
132
+ outcome: 'failure',
133
+ lane: LANE.LOCAL,
134
+ reason: 'scope-check-failed',
135
+ branch: 'task/T-1',
136
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
137
+ attempt: 1,
138
+ pushSucceeded: true,
139
+ });
140
+ assert.deepEqual(
141
+ plan.map((step) => step.kind),
142
+ ['save-work', 'block', 'release-slot'],
143
+ );
144
+ });
145
+
146
+ it('a failed push keeps the slot held: save-work then block-keep-slot, no release-slot at all', () => {
147
+ const plan = planClose({
148
+ outcome: 'failure',
149
+ lane: LANE.LOCAL,
150
+ reason: 'scope-check-failed',
151
+ branch: 'task/T-1',
152
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
153
+ attempt: 1,
154
+ pushSucceeded: false,
155
+ });
156
+ assert.deepEqual(
157
+ plan.map((step) => step.kind),
158
+ ['save-work', 'block-keep-slot'],
159
+ );
160
+ assert.ok(!plan.some((step) => step.kind === 'release-slot'));
161
+ });
162
+
163
+ it('carries the block comment fields: reason, branch, compareUrl, logPath, whatToDo, attempt+1', () => {
164
+ const plan = planClose({
165
+ outcome: 'failure',
166
+ lane: LANE.LOCAL,
167
+ reason: 'scope-check-failed',
168
+ question: '¿el fichero X estaba fuera de alcance a propósito?',
169
+ branch: 'task/T-1',
170
+ compareUrl: 'https://github.com/org/repo/compare/main...task/T-1',
171
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
172
+ attempt: 1,
173
+ pushSucceeded: true,
174
+ });
175
+ const block = plan.find((step) => step.kind === 'block');
176
+ assert.ok(block && block.kind === 'block');
177
+ assert.equal(block.details.reason, 'scope-check-failed');
178
+ assert.equal(block.details.question, '¿el fichero X estaba fuera de alcance a propósito?');
179
+ assert.equal(block.details.branch, 'task/T-1');
180
+ assert.equal(block.details.compareUrl, 'https://github.com/org/repo/compare/main...task/T-1');
181
+ assert.equal(block.details.logPath, '.backlog/.dispatch/T-1/intento-1/run.log');
182
+ assert.equal(block.details.attempt, 2);
183
+ assert.equal(block.details.terminal, false);
184
+ });
185
+
186
+ it('the third failed attempt sets a terminal block flag (no further retry)', () => {
187
+ const plan = planClose({
188
+ outcome: 'failure',
189
+ lane: LANE.LOCAL,
190
+ reason: 'scoped-test-failed',
191
+ branch: 'task/T-1',
192
+ logPath: '.backlog/.dispatch/T-1/intento-3/run.log',
193
+ attempt: 3,
194
+ pushSucceeded: true,
195
+ });
196
+ const block = plan.find((step) => step.kind === 'block');
197
+ assert.ok(block && block.kind === 'block');
198
+ assert.equal(block.details.terminal, true);
199
+ });
200
+
201
+ it('an attempt below the cap is not terminal', () => {
202
+ const plan = planClose({
203
+ outcome: 'failure',
204
+ lane: LANE.LOCAL,
205
+ reason: 'scoped-test-failed',
206
+ branch: 'task/T-1',
207
+ logPath: '.backlog/.dispatch/T-1/intento-2/run.log',
208
+ attempt: 2,
209
+ pushSucceeded: true,
210
+ });
211
+ const block = plan.find((step) => step.kind === 'block');
212
+ assert.ok(block && block.kind === 'block');
213
+ assert.equal(block.details.terminal, false);
214
+ });
215
+ });
216
+
217
+ // ── checkBranchNotMerged (T-8 point 4) ─────────────────────────────────────────
218
+
219
+ // Measured incident: two late commits of T-6.3 were pushed to a branch whose PR was already
220
+ // merged, so they never reached the parent and were silently lost. `checkBranchNotMerged` is the
221
+ // gate a caller runs BEFORE any push: it reuses the SAME `isPrMerged(branch): boolean` seam
222
+ // `maintenance.ts` already asks GitHub with (`realGh`'s collaborator), rather than adding a second
223
+ // way to ask the same question.
224
+ describe('checkBranchNotMerged', () => {
225
+ it('returns null (proceed as normal) when the branch has no merged PR', () => {
226
+ const asked: string[] = [];
227
+ const plan = checkBranchNotMerged({
228
+ branch: 'task/T-12',
229
+ isPrMerged: (branch) => {
230
+ asked.push(branch);
231
+ return false;
232
+ },
233
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
234
+ attempt: 1,
235
+ });
236
+ assert.equal(plan, null);
237
+ assert.deepEqual(asked, ['task/T-12']);
238
+ });
239
+
240
+ it('returns a block-keep-slot-only plan when the branch already has a merged PR — no save-work, no release', () => {
241
+ const plan = checkBranchNotMerged({
242
+ branch: 'task/T-12',
243
+ isPrMerged: () => true,
244
+ logPath: '.backlog/.dispatch/T-12/intento-2/run.log',
245
+ attempt: 2,
246
+ });
247
+ assert.ok(plan);
248
+ assert.deepEqual(
249
+ plan.map((step) => step.kind),
250
+ ['block-keep-slot'],
251
+ );
252
+ const step = plan[0];
253
+ assert.ok(step.kind === 'block-keep-slot');
254
+ assert.equal(step.details.reason, 'branch-already-merged');
255
+ assert.match(step.details.question ?? '', /task\/T-12/);
256
+ assert.equal(step.details.branch, 'task/T-12');
257
+ assert.equal(step.details.logPath, '.backlog/.dispatch/T-12/intento-2/run.log');
258
+ // The attempt that DISCOVERED the merge is 2; a retry (were one ever queued from here) would
259
+ // be attempt 3 — same `attempt + 1` convention `buildBlockDetails` uses everywhere else.
260
+ assert.equal(step.details.attempt, 3);
261
+ });
262
+
263
+ it('marks the block terminal once the discovering attempt already reached the cap', () => {
264
+ const plan = checkBranchNotMerged({
265
+ branch: 'task/T-1',
266
+ isPrMerged: () => true,
267
+ logPath: '.backlog/.dispatch/T-1/intento-3/run.log',
268
+ attempt: 3,
269
+ maxAttempts: 3,
270
+ });
271
+ assert.ok(plan);
272
+ const step = plan[0];
273
+ assert.ok(step.kind === 'block-keep-slot');
274
+ assert.equal(step.details.terminal, true);
275
+ });
276
+ });
277
+
278
+ describe('executeClose — a plan that starts directly at block-keep-slot (branch already merged)', () => {
279
+ it('calls ONLY blockKeepSlot — never saveWork (that would push), never releaseSlot', () => {
280
+ const { calls, runners } = recordingRunners();
281
+ const plan = checkBranchNotMerged({
282
+ branch: 'task/T-12',
283
+ isPrMerged: () => true,
284
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
285
+ attempt: 1,
286
+ });
287
+ assert.ok(plan);
288
+
289
+ const executed = executeClose(plan, runners, {
290
+ lane: LANE.LOCAL,
291
+ attempt: 1,
292
+ branch: 'task/T-12',
293
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
294
+ });
295
+
296
+ assert.deepEqual(executed, ['blockKeepSlot']);
297
+ assert.deepEqual(calls, ['blockKeepSlot']);
298
+ });
299
+
300
+ // `block` (as opposed to `block-keep-slot`) is not produced by `checkBranchNotMerged` today — it
301
+ // always keeps the slot, since nothing was ever pushed to release safely against — but the
302
+ // executor's handling of a plan that starts directly at `block` is exercised here anyway: it used
303
+ // to be dead code (`planClose` always put `save-work` ahead of it), and a plan reaching it
304
+ // directly now must still call the runner instead of silently doing nothing.
305
+ it('a plan starting directly at block (no save-work ahead of it) still calls the block runner', () => {
306
+ const { calls, runners } = recordingRunners();
307
+ const details = {
308
+ reason: 'example',
309
+ branch: 'task/T-12',
310
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
311
+ whatToDo: 'n/a',
312
+ attempt: 2,
313
+ terminal: false,
314
+ };
315
+ const executed = executeClose([{ kind: 'block', details }], runners, {
316
+ lane: LANE.LOCAL,
317
+ attempt: 1,
318
+ branch: 'task/T-12',
319
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
320
+ });
321
+ assert.deepEqual(executed, ['block']);
322
+ assert.deepEqual(calls, ['block']);
323
+ });
324
+ });
325
+
326
+ // ── checkScope ─────────────────────────────────────────────────────────────────
327
+
328
+ describe('checkScope', () => {
329
+ it('local: passes when every changed file was declared and none is a security path', () => {
330
+ const result = checkScope({
331
+ lane: LANE.LOCAL,
332
+ changedFiles: [
333
+ 'backend/src/@app/some-bc/x.service.ts',
334
+ 'backend/src/@app/some-bc/x.service.spec.ts',
335
+ ],
336
+ declaredFiles: [
337
+ 'backend/src/@app/some-bc/x.service.ts',
338
+ 'backend/src/@app/some-bc/x.service.spec.ts',
339
+ ],
340
+ });
341
+ assert.equal(result.ok, true);
342
+ assert.deepEqual(result.violatingFiles, []);
343
+ assert.deepEqual(result.humanReviewFiles, []);
344
+ });
345
+
346
+ it('local: fails on an undeclared changed file', () => {
347
+ const result = checkScope({
348
+ lane: LANE.LOCAL,
349
+ changedFiles: ['backend/src/@app/some-bc/x.service.ts', 'backend/src/@app/some-bc/extra.ts'],
350
+ declaredFiles: ['backend/src/@app/some-bc/x.service.ts'],
351
+ });
352
+ assert.equal(result.ok, false);
353
+ assert.deepEqual(result.violatingFiles, ['backend/src/@app/some-bc/extra.ts']);
354
+ });
355
+
356
+ it('local: fails on a declared-but-security-path file (close-time re-check)', () => {
357
+ const result = checkScope({
358
+ lane: LANE.LOCAL,
359
+ changedFiles: ['backend/src/@app/o-auth/module.ts'],
360
+ declaredFiles: ['backend/src/@app/o-auth/module.ts'],
361
+ });
362
+ assert.equal(result.ok, false);
363
+ assert.deepEqual(result.violatingFiles, ['backend/src/@app/o-auth/module.ts']);
364
+ });
365
+
366
+ // K6: `.backlog/` used to be stripped from the diff before the check, on the theory that a slot
367
+ // never touches its own board copy. Nothing enforced that theory — and a worker that DID write
368
+ // there rewrote the criteria the close judges it against, silently. It is a violation on both
369
+ // lanes now: the dispatcher owns board state, and the wrapper is the only way in.
370
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER]) {
371
+ it(`${lane}: reports a change to the slot own .backlog copy as a violation`, () => {
372
+ const result = checkScope({
373
+ lane,
374
+ changedFiles: ['backend/src/@app/some-bc/x.service.ts', '.backlog/tasks/t-1.md'],
375
+ declaredFiles: ['backend/src/@app/some-bc/x.service.ts'],
376
+ });
377
+ assert.equal(result.ok, false);
378
+ assert.deepEqual(result.violatingFiles, ['.backlog/tasks/t-1.md']);
379
+ });
380
+ }
381
+
382
+ it('frontier: passes when nothing touches the forbidden-paths list, even undeclared files', () => {
383
+ const result = checkScope({
384
+ lane: LANE.FRONTIER,
385
+ changedFiles: ['backend/src/@app/some-bc/module.ts', 'backend/src/@app/some-bc/new-file.ts'],
386
+ declaredFiles: ['backend/src/@app/some-bc/module.ts'],
387
+ });
388
+ assert.equal(result.ok, true);
389
+ });
390
+
391
+ // H5: the local lane checked only the DECLARED-files allowlist plus security paths, so a task
392
+ // that declared `.husky/pre-commit` (or `package.json`, or `scripts/`) passed the close — and the
393
+ // dispatcher's own commits then executed hooks the worker had just written. All of these stay on
394
+ // the HARD list (or a local-lane extra that still catches them) after the split.
395
+ for (const forbidden of [
396
+ '.husky/pre-commit',
397
+ '.claude/settings.json',
398
+ '.claude/hooks/inject-prompt-context.ts',
399
+ // Soft everywhere else (T-31), but `scripts/` — a LOCAL_FORBIDDEN_PATHS extra — still catches
400
+ // it: design.md decision 6, "scripts/backlog/ stays refused on the local lane even when
401
+ // declared, because the wider scripts/ extra still catches it".
402
+ 'scripts/backlog/dispatch.ts',
403
+ 'package.json',
404
+ 'backend/package.json',
405
+ 'pnpm-lock.yaml',
406
+ ]) {
407
+ it(`local: fails on ${forbidden} even when the task declared it`, () => {
408
+ const result = checkScope({
409
+ lane: LANE.LOCAL,
410
+ changedFiles: [forbidden],
411
+ declaredFiles: [forbidden],
412
+ });
413
+ assert.equal(result.ok, false);
414
+ assert.deepEqual(result.violatingFiles, [forbidden]);
415
+ assert.deepEqual(result.humanReviewFiles, []);
416
+ });
417
+ }
418
+
419
+ // Spec scenario "A local-lane refusal that predates the split still applies": the local lane's
420
+ // three EXTRAS (`.claude/`, `scripts/`, `.git/`) refuse on their own, declared or not, and
421
+ // regardless of the split. `scripts/backlog/dispatch.ts` above covers `scripts/`; these are the
422
+ // other two, each with a path that ONLY the broad extra catches — `.claude/skills/…` is not under
423
+ // any hard `.claude/` entry, and `.git/` appears on no other list at all.
424
+ //
425
+ // The `.git/` cases DOCUMENT INTENT and cover no reachable behaviour (design.md gap (a), and the
426
+ // spec scenario "The git-directory refusal is unreachable through the real diff sources"): they
427
+ // feed `checkScope` an input `collectChangedFiles` cannot produce, because neither
428
+ // `git diff --name-only` nor `git status --porcelain` ever reports a path inside that directory.
429
+ // They pin the predicate so a future refactor cannot drop the entry silently; they are NOT evidence
430
+ // that a write there is caught. What bounds that is the lane deny rules and `prepareSlot`'s hard
431
+ // reset.
432
+ for (const declared of [true, false]) {
433
+ for (const forbidden of [
434
+ '.claude/skills/catalyst-backlog/SKILL.md',
435
+ '.claude/agents/jd-judge-a.md',
436
+ '.git/config',
437
+ '.git/hooks/pre-commit',
438
+ ]) {
439
+ it(`local: fails on ${forbidden} (${declared ? 'declared' : 'undeclared'}) — a local-lane extra`, () => {
440
+ const result = checkScope({
441
+ lane: LANE.LOCAL,
442
+ changedFiles: [forbidden],
443
+ declaredFiles: declared ? [forbidden] : [],
444
+ });
445
+ assert.equal(result.ok, false);
446
+ assert.deepEqual(result.violatingFiles, [forbidden]);
447
+ assert.deepEqual(result.humanReviewFiles, []);
448
+ });
449
+ }
450
+ }
451
+
452
+ // The same two paths on the FRONTIER lane, which has no extras: neither list reaches them, so the
453
+ // attempt passes unmarked. This is what makes the tests above a LANE rule rather than a global one.
454
+ //
455
+ // GAP (b), PINNED AND NOT ENDORSED (design.md, "The gaps, recorded by name rather than closed").
456
+ // `.claude/skills/catalyst-backlog/SKILL.md` passing GREEN and UNMARKED on the frontier lane is a
457
+ // frontier attempt rewriting its own skills with nothing said about it on the pull request, and
458
+ // mechanism (2) then restores that rewrite into the slot for the retry's executor to boot on. That
459
+ // is present behaviour, recorded because the round-2 measurement made it worse than "a reviewer is
460
+ // not told" — it is NOT a settled decision that the instruction corners of `.claude/` may stay off
461
+ // both lists. Closing the gap (a soft, or hard, entry for `skills/`, `rules/`, `agents/`,
462
+ // `commands/`) will turn this assertion red, and that will be the fix landing, not a regression.
463
+ // The `.git/config` half is gap (a), pinned the same way (see the note above).
464
+ for (const allowed of ['.claude/skills/catalyst-backlog/SKILL.md', '.git/config']) {
465
+ it(`frontier: passes ${allowed} — the extras are the local lane's alone`, () => {
466
+ const result = checkScope({
467
+ lane: LANE.FRONTIER,
468
+ changedFiles: [allowed],
469
+ declaredFiles: [],
470
+ });
471
+ assert.equal(result.ok, true);
472
+ assert.deepEqual(result.humanReviewFiles, []);
473
+ });
474
+ }
475
+
476
+ // T-31, design.md decision 6: `packages/cli/` is soft and no local-lane extra covers it, so a
477
+ // DECLARED attempt is now admissible — a real behavioural change on the local lane, stated here
478
+ // rather than discovered later — and marks its pull request exactly like a frontier one.
479
+ it('local: admits a declared packages/cli/ file, marking it for human review', () => {
480
+ const file = 'packages/cli/src/generator.ts';
481
+ const result = checkScope({ lane: LANE.LOCAL, changedFiles: [file], declaredFiles: [file] });
482
+ assert.equal(result.ok, true);
483
+ assert.deepEqual(result.violatingFiles, []);
484
+ assert.deepEqual(result.humanReviewFiles, [file]);
485
+ });
486
+
487
+ // An UNDECLARED soft-list file still fails as undeclared — declaring it is necessary, and it was
488
+ // never sufficient for the hard list either (design.md decision 6, "a soft path is NOT
489
+ // automatically admissible on the local lane").
490
+ it('local: fails on an undeclared packages/cli/ file, same as any other undeclared file', () => {
491
+ const file = 'packages/cli/src/generator.ts';
492
+ const result = checkScope({ lane: LANE.LOCAL, changedFiles: [file], declaredFiles: [] });
493
+ assert.equal(result.ok, false);
494
+ assert.deepEqual(result.violatingFiles, [file]);
495
+ });
496
+
497
+ it('local: still passes ordinary declared product code', () => {
498
+ const result = checkScope({
499
+ lane: LANE.LOCAL,
500
+ changedFiles: ['backend/src/@app/some-bc/x.service.ts'],
501
+ declaredFiles: ['backend/src/@app/some-bc/x.service.ts'],
502
+ });
503
+ assert.equal(result.ok, true);
504
+ });
505
+
506
+ // T-31: the dispatcher's own sources are SOFT because nothing reads them as instructions and the
507
+ // dispatcher never runs from the slot — it runs `tsx scripts/backlog/dispatch.ts` from the MAIN
508
+ // checkout — so the old justification ("edits its own examiner") did not hold at run time and the
509
+ // frontier lane admits them, marking the pull request instead of failing.
510
+ //
511
+ // SOFT is not INERT, and design.md decision 1 records the two measured mechanisms that make it
512
+ // not: (1) admitting the diff here is exactly what unlocks the triad, whose last step spawns the
513
+ // task's declared `Test command:` with `cwd` = the slot, and `ALLOWED_TEST_SCRIPT` admits
514
+ // `test:backlog` — a runner over the SLOT's copies of these very files; (2) a failed attempt's
515
+ // tree is pushed to `task/<id>` by `saveWipAndPush` and restored by the retry's
516
+ // `checkout -B task/<id> origin/task/<id>`, a path that opens no pull request and applies no mark.
517
+ for (const forbidden of [
518
+ 'scripts/backlog/close.ts',
519
+ 'scripts/backlog/guards.ts',
520
+ 'scripts/backlog/worker-edit.ts',
521
+ 'scripts/backlog/lanes/local.settings.json',
522
+ ]) {
523
+ it(`frontier: admits ${forbidden} — soft list, marks the PR for human review`, () => {
524
+ const result = checkScope({
525
+ lane: LANE.FRONTIER,
526
+ changedFiles: [forbidden],
527
+ declaredFiles: [],
528
+ });
529
+ assert.equal(result.ok, true);
530
+ assert.deepEqual(result.violatingFiles, []);
531
+ assert.deepEqual(result.humanReviewFiles, [forbidden]);
532
+ });
533
+ }
534
+
535
+ // N1: the project `PostToolUse` hook executes `$CLAUDE_PROJECT_DIR/.claude/hooks/format-with-prettier.ts`
536
+ // on every Write/Edit, and `CLAUDE_PROJECT_DIR` is the SLOT — so a hook the worker writes there is
537
+ // code the harness runs as the worker on its very next edit. `.claude/scripts/` runs the same way
538
+ // from `SessionStart`. Both stay refused on BOTH lanes, declared or not — like `CLAUDE.md` below,
539
+ // which is HARD on both lanes as `SLOT_EXECUTED_BASENAMES` (design.md decision 7).
540
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER]) {
541
+ for (const forbidden of [
542
+ '.claude/hooks/format-with-prettier.ts',
543
+ '.claude/hooks/x.ts',
544
+ '.claude/scripts/generate-skills-index.ts',
545
+ // P2 (round 9): `.claude/settings.json` is a substring pattern and `settings.local.json` is
546
+ // NOT a superstring of it, so the local overlay — same hooks, same permissions, and the file
547
+ // Claude Code actually reads last — went unchecked on both lanes.
548
+ '.claude/settings.local.json',
549
+ ]) {
550
+ it(`${lane}: fails on ${forbidden} — it governs or runs the harness itself`, () => {
551
+ const result = checkScope({ lane, changedFiles: [forbidden], declaredFiles: [forbidden] });
552
+ assert.equal(result.ok, false);
553
+ assert.deepEqual(result.violatingFiles, [forbidden]);
554
+ });
555
+ }
556
+ }
557
+
558
+ // T-31 review: the close's own `mirrorRegen` step runs `node scripts/packager/publish.mjs` with
559
+ // `cwd` = the slot, and that script globs `monorepo.mjs`, `backend/*.mjs` and `frontend/*.mjs`
560
+ // inside its OWN directory (derived from `import.meta.url`, i.e. the slot's copy) and spawns each
561
+ // match with the dispatcher's inherited environment. It executes in the slot, so it is HARD on
562
+ // both lanes — and it is NOT covered by the soft `scripts/backlog/` entry.
563
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER]) {
564
+ for (const forbidden of [
565
+ 'scripts/packager/publish.mjs',
566
+ 'scripts/packager/monorepo.mjs',
567
+ 'scripts/packager/backend/anything.mjs',
568
+ 'scripts/packager/lib/helpers.mjs',
569
+ // Same mechanism, one step removed: the triad runs `pnpm hr:lint-barrels` in the slot and the
570
+ // root package.json maps that script to `tsx scripts/harness-rules/lint-barrels.ts`.
571
+ 'scripts/harness-rules/lint-barrels.ts',
572
+ ]) {
573
+ it(`${lane}: fails on ${forbidden} — the close spawns it from the slot`, () => {
574
+ const result = checkScope({ lane, changedFiles: [forbidden], declaredFiles: [forbidden] });
575
+ assert.equal(result.ok, false);
576
+ assert.deepEqual(result.violatingFiles, [forbidden]);
577
+ assert.deepEqual(result.humanReviewFiles, []);
578
+ });
579
+ }
580
+ }
581
+
582
+ // T-31 round 2: the instruction file is HARD on BOTH lanes, and the two mechanisms behind that
583
+ // were measured, not reasoned about.
584
+ //
585
+ // - LOCAL: its close runs an AI reviewer (`planClose`'s `reviewer` step) with `cwd` = the slot,
586
+ // and `buildReviewerCommand` (`reviewer.ts`) passes no `--bare`, the only flag that
587
+ // disables instruction-file auto-discovery. The executor would be authoring its own
588
+ // examiner's brief.
589
+ // - BOTH lanes: the failure plan is `save-work` then `block`, with NO `open-pr` step — so a
590
+ // failed attempt applies no mark at all, while `saveWipAndPush` pushes the whole slot tree to
591
+ // `task/<id>` and the retry's `checkout -B task/<id> origin/task/<id>` restores it. Attempt 2
592
+ // boots reading what attempt 1 wrote. Marking a file in a channel that only exists on the
593
+ // green path is not a control.
594
+ //
595
+ // Declared or not, and whatever the casing (`matchesBasename` lowercases both sides).
596
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER]) {
597
+ for (const forbidden of ['CLAUDE.md', 'backend/CLAUDE.md', 'frontend/claude.md']) {
598
+ it(`${lane}: fails on ${forbidden} even when declared — an instruction file the next attempt reads`, () => {
599
+ const result = checkScope({
600
+ lane,
601
+ changedFiles: [forbidden],
602
+ declaredFiles: [forbidden],
603
+ });
604
+ assert.equal(result.ok, false);
605
+ assert.deepEqual(result.violatingFiles, [forbidden]);
606
+ assert.deepEqual(result.humanReviewFiles, []);
607
+ });
608
+ }
609
+ }
610
+
611
+ // `CLAUDE.md` is matched by BASENAME, not as a substring: a substring pattern would also swallow
612
+ // an unrelated file whose name merely contains it, which is ordinary work.
613
+ it('frontier: still passes a file whose name only contains the CLAUDE.md pattern, with no mark', () => {
614
+ const result = checkScope({
615
+ lane: LANE.FRONTIER,
616
+ changedFiles: ['docs/claude.mdx'],
617
+ declaredFiles: ['docs/claude.mdx'],
618
+ });
619
+ assert.equal(result.ok, true);
620
+ assert.deepEqual(result.humanReviewFiles, []);
621
+ });
622
+
623
+ it('frontier: admits a soft-list file with no declared-files allowlist to pass at all', () => {
624
+ const result = checkScope({
625
+ lane: LANE.FRONTIER,
626
+ changedFiles: ['packages/cli/src/generator.ts'],
627
+ declaredFiles: [],
628
+ });
629
+ assert.equal(result.ok, true);
630
+ assert.deepEqual(result.humanReviewFiles, ['packages/cli/src/generator.ts']);
631
+ });
632
+
633
+ // A diff mixing both lists still fails, naming the hard-list file, and the soft-list file never
634
+ // softens the verdict (spec: "A diff mixing both lists still fails").
635
+ it('frontier: a mix of hard and soft files still fails, naming the hard file only', () => {
636
+ const result = checkScope({
637
+ lane: LANE.FRONTIER,
638
+ changedFiles: ['package.json', 'packages/cli/src/generator.ts'],
639
+ declaredFiles: [],
640
+ });
641
+ assert.equal(result.ok, false);
642
+ assert.deepEqual(result.violatingFiles, ['package.json']);
643
+ assert.deepEqual(result.humanReviewFiles, []);
644
+ });
645
+
646
+ // M3: the dependency graph and the installed tree are the ENVIRONMENT the close itself runs in —
647
+ // its Prettier, its barrels lint, its `pnpm test`. A worker that rewrites a `package.json`
648
+ // script or the lockfile changes what the dispatcher executes moments later, so this is a
649
+ // both-lanes rule; it used to be local-only, leaving the frontier lane (the wider grant) able to
650
+ // do it. The nested case is the one a prefix match would miss: patterns are matched as
651
+ // SUBSTRINGS, which is what makes `backend/package.json` a hit.
652
+ for (const forbidden of [
653
+ 'package.json',
654
+ 'backend/package.json',
655
+ 'packages/core-front/package.json',
656
+ 'pnpm-lock.yaml',
657
+ 'node_modules/.bin/prettier',
658
+ 'backend/node_modules/tsx/package.json',
659
+ ]) {
660
+ it(`frontier: fails on ${forbidden} — the close runs in the environment those files define`, () => {
661
+ const result = checkScope({
662
+ lane: LANE.FRONTIER,
663
+ changedFiles: [forbidden],
664
+ declaredFiles: [forbidden],
665
+ });
666
+ assert.equal(result.ok, false);
667
+ assert.deepEqual(result.violatingFiles, [forbidden]);
668
+ });
669
+ }
670
+ });
671
+
672
+ // ── executeClose: save-before-release ordering via a recording runner ────────
673
+
674
+ function recordingRunners(overrides: Partial<CloseRunners> = {}): {
675
+ calls: string[];
676
+ runners: CloseRunners;
677
+ } {
678
+ const calls: string[] = [];
679
+ const runners: CloseRunners = {
680
+ boardCheck: () => {
681
+ calls.push('boardCheck');
682
+ return { ok: true };
683
+ },
684
+ scopeCheck: () => {
685
+ calls.push('scopeCheck');
686
+ return { ok: true, humanReviewFiles: [] };
687
+ },
688
+ formatLintTest: () => {
689
+ calls.push('formatLintTest');
690
+ return { ok: true };
691
+ },
692
+ mirrorRegen: () => {
693
+ calls.push('mirrorRegen');
694
+ return { ok: true };
695
+ },
696
+ reviewer: () => {
697
+ calls.push('reviewer');
698
+ return { ok: true };
699
+ },
700
+ acCheck: () => {
701
+ calls.push('acCheck');
702
+ return { ok: true };
703
+ },
704
+ openPr: () => {
705
+ calls.push('openPr');
706
+ return { ok: true };
707
+ },
708
+ releaseSlot: () => {
709
+ calls.push('releaseSlot');
710
+ },
711
+ recomputeParent: () => {
712
+ calls.push('recomputeParent');
713
+ },
714
+ drain: () => {
715
+ calls.push('drain');
716
+ },
717
+ saveWork: () => {
718
+ calls.push('saveWork');
719
+ return { pushSucceeded: true };
720
+ },
721
+ leftoverFiles: () => {
722
+ calls.push('leftoverFiles');
723
+ return { forbiddenFiles: [], humanReviewFiles: [] };
724
+ },
725
+ block: () => {
726
+ calls.push('block');
727
+ },
728
+ blockKeepSlot: () => {
729
+ calls.push('blockKeepSlot');
730
+ },
731
+ ...overrides,
732
+ };
733
+ return { calls, runners };
734
+ }
735
+
736
+ describe('executeClose', () => {
737
+ it('runs the full happy path in order when every mechanical step passes', () => {
738
+ const { calls, runners } = recordingRunners();
739
+ const plan = planClose({ outcome: 'success', lane: LANE.LOCAL });
740
+
741
+ executeClose(plan, runners, {
742
+ lane: LANE.LOCAL,
743
+ attempt: 1,
744
+ branch: 'task/T-1',
745
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
746
+ });
747
+
748
+ assert.deepEqual(calls, [
749
+ 'boardCheck',
750
+ 'scopeCheck',
751
+ 'formatLintTest',
752
+ 'mirrorRegen',
753
+ 'reviewer',
754
+ 'acCheck',
755
+ 'openPr',
756
+ 'releaseSlot',
757
+ 'recomputeParent',
758
+ 'drain',
759
+ ]);
760
+ });
761
+
762
+ // J5: a tampered board fails the attempt like any other mechanical step — work saved, task
763
+ // blocked — and nothing that reads the board afterwards ever runs.
764
+ it('stops the whole close at board-check and saves before blocking', () => {
765
+ const { calls, runners } = recordingRunners({
766
+ boardCheck: () => {
767
+ calls.push('boardCheck');
768
+ return { ok: false, reason: 'ac-tampered', question: 'los criterios cambiaron' };
769
+ },
770
+ });
771
+
772
+ const executed = executeClose(planClose({ outcome: 'success', lane: LANE.LOCAL }), runners, {
773
+ lane: LANE.LOCAL,
774
+ attempt: 1,
775
+ branch: 'task/T-1',
776
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
777
+ });
778
+
779
+ assert.deepEqual(executed, ['boardCheck', 'saveWork', 'block', 'releaseSlot']);
780
+ assert.ok(!calls.includes('scopeCheck'));
781
+ assert.ok(!calls.includes('openPr'));
782
+ });
783
+
784
+ // T-31 round 4: `board-check` is the one mechanical step that diverts BEFORE `scope-check`, so on
785
+ // that failure nothing has classified the tree either — and the promise ("EVERY close that fails
786
+ // records the leftover files") is unconditional in three documents. The probe is therefore keyed on
787
+ // "has the scope check reported yet", not on "did the plan start at save-work".
788
+ it('probes the leftover files when board-check diverts, since no scope check ran there either', () => {
789
+ let seen: readonly string[] | undefined;
790
+ let seenForbidden: readonly string[] | undefined;
791
+ const { calls, runners } = recordingRunners({
792
+ boardCheck: () => {
793
+ calls.push('boardCheck');
794
+ return { ok: false, reason: 'ac-tampered' };
795
+ },
796
+ leftoverFiles: () => {
797
+ calls.push('leftoverFiles');
798
+ return {
799
+ forbiddenFiles: ['.claude/settings.json'],
800
+ humanReviewFiles: ['packages/cli/src/index.ts'],
801
+ };
802
+ },
803
+ block: (details) => {
804
+ calls.push('block');
805
+ seen = details.humanReviewFiles;
806
+ seenForbidden = details.forbiddenFiles;
807
+ },
808
+ });
809
+
810
+ executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
811
+ lane: LANE.FRONTIER,
812
+ attempt: 1,
813
+ branch: 'task/T-1',
814
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
815
+ });
816
+
817
+ assert.deepEqual(seen, ['packages/cli/src/index.ts']);
818
+ assert.deepEqual(seenForbidden, ['.claude/settings.json']);
819
+ assert.ok(
820
+ calls.indexOf('leftoverFiles') < calls.indexOf('saveWork'),
821
+ 'the probe must read the diff BEFORE the WIP commit rewrites the tree',
822
+ );
823
+ });
824
+
825
+ // T-31 round 2: the soft-list verdict has to reach the FAILURE path too, not only `openPr`. The
826
+ // scope check runs before every other step that can fail, so by the time a later step diverts the
827
+ // close, `executeClose` already knows which soft-list files were admitted — and the block comment
828
+ // is the only channel left, since the failure plan opens no pull request to mark.
829
+ it('carries the scope check soft-list files into the block details when a LATER step fails', () => {
830
+ let seen: readonly string[] | undefined;
831
+ const { calls, runners } = recordingRunners({
832
+ scopeCheck: () => {
833
+ calls.push('scopeCheck');
834
+ return { ok: true, humanReviewFiles: ['scripts/backlog/close.ts'] };
835
+ },
836
+ acCheck: () => {
837
+ calls.push('acCheck');
838
+ return { ok: false, reason: 'ac-not-met' };
839
+ },
840
+ block: (details) => {
841
+ calls.push('block');
842
+ seen = details.humanReviewFiles;
843
+ },
844
+ });
845
+
846
+ executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
847
+ lane: LANE.FRONTIER,
848
+ attempt: 1,
849
+ branch: 'task/T-1',
850
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
851
+ });
852
+
853
+ assert.deepEqual(seen, ['scripts/backlog/close.ts']);
854
+ });
855
+
856
+ it('leaves the block details soft-list empty when the scope check reported none', () => {
857
+ let seen: readonly string[] | undefined;
858
+ const { calls, runners } = recordingRunners({
859
+ acCheck: () => {
860
+ calls.push('acCheck');
861
+ return { ok: false, reason: 'ac-not-met' };
862
+ },
863
+ block: (details) => {
864
+ calls.push('block');
865
+ seen = details.humanReviewFiles;
866
+ },
867
+ });
868
+
869
+ executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
870
+ lane: LANE.FRONTIER,
871
+ attempt: 1,
872
+ branch: 'task/T-1',
873
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
874
+ });
875
+
876
+ assert.deepEqual(seen, []);
877
+ });
878
+
879
+ it('saves work BEFORE releasing when a mechanical step fails mid-plan (never release-then-save)', () => {
880
+ const { calls, runners } = recordingRunners({
881
+ scopeCheck: () => {
882
+ calls.push('scopeCheck');
883
+ return { ok: false, reason: 'scope-check-failed', humanReviewFiles: [] };
884
+ },
885
+ });
886
+ const plan = planClose({ outcome: 'success', lane: LANE.LOCAL });
887
+
888
+ executeClose(plan, runners, {
889
+ lane: LANE.LOCAL,
890
+ attempt: 1,
891
+ branch: 'task/T-1',
892
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
893
+ });
894
+
895
+ assert.deepEqual(calls, ['boardCheck', 'scopeCheck', 'saveWork', 'block', 'releaseSlot']);
896
+ });
897
+
898
+ it('keeps the slot held when the WIP push fails (no releaseSlot call at all)', () => {
899
+ const { calls, runners } = recordingRunners({
900
+ formatLintTest: () => {
901
+ calls.push('formatLintTest');
902
+ return { ok: false, reason: 'lint-failed' };
903
+ },
904
+ saveWork: () => {
905
+ calls.push('saveWork');
906
+ return { pushSucceeded: false };
907
+ },
908
+ });
909
+ const plan = planClose({ outcome: 'success', lane: LANE.LOCAL });
910
+
911
+ executeClose(plan, runners, {
912
+ lane: LANE.LOCAL,
913
+ attempt: 1,
914
+ branch: 'task/T-1',
915
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
916
+ });
917
+
918
+ assert.deepEqual(calls, [
919
+ 'boardCheck',
920
+ 'scopeCheck',
921
+ 'formatLintTest',
922
+ 'saveWork',
923
+ 'blockKeepSlot',
924
+ ]);
925
+ assert.ok(!calls.includes('releaseSlot'));
926
+ });
927
+
928
+ it('a rejected local reviewer also saves before blocking', () => {
929
+ const { calls, runners } = recordingRunners({
930
+ reviewer: () => {
931
+ calls.push('reviewer');
932
+ return {
933
+ ok: false,
934
+ reason: 'reviewer-rejected',
935
+ question: 'AC 2 no cubierto, ¿se descarta?',
936
+ };
937
+ },
938
+ });
939
+ const plan = planClose({ outcome: 'success', lane: LANE.LOCAL });
940
+
941
+ executeClose(plan, runners, {
942
+ lane: LANE.LOCAL,
943
+ attempt: 2,
944
+ branch: 'task/T-1',
945
+ logPath: '.backlog/.dispatch/T-1/intento-2/run.log',
946
+ });
947
+
948
+ assert.deepEqual(calls, [
949
+ 'boardCheck',
950
+ 'scopeCheck',
951
+ 'formatLintTest',
952
+ 'mirrorRegen',
953
+ 'reviewer',
954
+ 'saveWork',
955
+ 'block',
956
+ 'releaseSlot',
957
+ ]);
958
+ });
959
+
960
+ it('a session-level failure (needs-guidance/timeout/crash) starts the plan directly at save-work', () => {
961
+ const { calls, runners } = recordingRunners();
962
+ const plan = planClose({
963
+ outcome: 'failure',
964
+ lane: LANE.LOCAL,
965
+ reason: 'needs-guidance',
966
+ question: 'no pude resolver el permiso denegado',
967
+ branch: 'task/T-1',
968
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
969
+ attempt: 1,
970
+ pushSucceeded: true,
971
+ });
972
+
973
+ executeClose(plan, runners, {
974
+ lane: LANE.LOCAL,
975
+ attempt: 1,
976
+ branch: 'task/T-1',
977
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
978
+ });
979
+
980
+ assert.deepEqual(calls, ['leftoverFiles', 'saveWork', 'block', 'releaseSlot']);
981
+ });
982
+
983
+ // T-31 round 3. `needs-guidance`, a timeout, an exhausted budget and a crash are the MOST COMMON
984
+ // non-green outcomes of a headless dispatch, and their plan starts at `save-work` — no
985
+ // `scope-check` step ever runs, so the soft-list files `executeClose` carries from that step are
986
+ // empty and the `Blocked` comment named nothing. Meanwhile `saveWipAndPush` still pushes the whole
987
+ // slot tree to `task/<id>` and the retry restores it. The promise three documents make ("a FAILED
988
+ // close names the soft-list files in the `Blocked` comment instead") has to hold for EVERY failure,
989
+ // so the executor asks for them itself before diverting.
990
+ it('probes the leftover files before diverting when the plan starts at save-work', () => {
991
+ let seen: readonly string[] | undefined;
992
+ let seenForbidden: readonly string[] | undefined;
993
+ const { calls, runners } = recordingRunners({
994
+ leftoverFiles: () => {
995
+ calls.push('leftoverFiles');
996
+ return {
997
+ forbiddenFiles: ['.claude/settings.json'],
998
+ humanReviewFiles: ['scripts/backlog/close.ts', 'packages/cli/src/index.ts'],
999
+ };
1000
+ },
1001
+ block: (details) => {
1002
+ calls.push('block');
1003
+ seen = details.humanReviewFiles;
1004
+ seenForbidden = details.forbiddenFiles;
1005
+ },
1006
+ });
1007
+
1008
+ executeClose(
1009
+ planClose({
1010
+ outcome: 'failure',
1011
+ lane: LANE.FRONTIER,
1012
+ reason: 'needs-guidance',
1013
+ branch: 'task/T-1',
1014
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
1015
+ attempt: 1,
1016
+ pushSucceeded: true,
1017
+ }),
1018
+ runners,
1019
+ {
1020
+ lane: LANE.FRONTIER,
1021
+ attempt: 1,
1022
+ branch: 'task/T-1',
1023
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
1024
+ },
1025
+ );
1026
+
1027
+ assert.deepEqual(seen, ['scripts/backlog/close.ts', 'packages/cli/src/index.ts']);
1028
+ // The hard half of the record travels too, and as a VIOLATION rather than as an admitted file:
1029
+ // this is the tree the retry restores from `task/<id>`.
1030
+ assert.deepEqual(seenForbidden, ['.claude/settings.json']);
1031
+ assert.ok(
1032
+ calls.indexOf('leftoverFiles') < calls.indexOf('saveWork'),
1033
+ 'the probe must read the diff BEFORE the WIP commit rewrites the tree',
1034
+ );
1035
+ });
1036
+
1037
+ it('records an empty soft-list and still blocks when the probe THROWS', () => {
1038
+ let seen: readonly string[] | undefined;
1039
+ const { calls, runners } = recordingRunners({
1040
+ leftoverFiles: () => {
1041
+ calls.push('leftoverFiles');
1042
+ throw new Error('git no se pudo ejecutar');
1043
+ },
1044
+ block: (details) => {
1045
+ calls.push('block');
1046
+ seen = details.humanReviewFiles;
1047
+ },
1048
+ });
1049
+
1050
+ executeClose(
1051
+ planClose({
1052
+ outcome: 'failure',
1053
+ lane: LANE.FRONTIER,
1054
+ reason: 'crash',
1055
+ branch: 'task/T-1',
1056
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
1057
+ attempt: 1,
1058
+ pushSucceeded: true,
1059
+ }),
1060
+ runners,
1061
+ {
1062
+ lane: LANE.FRONTIER,
1063
+ attempt: 1,
1064
+ branch: 'task/T-1',
1065
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
1066
+ },
1067
+ );
1068
+
1069
+ assert.deepEqual(seen, []);
1070
+ assert.deepEqual(calls, ['leftoverFiles', 'saveWork', 'block', 'releaseSlot']);
1071
+ });
1072
+
1073
+ // The probe exists only for the plan that skips `scope-check`. A mechanical failure already knows
1074
+ // the answer, and asking git a second time after a step failed would report a DIFFERENT file set
1075
+ // (`mirrorRegen` may have written the mirror by then) — the exact recomputation design.md
1076
+ // decision 8 forbids for the PR mark.
1077
+ it('does NOT probe when a mechanical step failed — the scope check already reported', () => {
1078
+ const { calls, runners } = recordingRunners({
1079
+ scopeCheck: () => {
1080
+ calls.push('scopeCheck');
1081
+ return { ok: true, humanReviewFiles: ['scripts/backlog/close.ts'] };
1082
+ },
1083
+ acCheck: () => {
1084
+ calls.push('acCheck');
1085
+ return { ok: false, reason: 'ac-not-met' };
1086
+ },
1087
+ });
1088
+
1089
+ executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
1090
+ lane: LANE.FRONTIER,
1091
+ attempt: 1,
1092
+ branch: 'task/T-1',
1093
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
1094
+ });
1095
+
1096
+ assert.ok(!calls.includes('leftoverFiles'));
1097
+ });
1098
+ });
1099
+
1100
+ // ── resolveBaseRef / runScopeCheck / buildPrCreateArgs / planMechanicalChecks ──
1101
+
1102
+ const baseTask = (overrides: Partial<Task> = {}): Task => ({
1103
+ id: 'T-12',
1104
+ status: TASK_STATUS.QUEUED,
1105
+ tier: TIER.MINOR,
1106
+ lane: LANE.LOCAL,
1107
+ path: EXECUTION_PATH.DIRECT,
1108
+ filesToTouch: [],
1109
+ testCommand: null,
1110
+ acceptanceCriteria: [],
1111
+ definitionOfDone: [],
1112
+ dependsOn: [],
1113
+ attempts: 0,
1114
+ priority: 0,
1115
+ createdAt: 0,
1116
+ updatedAt: 0,
1117
+ ...overrides,
1118
+ });
1119
+
1120
+ // ── J5: the board still says what it said at launch ───────────────────────────
1121
+
1122
+ const boardView = (
1123
+ parts: {
1124
+ status?: string;
1125
+ ac?: string[];
1126
+ dod?: string[];
1127
+ title?: string;
1128
+ files?: string[];
1129
+ test?: string;
1130
+ parent?: string;
1131
+ } = {},
1132
+ ): string =>
1133
+ [
1134
+ `Task T-12 - ${parts.title ?? 'A task'}`,
1135
+ '',
1136
+ `Status: ${parts.status ?? 'In Progress'}`,
1137
+ ...(parts.parent ? [`Parent: ${parts.parent} - The parent task`] : []),
1138
+ '',
1139
+ `Files to touch: ${(parts.files ?? ['backend/src/@app/x.service.ts']).join(', ')}`,
1140
+ `Test command: ${parts.test ?? 'pnpm --filter aurora-back test'}`,
1141
+ '',
1142
+ 'Acceptance Criteria:',
1143
+ '--------------------------------------------------',
1144
+ ...(parts.ac ?? ['AC one', 'AC two']).map((text, index) => `- [x] #${index + 1} ${text}`),
1145
+ '',
1146
+ 'Definition of Done:',
1147
+ '--------------------------------------------------',
1148
+ ...(parts.dod ?? ['Scoped tests pass']).map((text, index) => `- [x] #${index + 1} ${text}`),
1149
+ '',
1150
+ ].join('\n');
1151
+
1152
+ const snapshotTask = (overrides: Partial<Task> = {}): Task =>
1153
+ baseTask({
1154
+ title: 'A task',
1155
+ filesToTouch: ['backend/src/@app/x.service.ts'],
1156
+ testCommand: 'pnpm --filter aurora-back test',
1157
+ acceptanceCriteria: ['AC one', 'AC two'],
1158
+ definitionOfDone: ['Scoped tests pass'],
1159
+ ...overrides,
1160
+ });
1161
+
1162
+ describe('checkBoardIntegrity', () => {
1163
+ it('passes when the status is still In Progress and no checklist text moved', () => {
1164
+ assert.deepEqual(checkBoardIntegrity({ taskText: boardView(), task: snapshotTask() }), {
1165
+ ok: true,
1166
+ });
1167
+ });
1168
+
1169
+ // J5(c): the worker holds a `backlog task edit` grant on its own task for its whole run. Setting
1170
+ // itself to Done makes the maintenance sweep read a finished task nobody verified; setting itself
1171
+ // to Queued makes the next pass dispatch it again while this close is still running.
1172
+ for (const status of ['Done', 'Queued', 'Blocked', 'To Do']) {
1173
+ it(`fails the attempt when the worker left the task in ${status}`, () => {
1174
+ const result = checkBoardIntegrity({ taskText: boardView({ status }), task: snapshotTask() });
1175
+ assert.equal(result.ok, false);
1176
+ assert.equal(result.reason, 'status-changed-by-worker');
1177
+ assert.match(result.question ?? '', new RegExp(status));
1178
+ });
1179
+ }
1180
+
1181
+ // J5(b): rewriting a criterion is grading your own exam — the pre-PR gate and the reviewer both
1182
+ // judge the attempt against exactly these texts.
1183
+ it('fails when an acceptance criterion was rewritten', () => {
1184
+ const result = checkBoardIntegrity({
1185
+ taskText: boardView({ ac: ['AC one', 'AC two but easier'] }),
1186
+ task: snapshotTask(),
1187
+ });
1188
+ assert.equal(result.ok, false);
1189
+ assert.equal(result.reason, 'ac-tampered');
1190
+ assert.match(result.question ?? '', /AC two/);
1191
+ });
1192
+
1193
+ it('fails when an acceptance criterion was removed', () => {
1194
+ const result = checkBoardIntegrity({
1195
+ taskText: boardView({ ac: ['AC one'] }),
1196
+ task: snapshotTask(),
1197
+ });
1198
+ assert.equal(result.ok, false);
1199
+ assert.equal(result.reason, 'ac-tampered');
1200
+ });
1201
+
1202
+ it('fails when a Definition-of-Done item was rewritten', () => {
1203
+ const result = checkBoardIntegrity({
1204
+ taskText: boardView({ dod: ['Nothing in particular'] }),
1205
+ task: snapshotTask(),
1206
+ });
1207
+ assert.equal(result.ok, false);
1208
+ assert.equal(result.reason, 'ac-tampered');
1209
+ });
1210
+
1211
+ // K1: the criteria were not the only text the attempt is judged against. The TITLE is what the PR
1212
+ // is named after, `Files to touch:` is the allowlist the scope check runs, and `Test command:` is
1213
+ // what the triad executes — a worker that rewrote any of the three would be judged against a
1214
+ // contract it authored itself, so the gate compares them against the launch snapshot too.
1215
+ it('fails when the title was rewritten', () => {
1216
+ const result = checkBoardIntegrity({
1217
+ taskText: boardView({ title: 'Something easier' }),
1218
+ task: snapshotTask(),
1219
+ });
1220
+ assert.equal(result.ok, false);
1221
+ assert.equal(result.reason, 'ac-tampered');
1222
+ assert.match(result.question ?? '', /Something easier/);
1223
+ });
1224
+
1225
+ it('fails when the declared Files to touch changed', () => {
1226
+ const result = checkBoardIntegrity({
1227
+ taskText: boardView({
1228
+ files: ['backend/src/@app/x.service.ts', 'backend/src/@app/y.service.ts'],
1229
+ }),
1230
+ task: snapshotTask(),
1231
+ });
1232
+ assert.equal(result.ok, false);
1233
+ assert.equal(result.reason, 'ac-tampered');
1234
+ assert.match(result.question ?? '', /y\.service\.ts/);
1235
+ });
1236
+
1237
+ it('fails when the declared Test command changed', () => {
1238
+ const result = checkBoardIntegrity({
1239
+ taskText: boardView({ test: 'pnpm --filter aurora-back test -- nothing.spec.ts' }),
1240
+ task: snapshotTask(),
1241
+ });
1242
+ assert.equal(result.ok, false);
1243
+ assert.equal(result.reason, 'ac-tampered');
1244
+ assert.match(result.question ?? '', /nothing\.spec\.ts/);
1245
+ });
1246
+
1247
+ // M2: the parent is the rest of the contract nothing re-read. It decides the PR's base branch
1248
+ // (`resolveBaseBranch`) and the ref the attempt is diffed against, so a `Parent:` that appeared
1249
+ // after launch opens the PR against a branch the task never declared — and one that vanished
1250
+ // diffs a child against `main`, reporting every file the parent already changed as this
1251
+ // attempt's scope violation.
1252
+ it('fails when a Parent appeared on the board after launch', () => {
1253
+ const result = checkBoardIntegrity({
1254
+ taskText: boardView({ parent: 'T-42' }),
1255
+ task: snapshotTask(),
1256
+ });
1257
+ assert.equal(result.ok, false);
1258
+ assert.equal(result.reason, 'ac-tampered');
1259
+ assert.match(result.question ?? '', /Parent/);
1260
+ assert.match(result.question ?? '', /T-42/);
1261
+ });
1262
+
1263
+ it('fails when the Parent the task was launched with disappeared', () => {
1264
+ const result = checkBoardIntegrity({
1265
+ taskText: boardView(),
1266
+ task: snapshotTask({ parentId: 'T-10' }),
1267
+ });
1268
+ assert.equal(result.ok, false);
1269
+ assert.equal(result.reason, 'ac-tampered');
1270
+ assert.match(result.question ?? '', /Parent/);
1271
+ });
1272
+
1273
+ it('passes when the Parent still reads as it did at launch', () => {
1274
+ assert.deepEqual(
1275
+ checkBoardIntegrity({
1276
+ taskText: boardView({ parent: 'T-10' }),
1277
+ task: snapshotTask({ parentId: 'T-10' }),
1278
+ }),
1279
+ { ok: true },
1280
+ );
1281
+ });
1282
+
1283
+ // K10: `ac-tampered` used to blame the worker outright. A person editing the board while an
1284
+ // attempt runs produces exactly the same drift, and the remedy is the same either way.
1285
+ it('attributes the drift to the worker OR a person, and says re-queueing re-snapshots it', () => {
1286
+ const result = checkBoardIntegrity({
1287
+ taskText: boardView({ title: 'Renamed by a person' }),
1288
+ task: snapshotTask(),
1289
+ });
1290
+ assert.match(result.question ?? '', /persona/i);
1291
+ assert.match(result.question ?? '', /instantánea|encolar/i);
1292
+ });
1293
+
1294
+ // The whole point of re-reading: the worker is SUPPOSED to tick its criteria as it works.
1295
+ it('ignores the checked state entirely — ticking is the worker job, not tampering', () => {
1296
+ const unticked = boardView().replace(/- \[x\]/g, '- [ ]');
1297
+ assert.deepEqual(checkBoardIntegrity({ taskText: unticked, task: snapshotTask() }), {
1298
+ ok: true,
1299
+ });
1300
+ });
1301
+
1302
+ it('fails closed on an unreadable view rather than passing an attempt it could not verify', () => {
1303
+ const result = checkBoardIntegrity({ taskText: '', task: snapshotTask() });
1304
+ assert.equal(result.ok, false);
1305
+ assert.equal(result.reason, 'status-changed-by-worker');
1306
+ });
1307
+ });
1308
+
1309
+ describe('resolveBaseBranch / resolveBaseRef', () => {
1310
+ it('resolves a top-level task to main, and diffs it against the REMOTE-tracking ref', () => {
1311
+ assert.equal(resolveBaseBranch(baseTask()), 'main');
1312
+ assert.equal(resolveBaseRef(baseTask()), 'origin/main');
1313
+ });
1314
+
1315
+ it("resolves a subtask to its parent's branch, never to main", () => {
1316
+ assert.equal(resolveBaseBranch(baseTask({ parentId: 'T-10' })), 'task/T-10');
1317
+ assert.equal(resolveBaseRef(baseTask({ parentId: 'T-10' })), 'origin/task/T-10');
1318
+ });
1319
+
1320
+ // T-14 regression (T-4.1, 2026-09-08): the close used to assume `task/<parentId>` unconditionally
1321
+ // while `slots.ts`'s `resolveBranch` silently fell back to `origin/main` when that branch was not
1322
+ // yet on the remote — so dispatch branched a subtask off ONE ref and the close measured its diff
1323
+ // and opened its PR against ANOTHER.
1324
+ //
1325
+ // What this test actually locks: for a subtask whose parent branch IS on the remote, `slots.ts`'s
1326
+ // `resolveBranch` and `close.ts`'s `resolveBaseRef` produce the SAME string. That is a black-box
1327
+ // equality check on the happy path — it catches a future regression where either function's OUTPUT
1328
+ // changes, but it does NOT prove the two share one implementation: a reviewer (T-14 fix round)
1329
+ // replaced `resolveBaseBranch`'s body with an independent copy of the same `task.parentId ? … :
1330
+ // …` expression, reimplementing rather than calling `taskBaseBranch`, and this test kept passing —
1331
+ // the two answers still agreed, they just agreed by coincidence instead of by construction. The
1332
+ // "one place" property is enforced by code review of `resolveBaseBranch`'s body (it calls
1333
+ // `guards.ts`'s `taskBaseBranch`), not by this assertion; nothing here — deliberately, since this
1334
+ // suite has no module-mocking convention — verifies that call actually happens.
1335
+ it("never diverges from slots.ts's resolveBranch on a subtask whose parent branch exists", () => {
1336
+ const task = baseTask({ parentId: 'T-10' });
1337
+ const dispatchBase = resolveBranch({
1338
+ taskId: task.id,
1339
+ parentId: task.parentId,
1340
+ remoteBranches: ['main', 'task/T-10'],
1341
+ }).base;
1342
+ assert.equal(dispatchBase, resolveBaseRef(task));
1343
+ });
1344
+
1345
+ // T-15: the close must measure a subtask against its parent's REAL branch — the same
1346
+ // `tasksById`-driven resolution `guards.ts`'s `taskBaseBranch` now performs — not just the
1347
+ // `task/<parentId>` deduction. `tasksById` is optional so every test above (no board in hand)
1348
+ // keeps resolving `task/<parentId>`, unchanged.
1349
+ it("resolves a subtask to its parent's DECLARED branch when tasksById carries one", () => {
1350
+ const tasksById = { 'T-10': baseTask({ id: 'T-10', declaredBranch: 'fix/parent-branch-resolution' }) };
1351
+ const task = baseTask({ parentId: 'T-10' });
1352
+ assert.equal(resolveBaseBranch(task, tasksById), 'fix/parent-branch-resolution');
1353
+ assert.equal(resolveBaseRef(task, tasksById), 'origin/fix/parent-branch-resolution');
1354
+ });
1355
+
1356
+ it("never diverges from slots.ts's resolveBranch when the parent declared a real branch", () => {
1357
+ const tasksById = { 'T-10': baseTask({ id: 'T-10', declaredBranch: 'fix/parent-branch-resolution' }) };
1358
+ const task = baseTask({ parentId: 'T-10' });
1359
+ const dispatchBase = resolveBranch({
1360
+ taskId: task.id,
1361
+ parentId: task.parentId,
1362
+ tasksById,
1363
+ remoteBranches: ['main', 'fix/parent-branch-resolution'],
1364
+ }).base;
1365
+ assert.equal(dispatchBase, resolveBaseRef(task, tasksById));
1366
+ });
1367
+ });
1368
+
1369
+ // ── mirror-regen: the CLI scaffold mirror the drift gate compares against ─────
1370
+
1371
+ /**
1372
+ * Measured defect (PR #96, dispatched task T-3): the worker edited `backend/src/@app/iam/**` and
1373
+ * `frontend/src/app/domains/admin/apps/iam/**`, both of which the packager mirrors into
1374
+ * `packages/cli/src/templates/**`. The PR failed the `Check mirror <-> source drift` CI gate, and
1375
+ * the worker could not possibly fix it — that prefix is refused on both lanes regardless of the
1376
+ * T-31 split (`packages/cli/` itself is soft; its own generated mirror never is). Nobody
1377
+ * regenerated the mirror either, so any dispatched task touching a mirrored root could never pass
1378
+ * CI on its own.
1379
+ */
1380
+ const DRIFT_CHECK_WORKFLOW_FIXTURE = `name: CLI template drift check
1381
+
1382
+ on:
1383
+ pull_request:
1384
+ paths:
1385
+ - 'backend/**'
1386
+ - 'frontend/**'
1387
+ - 'package.json'
1388
+ - 'docs/**'
1389
+ - 'cliter/harness-rules-index.json'
1390
+ - '.github/workflows/cli-template-drift-check.yml'
1391
+
1392
+ jobs:
1393
+ check:
1394
+ runs-on: ubuntu-latest
1395
+ `;
1396
+
1397
+ describe('parseMirroredRoots', () => {
1398
+ it("reads the roots off the drift-check workflow's own paths: filter", () => {
1399
+ assert.deepEqual(parseMirroredRoots(DRIFT_CHECK_WORKFLOW_FIXTURE), [
1400
+ 'backend/**',
1401
+ 'frontend/**',
1402
+ 'package.json',
1403
+ 'docs/**',
1404
+ 'cliter/harness-rules-index.json',
1405
+ '.github/workflows/cli-template-drift-check.yml',
1406
+ ]);
1407
+ });
1408
+
1409
+ // The mirror is the packager's OUTPUT, never one of its source roots: were `packages/cli/**` ever
1410
+ // added to that filter, a mirror file appearing in the diff would make the step regenerate again.
1411
+ it('drops packages/cli/** — the mirror is output, not a source root', () => {
1412
+ const withMirrorRoot = DRIFT_CHECK_WORKFLOW_FIXTURE.replace(
1413
+ " - 'backend/**'",
1414
+ " - 'backend/**'\n - 'packages/cli/**'",
1415
+ );
1416
+ const roots = parseMirroredRoots(withMirrorRoot);
1417
+ assert.ok(roots.includes('backend/**'));
1418
+ assert.ok(!roots.includes('packages/cli/**'));
1419
+ });
1420
+
1421
+ it('returns nothing when the workflow carries no paths: list at all', () => {
1422
+ assert.deepEqual(parseMirroredRoots('name: something else\non:\n pull_request:\n'), []);
1423
+ });
1424
+
1425
+ // The real file, not a fixture: `scripts/packager/drift-check-paths.test.mjs` already keeps that
1426
+ // list in lockstep with `copyMonorepo()`, which is exactly why it is the runtime source of truth
1427
+ // here instead of a second hardcoded copy of the roots inside the dispatcher.
1428
+ it('parses the repository real workflow, covering backend and frontend', () => {
1429
+ const roots = parseMirroredRoots(
1430
+ fs.readFileSync(
1431
+ path.join(REPO_ROOT, '.github', 'workflows', 'cli-template-drift-check.yml'),
1432
+ 'utf8',
1433
+ ),
1434
+ );
1435
+ assert.ok(roots.includes('backend/**'), 'backend/** must be a mirrored root');
1436
+ assert.ok(roots.includes('frontend/**'), 'frontend/** must be a mirrored root');
1437
+ assert.ok(!roots.some((root) => root.startsWith('packages/cli')));
1438
+ });
1439
+ });
1440
+
1441
+ describe('touchesMirroredRoot', () => {
1442
+ const roots = parseMirroredRoots(DRIFT_CHECK_WORKFLOW_FIXTURE);
1443
+
1444
+ it('is false when nothing the attempt changed lives under a mirrored root', () => {
1445
+ assert.equal(
1446
+ touchesMirroredRoot(['openspec/changes/x/design.md', 'cliter/foo.aurora.yaml'], roots),
1447
+ false,
1448
+ );
1449
+ });
1450
+
1451
+ it('is true for a file under a /** root', () => {
1452
+ assert.equal(touchesMirroredRoot(['backend/src/@app/iam/x.ts'], roots), true);
1453
+ });
1454
+
1455
+ it('is true for an exact-file root', () => {
1456
+ assert.equal(touchesMirroredRoot(['package.json'], roots), true);
1457
+ });
1458
+
1459
+ // `package.json` is an EXACT entry in that filter, not a prefix: the packager copies the root one
1460
+ // and nothing else, so `backend/package.json` is not what makes the mirror stale (a worker cannot
1461
+ // touch either — both are in `SLOT_EXECUTED_PATHS` — but the matcher must not over-claim).
1462
+ it('does not read an exact-file root as a prefix', () => {
1463
+ assert.equal(touchesMirroredRoot(['backend-tools/package.json.bak'], roots), false);
1464
+ });
1465
+
1466
+ it('is false with no roots at all rather than matching everything', () => {
1467
+ assert.equal(touchesMirroredRoot(['backend/src/@app/iam/x.ts'], []), false);
1468
+ });
1469
+ });
1470
+
1471
+ describe('runMirrorRegen', () => {
1472
+ // NUL-separated and NUL-terminated, like the real `-z` output `collectChangedFiles` parses. Every
1473
+ // call site here passes a single path, so no fixture in this suite would notice a wrong separator
1474
+ // today — the shape is right because the parser under test is the real one, and a suite that grows a
1475
+ // two-path case must not have to rediscover the format. (Round 3's comment claimed a measured
1476
+ // several-paths-into-one defect; the fixtures never named several.)
1477
+ const gitAnswering = (changed: readonly string[]) => (args: string[]) =>
1478
+ args[0] === 'diff' ? `${changed.join('\0')}\0` : '';
1479
+
1480
+ it('never runs the packager when nothing under a mirrored root changed', () => {
1481
+ let packagerRuns = 0;
1482
+ const result = runMirrorRegen({
1483
+ base: 'origin/main',
1484
+ runGit: gitAnswering(['openspec/changes/x/design.md']),
1485
+ driftCheckWorkflow: DRIFT_CHECK_WORKFLOW_FIXTURE,
1486
+ runPackager: () => {
1487
+ packagerRuns += 1;
1488
+ },
1489
+ });
1490
+
1491
+ assert.deepEqual(result, { ok: true, regenerated: false, mirrorFiles: [] });
1492
+ assert.equal(
1493
+ packagerRuns,
1494
+ 0,
1495
+ 'the packager is a whole repo-wide copy: it must not run for nothing',
1496
+ );
1497
+ });
1498
+
1499
+ it('runs the packager when a mirrored root changed, and reports the mirror files it produced', () => {
1500
+ const gitCalls: string[][] = [];
1501
+ let packagerRuns = 0;
1502
+ const result = runMirrorRegen({
1503
+ base: 'origin/main',
1504
+ runGit: (args) => {
1505
+ gitCalls.push(args);
1506
+ if (args[0] !== 'diff') {
1507
+ return packagerRuns === 0
1508
+ ? ''
1509
+ : ' M packages/cli/src/templates/backend/packages/iam/x.ts\0';
1510
+ }
1511
+ return 'backend/src/@app/iam/x.ts\0';
1512
+ },
1513
+ driftCheckWorkflow: DRIFT_CHECK_WORKFLOW_FIXTURE,
1514
+ runPackager: () => {
1515
+ packagerRuns += 1;
1516
+ },
1517
+ });
1518
+
1519
+ assert.equal(packagerRuns, 1);
1520
+ assert.equal(result.ok, true);
1521
+ assert.equal(result.regenerated, true);
1522
+ assert.deepEqual(result.mirrorFiles, ['packages/cli/src/templates/backend/packages/iam/x.ts']);
1523
+ // Re-collected AFTER the regen: that second read is what makes the mirror part of the attempt.
1524
+ assert.equal(gitCalls.filter((args) => args[0] === 'diff').length, 2);
1525
+ });
1526
+
1527
+ it('fails the step with the packager stderr when the regen blows up', () => {
1528
+ const result = runMirrorRegen({
1529
+ base: 'origin/main',
1530
+ runGit: gitAnswering(['frontend/src/app/domains/admin/apps/iam/x.ts']),
1531
+ driftCheckWorkflow: DRIFT_CHECK_WORKFLOW_FIXTURE,
1532
+ runPackager: () => {
1533
+ throw new Error(
1534
+ 'Command failed: node scripts/packager/publish.mjs — stderr: ENOENT fast-glob',
1535
+ );
1536
+ },
1537
+ });
1538
+
1539
+ assert.equal(result.ok, false);
1540
+ assert.equal(result.reason, 'mirror-regen-failed');
1541
+ assert.match(result.question ?? '', /ENOENT fast-glob/);
1542
+ assert.equal(result.regenerated, false);
1543
+ });
1544
+
1545
+ it('fails the step when git cannot be read, rather than assuming nothing was mirrored', () => {
1546
+ const result = runMirrorRegen({
1547
+ base: 'origin/main',
1548
+ runGit: () => {
1549
+ throw new Error('fatal: not a git repository');
1550
+ },
1551
+ driftCheckWorkflow: DRIFT_CHECK_WORKFLOW_FIXTURE,
1552
+ runPackager: () => assert.fail('the packager must not run on an unreadable diff'),
1553
+ });
1554
+
1555
+ assert.equal(result.ok, false);
1556
+ assert.equal(result.reason, 'mirror-regen-failed');
1557
+ assert.match(result.question ?? '', /not a git repository/);
1558
+ });
1559
+
1560
+ // A generated project has no `.github/` and no packager at all (`copyMonorepo()` ships
1561
+ // `scripts/backlog/**` but not `scripts/packager/**`), so there is no mirror to keep there. The
1562
+ // gate does not apply, and failing every close in a scaffolded project would be an alarm about
1563
+ // this repository's own CI ringing in someone else's.
1564
+ it('skips entirely when the repo has no drift-check workflow', () => {
1565
+ const result = runMirrorRegen({
1566
+ base: 'origin/main',
1567
+ runGit: () => assert.fail('nothing to ask git about when the gate does not exist'),
1568
+ driftCheckWorkflow: null,
1569
+ runPackager: () => assert.fail('there is no packager in a scaffolded project'),
1570
+ });
1571
+
1572
+ assert.deepEqual(result, { ok: true, regenerated: false, mirrorFiles: [] });
1573
+ });
1574
+
1575
+ // The workflow is THERE but its `paths:` list did not parse: the roots are unknown, so whether
1576
+ // the mirror needs regenerating is unknowable — the same case `runScopeCheck` refuses to trust.
1577
+ it('fails when the workflow exists but its paths: list cannot be read', () => {
1578
+ const result = runMirrorRegen({
1579
+ base: 'origin/main',
1580
+ runGit: () => '',
1581
+ driftCheckWorkflow: 'name: CLI template drift check\non:\n pull_request:\n',
1582
+ runPackager: () => assert.fail('unknown roots must not trigger a repo-wide copy'),
1583
+ });
1584
+
1585
+ assert.equal(result.ok, false);
1586
+ assert.equal(result.reason, 'mirror-regen-failed');
1587
+ assert.match(result.question ?? '', /paths:/);
1588
+ });
1589
+ });
1590
+
1591
+ // The regen's exemption is the STEP ORDER, not a hole in the forbidden list: `scope-check` returns
1592
+ // its verdict over the pre-regen file set, so a mirror path the WORKER wrote by hand is still a
1593
+ // violation — and the dispatcher-owned output that appears afterwards is never re-judged.
1594
+ describe('checkScope — the mirror stays forbidden for the worker itself', () => {
1595
+ for (const lane of [LANE.LOCAL, LANE.FRONTIER] as const) {
1596
+ it(`flags a hand-written packages/cli/src/templates/ edit on the ${lane} lane`, () => {
1597
+ const file = 'packages/cli/src/templates/backend/packages/iam/x.ts';
1598
+ const result = checkScope({ lane, changedFiles: [file], declaredFiles: [file] });
1599
+ assert.equal(result.ok, false, 'declaring the mirror must not authorise writing it');
1600
+ assert.deepEqual(result.violatingFiles, [file]);
1601
+ });
1602
+
1603
+ // design.md decision 5: `packages/cli/src/templates/monorepo/scripts/backlog/close.ts` matches
1604
+ // BOTH `packages/cli/` (soft) and the mirror prefix. The mirror prefix must be tested FIRST, or
1605
+ // this would silently become a marked PR instead of a violation.
1606
+ it(`${lane}: a mirror path that also matches the soft packages/cli/ pattern is still a violation`, () => {
1607
+ const file = 'packages/cli/src/templates/monorepo/scripts/backlog/close.ts';
1608
+ const result = checkScope({ lane, changedFiles: [file], declaredFiles: [file] });
1609
+ assert.equal(
1610
+ result.ok,
1611
+ false,
1612
+ 'the mirror prefix must win over the soft packages/cli/ pattern',
1613
+ );
1614
+ assert.deepEqual(result.violatingFiles, [file]);
1615
+ assert.deepEqual(result.humanReviewFiles, []);
1616
+ });
1617
+
1618
+ // T-31 round 2: `isMirrorOutput` was the one matcher in this module that compared
1619
+ // case-SENSITIVELY while every sibling lowercases both sides. On a case-insensitive filesystem
1620
+ // — which macOS is, and this repo is developed on — a casing variant of the mirror prefix names
1621
+ // the same file on disk, missed the anchored prefix and escaped into the soft branch as a
1622
+ // marked PR. Same inversion as the quoting one, different cause.
1623
+ it(`${lane}: a mirror path in a different casing is still a violation, not a soft mark`, () => {
1624
+ const file = 'Packages/CLI/src/Templates/monorepo/scripts/backlog/close.ts';
1625
+ const result = checkScope({ lane, changedFiles: [file], declaredFiles: [file] });
1626
+ assert.equal(result.ok, false, 'the mirror prefix must match case-insensitively');
1627
+ assert.deepEqual(result.violatingFiles, [file]);
1628
+ assert.deepEqual(result.humanReviewFiles, []);
1629
+ });
1630
+ }
1631
+ });
1632
+
1633
+ describe('runScopeCheck', () => {
1634
+ it('asks git for the committed diff and the working tree, and passes when everything checks out', () => {
1635
+ const calls: string[][] = [];
1636
+ const result = runScopeCheck({
1637
+ lane: LANE.LOCAL,
1638
+ declaredFiles: ['backend/src/@app/some-bc/x.service.ts'],
1639
+ base: 'main',
1640
+ runGit: (args) => {
1641
+ calls.push(args);
1642
+ return args[0] === 'diff' ? 'backend/src/@app/some-bc/x.service.ts\0' : '';
1643
+ },
1644
+ });
1645
+
1646
+ assert.deepEqual(calls, [
1647
+ ['diff', '--name-only', '-z', 'main...HEAD'],
1648
+ ['status', '--porcelain', '-z', '--untracked-files=all'],
1649
+ ]);
1650
+ assert.deepEqual(result, { ok: true, humanReviewFiles: [] });
1651
+ });
1652
+
1653
+ // T-31 review, corrected in round 2: `core.quotepath=false` governs only NON-ASCII bytes. A path
1654
+ // holding a `"`, a backslash or a newline still comes back wrapped in `"…"` with C-escapes under
1655
+ // that option (measured), and the escaped string fails `isMirrorOutput`'s anchored `startsWith`
1656
+ // while still matching the unanchored soft pattern `packages/cli/` — a hand-written mirror edit
1657
+ // ADMITTED and merely marked, exactly inverting the mirror-first precedence design.md decision 5
1658
+ // makes load-bearing. `-z` is what actually turns quoting off for the whole class, and
1659
+ // `--name-only` DOES accept it (measured; the note this replaces claimed otherwise) — the same
1660
+ // fix the `status` half already carries. Reachable on a retry, whose `<base>...HEAD` carries the
1661
+ // previous attempt's WIP commit.
1662
+ for (const mirrorPath of [
1663
+ 'packages/cli/src/templates/monorepo/backend/src/café.ts',
1664
+ 'packages/cli/src/templates/monorepo/backend/src/we"ird.ts',
1665
+ ]) {
1666
+ it(`reads paths verbatim with -z, so ${mirrorPath} stays a violation`, () => {
1667
+ const calls: string[][] = [];
1668
+ const result = runScopeCheck({
1669
+ lane: LANE.FRONTIER,
1670
+ declaredFiles: [],
1671
+ base: 'main',
1672
+ runGit: (args) => {
1673
+ calls.push(args);
1674
+ return args[0] === 'diff' ? `${mirrorPath}\0` : '';
1675
+ },
1676
+ });
1677
+
1678
+ assert.deepEqual(
1679
+ calls[0],
1680
+ ['diff', '--name-only', '-z', 'main...HEAD'],
1681
+ 'the diff must be asked with -z, or a quoted path stops matching the mirror prefix',
1682
+ );
1683
+ assert.equal(result.ok, false, 'a mirror path is a violation, never a soft mark');
1684
+ assert.deepEqual(result.humanReviewFiles, []);
1685
+ });
1686
+ }
1687
+
1688
+ it("diffs against the parent branch for a subtask, so the parent's own commits are not the child's diff", () => {
1689
+ const calls: string[][] = [];
1690
+ runScopeCheck({
1691
+ lane: LANE.LOCAL,
1692
+ declaredFiles: [],
1693
+ base: 'task/T-10',
1694
+ runGit: (args) => {
1695
+ calls.push(args);
1696
+ return '';
1697
+ },
1698
+ });
1699
+ assert.deepEqual(calls[0], ['diff', '--name-only', '-z', 'task/T-10...HEAD']);
1700
+ });
1701
+
1702
+ it('catches an UNCOMMITTED out-of-scope file: the worker never commits, so HEAD alone proves nothing', () => {
1703
+ const result = runScopeCheck({
1704
+ lane: LANE.LOCAL,
1705
+ declaredFiles: ['scripts/backlog/close.ts'],
1706
+ base: 'main',
1707
+ runGit: (args) => (args[0] === 'diff' ? '' : ' M scripts/backlog/entry.ts\0'),
1708
+ });
1709
+
1710
+ assert.equal(result.ok, false);
1711
+ assert.match(result.question ?? '', /scripts\/backlog\/entry\.ts/);
1712
+ });
1713
+
1714
+ it('catches an untracked new file, which never shows up in a git diff at all', () => {
1715
+ const result = runScopeCheck({
1716
+ lane: LANE.LOCAL,
1717
+ declaredFiles: [],
1718
+ base: 'main',
1719
+ runGit: (args) => (args[0] === 'diff' ? '' : '?? backend/src/@app/o-auth/sneaky.ts\0'),
1720
+ });
1721
+
1722
+ assert.equal(result.ok, false);
1723
+ assert.match(result.question ?? '', /sneaky\.ts/);
1724
+ });
1725
+
1726
+ // J10: verbatim `status --porcelain -z --untracked-files=all` capture, measured in a scratch
1727
+ // repo — a rename is ONE entry carrying TWO NUL-separated paths, new first, source second. Read
1728
+ // as newline-separated lines, that source path came back as a phantom changed file of its own.
1729
+ it('reads the new path of a rename and drops the source path, which is not a changed file', () => {
1730
+ const result = runScopeCheck({
1731
+ lane: LANE.LOCAL,
1732
+ declaredFiles: ['new name.txt'],
1733
+ base: 'main',
1734
+ runGit: (args) => (args[0] === 'diff' ? '' : 'R new name.txt\0old.txt\0'),
1735
+ });
1736
+
1737
+ assert.deepEqual(result, { ok: true, humanReviewFiles: [] });
1738
+ });
1739
+
1740
+ // The whole measured capture at once: a modification, a rename, and an untracked file.
1741
+ it('parses a real -z capture: a path with a space survives whole, and every entry is read', () => {
1742
+ const result = runScopeCheck({
1743
+ lane: LANE.LOCAL,
1744
+ declaredFiles: [],
1745
+ base: 'main',
1746
+ runGit: (args) =>
1747
+ args[0] === 'diff' ? '' : ' M keep.txt\0R new name.txt\0old.txt\0?? untracked.txt\0',
1748
+ });
1749
+
1750
+ assert.equal(result.ok, false);
1751
+ assert.equal(
1752
+ result.question,
1753
+ 'Ficheros fuera del alcance declarado: keep.txt, new name.txt, untracked.txt',
1754
+ );
1755
+ });
1756
+
1757
+ // A newline INSIDE a filename is what `-z` exists for: the line-based format quoted and escaped
1758
+ // such a path, so what the close compared against the allowlist was not the path on disk.
1759
+ it('keeps a filename containing a newline intact', () => {
1760
+ const result = runScopeCheck({
1761
+ lane: LANE.LOCAL,
1762
+ declaredFiles: [],
1763
+ base: 'main',
1764
+ runGit: (args) => (args[0] === 'diff' ? '' : '?? we\nird.ts\0'),
1765
+ });
1766
+
1767
+ assert.equal(result.ok, false);
1768
+ assert.equal(result.question, 'Ficheros fuera del alcance declarado: we\nird.ts');
1769
+ });
1770
+
1771
+ it('does not report the same file twice when it is both committed and dirty', () => {
1772
+ const result = runScopeCheck({
1773
+ lane: LANE.LOCAL,
1774
+ declaredFiles: [],
1775
+ base: 'main',
1776
+ runGit: (args) => (args[0] === 'diff' ? 'a.ts\0' : ' M a.ts\0'),
1777
+ });
1778
+
1779
+ assert.equal(result.ok, false);
1780
+ assert.equal(result.question, 'Ficheros fuera del alcance declarado: a.ts');
1781
+ });
1782
+
1783
+ it('names the violating files in the failure reason, so the Blocked comment says what went out of scope', () => {
1784
+ const result = runScopeCheck({
1785
+ lane: LANE.LOCAL,
1786
+ declaredFiles: ['scripts/backlog/close.ts'],
1787
+ base: 'main',
1788
+ runGit: (args) =>
1789
+ args[0] === 'diff'
1790
+ ? 'scripts/backlog/close.ts\0backend/src/@app/o-auth/guard.ts\0'
1791
+ : '',
1792
+ });
1793
+
1794
+ assert.equal(result.ok, false);
1795
+ assert.match(result.reason ?? '', /scope/);
1796
+ assert.match(result.question ?? '', /backend\/src\/@app\/o-auth\/guard\.ts/);
1797
+ });
1798
+
1799
+ it('ignores empty entries in either git output rather than treating "" as a changed file', () => {
1800
+ const result = runScopeCheck({
1801
+ lane: LANE.LOCAL,
1802
+ declaredFiles: [],
1803
+ base: 'main',
1804
+ runGit: () => '\0\0',
1805
+ });
1806
+ assert.deepEqual(result, { ok: true, humanReviewFiles: [] });
1807
+ });
1808
+
1809
+ // T-31 round 3: the committed half used to `trim()` every entry, which silently rewrote exactly
1810
+ // the paths `-z` exists to preserve — and the `status` half never trimmed, so the two halves
1811
+ // disagreed about the same file. A leading or trailing space in a filename is legal, and the
1812
+ // string the path lists and the declared allowlist are compared against must be the path on disk.
1813
+ it('keeps a path with surrounding whitespace verbatim, like the status half already does', () => {
1814
+ const result = runScopeCheck({
1815
+ lane: LANE.LOCAL,
1816
+ declaredFiles: [' spaced.ts '],
1817
+ base: 'main',
1818
+ runGit: (args) => (args[0] === 'diff' ? ' spaced.ts \0' : ''),
1819
+ });
1820
+ assert.deepEqual(result, { ok: true, humanReviewFiles: [] });
1821
+ });
1822
+
1823
+ it('fails closed when git itself fails: an unverifiable diff is not a passing scope check', () => {
1824
+ const result = runScopeCheck({
1825
+ lane: LANE.LOCAL,
1826
+ declaredFiles: [],
1827
+ base: 'main',
1828
+ runGit: () => {
1829
+ throw new Error('fatal: bad revision');
1830
+ },
1831
+ });
1832
+
1833
+ assert.equal(result.ok, false);
1834
+ assert.match(result.reason ?? '', /scope/);
1835
+ });
1836
+ });
1837
+
1838
+ // ── collectLeftoverFiles (T-31 round 4) ───────────────────────────────────────
1839
+ //
1840
+ // The record the FAILURE path leaves when no scope check ever ran. Round 3 filtered the leftover
1841
+ // tree through the SOFT list alone, which both misreported and under-reported: a mirror-output path
1842
+ // — refused on both lanes by three documents — was named as a soft-list file the close admits, and
1843
+ // `.claude/settings.json`, which the retry restores into the slot from `task/<id>`, was named
1844
+ // nowhere at all. The record now classifies with the SAME per-file order `checkScope` uses, from the
1845
+ // same function, so the two cannot disagree by construction.
1846
+
1847
+ describe('collectLeftoverFiles', () => {
1848
+ const gitAnswering = (changed: readonly string[]) => (args: string[]) =>
1849
+ args[0] === 'diff' ? `${changed.join('\0')}\0` : '';
1850
+
1851
+ const MIRROR_PATH = 'packages/cli/src/templates/monorepo/scripts/backlog/close.ts';
1852
+
1853
+ it('reports the mirror output as a VIOLATION, never as a soft-list file the close admits', () => {
1854
+ const record = collectLeftoverFiles({
1855
+ lane: LANE.FRONTIER,
1856
+ base: 'origin/main',
1857
+ runGit: gitAnswering([MIRROR_PATH]),
1858
+ });
1859
+
1860
+ assert.deepEqual(record.forbiddenFiles, [MIRROR_PATH]);
1861
+ assert.deepEqual(record.humanReviewFiles, []);
1862
+ });
1863
+
1864
+ it('reports a hard-list file the retry would restore, instead of saying nothing about it', () => {
1865
+ const record = collectLeftoverFiles({
1866
+ lane: LANE.FRONTIER,
1867
+ base: 'origin/main',
1868
+ runGit: gitAnswering(['.claude/settings.json', 'CLAUDE.md']),
1869
+ });
1870
+
1871
+ assert.deepEqual(record.forbiddenFiles, ['.claude/settings.json', 'CLAUDE.md']);
1872
+ assert.deepEqual(record.humanReviewFiles, []);
1873
+ });
1874
+
1875
+ it('splits a MIXED tree into the two kinds, each in exactly one bucket', () => {
1876
+ const record = collectLeftoverFiles({
1877
+ lane: LANE.FRONTIER,
1878
+ base: 'origin/main',
1879
+ runGit: gitAnswering([
1880
+ MIRROR_PATH,
1881
+ '.claude/settings.json',
1882
+ 'backend/src/@app/iam/x.ts',
1883
+ 'scripts/backlog/close.ts',
1884
+ 'packages/cli/src/index.ts',
1885
+ ]),
1886
+ });
1887
+
1888
+ assert.deepEqual(record.forbiddenFiles, [MIRROR_PATH, '.claude/settings.json']);
1889
+ assert.deepEqual(record.humanReviewFiles, [
1890
+ 'scripts/backlog/close.ts',
1891
+ 'packages/cli/src/index.ts',
1892
+ ]);
1893
+ });
1894
+
1895
+ // The point of sharing the classification: for the same tree, what the record calls forbidden is
1896
+ // exactly what the verdict calls violating (on the frontier lane, where no declaration rule
1897
+ // applies), and what it calls soft is what the verdict would have admitted.
1898
+ it('agrees with checkScope on the same tree, both kinds', () => {
1899
+ const changed = [MIRROR_PATH, '.claude/settings.json', 'scripts/backlog/close.ts'];
1900
+ const record = collectLeftoverFiles({
1901
+ lane: LANE.FRONTIER,
1902
+ base: 'origin/main',
1903
+ runGit: gitAnswering(changed),
1904
+ });
1905
+ const verdict = checkScope({ lane: LANE.FRONTIER, changedFiles: changed, declaredFiles: [] });
1906
+
1907
+ assert.deepEqual(record.forbiddenFiles, verdict.violatingFiles);
1908
+ assert.deepEqual(record.humanReviewFiles, ['scripts/backlog/close.ts']);
1909
+ });
1910
+
1911
+ // The local lane refuses three path extras the frontier lane does not (`scripts/`, `.claude/`,
1912
+ // `.git/`), so the same leftover tree is classified differently there — by the same function
1913
+ // `checkScope` asks, never by a second opinion.
1914
+ it('applies the local lane own extras, so a soft path refused there is reported as forbidden', () => {
1915
+ const record = collectLeftoverFiles({
1916
+ lane: LANE.LOCAL,
1917
+ base: 'origin/main',
1918
+ runGit: gitAnswering(['scripts/backlog/close.ts', 'packages/cli/src/index.ts']),
1919
+ });
1920
+
1921
+ assert.deepEqual(record.forbiddenFiles, ['scripts/backlog/close.ts']);
1922
+ assert.deepEqual(record.humanReviewFiles, ['packages/cli/src/index.ts']);
1923
+ });
1924
+
1925
+ it('reads the slot changes with the exact argv the scope check uses, base included', () => {
1926
+ const calls: string[][] = [];
1927
+ collectLeftoverFiles({
1928
+ lane: LANE.FRONTIER,
1929
+ base: 'origin/task/T-10',
1930
+ runGit: (args) => {
1931
+ calls.push(args);
1932
+ return '';
1933
+ },
1934
+ });
1935
+
1936
+ assert.deepEqual(calls[0], ['diff', '--name-only', '-z', 'origin/task/T-10...HEAD']);
1937
+ assert.deepEqual(calls[1], ['status', '--porcelain', '-z', '--untracked-files=all']);
1938
+ });
1939
+ });
1940
+
1941
+ describe('buildPrCreateArgs', () => {
1942
+ it('targets main for a top-level task', () => {
1943
+ assert.deepEqual(
1944
+ buildPrCreateArgs({ task: baseTask(), branch: 'task/T-12', attempt: 1, title: 'T-12' }),
1945
+ [
1946
+ 'pr',
1947
+ 'create',
1948
+ '--base',
1949
+ 'main',
1950
+ '--head',
1951
+ 'task/T-12',
1952
+ '--title',
1953
+ 'T-12',
1954
+ '--body',
1955
+ 'Dispatched attempt 1 for T-12.',
1956
+ ],
1957
+ );
1958
+ });
1959
+
1960
+ it("targets the parent's branch for a subtask (the parent's own PR is what reaches main)", () => {
1961
+ const args = buildPrCreateArgs({
1962
+ task: baseTask({ parentId: 'T-10' }),
1963
+ branch: 'task/T-12',
1964
+ attempt: 2,
1965
+ title: 'T-12',
1966
+ });
1967
+ const baseIndex = args.indexOf('--base');
1968
+ assert.equal(args[baseIndex + 1], 'task/T-10');
1969
+ });
1970
+
1971
+ // T-15: with the parent's real branch in hand, the PR targets THAT — never task/T-10, which an
1972
+ // interactive-session parent never creates.
1973
+ it("targets the parent's DECLARED branch when tasksById carries one", () => {
1974
+ const args = buildPrCreateArgs({
1975
+ task: baseTask({ parentId: 'T-10' }),
1976
+ branch: 'task/T-12',
1977
+ attempt: 2,
1978
+ title: 'T-12',
1979
+ tasksById: { 'T-10': baseTask({ id: 'T-10', declaredBranch: 'fix/parent-branch-resolution' }) },
1980
+ });
1981
+ const baseIndex = args.indexOf('--base');
1982
+ assert.equal(args[baseIndex + 1], 'fix/parent-branch-resolution');
1983
+ });
1984
+
1985
+ // T-8 point 2: with a `taskText` to compose from, the body is `composePrBody`'s rich body, not
1986
+ // the old one-liner.
1987
+ it('composes the rich body from taskText when one is given, instead of the bare one-liner', () => {
1988
+ const taskText = [
1989
+ 'Task T-12 - Fix session expiry redirect',
1990
+ '==================================================',
1991
+ '',
1992
+ 'Status: In Progress',
1993
+ '',
1994
+ 'Description:',
1995
+ '--------------------------------------------------',
1996
+ 'Users are bounced to /login with no message when the session token expires.',
1997
+ '',
1998
+ 'Acceptance Criteria:',
1999
+ '--------------------------------------------------',
2000
+ '- [x] #1 Expired-token requests redirect to /login with a visible message',
2001
+ '',
2002
+ ].join('\n');
2003
+ const args = buildPrCreateArgs({
2004
+ task: baseTask(),
2005
+ branch: 'task/T-12',
2006
+ attempt: 1,
2007
+ title: 'T-12: Fix session expiry redirect',
2008
+ taskText,
2009
+ });
2010
+ const body = args[args.indexOf('--body') + 1];
2011
+ assert.notEqual(body, 'Dispatched attempt 1 for T-12.');
2012
+ assert.match(body, /Users are bounced to \/login/);
2013
+ assert.match(body, /Expired-token requests redirect to \/login/);
2014
+ });
2015
+
2016
+ // T-31: the mark's unfailable half — a section in the body naming the soft-list files, applied
2017
+ // as part of `gh pr create` itself.
2018
+ it('names the soft-list files in the body when the scope check reported humanReviewFiles', () => {
2019
+ const taskText = [
2020
+ 'Task T-12 - Fix session expiry redirect',
2021
+ '==================================================',
2022
+ '',
2023
+ 'Status: In Progress',
2024
+ '',
2025
+ ].join('\n');
2026
+ const args = buildPrCreateArgs({
2027
+ task: baseTask(),
2028
+ branch: 'task/T-12',
2029
+ attempt: 1,
2030
+ title: 'T-12',
2031
+ taskText,
2032
+ humanReviewFiles: ['scripts/backlog/close.ts'],
2033
+ });
2034
+ const body = args[args.indexOf('--body') + 1];
2035
+ assert.match(body, /scripts\/backlog\/close\.ts/);
2036
+ });
2037
+
2038
+ it('emits nothing extra when no humanReviewFiles are given', () => {
2039
+ const args = buildPrCreateArgs({
2040
+ task: baseTask(),
2041
+ branch: 'task/T-12',
2042
+ attempt: 1,
2043
+ title: 'T-12',
2044
+ });
2045
+ assert.equal(
2046
+ args[args.indexOf('--body') + 1],
2047
+ 'Dispatched attempt 1 for T-12.',
2048
+ 'the legacy one-liner must stay exactly as it was with no mark to add',
2049
+ );
2050
+ });
2051
+ });
2052
+
2053
+ // ── composePrBody (T-8 point 2) ────────────────────────────────────────────────
2054
+
2055
+ describe('composePrBody', () => {
2056
+ const view = (overrides: { description?: string; notes?: string; ac?: string[] } = {}): string =>
2057
+ [
2058
+ 'Task T-12 - Fix session expiry redirect',
2059
+ '==================================================',
2060
+ '',
2061
+ 'Status: In Progress',
2062
+ '',
2063
+ 'Description:',
2064
+ '--------------------------------------------------',
2065
+ overrides.description ?? 'Users are bounced to /login with no message on expiry.',
2066
+ '',
2067
+ 'Acceptance Criteria:',
2068
+ '--------------------------------------------------',
2069
+ ...(overrides.ac ?? ['- [x] #1 AC one', '- [ ] #2 AC two']),
2070
+ '',
2071
+ ...(overrides.notes
2072
+ ? [
2073
+ 'Implementation Notes:',
2074
+ '--------------------------------------------------',
2075
+ overrides.notes,
2076
+ '',
2077
+ ]
2078
+ : []),
2079
+ ].join('\n');
2080
+
2081
+ it('carries the title, the description, the AC with their checked state, and the attempt count', () => {
2082
+ const body = composePrBody({
2083
+ title: 'T-12: Fix session expiry redirect',
2084
+ taskId: 'T-12',
2085
+ taskText: view(),
2086
+ attempt: 1,
2087
+ });
2088
+ // Anchored to the exact H1 line: `title` here is already the COMPOSED PR title (as every real
2089
+ // caller passes it — see `buildPrCreateArgs`), so a loose substring match
2090
+ // (`/T-12: Fix session expiry redirect/`) would also pass on the doubled defect-6 heading
2091
+ // `# T-12: T-12: Fix session expiry redirect`, since that string still contains the substring.
2092
+ assert.match(body, /^# T-12: Fix session expiry redirect$/m);
2093
+ assert.match(body, /Users are bounced to \/login with no message on expiry\./);
2094
+ assert.match(body, /\[x\].*AC one/);
2095
+ assert.match(body, /\[ \].*AC two/);
2096
+ // Anchored to the attempt-statistics section itself, always the body's last section — a bare
2097
+ // `/1/` match is tautological here: "T-12" itself contains a "1", so it passed even with the
2098
+ // whole "## Estadísticas del intento" section deleted.
2099
+ assert.ok(body.endsWith('## Estadísticas del intento\n\nIntento 1.'));
2100
+ });
2101
+
2102
+ it('includes implementation notes when the worker left any', () => {
2103
+ const body = composePrBody({
2104
+ title: 'T-12',
2105
+ taskId: 'T-12',
2106
+ taskText: view({ notes: 'Switched the guard to compare against the refreshed token.' }),
2107
+ attempt: 2,
2108
+ });
2109
+ assert.match(body, /Switched the guard to compare against the refreshed token\./);
2110
+ });
2111
+
2112
+ it('omits the implementation-notes section entirely when the worker left none', () => {
2113
+ const body = composePrBody({ title: 'T-12', taskId: 'T-12', taskText: view(), attempt: 1 });
2114
+ assert.doesNotMatch(body, /Notas de implementaci[oó]n/i);
2115
+ });
2116
+
2117
+ // T-8 defect 13: Implementation Notes is WORKER-authored prose, written mid-run with no length
2118
+ // limit of its own, spliced into a PUBLIC PR body. Reuses `sanitizeCommentBody` — the same
2119
+ // discipline the module already applies to the `Blocked` comment — rather than a second cap.
2120
+ it('caps very long implementation notes instead of splicing worker-authored prose unbounded (defect 13)', () => {
2121
+ const longNotes = 'x'.repeat(5000);
2122
+ const body = composePrBody({
2123
+ title: 'T-12',
2124
+ taskId: 'T-12',
2125
+ taskText: view({ notes: longNotes }),
2126
+ attempt: 1,
2127
+ });
2128
+ assert.ok(
2129
+ !body.includes(longNotes),
2130
+ 'the raw 5000-char notes must not reach the PR body whole',
2131
+ );
2132
+ assert.match(body, /\(truncado; ver las notas completas en el tablero\)/);
2133
+ });
2134
+
2135
+ it('strips a standalone --- line inside implementation notes, same as every other comment body', () => {
2136
+ const body = composePrBody({
2137
+ title: 'T-12',
2138
+ taskId: 'T-12',
2139
+ taskText: view({ notes: 'Switched the guard.\n---\nAlso removed the stale env flag.' }),
2140
+ attempt: 1,
2141
+ });
2142
+ assert.doesNotMatch(body, /^-{3,}$/m);
2143
+ assert.match(body, /Switched the guard\./);
2144
+ assert.match(body, /Also removed the stale env flag\./);
2145
+ });
2146
+
2147
+ it('carries attempt statistics, including the cap when one is given', () => {
2148
+ const body = composePrBody({
2149
+ title: 'T-12',
2150
+ taskId: 'T-12',
2151
+ taskText: view(),
2152
+ attempt: 2,
2153
+ maxAttempts: 3,
2154
+ });
2155
+ // Anchored to the section itself: the loose `/2/` this replaced was tautological — "T-12"
2156
+ // itself contains a "2", so it passed even with the whole attempt-statistics section deleted.
2157
+ // `/3/` alone was the only load-bearing half, since no other "3" appears anywhere in the body.
2158
+ assert.ok(body.endsWith('## Estadísticas del intento\n\nIntento 2 de 3.'));
2159
+ });
2160
+
2161
+ // F7 (2026-09-08): the previous assertions here (`typeof body === 'string'` and `body.length >
2162
+ // 0`) passed even with BOTH fallback strings below deleted from `composePrBody` — `# ${heading}`
2163
+ // is pushed unconditionally, so any non-empty heading alone satisfies them. Anchored to the two
2164
+ // fallbacks themselves, the exact behaviour this test claims to cover.
2165
+ it('degrades gracefully when the task declares no description and no AC at all', () => {
2166
+ const bareText = [
2167
+ 'Task T-12 - Bare task',
2168
+ '==================================================',
2169
+ '',
2170
+ 'Status: In Progress',
2171
+ '',
2172
+ ].join('\n');
2173
+ const body = composePrBody({ title: 'T-12', taskId: 'T-12', taskText: bareText, attempt: 1 });
2174
+ assert.match(body, /\(la tarea no declara descripción\)/);
2175
+ assert.match(body, /\(sin criterios de aceptación declarados\)/);
2176
+ });
2177
+
2178
+ it('falls back to the bare task id when no title is given', () => {
2179
+ const body = composePrBody({ title: null, taskId: 'T-12', taskText: view(), attempt: 1 });
2180
+ assert.match(body, /T-12/);
2181
+ });
2182
+
2183
+ // T-31: the human-review mark's unfailable half.
2184
+ it('names every soft-list file under its own section when humanReviewFiles is given', () => {
2185
+ const body = composePrBody({
2186
+ title: 'T-12',
2187
+ taskId: 'T-12',
2188
+ taskText: view(),
2189
+ attempt: 1,
2190
+ humanReviewFiles: ['scripts/backlog/close.ts', 'packages/cli/src/generator.ts'],
2191
+ });
2192
+ assert.match(body, /scripts\/backlog\/close\.ts/);
2193
+ assert.match(body, /packages\/cli\/src\/generator\.ts/);
2194
+ });
2195
+
2196
+ it('adds no human-review section at all when humanReviewFiles is empty or omitted', () => {
2197
+ const withEmpty = composePrBody({
2198
+ title: 'T-12',
2199
+ taskId: 'T-12',
2200
+ taskText: view(),
2201
+ attempt: 1,
2202
+ humanReviewFiles: [],
2203
+ });
2204
+ const withOmitted = composePrBody({
2205
+ title: 'T-12',
2206
+ taskId: 'T-12',
2207
+ taskText: view(),
2208
+ attempt: 1,
2209
+ });
2210
+ assert.doesNotMatch(withEmpty, /[Rr]evisión humana/);
2211
+ assert.doesNotMatch(withOmitted, /[Rr]evisión humana/);
2212
+ });
2213
+
2214
+ // T-31 round 2: the section's prose used to spell out the soft-list membership by hand
2215
+ // ("dispatcher, generador o `CLAUDE.md`"), which went stale the moment `CLAUDE.md` went back to
2216
+ // hard. It is rendered from `HUMAN_REVIEW_PATHS` instead, so the list and the sentence cannot
2217
+ // disagree again.
2218
+ it('renders the soft-list membership from HUMAN_REVIEW_PATHS, never from hand-written prose', () => {
2219
+ const body = composePrBody({
2220
+ title: 'T-12',
2221
+ taskId: 'T-12',
2222
+ taskText: view(),
2223
+ attempt: 1,
2224
+ humanReviewFiles: ['scripts/backlog/close.ts'],
2225
+ });
2226
+ for (const pattern of HUMAN_REVIEW_PATHS) {
2227
+ assert.ok(body.includes(pattern), `the section must name the soft entry ${pattern}`);
2228
+ }
2229
+ assert.doesNotMatch(body, /CLAUDE\.md/);
2230
+ });
2231
+
2232
+ // T-8 point 13's discipline, applied to the other worker-influenced list this body splices: the
2233
+ // file list comes from the attempt's own diff, so a wide refactor under `packages/cli/` produces
2234
+ // hundreds of entries in a PUBLIC body and in the `gh` argv. The sibling notes section is capped
2235
+ // through `sanitizeCommentBody` for exactly that reason.
2236
+ it('caps the soft-list file list and says how many it dropped', () => {
2237
+ const many = Array.from({ length: 120 }, (_, index) => `packages/cli/src/f${index}.ts`);
2238
+ const body = composePrBody({
2239
+ title: 'T-12',
2240
+ taskId: 'T-12',
2241
+ taskText: view(),
2242
+ attempt: 1,
2243
+ humanReviewFiles: many,
2244
+ });
2245
+ assert.ok(body.includes('packages/cli/src/f0.ts'));
2246
+ assert.ok(!body.includes('packages/cli/src/f119.ts'), 'the tail must be dropped, not spliced');
2247
+ assert.match(body, /y \d+ ficheros más/);
2248
+ });
2249
+
2250
+ // T-31 round 3. The paths come VERBATIM from `git diff -z`, so every byte a filename may legally
2251
+ // hold reaches this splice: `<`, `>`, a newline, a control character. A path holding the literal
2252
+ // END marker put a second copy of that marker INSIDE the list, so the first `indexOf(END)` in
2253
+ // `upsertHumanReviewSection` landed mid-list and the next rewrite sliced at the wrong offset —
2254
+ // destroying the very human text the delimited section exists to preserve. The renderer escapes
2255
+ // `<` and `>`, so no rendered path can spell either marker.
2256
+ it('neutralises a path that spells the section END marker, keeping exactly one marker pair', () => {
2257
+ const hostile = `packages/cli/src/${HUMAN_REVIEW_SECTION_END}.ts`;
2258
+ const body = composePrBody({
2259
+ title: 'T-12',
2260
+ taskId: 'T-12',
2261
+ taskText: view(),
2262
+ attempt: 1,
2263
+ humanReviewFiles: [hostile],
2264
+ });
2265
+ assert.equal(
2266
+ body.split(HUMAN_REVIEW_SECTION_END).length - 1,
2267
+ 1,
2268
+ 'the hostile path must not put a second END marker in the body',
2269
+ );
2270
+ assert.equal(body.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2271
+ assert.match(body, /&lt;!-- dispatcher:human-review:end --&gt;/);
2272
+ });
2273
+
2274
+ // T-31 round 4: the previous version of this test counted the lines that both start with `- ` and
2275
+ // name `packages/cli`, which is 1 whether or not the control characters are escaped — the orphan
2276
+ // second line (`b\tc.ts`) matches neither filter. It asserts the RENDERED entries between the
2277
+ // markers instead, so deleting any part of the escape range makes it fail.
2278
+ it('strips control characters from a rendered path so one entry cannot become several lines', () => {
2279
+ const body = composePrBody({
2280
+ title: 'T-12',
2281
+ taskId: 'T-12',
2282
+ taskText: view(),
2283
+ attempt: 1,
2284
+ humanReviewFiles: ['packages/cli/a\nb\tc.ts'],
2285
+ });
2286
+ const section = body.slice(
2287
+ body.indexOf(HUMAN_REVIEW_SECTION_START),
2288
+ body.indexOf(HUMAN_REVIEW_SECTION_END),
2289
+ );
2290
+ const listLines = section.split('\n').filter((line) => line.startsWith('- '));
2291
+
2292
+ assert.deepEqual(listLines, ['- packages/cli/a?b?c.ts']);
2293
+ });
2294
+
2295
+ // T-31 round 4: `MAX_MARKED_FILES` had no test of its own — both existing cap tests splice paths
2296
+ // long enough for the CHARACTER cap to stop the list first, so raising the count cap to a billion
2297
+ // left the suite green. Sixty SHORT paths (~1 KB in total, well inside the 2000-char budget) can
2298
+ // only be cut by the count.
2299
+ it('caps the section by entry COUNT even when the whole list fits the character budget', () => {
2300
+ const many = Array.from({ length: 60 }, (_, index) => `packages/cli/f${index}.ts`);
2301
+ const body = composePrBody({
2302
+ title: 'T-12',
2303
+ taskId: 'T-12',
2304
+ taskText: view(),
2305
+ attempt: 1,
2306
+ humanReviewFiles: many,
2307
+ });
2308
+ const section = body.slice(
2309
+ body.indexOf(HUMAN_REVIEW_SECTION_START),
2310
+ body.indexOf(HUMAN_REVIEW_SECTION_END),
2311
+ );
2312
+ const listLines = section.split('\n').filter((line) => line.startsWith('- packages/cli/f'));
2313
+
2314
+ assert.equal(listLines.length, 40, 'the count cap is 40, and the length cap cannot reach here');
2315
+ assert.ok(section.length < 2000, 'the character budget was never the binding constraint');
2316
+ assert.match(section, /y 20 ficheros más/);
2317
+ });
2318
+
2319
+ // The count cap alone bounds the number of entries and not their SIZE: 40 paths of 4 KB each is a
2320
+ // 160 KB section spliced into a public body and into the `gh` argv. The sibling `Blocked` comment
2321
+ // goes through `sanitizeCommentBody`'s char cap for exactly this reason; the section carries its
2322
+ // own.
2323
+ it('caps the section by total LENGTH, not only by entry count', () => {
2324
+ const long = Array.from(
2325
+ { length: 40 },
2326
+ (_, index) => `packages/cli/src/${'d'.repeat(600)}/f${index}.ts`,
2327
+ );
2328
+ const body = composePrBody({
2329
+ title: 'T-12',
2330
+ taskId: 'T-12',
2331
+ taskText: view(),
2332
+ attempt: 1,
2333
+ humanReviewFiles: long,
2334
+ });
2335
+ const start = body.indexOf(HUMAN_REVIEW_SECTION_START);
2336
+ const section = body.slice(start);
2337
+ assert.ok(
2338
+ section.length < 4000,
2339
+ `the section must stay bounded; it was ${section.length} chars`,
2340
+ );
2341
+ assert.match(section, /ficheros más/);
2342
+ assert.ok(section.endsWith(HUMAN_REVIEW_SECTION_END), 'the END marker must survive the cap');
2343
+ });
2344
+
2345
+ // The section is DELIMITED so a later rewrite can find and replace exactly it — see
2346
+ // `upsertHumanReviewSection`.
2347
+ it('wraps the section in the markers a later body rewrite locates it by', () => {
2348
+ const body = composePrBody({
2349
+ title: 'T-12',
2350
+ taskId: 'T-12',
2351
+ taskText: view(),
2352
+ attempt: 1,
2353
+ humanReviewFiles: ['scripts/backlog/close.ts'],
2354
+ });
2355
+ assert.ok(body.includes(HUMAN_REVIEW_SECTION_START));
2356
+ assert.ok(body.includes(HUMAN_REVIEW_SECTION_END));
2357
+ });
2358
+ });
2359
+
2360
+ // ── upsertHumanReviewSection (T-31 round 2) ────────────────────────────────────
2361
+ //
2362
+ // `gh pr edit --body` is a full REPLACEMENT, and the pull requests this mark rewrites are by
2363
+ // construction the ones a person was asked to read and annotate. Recomposing the body from the
2364
+ // board erased every word that person had added — "the body is a deterministic function of the
2365
+ // task" is true of the dispatcher-authored half and false of any human addition. So the rewrite
2366
+ // edits only its own delimited section and leaves the rest of the body byte-for-byte.
2367
+
2368
+ describe('upsertHumanReviewSection', () => {
2369
+ it('appends the section to a body that has none, keeping every other line', () => {
2370
+ const current = '# T-12: something\n\n## Resumen\n\nlo que hace.\n\nNota de una persona: ojo con X.';
2371
+ const updated = upsertHumanReviewSection(current, ['scripts/backlog/close.ts']);
2372
+ assert.ok(updated.startsWith(current), 'the existing body must survive verbatim at the front');
2373
+ assert.match(updated, /## Revisión humana requerida/);
2374
+ assert.match(updated, /scripts\/backlog\/close\.ts/);
2375
+ });
2376
+
2377
+ it('replaces an existing section in place and preserves human text on BOTH sides of it', () => {
2378
+ const before = '# T-12\n\n## Resumen\n\nlo que hace.';
2379
+ const after = '## Revisión de Ana\n\nEsto hay que mirarlo con calma.';
2380
+ const current = upsertHumanReviewSection(before, ['scripts/backlog/close.ts']) + `\n\n${after}`;
2381
+
2382
+ const updated = upsertHumanReviewSection(current, ['packages/cli/src/generator.ts']);
2383
+
2384
+ assert.ok(updated.startsWith(before), 'text before the section must survive');
2385
+ assert.ok(updated.includes(after), 'text a person added AFTER the section must survive');
2386
+ assert.match(updated, /packages\/cli\/src\/generator\.ts/);
2387
+ assert.doesNotMatch(updated, /scripts\/backlog\/close\.ts/);
2388
+ assert.equal(
2389
+ updated.split(HUMAN_REVIEW_SECTION_START).length - 1,
2390
+ 1,
2391
+ 'exactly one section, never a second one appended beside the first',
2392
+ );
2393
+ });
2394
+
2395
+ // The caller (`dispatch.ts`'s `applyHumanReviewBody`) does not even call `gh` when the attempt
2396
+ // reached nothing, so this is the belt to that braces: an empty list never rewrites a body.
2397
+ it('returns the body untouched when there is no soft-list file to name', () => {
2398
+ const current = '# T-12\n\nNota de una persona.';
2399
+ assert.equal(upsertHumanReviewSection(current, []), current);
2400
+ });
2401
+
2402
+ // T-31 round 3: a MALFORMED marker pair used to fall through to the append branch, so every retry
2403
+ // added another section to the same body. Three shapes, each handled deterministically and each
2404
+ // idempotent under a second rewrite.
2405
+ it('never accumulates a second section on a body whose END precedes its START', () => {
2406
+ const current = `${HUMAN_REVIEW_SECTION_END}\n\nNota de una persona.\n\n${HUMAN_REVIEW_SECTION_START}`;
2407
+ const once = upsertHumanReviewSection(current, ['scripts/backlog/close.ts']);
2408
+ const twice = upsertHumanReviewSection(once, ['packages/cli/src/generator.ts']);
2409
+
2410
+ assert.equal(twice.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2411
+ assert.equal(twice.split(HUMAN_REVIEW_SECTION_END).length - 1, 1);
2412
+ assert.ok(twice.includes('Nota de una persona.'), 'human text must survive both rewrites');
2413
+ assert.match(twice, /packages\/cli\/src\/generator\.ts/);
2414
+ });
2415
+
2416
+ it('replaces a truncated section (a START with no END) instead of appending beside it', () => {
2417
+ const before = '# T-12\n\nNota de una persona.\n\n';
2418
+ const current = `${before}${HUMAN_REVIEW_SECTION_START}\n## Revisión humana requerida\n\n- a medio escribir`;
2419
+
2420
+ const updated = upsertHumanReviewSection(current, ['scripts/backlog/close.ts']);
2421
+
2422
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2423
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_END).length - 1, 1);
2424
+ assert.ok(updated.startsWith(before));
2425
+ assert.doesNotMatch(updated, /a medio escribir/);
2426
+ });
2427
+
2428
+ // T-31 round 4, measured defect: on a body holding TWO full pairs — the shape the pre-round-3 code
2429
+ // produced on every retry, so open pull requests already hold it — the `lastIndexOf(END)` slice ran
2430
+ // from the first START to the LAST END and swallowed everything between the two sections, including
2431
+ // a person's note. "Everything outside the markers is returned byte-for-byte" is the headline
2432
+ // promise of this function, and a mark that destroys the review it asks for is worse than no mark.
2433
+ it('keeps the human text BETWEEN two full marker pairs, collapsing them into one section', () => {
2434
+ const note = 'Nota de Ana: esto hay que mirarlo con calma.';
2435
+ const current =
2436
+ `# T-12\n\n${HUMAN_REVIEW_SECTION_START}\nprimera\n${HUMAN_REVIEW_SECTION_END}\n\n${note}\n\n` +
2437
+ `${HUMAN_REVIEW_SECTION_START}\nsegunda\n${HUMAN_REVIEW_SECTION_END}\n\ncola de la PR.`;
2438
+
2439
+ const updated = upsertHumanReviewSection(current, ['packages/cli/src/generator.ts']);
2440
+
2441
+ assert.ok(updated.includes(note), 'the note between the two sections must survive');
2442
+ assert.ok(updated.includes('cola de la PR.'), 'the tail must survive too');
2443
+ assert.ok(updated.startsWith('# T-12\n\n'));
2444
+ assert.doesNotMatch(updated, /primera|segunda/);
2445
+ assert.match(updated, /packages\/cli\/src\/generator\.ts/);
2446
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2447
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_END).length - 1, 1);
2448
+ // Idempotent: the collapsed body is the ordinary one-pair case, so a second rewrite changes only
2449
+ // the section again and still loses nothing.
2450
+ const twice = upsertHumanReviewSection(updated, ['scripts/backlog/close.ts']);
2451
+ assert.ok(twice.includes(note));
2452
+ assert.ok(twice.includes('cola de la PR.'));
2453
+ assert.equal(twice.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2454
+ });
2455
+
2456
+ // T-31 round 4: the docstring claims the result always holds exactly ONE well-ordered pair, and
2457
+ // this arrangement (a full pair, human text, then a truncated START) is the one that used to leave
2458
+ // two STARTs and one END behind.
2459
+ it('leaves exactly one well-ordered pair when a truncated START follows a full pair', () => {
2460
+ const note = 'Nota de una persona.';
2461
+ const current =
2462
+ `${HUMAN_REVIEW_SECTION_START}\nprimera\n${HUMAN_REVIEW_SECTION_END}\n\n${note}\n\n${HUMAN_REVIEW_SECTION_START}`;
2463
+
2464
+ const updated = upsertHumanReviewSection(current, ['scripts/backlog/close.ts']);
2465
+
2466
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_START).length - 1, 1);
2467
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_END).length - 1, 1);
2468
+ assert.ok(updated.includes(note), 'human text between the pair and the stray START survives');
2469
+ assert.ok(
2470
+ updated.indexOf(HUMAN_REVIEW_SECTION_START) < updated.indexOf(HUMAN_REVIEW_SECTION_END),
2471
+ );
2472
+ });
2473
+
2474
+ it('drops a stray END marker rather than letting it pair with the section it appends', () => {
2475
+ const current = `# T-12\n\n${HUMAN_REVIEW_SECTION_END}\n\nNota de una persona.`;
2476
+ const updated = upsertHumanReviewSection(current, ['scripts/backlog/close.ts']);
2477
+
2478
+ assert.equal(updated.split(HUMAN_REVIEW_SECTION_END).length - 1, 1);
2479
+ assert.ok(updated.includes('Nota de una persona.'));
2480
+ assert.ok(
2481
+ updated.indexOf(HUMAN_REVIEW_SECTION_START) < updated.indexOf(HUMAN_REVIEW_SECTION_END),
2482
+ 'the surviving pair must be well ordered',
2483
+ );
2484
+ });
2485
+ });
2486
+
2487
+ // ── buildPrLabelArgs / buildPrReviewerArgs (T-31) ──────────────────────────────
2488
+ //
2489
+ // The mark's two best-effort halves: a `gh pr edit` call each, kept SEPARATE from each other (a
2490
+ // rejected reviewer must not take the label down with it) and from `pr create` (a label the
2491
+ // repository does not have would otherwise fail the PR creation itself, per design.md decision 8).
2492
+
2493
+ describe('buildPrLabelArgs', () => {
2494
+ it('produces the exact gh pr edit argv for the harness-review label', () => {
2495
+ assert.deepEqual(buildPrLabelArgs('task/T-12'), [
2496
+ 'pr',
2497
+ 'edit',
2498
+ 'task/T-12',
2499
+ '--add-label',
2500
+ 'harness-review',
2501
+ ]);
2502
+ });
2503
+ });
2504
+
2505
+ describe('buildPrReviewerArgs', () => {
2506
+ it('produces the exact gh pr edit argv for the configured reviewer handle', () => {
2507
+ assert.deepEqual(buildPrReviewerArgs('task/T-12', 'octocat'), [
2508
+ 'pr',
2509
+ 'edit',
2510
+ 'task/T-12',
2511
+ '--add-reviewer',
2512
+ 'octocat',
2513
+ ]);
2514
+ });
2515
+ });
2516
+
2517
+ // K3: a retry pushes to the SAME branch, so the second attempt's `pr create` hit "a pull request
2518
+ // for branch … already exists" and failed the whole close — with the code already on the remote and
2519
+ // a perfectly good PR open. This lookup is what turns that into a reuse.
2520
+ describe('findOpenPrUrl', () => {
2521
+ it('returns the URL of the PR already open on the branch', () => {
2522
+ const asked: string[][] = [];
2523
+ const url = findOpenPrUrl({
2524
+ branch: 'task/T-12',
2525
+ runGh: (args) => {
2526
+ asked.push(args);
2527
+ return JSON.stringify({ url: 'https://github.com/o/r/pull/7', state: 'OPEN' });
2528
+ },
2529
+ });
2530
+
2531
+ assert.deepEqual(asked, [['pr', 'view', 'task/T-12', '--json', 'url,state']]);
2532
+ assert.equal(url, 'https://github.com/o/r/pull/7');
2533
+ });
2534
+
2535
+ it('reports no PR when gh says none was found, so the caller creates one', () => {
2536
+ const url = findOpenPrUrl({
2537
+ branch: 'task/T-12',
2538
+ runGh: () => {
2539
+ throw new Error('no pull requests found for branch "task/T-12"');
2540
+ },
2541
+ });
2542
+ assert.equal(url, null);
2543
+ });
2544
+
2545
+ // A merged or closed PR is not reusable: pushing to the branch again would leave the attempt with
2546
+ // no open PR at all, and the DoD item this ticks would be a lie.
2547
+ it('reports no PR when the only one on the branch is already closed or merged', () => {
2548
+ for (const state of ['CLOSED', 'MERGED']) {
2549
+ assert.equal(
2550
+ findOpenPrUrl({
2551
+ branch: 'task/T-12',
2552
+ runGh: () => JSON.stringify({ url: 'https://x/1', state }),
2553
+ }),
2554
+ null,
2555
+ `a ${state} PR must not be reused`,
2556
+ );
2557
+ }
2558
+ });
2559
+
2560
+ // Anything that is not "none found" — a revoked token, no network — is NOT an absent PR. Swallowing
2561
+ // it would make the close create a duplicate PR the moment `gh` came back.
2562
+ it('rethrows an unrelated gh failure instead of reading it as an absent PR', () => {
2563
+ assert.throws(
2564
+ () =>
2565
+ findOpenPrUrl({
2566
+ branch: 'task/T-12',
2567
+ runGh: () => {
2568
+ throw new Error('gh: could not authenticate to github.com');
2569
+ },
2570
+ }),
2571
+ /authenticate/,
2572
+ );
2573
+ });
2574
+ });
2575
+
2576
+ describe('planMechanicalChecks', () => {
2577
+ const changed = ['backend/src/@app/o-auth/session.service.ts', 'frontend/src/app/x.component.ts'];
2578
+
2579
+ it("scopes prettier to the attempt's own changed files, one run per workspace that has prettier", () => {
2580
+ const plan = planMechanicalChecks({
2581
+ testCommand: 'pnpm --filter aurora-back test session.spec.ts',
2582
+ lintBarrels: true,
2583
+ changedFiles: changed,
2584
+ exists: () => true,
2585
+ });
2586
+ assert.deepEqual(plan.checks, [
2587
+ {
2588
+ label: 'prettier --write (aurora-back)',
2589
+ command: 'pnpm',
2590
+ args: [
2591
+ '--filter',
2592
+ 'aurora-back',
2593
+ 'exec',
2594
+ 'prettier',
2595
+ '--write',
2596
+ '--ignore-unknown',
2597
+ '--',
2598
+ 'src/@app/o-auth/session.service.ts',
2599
+ ],
2600
+ },
2601
+ {
2602
+ label: 'prettier --check (aurora-back)',
2603
+ command: 'pnpm',
2604
+ args: [
2605
+ '--filter',
2606
+ 'aurora-back',
2607
+ 'exec',
2608
+ 'prettier',
2609
+ '--check',
2610
+ '--ignore-unknown',
2611
+ '--',
2612
+ 'src/@app/o-auth/session.service.ts',
2613
+ ],
2614
+ },
2615
+ {
2616
+ label: 'prettier --write (aurora-front)',
2617
+ command: 'pnpm',
2618
+ args: [
2619
+ '--filter',
2620
+ 'aurora-front',
2621
+ 'exec',
2622
+ 'prettier',
2623
+ '--write',
2624
+ '--ignore-unknown',
2625
+ '--',
2626
+ 'src/app/x.component.ts',
2627
+ ],
2628
+ },
2629
+ {
2630
+ label: 'prettier --check (aurora-front)',
2631
+ command: 'pnpm',
2632
+ args: [
2633
+ '--filter',
2634
+ 'aurora-front',
2635
+ 'exec',
2636
+ 'prettier',
2637
+ '--check',
2638
+ '--ignore-unknown',
2639
+ '--',
2640
+ 'src/app/x.component.ts',
2641
+ ],
2642
+ },
2643
+ {
2644
+ label: 'lint-barrels',
2645
+ command: 'pnpm',
2646
+ args: ['hr:lint-barrels', '--', 'backend/src/@app/o-auth/session.service.ts'],
2647
+ },
2648
+ {
2649
+ label: 'test',
2650
+ command: 'pnpm',
2651
+ args: ['--filter', 'aurora-back', 'test', 'session.spec.ts'],
2652
+ },
2653
+ ]);
2654
+ assert.equal(plan.refusal, null);
2655
+ });
2656
+
2657
+ // J12: design.md decision (h) — "the format and guard hooks run in the close, where a
2658
+ // deterministic script ENFORCES them". A bare `--check` only reports; the executor is not asked
2659
+ // to format, so a formatting nit failed the whole attempt over something the close can fix in
2660
+ // place. `--write` first, and the `--check` after it is what proves the write actually took.
2661
+ it('formats before it verifies: --write precedes --check for every workspace', () => {
2662
+ const plan = planMechanicalChecks({
2663
+ testCommand: null,
2664
+ lintBarrels: false,
2665
+ changedFiles: ['backend/src/@api/x.ts'],
2666
+ exists: () => true,
2667
+ });
2668
+ const prettierRuns = plan.checks.filter((check) => check.label.startsWith('prettier'));
2669
+ assert.deepEqual(
2670
+ prettierRuns.map((check) => check.args[4]),
2671
+ ['--write', '--check'],
2672
+ );
2673
+ });
2674
+
2675
+ it('never runs prettier over the whole repo — an empty diff plans no prettier run at all', () => {
2676
+ const plan = planMechanicalChecks({
2677
+ testCommand: null,
2678
+ lintBarrels: false,
2679
+ changedFiles: [],
2680
+ exists: () => true,
2681
+ });
2682
+ assert.deepEqual(plan.checks, []);
2683
+ assert.deepEqual(plan.skippedPrettierFiles, []);
2684
+ });
2685
+
2686
+ it('reports files outside every prettier workspace as skipped instead of failing on them', () => {
2687
+ const plan = planMechanicalChecks({
2688
+ testCommand: null,
2689
+ lintBarrels: false,
2690
+ changedFiles: ['scripts/backlog/close.ts', '.claude/hooks/x.ts'],
2691
+ exists: () => true,
2692
+ });
2693
+ assert.deepEqual(plan.checks, []);
2694
+ assert.deepEqual(plan.skippedPrettierFiles, ['scripts/backlog/close.ts', '.claude/hooks/x.ts']);
2695
+ });
2696
+
2697
+ // T-6.1: measured on the first real frontier dispatch — Prettier exits 2 on a `.sql` file with
2698
+ // "No parser could be inferred", failing the whole triad over a file Prettier was never going to
2699
+ // format anyway. `--ignore-unknown` makes it skip such a file instead.
2700
+ it('passes --ignore-unknown to both prettier invocations, so an unrecognised file skips rather than fails', () => {
2701
+ const plan = planMechanicalChecks({
2702
+ testCommand: null,
2703
+ lintBarrels: false,
2704
+ changedFiles: ['backend/src/database/seed.sql'],
2705
+ exists: () => true,
2706
+ });
2707
+ const prettierRuns = plan.checks.filter((check) => check.label.startsWith('prettier'));
2708
+ assert.equal(prettierRuns.length, 2);
2709
+ for (const check of prettierRuns) {
2710
+ assert.ok(
2711
+ check.args.includes('--ignore-unknown'),
2712
+ `${check.label} must carry --ignore-unknown`,
2713
+ );
2714
+ }
2715
+ });
2716
+
2717
+ // T-6.1: the drizzle-kit OUTPUT under a migration folder (`migration.sql` and the 432 KB
2718
+ // `snapshot.json`) is tool-owned, not hand-written, and is not Prettier-formatted in this repo
2719
+ // (measured: `prettier --check` warns on every shipped `snapshot.json`). A `--write` over one
2720
+ // would turn a generated artifact into a huge noise-only diff, so it is excluded from BOTH
2721
+ // prettier buckets — and, being genuinely covered by the `backend/` workspace, it is not reported
2722
+ // as "no prettier workspace covers this" either, which would misname a deliberate exclusion as a
2723
+ // coverage gap.
2724
+ it('excludes tool-owned drizzle migration output from prettier entirely, without flagging it as skipped', () => {
2725
+ const plan = planMechanicalChecks({
2726
+ testCommand: null,
2727
+ lintBarrels: false,
2728
+ changedFiles: [
2729
+ 'backend/src/database/migrations/drizzle/20260905090449_x/migration.sql',
2730
+ 'backend/src/database/migrations/drizzle/20260905090449_x/snapshot.json',
2731
+ ],
2732
+ exists: () => true,
2733
+ });
2734
+ assert.deepEqual(plan.checks, []);
2735
+ assert.deepEqual(plan.skippedPrettierFiles, []);
2736
+ });
2737
+
2738
+ it('lints barrels only over the .ts files under the roots HR-BARRELS actually governs', () => {
2739
+ const plan = planMechanicalChecks({
2740
+ testCommand: null,
2741
+ lintBarrels: true,
2742
+ changedFiles: [
2743
+ 'scripts/backlog/close.ts',
2744
+ 'backend/src/@api/x.ts',
2745
+ 'backend/src/config/y.ts',
2746
+ ],
2747
+ exists: () => true,
2748
+ });
2749
+ assert.deepEqual(
2750
+ plan.checks.filter((check) => check.label === 'lint-barrels'),
2751
+ [
2752
+ {
2753
+ label: 'lint-barrels',
2754
+ command: 'pnpm',
2755
+ args: ['hr:lint-barrels', '--', 'backend/src/@api/x.ts'],
2756
+ },
2757
+ ],
2758
+ );
2759
+ });
2760
+
2761
+ it('drops the barrels lint when the repo does not expose the script', () => {
2762
+ const plan = planMechanicalChecks({
2763
+ testCommand: null,
2764
+ lintBarrels: false,
2765
+ changedFiles: ['backend/src/@api/x.ts'],
2766
+ exists: () => true,
2767
+ });
2768
+ assert.ok(!plan.checks.some((check) => check.label === 'lint-barrels'));
2769
+ });
2770
+
2771
+ it('drops the test step when the task declares no command (the caller logs the warning)', () => {
2772
+ const plan = planMechanicalChecks({
2773
+ testCommand: null,
2774
+ lintBarrels: false,
2775
+ changedFiles: [],
2776
+ exists: () => true,
2777
+ });
2778
+ assert.equal(plan.refusal, null);
2779
+ assert.ok(!plan.checks.some((check) => check.label === 'test'));
2780
+ });
2781
+
2782
+ it('refuses a disallowed test command outright, so the triad fails instead of running it', () => {
2783
+ const plan = planMechanicalChecks({
2784
+ testCommand: 'bash ./do-it.sh',
2785
+ lintBarrels: false,
2786
+ changedFiles: [],
2787
+ exists: () => true,
2788
+ });
2789
+ assert.equal(plan.refusal, 'test command no permitido');
2790
+ assert.ok(!plan.checks.some((check) => check.label === 'test'));
2791
+ });
2792
+
2793
+ // G8: a file the attempt DELETED is still a changed file. Handing it to `prettier --check` or to
2794
+ // the barrels linter fails the triad on a path that is correctly gone.
2795
+ it('drops a deleted file from both the prettier and the barrels runs', () => {
2796
+ const deleted = 'backend/src/@api/gone.ts';
2797
+ const plan = planMechanicalChecks({
2798
+ testCommand: null,
2799
+ lintBarrels: true,
2800
+ changedFiles: [deleted, 'backend/src/@api/kept.ts'],
2801
+ exists: (file) => file !== deleted,
2802
+ });
2803
+
2804
+ assert.deepEqual(plan.checks, [
2805
+ {
2806
+ label: 'prettier --write (aurora-back)',
2807
+ command: 'pnpm',
2808
+ args: [
2809
+ '--filter',
2810
+ 'aurora-back',
2811
+ 'exec',
2812
+ 'prettier',
2813
+ '--write',
2814
+ '--ignore-unknown',
2815
+ '--',
2816
+ 'src/@api/kept.ts',
2817
+ ],
2818
+ },
2819
+ {
2820
+ label: 'prettier --check (aurora-back)',
2821
+ command: 'pnpm',
2822
+ args: [
2823
+ '--filter',
2824
+ 'aurora-back',
2825
+ 'exec',
2826
+ 'prettier',
2827
+ '--check',
2828
+ '--ignore-unknown',
2829
+ '--',
2830
+ 'src/@api/kept.ts',
2831
+ ],
2832
+ },
2833
+ {
2834
+ label: 'lint-barrels',
2835
+ command: 'pnpm',
2836
+ args: ['hr:lint-barrels', '--', 'backend/src/@api/kept.ts'],
2837
+ },
2838
+ ]);
2839
+ });
2840
+
2841
+ // H12: a changed path that begins with a dash is read as a FLAG by prettier and by the barrels
2842
+ // linter. One `--` token makes the file list unambiguously a file list, for both.
2843
+ it('separates the file arguments from the flags with --, in every file-taking check', () => {
2844
+ const plan = planMechanicalChecks({
2845
+ testCommand: null,
2846
+ lintBarrels: true,
2847
+ changedFiles: ['backend/src/@api/x.ts', 'frontend/src/app/y.ts'],
2848
+ exists: () => true,
2849
+ });
2850
+
2851
+ assert.ok(plan.checks.length > 0);
2852
+ for (const check of plan.checks) {
2853
+ assert.ok(
2854
+ check.args.includes('--'),
2855
+ `${check.label} must separate its file arguments with --`,
2856
+ );
2857
+ }
2858
+ });
2859
+
2860
+ it('does not report a deleted file as an unformattable skip either — it simply is not there', () => {
2861
+ const plan = planMechanicalChecks({
2862
+ testCommand: null,
2863
+ lintBarrels: false,
2864
+ changedFiles: ['scripts/backlog/gone.ts'],
2865
+ exists: () => false,
2866
+ });
2867
+ assert.deepEqual(plan.skippedPrettierFiles, []);
2868
+ });
2869
+ });
2870
+
2871
+ describe('collectAttemptDiff', () => {
2872
+ // J2: a plain `diff HEAD` cannot see an UNTRACKED file, and a dispatched attempt's created files
2873
+ // are all untracked (the executor may not run git at all). The reviewer was therefore handed a
2874
+ // diff with every new file missing from it — and duly approved code it never saw. The
2875
+ // intent-to-add registers them so the very next diff renders them in full.
2876
+ it('marks untracked files intent-to-add BEFORE diffing, so created files reach the reviewer', () => {
2877
+ const calls: string[][] = [];
2878
+ const diff = collectAttemptDiff({
2879
+ base: 'main',
2880
+ runGit: (args) => {
2881
+ calls.push(args);
2882
+ return args.includes('main...HEAD') ? 'committed hunk\n' : 'uncommitted hunk\n';
2883
+ },
2884
+ });
2885
+
2886
+ assert.deepEqual(calls, [
2887
+ ['add', '-N', '-A', '--', '.'],
2888
+ ['diff', 'main...HEAD'],
2889
+ ['diff', 'HEAD'],
2890
+ ]);
2891
+ assert.ok(diff.includes('committed hunk'));
2892
+ assert.ok(diff.includes('uncommitted hunk'));
2893
+ });
2894
+
2895
+ it('never returns an empty string: a reviewer given no diff would approve nothing at all', () => {
2896
+ const diff = collectAttemptDiff({ base: 'main', runGit: () => '' });
2897
+ assert.match(diff, /sin cambios/i);
2898
+ });
2899
+
2900
+ it('fails the step when the intent-to-add itself fails, rather than reviewing a partial diff', () => {
2901
+ assert.throws(
2902
+ () =>
2903
+ collectAttemptDiff({
2904
+ base: 'main',
2905
+ runGit: (args) => {
2906
+ if (args[0] === 'add') {
2907
+ throw new Error('fatal: index file corrupt');
2908
+ }
2909
+ return '';
2910
+ },
2911
+ }),
2912
+ /index file corrupt/,
2913
+ );
2914
+ });
2915
+
2916
+ // G10: a note in place of the diff was handed to the reviewer as if it WERE the diff, and the
2917
+ // reviewer then judged an empty change set. An uncollectable diff has to fail the step instead.
2918
+ it('throws when git fails, so the caller fails the reviewer step instead of reviewing a note', () => {
2919
+ assert.throws(
2920
+ () =>
2921
+ collectAttemptDiff({
2922
+ base: 'main',
2923
+ runGit: () => {
2924
+ throw new Error('fatal: not a git repository');
2925
+ },
2926
+ }),
2927
+ /not a git repository/,
2928
+ );
2929
+ });
2930
+ });
2931
+
2932
+ // ── F1: the WIP commit message must survive commitlint ────────────────────────
2933
+
2934
+ describe('buildWipCommitMessage', () => {
2935
+ it('is a Conventional Commit whose scope is the task id in lowercase', () => {
2936
+ assert.equal(buildWipCommitMessage('T-12'), 'chore(t-12): wip dispatcher auto-save');
2937
+ });
2938
+
2939
+ it("stays inside commitlint's 100-character header limit for a dotted subtask id", () => {
2940
+ assert.ok(buildWipCommitMessage('T-123.45').length <= 100);
2941
+ });
2942
+
2943
+ // The husky `commit-msg` hook runs in every worktree slot, so THIS repo's real commitlint config
2944
+ // is the only authority on whether the auto-save commit lands. Skipped (not failed) where the
2945
+ // binary is unavailable — a unit suite must not depend on a node_modules install.
2946
+ it("passes this repo's own commitlint, the hook the slot's commit actually goes through", () => {
2947
+ let output: { status: number };
2948
+ try {
2949
+ execFileSync('npx', ['--no', '--', 'commitlint', '--quiet'], {
2950
+ input: buildWipCommitMessage('T-12'),
2951
+ encoding: 'utf8',
2952
+ stdio: ['pipe', 'ignore', 'ignore'],
2953
+ });
2954
+ output = { status: 0 };
2955
+ } catch (error) {
2956
+ const failure = error as { status?: number; code?: string };
2957
+ if (failure.code === 'ENOENT' || failure.status === 127) {
2958
+ return; // commitlint not installed in this environment.
2959
+ }
2960
+ output = { status: failure.status ?? 1 };
2961
+ }
2962
+ assert.equal(output.status, 0, 'commitlint rejected the dispatcher WIP commit message');
2963
+ });
2964
+ });
2965
+
2966
+ describe('executeClose — a runner that THROWS', () => {
2967
+ it('still saves work before releasing, instead of escaping the close entirely', () => {
2968
+ const { calls, runners } = recordingRunners({
2969
+ formatLintTest: () => {
2970
+ calls.push('formatLintTest');
2971
+ throw new Error('git: command not found');
2972
+ },
2973
+ });
2974
+
2975
+ const executed = executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
2976
+ lane: LANE.FRONTIER,
2977
+ attempt: 1,
2978
+ branch: 'task/T-1',
2979
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
2980
+ });
2981
+
2982
+ assert.deepEqual(calls, [
2983
+ 'boardCheck',
2984
+ 'scopeCheck',
2985
+ 'formatLintTest',
2986
+ 'saveWork',
2987
+ 'block',
2988
+ 'releaseSlot',
2989
+ ]);
2990
+ assert.deepEqual(executed, [
2991
+ 'boardCheck',
2992
+ 'scopeCheck',
2993
+ 'formatLintTest',
2994
+ 'saveWork',
2995
+ 'block',
2996
+ 'releaseSlot',
2997
+ ]);
2998
+ });
2999
+
3000
+ it('keeps the slot when saveWork itself throws — the work may never have been committed', () => {
3001
+ const { calls, runners } = recordingRunners({
3002
+ scopeCheck: () => {
3003
+ calls.push('scopeCheck');
3004
+ return { ok: false, reason: 'scope-check-failed', humanReviewFiles: [] };
3005
+ },
3006
+ saveWork: () => {
3007
+ calls.push('saveWork');
3008
+ throw new Error('git push exploded');
3009
+ },
3010
+ });
3011
+
3012
+ executeClose(planClose({ outcome: 'success', lane: LANE.FRONTIER }), runners, {
3013
+ lane: LANE.FRONTIER,
3014
+ attempt: 1,
3015
+ branch: 'task/T-1',
3016
+ logPath: '.backlog/.dispatch/T-1/intento-1/run.log',
3017
+ });
3018
+
3019
+ assert.deepEqual(calls, ['boardCheck', 'scopeCheck', 'saveWork', 'blockKeepSlot']);
3020
+ });
3021
+ });
3022
+
3023
+ // ── F3: the pre-PR gate is about ACCEPTANCE CRITERIA ──────────────────────────
3024
+
3025
+ const gateTask = (acLines: string[], dodLines: string[]): string =>
3026
+ [
3027
+ 'Acceptance Criteria:',
3028
+ '--------------------------------------------------',
3029
+ ...acLines,
3030
+ '',
3031
+ 'Definition of Done:',
3032
+ '--------------------------------------------------',
3033
+ ...dodLines,
3034
+ '',
3035
+ ].join('\n');
3036
+
3037
+ describe('evaluateAcceptanceGate', () => {
3038
+ it('passes when every acceptance criterion is checked and the dispatcher already ticked its own DoD', () => {
3039
+ const result = evaluateAcceptanceGate(
3040
+ gateTask(
3041
+ ['- [x] #1 Uno'],
3042
+ ['- [x] #1 Scoped tests pass with the command declared in the task'],
3043
+ ),
3044
+ );
3045
+ assert.deepEqual(result, { ok: true });
3046
+ });
3047
+
3048
+ // J6: the gate runs AFTER the triad, and the triad ticks "scoped tests pass" only when a test
3049
+ // actually ran and passed. Still unticked here means no test ran — and the gate used to let that
3050
+ // through, because the item is dispatcher-owned and therefore excluded from the human list. An
3051
+ // attempt reached its PR with the tests-pass box ticked by nobody and verified by nothing.
3052
+ it('fails when the dispatcher-owned "scoped tests pass" item is still unticked at the gate', () => {
3053
+ const result = evaluateAcceptanceGate(
3054
+ gateTask(
3055
+ ['- [x] #1 Uno'],
3056
+ ['- [ ] #1 Scoped tests pass with the command declared in the task'],
3057
+ ),
3058
+ );
3059
+ assert.equal(result.ok, false);
3060
+ assert.match(result.question ?? '', /no declara Test command/);
3061
+ });
3062
+
3063
+ it('passes a task whose Definition of Done never mentions scoped tests at all', () => {
3064
+ const result = evaluateAcceptanceGate(
3065
+ gateTask(['- [x] #1 Uno'], ['- [x] #1 PR opened to main']),
3066
+ );
3067
+ assert.deepEqual(result, { ok: true });
3068
+ });
3069
+
3070
+ it('fails naming the acceptance criteria the worker left unchecked', () => {
3071
+ const result = evaluateAcceptanceGate(gateTask(['- [x] #1 Uno', '- [ ] #2 Dos'], []));
3072
+ assert.equal(result.ok, false);
3073
+ assert.match(result.question ?? '', /Dos/);
3074
+ });
3075
+
3076
+ it('fails on an unchecked DoD item no close step proves', () => {
3077
+ const result = evaluateAcceptanceGate(
3078
+ gateTask(['- [x] #1 Uno'], ['- [ ] #1 Un humano revisa el diseno']),
3079
+ );
3080
+ assert.equal(result.ok, false);
3081
+ assert.match(result.question ?? '', /humano/);
3082
+ });
3083
+
3084
+ it('fails a task that declares no acceptance criteria at all', () => {
3085
+ const result = evaluateAcceptanceGate(gateTask([], []));
3086
+ assert.equal(result.ok, false);
3087
+ assert.equal(result.question, 'la tarea no declara criterios de aceptación');
3088
+ });
3089
+ });
3090
+
3091
+ // ── F16: a Blocked comment body the backlog CLI actually accepts ──────────────
3092
+
3093
+ describe('sanitizeCommentBody', () => {
3094
+ it('replaces a standalone --- line, which `backlog task edit --comment` rejects outright', () => {
3095
+ assert.equal(sanitizeCommentBody('antes\n---\ndespués'), 'antes\n___\ndespués');
3096
+ });
3097
+
3098
+ it('leaves a dash run inside a line alone — only a STANDALONE --- is reserved', () => {
3099
+ assert.equal(sanitizeCommentBody('a --- b'), 'a --- b');
3100
+ });
3101
+
3102
+ it('truncates a very long body and says where the rest lives', () => {
3103
+ const sanitized = sanitizeCommentBody('x'.repeat(6000));
3104
+ assert.ok(sanitized.length <= 4000);
3105
+ assert.match(sanitized, /\(truncado; ver review\.md\)$/);
3106
+ });
3107
+
3108
+ it('truncates with a CALLER-given tail instead, when one is passed', () => {
3109
+ const sanitized = sanitizeCommentBody('x'.repeat(6000), '\n\n(truncado; ver run.log)');
3110
+ assert.ok(sanitized.length <= 4000);
3111
+ assert.match(sanitized, /\(truncado; ver run\.log\)$/);
3112
+ assert.ok(!/review\.md/.test(sanitized));
3113
+ });
3114
+ });
3115
+
3116
+ // ── needsGuidanceQuestion: the Blocked comment's `question` for a needs-guidance outcome ──────
3117
+ //
3118
+ // T-6 measured a `Blocked` comment carrying only the reason, the branch and the log path for a
3119
+ // needs-guidance outcome — never the worker's own report (the split summary and its three design
3120
+ // decisions), which survived only in `stream.jsonl`/`run.log`. This is what fixes that: the
3121
+ // terminal `result` event's own text becomes the question, sanitized and capped like every other
3122
+ // one — but pointing at `run.log`, where the FULL report lives, not `review.md`.
3123
+ describe('needsGuidanceQuestion', () => {
3124
+ it('returns undefined for an absent or blank result text — the comment then names just the outcome', () => {
3125
+ assert.equal(needsGuidanceQuestion(undefined), undefined);
3126
+ assert.equal(needsGuidanceQuestion(' '), undefined);
3127
+ });
3128
+
3129
+ it("carries the worker's own report through verbatim when it fits", () => {
3130
+ assert.equal(
3131
+ needsGuidanceQuestion('status: needs-guidance (ver preguntas en el texto)'),
3132
+ 'status: needs-guidance (ver preguntas en el texto)',
3133
+ );
3134
+ });
3135
+
3136
+ it('sanitizes a standalone --- line, exactly like every other comment body', () => {
3137
+ assert.equal(needsGuidanceQuestion('antes\n---\ndespués'), 'antes\n___\ndespués');
3138
+ });
3139
+
3140
+ it('truncates an over-long report and points at run.log, never review.md', () => {
3141
+ const question = needsGuidanceQuestion('x'.repeat(6000));
3142
+ assert.ok((question?.length ?? 0) <= 4000);
3143
+ assert.match(question ?? '', /\(truncado; ver run\.log\)$/);
3144
+ assert.ok(!/review\.md/.test(question ?? ''));
3145
+ });
3146
+ });
3147
+
3148
+ describe('formatBlockComment', () => {
3149
+ it('sanitizes the reviewer verdict it embeds, so the whole comment is postable', () => {
3150
+ const comment = formatBlockComment({
3151
+ reason: 'reviewer-rejected',
3152
+ question: 'VERDICT: fail\n---\nEl test no falla si rompes la lógica.',
3153
+ branch: 'task/T-12',
3154
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3155
+ whatToDo: 'Corrige y reencola.',
3156
+ attempt: 2,
3157
+ terminal: false,
3158
+ });
3159
+ assert.ok(!/^---$/m.test(comment));
3160
+ assert.match(comment, /task\/T-12/);
3161
+ });
3162
+
3163
+ // T-31 round 2. The soft-list mark lives on the pull request, and a FAILED close opens none: the
3164
+ // failure plan is `save-work` then `block`, with no `open-pr` step at all. So the one channel
3165
+ // that reaches a person on that path — this comment — must name the soft-list files the scope
3166
+ // check admitted, or an attempt that touched the dispatcher's own sources and then failed leaves
3167
+ // no record of having done so anywhere.
3168
+ it('names the soft-list files the scope check admitted, since a failed close opens no PR to mark', () => {
3169
+ const comment = formatBlockComment({
3170
+ reason: 'format-lint-test-failed',
3171
+ branch: 'task/T-12',
3172
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3173
+ whatToDo: 'Corrige y reencola.',
3174
+ attempt: 2,
3175
+ terminal: false,
3176
+ humanReviewFiles: ['scripts/backlog/close.ts', 'packages/cli/src/index.ts'],
3177
+ });
3178
+ assert.match(comment, /scripts\/backlog\/close\.ts/);
3179
+ assert.match(comment, /packages\/cli\/src\/index\.ts/);
3180
+ });
3181
+
3182
+ it('adds no soft-list section when the attempt reached none', () => {
3183
+ const comment = formatBlockComment({
3184
+ reason: 'format-lint-test-failed',
3185
+ branch: 'task/T-12',
3186
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3187
+ whatToDo: 'Corrige y reencola.',
3188
+ attempt: 2,
3189
+ terminal: false,
3190
+ humanReviewFiles: [],
3191
+ });
3192
+ assert.ok(!/lista blanda/i.test(comment));
3193
+ });
3194
+
3195
+ // T-31 round 3: the equivalent of the PR body's 120-file cap test, on the OTHER channel. Both
3196
+ // existing block-comment tests pass two files, so `MAX_MARKED_FILES` and the dropped-count tail
3197
+ // would pass here whether or not the cap applied — and this is the ONLY channel the failure path
3198
+ // reaches. `sanitizeCommentBody` truncates the whole comment at 4000 chars, so an uncapped list
3199
+ // does not merely bloat the comment: it pushes `whatToDo` (the one actionable line) off the end.
3200
+ //
3201
+ // Round 4: both tests passed `question: undefined`, so the risk they name — the actionable line
3202
+ // evicted by the list — could not be reproduced by either. A `needs-guidance` question IS the
3203
+ // worker's whole final report (`needsGuidanceQuestion`), routinely a couple of kilobytes, and with
3204
+ // one of those in place the 2000-char list budget alone (half the comment's own 4000) still evicted
3205
+ // the actionable line. Both tests now carry one.
3206
+ it('caps the soft-list file list and keeps the actionable line inside the 4000-char body', () => {
3207
+ const many = Array.from({ length: 120 }, (_, index) => `packages/cli/src/f${index}.ts`);
3208
+ const comment = formatBlockComment({
3209
+ reason: 'format-lint-test-failed',
3210
+ question: `informe del worker: ${'x'.repeat(1900)}`,
3211
+ branch: 'task/T-12',
3212
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3213
+ whatToDo: 'Corrige y reencola.',
3214
+ attempt: 2,
3215
+ terminal: false,
3216
+ humanReviewFiles: many,
3217
+ });
3218
+ assert.ok(comment.includes('packages/cli/src/f0.ts'));
3219
+ assert.ok(!comment.includes('packages/cli/src/f119.ts'), 'the tail must be dropped, not spliced');
3220
+ assert.match(comment, /y \d+ más/);
3221
+ assert.ok(comment.includes('Corrige y reencola.'), 'the actionable line must survive the splice');
3222
+ assert.ok(comment.length <= 4000);
3223
+ });
3224
+
3225
+ it('caps the block comment list by total LENGTH too, not only by entry count', () => {
3226
+ const long = Array.from(
3227
+ { length: 40 },
3228
+ (_, index) => `packages/cli/src/${'d'.repeat(600)}/f${index}.ts`,
3229
+ );
3230
+ const comment = formatBlockComment({
3231
+ reason: 'format-lint-test-failed',
3232
+ question: `informe del worker: ${'x'.repeat(1900)}`,
3233
+ branch: 'task/T-12',
3234
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3235
+ whatToDo: 'Corrige y reencola.',
3236
+ attempt: 2,
3237
+ terminal: false,
3238
+ humanReviewFiles: long,
3239
+ });
3240
+ assert.match(comment, /y \d+ más/);
3241
+ assert.ok(comment.includes('Corrige y reencola.'), 'the actionable line must survive the splice');
3242
+ assert.ok(comment.length <= 4000);
3243
+ });
3244
+
3245
+ // The measured eviction (T-31 round 4): 40 soft paths of ~60 chars fill the list budget (2000) and a
3246
+ // 1900-char worker report fills most of the rest, and the comment reached EXACTLY 4000 chars with
3247
+ // `whatToDo` cut off — because the list budget is half the comment budget and knows nothing about
3248
+ // what the rest of the comment already used. The list is budgeted against what is left instead.
3249
+ it('keeps the actionable line when a full soft list meets a full worker report', () => {
3250
+ const sixtyish = Array.from(
3251
+ { length: 40 },
3252
+ (_, index) => `packages/cli/src/${'d'.repeat(40)}/f${index}.ts`,
3253
+ );
3254
+ const comment = formatBlockComment({
3255
+ reason: 'needs-guidance',
3256
+ question: `informe del worker: ${'x'.repeat(1900)}`,
3257
+ branch: 'task/T-12',
3258
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3259
+ whatToDo: 'Corrige y reencola.',
3260
+ attempt: 2,
3261
+ terminal: false,
3262
+ humanReviewFiles: sixtyish,
3263
+ });
3264
+
3265
+ assert.ok(comment.length <= 4000, `the comment was ${comment.length} chars`);
3266
+ assert.ok(comment.endsWith('Corrige y reencola.'), 'the actionable line is the last thing said');
3267
+ assert.match(comment, /lista blanda/, 'and the soft-list record is still there');
3268
+ });
3269
+
3270
+ // The other half of the same budget: when the worker's own report is what does not fit, the report
3271
+ // is the part that gets truncated, never the line telling a person what to do next.
3272
+ it('truncates the QUESTION rather than the actionable line when the report alone overflows', () => {
3273
+ const comment = formatBlockComment({
3274
+ reason: 'needs-guidance',
3275
+ question: 'y'.repeat(6000),
3276
+ branch: 'task/T-12',
3277
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3278
+ whatToDo: 'Corrige y reencola.',
3279
+ attempt: 2,
3280
+ terminal: false,
3281
+ humanReviewFiles: ['scripts/backlog/close.ts'],
3282
+ });
3283
+
3284
+ assert.ok(comment.length <= 4000);
3285
+ assert.ok(comment.endsWith('Corrige y reencola.'), 'the actionable line is the last thing said');
3286
+ assert.match(comment, /truncad/, 'a truncated report must say so');
3287
+ assert.match(comment, /scripts\/backlog\/close\.ts/, 'the soft-list record survives too');
3288
+ });
3289
+
3290
+ // T-31 round 4: the failure-path record carries BOTH kinds, and the comment must not present a
3291
+ // mirror-output or hard-list leftover as a soft-list file the close admitted — the retry restores
3292
+ // that tree into the slot from `task/<id>`, so this line is what tells the person releasing the
3293
+ // task to clean it up.
3294
+ it('names the forbidden leftovers apart from the soft-list ones, never as admitted files', () => {
3295
+ const comment = formatBlockComment({
3296
+ reason: 'needs-guidance',
3297
+ branch: 'task/T-12',
3298
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3299
+ whatToDo: 'Corrige y reencola.',
3300
+ attempt: 2,
3301
+ terminal: false,
3302
+ forbiddenFiles: ['packages/cli/src/templates/monorepo/x.ts', '.claude/settings.json'],
3303
+ humanReviewFiles: ['scripts/backlog/entry.ts'],
3304
+ });
3305
+
3306
+ const forbiddenLine = comment
3307
+ .split('\n')
3308
+ .find((line) => line.includes('.claude/settings.json'));
3309
+ const softLine = comment.split('\n').find((line) => line.includes('lista blanda'));
3310
+
3311
+ assert.ok(forbiddenLine !== undefined, 'the forbidden leftovers must be named');
3312
+ assert.match(forbiddenLine ?? '', /prohibid/i, 'and named as forbidden, not as admitted');
3313
+ assert.ok(forbiddenLine?.includes('packages/cli/src/templates/monorepo/x.ts'));
3314
+ assert.ok(
3315
+ !forbiddenLine?.includes('scripts/backlog/entry.ts'),
3316
+ 'the two kinds must not share a line',
3317
+ );
3318
+ assert.ok(softLine !== undefined && softLine.includes('scripts/backlog/entry.ts'));
3319
+ assert.ok(!softLine?.includes('.claude/settings.json'));
3320
+ });
3321
+
3322
+ it('adds no forbidden section when the attempt left none', () => {
3323
+ const comment = formatBlockComment({
3324
+ reason: 'format-lint-test-failed',
3325
+ branch: 'task/T-12',
3326
+ logPath: '.backlog/.dispatch/T-12/intento-1/run.log',
3327
+ whatToDo: 'Corrige y reencola.',
3328
+ attempt: 2,
3329
+ terminal: false,
3330
+ forbiddenFiles: [],
3331
+ humanReviewFiles: [],
3332
+ });
3333
+ assert.ok(!/prohibid/i.test(comment));
3334
+ });
3335
+ });
3336
+
3337
+ // ── H14/H15: the PR title, and one casing across both dispatcher-authored commits ─────────────
3338
+
3339
+ describe('buildPrTitle', () => {
3340
+ it("uses '<id>: <title>' so a board of PRs is readable without opening any of them", () => {
3341
+ assert.equal(
3342
+ buildPrTitle('T-12', 'Refresh an expired session token'),
3343
+ 'T-12: Refresh an expired session token',
3344
+ );
3345
+ });
3346
+
3347
+ it('falls back to the bare id when the task title could not be read', () => {
3348
+ assert.equal(buildPrTitle('T-12', null), 'T-12');
3349
+ assert.equal(buildPrTitle('T-12', ' '), 'T-12');
3350
+ });
3351
+ });
3352
+
3353
+ describe('buildAttemptCommitMessage', () => {
3354
+ it('scopes the commit with the task id in the SAME casing the WIP auto-save uses', () => {
3355
+ assert.equal(buildAttemptCommitMessage('T-12', 3), 'feat(t-12): dispatched attempt 3');
3356
+ assert.match(buildWipCommitMessage('T-12'), /^chore\(t-12\)/);
3357
+ });
3358
+ });