kodu 2.2.0 → 3.0.1

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 (233) hide show
  1. package/README.md +24 -3
  2. package/bin/kodu.js +23 -0
  3. package/package.json +11 -67
  4. package/scripts/postinstall.js +69 -0
  5. package/AGENTS.md +0 -214
  6. package/__tests__/core/fs/fs.service.test.ts +0 -72
  7. package/__tests__/core/registry/registry.service.test.ts +0 -82
  8. package/__tests__/shared/cleaner/cleaner.service.test.ts +0 -102
  9. package/__tests__/shared/git/git.service.test.ts +0 -84
  10. package/__tests__/shared/runbook/runbook.service.test.ts +0 -104
  11. package/__tests__/shared/tokenizer/tokenizer.service.test.ts +0 -45
  12. package/biome.json +0 -50
  13. package/dist/package.json +0 -96
  14. package/dist/src/app.module.d.ts +0 -2
  15. package/dist/src/app.module.js +0 -42
  16. package/dist/src/app.module.js.map +0 -1
  17. package/dist/src/commands/clean/clean.command.d.ts +0 -37
  18. package/dist/src/commands/clean/clean.command.js +0 -240
  19. package/dist/src/commands/clean/clean.command.js.map +0 -1
  20. package/dist/src/commands/clean/clean.module.d.ts +0 -2
  21. package/dist/src/commands/clean/clean.module.js +0 -26
  22. package/dist/src/commands/clean/clean.module.js.map +0 -1
  23. package/dist/src/commands/init/init.command.d.ts +0 -10
  24. package/dist/src/commands/init/init.command.js +0 -96
  25. package/dist/src/commands/init/init.command.js.map +0 -1
  26. package/dist/src/commands/init/init.module.d.ts +0 -2
  27. package/dist/src/commands/init/init.module.js +0 -22
  28. package/dist/src/commands/init/init.module.js.map +0 -1
  29. package/dist/src/commands/ops/ops-add.command.d.ts +0 -18
  30. package/dist/src/commands/ops/ops-add.command.js +0 -102
  31. package/dist/src/commands/ops/ops-add.command.js.map +0 -1
  32. package/dist/src/commands/ops/ops-init.command.d.ts +0 -22
  33. package/dist/src/commands/ops/ops-init.command.js +0 -130
  34. package/dist/src/commands/ops/ops-init.command.js.map +0 -1
  35. package/dist/src/commands/ops/ops-list.command.d.ts +0 -12
  36. package/dist/src/commands/ops/ops-list.command.js +0 -73
  37. package/dist/src/commands/ops/ops-list.command.js.map +0 -1
  38. package/dist/src/commands/ops/ops-path.command.d.ts +0 -9
  39. package/dist/src/commands/ops/ops-path.command.js +0 -52
  40. package/dist/src/commands/ops/ops-path.command.js.map +0 -1
  41. package/dist/src/commands/ops/ops-runbook.command.d.ts +0 -12
  42. package/dist/src/commands/ops/ops-runbook.command.js +0 -81
  43. package/dist/src/commands/ops/ops-runbook.command.js.map +0 -1
  44. package/dist/src/commands/ops/ops-status.command.d.ts +0 -11
  45. package/dist/src/commands/ops/ops-status.command.js +0 -62
  46. package/dist/src/commands/ops/ops-status.command.js.map +0 -1
  47. package/dist/src/commands/ops/ops-use.command.d.ts +0 -12
  48. package/dist/src/commands/ops/ops-use.command.js +0 -76
  49. package/dist/src/commands/ops/ops-use.command.js.map +0 -1
  50. package/dist/src/commands/ops/ops.command.d.ts +0 -7
  51. package/dist/src/commands/ops/ops.command.js +0 -56
  52. package/dist/src/commands/ops/ops.command.js.map +0 -1
  53. package/dist/src/commands/ops/ops.helpers.d.ts +0 -2
  54. package/dist/src/commands/ops/ops.helpers.js +0 -11
  55. package/dist/src/commands/ops/ops.helpers.js.map +0 -1
  56. package/dist/src/commands/ops/ops.module.d.ts +0 -2
  57. package/dist/src/commands/ops/ops.module.js +0 -36
  58. package/dist/src/commands/ops/ops.module.js.map +0 -1
  59. package/dist/src/commands/pack/pack.command.d.ts +0 -51
  60. package/dist/src/commands/pack/pack.command.js +0 -355
  61. package/dist/src/commands/pack/pack.command.js.map +0 -1
  62. package/dist/src/commands/pack/pack.module.d.ts +0 -2
  63. package/dist/src/commands/pack/pack.module.js +0 -27
  64. package/dist/src/commands/pack/pack.module.js.map +0 -1
  65. package/dist/src/core/config/config.module.d.ts +0 -2
  66. package/dist/src/core/config/config.module.js +0 -23
  67. package/dist/src/core/config/config.module.js.map +0 -1
  68. package/dist/src/core/config/config.schema.d.ts +0 -19
  69. package/dist/src/core/config/config.schema.js +0 -56
  70. package/dist/src/core/config/config.schema.js.map +0 -1
  71. package/dist/src/core/config/config.service.d.ts +0 -7
  72. package/dist/src/core/config/config.service.js +0 -49
  73. package/dist/src/core/config/config.service.js.map +0 -1
  74. package/dist/src/core/config/prompt.service.d.ts +0 -10
  75. package/dist/src/core/config/prompt.service.js +0 -80
  76. package/dist/src/core/config/prompt.service.js.map +0 -1
  77. package/dist/src/core/file-system/fs.module.d.ts +0 -2
  78. package/dist/src/core/file-system/fs.module.js +0 -21
  79. package/dist/src/core/file-system/fs.module.js.map +0 -1
  80. package/dist/src/core/file-system/fs.service.d.ts +0 -27
  81. package/dist/src/core/file-system/fs.service.js +0 -203
  82. package/dist/src/core/file-system/fs.service.js.map +0 -1
  83. package/dist/src/core/registry/registry.module.d.ts +0 -2
  84. package/dist/src/core/registry/registry.module.js +0 -22
  85. package/dist/src/core/registry/registry.module.js.map +0 -1
  86. package/dist/src/core/registry/registry.schema.d.ts +0 -24
  87. package/dist/src/core/registry/registry.schema.js +0 -21
  88. package/dist/src/core/registry/registry.schema.js.map +0 -1
  89. package/dist/src/core/registry/registry.service.d.ts +0 -16
  90. package/dist/src/core/registry/registry.service.js +0 -91
  91. package/dist/src/core/registry/registry.service.js.map +0 -1
  92. package/dist/src/core/ui/ui.module.d.ts +0 -2
  93. package/dist/src/core/ui/ui.module.js +0 -22
  94. package/dist/src/core/ui/ui.module.js.map +0 -1
  95. package/dist/src/core/ui/ui.service.d.ts +0 -22
  96. package/dist/src/core/ui/ui.service.js +0 -43
  97. package/dist/src/core/ui/ui.service.js.map +0 -1
  98. package/dist/src/main.d.ts +0 -2
  99. package/dist/src/main.js +0 -16
  100. package/dist/src/main.js.map +0 -1
  101. package/dist/src/shared/cleaner/cleaner.service.d.ts +0 -23
  102. package/dist/src/shared/cleaner/cleaner.service.js +0 -223
  103. package/dist/src/shared/cleaner/cleaner.service.js.map +0 -1
  104. package/dist/src/shared/cleaner/cleaner.types.d.ts +0 -21
  105. package/dist/src/shared/cleaner/cleaner.types.js +0 -3
  106. package/dist/src/shared/cleaner/cleaner.types.js.map +0 -1
  107. package/dist/src/shared/constants.d.ts +0 -4
  108. package/dist/src/shared/constants.js +0 -113
  109. package/dist/src/shared/constants.js.map +0 -1
  110. package/dist/src/shared/deps/deps.module.d.ts +0 -2
  111. package/dist/src/shared/deps/deps.module.js +0 -21
  112. package/dist/src/shared/deps/deps.module.js.map +0 -1
  113. package/dist/src/shared/deps/deps.service.d.ts +0 -15
  114. package/dist/src/shared/deps/deps.service.js +0 -114
  115. package/dist/src/shared/deps/deps.service.js.map +0 -1
  116. package/dist/src/shared/git/git.module.d.ts +0 -2
  117. package/dist/src/shared/git/git.module.js +0 -21
  118. package/dist/src/shared/git/git.module.js.map +0 -1
  119. package/dist/src/shared/git/git.service.d.ts +0 -5
  120. package/dist/src/shared/git/git.service.js +0 -56
  121. package/dist/src/shared/git/git.service.js.map +0 -1
  122. package/dist/src/shared/runbook/runbook.module.d.ts +0 -2
  123. package/dist/src/shared/runbook/runbook.module.js +0 -22
  124. package/dist/src/shared/runbook/runbook.module.js.map +0 -1
  125. package/dist/src/shared/runbook/runbook.service.d.ts +0 -20
  126. package/dist/src/shared/runbook/runbook.service.js +0 -118
  127. package/dist/src/shared/runbook/runbook.service.js.map +0 -1
  128. package/dist/src/shared/runbook/runbook.templates.d.ts +0 -6
  129. package/dist/src/shared/runbook/runbook.templates.js +0 -49
  130. package/dist/src/shared/runbook/runbook.templates.js.map +0 -1
  131. package/dist/src/shared/tokenizer/tokenizer.module.d.ts +0 -2
  132. package/dist/src/shared/tokenizer/tokenizer.module.js +0 -21
  133. package/dist/src/shared/tokenizer/tokenizer.module.js.map +0 -1
  134. package/dist/src/shared/tokenizer/tokenizer.service.d.ts +0 -10
  135. package/dist/src/shared/tokenizer/tokenizer.service.js +0 -36
  136. package/dist/src/shared/tokenizer/tokenizer.service.js.map +0 -1
  137. package/dist/tsconfig.build.tsbuildinfo +0 -1
  138. package/docs/todo.md +0 -7
  139. package/knip.json +0 -10
  140. package/kodu.json +0 -63
  141. package/kodu.schema.json +0 -100
  142. package/lefthook.yml +0 -11
  143. package/nest-cli.json +0 -8
  144. package/registry.schema.json +0 -39
  145. package/scripts/generate-json-schema.ts +0 -27
  146. package/skills/ac/SKILL.md +0 -239
  147. package/skills/al/SKILL.md +0 -98
  148. package/skills/audit/SKILL.md +0 -205
  149. package/skills/audit/audit-baseline-template.yml +0 -188
  150. package/skills/audit/runtime-detect.md +0 -64
  151. package/skills/audit/stacks/_generic.md +0 -41
  152. package/skills/audit/stacks/_registry.md +0 -47
  153. package/skills/audit/stacks/go.md +0 -66
  154. package/skills/audit/stacks/java.md +0 -44
  155. package/skills/audit/stacks/node.md +0 -57
  156. package/skills/audit/stacks/python.md +0 -45
  157. package/skills/audit/stacks/rust.md +0 -44
  158. package/skills/audit-api-contracts/SKILL.md +0 -201
  159. package/skills/audit-architecture/SKILL.md +0 -200
  160. package/skills/audit-bugs/SKILL.md +0 -226
  161. package/skills/audit-concurrency/SKILL.md +0 -197
  162. package/skills/audit-deployment/SKILL.md +0 -218
  163. package/skills/audit-docs/SKILL.md +0 -209
  164. package/skills/audit-errors/SKILL.md +0 -216
  165. package/skills/audit-logging/SKILL.md +0 -197
  166. package/skills/audit-matrix/SKILL.md +0 -245
  167. package/skills/audit-meta/SKILL.md +0 -120
  168. package/skills/audit-naming/SKILL.md +0 -200
  169. package/skills/audit-owasp/SKILL.md +0 -223
  170. package/skills/audit-performance/SKILL.md +0 -199
  171. package/skills/audit-reinvention/SKILL.md +0 -214
  172. package/skills/audit-secrets/SKILL.md +0 -198
  173. package/skills/audit-tests/SKILL.md +0 -210
  174. package/skills/audit-validation/SKILL.md +0 -206
  175. package/skills/audit-verify/SKILL.md +0 -139
  176. package/skills/audit-yagni/SKILL.md +0 -188
  177. package/skills/doc-gen/SKILL.md +0 -490
  178. package/skills/doc-gen/scripts/doc_gen.py +0 -911
  179. package/skills/generate-project-docs/SKILL.md +0 -380
  180. package/skills/implement-project/SKILL.md +0 -409
  181. package/skills/liteend-init/SKILL.md +0 -84
  182. package/skills/litefront-init/SKILL.md +0 -96
  183. package/skills/litefront-prototype/SKILL.md +0 -484
  184. package/skills/ops/SKILL.md +0 -94
  185. package/skills/post-call-task-builder/SKILL.md +0 -419
  186. package/skills/project-setup-standardizer/SKILL.md +0 -285
  187. package/skills/skills-best-practices/SKILL.md +0 -415
  188. package/skills/start/SKILL.md +0 -319
  189. package/skills/tech-blueprint/SKILL.md +0 -890
  190. package/skills/tech-blueprint/scripts/blueprint_validator.py +0 -417
  191. package/src/app.module.ts +0 -29
  192. package/src/commands/clean/clean.command.ts +0 -235
  193. package/src/commands/clean/clean.module.ts +0 -13
  194. package/src/commands/init/init.command.ts +0 -92
  195. package/src/commands/init/init.module.ts +0 -9
  196. package/src/commands/ops/ops-add.command.ts +0 -83
  197. package/src/commands/ops/ops-init.command.ts +0 -125
  198. package/src/commands/ops/ops-list.command.ts +0 -57
  199. package/src/commands/ops/ops-path.command.ts +0 -38
  200. package/src/commands/ops/ops-runbook.command.ts +0 -74
  201. package/src/commands/ops/ops-status.command.ts +0 -47
  202. package/src/commands/ops/ops-use.command.ts +0 -76
  203. package/src/commands/ops/ops.command.ts +0 -42
  204. package/src/commands/ops/ops.helpers.ts +0 -20
  205. package/src/commands/ops/ops.module.ts +0 -23
  206. package/src/commands/pack/pack.command.ts +0 -347
  207. package/src/commands/pack/pack.module.ts +0 -14
  208. package/src/core/config/config.module.ts +0 -10
  209. package/src/core/config/config.schema.ts +0 -58
  210. package/src/core/config/config.service.ts +0 -43
  211. package/src/core/config/prompt.service.ts +0 -80
  212. package/src/core/file-system/fs.module.ts +0 -8
  213. package/src/core/file-system/fs.service.ts +0 -248
  214. package/src/core/registry/registry.module.ts +0 -9
  215. package/src/core/registry/registry.schema.ts +0 -46
  216. package/src/core/registry/registry.service.ts +0 -128
  217. package/src/core/ui/ui.module.ts +0 -9
  218. package/src/core/ui/ui.service.ts +0 -39
  219. package/src/main.ts +0 -12
  220. package/src/shared/cleaner/cleaner.service.ts +0 -289
  221. package/src/shared/cleaner/cleaner.types.ts +0 -23
  222. package/src/shared/constants.ts +0 -118
  223. package/src/shared/deps/deps.module.ts +0 -8
  224. package/src/shared/deps/deps.service.ts +0 -175
  225. package/src/shared/git/git.module.ts +0 -8
  226. package/src/shared/git/git.service.ts +0 -47
  227. package/src/shared/runbook/runbook.module.ts +0 -9
  228. package/src/shared/runbook/runbook.service.ts +0 -164
  229. package/src/shared/runbook/runbook.templates.ts +0 -66
  230. package/src/shared/tokenizer/tokenizer.module.ts +0 -8
  231. package/src/shared/tokenizer/tokenizer.service.ts +0 -30
  232. package/tsconfig.build.json +0 -7
  233. package/tsconfig.json +0 -28
