domain-knowledge-kit 0.2.15 → 0.2.19

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 (210) hide show
  1. package/README.md +4 -0
  2. package/dist/cli.js +24 -1
  3. package/dist/cli.js.map +1 -1
  4. package/dist/features/agent/commands/init.d.ts +90 -1
  5. package/dist/features/agent/commands/init.d.ts.map +1 -1
  6. package/dist/features/agent/commands/init.js +328 -32
  7. package/dist/features/agent/commands/init.js.map +1 -1
  8. package/dist/features/agent/commands/prime.d.ts +11 -0
  9. package/dist/features/agent/commands/prime.d.ts.map +1 -1
  10. package/dist/features/agent/commands/prime.js +105 -8
  11. package/dist/features/agent/commands/prime.js.map +1 -1
  12. package/dist/features/agent/commands/update.d.ts +27 -0
  13. package/dist/features/agent/commands/update.d.ts.map +1 -0
  14. package/dist/features/agent/commands/update.js +316 -0
  15. package/dist/features/agent/commands/update.js.map +1 -0
  16. package/dist/features/agent/dkk-artifacts.d.ts +76 -0
  17. package/dist/features/agent/dkk-artifacts.d.ts.map +1 -0
  18. package/dist/features/agent/dkk-artifacts.js +328 -0
  19. package/dist/features/agent/dkk-artifacts.js.map +1 -0
  20. package/dist/features/agent/install-mode.d.ts +34 -0
  21. package/dist/features/agent/install-mode.d.ts.map +1 -0
  22. package/dist/features/agent/install-mode.js +78 -0
  23. package/dist/features/agent/install-mode.js.map +1 -0
  24. package/dist/features/agent/mcp-register.d.ts +20 -0
  25. package/dist/features/agent/mcp-register.d.ts.map +1 -0
  26. package/dist/features/agent/mcp-register.js +116 -0
  27. package/dist/features/agent/mcp-register.js.map +1 -0
  28. package/dist/features/agent/settings-prune.d.ts +29 -0
  29. package/dist/features/agent/settings-prune.d.ts.map +1 -0
  30. package/dist/features/agent/settings-prune.js +70 -0
  31. package/dist/features/agent/settings-prune.js.map +1 -0
  32. package/dist/features/agent/tests/settings-prune.test.d.ts +2 -0
  33. package/dist/features/agent/tests/settings-prune.test.d.ts.map +1 -0
  34. package/dist/features/agent/tests/settings-prune.test.js +118 -0
  35. package/dist/features/agent/tests/settings-prune.test.js.map +1 -0
  36. package/dist/features/federation/commands/consumers.d.ts +40 -0
  37. package/dist/features/federation/commands/consumers.d.ts.map +1 -0
  38. package/dist/features/federation/commands/consumers.js +126 -0
  39. package/dist/features/federation/commands/consumers.js.map +1 -0
  40. package/dist/features/federation/commands/peers-add.d.ts +14 -0
  41. package/dist/features/federation/commands/peers-add.d.ts.map +1 -0
  42. package/dist/features/federation/commands/peers-add.js +79 -0
  43. package/dist/features/federation/commands/peers-add.js.map +1 -0
  44. package/dist/features/federation/commands/peers-list.d.ts +8 -0
  45. package/dist/features/federation/commands/peers-list.d.ts.map +1 -0
  46. package/dist/features/federation/commands/peers-list.js +51 -0
  47. package/dist/features/federation/commands/peers-list.js.map +1 -0
  48. package/dist/features/federation/commands/peers-status.d.ts +8 -0
  49. package/dist/features/federation/commands/peers-status.d.ts.map +1 -0
  50. package/dist/features/federation/commands/peers-status.js +78 -0
  51. package/dist/features/federation/commands/peers-status.js.map +1 -0
  52. package/dist/features/federation/commands/pull.d.ts +18 -0
  53. package/dist/features/federation/commands/pull.d.ts.map +1 -0
  54. package/dist/features/federation/commands/pull.js +153 -0
  55. package/dist/features/federation/commands/pull.js.map +1 -0
  56. package/dist/features/federation/git-fetcher.d.ts +45 -0
  57. package/dist/features/federation/git-fetcher.d.ts.map +1 -0
  58. package/dist/features/federation/git-fetcher.js +70 -0
  59. package/dist/features/federation/git-fetcher.js.map +1 -0
  60. package/dist/features/federation/loader.d.ts +60 -0
  61. package/dist/features/federation/loader.d.ts.map +1 -0
  62. package/dist/features/federation/loader.js +193 -0
  63. package/dist/features/federation/loader.js.map +1 -0
  64. package/dist/features/federation/lock.d.ts +12 -0
  65. package/dist/features/federation/lock.d.ts.map +1 -0
  66. package/dist/features/federation/lock.js +48 -0
  67. package/dist/features/federation/lock.js.map +1 -0
  68. package/dist/features/federation/tests/git-fetcher.test.d.ts +2 -0
  69. package/dist/features/federation/tests/git-fetcher.test.d.ts.map +1 -0
  70. package/dist/features/federation/tests/git-fetcher.test.js +167 -0
  71. package/dist/features/federation/tests/git-fetcher.test.js.map +1 -0
  72. package/dist/features/federation/tests/loader.test.d.ts +2 -0
  73. package/dist/features/federation/tests/loader.test.d.ts.map +1 -0
  74. package/dist/features/federation/tests/loader.test.js +144 -0
  75. package/dist/features/federation/tests/loader.test.js.map +1 -0
  76. package/dist/features/federation/tests/phase5.test.d.ts +2 -0
  77. package/dist/features/federation/tests/phase5.test.d.ts.map +1 -0
  78. package/dist/features/federation/tests/phase5.test.js +137 -0
  79. package/dist/features/federation/tests/phase5.test.js.map +1 -0
  80. package/dist/features/federation/tests/schema-load.test.d.ts +2 -0
  81. package/dist/features/federation/tests/schema-load.test.d.ts.map +1 -0
  82. package/dist/features/federation/tests/schema-load.test.js +97 -0
  83. package/dist/features/federation/tests/schema-load.test.js.map +1 -0
  84. package/dist/features/federation/tests/validator.test.d.ts +2 -0
  85. package/dist/features/federation/tests/validator.test.d.ts.map +1 -0
  86. package/dist/features/federation/tests/validator.test.js +319 -0
  87. package/dist/features/federation/tests/validator.test.js.map +1 -0
  88. package/dist/features/mcp/commands/serve.d.ts +10 -0
  89. package/dist/features/mcp/commands/serve.d.ts.map +1 -0
  90. package/dist/features/mcp/commands/serve.js +12 -0
  91. package/dist/features/mcp/commands/serve.js.map +1 -0
  92. package/dist/features/mcp/server.d.ts +15 -0
  93. package/dist/features/mcp/server.d.ts.map +1 -0
  94. package/dist/features/mcp/server.js +438 -0
  95. package/dist/features/mcp/server.js.map +1 -0
  96. package/dist/features/pipeline/commands/validate.d.ts.map +1 -1
  97. package/dist/features/pipeline/commands/validate.js +7 -0
  98. package/dist/features/pipeline/commands/validate.js.map +1 -1
  99. package/dist/features/pipeline/indexer.d.ts +28 -2
  100. package/dist/features/pipeline/indexer.d.ts.map +1 -1
  101. package/dist/features/pipeline/indexer.js +82 -27
  102. package/dist/features/pipeline/indexer.js.map +1 -1
  103. package/dist/features/pipeline/validator.d.ts +10 -0
  104. package/dist/features/pipeline/validator.d.ts.map +1 -1
  105. package/dist/features/pipeline/validator.js +274 -27
  106. package/dist/features/pipeline/validator.js.map +1 -1
  107. package/dist/features/query/commands/list.d.ts +10 -0
  108. package/dist/features/query/commands/list.d.ts.map +1 -1
  109. package/dist/features/query/commands/list.js +1 -1
  110. package/dist/features/query/commands/list.js.map +1 -1
  111. package/dist/features/query/commands/locate.d.ts +1 -0
  112. package/dist/features/query/commands/locate.d.ts.map +1 -1
  113. package/dist/features/query/commands/locate.js +1 -1
  114. package/dist/features/query/commands/locate.js.map +1 -1
  115. package/dist/features/query/commands/search.d.ts.map +1 -1
  116. package/dist/features/query/commands/search.js +2 -0
  117. package/dist/features/query/commands/search.js.map +1 -1
  118. package/dist/features/query/commands/show.d.ts +15 -0
  119. package/dist/features/query/commands/show.d.ts.map +1 -1
  120. package/dist/features/query/commands/show.js +116 -58
  121. package/dist/features/query/commands/show.js.map +1 -1
  122. package/dist/features/query/commands/story.d.ts +70 -0
  123. package/dist/features/query/commands/story.d.ts.map +1 -1
  124. package/dist/features/query/commands/story.js +2 -2
  125. package/dist/features/query/commands/story.js.map +1 -1
  126. package/dist/features/query/commands/summary.d.ts +3 -0
  127. package/dist/features/query/commands/summary.d.ts.map +1 -1
  128. package/dist/features/query/commands/summary.js +1 -1
  129. package/dist/features/query/commands/summary.js.map +1 -1
  130. package/dist/features/query/searcher.d.ts +18 -1
  131. package/dist/features/query/searcher.d.ts.map +1 -1
  132. package/dist/features/query/searcher.js +11 -2
  133. package/dist/features/query/searcher.js.map +1 -1
  134. package/dist/features/scaffold/commands/new-domain.d.ts +22 -0
  135. package/dist/features/scaffold/commands/new-domain.d.ts.map +1 -1
  136. package/dist/features/scaffold/commands/new-domain.js +44 -28
  137. package/dist/features/scaffold/commands/new-domain.js.map +1 -1
  138. package/dist/features/scaffold/commands/service-init.d.ts +12 -0
  139. package/dist/features/scaffold/commands/service-init.d.ts.map +1 -0
  140. package/dist/features/scaffold/commands/service-init.js +69 -0
  141. package/dist/features/scaffold/commands/service-init.js.map +1 -0
  142. package/dist/shared/graph.d.ts +8 -0
  143. package/dist/shared/graph.d.ts.map +1 -1
  144. package/dist/shared/graph.js +180 -112
  145. package/dist/shared/graph.js.map +1 -1
  146. package/dist/shared/index.d.ts +4 -1
  147. package/dist/shared/index.d.ts.map +1 -1
  148. package/dist/shared/index.js +6 -1
  149. package/dist/shared/index.js.map +1 -1
  150. package/dist/shared/loader.d.ts +22 -0
  151. package/dist/shared/loader.d.ts.map +1 -1
  152. package/dist/shared/loader.js +31 -1
  153. package/dist/shared/loader.js.map +1 -1
  154. package/dist/shared/paths.d.ts +59 -7
  155. package/dist/shared/paths.d.ts.map +1 -1
  156. package/dist/shared/paths.js +93 -11
  157. package/dist/shared/paths.js.map +1 -1
  158. package/dist/shared/refs.d.ts +96 -0
  159. package/dist/shared/refs.d.ts.map +1 -0
  160. package/dist/shared/refs.js +182 -0
  161. package/dist/shared/refs.js.map +1 -0
  162. package/dist/shared/service-id.d.ts +11 -0
  163. package/dist/shared/service-id.d.ts.map +1 -0
  164. package/dist/shared/service-id.js +64 -0
  165. package/dist/shared/service-id.js.map +1 -0
  166. package/dist/shared/tests/paths.test.d.ts +2 -0
  167. package/dist/shared/tests/paths.test.d.ts.map +1 -0
  168. package/dist/shared/tests/paths.test.js +111 -0
  169. package/dist/shared/tests/paths.test.js.map +1 -0
  170. package/dist/shared/tests/refs.test.d.ts +2 -0
  171. package/dist/shared/tests/refs.test.d.ts.map +1 -0
  172. package/dist/shared/tests/refs.test.js +104 -0
  173. package/dist/shared/tests/refs.test.js.map +1 -0
  174. package/dist/shared/types/domain.d.ts +14 -0
  175. package/dist/shared/types/domain.d.ts.map +1 -1
  176. package/dist/shared/types/federation.d.ts +60 -0
  177. package/dist/shared/types/federation.d.ts.map +1 -0
  178. package/dist/shared/types/federation.js +12 -0
  179. package/dist/shared/types/federation.js.map +1 -0
  180. package/dist/version.d.ts +4 -0
  181. package/dist/version.d.ts.map +1 -0
  182. package/dist/version.js +15 -0
  183. package/dist/version.js.map +1 -0
  184. package/package.json +8 -5
  185. package/tools/dkk/claude/agents/dkk-domain-reviewer.md +69 -0
  186. package/tools/dkk/claude/commands/dkk-adr.md +11 -0
  187. package/tools/dkk/claude/commands/dkk-impact.md +34 -0
  188. package/tools/dkk/claude/commands/dkk-implement.md +12 -0
  189. package/tools/dkk/claude/commands/dkk-prime.md +6 -0
  190. package/tools/dkk/claude/commands/dkk-review.md +12 -0
  191. package/tools/dkk/claude/commands/dkk-story.md +12 -0
  192. package/tools/dkk/claude/hooks/post-edit-validate.mjs +68 -0
  193. package/tools/dkk/claude/hooks/pre-edit-block-generated.mjs +39 -0
  194. package/tools/dkk/claude/hooks/session-start-prime.mjs +20 -0
  195. package/tools/dkk/claude/hooks/stop-validate.mjs +67 -0
  196. package/tools/dkk/claude/settings.json +62 -0
  197. package/tools/dkk/claude/skills/dkk-adr-author/SKILL.md +54 -0
  198. package/tools/dkk/claude/skills/dkk-flow-implementer/SKILL.md +51 -0
  199. package/tools/dkk/claude/skills/dkk-story-analyst/SKILL.md +108 -0
  200. package/tools/dkk/schema/actors.schema.json +1 -1
  201. package/tools/dkk/schema/adr-frontmatter.schema.json +4 -4
  202. package/tools/dkk/schema/aggregate.schema.json +1 -1
  203. package/tools/dkk/schema/command.schema.json +1 -1
  204. package/tools/dkk/schema/event.schema.json +1 -1
  205. package/tools/dkk/schema/federation.schema.json +71 -0
  206. package/tools/dkk/schema/glossary.schema.json +1 -1
  207. package/tools/dkk/schema/index.schema.json +2 -2
  208. package/tools/dkk/schema/policy.schema.json +1 -1
  209. package/tools/dkk/schema/read-model.schema.json +1 -1
  210. package/tools/dkk/schema/service.schema.json +30 -0
