@tailor-platform/erp-kit 0.0.1 → 0.1.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 (231) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +196 -28
  4. package/dist/cli.js +914 -0
  5. package/package.json +67 -8
  6. package/schemas/app-compose/actors.yml +34 -0
  7. package/schemas/app-compose/business-flow.yml +50 -0
  8. package/schemas/app-compose/requirements.yml +33 -0
  9. package/schemas/app-compose/resolver.yml +47 -0
  10. package/schemas/app-compose/screen.yml +81 -0
  11. package/schemas/app-compose/story.yml +67 -0
  12. package/schemas/module/command.yml +52 -0
  13. package/schemas/module/feature.yml +58 -0
  14. package/schemas/module/model.yml +70 -0
  15. package/schemas/module/module.yml +50 -0
  16. package/skills/1-module-docs/SKILL.md +111 -0
  17. package/skills/1-module-docs/references/structure.md +22 -0
  18. package/skills/2-module-feature-breakdown/SKILL.md +72 -0
  19. package/skills/2-module-feature-breakdown/references/commands.md +48 -0
  20. package/skills/2-module-feature-breakdown/references/models.md +29 -0
  21. package/skills/2-module-feature-breakdown/references/structure.md +22 -0
  22. package/skills/3-module-doc-review/SKILL.md +236 -0
  23. package/skills/3-module-doc-review/references/commands.md +54 -0
  24. package/skills/3-module-doc-review/references/models.md +29 -0
  25. package/skills/3-module-doc-review/references/testing.md +37 -0
  26. package/skills/4-module-tdd-implementation/SKILL.md +74 -0
  27. package/skills/4-module-tdd-implementation/references/commands.md +45 -0
  28. package/skills/4-module-tdd-implementation/references/db-relations.md +69 -0
  29. package/skills/4-module-tdd-implementation/references/errors.md +7 -0
  30. package/skills/4-module-tdd-implementation/references/exports.md +8 -0
  31. package/skills/4-module-tdd-implementation/references/models.md +30 -0
  32. package/skills/4-module-tdd-implementation/references/structure.md +22 -0
  33. package/skills/4-module-tdd-implementation/references/testing.md +37 -0
  34. package/skills/5-module-implementation-review/SKILL.md +408 -0
  35. package/skills/5-module-implementation-review/references/commands.md +45 -0
  36. package/skills/5-module-implementation-review/references/errors.md +7 -0
  37. package/skills/5-module-implementation-review/references/exports.md +8 -0
  38. package/skills/5-module-implementation-review/references/models.md +30 -0
  39. package/skills/5-module-implementation-review/references/testing.md +29 -0
  40. package/skills/app-compose-1-requirement-analysis/SKILL.md +89 -0
  41. package/skills/app-compose-1-requirement-analysis/references/structure.md +27 -0
  42. package/skills/app-compose-2-requirements-breakdown/SKILL.md +95 -0
  43. package/skills/app-compose-2-requirements-breakdown/references/screen-detailview.md +106 -0
  44. package/skills/app-compose-2-requirements-breakdown/references/screen-form.md +139 -0
  45. package/skills/app-compose-2-requirements-breakdown/references/screen-listview.md +153 -0
  46. package/skills/app-compose-2-requirements-breakdown/references/structure.md +27 -0
  47. package/skills/app-compose-3-doc-review/SKILL.md +116 -0
  48. package/skills/app-compose-3-doc-review/references/structure.md +27 -0
  49. package/skills/app-compose-4-design-mock/SKILL.md +256 -0
  50. package/skills/app-compose-4-design-mock/references/component.md +50 -0
  51. package/skills/app-compose-4-design-mock/references/screen-detailview.md +106 -0
  52. package/skills/app-compose-4-design-mock/references/screen-form.md +139 -0
  53. package/skills/app-compose-4-design-mock/references/screen-listview.md +153 -0
  54. package/skills/app-compose-4-design-mock/references/structure.md +27 -0
  55. package/skills/app-compose-5-design-mock-review/SKILL.md +290 -0
  56. package/skills/app-compose-5-design-mock-review/references/component.md +50 -0
  57. package/skills/app-compose-5-design-mock-review/references/screen-detailview.md +106 -0
  58. package/skills/app-compose-5-design-mock-review/references/screen-form.md +139 -0
  59. package/skills/app-compose-5-design-mock-review/references/screen-listview.md +153 -0
  60. package/skills/app-compose-6-implementation-spec/SKILL.md +127 -0
  61. package/skills/app-compose-6-implementation-spec/references/auth.md +72 -0
  62. package/skills/app-compose-6-implementation-spec/references/structure.md +27 -0
  63. package/skills/mock-scenario/SKILL.md +118 -0
  64. package/src/app.ts +1 -0
  65. package/src/cli.ts +120 -0
  66. package/src/commands/check.test.ts +30 -0
  67. package/src/commands/check.ts +66 -0
  68. package/src/commands/init.test.ts +88 -0
  69. package/src/commands/init.ts +120 -0
  70. package/src/commands/mock/index.ts +53 -0
  71. package/src/commands/mock/start.ts +179 -0
  72. package/src/commands/mock/validate.test.ts +185 -0
  73. package/src/commands/mock/validate.ts +198 -0
  74. package/src/commands/scaffold.test.ts +76 -0
  75. package/src/commands/scaffold.ts +119 -0
  76. package/src/commands/sync-check.test.ts +125 -0
  77. package/src/commands/sync-check.ts +182 -0
  78. package/src/integration.test.ts +63 -0
  79. package/src/mdschema.ts +48 -0
  80. package/src/mockServer.ts +55 -0
  81. package/src/module.ts +86 -0
  82. package/src/modules/accounting/.gitkeep +0 -0
  83. package/src/modules/coa-management/.gitkeep +0 -0
  84. package/src/modules/inventory/.gitkeep +0 -0
  85. package/src/modules/manufacturing/.gitkeep +0 -0
  86. package/src/modules/primitives/README.md +39 -0
  87. package/src/modules/primitives/command/activateCategory.test.ts +75 -0
  88. package/src/modules/primitives/command/activateCategory.ts +50 -0
  89. package/src/modules/primitives/command/activateCurrency.test.ts +70 -0
  90. package/src/modules/primitives/command/activateCurrency.ts +50 -0
  91. package/src/modules/primitives/command/activateUnit.test.ts +53 -0
  92. package/src/modules/primitives/command/activateUnit.ts +50 -0
  93. package/src/modules/primitives/command/convertAmount.test.ts +275 -0
  94. package/src/modules/primitives/command/convertAmount.ts +126 -0
  95. package/src/modules/primitives/command/convertQuantity.test.ts +219 -0
  96. package/src/modules/primitives/command/convertQuantity.ts +73 -0
  97. package/src/modules/primitives/command/createCategory.test.ts +126 -0
  98. package/src/modules/primitives/command/createCategory.ts +89 -0
  99. package/src/modules/primitives/command/createCurrency.test.ts +191 -0
  100. package/src/modules/primitives/command/createCurrency.ts +77 -0
  101. package/src/modules/primitives/command/createExchangeRate.test.ts +216 -0
  102. package/src/modules/primitives/command/createExchangeRate.ts +91 -0
  103. package/src/modules/primitives/command/createUnit.test.ts +214 -0
  104. package/src/modules/primitives/command/createUnit.ts +88 -0
  105. package/src/modules/primitives/command/deactivateCategory.test.ts +97 -0
  106. package/src/modules/primitives/command/deactivateCategory.ts +62 -0
  107. package/src/modules/primitives/command/deactivateCurrency.test.ts +85 -0
  108. package/src/modules/primitives/command/deactivateCurrency.ts +55 -0
  109. package/src/modules/primitives/command/deactivateUnit.test.ts +78 -0
  110. package/src/modules/primitives/command/deactivateUnit.ts +62 -0
  111. package/src/modules/primitives/command/setBaseCurrency.test.ts +98 -0
  112. package/src/modules/primitives/command/setBaseCurrency.ts +74 -0
  113. package/src/modules/primitives/command/setReferenceUnit.test.ts +108 -0
  114. package/src/modules/primitives/command/setReferenceUnit.ts +84 -0
  115. package/src/modules/primitives/db/currency.ts +30 -0
  116. package/src/modules/primitives/db/exchangeRate.ts +28 -0
  117. package/src/modules/primitives/db/unit.ts +32 -0
  118. package/src/modules/primitives/db/uomCategory.ts +32 -0
  119. package/src/modules/primitives/docs/commands/ActivateCategory.md +34 -0
  120. package/src/modules/primitives/docs/commands/ActivateCurrency.md +33 -0
  121. package/src/modules/primitives/docs/commands/ActivateUnit.md +34 -0
  122. package/src/modules/primitives/docs/commands/ConvertAmount.md +50 -0
  123. package/src/modules/primitives/docs/commands/ConvertQuantity.md +43 -0
  124. package/src/modules/primitives/docs/commands/CreateCategory.md +44 -0
  125. package/src/modules/primitives/docs/commands/CreateCurrency.md +47 -0
  126. package/src/modules/primitives/docs/commands/CreateExchangeRate.md +48 -0
  127. package/src/modules/primitives/docs/commands/CreateUnit.md +48 -0
  128. package/src/modules/primitives/docs/commands/DeactivateCategory.md +38 -0
  129. package/src/modules/primitives/docs/commands/DeactivateCurrency.md +38 -0
  130. package/src/modules/primitives/docs/commands/DeactivateUnit.md +38 -0
  131. package/src/modules/primitives/docs/commands/SetBaseCurrency.md +39 -0
  132. package/src/modules/primitives/docs/commands/SetReferenceUnit.md +43 -0
  133. package/src/modules/primitives/docs/features/currency-definitions.md +55 -0
  134. package/src/modules/primitives/docs/features/exchange-rates.md +61 -0
  135. package/src/modules/primitives/docs/features/unit-conversion.md +66 -0
  136. package/src/modules/primitives/docs/features/uom-categories.md +52 -0
  137. package/src/modules/primitives/docs/models/Currency.md +45 -0
  138. package/src/modules/primitives/docs/models/ExchangeRate.md +33 -0
  139. package/src/modules/primitives/docs/models/Unit.md +46 -0
  140. package/src/modules/primitives/docs/models/UoMCategory.md +44 -0
  141. package/src/modules/primitives/generated/kysely-tailordb.ts +95 -0
  142. package/src/modules/primitives/index.ts +40 -0
  143. package/src/modules/primitives/lib/errors.ts +138 -0
  144. package/src/modules/primitives/lib/types.ts +20 -0
  145. package/src/modules/primitives/module.ts +66 -0
  146. package/src/modules/primitives/permissions.ts +18 -0
  147. package/src/modules/primitives/tailor.config.ts +11 -0
  148. package/src/modules/primitives/testing/fixtures.ts +161 -0
  149. package/src/modules/product-management/.gitkeep +0 -0
  150. package/src/modules/purchase/.gitkeep +0 -0
  151. package/src/modules/sales/.gitkeep +0 -0
  152. package/src/modules/shared/createContext.test.ts +39 -0
  153. package/src/modules/shared/createContext.ts +15 -0
  154. package/src/modules/shared/defineCommand.test.ts +42 -0
  155. package/src/modules/shared/defineCommand.ts +19 -0
  156. package/src/modules/shared/definePermissions.test.ts +146 -0
  157. package/src/modules/shared/definePermissions.ts +94 -0
  158. package/src/modules/shared/entityTypes.ts +15 -0
  159. package/src/modules/shared/errors.ts +22 -0
  160. package/src/modules/shared/index.ts +1 -0
  161. package/src/modules/shared/internal.ts +13 -0
  162. package/src/modules/shared/requirePermission.test.ts +47 -0
  163. package/src/modules/shared/requirePermission.ts +8 -0
  164. package/src/modules/shared/types.ts +4 -0
  165. package/src/modules/supplier-management/.gitkeep +0 -0
  166. package/src/modules/supplier-portal/.gitkeep +0 -0
  167. package/src/modules/testing/index.ts +120 -0
  168. package/src/modules/user-management/README.md +38 -0
  169. package/src/modules/user-management/command/activateUser.test.ts +112 -0
  170. package/src/modules/user-management/command/activateUser.ts +67 -0
  171. package/src/modules/user-management/command/assignPermissionToRole.test.ts +119 -0
  172. package/src/modules/user-management/command/assignPermissionToRole.ts +87 -0
  173. package/src/modules/user-management/command/assignRoleToUser.test.ts +162 -0
  174. package/src/modules/user-management/command/assignRoleToUser.ts +93 -0
  175. package/src/modules/user-management/command/createPermission.test.ts +143 -0
  176. package/src/modules/user-management/command/createPermission.ts +66 -0
  177. package/src/modules/user-management/command/createRole.test.ts +115 -0
  178. package/src/modules/user-management/command/createRole.ts +52 -0
  179. package/src/modules/user-management/command/createUser.test.ts +198 -0
  180. package/src/modules/user-management/command/createUser.ts +85 -0
  181. package/src/modules/user-management/command/deactivateUser.test.ts +112 -0
  182. package/src/modules/user-management/command/deactivateUser.ts +67 -0
  183. package/src/modules/user-management/command/logAuditEvent.test.ts +179 -0
  184. package/src/modules/user-management/command/logAuditEvent.ts +59 -0
  185. package/src/modules/user-management/command/reactivateUser.test.ts +115 -0
  186. package/src/modules/user-management/command/reactivateUser.ts +67 -0
  187. package/src/modules/user-management/command/revokePermissionFromRole.test.ts +112 -0
  188. package/src/modules/user-management/command/revokePermissionFromRole.ts +81 -0
  189. package/src/modules/user-management/command/revokeRoleFromUser.test.ts +112 -0
  190. package/src/modules/user-management/command/revokeRoleFromUser.ts +81 -0
  191. package/src/modules/user-management/db/auditEvent.ts +47 -0
  192. package/src/modules/user-management/db/permission.ts +31 -0
  193. package/src/modules/user-management/db/role.ts +28 -0
  194. package/src/modules/user-management/db/rolePermission.ts +44 -0
  195. package/src/modules/user-management/db/user.ts +38 -0
  196. package/src/modules/user-management/db/userRole.ts +44 -0
  197. package/src/modules/user-management/docs/commands/ActivateUser.md +36 -0
  198. package/src/modules/user-management/docs/commands/AssignPermissionToRole.md +39 -0
  199. package/src/modules/user-management/docs/commands/AssignRoleToUser.md +43 -0
  200. package/src/modules/user-management/docs/commands/CreatePermission.md +35 -0
  201. package/src/modules/user-management/docs/commands/CreateRole.md +35 -0
  202. package/src/modules/user-management/docs/commands/CreateUser.md +41 -0
  203. package/src/modules/user-management/docs/commands/DeactivateUser.md +38 -0
  204. package/src/modules/user-management/docs/commands/LogAuditEvent.md +37 -0
  205. package/src/modules/user-management/docs/commands/ReactivateUser.md +37 -0
  206. package/src/modules/user-management/docs/commands/RevokePermissionFromRole.md +40 -0
  207. package/src/modules/user-management/docs/commands/RevokeRoleFromUser.md +40 -0
  208. package/src/modules/user-management/docs/features/audit-trail.md +80 -0
  209. package/src/modules/user-management/docs/features/role-based-access-control.md +76 -0
  210. package/src/modules/user-management/docs/features/user-account-management.md +64 -0
  211. package/src/modules/user-management/docs/models/AuditEvent.md +34 -0
  212. package/src/modules/user-management/docs/models/Permission.md +31 -0
  213. package/src/modules/user-management/docs/models/Role.md +31 -0
  214. package/src/modules/user-management/docs/models/RolePermission.md +33 -0
  215. package/src/modules/user-management/docs/models/User.md +47 -0
  216. package/src/modules/user-management/docs/models/UserRole.md +34 -0
  217. package/src/modules/user-management/docs/plans/2026-01-30-flattened-permissions-design.md +52 -0
  218. package/src/modules/user-management/executor/recomputeOnRolePermissionChange.ts +61 -0
  219. package/src/modules/user-management/generated/enums.ts +24 -0
  220. package/src/modules/user-management/generated/kysely-tailordb.ts +112 -0
  221. package/src/modules/user-management/index.ts +32 -0
  222. package/src/modules/user-management/lib/errors.ts +81 -0
  223. package/src/modules/user-management/lib/recomputeUserPermissions.ts +53 -0
  224. package/src/modules/user-management/lib/types.ts +31 -0
  225. package/src/modules/user-management/module.ts +77 -0
  226. package/src/modules/user-management/permissions.ts +15 -0
  227. package/src/modules/user-management/tailor.config.ts +11 -0
  228. package/src/modules/user-management/testing/fixtures.ts +98 -0
  229. package/src/schemas.ts +25 -0
  230. package/src/testing.ts +10 -0
  231. package/src/util.ts +3 -0