@@ -1,285 +0,0 @@
1
- ---
2
- name: project-setup-standardizer
3
- description: Enforces a unified, production-ready project setup (scripts, linting, testing, biome, lefthook) across any JS/TS project (backend, frontend, CLI, etc.). This skill MUST be invoked when initializing a new project.
4
- ---
5
-
6
- **This skill is MANDATORY and must be invoked when creating a new project.**
7
-
8
- You are responsible for transforming an existing JavaScript/TypeScript project into a **production-ready, standardized
9
- structure**.
10
-
11
- Your goal is NOT to suggest — you MUST **apply and enforce** the conventions below.
12
-
13
- ---
14
-
15
- ## 1. PROJECT TYPE DETECTION
16
-
17
- Before making any changes, detect the project type using these signals:
18
-
19
- | Signal | Type |
20
- |------------------------------------------------------------------|----------|
21
- | `dependencies` contains `react` or `vue` | frontend |
22
- | `devDependencies` contains `vite` (without react/vue) | frontend |
23
- | `dependencies` contains `@nestjs/core` or `express` or `fastify` | backend |
24
- | `bin` field exists in package.json | CLI |
25
- | None of the above | library |
26
-
27
- Frontend projects get additional tools (stylelint, steiger). All other types share the base setup.
28
-
29
- ---
30
-
31
- ## 2. MIGRATION: REMOVE CONFLICTING TOOLS FIRST
32
-
33
- Before installing Biome, you MUST remove ESLint and Prettier if present:
34
-
35
- 1. Delete config files: `.eslintrc*`, `.eslintignore`, `.prettierrc*`, `.prettierignore`
36
- 2. Remove from `package.json` dependencies/devDependencies: `eslint`, `prettier`, and all `eslint-*` / `prettier-*`
37
- packages
38
- 3. Only after removal, proceed with Biome setup
39
-
40
- ---
41
-
42
- ## 3. PACKAGE.JSON SCRIPTS (MANDATORY STRUCTURE)
43
-
44
- You MUST normalize `package.json/scripts` into clearly separated sections using visual separators.
45
-
46
- Use this exact pattern:
47
-
48
- ```json
49
- "scripts": {
50
- "________________ BUILD AND RUN ________________": "",
51
- "build": "...",
52
- "start:dev": "...",
53
- "start:prod": "...",
54
- "________________ FORMAT AND LINT ________________": "",
55
- "lint": "biome check",
56
- "lint:fix": "biome check --write",
57
- "lint:fix:unsafe": "biome check --write --unsafe",
58
- "ts:check": "tsc --noEmit",
59
- "knip": "knip --production",
60
- "check": "run-p ts:check lint:fix knip",
61
- "________________ TEST ________________": "",
62
- "test": "vitest run",
63
- "test:watch": "vitest",
64
- "test:cov": "vitest run --coverage",
65
-
66
- "________________ OTHER ________________": "",
67
- "prepare": "is-ci || lefthook install",
68
- "update": "npx npm-check-updates -u && rimraf node_modules package-lock.json && npm i",
69
- "postupdate": "npm run lint:fix && npm run check"
70
- }
71
- ```
72
-
73
- If the project has distinct unit and e2e test layers, add:
74
-
75
- ```json
76
- "test:unit": "...",
77
- "test:e2e": "...",
78
- "test:all": "run-s test:unit test:e2e"
79
- ```
80
-
81
- Otherwise omit `test:all` — do not duplicate `test` under a different name.
82
-
83
- ### Rules:
84
-
85
- - ALWAYS include `check` script → central quality gate
86
- - ALWAYS include `ts:check`; if no `tsconfig.json` exists, create a minimal one (see section 7)
87
- - ALWAYS include `knip` for unused exports/deps detection
88
- - ALWAYS include `lint:fix` in `check`
89
- - Use `run-p` (from `npm-run-all`) for parallel execution — never `npx run-p`
90
- - `prepare` MUST use `is-ci || lefthook install` to avoid CI failures when lefthook is not yet installed
91
-
92
- ---
93
-
94
- ## 4. FRONTEND-SPECIFIC REQUIREMENTS
95
-
96
- If project type is **frontend**, additionally include:
97
-
98
- ```json
99
- "lint:fsd": "steiger ./src",
100
- "lint:style": "stylelint '**/*.{css,scss}'",
101
- "lint:style:fix": "npm run lint:style -- --fix",
102
- "check": "run-p lint:style ts:check lint:fix knip lint:fsd"
103
- ```
104
-
105
- ### Mandatory:
106
-
107
- - FSD validation via `steiger`
108
- - stylelint integration
109
- - include ALL checks in `check`
110
-
111
- ---
112
-
113
- ## 5. TESTING STANDARD (MANDATORY)
114
-
115
- Use **vitest only**.
116
-
117
- Rules:
118
-
119
- - NO jest
120
- - NO mixed frameworks
121
- - coverage MUST be supported via `test:cov`
122
-
123
- ---
124
-
125
- ## 6. BIOME CONFIG (MANDATORY)
126
-
127
- You MUST ensure `biome.json` exists with this content:
128
-
129
- ```json
130
- {
131
- "$schema": "./node_modules/@biomejs/biome/configuration_schema.json",
132
- "formatter": {
133
- "enabled": true,
134
- "indentStyle": "space",
135
- "lineEnding": "lf"
136
- },
137
- "javascript": {
138
- "formatter": {
139
- "quoteStyle": "single"
140
- }
141
- },
142
- "linter": {
143
- "enabled": true,
144
- "rules": {
145
- "recommended": true,
146
- "correctness": {
147
- "noUnusedImports": "error",
148
- "noUnusedVariables": "error",
149
- "noUnusedFunctionParameters": "error"
150
- }
151
- }
152
- },
153
- "files": {
154
- "includes": [
155
- "**",
156
- "!node_modules",
157
- "!dist"
158
- ]
159
- },
160
- "vcs": {
161
- "enabled": true,
162
- "clientKind": "git",
163
- "useIgnoreFile": true
164
- }
165
- }
166
- ```
167
-
168
- ---
169
-
170
- ## 7. LEFTHOOK (MANDATORY)
171
-
172
- You MUST write `lefthook.yml` with this exact content:
173
-
174
- ```yaml
175
- pre-commit:
176
- parallel: false
177
- commands:
178
- check:
179
- run: npm run check
180
-
181
- pre-push:
182
- parallel: false
183
- commands:
184
- test-all:
185
- run: npm run test:all
186
- ```
187
-
188
- Rules:
189
-
190
- - `check` (lint + types + knip) gates every commit
191
- - tests gate every push — `pre-push` does NOT re-run `check` (already gated at commit)
192
- - no bypassing allowed
193
-
194
- ---
195
-
196
- ## 8. MINIMAL TSCONFIG (if missing)
197
-
198
- If `tsconfig.json` does not exist, create it:
199
-
200
- ```json
201
- {
202
- "compilerOptions": {
203
- "target": "ES2022",
204
- "module": "NodeNext",
205
- "moduleResolution": "NodeNext",
206
- "strict": true,
207
- "noEmit": true,
208
- "skipLibCheck": true
209
- },
210
- "include": [
211
- "src",
212
- "*.ts"
213
- ]
214
- }
215
- ```
216
-
217
- ---
218
-
219
- ## 9. REQUIRED DEV DEPENDENCIES
220
-
221
- Ensure these are installed (add any that are missing):
222
-
223
- Core (all project types):
224
-
225
- - `@biomejs/biome`
226
- - `typescript`
227
- - `vitest`
228
- - `lefthook`
229
- - `is-ci`
230
- - `npm-run-all`
231
- - `knip`
232
- - `rimraf`
233
- - `npm-check-updates`
234
-
235
- Frontend only:
236
-
237
- - `stylelint`
238
- - `steiger`
239
-
240
- ---
241
-
242
- ## 10. ENFORCEMENT LOGIC
243
-
244
- You MUST follow this order:
245
-
246
- 1. Detect project type (section 1)
247
- 2. Remove conflicting tools (section 2)
248
- 3. Rewrite `package.json` scripts (section 3, or 4 for frontend)
249
- 4. Write/update `biome.json` (section 6)
250
- 5. Write/update `lefthook.yml` (section 7)
251
- 6. Create `tsconfig.json` if missing (section 8)
252
- 7. Install missing dev dependencies (section 9)
253
-
254
- NEVER:
255
-
256
- - keep inconsistent scripts
257
- - mix tools (eslint + biome)
258
- - leave partial setup
259
-
260
- ---
261
-
262
- ## 11. OUTPUT FORMAT
263
-
264
- You must output:
265
-
266
- 1. Updated `package.json` (only the `scripts` and `devDependencies` sections)
267
- 2. `biome.json`
268
- 3. `lefthook.yml`
269
- 4. `tsconfig.json` (if created)
270
- 5. List of removed files and packages
271
-
272
- All configs must be **complete and copy-paste ready**.
273
-
274
- ---
275
-
276
- ## 12. PRINCIPLE
277
-
278
- Your job is to enforce:
279
-
280
- - determinism
281
- - reproducibility
282
- - zero-config onboarding
283
- - strict quality gates
284
-
285
- If something is ambiguous — choose the stricter option.