@@ -0,0 +1,182 @@
1
+ /**
2
+ * Reference parsing — single source of truth for DKK item-id grammar.
3
+ *
4
+ * IDs identify domain items, actors, ADRs, flows, and contexts. The
5
+ * grammar is additive: an optional `<service>:` prefix may be attached
6
+ * to any id to federate it across repos. Bare refs stay local-only.
7
+ *
8
+ * Forms:
9
+ * <ctx>.<Name> → context-scoped item
10
+ * actor.<Name> → actor
11
+ * adr-NNNN → ADR
12
+ * flow.<Name> → cross-context flow
13
+ * context.<name> → bounded context itself
14
+ * <service>:<any of above> → federated form
15
+ */
16
+ /** Kebab-case service / context identifier. */
17
+ const KEBAB = /^[a-z][a-z0-9-]*$/;
18
+ /** PascalCase item name (events, commands, etc.). */
19
+ const PASCAL = /^[A-Za-z][A-Za-z0-9]*$/;
20
+ /** ADR id pattern (`adr-NNNN`). */
21
+ const ADR_ID = /^adr-\d{4}$/;
22
+ /**
23
+ * Parse a ref string into its structured form. Returns `null` for
24
+ * inputs that do not match any of the five shapes.
25
+ *
26
+ * @example
27
+ * parseRef("ordering.OrderPlaced")
28
+ * // → { kind: "item", context: "ordering", name: "OrderPlaced" }
29
+ *
30
+ * parseRef("payments:billing.PaymentCaptured")
31
+ * // → { kind: "item", service: "payments", context: "billing", name: "PaymentCaptured" }
32
+ *
33
+ * parseRef("adr-0001")
34
+ * // → { kind: "adr", id: "adr-0001" }
35
+ *
36
+ * parseRef("ordering:adr-0007")
37
+ * // → { kind: "adr", service: "ordering", id: "adr-0007" }
38
+ */
39
+ export function parseRef(s) {
40
+ if (typeof s !== "string" || s.length === 0)
41
+ return null;
42
+ // Peel off optional service prefix.
43
+ let service;
44
+ let body = s;
45
+ const colon = s.indexOf(":");
46
+ if (colon > 0) {
47
+ const svc = s.slice(0, colon);
48
+ if (!KEBAB.test(svc))
49
+ return null;
50
+ service = svc;
51
+ body = s.slice(colon + 1);
52
+ if (body.length === 0)
53
+ return null;
54
+ }
55
+ // ADR: "adr-NNNN"
56
+ if (ADR_ID.test(body)) {
57
+ return { kind: "adr", service, id: body };
58
+ }
59
+ // Special-prefix forms: "actor.X", "flow.X", "context.X"
60
+ if (body.startsWith("actor.")) {
61
+ const name = body.slice("actor.".length);
62
+ if (!PASCAL.test(name))
63
+ return null;
64
+ return { kind: "actor", service, name };
65
+ }
66
+ if (body.startsWith("flow.")) {
67
+ const name = body.slice("flow.".length);
68
+ if (name.length === 0)
69
+ return null;
70
+ return { kind: "flow", service, name };
71
+ }
72
+ if (body.startsWith("context.")) {
73
+ const name = body.slice("context.".length);
74
+ if (!KEBAB.test(name))
75
+ return null;
76
+ return { kind: "context", service, name };
77
+ }
78
+ // Generic context-scoped item: "<ctx>.<Name>"
79
+ const dot = body.indexOf(".");
80
+ if (dot > 0) {
81
+ const ctx = body.slice(0, dot);
82
+ const name = body.slice(dot + 1);
83
+ if (KEBAB.test(ctx) && PASCAL.test(name)) {
84
+ return { kind: "item", service, context: ctx, name };
85
+ }
86
+ }
87
+ return null;
88
+ }
89
+ /**
90
+ * Qualify a bare-or-federated item ref into a canonical id form.
91
+ *
92
+ * Three input shapes are handled:
93
+ * - Author-qualified federated form (`<svc>:<ctx>.<Name>`) → kept as-is,
94
+ * marked foreign whenever it differs from `walkPrefix`.
95
+ * - Author-qualified context form (`<ctx>.<Name>`, no service) →
96
+ * gets `walkPrefix` applied so peer walks namespace it correctly.
97
+ * - Bare PascalCase name (`Name`) → resolved as a name in
98
+ * `currentContext`, then prefixed with `walkPrefix`.
99
+ *
100
+ * `walkPrefix` is `""` for local walks and `"<peerName>:"` for peer
101
+ * walks. The function leaves any already-prefixed ref untouched so
102
+ * a peer's own author-written federated refs survive the prefix pass.
103
+ */
104
+ export function qualifyItemRef(raw, walkPrefix, currentContext) {
105
+ const parsed = parseRef(raw);
106
+ if (parsed?.kind === "item" && parsed.service) {
107
+ // Author-qualified federated form: `<svc>:<ctx>.<Name>`.
108
+ return {
109
+ id: `${parsed.service}:${parsed.context}.${parsed.name}`,
110
+ context: parsed.context,
111
+ name: parsed.name,
112
+ isForeign: walkPrefix !== `${parsed.service}:`,
113
+ };
114
+ }
115
+ if (parsed?.kind === "item") {
116
+ // Author-qualified context form (`<ctx>.<Name>`, no service).
117
+ return {
118
+ id: `${walkPrefix}${parsed.context}.${parsed.name}`,
119
+ context: parsed.context,
120
+ name: parsed.name,
121
+ isForeign: false,
122
+ };
123
+ }
124
+ // Bare name fallback (`OrderPlaced` in YAML inter-item refs such as
125
+ // raised_by, handles.commands, when.events, …).
126
+ if (raw.includes(":")) {
127
+ // Author wrote a colon but it didn't parse as `<svc>:<ctx>.<Name>`.
128
+ // Leave as-is so the caller can surface a clear "malformed" error
129
+ // elsewhere; treat as foreign so the prefix isn't applied.
130
+ return { id: raw, name: raw, isForeign: true };
131
+ }
132
+ return {
133
+ id: `${walkPrefix}${currentContext}.${raw}`,
134
+ context: currentContext,
135
+ name: raw,
136
+ isForeign: false,
137
+ };
138
+ }
139
+ /**
140
+ * Qualify a bare-or-federated actor ref. Actor ids use the
141
+ * `actor.<Name>` form (no context). Federated form is
142
+ * `<service>:actor.<Name>`. Bare YAML form is just `<Name>`.
143
+ */
144
+ export function qualifyActorRef(raw, walkPrefix) {
145
+ const parsed = parseRef(raw);
146
+ if (parsed?.kind === "actor" && parsed.service) {
147
+ return {
148
+ id: `${parsed.service}:actor.${parsed.name}`,
149
+ name: parsed.name,
150
+ isForeign: walkPrefix !== `${parsed.service}:`,
151
+ };
152
+ }
153
+ if (parsed?.kind === "actor") {
154
+ return {
155
+ id: `${walkPrefix}actor.${parsed.name}`,
156
+ name: parsed.name,
157
+ isForeign: false,
158
+ };
159
+ }
160
+ // Bare PascalCase actor name (the dominant case in YAML).
161
+ if (raw.includes(":")) {
162
+ return { id: raw, name: raw, isForeign: true };
163
+ }
164
+ return { id: `${walkPrefix}actor.${raw}`, name: raw, isForeign: false };
165
+ }
166
+ /** Serialize a {@link ParsedRef} back into its canonical string form. */
167
+ export function formatRef(r) {
168
+ const prefix = r.service ? `${r.service}:` : "";
169
+ switch (r.kind) {
170
+ case "item":
171
+ return `${prefix}${r.context}.${r.name}`;
172
+ case "adr":
173
+ return `${prefix}${r.id}`;
174
+ case "actor":
175
+ return `${prefix}actor.${r.name}`;
176
+ case "flow":
177
+ return `${prefix}flow.${r.name}`;
178
+ case "context":
179
+ return `${prefix}context.${r.name}`;
180
+ }
181
+ }
182
+ //# sourceMappingURL=refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.js","sourceRoot":"","sources":["../../src/shared/refs.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,+CAA+C;AAC/C,MAAM,KAAK,GAAG,mBAAmB,CAAC;AAClC,qDAAqD;AACrD,MAAM,MAAM,GAAG,wBAAwB,CAAC;AACxC,mCAAmC;AACnC,MAAM,MAAM,GAAG,aAAa,CAAC;AAU7B;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,QAAQ,CAAC,CAAS;IAChC,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEzD,oCAAoC;IACpC,IAAI,OAA2B,CAAC;IAChC,IAAI,IAAI,GAAG,CAAC,CAAC;IACb,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;QACd,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QAClC,OAAO,GAAG,GAAG,CAAC;QACd,IAAI,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IACrC,CAAC;IAED,kBAAkB;IAClB,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,yDAAyD;IACzD,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC1C,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACxC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IACzC,CAAC;IACD,IAAI,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;IAC5C,CAAC;IAED,8CAA8C;IAC9C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;IAC9B,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;QACjC,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvD,CAAC;IACH,CAAC;IAED,OAAO,IAAI,CAAC;AACd,CAAC;AAkBD;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,cAAc,CAC5B,GAAW,EACX,UAAkB,EAClB,cAAsB;IAEtB,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC9C,yDAAyD;QACzD,OAAO;YACL,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE;YACxD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,UAAU,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG;SAC/C,CAAC;IACJ,CAAC;IAED,IAAI,MAAM,EAAE,IAAI,KAAK,MAAM,EAAE,CAAC;QAC5B,8DAA8D;QAC9D,OAAO;YACL,EAAE,EAAE,GAAG,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,EAAE;YACnD,OAAO,EAAE,MAAM,CAAC,OAAO;YACvB,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,oEAAoE;IACpE,gDAAgD;IAChD,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,oEAAoE;QACpE,kEAAkE;QAClE,2DAA2D;QAC3D,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,OAAO;QACL,EAAE,EAAE,GAAG,UAAU,GAAG,cAAc,IAAI,GAAG,EAAE;QAC3C,OAAO,EAAE,cAAc;QACvB,IAAI,EAAE,GAAG;QACT,SAAS,EAAE,KAAK;KACjB,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,UAAkB;IAC7D,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAE7B,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC/C,OAAO;YACL,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,IAAI,EAAE;YAC5C,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,UAAU,KAAK,GAAG,MAAM,CAAC,OAAO,GAAG;SAC/C,CAAC;IACJ,CAAC;IACD,IAAI,MAAM,EAAE,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,OAAO;YACL,EAAE,EAAE,GAAG,UAAU,SAAS,MAAM,CAAC,IAAI,EAAE;YACvC,IAAI,EAAE,MAAM,CAAC,IAAI;YACjB,SAAS,EAAE,KAAK;SACjB,CAAC;IACJ,CAAC;IAED,0DAA0D;IAC1D,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QACtB,OAAO,EAAE,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;IACjD,CAAC;IACD,OAAO,EAAE,EAAE,EAAE,GAAG,UAAU,SAAS,GAAG,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;AAC1E,CAAC;AAED,yEAAyE;AACzE,MAAM,UAAU,SAAS,CAAC,CAAY;IACpC,MAAM,MAAM,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAChD,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACf,KAAK,MAAM;YACT,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3C,KAAK,KAAK;YACR,OAAO,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC;QAC5B,KAAK,OAAO;YACV,OAAO,GAAG,MAAM,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QACpC,KAAK,MAAM;YACT,OAAO,GAAG,MAAM,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;QACnC,KAAK,SAAS;YACZ,OAAO,GAAG,MAAM,WAAW,CAAC,CAAC,IAAI,EAAE,CAAC;IACxC,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ServiceManifest } from "./types/federation.js";
2
+ /**
3
+ * Load `.dkk/service.yml` from the given root (or auto-detected root).
4
+ * Returns the parsed manifest, or `null` if the file does not exist.
5
+ *
6
+ * Throws when the file exists but does not conform to
7
+ * `service.schema.json` — the message includes Ajv's error list so
8
+ * the user can fix the manifest directly.
9
+ */
10
+ export declare function loadServiceId(root?: string): ServiceManifest | null;
11
+ //# sourceMappingURL=service-id.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-id.d.ts","sourceRoot":"","sources":["../../src/shared/service-id.ts"],"names":[],"mappings":"AAiBA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AA0B7D;;;;;;;GAOG;AACH,wBAAgB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CAkBnE"}
@@ -0,0 +1,64 @@
1
+ /**
2
+ * Service identity loader.
3
+ *
4
+ * Reads `.dkk/service.yml` (if present) and returns the parsed
5
+ * `ServiceManifest`. Returns `null` for legacy repos that haven't
6
+ * adopted federation — the rest of the loader/validator stack treats
7
+ * `model.service === undefined` as "unfederated, behave as before".
8
+ *
9
+ * Validates against `tools/dkk/schema/service.schema.json` at load
10
+ * time so a malformed manifest produces a clean error up front
11
+ * instead of crashing later in the validator/CLI.
12
+ */
13
+ import { readFileSync, existsSync } from "node:fs";
14
+ import { createRequire } from "node:module";
15
+ import { join } from "node:path";
16
+ import { parseYaml } from "./yaml.js";
17
+ import { serviceFile, schemaDir } from "./paths.js";
18
+ // ajv is a CJS package — use createRequire for ESM interop. Matches
19
+ // the pattern used in validator.ts and tests.
20
+ const require = createRequire(import.meta.url);
21
+ const Ajv = require("ajv").default;
22
+ const addFormats = require("ajv-formats").default;
23
+ /** Cached Ajv instance with all DKK schemas loaded. */
24
+ let cachedAjv = null;
25
+ function getAjv() {
26
+ if (cachedAjv)
27
+ return cachedAjv;
28
+ const ajv = new Ajv({ allErrors: true, strict: true });
29
+ addFormats(ajv);
30
+ // Load all schemas so cross-refs ($ref) resolve.
31
+ const dir = schemaDir();
32
+ const fs = require("node:fs");
33
+ for (const f of fs.readdirSync(dir).filter((n) => n.endsWith(".schema.json"))) {
34
+ const schema = JSON.parse(fs.readFileSync(join(dir, f), "utf-8"));
35
+ ajv.addSchema(schema, schema.$id);
36
+ }
37
+ cachedAjv = ajv;
38
+ return ajv;
39
+ }
40
+ /**
41
+ * Load `.dkk/service.yml` from the given root (or auto-detected root).
42
+ * Returns the parsed manifest, or `null` if the file does not exist.
43
+ *
44
+ * Throws when the file exists but does not conform to
45
+ * `service.schema.json` — the message includes Ajv's error list so
46
+ * the user can fix the manifest directly.
47
+ */
48
+ export function loadServiceId(root) {
49
+ const path = serviceFile(root);
50
+ if (!existsSync(path))
51
+ return null;
52
+ const text = readFileSync(path, "utf-8");
53
+ const parsed = parseYaml(text);
54
+ const ajv = getAjv();
55
+ const valid = ajv.validate("service.schema.json", parsed);
56
+ if (!valid) {
57
+ const details = (ajv.errors ?? [])
58
+ .map((e) => ` - ${e.instancePath || "/"}: ${e.message ?? "invalid"}`)
59
+ .join("\n");
60
+ throw new Error(`Invalid ${path}:\n${details}\n\nExpected shape: { name: kebab-case, exports: string[], description?: string }`);
61
+ }
62
+ return parsed;
63
+ }
64
+ //# sourceMappingURL=service-id.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"service-id.js","sourceRoot":"","sources":["../../src/shared/service-id.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAGpD,oEAAoE;AACpE,8CAA8C;AAC9C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,OAAuC,CAAC;AACnE,MAAM,UAAU,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC,OAA+C,CAAC;AAE1F,uDAAuD;AACvD,IAAI,SAAS,GAAoC,IAAI,CAAC;AAEtD,SAAS,MAAM;IACb,IAAI,SAAS;QAAE,OAAO,SAAS,CAAC;IAChC,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC;IACvD,UAAU,CAAC,GAAG,CAAC,CAAC;IAChB,iDAAiD;IACjD,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,MAAM,EAAE,GAAG,OAAO,CAAC,SAAS,CAA6B,CAAC;IAC1D,KAAK,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC;QACtF,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IACD,SAAS,GAAG,GAAG,CAAC;IAChB,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,aAAa,CAAC,IAAa;IACzC,MAAM,IAAI,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,SAAS,CAAkB,IAAI,CAAC,CAAC;IAEhD,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IACrB,MAAM,KAAK,GAAG,GAAG,CAAC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAC1D,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;aAC/B,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,YAAY,IAAI,GAAG,KAAK,CAAC,CAAC,OAAO,IAAI,SAAS,EAAE,CAAC;aACrE,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,WAAW,IAAI,MAAM,OAAO,mFAAmF,CAChH,CAAC;IACJ,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=paths.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,111 @@
1
+ /**
2
+ * Tests for paths.ts — primarily the walk-up `repoRoot()` behaviour
3
+ * introduced for monorepo / sub-directory usage.
4
+ */
5
+ import { mkdirSync, rmSync, realpathSync } from "node:fs";
6
+ import { join } from "node:path";
7
+ import { tmpdir } from "node:os";
8
+ import { repoRoot, findDkkRoot, serviceFile, federationFile, importedServiceDir } from "../paths.js";
9
+ let passed = 0;
10
+ let failed = 0;
11
+ function assert(label, condition, detail) {
12
+ if (condition) {
13
+ console.log(` OK: ${label}`);
14
+ passed++;
15
+ }
16
+ else {
17
+ console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
18
+ failed++;
19
+ }
20
+ }
21
+ // Save and restore cwd / env around each scenario.
22
+ const originalCwd = process.cwd();
23
+ const originalDisableWalkup = process.env.DKK_DISABLE_WALKUP;
24
+ function withCwd(dir, fn) {
25
+ process.chdir(dir);
26
+ try {
27
+ return fn();
28
+ }
29
+ finally {
30
+ process.chdir(originalCwd);
31
+ }
32
+ }
33
+ // ── Setup fixture: nested service repo under a parent ──────────────────
34
+ // Layout:
35
+ // <TMP>/repo/.dkk/ ← the real repo root
36
+ // <TMP>/repo/services/foo/ ← service subdir, no .dkk
37
+ // <TMP>/repo/services/foo/src/ ← deeper subdir
38
+ // <TMP>/elsewhere/ ← unrelated dir, no .dkk anywhere
39
+ const RAW_TMP = join(tmpdir(), `dkk-paths-${Date.now()}`);
40
+ mkdirSync(RAW_TMP, { recursive: true });
41
+ // macOS resolves /tmp -> /private/tmp at chdir; mirror that so string
42
+ // comparisons line up with process.cwd().
43
+ const TMP = realpathSync(RAW_TMP);
44
+ const REPO = join(TMP, "repo");
45
+ const SERVICE = join(REPO, "services", "foo");
46
+ const DEEP = join(SERVICE, "src");
47
+ const ELSEWHERE = join(TMP, "elsewhere");
48
+ mkdirSync(join(REPO, ".dkk"), { recursive: true });
49
+ mkdirSync(DEEP, { recursive: true });
50
+ mkdirSync(ELSEWHERE, { recursive: true });
51
+ try {
52
+ // ── repoRoot — at the repo with .dkk ──────────────────────────────────
53
+ console.log("\n=== repoRoot() at repo with .dkk ===");
54
+ withCwd(REPO, () => {
55
+ delete process.env.DKK_DISABLE_WALKUP;
56
+ assert("cwd at root with .dkk returns cwd", repoRoot() === REPO);
57
+ });
58
+ // ── repoRoot — walk-up from a sub-directory ───────────────────────────
59
+ console.log("\n=== repoRoot() walks up from sub-dir ===");
60
+ withCwd(SERVICE, () => {
61
+ delete process.env.DKK_DISABLE_WALKUP;
62
+ assert("from services/foo finds repo .dkk", repoRoot() === REPO);
63
+ });
64
+ withCwd(DEEP, () => {
65
+ delete process.env.DKK_DISABLE_WALKUP;
66
+ assert("from services/foo/src finds repo .dkk", repoRoot() === REPO);
67
+ });
68
+ // ── Explicit --root override skips walk-up ────────────────────────────
69
+ console.log("\n=== explicit --root override ===");
70
+ withCwd(DEEP, () => {
71
+ delete process.env.DKK_DISABLE_WALKUP;
72
+ assert("explicit override is used verbatim, no walk-up", repoRoot(ELSEWHERE) === ELSEWHERE);
73
+ });
74
+ // ── DKK_DISABLE_WALKUP=1 disables walk-up ─────────────────────────────
75
+ console.log("\n=== DKK_DISABLE_WALKUP=1 ===");
76
+ withCwd(DEEP, () => {
77
+ process.env.DKK_DISABLE_WALKUP = "1";
78
+ assert("walk-up disabled returns cwd as-is", repoRoot() === DEEP);
79
+ delete process.env.DKK_DISABLE_WALKUP;
80
+ });
81
+ // ── No .dkk anywhere — fall back to cwd ───────────────────────────────
82
+ console.log("\n=== no .dkk anywhere, fallback to cwd ===");
83
+ withCwd(ELSEWHERE, () => {
84
+ delete process.env.DKK_DISABLE_WALKUP;
85
+ assert("fallback to cwd when no .dkk on walk-up path", repoRoot() === ELSEWHERE);
86
+ });
87
+ // ── Federation path helpers compose correctly ─────────────────────────
88
+ console.log("\n=== federation path helpers ===");
89
+ assert("serviceFile", serviceFile(REPO) === join(REPO, ".dkk", "service.yml"));
90
+ assert("federationFile", federationFile(REPO) === join(REPO, ".dkk", "federation.yml"));
91
+ assert("importedServiceDir", importedServiceDir("payments", REPO) === join(REPO, ".dkk", "imports", "payments"));
92
+ // ── findDkkRoot — direct walk-up search ───────────────────────────────
93
+ console.log("\n=== findDkkRoot ===");
94
+ assert("findDkkRoot at repo returns repo", findDkkRoot(REPO) === REPO);
95
+ assert("findDkkRoot from sub-dir returns repo", findDkkRoot(SERVICE) === REPO);
96
+ assert("findDkkRoot from deep sub-dir returns repo", findDkkRoot(DEEP) === REPO);
97
+ assert("findDkkRoot from dir with no .dkk returns null", findDkkRoot(ELSEWHERE) === null);
98
+ }
99
+ finally {
100
+ rmSync(TMP, { recursive: true, force: true });
101
+ if (originalDisableWalkup === undefined) {
102
+ delete process.env.DKK_DISABLE_WALKUP;
103
+ }
104
+ else {
105
+ process.env.DKK_DISABLE_WALKUP = originalDisableWalkup;
106
+ }
107
+ }
108
+ console.log(`\n${passed} passed, ${failed} failed`);
109
+ if (failed > 0)
110
+ process.exit(1);
111
+ //# sourceMappingURL=paths.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.test.js","sourceRoot":"","sources":["../../../src/shared/tests/paths.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=refs.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.test.d.ts","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,104 @@
1
+ /**
2
+ * Tests for the ref-parsing utility.
3
+ *
4
+ * Covers all five id shapes (item, adr, actor, flow, context), the
5
+ * optional service prefix on each, and a range of invalid inputs.
6
+ */
7
+ import { parseRef, formatRef } from "../refs.js";
8
+ let passed = 0;
9
+ let failed = 0;
10
+ function assert(label, condition, detail) {
11
+ if (condition) {
12
+ console.log(` OK: ${label}`);
13
+ passed++;
14
+ }
15
+ else {
16
+ console.error(`FAIL: ${label}${detail ? ` — ${detail}` : ""}`);
17
+ failed++;
18
+ }
19
+ }
20
+ function assertEqual(label, actual, expected) {
21
+ const ok = JSON.stringify(actual) === JSON.stringify(expected);
22
+ assert(label, ok, ok ? undefined : `expected ${JSON.stringify(expected)}, got ${JSON.stringify(actual)}`);
23
+ }
24
+ // ── Bare refs (no service prefix) ──────────────────────────────────────
25
+ console.log("\n=== bare refs ===");
26
+ assertEqual("item", parseRef("ordering.OrderPlaced"), {
27
+ kind: "item",
28
+ context: "ordering",
29
+ name: "OrderPlaced",
30
+ });
31
+ assertEqual("item with multi-word context", parseRef("order-management.PlaceOrder"), {
32
+ kind: "item",
33
+ context: "order-management",
34
+ name: "PlaceOrder",
35
+ });
36
+ assertEqual("adr", parseRef("adr-0001"), { kind: "adr", id: "adr-0001" });
37
+ assertEqual("actor", parseRef("actor.Customer"), { kind: "actor", name: "Customer" });
38
+ assertEqual("flow", parseRef("flow.OrderFulfillment"), { kind: "flow", name: "OrderFulfillment" });
39
+ assertEqual("context", parseRef("context.ordering"), { kind: "context", name: "ordering" });
40
+ // ── Service-prefixed refs ──────────────────────────────────────────────
41
+ console.log("\n=== service-prefixed refs ===");
42
+ assertEqual("service-prefixed item", parseRef("payments:billing.PaymentCaptured"), {
43
+ kind: "item",
44
+ service: "payments",
45
+ context: "billing",
46
+ name: "PaymentCaptured",
47
+ });
48
+ assertEqual("service-prefixed adr", parseRef("ordering:adr-0007"), {
49
+ kind: "adr",
50
+ service: "ordering",
51
+ id: "adr-0007",
52
+ });
53
+ assertEqual("service-prefixed actor", parseRef("payments:actor.PaymentGateway"), {
54
+ kind: "actor",
55
+ service: "payments",
56
+ name: "PaymentGateway",
57
+ });
58
+ assertEqual("service-prefixed flow", parseRef("ordering:flow.OrderFulfillment"), {
59
+ kind: "flow",
60
+ service: "ordering",
61
+ name: "OrderFulfillment",
62
+ });
63
+ assertEqual("service-prefixed context", parseRef("ordering:context.ordering"), {
64
+ kind: "context",
65
+ service: "ordering",
66
+ name: "ordering",
67
+ });
68
+ // ── Invalid inputs ─────────────────────────────────────────────────────
69
+ console.log("\n=== invalid inputs ===");
70
+ assert("empty string", parseRef("") === null);
71
+ assert("just a colon", parseRef(":") === null);
72
+ assert("trailing colon", parseRef("payments:") === null);
73
+ assert("PascalCase service prefix", parseRef("Payments:billing.X") === null);
74
+ assert("digits-only context", parseRef("123.PlaceOrder") === null);
75
+ assert("lowercase item name", parseRef("ordering.placeOrder") !== null); // PascalCase pattern allows leading lowercase per existing schemas
76
+ assert("snake_case context", parseRef("order_mgmt.X") === null);
77
+ assert("bad adr format", parseRef("adr-99") === null);
78
+ assert("adr with extra chars", parseRef("adr-0001x") === null);
79
+ assert("actor with bad name", parseRef("actor.bad-name") === null);
80
+ assert("flow with empty name", parseRef("flow.") === null);
81
+ assert("context with PascalCase", parseRef("context.Ordering") === null);
82
+ assert("no dot in item", parseRef("ordering") === null);
83
+ assert("dot at start", parseRef(".Foo") === null);
84
+ // ── formatRef round-trip ───────────────────────────────────────────────
85
+ console.log("\n=== formatRef round-trip ===");
86
+ const samples = [
87
+ "ordering.OrderPlaced",
88
+ "payments:billing.PaymentCaptured",
89
+ "adr-0001",
90
+ "ordering:adr-0007",
91
+ "actor.Customer",
92
+ "payments:actor.PaymentGateway",
93
+ "flow.OrderFulfillment",
94
+ "context.ordering",
95
+ ];
96
+ for (const s of samples) {
97
+ const parsed = parseRef(s);
98
+ assert(`round-trip ${s}`, parsed !== null && formatRef(parsed) === s);
99
+ }
100
+ // ── Summary ────────────────────────────────────────────────────────────
101
+ console.log(`\n${passed} passed, ${failed} failed`);
102
+ if (failed > 0)
103
+ process.exit(1);
104
+ //# sourceMappingURL=refs.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"refs.test.js","sourceRoot":"","sources":["../../../src/shared/tests/refs.test.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEjD,IAAI,MAAM,GAAG,CAAC,CAAC;AACf,IAAI,MAAM,GAAG,CAAC,CAAC;AAEf,SAAS,MAAM,CAAC,KAAa,EAAE,SAAkB,EAAE,MAAe;IAChE,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,SAAS,KAAK,EAAE,CAAC,CAAC;QAC9B,MAAM,EAAE,CAAC;IACX,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,KAAK,CAAC,SAAS,KAAK,GAAG,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/D,MAAM,EAAE,CAAC;IACX,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAI,KAAa,EAAE,MAAS,EAAE,QAAW;IAC3D,MAAM,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC/D,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,YAAY,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AAC5G,CAAC;AAED,0EAA0E;AAC1E,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;AAEnC,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,sBAAsB,CAAC,EAAE;IACpD,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,aAAa;CACpB,CAAC,CAAC;AAEH,WAAW,CAAC,8BAA8B,EAAE,QAAQ,CAAC,6BAA6B,CAAC,EAAE;IACnF,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,kBAAkB;IAC3B,IAAI,EAAE,YAAY;CACnB,CAAC,CAAC;AAEH,WAAW,CAAC,KAAK,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC;AAE1E,WAAW,CAAC,OAAO,EAAE,QAAQ,CAAC,gBAAgB,CAAC,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAEtF,WAAW,CAAC,MAAM,EAAE,QAAQ,CAAC,uBAAuB,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,kBAAkB,EAAE,CAAC,CAAC;AAEnG,WAAW,CAAC,SAAS,EAAE,QAAQ,CAAC,kBAAkB,CAAC,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAE5F,0EAA0E;AAC1E,OAAO,CAAC,GAAG,CAAC,iCAAiC,CAAC,CAAC;AAE/C,WAAW,CAAC,uBAAuB,EAAE,QAAQ,CAAC,kCAAkC,CAAC,EAAE;IACjF,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,UAAU;IACnB,OAAO,EAAE,SAAS;IAClB,IAAI,EAAE,iBAAiB;CACxB,CAAC,CAAC;AAEH,WAAW,CAAC,sBAAsB,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE;IACjE,IAAI,EAAE,KAAK;IACX,OAAO,EAAE,UAAU;IACnB,EAAE,EAAE,UAAU;CACf,CAAC,CAAC;AAEH,WAAW,CAAC,wBAAwB,EAAE,QAAQ,CAAC,+BAA+B,CAAC,EAAE;IAC/E,IAAI,EAAE,OAAO;IACb,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,gBAAgB;CACvB,CAAC,CAAC;AAEH,WAAW,CAAC,uBAAuB,EAAE,QAAQ,CAAC,gCAAgC,CAAC,EAAE;IAC/E,IAAI,EAAE,MAAM;IACZ,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,kBAAkB;CACzB,CAAC,CAAC;AAEH,WAAW,CAAC,0BAA0B,EAAE,QAAQ,CAAC,2BAA2B,CAAC,EAAE;IAC7E,IAAI,EAAE,SAAS;IACf,OAAO,EAAE,UAAU;IACnB,IAAI,EAAE,UAAU;CACjB,CAAC,CAAC;AAEH,0EAA0E;AAC1E,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;AAExC,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC;AAC9C,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/C,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;AACzD,MAAM,CAAC,2BAA2B,EAAE,QAAQ,CAAC,oBAAoB,CAAC,KAAK,IAAI,CAAC,CAAC;AAC7E,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,CAAC;AACnE,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC,qBAAqB,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,mEAAmE;AAC5I,MAAM,CAAC,oBAAoB,EAAE,QAAQ,CAAC,cAAc,CAAC,KAAK,IAAI,CAAC,CAAC;AAChE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,KAAK,IAAI,CAAC,CAAC;AACtD,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;AAC/D,MAAM,CAAC,qBAAqB,EAAE,QAAQ,CAAC,gBAAgB,CAAC,KAAK,IAAI,CAAC,CAAC;AACnE,MAAM,CAAC,sBAAsB,EAAE,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,CAAC;AAC3D,MAAM,CAAC,yBAAyB,EAAE,QAAQ,CAAC,kBAAkB,CAAC,KAAK,IAAI,CAAC,CAAC;AACzE,MAAM,CAAC,gBAAgB,EAAE,QAAQ,CAAC,UAAU,CAAC,KAAK,IAAI,CAAC,CAAC;AACxD,MAAM,CAAC,cAAc,EAAE,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,CAAC;AAElD,0EAA0E;AAC1E,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;AAE9C,MAAM,OAAO,GAAG;IACd,sBAAsB;IACtB,kCAAkC;IAClC,UAAU;IACV,mBAAmB;IACnB,gBAAgB;IAChB,+BAA+B;IAC/B,uBAAuB;IACvB,kBAAkB;CACnB,CAAC;AAEF,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;IACxB,MAAM,MAAM,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;IAC3B,MAAM,CAAC,cAAc,CAAC,EAAE,EAAE,MAAM,KAAK,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AACxE,CAAC;AAGD,0EAA0E;AAC1E,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,YAAY,MAAM,SAAS,CAAC,CAAC;AACpD,IAAI,MAAM,GAAG,CAAC;IAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC"}
@@ -246,5 +246,19 @@ export interface DomainModel {
246
246
  contexts: Map<string, DomainContext>;
247
247
  /** All ADR records keyed by ADR id. */
248
248
  adrs: Map<string, AdrRecord>;
249
+ /**
250
+ * Service identity for this repo (federation). Present when a
251
+ * `.dkk/service.yml` was found; otherwise `undefined`. Legacy
252
+ * unfederated repos keep working unchanged.
253
+ */
254
+ service?: import("./federation.js").ServiceManifest;
255
+ /**
256
+ * Peer service models loaded from `.dkk/federation.yml`. Keyed by
257
+ * peer service name. Each value is a fully-loaded `DomainModel`
258
+ * (one level deep — peer's own peers are not transitively followed).
259
+ * Present only when federation is configured and at least one peer
260
+ * was reachable.
261
+ */
262
+ peers?: Map<string, DomainModel>;
249
263
  }