package/package.json CHANGED
@@ -1,10 +1,69 @@
1
1
  {
2
2
  "name": "@tailor-platform/erp-kit",
3
- "version": "0.0.1",
4
- "description": "OIDC trusted publishing setup package for @tailor-platform/erp-kit",
5
- "keywords": [
6
- "oidc",
7
- "trusted-publishing",
8
- "setup"
9
- ]
10
- }
3
+ "version": "0.1.1",
4
+ "description": "Opinionated ERP toolkit for building business applications on Tailor Platform",
5
+ "license": "MIT",
6
+ "bin": {
7
+ "erp-kit": "./dist/cli.js"
8
+ },
9
+ "files": [
10
+ "CHANGELOG.md",
11
+ "dist",
12
+ "LICENSE",
13
+ "schemas",
14
+ "skills",
15
+ "src"
16
+ ],
17
+ "type": "module",
18
+ "exports": {
19
+ "./module": "./src/module.ts",
20
+ "./app": "./src/app.ts",
21
+ "./testing": "./src/testing.ts"
22
+ },
23
+ "dependencies": {
24
+ "@jackchuka/mdschema": "^0.12.3",
25
+ "@mockoon/commons": "^9.0.0",
26
+ "@mockoon/commons-server": "^9.0.0",
27
+ "chalk": "^5.4.1",
28
+ "fast-glob": "^3.3.3",
29
+ "politty": "^0.4.0",
30
+ "zod": "4.3.6"
31
+ },
32
+ "devDependencies": {
33
+ "@tailor-platform/function-kysely-tailordb": "0.1.3",
34
+ "@tailor-platform/function-types": "0.8.1",
35
+ "@tailor-platform/sdk": "1.17.1",
36
+ "@types/node": "^25.1.0",
37
+ "eslint": "9.39.2",
38
+ "kysely": "0.28.10",
39
+ "tsup": "^8.0.0",
40
+ "typescript": "^5.7.3",
41
+ "vitest": "^4.0.0",
42
+ "@tailor-platform/eslint-config": "0.0.1"
43
+ },
44
+ "peerDependencies": {
45
+ "@tailor-platform/function-kysely-tailordb": "0.1.3",
46
+ "@tailor-platform/function-types": "0.8.1",
47
+ "@tailor-platform/sdk": "1.17.1",
48
+ "kysely": "0.28.10"
49
+ },
50
+ "engines": {
51
+ "node": ">=24"
52
+ },
53
+ "scripts": {
54
+ "build": "tsup",
55
+ "generate": "pnpm generate:primitives && pnpm generate:user-management",
56
+ "generate:primitives": "cd src/modules/primitives && tailor-sdk generate",
57
+ "generate:user-management": "cd src/modules/user-management && tailor-sdk generate",
58
+ "lint": "eslint --cache .",
59
+ "lint:fix": "eslint --cache --fix .",
60
+ "typecheck": "tsc --noEmit",
61
+ "test": "vitest run",
62
+ "test:watch": "vitest",
63
+ "test:primitives": "vitest run src/modules/primitives/",
64
+ "test:user-management": "vitest run src/modules/user-management/",
65
+ "test:shared": "vitest run src/modules/shared/",
66
+ "mock:start": "node dist/cli.js mock start",
67
+ "mock:validate": "node dist/cli.js mock validate"
68
+ }
69
+ }
@@ -0,0 +1,34 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ structure:
4
+ - heading:
5
+ expr: "slug(filename) == slug(heading)"
6
+ children:
7
+ # Brief context for authorization decisions - REQUIRED
8
+ - heading: "## Overview"
9
+ description: |
10
+ 1-2 sentences: who this actor is and their authority level.
11
+ Not a job description — context for authorization decisions.
12
+
13
+ # What flows this actor participates in - REQUIRED
14
+ - heading: "## Authorized Business Flows"
15
+ description: |
16
+ Business flows this actor participates in.
17
+ Format: [Flow Name](../business-flow/<flow>/README.md) — role
18
+ Roles: initiator, approver, viewer
19
+ Add conditions inline when needed, e.g. (< $1000)
20
+ lists:
21
+ - min: 1
22
+ type: unordered
23
+ min_items: 1
24
+
25
+ # Link validation
26
+ links:
27
+ validate_internal: true
28
+ validate_files: true
29
+
30
+ # Heading rules
31
+ heading_rules:
32
+ no_skip_levels: true
33
+ unique: true
34
+ max_depth: 2
@@ -0,0 +1,50 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ # SPEC TIER 3 (primary navigation structure)
4
+ # Business flow file: business-flow/<flow-name>/README.md
5
+ # Stories are nested: business-flow/<flow-name>/story/<actor>--<story-name>.md
6
+ # Defines end-to-end business processes
7
+
8
+ structure:
9
+ - heading:
10
+ pattern: "# [a-zA-Z0-9_\\-]+"
11
+ children:
12
+ # Brief description of this business flow - REQUIRED
13
+ - heading: "## Overview"
14
+
15
+ # Who initiates and participates in this flow - REQUIRED
16
+ - heading: "## Actors Involved"
17
+ description: |
18
+ List actors that participate in this business flow.
19
+ Link to actor docs. ie. ../../actors/<actor-name>.md
20
+ lists:
21
+ - min: 1
22
+ type: unordered
23
+ min_items: 1
24
+
25
+ # Diagram representing this flow - REQUIRED
26
+ - heading: "## Flow Diagram"
27
+ code_blocks:
28
+ - min: 1
29
+ lang: mermaid
30
+
31
+ # Links to user stories nested under this flow - REQUIRED
32
+ - heading: "## Stories"
33
+ description: |
34
+ Link to story docs in ./story/ folder that comprise this business flow.
35
+ Format: ./story/<actor>--<story-name>.md
36
+ lists:
37
+ - min: 1
38
+ type: unordered
39
+ min_items: 1
40
+
41
+ # Link validation
42
+ links:
43
+ validate_internal: true
44
+ validate_files: true
45
+
46
+ # Heading rules
47
+ heading_rules:
48
+ no_skip_levels: true
49
+ unique: true
50
+ max_depth: 3
@@ -0,0 +1,33 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ structure:
4
+ - heading: "# README"
5
+ children:
6
+ # What this application does - REQUIRED
7
+ - heading: "## Overview"
8
+
9
+ # Target industry and domain knowledge - REQUIRED
10
+ - heading: "## Industry Context"
11
+ children:
12
+ - heading: "### Target Industry"
13
+ description: |
14
+ The industry sector this application serves
15
+ (e.g., Manufacturing, Retail, Healthcare, Finance, Logistics)
16
+
17
+ - heading: "### Domain Terminology"
18
+ description: |
19
+ Key terms and concepts specific to this domain
20
+ lists:
21
+ - min: 0
22
+ type: unordered
23
+
24
+ # Link validation
25
+ links:
26
+ validate_internal: true
27
+ validate_files: true
28
+
29
+ # Heading rules
30
+ heading_rules:
31
+ no_skip_levels: true
32
+ unique: true
33
+ max_depth: 3
@@ -0,0 +1,47 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ # IMPLEMENTATION TIER
4
+ # Resolver file: resolver/<resolverName>.md
5
+ # Documents GraphQL operations (queries, mutations, subscriptions)
6
+
7
+ # TODO: check against resolver implementations via CI/CD pipeline
8
+
9
+ structure:
10
+ - heading:
11
+ expr: "filename == heading"
12
+ description: |
13
+ Document the GraphQL operation - mainly mutations.
14
+ children:
15
+ # What this Resolver does - REQUIRED
16
+ - heading: "## Overview"
17
+
18
+ # Which modules and what parts are used - REQUIRED
19
+ - heading: "## Modules Commands Used"
20
+ description: |
21
+ List modules and specific features/commands used from each.
22
+ lists:
23
+ - min: 1
24
+ type: unordered
25
+ min_items: 1
26
+
27
+ # Error Handling
28
+ - heading: "## Exception Handling"
29
+ optional: true
30
+ description: |
31
+ Document possible errors returned by this operation.
32
+ tables:
33
+ - min: 1
34
+ required_headers:
35
+ - Error Code
36
+ - Description
37
+
38
+ # Link validation
39
+ links:
40
+ validate_internal: true
41
+ validate_files: true
42
+
43
+ # Heading rules
44
+ heading_rules:
45
+ no_skip_levels: true
46
+ unique: true
47
+ max_depth: 3
@@ -0,0 +1,81 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ # IMPLEMENTATION TIER
4
+ # Screen file: screen/<screenName>.md
5
+ # TODO: should check existance of screens via CI/CD pipeline
6
+
7
+ structure:
8
+ - heading:
9
+ expr: "filename == heading"
10
+ children:
11
+ # What this screen does - REQUIRED
12
+ - heading: "## Overview"
13
+
14
+ # Screen Type
15
+ - heading: "## Screen Type"
16
+ description: |
17
+ Specify the type of screen (e.g., Form, ListView, DetailView).
18
+ required_text:
19
+ - pattern: "(Form|ListView|DetailView)"
20
+ regex: true
21
+ children:
22
+ - heading: "### Form Details"
23
+ description: |
24
+ If the screen is a Form provide details about the form fields.
25
+ optional: true
26
+ children:
27
+ - heading: "#### Input Fields"
28
+ tables:
29
+ - min: 1
30
+ required_headers:
31
+ - Field Name
32
+ - Field Type
33
+ - Required (Yes/No)
34
+ - heading: "### ListView Details"
35
+ description: |
36
+ If the screen is a ListView provide details about the table displayed.
37
+ optional: true
38
+ children:
39
+ - heading: "#### Required Columns"
40
+ tables:
41
+ - min: 1
42
+ required_headers:
43
+ - Column Name
44
+ - Hideable (Yes/No)
45
+ - Sort-able (Yes/No)
46
+ - Filter-able (Yes/No)
47
+ - Searchable (Yes/No)
48
+ - heading: "### DetailView Details"
49
+ description: |
50
+ If the screen is a DetailView provide actions available on this screen.
51
+ optional: true
52
+ children:
53
+ - heading: "#### Displayed Fields"
54
+ lists:
55
+ - min: 1
56
+ type: unordered
57
+ min_items: 1
58
+ - heading: "#### Available Actions"
59
+ lists:
60
+ - min: 1
61
+ type: unordered
62
+ min_items: 1
63
+
64
+ - heading: "## Access Control"
65
+ description: |
66
+ Specify the actors that have access to this screen.
67
+ Use links to actor documents (e.g., [buyer-administrator](../actors/buyer-administrator.md)).
68
+ lists:
69
+ - min: 1
70
+ type: unordered
71
+
72
+ # Link validation
73
+ links:
74
+ validate_internal: true
75
+ validate_files: true
76
+
77
+ # Heading rules
78
+ heading_rules:
79
+ no_skip_levels: true
80
+ unique: true
81
+ max_depth: 4
@@ -0,0 +1,67 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ # SPEC TIER 3 (nested under business-flow)
4
+ # Story filename format: <actor>--<story-name>.md
5
+ # Example: sales-manager--create-sales-order.md
6
+ # Heading must match story name (after --): # Create Sales Order
7
+ # Defines WHAT users accomplish (the requirement)
8
+
9
+ structure:
10
+ - heading:
11
+ # Validates: slug of text after "--" matches heading
12
+ # trimPrefix removes "actor--" prefix, leaving story name
13
+ # e.g., "sales-manager--create-sales-order" -> "create-sales-order" -> matches "# Create Sales Order"
14
+ expr: 'slug(trimPrefix(filename, "^[a-z-]+--")) == slug(heading)'
15
+ description: |
16
+ User story defining a specific requirement within a business flow.
17
+ The name of the story should start with the actor followed by `--` and the story name.
18
+ children:
19
+ - heading: "## User Story"
20
+ description: |
21
+ Define the user story in the format:
22
+ As a [role], I want [goal], so that [benefit].
23
+
24
+ # Diagram representing this story - REQUIRED
25
+ - heading: "## Story Diagram"
26
+ description: |
27
+ Mermaid sequence diagram showing user interactions with screens.
28
+ Focus on actors, UI screens, and business outcomes.
29
+ Avoid technical details (APIs, databases, endpoints).
30
+ code_blocks:
31
+ - min: 1
32
+ lang: mermaid
33
+
34
+ # Scenario Patterns, including edge cases - REQUIRED
35
+ - heading: "## Scenario Patterns"
36
+ lists:
37
+ - min: 1
38
+ type: unordered
39
+ min_items: 1
40
+
41
+ # Test cases must be covered - REQUIRED
42
+ - heading: "## Test Cases"
43
+ lists:
44
+ - min: 0
45
+ type: unordered
46
+ min_items: 1
47
+
48
+ # Screens that implement this story - REQUIRED
49
+ # Enables M:N relationship between stories and screens
50
+ - heading: "## Screens"
51
+ description: |
52
+ Link to screen docs that implement this story's UI.
53
+ lists:
54
+ - min: 1
55
+ type: unordered
56
+ min_items: 1
57
+
58
+ # Link validation
59
+ links:
60
+ validate_internal: true
61
+ validate_files: true
62
+
63
+ # Heading rules
64
+ heading_rules:
65
+ no_skip_levels: true
66
+ unique: true
67
+ max_depth: 3
@@ -0,0 +1,52 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ structure:
4
+ - heading:
5
+ expr: "filename == heading"
6
+ children:
7
+ # What this command does - REQUIRED
8
+ - heading: "## Overview"
9
+
10
+ # Business rules - REQUIRED
11
+ # Rules, constraints, and validation logic
12
+ - heading: "## Business Rules"
13
+ allow_additional: true
14
+ lists:
15
+ - min: 0
16
+ type: unordered
17
+ min_items: 1
18
+
19
+ # How it works - REQUIRED
20
+ # Step-by-step flow or workflow
21
+ - heading: "## Process Flow"
22
+ code_blocks:
23
+ - lang: mermaid
24
+ min: 1
25
+
26
+ # External dependencies - OPTIONAL
27
+ # Commands from other modules that this command depends on
28
+ - heading: "## External Dependencies"
29
+ description: "e.g. `- [inventory::adjustStock](../../inventory/commands/adjustStock.md) - Adjust stock quantity`"
30
+ lists:
31
+ - min: 0
32
+ type: unordered
33
+ min_items: 1
34
+
35
+ # Error handling - REQUIRED
36
+ # How errors are handled
37
+ - heading: "## Error Scenarios"
38
+ lists:
39
+ - min: 0
40
+ type: unordered
41
+ min_items: 1
42
+
43
+ # Link validation
44
+ links:
45
+ validate_internal: true
46
+ validate_files: true
47
+
48
+ # Heading rules
49
+ heading_rules:
50
+ no_skip_levels: true
51
+ unique: true
52
+ max_depth: 4
@@ -0,0 +1,58 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ structure:
4
+ - heading:
5
+ expr: "slug(filename) == slug(heading)"
6
+ children:
7
+ # ===================
8
+ # REQUIRED SECTIONS
9
+ # ===================
10
+
11
+ # What this feature does - REQUIRED
12
+ - heading: "## Overview"
13
+
14
+ # Business context - REQUIRED
15
+ # Why this feature exists and what problem it solves
16
+ - heading: "## Business Purpose"
17
+
18
+ # How it works - REQUIRED
19
+ # Process flow
20
+ - heading: "## Process Flow"
21
+ description: |
22
+ Describe the end-to-end process flow of this feature.
23
+ If multiple flows exist, split them into different diagrams and explain each.
24
+ code_blocks:
25
+ - lang: mermaid
26
+ min: 1
27
+
28
+ # Scenario Patterns, including edge cases - REQUIRED
29
+ - heading: "## Scenario Patterns"
30
+ lists:
31
+ - min: 1
32
+ type: unordered
33
+ min_items: 1
34
+
35
+ # Test cases must be covered - REQUIRED
36
+ - heading: "## Test Cases"
37
+ lists:
38
+ - min: 0
39
+ type: unordered
40
+ min_items: 1
41
+
42
+ # Links to any related references - REQUIRED
43
+ - heading: "## Reference Links"
44
+ lists:
45
+ - min: 0
46
+ type: unordered
47
+ min_items: 1
48
+
49
+ # Link validation
50
+ links:
51
+ validate_internal: true
52
+ validate_files: true
53
+
54
+ # Heading rules
55
+ heading_rules:
56
+ no_skip_levels: true
57
+ unique: true
58
+ max_depth: 4
@@ -0,0 +1,70 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+ structure:
3
+ - heading:
4
+ expr: "filename == heading"
5
+ children:
6
+ - heading: "## Description"
7
+ - heading: "## Domain Model Definitions"
8
+ children:
9
+ - heading: "### Model type"
10
+ description: |
11
+ Model type must be one of Standard, AppendOnly, or Stateful
12
+ - AppendOnly: AppendOnly model where records can be added but not modified or deleted
13
+ - Stateful: Stateful model with state transitions
14
+ required_text:
15
+ - pattern: "(Standard|AppendOnly|Stateful)"
16
+ regex: true
17
+ children:
18
+ - heading: "#### State Transitions"
19
+ description: |
20
+ Define the state transitions for Stateful models.
21
+ Commands should correspond to those defined in the "### Command Definitions" section.
22
+ optional: true
23
+ code_blocks:
24
+ - lang: mermaid
25
+ min: 1
26
+
27
+ - heading: "### Command Definitions"
28
+ description: |
29
+ Definitions of commands this domain model supports.
30
+ Should match with the commands defined in modules/**/docs/commands/*.md and link to them.
31
+ Commands heavily influenced by Model type:
32
+ - Standard: Create, Update, Delete (Some model may choose to not implement Delete)
33
+ - AppendOnly: Create
34
+ - Stateful: Create, State Transition Commands
35
+ lists:
36
+ - min: 0
37
+ type: unordered
38
+ min_items: 0
39
+
40
+ - heading: "### Models"
41
+ description: |
42
+ Actual database models necessary for the domain model.
43
+ lists:
44
+ - min: 1
45
+ type: unordered
46
+ min_items: 1
47
+
48
+ - heading: "### Invariants"
49
+ description: |
50
+ Invariants that must always hold true for this domain model.
51
+ - Assume the model boundary (the unit within which consistency is guaranteed) is already defined, and list what must always be true within that boundary.
52
+ - Express each invariant as part of the concept’s definition (what makes the concept valid), not as an implementation detail (no DB constraints, computed columns, etc.).
53
+ - If a constraint depends on lifecycle state, write it explicitly as a state-scoped invariant (state x condition that must always hold).
54
+
55
+ lists:
56
+ - min: 0
57
+ type: unordered
58
+ min_items: 0
59
+
60
+ - heading: "### Relationships"
61
+
62
+ # Global link validation settings
63
+ links:
64
+ validate_internal: true # check anchor links (#section-name)
65
+ validate_files: true # check relative file links (./other.md)
66
+ # Global heading validation rules
67
+ heading_rules:
68
+ no_skip_levels: true # disallow skipping levels (e.g., h1 -> h3)
69
+ unique: true # all headings must be unique
70
+ max_depth: 4 # maximum heading depth (1-6)
@@ -0,0 +1,50 @@
1
+ # yaml-language-server: $schema=https://raw.githubusercontent.com/jackchuka/mdschema/main/schema.json
2
+
3
+ structure:
4
+ - heading: "# README"
5
+ children:
6
+ # ===================
7
+ # REQUIRED SECTIONS
8
+ # ===================
9
+
10
+ # What this module does - REQUIRED
11
+ - heading: "## Overview"
12
+
13
+ # Main capabilities - REQUIRED
14
+ - heading: "## Key Features"
15
+ lists:
16
+ - min: 1
17
+ type: unordered
18
+ min_items: 1
19
+
20
+ # Module scope - REQUIRED
21
+ - heading: "## Module Scope"
22
+ children:
23
+ - heading: "### In Scope"
24
+ lists:
25
+ - min: 1
26
+ type: unordered
27
+ min_items: 1
28
+ - heading: "### Out of Scope"
29
+ lists:
30
+ - min: 1
31
+ type: unordered
32
+ min_items: 1
33
+
34
+ # Module dependencies - REQUIRED
35
+ - heading: "## Module Dependencies"
36
+ lists:
37
+ - min: 0
38
+ type: unordered
39
+ min_items: 1
40
+
41
+ # Link validation
42
+ links:
43
+ validate_internal: true
44
+ validate_files: true
45
+
46
+ # Heading rules
47
+ heading_rules:
48
+ no_skip_levels: true
49
+ unique: true
50
+ max_depth: 3