ddd-ts-kit 0.19.0 → 0.21.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (255) hide show
  1. package/CHANGELOG.md +81 -0
  2. package/README.fr.md +24 -11
  3. package/README.md +20 -9
  4. package/dist/check/authz/is-granted.d.ts +8 -0
  5. package/dist/check/authz/is-granted.d.ts.map +1 -0
  6. package/dist/check/authz/is-granted.js +11 -0
  7. package/dist/check/authz/is-granted.js.map +1 -0
  8. package/dist/check/authz/permission-sets.d.ts +13 -0
  9. package/dist/check/authz/permission-sets.d.ts.map +1 -0
  10. package/dist/check/authz/permission-sets.js +19 -0
  11. package/dist/check/authz/permission-sets.js.map +1 -0
  12. package/dist/check/catalogue/architecture-rules.d.ts.map +1 -1
  13. package/dist/check/catalogue/architecture-rules.js +4 -0
  14. package/dist/check/catalogue/architecture-rules.js.map +1 -1
  15. package/dist/check/catalogue/default-severities.d.ts.map +1 -1
  16. package/dist/check/catalogue/default-severities.js +2 -0
  17. package/dist/check/catalogue/default-severities.js.map +1 -1
  18. package/dist/check/commands/rules-command.js +2 -2
  19. package/dist/check/commands/rules-command.js.map +1 -1
  20. package/dist/check/configuration/config-inspection.d.ts.map +1 -1
  21. package/dist/check/configuration/config-inspection.js +7 -1
  22. package/dist/check/configuration/config-inspection.js.map +1 -1
  23. package/dist/check/engine/run-check.d.ts.map +1 -1
  24. package/dist/check/engine/run-check.js +17 -1
  25. package/dist/check/engine/run-check.js.map +1 -1
  26. package/dist/check/explain/authz-docs.d.ts.map +1 -1
  27. package/dist/check/explain/authz-docs.js +15 -0
  28. package/dist/check/explain/authz-docs.js.map +1 -1
  29. package/dist/check/explain/layout-docs.js +1 -1
  30. package/dist/check/explain/layout-docs.js.map +1 -1
  31. package/dist/check/explain/persistence-docs.js +1 -1
  32. package/dist/check/explain/persistence-docs.js.map +1 -1
  33. package/dist/check/explain/tree-docs.js +2 -2
  34. package/dist/check/explain/tree-docs.js.map +1 -1
  35. package/dist/check/explain/wiring-docs.d.ts.map +1 -1
  36. package/dist/check/explain/wiring-docs.js +7 -0
  37. package/dist/check/explain/wiring-docs.js.map +1 -1
  38. package/dist/check/fixtures/authz-granted-fixtures.d.ts +3 -0
  39. package/dist/check/fixtures/authz-granted-fixtures.d.ts.map +1 -0
  40. package/dist/check/fixtures/authz-granted-fixtures.js +71 -0
  41. package/dist/check/fixtures/authz-granted-fixtures.js.map +1 -0
  42. package/dist/check/fixtures/config-fixtures.d.ts.map +1 -1
  43. package/dist/check/fixtures/config-fixtures.js +50 -1
  44. package/dist/check/fixtures/config-fixtures.js.map +1 -1
  45. package/dist/check/fixtures/fixtures.d.ts.map +1 -1
  46. package/dist/check/fixtures/fixtures.js +2 -0
  47. package/dist/check/fixtures/fixtures.js.map +1 -1
  48. package/dist/check/fixtures/governance-fixtures.d.ts.map +1 -1
  49. package/dist/check/fixtures/governance-fixtures.js +12 -3
  50. package/dist/check/fixtures/governance-fixtures.js.map +1 -1
  51. package/dist/check/fixtures/layer-fixtures.js +1 -1
  52. package/dist/check/fixtures/layer-fixtures.js.map +1 -1
  53. package/dist/check/fixtures/layout-fixtures.d.ts.map +1 -1
  54. package/dist/check/fixtures/layout-fixtures.js +6 -0
  55. package/dist/check/fixtures/layout-fixtures.js.map +1 -1
  56. package/dist/check/fixtures/persistence-fixtures.d.ts.map +1 -1
  57. package/dist/check/fixtures/persistence-fixtures.js +16 -0
  58. package/dist/check/fixtures/persistence-fixtures.js.map +1 -1
  59. package/dist/check/fixtures/test-fixtures.d.ts.map +1 -1
  60. package/dist/check/fixtures/test-fixtures.js +35 -1
  61. package/dist/check/fixtures/test-fixtures.js.map +1 -1
  62. package/dist/check/fixtures/tree-fixtures.js +1 -1
  63. package/dist/check/fixtures/tree-fixtures.js.map +1 -1
  64. package/dist/check/fixtures/vocabulary-fixtures.d.ts.map +1 -1
  65. package/dist/check/fixtures/vocabulary-fixtures.js +4 -0
  66. package/dist/check/fixtures/vocabulary-fixtures.js.map +1 -1
  67. package/dist/check/language/declared-vocabularies.d.ts.map +1 -1
  68. package/dist/check/language/declared-vocabularies.js +8 -28
  69. package/dist/check/language/declared-vocabularies.js.map +1 -1
  70. package/dist/check/migrations/working-migration-findings.d.ts +8 -0
  71. package/dist/check/migrations/working-migration-findings.d.ts.map +1 -0
  72. package/dist/check/migrations/working-migration-findings.js +22 -0
  73. package/dist/check/migrations/working-migration-findings.js.map +1 -0
  74. package/dist/check/model/project.d.ts +3 -0
  75. package/dist/check/model/project.d.ts.map +1 -1
  76. package/dist/check/project/assemble-project.d.ts +2 -2
  77. package/dist/check/project/assemble-project.d.ts.map +1 -1
  78. package/dist/check/project/assemble-project.js +16 -6
  79. package/dist/check/project/assemble-project.js.map +1 -1
  80. package/dist/check/rules/authz-granted.d.ts +11 -0
  81. package/dist/check/rules/authz-granted.d.ts.map +1 -0
  82. package/dist/check/rules/authz-granted.js +45 -0
  83. package/dist/check/rules/authz-granted.js.map +1 -0
  84. package/dist/check/rules/clean-file-size.d.ts.map +1 -1
  85. package/dist/check/rules/clean-file-size.js +6 -1
  86. package/dist/check/rules/clean-file-size.js.map +1 -1
  87. package/dist/check/rules/clean-one-export-per-file.d.ts.map +1 -1
  88. package/dist/check/rules/clean-one-export-per-file.js +2 -11
  89. package/dist/check/rules/clean-one-export-per-file.js.map +1 -1
  90. package/dist/check/rules/config-rule-off-everywhere.d.ts +3 -0
  91. package/dist/check/rules/config-rule-off-everywhere.d.ts.map +1 -0
  92. package/dist/check/rules/config-rule-off-everywhere.js +21 -0
  93. package/dist/check/rules/config-rule-off-everywhere.js.map +1 -0
  94. package/dist/check/rules/governance-recorded-deviation.js +14 -7
  95. package/dist/check/rules/governance-recorded-deviation.js.map +1 -1
  96. package/dist/check/rules/persistence-migration-history.d.ts.map +1 -1
  97. package/dist/check/rules/persistence-migration-history.js +9 -2
  98. package/dist/check/rules/persistence-migration-history.js.map +1 -1
  99. package/dist/check/rules/test-spec-required.d.ts.map +1 -1
  100. package/dist/check/rules/test-spec-required.js +3 -2
  101. package/dist/check/rules/test-spec-required.js.map +1 -1
  102. package/dist/check/support/is-abstract-base.d.ts +7 -0
  103. package/dist/check/support/is-abstract-base.d.ts.map +1 -0
  104. package/dist/check/support/is-abstract-base.js +11 -0
  105. package/dist/check/support/is-abstract-base.js.map +1 -0
  106. package/dist/check/support/is-generated-context-file.d.ts +4 -0
  107. package/dist/check/support/is-generated-context-file.d.ts.map +1 -0
  108. package/dist/check/support/is-generated-context-file.js +12 -0
  109. package/dist/check/support/is-generated-context-file.js.map +1 -0
  110. package/dist/check/text/depth-at.d.ts +3 -0
  111. package/dist/check/text/depth-at.d.ts.map +1 -0
  112. package/dist/check/text/depth-at.js +11 -0
  113. package/dist/check/text/depth-at.js.map +1 -0
  114. package/dist/commands/drizzle-generate.d.ts +4 -0
  115. package/dist/commands/drizzle-generate.d.ts.map +1 -0
  116. package/dist/commands/drizzle-generate.js +14 -0
  117. package/dist/commands/drizzle-generate.js.map +1 -0
  118. package/dist/commands/generate.js +4 -0
  119. package/dist/commands/generate.js.map +1 -1
  120. package/dist/commands/worker-scope.d.ts.map +1 -1
  121. package/dist/commands/worker-scope.js +17 -2
  122. package/dist/commands/worker-scope.js.map +1 -1
  123. package/dist/config/config.d.ts +2 -1
  124. package/dist/config/config.d.ts.map +1 -1
  125. package/dist/config/index.d.ts +1 -0
  126. package/dist/config/index.d.ts.map +1 -1
  127. package/dist/config/index.js +1 -0
  128. package/dist/config/index.js.map +1 -1
  129. package/dist/config/parse-config.d.ts.map +1 -1
  130. package/dist/config/parse-config.js +2 -1
  131. package/dist/config/parse-config.js.map +1 -1
  132. package/dist/config/parse-rule-setting.d.ts +3 -0
  133. package/dist/config/parse-rule-setting.d.ts.map +1 -0
  134. package/dist/config/parse-rule-setting.js +10 -0
  135. package/dist/config/parse-rule-setting.js.map +1 -0
  136. package/dist/config/project-severity.d.ts +4 -0
  137. package/dist/config/project-severity.d.ts.map +1 -0
  138. package/dist/config/project-severity.js +5 -0
  139. package/dist/config/project-severity.js.map +1 -0
  140. package/dist/config/rule-setting.d.ts +10 -0
  141. package/dist/config/rule-setting.d.ts.map +1 -0
  142. package/dist/config/rule-setting.js +2 -0
  143. package/dist/config/rule-setting.js.map +1 -0
  144. package/dist/generate/access-vars.d.ts.map +1 -1
  145. package/dist/generate/access-vars.js +5 -0
  146. package/dist/generate/access-vars.js.map +1 -1
  147. package/dist/generate/grant-permission.d.ts +9 -0
  148. package/dist/generate/grant-permission.d.ts.map +1 -0
  149. package/dist/generate/grant-permission.js +111 -0
  150. package/dist/generate/grant-permission.js.map +1 -0
  151. package/dist/generate/kind.d.ts +4 -0
  152. package/dist/generate/kind.d.ts.map +1 -1
  153. package/dist/generate/kinds/adr-kind.d.ts.map +1 -1
  154. package/dist/generate/kinds/adr-kind.js +8 -4
  155. package/dist/generate/kinds/adr-kind.js.map +1 -1
  156. package/dist/generate/kinds/adr-number.d.ts +8 -0
  157. package/dist/generate/kinds/adr-number.d.ts.map +1 -0
  158. package/dist/generate/kinds/adr-number.js +25 -0
  159. package/dist/generate/kinds/adr-number.js.map +1 -0
  160. package/dist/generate/kinds/command-kind.js +1 -1
  161. package/dist/generate/kinds/command-kind.js.map +1 -1
  162. package/dist/generate/kinds/file-upload-kind.js +2 -2
  163. package/dist/generate/kinds/file-upload-kind.js.map +1 -1
  164. package/dist/generate/kinds/query-kind.js +2 -2
  165. package/dist/generate/kinds/query-kind.js.map +1 -1
  166. package/dist/generate/kinds/write-adr.d.ts +3 -1
  167. package/dist/generate/kinds/write-adr.d.ts.map +1 -1
  168. package/dist/generate/kinds/write-adr.js +3 -3
  169. package/dist/generate/kinds/write-adr.js.map +1 -1
  170. package/dist/generate/shared-writes.d.ts.map +1 -1
  171. package/dist/generate/shared-writes.js +10 -3
  172. package/dist/generate/shared-writes.js.map +1 -1
  173. package/dist/help/notes.d.ts +1 -1
  174. package/dist/help/notes.d.ts.map +1 -1
  175. package/dist/help/notes.js +8 -2
  176. package/dist/help/notes.js.map +1 -1
  177. package/dist/help/usage.d.ts +1 -1
  178. package/dist/help/usage.d.ts.map +1 -1
  179. package/dist/help/usage.js +2 -1
  180. package/dist/help/usage.js.map +1 -1
  181. package/dist/init/manifest/database-scripts.d.ts.map +1 -1
  182. package/dist/init/manifest/database-scripts.js +2 -1
  183. package/dist/init/manifest/database-scripts.js.map +1 -1
  184. package/dist/init/manifest/scripts-for.js +2 -0
  185. package/dist/init/manifest/scripts-for.js.map +1 -1
  186. package/dist/init/manifest/versions.js +24 -24
  187. package/dist/init/run-init.js +1 -1
  188. package/dist/init/run-init.js.map +1 -1
  189. package/dist/init/write-agent-settings.d.ts.map +1 -1
  190. package/dist/init/write-agent-settings.js +1 -0
  191. package/dist/init/write-agent-settings.js.map +1 -1
  192. package/dist/migration/drizzle-kit-bin.d.ts +3 -0
  193. package/dist/migration/drizzle-kit-bin.d.ts.map +1 -0
  194. package/dist/migration/drizzle-kit-bin.js +12 -0
  195. package/dist/migration/drizzle-kit-bin.js.map +1 -0
  196. package/dist/migration/drizzle-silent-failures.d.ts +9 -0
  197. package/dist/migration/drizzle-silent-failures.d.ts.map +1 -0
  198. package/dist/migration/drizzle-silent-failures.js +14 -0
  199. package/dist/migration/drizzle-silent-failures.js.map +1 -0
  200. package/dist/migration/generate-drizzle-migration.d.ts +15 -0
  201. package/dist/migration/generate-drizzle-migration.d.ts.map +1 -0
  202. package/dist/migration/generate-drizzle-migration.js +37 -0
  203. package/dist/migration/generate-drizzle-migration.js.map +1 -0
  204. package/dist/migration/index.d.ts +2 -0
  205. package/dist/migration/index.d.ts.map +1 -0
  206. package/dist/migration/index.js +2 -0
  207. package/dist/migration/index.js.map +1 -0
  208. package/dist/presets/preset-decision.js +2 -2
  209. package/dist/presets/preset-decision.js.map +1 -1
  210. package/dist/progress/read-slice-rules.d.ts +8 -0
  211. package/dist/progress/read-slice-rules.d.ts.map +1 -0
  212. package/dist/progress/read-slice-rules.js +20 -0
  213. package/dist/progress/read-slice-rules.js.map +1 -0
  214. package/dist/run.d.ts.map +1 -1
  215. package/dist/run.js +2 -0
  216. package/dist/run.js.map +1 -1
  217. package/dist/version.d.ts +1 -1
  218. package/dist/version.js +1 -1
  219. package/dist/worker/base-of.d.ts +8 -0
  220. package/dist/worker/base-of.d.ts.map +1 -0
  221. package/dist/worker/base-of.js +36 -0
  222. package/dist/worker/base-of.js.map +1 -0
  223. package/dist/worker/briefed-rows.d.ts +14 -0
  224. package/dist/worker/briefed-rows.d.ts.map +1 -0
  225. package/dist/worker/briefed-rows.js +53 -0
  226. package/dist/worker/briefed-rows.js.map +1 -0
  227. package/dist/worker/briefed-slice.d.ts +7 -0
  228. package/dist/worker/briefed-slice.d.ts.map +1 -0
  229. package/dist/worker/briefed-slice.js +2 -0
  230. package/dist/worker/briefed-slice.js.map +1 -0
  231. package/dist/worker/briefing-of.d.ts.map +1 -1
  232. package/dist/worker/briefing-of.js +7 -5
  233. package/dist/worker/briefing-of.js.map +1 -1
  234. package/dist/worker/ensure-contains-base.d.ts +6 -0
  235. package/dist/worker/ensure-contains-base.d.ts.map +1 -0
  236. package/dist/worker/ensure-contains-base.js +13 -0
  237. package/dist/worker/ensure-contains-base.js.map +1 -0
  238. package/dist/worker/open-worker-scope.d.ts +7 -3
  239. package/dist/worker/open-worker-scope.d.ts.map +1 -1
  240. package/dist/worker/open-worker-scope.js +33 -21
  241. package/dist/worker/open-worker-scope.js.map +1 -1
  242. package/dist/worker/worker-place.d.ts +2 -2
  243. package/dist/worker/worker-place.d.ts.map +1 -1
  244. package/dist/worker/worker-scope.d.ts +4 -4
  245. package/dist/worker/worker-scope.d.ts.map +1 -1
  246. package/package.json +3 -3
  247. package/templates/init/AGENTS.md.tpl +2 -2
  248. package/templates/init/README.md.tpl +1 -0
  249. package/templates/init/rules/application.md.tpl +2 -2
  250. package/templates/pipeline/package-scripts.json +1 -1
  251. package/templates/pipeline/vitest.config.ts.tpl +10 -1
  252. package/dist/generate/kinds/next-adr-number.d.ts +0 -4
  253. package/dist/generate/kinds/next-adr-number.d.ts.map +0 -1
  254. package/dist/generate/kinds/next-adr-number.js +0 -7
  255. package/dist/generate/kinds/next-adr-number.js.map +0 -1