250
264
  //# sourceMappingURL=domain.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,mDAAmD;AACnD,MAAM,WAAW,KAAK;IACpB,kBAAkB;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,2CAA2C;IAC3C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,4CAA4C;AAC5C,MAAM,MAAM,MAAM,GAAG,OAAO,MAAM,EAAE,CAAC;AAErC,kEAAkE;AAClE,MAAM,WAAW,OAAO;IACtB,wDAAwD;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,8BAA8B;IAC9B,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,+BAA+B;IAC/B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,gCAAgC;IAChC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB;AAED,kFAAkF;AAClF,MAAM,MAAM,SAAS,GAAG,GAAG,MAAM,IAAI,MAAM,EAAE,CAAC;AAI9C,2DAA2D;AAC3D,MAAM,WAAW,aAAa;IAC5B,+BAA+B;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,iCAAiC;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,0EAA0E;AAC1E,MAAM,MAAM,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;AAExD,yDAAyD;AACzD,MAAM,WAAW,KAAK;IACpB,+DAA+D;IAC/D,IAAI,EAAE,MAAM,CAAC;IACb,qBAAqB;IACrB,IAAI,EAAE,SAAS,CAAC;IAChB,gDAAgD;IAChD,WAAW,EAAE,MAAM,CAAC;IACpB,4DAA4D;IAC5D,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,uEAAuE;AACvE,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,KAAK,EAAE,CAAC;CACjB;AAID,sDAAsD;AACtD,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,oDAAoD;IACpD,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,kEAAkE;AAClE,MAAM,WAAW,OAAO;IACtB,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,qDAAqD;IACrD,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,uDAAuD;IACvD,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,wEAAwE;IACxE,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4CAA4C;IAC5C,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,4EAA4E;IAC5E,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,uCAAuC;IACvC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,mEAAmE;AACnE,MAAM,WAAW,MAAM;IACrB,6DAA6D;IAC7D,IAAI,EAAE,MAAM,CAAC;IACb,mDAAmD;IACnD,WAAW,EAAE,MAAM,CAAC;IACpB,kEAAkE;IAClE,IAAI,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC7B,4DAA4D;IAC5D,IAAI,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC/B,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,qEAAqE;IACrE,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAClC,+DAA+D;IAC/D,KAAK,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAC9B,8DAA8D;IAC9D,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID,0DAA0D;AAC1D,MAAM,WAAW,SAAS;IACxB,wDAAwD;IACxD,IAAI,EAAE,MAAM,CAAC;IACb,yCAAyC;IACzC,WAAW,EAAE,MAAM,CAAC;IACpB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC;IACjB,iDAAiD;IACjD,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,gDAAgD;IAChD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID;;;;GAIG;AACH,MAAM,WAAW,eAAe;IAC9B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;CAC5B;AAID,4DAA4D;AAC5D,MAAM,WAAW,aAAa;IAC5B,uDAAuD;IACvD,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,wDAAwD;IACxD,QAAQ,CAAC,EAAE,aAAa,EAAE,CAAC;IAC3B,gDAAgD;IAChD,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC;IACvB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;IACrB,6CAA6C;IAC7C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,sCAAsC;IACtC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IACzB,qDAAqD;IACrD,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;CAC3B;AAID,2DAA2D;AAC3D,MAAM,MAAM,SAAS,GAAG,UAAU,GAAG,UAAU,GAAG,YAAY,GAAG,YAAY,CAAC;AAE9E,gEAAgE;AAChE,MAAM,WAAW,SAAS;IACxB,+CAA+C;IAC/C,EAAE,EAAE,MAAM,CAAC;IACX,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAC;IACd,gCAAgC;IAChC,MAAM,EAAE,SAAS,CAAC;IAClB,iEAAiE;IACjE,IAAI,EAAE,MAAM,CAAC;IACb,+CAA+C;IAC/C,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,6CAA6C;IAC7C,WAAW,CAAC,EAAE,SAAS,EAAE,CAAC;IAC1B,8CAA8C;IAC9C,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,uFAAuF;IACvF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAID,gEAAgE;AAChE,MAAM,WAAW,YAAY;IAC3B,sEAAsE;IACtE,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,6CAA6C;AAC7C,MAAM,MAAM,YAAY,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,YAAY,CAAC;AAEzE,6CAA6C;AAC7C,MAAM,WAAW,QAAQ;IACvB,oDAAoD;IACpD,GAAG,EAAE,SAAS,CAAC;IACf,0CAA0C;IAC1C,IAAI,EAAE,YAAY,CAAC;IACnB,yCAAyC;IACzC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,6DAA6D;AAC7D,MAAM,WAAW,IAAI;IACnB,iBAAiB;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,mCAAmC;IACnC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mEAAmE;IACnE,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,WAAW;IAC1B,mCAAmC;IACnC,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,4DAA4D;IAC5D,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC;CAChB;AAID,gEAAgE;AAChE,MAAM,WAAW,WAAW;IAC1B,8BAA8B;IAC9B,KAAK,EAAE,WAAW,CAAC;IACnB,kBAAkB;IAClB,MAAM,EAAE,KAAK,EAAE,CAAC;IAChB,kDAAkD;IAClD,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACrC,uCAAuC;IACvC,IAAI,EAAE,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;CAC9B"}
1
+ {"version":3,"file":"domain.d.ts","sourceRoot":"","sources":["../../../src/shared/types/domain.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ /**
2
+ * TypeScript interfaces for the multi-repo federation layer.
3
+ *
4
+ * `service.yml` declares this repo's service identity. `federation.yml`
5
+ * lists peer services whose `.dkk/` directories should be loaded
6
+ * alongside the local model (read-only).
7
+ *
8
+ * Aligns with JSON schemas under tools/dkk/schema/service.schema.json
9
+ * and federation.schema.json.
10
+ */
11
+ /** Service identity file (.dkk/service.yml). */
12
+ export interface ServiceManifest {
13
+ /** Kebab-case service identifier (e.g. "ordering"). Globally unique within an org. */
14
+ name: string;
15
+ /** Bounded-context names this service publishes for cross-repo consumption. */
16
+ exports: string[];
17
+ /** Optional human-readable description of the service. */
18
+ description?: string;
19
+ }
20
+ /** Filesystem-path peer source. */
21
+ export interface LocalPeerSource {
22
+ type: "local";
23
+ /** Absolute or repo-root-relative path to the peer's repository root. */
24
+ path: string;
25
+ }
26
+ /** Git-clone peer source (sparse-checkout of `.dkk/`). */
27
+ export interface GitPeerSource {
28
+ type: "git";
29
+ /** Git URL (https / ssh). */
30
+ url: string;
31
+ /** Branch to track. */
32
+ branch: string;
33
+ /** Optional sub-path inside the peer repo where `.dkk/` lives. Defaults to repo root. */
34
+ path?: string;
35
+ }
36
+ /** Discriminated union of supported peer source types. */
37
+ export type PeerSource = LocalPeerSource | GitPeerSource;
38
+ /** A single peer entry in the federation manifest. */
39
+ export interface PeerSpec {
40
+ /** Kebab-case service name (must match the peer's own `service.yml`). */
41
+ name: string;
42
+ /** Where to read the peer's `.dkk/` from. */
43
+ source: PeerSource;
44
+ }
45
+ /** Federation manifest file (.dkk/federation.yml). */
46
+ export interface FederationManifest {
47
+ peers: PeerSpec[];
48
+ }
49
+ /** A single entry in the federation lockfile (pins git SHAs). */
50
+ export interface LockEntry {
51
+ /** Mirrors the manifest entry's source for change detection. */
52
+ source: PeerSource;
53
+ /** Resolved commit SHA at the time of fetch (git sources only). */
54
+ sha?: string;
55
+ /** ISO-8601 timestamp of the fetch. */
56
+ fetchedAt?: string;
57
+ }
58
+ /** Lockfile shape (.dkk/federation.lock.json). */
59
+ export type FederationLock = Record<string, LockEntry>;
60
+ //# sourceMappingURL=federation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"federation.d.ts","sourceRoot":"","sources":["../../../src/shared/types/federation.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,gDAAgD;AAChD,MAAM,WAAW,eAAe;IAC9B,sFAAsF;IACtF,IAAI,EAAE,MAAM,CAAC;IACb,+EAA+E;IAC/E,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,0DAA0D;IAC1D,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,mCAAmC;AACnC,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,OAAO,CAAC;IACd,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;CACd;AAED,0DAA0D;AAC1D,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,KAAK,CAAC;IACZ,6BAA6B;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,uBAAuB;IACvB,MAAM,EAAE,MAAM,CAAC;IACf,yFAAyF;IACzF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,0DAA0D;AAC1D,MAAM,MAAM,UAAU,GAAG,eAAe,GAAG,aAAa,CAAC;AAEzD,sDAAsD;AACtD,MAAM,WAAW,QAAQ;IACvB,yEAAyE;IACzE,IAAI,EAAE,MAAM,CAAC;IACb,6CAA6C;IAC7C,MAAM,EAAE,UAAU,CAAC;CACpB;AAED,sDAAsD;AACtD,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,QAAQ,EAAE,CAAC;CACnB;AAED,iEAAiE;AACjE,MAAM,WAAW,SAAS;IACxB,gEAAgE;IAChE,MAAM,EAAE,UAAU,CAAC;IACnB,mEAAmE;IACnE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,uCAAuC;IACvC,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,kDAAkD;AAClD,MAAM,MAAM,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC"}