package/CHANGELOG.md CHANGED
@@ -4,6 +4,87 @@ What each version changes for someone who uses the kit. The packages of `package
4
4
  together, under one version; the notes of each [GitHub release](https://github.com/gbourgeat/ddd-ts-kit/releases)
5
5
  list the pull requests behind it.
6
6
 
7
+ ## 0.21.0
8
+
9
+ **A rule can be set for some files only, and a rule off everywhere is said.** `rules.<id>` in
10
+ `ddd-ts-kit.config.json` also takes `{ "severity": "error" | "warn" | "off", "files": ["<glob>"] }`:
11
+ a finding on a matching file takes that severity, every other file keeps the one of the project.
12
+ The ESLint preset applies the same setting to the same files. A lowered setting still needs its
13
+ `deviations` entry. The new rule `config/rule-off-everywhere` (a warning) reports a bare `"off"`,
14
+ which hides every finding of the rule and not only the ones its exception was about. To move,
15
+ narrow each reported rule to the files it is about, or write `"files": ["**"]` when the whole
16
+ project is meant.
17
+
18
+ **The generated barrel of a context is not judged by `clean/file-size`.** `<context>.declarations.ts`
19
+ and `<context>.dependencies.ts`, at the root of their context, are written by the kit and may grow
20
+ past 350 lines; a project no longer has to turn the rule off for them. A file of the same name
21
+ elsewhere is still judged. To move, remove an exception you wrote for them.
22
+
23
+ **`worker-scope` briefs one batch, from a checked base.** `--base <ref>` cuts the worktree from
24
+ that ref (`origin/main`) and gives it as the trunk of the checks; `--rows <id,...>` limits the
25
+ briefing to those rows of `slices.md`, in that order. Without `--base`, the command refuses to run
26
+ from a worker's worktree, and an existing worktree or branch that does not contain the base is
27
+ refused with the fix. The `rules:` of a row is filled from the line of rules that `plan-slices`
28
+ writes under the table. The `context-builder` agent takes one or two rows, keeps its last turns for
29
+ its report and never ends without it; `architecture-reviewer` keeps turns for its verdict.
30
+
31
+ **A worker may generate a working migration.** `npm run db:generate working-<what>` in a worker's
32
+ worktree is allowed by the guard, and `persistence/migration-history` accepts it there, so a branch
33
+ that changes the stored state is green alone. On the trunk the same file is reported: at the merge
34
+ the conductor deletes it and generates the real one (`parallel-work`, merge step). Any other
35
+ migration stays refused to a worker.
36
+
37
+ **`db:generate` under drizzle-kit no longer waits or pretends.** Without a terminal, drizzle-kit
38
+ refused its rename question, wrote no migration and exited 0; under a pseudo-terminal it waited
39
+ for an answer. `db:generate` is now `ddd-ts-kit drizzle-generate --name`: in a terminal it is
40
+ `drizzle-kit generate` as before; without one, those two silent failures exit 2 with the fix (split
41
+ the rename, or write a custom migration). To move, in a Drizzle project, set the `db:generate`
42
+ script to `ddd-ts-kit drizzle-generate --name`, or run `npx ddd-ts-kit init --force`.
43
+
44
+ **One `regenerate` script for every derived file.** `npm run regenerate` runs
45
+ `ddd-ts-kit depcruise-config --write` then `npm run docs:generate` (the context documents, the
46
+ barrels, the OpenAPI and event documents, the clients): the one step after a change of route,
47
+ schema, event or config. To move, run `npx ddd-ts-kit init --force` after the upgrade, which adds
48
+ the script and allows it to agents.
49
+
50
+ **`generate adr` takes `--number <n>`.** A team that numbers its decision records by block
51
+ (`0401` for one story, `0701` for another) chooses the number instead of taking the highest plus
52
+ one. The number goes to the file, the `# ADR-NNNN` title and the `deviations` entry; a number
53
+ already taken, or one that is not a number, is refused.
54
+
55
+ **Where a shared type, a pure function and a strategy live in the domain.** `docs/ARCHITECTURE.md`
56
+ says it, with no new directory: a side-effect-free function on one value is a method of that value
57
+ object, a computation over several is a domain service, a shape of business data is a value object,
58
+ an interchangeable rule is an abstract class of `domain/services/` with its implementations.
59
+ `test/spec-required` no longer asks a spec of a file that exports abstract classes only; each
60
+ implementation keeps its own.
61
+
62
+ **The integration specs of a generated project give the test database a minute to open.** Their
63
+ hooks had the default 10 seconds of Vitest, which opening PGlite outlasted under coverage on a busy
64
+ machine. To move, add `hookTimeout: 60_000` to the `integration` project of `vitest.config.ts`, or
65
+ run `npx ddd-ts-kit init --force`.
66
+
67
+ ## 0.20.0
68
+
69
+ **A permission no role holds is said.** In a project whose rights are roles (`stack.authz`
70
+ `rbac`), `authz/granted` (`ddd-ts-kit check`) reports each permission a context declares that no
71
+ role names in `platform/auth/roles.ts`, nor `platform/auth/signed-in-grants.ts`: the super-admin
72
+ `*` was the only one to reach it, so the checks stayed green and every other person was refused
73
+ at run time. It is a warning: `check` does not fail on it. A grant counts by the entry of the set
74
+ (`billingPermissions['invoice.issue']`), by the id (`'billing:invoice.issue'`) or by the wildcard
75
+ of the context (`'billing:*'`); a grant to `Role.System`, written by `generate job`, counts too.
76
+ The rule is silent under attributes, relationships or an authorizer of the project's own.
77
+
78
+ **`generate command`, `query` and `file-upload` take `--grant <role>`.** With `--permission`, it
79
+ writes the grant in `platform/auth/roles.ts` and adds the role to `platform/auth/role.ts` when it
80
+ is new. It is refused with `--public`, and when the rights are not roles. Without it, a `next`
81
+ step points at the roles to edit. `init --force` writes the roles from their template again, and
82
+ the warning names the grants to give back. To move, run `ddd-ts-kit check --rule authz/granted`
83
+ and grant each permission it lists to the roles that hold it, by the entry of its set, in
84
+ `roles.ts`; a permission meant for administrators only is granted to `Role.Admin` by name. A
85
+ context worker never passes `--grant` (`--local-only` refuses it): the conductor grants on the
86
+ trunk.
87
+
7
88
  ## 0.19.0
8
89
 
9
90
  **`status` and `worker-scope` read every slices table.** `docs/architecture/slices.md` may plan
package/README.fr.md CHANGED
@@ -1,5 +1,5 @@
1
1
  [English](README.md) · **Français**
2
- <!-- translation-of: README.md sha256:fa841c4ea81f2c5d -->
2
+ <!-- translation-of: README.md sha256:91cb20f36ff1d090 -->
3
3
 
4
4
  # ddd-ts-kit
5
5
 
@@ -30,7 +30,7 @@ Aucune dépendance d'exécution. Node 22.12 ou ultérieur.
30
30
  npx ddd-ts-kit init
31
31
  npx ddd-ts-kit generate context billing --classification core --term "Invoice=A request for payment"
32
32
  npx ddd-ts-kit generate aggregate billing Invoice
33
- npx ddd-ts-kit generate command billing IssueInvoice --aggregate Invoice --permission invoice.issue --term "Issue=To make an invoice final"
33
+ npx ddd-ts-kit generate command billing IssueInvoice --aggregate Invoice --permission invoice.issue --grant accountant --term "Issue=To make an invoice final"
34
34
  npx ddd-ts-kit generate route billing IssueInvoice --method POST --path /invoices
35
35
  npx ddd-ts-kit check
36
36
  ```
@@ -642,12 +642,12 @@ Next, in this order: the language of the context first, then the business decisi
642
642
  | `domain-service` | `<context> <Name>` | service, *spec* |
643
643
  | `state-machine` | `<context> <Aggregate> [--value <state>]... [--transition "<intention>:<from>[,<from>]...[><to>]"]...` | le vocabulaire `<Aggregate>Status` (créé depuis `--value`, deux états au moins, ou complété des valeurs qui lui manquent), `domain/state-machines/<aggregate>.state-machine.ts` (`<aggregate>Lifecycle` : chaque valeur un état, la première initiale, les transitions demandées, un `TODO(domain)` pour le refus de l'erreur du concept) et `test/unit/<aggregate>.state-machine.spec.ts` (chaque transition là où elle mène, un refus depuis un état qu'elle ne quitte pas) ; c'est à l'agrégat de l'utiliser |
644
644
  | `repository` | `<context> <Aggregate> [--tenant-scoped]` | le port `domain/repositories/<name>.repository.ts` (`abstract class <Name>Repository extends Repository<<Name>>`), l'adaptateur de l'ORM du projet (qui `implements` le port) avec son *mapper* et sa table (ou son modèle), un *fake*, une *spec* `repositoryContract` exécutée sur les deux, l'enregistrement |
645
- | `command` | `<context> <UseCaseName> (--permission <aggregate>.<action> \| --public) [--aggregate <Name>]` | `<use-case>.command.ts` sur `AuthorizedCommand` (simple `Command` quand elle est publique), `<use-case>.handler.ts` (il construit l'agrégat, le sauvegarde et répond : les événements partent avec la sauvegarde), une *spec* par le bus avec le refus d'un acteur à qui manque la permission, l'enregistrement avec `.requires(...)` ou `.public()` (et le *repository* s'il manque). Une commande générée répond `void` ou l'identifiant de son agrégat, si bien qu'aucun `<use-case>.result.ts` n'est écrit |
646
- | `query` | `<context> <UseCaseName> (--permission <aggregate>.<action> \| --public) [--search]` | `<use-case>.query.ts` sur `AuthorizedQuery` (simple `Query` quand elle est publique), `<use-case>.result.ts`, `<use-case>.handler.ts`, le port de lecture `application/ports/<use-case>-reader.port.ts` (une classe abstraite), son adaptateur en mémoire, un *fake*, une *spec*, l'enregistrement sur le bus de requêtes. Avec `--search` (demande `--permission`) : une `PageRequest` du kernel dans la requête, l'élément, le tri et `Page<Item>` dans le fichier de résultat, un gestionnaire qui demande `Access.scope` et remet le périmètre au port de lecture, un lecteur en mémoire qui pagine par décalage ou par curseur |
645
+ | `command` | `<context> <UseCaseName> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--aggregate <Name>]` | `<use-case>.command.ts` sur `AuthorizedCommand` (simple `Command` quand elle est publique), `<use-case>.handler.ts` (il construit l'agrégat, le sauvegarde et répond : les événements partent avec la sauvegarde), une *spec* par le bus avec le refus d'un acteur à qui manque la permission, l'enregistrement avec `.requires(...)` ou `.public()` (et le *repository* s'il manque). Une commande générée répond `void` ou l'identifiant de son agrégat, si bien qu'aucun `<use-case>.result.ts` n'est écrit |
646
+ | `query` | `<context> <UseCaseName> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--search]` | `<use-case>.query.ts` sur `AuthorizedQuery` (simple `Query` quand elle est publique), `<use-case>.result.ts`, `<use-case>.handler.ts`, le port de lecture `application/ports/<use-case>-reader.port.ts` (une classe abstraite), son adaptateur en mémoire, un *fake*, une *spec*, l'enregistrement sur le bus de requêtes. Avec `--search` (demande `--permission`) : une `PageRequest` du kernel dans la requête, l'élément, le tri et `Page<Item>` dans le fichier de résultat, un gestionnaire qui demande `Access.scope` et remet le périmètre au port de lecture, un lecteur en mémoire qui pagine par décalage ou par curseur |
647
647
  | `port` | `<context> <Name>` | `application/ports/<name>.port.ts`, une classe abstraite, et son *fake* |
648
648
  | `route` | `<context> <UseCaseName> --method <GET\|POST\|PUT\|PATCH\|DELETE> --path <p> [--command\|--query] [--group <Name>] [--mapper] [--serializer] [--cache public\|private\|no-store]` | sous `"stack.routes": "controllers"` : une classe contrôleur dans `presentation/http/<resource>/<use-case>/` (la ressource est le premier segment du chemin), qui dépend de `CommandBus` ou de `QueryBus`, derrière le groupe de routes de sa ressource, écrit avec elle quand il est nouveau (`<resource>.routes.ts` : préfixe, étiquette, `Authenticated`) ; un cas d'usage public ne se tient dans aucun groupe et dit `guards: [Public]` ; avec class-validator, une classe par fichier (`<use-case>.params.ts`, `.body.ts`, `.answer.ts`, `.accepted.ts`, `.line.ts`) ; `--mapper` et `--serializer` ajoutent un *mapper* de requête HTTP et un sérialiseur que reçoit le contrôleur ; une *spec* ; aucun enregistrement dans un projet déclaré, un contrôleur construit à la main dans `<context>.routes.ts` (le fichier de module en câblage manuel) dans un projet explicite. Sous `"functions"` : une fonction `defineRoute`, sa *spec*, son enregistrement dans `<context>.routes.ts`, et des classes `<use-case>-<role>.dto.ts` |
649
649
  | `controller` | les mêmes arguments que `route` | la classe contrôleur, quoi que dise `stack.routes` : pour un projet de routes en fonctions qui écrit sa prochaine route comme une classe. `--cache` écrit sa politique de cache : `private` (un `GET` d'un appelant, `max-age=0`, `must-revalidate`, `ETag` fort), `public` (un `GET` d'un cas d'usage public, `max-age` 1m, `s-maxage` 5m, étiqueté avec les ressources de son chemin), `no-store` ; refusé sur une écriture, et `public` derrière un groupe de routes |
650
- | `file-upload` | `<context> <UseCaseName> --path <p> (--permission <aggregate>.<action> \| --public) [--method POST\|PUT] [--group <Name>]` | un téléversement : un contrôleur qui déclare le fichier qu'il reçoit (sa taille et ses types de média dans le contrat, vérifiés au fil du flux), la commande qui le porte comme un `FileUpload`, mis en attente par le bus de commandes avant la transaction, le gestionnaire qui l'enregistre et le promeut avec la validation (commit), et leurs *specs*. Refusé sans `stack.storage` ou sans *stack* HTTP, avec le `init --force --storage local` à lancer |
650
+ | `file-upload` | `<context> <UseCaseName> --path <p> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--method POST\|PUT] [--group <Name>]` | un téléversement : un contrôleur qui déclare le fichier qu'il reçoit (sa taille et ses types de média dans le contrat, vérifiés au fil du flux), la commande qui le porte comme un `FileUpload`, mis en attente par le bus de commandes avant la transaction, le gestionnaire qui l'enregistre et le promeut avec la validation (commit), et leurs *specs*. Refusé sans `stack.storage` ou sans *stack* HTTP, avec le `init --force --storage local` à lancer |
651
651
  | `route-group` (`group`) | `<context> <Name> [--prefix <path>] [--group <ParentName>] [--public \| --role <role>]` | `presentation/http/<name>.routes.ts` : une classe vide qui porte `@RouteGroup`, derrière `Authenticated` sauf si `--public` ou `--role` dit autre chose (`HasRole(Role.Admin)`, le rôle lu dans le vocabulaire de la plateforme, `<platformDir>/auth/role.ts`, qui le reçoit s'il ne le contient pas) ; avec `--group`, il affine ce groupe et en hérite |
652
652
  | `guard` | `<context> <Name>` | `presentation/http/guards/<name>.guard.ts` : une classe de garde déclarée à remplir, et sa *spec* |
653
653
  | `representation` | `<context> <UseCase> <xml\|csv\|media/type>[,...]` | ajoute `produces` au `@Controller` du cas d'usage, et `consumes: ['application/xml']` à celui qui reçoit un corps quand XML est demandé ; dit quand CSV a besoin d'une page ou d'une liste en flux, et quand `stack.representations` n'est pas `negotiated` |
@@ -739,7 +739,10 @@ Next, in this order: the language of the context first, then the business decisi
739
739
  - **Refus par défaut.** `command` et `query` sont refusés sans `--permission` ou `--public`. Une
740
740
  nouvelle permission rejoint `<context>.permissions.ts` ; ses mots sont vérifiés dans le
741
741
  glossaire comme tout autre nom. Avec `--authz rebac`, l'exigence nomme le contexte comme sa
742
- ressource, un point de départ à remplacer par l'élément sur lequel porte le droit.
742
+ ressource, un point de départ à remplacer par l'élément sur lequel porte le droit. Avec
743
+ `--authz rbac`, `--grant <role>` accorde la permission au rôle dans `platform/auth/roles.ts`
744
+ (le rôle rejoint `role.ts` s'il est nouveau) ; sans lui, une étape `next` dit que
745
+ l'attribution reste à faire (`authz/granted`).
743
746
  - `route` remet `actorOf(context.principal)` à un cas d'usage protégé et pose `security` (le
744
747
  schéma de `--authn`, ou `false` pour un cas d'usage public). `integration-handler` porte
745
748
  `systemActor('<context>.<name>')` pour la commande qu'il construit ; derrière un *broker*, il
@@ -1082,16 +1085,25 @@ un contexte ; `--json` affiche `{ count, remaining: [{ kind, context, file, line
1082
1085
  ## worker-scope
1083
1086
 
1084
1087
  ```
1085
- ddd-ts-kit worker-scope <context> [--worktree <path>] [--branch <name>] [--dry-run]
1088
+ ddd-ts-kit worker-scope <context> [--base <ref>] [--rows <id,...>] [--worktree <path>] [--branch <name>] [--dry-run]
1086
1089
  ```
1087
1090
 
1088
1091
  Prépare la place d'un *worker* d'un build réparti par contexte : crée un *worktree* git du projet
1089
- (`../<project>-<context>` par défaut) sur la branche `build/<context>`, y écrit
1092
+ (`../<project>-<context>` par défaut) sur la branche `build/<context>`, à partir de `--base` (une
1093
+ branche, une étiquette ou un *commit* : `origin/main` ; par défaut la branche courante), y écrit
1090
1094
  `.ddd-ts-kit/worker.json` (`{ "context": "<context>" }` ; `init` ignore `.ddd-ts-kit/`), et
1091
1095
  affiche la consigne du *worker* : son périmètre, les générateurs qu'il peut lancer, ses tranches
1092
- encore à faire d'après `docs/architecture/slices.md`, les langages publiés qu'il consomme. Un
1093
- *worktree* existant est gardé et seul le fichier est réécrit ; `--dry-run` ne crée et n'écrit
1094
- rien. Il faut un dépôt git avec au moins un *commit*. Le *worker* génère ensuite avec
1096
+ encore à faire d'après `docs/architecture/slices.md`, les langages publiés qu'il consomme, et la
1097
+ base comme tronc de ses vérifications (`check --changed-since <base>`). `--rows 4.15,4.16` ne
1098
+ donne que ces lignes, dans cet ordre : un identifiant est lu tel qu'il est écrit, et une ligne
1099
+ absente du fichier, présente deux fois ou confiée à un autre propriétaire est refusée. Chaque
1100
+ ligne porte ses règles, lues sur une ligne `- #<id>: <règles>` sous les tableaux ; au-delà de
1101
+ deux lignes, une note le signale, car un agent en tient une ou deux. Un *worktree* existant, ou
1102
+ une branche existante, est gardé quand il contient la base et refusé sinon, pour qu'aucun
1103
+ *worker* ne construise sur un tronc périmé ; seul le fichier est réécrit. Sans `--base`, lancé
1104
+ depuis le *worktree* d'un *worker* (son `.ddd-ts-kit/worker.json`, ou une branche
1105
+ `build/<context>`), il refuse : cette branche deviendrait le tronc. `--dry-run` ne crée et
1106
+ n'écrit rien. Il faut un dépôt git avec au moins un *commit*. Le *worker* génère ensuite avec
1095
1107
  `--local-only`.
1096
1108
 
1097
1109
  ## affected
@@ -1291,6 +1303,7 @@ règle.
1291
1303
  | `config/valid` | un amont, une classification, une relation, un identifiant de règle, un mode de `guard` ou un `importExtension` inconnu ; un contexte absent du disque ou de la configuration ; une limite de `commit` qui n'est pas un entier positif |
1292
1304
  | `config/suppression-needs-reason` | une désactivation sans identifiant de règle ou sans raison (gardée comme alias à côté de `governance/recorded-deviation`, qui juge la raison) |
1293
1305
  | `authz/declared` | dans un fichier de module, `builder.command(X)` ou `builder.query(X)` sans `.requires(` ni `.public(` dans sa chaîne, sauf si la classe du message porte `@Requires` ou `@Public` de `@ddd-ts-kit/kernel/declarations` ; en câblage manuel ou nest, une classe de commande ou de requête absente de tous les `requires(X, ...)` et `publicUseCase(X)` du fichier de module et de `application/authorization/` ; un `defineRoute` sans `security` (le type de la route le refuse déjà, et une liste vide aussi : c'est le filet au niveau du texte pour une définition construite de façon lâche) ; dans le style déclaré, la classe exportée d'un fichier `*.command.ts` ou `*.query.ts` qui ne porte ni `@Requires` ni `@Public` |
1306
+ | `authz/granted` | avec `stack.authz` `rbac`, une permission du `definePermissions` d'un contexte que ni `platform/auth/roles.ts` ni `platform/auth/signed-in-grants.ts` n'accorde par son nom (par l'entrée de son ensemble, son identifiant ou `<contexte>:*`) ; le `*` du super-administrateur ne compte pas (un avertissement) |
1294
1307
  | `authz/in-application` | `presentation/` : un test sur les rôles, `isAdmin`, l'import d'un autorisateur ou de `Access` ; `infrastructure/` : `authorize(` ou `check(` sur un autorisateur ou un accès, `ForbiddenError` ; `domain/` : tout import de `@ddd-ts-kit/auth`, des types d'acteur du kernel (`Actor`, `ActorContext`, `Session`, `ExecutionContext`, les messages autorisés), une lecture de `.roles` ou `.permissions` sur un acteur. La glu de requête HTTP de `@ddd-ts-kit/auth` (`actorOf`, `sessionOf`, `resolveSession`, `SessionAuthenticator`) est libre dans `presentation/`. `presentation/` et `infrastructure/` : l'import de `Requires`, `Public` ou `Policy` depuis `@ddd-ts-kit/kernel/declarations`, ou des ports `Access` et `PolicyAccess` depuis `@ddd-ts-kit/auth` ; ils sont libres dans `application/` |
1295
1308
  | `authz/actor-explicit` | dans `domain/` et `application/` : `ActorContext`, `ExecutionScope` (comme type ou comme valeur : la classe est le jeton d'une liste de dépendances), `AsyncLocalStorageExecutionScope`, `ScopedActorContext`, `AsyncLocalStorage` ; `.current()` ou `.require()` sur un contexte d'acteur ou sur quelque chose nommé `scope`, `scopes` ou `...executionScope` ; un import de `stampCreation`, `stampUpdate` ou `tenantScopeOf` |
1296
1309
  | `authz/fields-by-schema` | sous `application/queries/` : `roles.includes(`, `.some(`, `.every(`, `.find(`, `.indexOf(`, une comparaison avec un `role`, `isAdmin` |
package/README.md CHANGED
@@ -28,7 +28,7 @@ No runtime dependency. Node 22.12 or later.
28
28
  npx ddd-ts-kit init
29
29
  npx ddd-ts-kit generate context billing --classification core --term "Invoice=A request for payment"
30
30
  npx ddd-ts-kit generate aggregate billing Invoice
31
- npx ddd-ts-kit generate command billing IssueInvoice --aggregate Invoice --permission invoice.issue --term "Issue=To make an invoice final"
31
+ npx ddd-ts-kit generate command billing IssueInvoice --aggregate Invoice --permission invoice.issue --grant accountant --term "Issue=To make an invoice final"
32
32
  npx ddd-ts-kit generate route billing IssueInvoice --method POST --path /invoices
33
33
  npx ddd-ts-kit check
34
34
  ```
@@ -622,12 +622,12 @@ Next, in this order: the language of the context first, then the business decisi
622
622
  | `domain-service` | `<context> <Name>` | service, spec |
623
623
  | `state-machine` | `<context> <Aggregate> [--value <state>]... [--transition "<intention>:<from>[,<from>]...[><to>]"]...` | the vocabulary `<Aggregate>Status` (created from `--value`, two states at least, or given the values it misses), `domain/state-machines/<aggregate>.state-machine.ts` (`<aggregate>Lifecycle`: every value a state, the first one initial, the transitions asked, a `TODO(domain)` for the refusal of the concept error) and `test/unit/<aggregate>.state-machine.spec.ts` (each transition where it leads, a refusal from a state it does not leave); the aggregate is left to use it |
624
624
  | `repository` | `<context> <Aggregate> [--tenant-scoped]` | the port `domain/repositories/<name>.repository.ts` (`abstract class <Name>Repository extends Repository<<Name>>`), the adapter of the project's ORM (`implements` the port) with its mapper and table (or model), a fake, one `repositoryContract` spec run on both, registration |
625
- | `command` | `<context> <UseCaseName> (--permission <aggregate>.<action> \| --public) [--aggregate <Name>]` | `<use-case>.command.ts` on `AuthorizedCommand` (plain `Command` when public), `<use-case>.handler.ts` (it builds the aggregate, saves it and answers: the events leave with the save), spec through the bus with the refusal of an actor who lacks the permission, registration with `.requires(...)` or `.public()` (and the repository when missing). A generated command answers `void` or the identifier of its aggregate, so no `<use-case>.result.ts` is written |
626
- | `query` | `<context> <UseCaseName> (--permission <aggregate>.<action> \| --public) [--search]` | `<use-case>.query.ts` on `AuthorizedQuery` (plain `Query` when public), `<use-case>.result.ts`, `<use-case>.handler.ts`, the read port `application/ports/<use-case>-reader.port.ts` (an abstract class), its in-memory adapter, fake, spec, registration on the query bus. With `--search` (needs `--permission`): a kernel `PageRequest` in the query, the item, the sort and `Page<Item>` in the result file, a handler that asks `Access.scope` and hands the scope to the read port, an in-memory reader paging by offset or cursor |
625
+ | `command` | `<context> <UseCaseName> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--aggregate <Name>]` | `<use-case>.command.ts` on `AuthorizedCommand` (plain `Command` when public), `<use-case>.handler.ts` (it builds the aggregate, saves it and answers: the events leave with the save), spec through the bus with the refusal of an actor who lacks the permission, registration with `.requires(...)` or `.public()` (and the repository when missing). A generated command answers `void` or the identifier of its aggregate, so no `<use-case>.result.ts` is written |
626
+ | `query` | `<context> <UseCaseName> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--search]` | `<use-case>.query.ts` on `AuthorizedQuery` (plain `Query` when public), `<use-case>.result.ts`, `<use-case>.handler.ts`, the read port `application/ports/<use-case>-reader.port.ts` (an abstract class), its in-memory adapter, fake, spec, registration on the query bus. With `--search` (needs `--permission`): a kernel `PageRequest` in the query, the item, the sort and `Page<Item>` in the result file, a handler that asks `Access.scope` and hands the scope to the read port, an in-memory reader paging by offset or cursor |
627
627
  | `port` | `<context> <Name>` | `application/ports/<name>.port.ts`, one abstract class, and its fake |
628
628
  | `route` | `<context> <UseCaseName> --method <GET\|POST\|PUT\|PATCH\|DELETE> --path <p> [--command\|--query] [--group <Name>] [--mapper] [--serializer] [--cache public\|private\|no-store]` | under `"stack.routes": "controllers"`: a controller class in `presentation/http/<resource>/<use-case>/` (the resource is the first segment of the path), depending on `CommandBus` or `QueryBus`, behind the route group of its resource, written with it when it is new (`<resource>.routes.ts`: prefix, tag, `Authenticated`); a public use case stands in no group and says `guards: [Public]`; with class-validator one class per file (`<use-case>.params.ts`, `.body.ts`, `.answer.ts`, `.accepted.ts`, `.line.ts`); `--mapper` and `--serializer` add a request mapper and a serializer the controller is given; a spec; no registration in a declared project, a controller built by hand in `<context>.routes.ts` (the module file with hand wiring) in an explicit one. Under `"functions"`: a `defineRoute` function, its spec, its registration in `<context>.routes.ts`, and `<use-case>-<role>.dto.ts` classes |
629
629
  | `controller` | the same arguments as `route` | the controller class, whatever `stack.routes` says: for a project of function routes that writes its next route as a class. `--cache` writes its cache policy: `private` (a `GET` of a caller, `max-age=0`, `must-revalidate`, strong `ETag`), `public` (a `GET` of a public use case, `max-age` 1m, `s-maxage` 5m, tagged with the resources of its path), `no-store`; refused on a write, and `public` behind a route group |
630
- | `file-upload` | `<context> <UseCaseName> --path <p> (--permission <aggregate>.<action> \| --public) [--method POST\|PUT] [--group <Name>]` | an upload: a controller that declares the file it receives (its size and media types in the contract, checked as it streams), the command that carries it as a `FileUpload`, staged by the command bus before the transaction, the handler that records it and promotes it with the commit, and their specs. Refused without `stack.storage` or without an HTTP stack, with the `init --force --storage local` to run |
630
+ | `file-upload` | `<context> <UseCaseName> --path <p> (--permission <aggregate>.<action> [--grant <role>] \| --public) [--method POST\|PUT] [--group <Name>]` | an upload: a controller that declares the file it receives (its size and media types in the contract, checked as it streams), the command that carries it as a `FileUpload`, staged by the command bus before the transaction, the handler that records it and promotes it with the commit, and their specs. Refused without `stack.storage` or without an HTTP stack, with the `init --force --storage local` to run |
631
631
  | `route-group` (`group`) | `<context> <Name> [--prefix <path>] [--group <ParentName>] [--public \| --role <role>]` | `presentation/http/<name>.routes.ts`: an empty class carrying `@RouteGroup`, behind `Authenticated` unless `--public` or `--role` says otherwise (`HasRole(Role.Admin)`, the role read from the vocabulary of the platform, `<platformDir>/auth/role.ts`, which gets it when it does not hold it); with `--group` it refines that group and inherits from it |
632
632
  | `guard` | `<context> <Name>` | `presentation/http/guards/<name>.guard.ts`: a declared guard class to fill, and its spec |
633
633
  | `representation` | `<context> <UseCase> <xml\|csv\|media/type>[,...]` | adds `produces` to the `@Controller` of the use case, and `consumes: ['application/xml']` to one that receives a body when XML is asked; says when CSV needs a page or a streamed list, and when `stack.representations` is not `negotiated` |
@@ -713,7 +713,9 @@ Next, in this order: the language of the context first, then the business decisi
713
713
  - **Deny by default.** `command` and `query` are refused without `--permission` or `--public`. A new
714
714
  permission joins `<context>.permissions.ts`; its words are checked against the glossary like any
715
715
  other name. With `--authz rebac` the requirement names the context as its resource, a starting
716
- point to replace by the element the right bears on.
716
+ point to replace by the element the right bears on. With `--authz rbac`, `--grant <role>` gives
717
+ the permission to the role in `platform/auth/roles.ts` (the role joins `role.ts` when it is
718
+ new); without it, a `next` step says the grant is left to do (`authz/granted`).
717
719
  - `route` hands `actorOf(context.principal)` to a protected use case and sets `security` (the scheme
718
720
  of `--authn`, or `false` for a public one). `integration-handler` carries `systemActor('<context>.<name>')`
719
721
  for the command it builds; behind a broker it listens on the subscriber of its context
@@ -1032,15 +1034,23 @@ context; `--json` prints `{ count, remaining: [{ kind, context, file, line, text
1032
1034
  ## worker-scope
1033
1035
 
1034
1036
  ```
1035
- ddd-ts-kit worker-scope <context> [--worktree <path>] [--branch <name>] [--dry-run]
1037
+ ddd-ts-kit worker-scope <context> [--base <ref>] [--rows <id,...>] [--worktree <path>] [--branch <name>] [--dry-run]
1036
1038
  ```
1037
1039
 
1038
1040
  Prepares the place of one worker of a build split by context: creates a git worktree of the
1039
- project (`../<project>-<context>` by default) on the branch `build/<context>`, writes
1041
+ project (`../<project>-<context>` by default) on the branch `build/<context>`, cut from
1042
+ `--base` (a branch, a tag or a commit: `origin/main`; by default the current branch), writes
1040
1043
  `.ddd-ts-kit/worker.json` in it (`{ "context": "<context>" }`; `init` ignores `.ddd-ts-kit/`), and
1041
1044
  prints the briefing of the worker: its scope, the generators it may run, its slices still to do
1042
- from `docs/architecture/slices.md`, the published languages it consumes. An existing worktree is
1043
- kept and only the file is written again; `--dry-run` creates and writes nothing. It needs a git
1045
+ from `docs/architecture/slices.md`, the published languages it consumes, and the base as the
1046
+ trunk of its checks (`check --changed-since <base>`). `--rows 4.15,4.16` briefs those rows only,
1047
+ in that order: an id is read as written, and a row the file does not have, has twice or gives to
1048
+ another owner is refused. Each row carries its rules, from a line `- #<id>: <rules>` under the
1049
+ tables; more than two rows get a note, since an agent holds one or two. An existing worktree, or
1050
+ an existing branch, is kept when it contains the base and refused when it does not, so that no
1051
+ worker builds on a stale trunk; only the file is written again. Without `--base`, run from a
1052
+ worker's worktree (its `.ddd-ts-kit/worker.json`, or a branch `build/<context>`), it refuses:
1053
+ that branch would become the trunk. `--dry-run` creates and writes nothing. It needs a git
1044
1054
  repository with one commit at least. The worker then generates with `--local-only`.
1045
1055
 
1046
1056
  ## affected
@@ -1234,6 +1244,7 @@ const due = handler.isDueNow(new Reminder(new Date('2026-03-01T09:00:00Z'))); //
1234
1244
  | `config/valid` | unknown upstream, classification, relationship, rule id, `guard` mode or `importExtension`; a context missing on disk or in the config; a `commit` limit that is not a positive integer |
1235
1245
  | `config/suppression-needs-reason` | a suppression without a rule id or a reason (kept as an alias next to `governance/recorded-deviation`, which judges the reason) |
1236
1246
  | `authz/declared` | in a module file, `builder.command(X)` or `builder.query(X)` without `.requires(` or `.public(` in its chain, unless the message class carries `@Requires` or `@Public` of `@ddd-ts-kit/kernel/declarations`; with manual or nest wiring, a command or query class absent from every `requires(X, ...)` and `publicUseCase(X)` of the module file and of `application/authorization/`; a `defineRoute` without `security` (the route type refuses it already, and an empty list too: this is the text-level net for a definition built loosely); in the declared style, the exported class of a `*.command.ts` or `*.query.ts` file carrying neither `@Requires` nor `@Public` |
1247
+ | `authz/granted` | with `stack.authz` `rbac`, a permission of a context's `definePermissions` that neither `platform/auth/roles.ts` nor `platform/auth/signed-in-grants.ts` grants by name (by the entry of its set, its id or `<context>:*`); the super-admin `*` does not count (a warning) |
1237
1248
  | `authz/in-application` | `presentation/`: a test on roles, `isAdmin`, the import of an authorizer or of `Access`; `infrastructure/`: `authorize(` or `check(` on an authorizer or access, `ForbiddenError`; `domain/`: any import of `@ddd-ts-kit/auth`, of the actor types of the kernel (`Actor`, `ActorContext`, `Session`, `ExecutionContext`, the authorized messages), a read of `.roles` or `.permissions` on an actor. The request glue of `@ddd-ts-kit/auth` (`actorOf`, `sessionOf`, `resolveSession`, `SessionAuthenticator`) is free in `presentation/`. `presentation/` and `infrastructure/`: the import of `Requires`, `Public` or `Policy` from `@ddd-ts-kit/kernel/declarations`, or of the ports `Access` and `PolicyAccess` from `@ddd-ts-kit/auth`; they are free in `application/` |
1238
1249
  | `authz/actor-explicit` | in `domain/` and `application/`: `ActorContext`, `ExecutionScope` (as a type or as a value: the class is the token of a dependency list), `AsyncLocalStorageExecutionScope`, `ScopedActorContext`, `AsyncLocalStorage`; `.current()` or `.require()` on an actor context or on something named `scope`, `scopes` or `...executionScope`; an import of `stampCreation`, `stampUpdate` or `tenantScopeOf` |
1239
1250
  | `authz/fields-by-schema` | under `application/queries/`: `roles.includes(`, `.some(`, `.every(`, `.find(`, `.indexOf(`, a comparison with a `role`, `isAdmin` |
@@ -0,0 +1,8 @@
1
+ import type { Scan } from '../scan/scan.js';
2
+ import type { PermissionSet } from './permission-sets.js';
3
+ /**
4
+ * Whether code grants a permission by name: by the entry of its set, `billingPermissions['invoice.issue']`;
5
+ * by its id, `'billing:invoice.issue'`; or by the wildcard of its context, `'billing:*'`. A comment grants nothing.
6
+ */
7
+ export declare function isGranted({ code, strings }: Scan, { set, context }: Omit<PermissionSet, 'keys'>, key: string): boolean;
8
+ //# sourceMappingURL=is-granted.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-granted.d.ts","sourceRoot":"","sources":["../../../src/check/authz/is-granted.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,iBAAiB,CAAC;AAE5C,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAE1D;;;GAGG;AACH,wBAAgB,SAAS,CACvB,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,IAAI,EACvB,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,IAAI,CAAC,aAAa,EAAE,MAAM,CAAC,EAC7C,GAAG,EAAE,MAAM,GACV,OAAO,CAST"}
@@ -0,0 +1,11 @@
1
+ import { escapeRegExp } from '../text/escape-reg-exp.js';
2
+ /**
3
+ * Whether code grants a permission by name: by the entry of its set, `billingPermissions['invoice.issue']`;
4
+ * by its id, `'billing:invoice.issue'`; or by the wildcard of its context, `'billing:*'`. A comment grants nothing.
5
+ */
6
+ export function isGranted({ code, strings }, { set, context }, key) {
7
+ const ids = new Set([`${context}:${key}`, `${context}:*`]);
8
+ const entries = [...code.matchAll(new RegExp(`(?<![\\w$.])${escapeRegExp(set)}\\s*\\[\\s*`, 'g'))];
9
+ return (entries.some((entry) => strings.some(({ start, value }) => start === entry.index + entry[0].length && value === key)) || strings.some(({ value }) => ids.has(value)));
10
+ }
11
+ //# sourceMappingURL=is-granted.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"is-granted.js","sourceRoot":"","sources":["../../../src/check/authz/is-granted.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAGzD;;;GAGG;AACH,MAAM,UAAU,SAAS,CACvB,EAAE,IAAI,EAAE,OAAO,EAAQ,EACvB,EAAE,GAAG,EAAE,OAAO,EAA+B,EAC7C,GAAW;IAEX,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,OAAO,IAAI,GAAG,EAAE,EAAE,GAAG,OAAO,IAAI,CAAC,CAAC,CAAC;IAC3D,MAAM,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,MAAM,CAAC,eAAe,YAAY,CAAC,GAAG,CAAC,aAAa,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnG,OAAO,CACL,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CACrB,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,KAAK,GAAG,CAAC,CAC7F,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CACjD,CAAC;AACJ,CAAC"}
@@ -0,0 +1,13 @@
1
+ import type { SourceFile } from '../model/source-file.js';
2
+ import type { StringRecord } from '../scan/string-record.js';
3
+ /** `export const billingPermissions = definePermissions('billing', { 'invoice.issue': .. })`, as the checker reads it. */
4
+ export interface PermissionSet {
5
+ /** The name code reads the set by: `billingPermissions`. */
6
+ readonly set: string;
7
+ readonly context: string;
8
+ /** The key of each permission, where it is written. */
9
+ readonly keys: readonly StringRecord[];
10
+ }
11
+ /** The permission sets a file declares, each with the keys of its first level. */
12
+ export declare function permissionSets(file: SourceFile): PermissionSet[];
13
+ //# sourceMappingURL=permission-sets.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-sets.d.ts","sourceRoot":"","sources":["../../../src/check/authz/permission-sets.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAM7D,0HAA0H;AAC1H,MAAM,WAAW,aAAa;IAC5B,4DAA4D;IAC5D,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,uDAAuD;IACvD,QAAQ,CAAC,IAAI,EAAE,SAAS,YAAY,EAAE,CAAC;CACxC;AAED,kFAAkF;AAClF,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,GAAG,aAAa,EAAE,CAqBhE"}
@@ -0,0 +1,19 @@
1
+ import { depthAt } from '../text/depth-at.js';
2
+ import { matchingBracket } from '../text/matching-bracket.js';
3
+ const PERMISSION_SET = /export\s+const\s+([a-z][\w$]*)\s*=\s*definePermissions\(\s*/g;
4
+ /** The permission sets a file declares, each with the keys of its first level. */
5
+ export function permissionSets(file) {
6
+ const { code, strings } = file.scan;
7
+ return [...code.matchAll(PERMISSION_SET)].flatMap((found) => {
8
+ const at = found.index + found[0].length;
9
+ const context = strings.find(({ start }) => start === at)?.value;
10
+ const open = code.indexOf('{', at);
11
+ if (context === undefined || open === -1) {
12
+ return [];
13
+ }
14
+ const close = matchingBracket(code, open);
15
+ const keys = strings.filter(({ start, end }) => start > open && end < close && /^\s*:/.test(code.slice(end)) && depthAt(code, open, start) === 1);
16
+ return [{ set: found[1] ?? '', context, keys }];
17
+ });
18
+ }
19
+ //# sourceMappingURL=permission-sets.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"permission-sets.js","sourceRoot":"","sources":["../../../src/check/authz/permission-sets.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAC9C,OAAO,EAAE,eAAe,EAAE,MAAM,6BAA6B,CAAC;AAE9D,MAAM,cAAc,GAAG,8DAA8D,CAAC;AAWtF,kFAAkF;AAClF,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC;IAEpC,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC1D,MAAM,EAAE,GAAG,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACzC,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC,EAAE,KAAK,CAAC;QACjE,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC;QAEnC,IAAI,OAAO,KAAK,SAAS,IAAI,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,KAAK,GAAG,eAAe,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,CACzB,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE,EAAE,CACjB,KAAK,GAAG,IAAI,IAAI,GAAG,GAAG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CACnG,CAAC;QAEF,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;AACL,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"architecture-rules.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAoF7C,gHAAgH;AAChH,eAAO,MAAM,kBAAkB,EAAE,SAAS,IAAI,EAmF7C,CAAC"}
1
+ {"version":3,"file":"architecture-rules.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAsF7C,gHAAgH;AAChH,eAAO,MAAM,kBAAkB,EAAE,SAAS,IAAI,EAqF7C,CAAC"}
@@ -2,6 +2,7 @@ import { aspectsOutsideIn } from '../rules/aspects-outside-in.js';
2
2
  import { authzActorExplicit } from '../rules/authz-actor-explicit.js';
3
3
  import { authzFieldsBySchema } from '../rules/authz-fields-by-schema.js';
4
4
  import { authzDeclared } from '../rules/authz-declared.js';
5
+ import { authzGranted } from '../rules/authz-granted.js';
5
6
  import { authzInApplication } from '../rules/authz-in-application.js';
6
7
  import { authzPolicyAsked } from '../rules/authz-policy-asked.js';
7
8
  import { cleanBlankLines } from '../rules/clean-blank-lines.js';
@@ -16,6 +17,7 @@ import { cleanNoNoiseComment } from '../rules/clean-no-noise-comment.js';
16
17
  import { cleanOneExportPerFile } from '../rules/clean-one-export-per-file.js';
17
18
  import { cleanStepdown } from '../rules/clean-stepdown.js';
18
19
  import { compositionOnlyInModule } from '../rules/composition-only-in-module.js';
20
+ import { configRuleOffEverywhere } from '../rules/config-rule-off-everywhere.js';
19
21
  import { contextDeclaredRelationship } from '../rules/context-declared-relationship.js';
20
22
  import { contextExtractable } from '../rules/context-extractable.js';
21
23
  import { contextNoCycle } from '../rules/context-no-cycle.js';
@@ -138,11 +140,13 @@ export const ARCHITECTURE_RULES = [
138
140
  authzActorExplicit,
139
141
  authzFieldsBySchema,
140
142
  authzPolicyAsked,
143
+ authzGranted,
141
144
  aspectsOutsideIn,
142
145
  tracingPlatformOnly,
143
146
  tenancyScopedStatement,
144
147
  standardNoParallelInterface,
145
148
  governanceRecordedDeviation,
149
+ configRuleOffEverywhere,
146
150
  compositionOnlyInModule,
147
151
  declarationsRoleDeclared,
148
152
  declarationsBarrelCurrent,
@@ -1 +1 @@
1
- {"version":3,"file":"architecture-rules.js","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"architecture-rules.js","sourceRoot":"","sources":["../../../src/check/catalogue/architecture-rules.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"default-severities.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/default-severities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,0GAA0G;AAC1G,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAQjE,CAAC"}
1
+ {"version":3,"file":"default-severities.d.ts","sourceRoot":"","sources":["../../../src/check/catalogue/default-severities.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,0GAA0G;AAC1G,eAAO,MAAM,kBAAkB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,CAUjE,CAAC"}
@@ -1,5 +1,6 @@
1
1
  /** Rules that advise instead of blocking unless the config says otherwise (ARCHITECTURE.md section 3). */
2
2
  export const DEFAULT_SEVERITIES = {
3
+ 'authz/granted': 'warn',
3
4
  'test/no-mocks': 'warn',
4
5
  'test/builder-required': 'warn',
5
6
  'clean/function-size': 'warn',
@@ -7,5 +8,6 @@ export const DEFAULT_SEVERITIES = {
7
8
  'clean/no-flag-argument': 'warn',
8
9
  'application/command-query-separation': 'warn',
9
10
  'standard/no-parallel-interface': 'warn',
11
+ 'config/rule-off-everywhere': 'warn',
10
12
  };
11
13
  //# sourceMappingURL=default-severities.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"default-severities.js","sourceRoot":"","sources":["../../../src/check/catalogue/default-severities.ts"],"names":[],"mappings":"AAEA,0GAA0G;AAC1G,MAAM,CAAC,MAAM,kBAAkB,GAAuC;IACpE,eAAe,EAAE,MAAM;IACvB,uBAAuB,EAAE,MAAM;IAC/B,qBAAqB,EAAE,MAAM;IAC7B,wBAAwB,EAAE,MAAM;IAChC,wBAAwB,EAAE,MAAM;IAChC,sCAAsC,EAAE,MAAM;IAC9C,gCAAgC,EAAE,MAAM;CACzC,CAAC"}
1
+ {"version":3,"file":"default-severities.js","sourceRoot":"","sources":["../../../src/check/catalogue/default-severities.ts"],"names":[],"mappings":"AAEA,0GAA0G;AAC1G,MAAM,CAAC,MAAM,kBAAkB,GAAuC;IACpE,eAAe,EAAE,MAAM;IACvB,eAAe,EAAE,MAAM;IACvB,uBAAuB,EAAE,MAAM;IAC/B,qBAAqB,EAAE,MAAM;IAC7B,wBAAwB,EAAE,MAAM;IAChC,wBAAwB,EAAE,MAAM;IAChC,sCAAsC,EAAE,MAAM;IAC9C,gCAAgC,EAAE,MAAM;IACxC,4BAA4B,EAAE,MAAM;CACrC,CAAC"}
@@ -2,7 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { Arguments } from '../../commands/arguments.js';
4
4
  import {} from '../../commands/command.js';
5
- import { CONFIG_FILE, isOneOf, readConfig, SEVERITIES } from '../../config/index.js';
5
+ import { CONFIG_FILE, isOneOf, projectSeverity, readConfig, SEVERITIES } from '../../config/index.js';
6
6
  import { DEFAULT_SEVERITIES } from '../catalogue/default-severities.js';
7
7
  import { DELEGATED_RULES } from '../catalogue/delegated-rules.js';
8
8
  import { RULES } from '../catalogue/rules.js';
@@ -18,7 +18,7 @@ export const rulesCommand = (argv, io) => {
18
18
  function listedRules(root) {
19
19
  const configured = fs.existsSync(path.join(root, CONFIG_FILE)) ? readConfig(root).config.rules : {};
20
20
  const severityOf = (id) => {
21
- const severity = configured[id];
21
+ const severity = projectSeverity(configured[id]);
22
22
  return isOneOf(SEVERITIES, severity) ? severity : (DEFAULT_SEVERITIES[id] ?? 'error');
23
23
  };
24
24
  const own = [...RULES, SUPPRESSION_RULE].map((rule) => ({
@@ -1 +1 @@
1
- {"version":3,"file":"rules-command.js","sourceRoot":"","sources":["../../../src/check/commands/rules-command.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"rules-command.js","sourceRoot":"","sources":["../../../src/check/commands/rules-command.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"config-inspection.d.ts","sourceRoot":"","sources":["../../../src/check/configuration/config-inspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,qGAAqG;AACrG,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACmB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EAC7B;IAEJ,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAMjE;IAED,qBAAqB,IAAI,SAAS,EAAE,CAanC;IAED,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAoBlD;IAED,SAAS,IAAI,SAAS,EAAE,CAcvB;IAED,6EAA6E;IAC7E,eAAe,IAAI,SAAS,EAAE,CAc7B;IAED,2GAA2G;IAC3G,kBAAkB,IAAI,SAAS,EAAE,CAiBhC;IAED,oHAAoH;IACpH,YAAY,IAAI,SAAS,EAAE,CAI1B;IAED,mHAAmH;IACnH,QAAQ,IAAI,SAAS,EAAE,CAItB;IAED,0EAA0E;IAC1E,eAAe,IAAI,SAAS,EAAE,CAM7B;IAED,0EAA0E;IAC1E,WAAW,IAAI,SAAS,EAAE,CAEzB;IAED,gHAAgH;IAChH,kBAAkB,IAAI,SAAS,EAAE,CAIhC;IAED,qGAAqG;IACrG,oBAAoB,IAAI,SAAS,EAAE,CA4BlC;IAED,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,QAAQ;IAiBhB,qFAAqF;IACrF,OAAO,CAAC,QAAQ;CAGjB"}
1
+ {"version":3,"file":"config-inspection.d.ts","sourceRoot":"","sources":["../../../src/check/configuration/config-inspection.ts"],"names":[],"mappings":"AAAA,OAAO,EAcL,KAAK,aAAa,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAMvD,qGAAqG;AACrG,qBAAa,gBAAgB;IAEzB,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,MAAM;IAFzB,YACmB,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EAC7B;IAEJ,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,aAAa,GAAG,SAAS,EAAE,CAMjE;IAED,qBAAqB,IAAI,SAAS,EAAE,CAanC;IAED,YAAY,CAAC,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,EAAE,CAgClD;IAED,SAAS,IAAI,SAAS,EAAE,CAcvB;IAED,6EAA6E;IAC7E,eAAe,IAAI,SAAS,EAAE,CAc7B;IAED,2GAA2G;IAC3G,kBAAkB,IAAI,SAAS,EAAE,CAiBhC;IAED,oHAAoH;IACpH,YAAY,IAAI,SAAS,EAAE,CAI1B;IAED,mHAAmH;IACnH,QAAQ,IAAI,SAAS,EAAE,CAItB;IAED,0EAA0E;IAC1E,eAAe,IAAI,SAAS,EAAE,CAM7B;IAED,0EAA0E;IAC1E,WAAW,IAAI,SAAS,EAAE,CAEzB;IAED,gHAAgH;IAChH,kBAAkB,IAAI,SAAS,EAAE,CAIhC;IAED,qGAAqG;IACrG,oBAAoB,IAAI,SAAS,EAAE,CA4BlC;IAED,OAAO,CAAC,cAAc;IActB,OAAO,CAAC,QAAQ;IAgChB,OAAO,CAAC,QAAQ;IAiBhB,qFAAqF;IACrF,OAAO,CAAC,QAAQ;CAGjB"}
@@ -26,17 +26,23 @@ export class ConfigInspection {
26
26
  .map((name) => this.report({ file: `${contextsDir}/${name}`, line: 1 }, `The directory ${contextsDir}/${name} is not a declared context.`, fix));
27
27
  }
28
28
  ruleSettings(known) {
29
- return Object.entries(this.project.config.rules).flatMap(([id, severity]) => {
29
+ return Object.entries(this.project.config.rules).flatMap(([id, setting]) => {
30
30
  if (!known.includes(id)) {
31
31
  return [
32
32
  this.inConfig(id, `The rule "${id}" does not exist.`, 'Fix the id; `ddd-ts-kit rules` lists the valid ones.'),
33
33
  ];
34
34
  }
35
+ const severity = typeof setting === 'string' ? setting : setting.severity;
35
36
  if (!isOneOf(SEVERITIES, severity)) {
36
37
  return [
37
38
  this.inConfig(id, `The rule "${id}" has the severity "${severity}".`, `Use one of: ${SEVERITIES.join(', ')}.`),
38
39
  ];
39
40
  }
41
+ if (typeof setting !== 'string' && setting.files.length === 0) {
42
+ return [
43
+ this.inConfig(id, `The rule "${id}" is set for some files, but "files" names none.`, 'List the files it is for in "files", as globs relative to the project root (`src/contexts/*/*.declarations.ts`), or write the severity alone for the whole project.'),
44
+ ];
45
+ }
40
46
  return [];
41
47
  });
42
48
  }
@@ -1 +1 @@
1
- {"version":3,"file":"config-inspection.js","sourceRoot":"","sources":["../../../src/check/configuration/config-inspection.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config-inspection.js","sourceRoot":"","sources":["../../../src/check/configuration/config-inspection.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"run-check.d.ts","sourceRoot":"","sources":["../../../src/check/engine/run-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAiBlF"}
1
+ {"version":3,"file":"run-check.d.ts","sourceRoot":"","sources":["../../../src/check/engine/run-check.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAOnD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGrD,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACnC,+CAA+C;IAC/C,QAAQ,CAAC,aAAa,CAAC,EAAE,OAAO,CAAC;CAClC;AAED,wBAAgB,QAAQ,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,WAAW,CAqBlF"}
@@ -8,7 +8,9 @@ export function runCheck(project, options = {}) {
8
8
  const selected = (id) => options.rules === undefined || options.rules.length === 0 || options.rules.includes(id);
9
9
  const suppressions = project.files.flatMap(findSuppressions);
10
10
  const active = RULES.filter((rule) => selected(rule.id) && project.severity(rule.id) !== 'off');
11
- const raw = active.flatMap((rule) => violationsOf(rule, project, options.fileScopeOnly === true));
11
+ const raw = active
12
+ .flatMap((rule) => violationsOf(rule, project, options.fileScopeOnly === true))
13
+ .flatMap((violation) => placed(violation, project));
12
14
  const kept = raw.filter((violation) => !isSuppressed(violation, suppressions));
13
15
  const suppressedCount = raw.length - kept.length;
14
16
  if (selected(SUPPRESSION_RULE_ID)) {
@@ -17,6 +19,20 @@ export function runCheck(project, options = {}) {
17
19
  kept.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line || a.ruleId.localeCompare(b.ruleId));
18
20
  return summarize(kept, { suppressedCount, suppressionCount: suppressions.length, fileCount: project.files.length });
19
21
  }
22
+ /**
23
+ * A finding on a file a setting names takes its severity, or is dropped where the rule is off. A
24
+ * finding a rule raises above the severity of the project (the ceiling of clean/function-size) keeps it.
25
+ */
26
+ function placed(violation, project) {
27
+ const severity = project.fileSeverity(violation.ruleId, violation.file);
28
+ if (severity === undefined) {
29
+ return [violation];
30
+ }
31
+ if (severity === 'off') {
32
+ return [];
33
+ }
34
+ return [violation.severity === project.severity(violation.ruleId) ? { ...violation, severity } : violation];
35
+ }
20
36
  function violationsOf(rule, project, oneFileOnly) {
21
37
  if (!oneFileOnly) {
22
38
  return [...rule.run(project), ...(rule.acrossProject?.(project) ?? [])];