@principled/cairn 1.0.0-beta

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 (313) hide show
  1. package/README.md +182 -0
  2. package/dist/analysis/analyzer.d.ts +13 -0
  3. package/dist/analysis/analyzer.d.ts.map +1 -0
  4. package/dist/analysis/analyzer.js +47 -0
  5. package/dist/analysis/analyzer.js.map +1 -0
  6. package/dist/analysis/embedding-provider.d.ts +12 -0
  7. package/dist/analysis/embedding-provider.d.ts.map +1 -0
  8. package/dist/analysis/embedding-provider.js +21 -0
  9. package/dist/analysis/embedding-provider.js.map +1 -0
  10. package/dist/analysis/index.d.ts +4 -0
  11. package/dist/analysis/index.d.ts.map +1 -0
  12. package/dist/analysis/index.js +4 -0
  13. package/dist/analysis/index.js.map +1 -0
  14. package/dist/analysis/stub-provider.d.ts +12 -0
  15. package/dist/analysis/stub-provider.d.ts.map +1 -0
  16. package/dist/analysis/stub-provider.js +30 -0
  17. package/dist/analysis/stub-provider.js.map +1 -0
  18. package/dist/catalog/catalog.d.ts +40 -0
  19. package/dist/catalog/catalog.d.ts.map +1 -0
  20. package/dist/catalog/catalog.js +118 -0
  21. package/dist/catalog/catalog.js.map +1 -0
  22. package/dist/catalog/category-merger.d.ts +25 -0
  23. package/dist/catalog/category-merger.d.ts.map +1 -0
  24. package/dist/catalog/category-merger.js +75 -0
  25. package/dist/catalog/category-merger.js.map +1 -0
  26. package/dist/catalog/index.d.ts +4 -0
  27. package/dist/catalog/index.d.ts.map +1 -0
  28. package/dist/catalog/index.js +4 -0
  29. package/dist/catalog/index.js.map +1 -0
  30. package/dist/catalog/post-merge-validation.d.ts +7 -0
  31. package/dist/catalog/post-merge-validation.d.ts.map +1 -0
  32. package/dist/catalog/post-merge-validation.js +59 -0
  33. package/dist/catalog/post-merge-validation.js.map +1 -0
  34. package/dist/cli/commands/add.d.ts +3 -0
  35. package/dist/cli/commands/add.d.ts.map +1 -0
  36. package/dist/cli/commands/add.js +107 -0
  37. package/dist/cli/commands/add.js.map +1 -0
  38. package/dist/cli/commands/analyze.d.ts +3 -0
  39. package/dist/cli/commands/analyze.d.ts.map +1 -0
  40. package/dist/cli/commands/analyze.js +44 -0
  41. package/dist/cli/commands/analyze.js.map +1 -0
  42. package/dist/cli/commands/diff.d.ts +3 -0
  43. package/dist/cli/commands/diff.d.ts.map +1 -0
  44. package/dist/cli/commands/diff.js +69 -0
  45. package/dist/cli/commands/diff.js.map +1 -0
  46. package/dist/cli/commands/edit.d.ts +3 -0
  47. package/dist/cli/commands/edit.d.ts.map +1 -0
  48. package/dist/cli/commands/edit.js +93 -0
  49. package/dist/cli/commands/edit.js.map +1 -0
  50. package/dist/cli/commands/export.d.ts +3 -0
  51. package/dist/cli/commands/export.d.ts.map +1 -0
  52. package/dist/cli/commands/export.js +46 -0
  53. package/dist/cli/commands/export.js.map +1 -0
  54. package/dist/cli/commands/init.d.ts +3 -0
  55. package/dist/cli/commands/init.d.ts.map +1 -0
  56. package/dist/cli/commands/init.js +21 -0
  57. package/dist/cli/commands/init.js.map +1 -0
  58. package/dist/cli/commands/inspect.d.ts +3 -0
  59. package/dist/cli/commands/inspect.d.ts.map +1 -0
  60. package/dist/cli/commands/inspect.js +153 -0
  61. package/dist/cli/commands/inspect.js.map +1 -0
  62. package/dist/cli/commands/query.d.ts +3 -0
  63. package/dist/cli/commands/query.d.ts.map +1 -0
  64. package/dist/cli/commands/query.js +77 -0
  65. package/dist/cli/commands/query.js.map +1 -0
  66. package/dist/cli/commands/review.d.ts +3 -0
  67. package/dist/cli/commands/review.d.ts.map +1 -0
  68. package/dist/cli/commands/review.js +118 -0
  69. package/dist/cli/commands/review.js.map +1 -0
  70. package/dist/cli/commands/validate.d.ts +3 -0
  71. package/dist/cli/commands/validate.d.ts.map +1 -0
  72. package/dist/cli/commands/validate.js +125 -0
  73. package/dist/cli/commands/validate.js.map +1 -0
  74. package/dist/cli/helpers.d.ts +24 -0
  75. package/dist/cli/helpers.d.ts.map +1 -0
  76. package/dist/cli/helpers.js +152 -0
  77. package/dist/cli/helpers.js.map +1 -0
  78. package/dist/cli/index.d.ts +3 -0
  79. package/dist/cli/index.d.ts.map +1 -0
  80. package/dist/cli/index.js +34 -0
  81. package/dist/cli/index.js.map +1 -0
  82. package/dist/config/index.d.ts +5 -0
  83. package/dist/config/index.d.ts.map +1 -0
  84. package/dist/config/index.js +3 -0
  85. package/dist/config/index.js.map +1 -0
  86. package/dist/config/loader.d.ts +45 -0
  87. package/dist/config/loader.d.ts.map +1 -0
  88. package/dist/config/loader.js +201 -0
  89. package/dist/config/loader.js.map +1 -0
  90. package/dist/config/schema.d.ts +37 -0
  91. package/dist/config/schema.d.ts.map +1 -0
  92. package/dist/config/schema.js +42 -0
  93. package/dist/config/schema.js.map +1 -0
  94. package/dist/data/data/defaults.yaml +101 -0
  95. package/dist/data/defaults.yaml +101 -0
  96. package/dist/errors.d.ts +45 -0
  97. package/dist/errors.d.ts.map +1 -0
  98. package/dist/errors.js +84 -0
  99. package/dist/errors.js.map +1 -0
  100. package/dist/exporters/base.d.ts +17 -0
  101. package/dist/exporters/base.d.ts.map +1 -0
  102. package/dist/exporters/base.js +7 -0
  103. package/dist/exporters/base.js.map +1 -0
  104. package/dist/exporters/csv-exporter.d.ts +13 -0
  105. package/dist/exporters/csv-exporter.d.ts.map +1 -0
  106. package/dist/exporters/csv-exporter.js +73 -0
  107. package/dist/exporters/csv-exporter.js.map +1 -0
  108. package/dist/exporters/dot-exporter.d.ts +12 -0
  109. package/dist/exporters/dot-exporter.d.ts.map +1 -0
  110. package/dist/exporters/dot-exporter.js +72 -0
  111. package/dist/exporters/dot-exporter.js.map +1 -0
  112. package/dist/exporters/index.d.ts +8 -0
  113. package/dist/exporters/index.d.ts.map +1 -0
  114. package/dist/exporters/index.js +8 -0
  115. package/dist/exporters/index.js.map +1 -0
  116. package/dist/exporters/json-exporter.d.ts +14 -0
  117. package/dist/exporters/json-exporter.d.ts.map +1 -0
  118. package/dist/exporters/json-exporter.js +41 -0
  119. package/dist/exporters/json-exporter.js.map +1 -0
  120. package/dist/exporters/markdown-exporter.d.ts +14 -0
  121. package/dist/exporters/markdown-exporter.d.ts.map +1 -0
  122. package/dist/exporters/markdown-exporter.js +65 -0
  123. package/dist/exporters/markdown-exporter.js.map +1 -0
  124. package/dist/exporters/registry.d.ts +4 -0
  125. package/dist/exporters/registry.d.ts.map +1 -0
  126. package/dist/exporters/registry.js +20 -0
  127. package/dist/exporters/registry.js.map +1 -0
  128. package/dist/exporters/sqlite-exporter.d.ts +10 -0
  129. package/dist/exporters/sqlite-exporter.d.ts.map +1 -0
  130. package/dist/exporters/sqlite-exporter.js +20 -0
  131. package/dist/exporters/sqlite-exporter.js.map +1 -0
  132. package/dist/index.d.ts +13 -0
  133. package/dist/index.d.ts.map +1 -0
  134. package/dist/index.js +14 -0
  135. package/dist/index.js.map +1 -0
  136. package/dist/inheritance/alias-resolver.d.ts +21 -0
  137. package/dist/inheritance/alias-resolver.d.ts.map +1 -0
  138. package/dist/inheritance/alias-resolver.js +40 -0
  139. package/dist/inheritance/alias-resolver.js.map +1 -0
  140. package/dist/inheritance/index.d.ts +9 -0
  141. package/dist/inheritance/index.d.ts.map +1 -0
  142. package/dist/inheritance/index.js +5 -0
  143. package/dist/inheritance/index.js.map +1 -0
  144. package/dist/inheritance/inheritance-resolver.d.ts +37 -0
  145. package/dist/inheritance/inheritance-resolver.d.ts.map +1 -0
  146. package/dist/inheritance/inheritance-resolver.js +164 -0
  147. package/dist/inheritance/inheritance-resolver.js.map +1 -0
  148. package/dist/inheritance/reference-parser.d.ts +27 -0
  149. package/dist/inheritance/reference-parser.d.ts.map +1 -0
  150. package/dist/inheritance/reference-parser.js +74 -0
  151. package/dist/inheritance/reference-parser.js.map +1 -0
  152. package/dist/inheritance/source-resolver.d.ts +29 -0
  153. package/dist/inheritance/source-resolver.d.ts.map +1 -0
  154. package/dist/inheritance/source-resolver.js +87 -0
  155. package/dist/inheritance/source-resolver.js.map +1 -0
  156. package/dist/model/category-registry.d.ts +48 -0
  157. package/dist/model/category-registry.d.ts.map +1 -0
  158. package/dist/model/category-registry.js +83 -0
  159. package/dist/model/category-registry.js.map +1 -0
  160. package/dist/model/document-meta.d.ts +38 -0
  161. package/dist/model/document-meta.d.ts.map +1 -0
  162. package/dist/model/document-meta.js +62 -0
  163. package/dist/model/document-meta.js.map +1 -0
  164. package/dist/model/document-parser.d.ts +17 -0
  165. package/dist/model/document-parser.d.ts.map +1 -0
  166. package/dist/model/document-parser.js +66 -0
  167. package/dist/model/document-parser.js.map +1 -0
  168. package/dist/model/document.d.ts +27 -0
  169. package/dist/model/document.d.ts.map +1 -0
  170. package/dist/model/document.js +42 -0
  171. package/dist/model/document.js.map +1 -0
  172. package/dist/model/element.d.ts +51 -0
  173. package/dist/model/element.d.ts.map +1 -0
  174. package/dist/model/element.js +78 -0
  175. package/dist/model/element.js.map +1 -0
  176. package/dist/model/graph.d.ts +42 -0
  177. package/dist/model/graph.d.ts.map +1 -0
  178. package/dist/model/graph.js +177 -0
  179. package/dist/model/graph.js.map +1 -0
  180. package/dist/model/index.d.ts +8 -0
  181. package/dist/model/index.d.ts.map +1 -0
  182. package/dist/model/index.js +7 -0
  183. package/dist/model/index.js.map +1 -0
  184. package/dist/parsers/base.d.ts +28 -0
  185. package/dist/parsers/base.d.ts.map +1 -0
  186. package/dist/parsers/base.js +19 -0
  187. package/dist/parsers/base.js.map +1 -0
  188. package/dist/parsers/index.d.ts +6 -0
  189. package/dist/parsers/index.d.ts.map +1 -0
  190. package/dist/parsers/index.js +6 -0
  191. package/dist/parsers/index.js.map +1 -0
  192. package/dist/parsers/markdown-parser.d.ts +12 -0
  193. package/dist/parsers/markdown-parser.d.ts.map +1 -0
  194. package/dist/parsers/markdown-parser.js +37 -0
  195. package/dist/parsers/markdown-parser.js.map +1 -0
  196. package/dist/parsers/registry.d.ts +11 -0
  197. package/dist/parsers/registry.d.ts.map +1 -0
  198. package/dist/parsers/registry.js +21 -0
  199. package/dist/parsers/registry.js.map +1 -0
  200. package/dist/parsers/typescript-parser.d.ts +12 -0
  201. package/dist/parsers/typescript-parser.d.ts.map +1 -0
  202. package/dist/parsers/typescript-parser.js +74 -0
  203. package/dist/parsers/typescript-parser.js.map +1 -0
  204. package/dist/parsers/yaml-parser.d.ts +12 -0
  205. package/dist/parsers/yaml-parser.d.ts.map +1 -0
  206. package/dist/parsers/yaml-parser.js +30 -0
  207. package/dist/parsers/yaml-parser.js.map +1 -0
  208. package/dist/provenance/index.d.ts +5 -0
  209. package/dist/provenance/index.d.ts.map +1 -0
  210. package/dist/provenance/index.js +4 -0
  211. package/dist/provenance/index.js.map +1 -0
  212. package/dist/provenance/review-hash.d.ts +11 -0
  213. package/dist/provenance/review-hash.d.ts.map +1 -0
  214. package/dist/provenance/review-hash.js +18 -0
  215. package/dist/provenance/review-hash.js.map +1 -0
  216. package/dist/provenance/schemas.d.ts +36 -0
  217. package/dist/provenance/schemas.d.ts.map +1 -0
  218. package/dist/provenance/schemas.js +26 -0
  219. package/dist/provenance/schemas.js.map +1 -0
  220. package/dist/provenance/staleness.d.ts +12 -0
  221. package/dist/provenance/staleness.d.ts.map +1 -0
  222. package/dist/provenance/staleness.js +46 -0
  223. package/dist/provenance/staleness.js.map +1 -0
  224. package/dist/refs/git-diff-tracer.d.ts +35 -0
  225. package/dist/refs/git-diff-tracer.d.ts.map +1 -0
  226. package/dist/refs/git-diff-tracer.js +143 -0
  227. package/dist/refs/git-diff-tracer.js.map +1 -0
  228. package/dist/schema/build-schema.d.ts +15 -0
  229. package/dist/schema/build-schema.d.ts.map +1 -0
  230. package/dist/schema/build-schema.js +83 -0
  231. package/dist/schema/build-schema.js.map +1 -0
  232. package/dist/schema/category-definition.d.ts +41 -0
  233. package/dist/schema/category-definition.d.ts.map +1 -0
  234. package/dist/schema/category-definition.js +22 -0
  235. package/dist/schema/category-definition.js.map +1 -0
  236. package/dist/schema/combined-schema.d.ts +17 -0
  237. package/dist/schema/combined-schema.d.ts.map +1 -0
  238. package/dist/schema/combined-schema.js +23 -0
  239. package/dist/schema/combined-schema.js.map +1 -0
  240. package/dist/schema/datetime.d.ts +11 -0
  241. package/dist/schema/datetime.d.ts.map +1 -0
  242. package/dist/schema/datetime.js +81 -0
  243. package/dist/schema/datetime.js.map +1 -0
  244. package/dist/schema/defaults-loader.d.ts +21 -0
  245. package/dist/schema/defaults-loader.d.ts.map +1 -0
  246. package/dist/schema/defaults-loader.js +55 -0
  247. package/dist/schema/defaults-loader.js.map +1 -0
  248. package/dist/schema/field-schema.d.ts +23 -0
  249. package/dist/schema/field-schema.d.ts.map +1 -0
  250. package/dist/schema/field-schema.js +18 -0
  251. package/dist/schema/field-schema.js.map +1 -0
  252. package/dist/schema/index.d.ts +17 -0
  253. package/dist/schema/index.d.ts.map +1 -0
  254. package/dist/schema/index.js +17 -0
  255. package/dist/schema/index.js.map +1 -0
  256. package/dist/schema/reserved-fields.d.ts +32 -0
  257. package/dist/schema/reserved-fields.d.ts.map +1 -0
  258. package/dist/schema/reserved-fields.js +42 -0
  259. package/dist/schema/reserved-fields.js.map +1 -0
  260. package/dist/schema/types.d.ts +7 -0
  261. package/dist/schema/types.d.ts.map +1 -0
  262. package/dist/schema/types.js +9 -0
  263. package/dist/schema/types.js.map +1 -0
  264. package/dist/utils/logger.d.ts +7 -0
  265. package/dist/utils/logger.d.ts.map +1 -0
  266. package/dist/utils/logger.js +16 -0
  267. package/dist/utils/logger.js.map +1 -0
  268. package/dist/utils/project-root.d.ts +14 -0
  269. package/dist/utils/project-root.d.ts.map +1 -0
  270. package/dist/utils/project-root.js +48 -0
  271. package/dist/utils/project-root.js.map +1 -0
  272. package/dist/validation/diagnostic.d.ts +23 -0
  273. package/dist/validation/diagnostic.d.ts.map +1 -0
  274. package/dist/validation/diagnostic.js +5 -0
  275. package/dist/validation/diagnostic.js.map +1 -0
  276. package/dist/validation/index.d.ts +6 -0
  277. package/dist/validation/index.d.ts.map +1 -0
  278. package/dist/validation/index.js +4 -0
  279. package/dist/validation/index.js.map +1 -0
  280. package/dist/validation/passes/coverage-pass.d.ts +10 -0
  281. package/dist/validation/passes/coverage-pass.d.ts.map +1 -0
  282. package/dist/validation/passes/coverage-pass.js +99 -0
  283. package/dist/validation/passes/coverage-pass.js.map +1 -0
  284. package/dist/validation/passes/index.d.ts +6 -0
  285. package/dist/validation/passes/index.d.ts.map +1 -0
  286. package/dist/validation/passes/index.js +19 -0
  287. package/dist/validation/passes/index.js.map +1 -0
  288. package/dist/validation/passes/schema-pass.d.ts +12 -0
  289. package/dist/validation/passes/schema-pass.d.ts.map +1 -0
  290. package/dist/validation/passes/schema-pass.js +38 -0
  291. package/dist/validation/passes/schema-pass.js.map +1 -0
  292. package/dist/validation/passes/semantic-pass.d.ts +8 -0
  293. package/dist/validation/passes/semantic-pass.d.ts.map +1 -0
  294. package/dist/validation/passes/semantic-pass.js +126 -0
  295. package/dist/validation/passes/semantic-pass.js.map +1 -0
  296. package/dist/validation/passes/structural-pass.d.ts +8 -0
  297. package/dist/validation/passes/structural-pass.d.ts.map +1 -0
  298. package/dist/validation/passes/structural-pass.js +150 -0
  299. package/dist/validation/passes/structural-pass.js.map +1 -0
  300. package/dist/validation/passes/traceability-pass.d.ts +9 -0
  301. package/dist/validation/passes/traceability-pass.d.ts.map +1 -0
  302. package/dist/validation/passes/traceability-pass.js +87 -0
  303. package/dist/validation/passes/traceability-pass.js.map +1 -0
  304. package/dist/validation/passes/user-rules-pass.d.ts +9 -0
  305. package/dist/validation/passes/user-rules-pass.d.ts.map +1 -0
  306. package/dist/validation/passes/user-rules-pass.js +72 -0
  307. package/dist/validation/passes/user-rules-pass.js.map +1 -0
  308. package/dist/validation/runner.d.ts +17 -0
  309. package/dist/validation/runner.d.ts.map +1 -0
  310. package/dist/validation/runner.js +33 -0
  311. package/dist/validation/runner.js.map +1 -0
  312. package/package.json +43 -0
  313. package/src/data/defaults.yaml +101 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/yaml-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,qBAAa,aAAc,SAAQ,SAAS;IAC1C,QAAQ,CAAC,UAAU,WAAqB;IAExC,kBAAkB,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAAE,UAAU,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;CAyBrG"}
@@ -0,0 +1,30 @@
1
+ import { RefParser } from './base.js';
2
+ /**
3
+ * Parser for YAML files. Identifier = top-level key.
4
+ */
5
+ export class YamlRefParser extends RefParser {
6
+ extensions = ['.yaml', '.yml'];
7
+ extractIdentifiers(content, matching) {
8
+ const results = [];
9
+ const lines = content.split('\n');
10
+ // Find all top-level keys (no indentation)
11
+ const topKeys = [];
12
+ for (let i = 0; i < lines.length; i++) {
13
+ const m = lines[i].match(/^(\w[\w-]*)\s*:/);
14
+ if (m) {
15
+ topKeys.push({ name: m[1], lineIndex: i });
16
+ }
17
+ }
18
+ for (let k = 0; k < topKeys.length; k++) {
19
+ const key = topKeys[k];
20
+ if (matching && key.name !== matching)
21
+ continue;
22
+ // Block extends to next top-level key or end of file
23
+ const endLine = k + 1 < topKeys.length ? topKeys[k + 1].lineIndex : lines.length;
24
+ const block = lines.slice(key.lineIndex, endLine).join('\n');
25
+ results.push({ identifier: key.name, block });
26
+ }
27
+ return results;
28
+ }
29
+ }
30
+ //# sourceMappingURL=yaml-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaml-parser.js","sourceRoot":"","sources":["../../src/parsers/yaml-parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC;;GAEG;AACH,MAAM,OAAO,aAAc,SAAQ,SAAS;IACjC,UAAU,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IAExC,kBAAkB,CAAC,OAAe,EAAE,QAAiB;QACnD,MAAM,OAAO,GAAiD,EAAE,CAAC;QACjE,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAElC,2CAA2C;QAC3C,MAAM,OAAO,GAA+C,EAAE,CAAC;QAC/D,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACtC,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YAC7C,IAAI,CAAC,EAAE,CAAC;gBACN,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAE,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;YAC9C,CAAC;QACH,CAAC;QAED,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAE,CAAC;YACxB,IAAI,QAAQ,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YAEhD,qDAAqD;YACrD,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAE,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;YAClF,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7D,OAAO,CAAC,IAAI,CAAC,EAAE,UAAU,EAAE,GAAG,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;CACF"}
@@ -0,0 +1,5 @@
1
+ export { originEntrySchema, updateEntrySchema, reviewEntrySchema } from './schemas.js';
2
+ export type { OriginEntry, UpdateEntry, ReviewEntry } from './schemas.js';
3
+ export { isStale, getUnreviewedUpdates } from './staleness.js';
4
+ export { computeReviewHash, validateReviewHash } from './review-hash.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/provenance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACvF,YAAY,EAAE,WAAW,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC1E,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { originEntrySchema, updateEntrySchema, reviewEntrySchema } from './schemas.js';
2
+ export { isStale, getUnreviewedUpdates } from './staleness.js';
3
+ export { computeReviewHash, validateReviewHash } from './review-hash.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/provenance/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAEvF,OAAO,EAAE,OAAO,EAAE,oBAAoB,EAAE,MAAM,gBAAgB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Compute a review hash from pending update IDs (DEC-4.5).
3
+ * The hash encodes which updates were shown during review.
4
+ * Used for --approve token validation.
5
+ */
6
+ export declare function computeReviewHash(updateIds: string[]): string;
7
+ /**
8
+ * Validate a review hash against pending update IDs.
9
+ */
10
+ export declare function validateReviewHash(hash: string, updateIds: string[]): boolean;
11
+ //# sourceMappingURL=review-hash.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-hash.d.ts","sourceRoot":"","sources":["../../src/provenance/review-hash.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,MAAM,CAI7D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,OAAO,CAE7E"}
@@ -0,0 +1,18 @@
1
+ import { createHash } from 'crypto';
2
+ /**
3
+ * Compute a review hash from pending update IDs (DEC-4.5).
4
+ * The hash encodes which updates were shown during review.
5
+ * Used for --approve token validation.
6
+ */
7
+ export function computeReviewHash(updateIds) {
8
+ const sorted = [...updateIds].sort();
9
+ const data = sorted.join(':');
10
+ return createHash('sha256').update(data).digest('hex').substring(0, 16);
11
+ }
12
+ /**
13
+ * Validate a review hash against pending update IDs.
14
+ */
15
+ export function validateReviewHash(hash, updateIds) {
16
+ return computeReviewHash(updateIds) === hash;
17
+ }
18
+ //# sourceMappingURL=review-hash.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"review-hash.js","sourceRoot":"","sources":["../../src/provenance/review-hash.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AAEpC;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,SAAmB;IACnD,MAAM,MAAM,GAAG,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;IACrC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC9B,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AAC1E,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,SAAmB;IAClE,OAAO,iBAAiB,CAAC,SAAS,CAAC,KAAK,IAAI,CAAC;AAC/C,CAAC"}
@@ -0,0 +1,36 @@
1
+ import { z } from 'zod';
2
+ /** Origin entry schema (DEC-4.7: creation record) */
3
+ export declare const originEntrySchema: z.ZodObject<{
4
+ id: z.ZodDefault<z.ZodString>;
5
+ date: z.ZodString;
6
+ by: z.ZodOptional<z.ZodObject<{
7
+ name: z.ZodString;
8
+ email: z.ZodString;
9
+ }, z.core.$strip>>;
10
+ }, z.core.$strip>;
11
+ /** Update entry schema (DEC-4.7: change record) */
12
+ export declare const updateEntrySchema: z.ZodObject<{
13
+ id: z.ZodDefault<z.ZodString>;
14
+ date: z.ZodString;
15
+ by: z.ZodOptional<z.ZodObject<{
16
+ name: z.ZodString;
17
+ email: z.ZodString;
18
+ }, z.core.$strip>>;
19
+ rationale: z.ZodString;
20
+ skip_review: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
21
+ }, z.core.$strip>;
22
+ /** Review entry schema (DEC-4.7: review record) */
23
+ export declare const reviewEntrySchema: z.ZodObject<{
24
+ id: z.ZodDefault<z.ZodString>;
25
+ date: z.ZodString;
26
+ by: z.ZodOptional<z.ZodObject<{
27
+ name: z.ZodString;
28
+ email: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ updates_reviewed: z.ZodArray<z.ZodString>;
31
+ note: z.ZodOptional<z.ZodString>;
32
+ }, z.core.$strip>;
33
+ export type OriginEntry = z.infer<typeof originEntrySchema>;
34
+ export type UpdateEntry = z.infer<typeof updateEntrySchema>;
35
+ export type ReviewEntry = z.infer<typeof reviewEntrySchema>;
36
+ //# sourceMappingURL=schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.d.ts","sourceRoot":"","sources":["../../src/provenance/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,qDAAqD;AACrD,eAAO,MAAM,iBAAiB;;;;;;;iBAI5B,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,iBAAiB;;;;;;;;;iBAM5B,CAAC;AAEH,mDAAmD;AACnD,eAAO,MAAM,iBAAiB;;;;;;;;;iBAM5B,CAAC;AAEH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,26 @@
1
+ import { z } from 'zod';
2
+ import { randomUUID } from 'crypto';
3
+ import { userIdentitySchema } from '../config/schema.js';
4
+ /** Origin entry schema (DEC-4.7: creation record) */
5
+ export const originEntrySchema = z.object({
6
+ id: z.string().default(() => randomUUID()),
7
+ date: z.string(), // ISO 8601 datetime
8
+ by: userIdentitySchema.optional(),
9
+ });
10
+ /** Update entry schema (DEC-4.7: change record) */
11
+ export const updateEntrySchema = z.object({
12
+ id: z.string().default(() => randomUUID()),
13
+ date: z.string(),
14
+ by: userIdentitySchema.optional(),
15
+ rationale: z.string(),
16
+ skip_review: z.boolean().optional().default(false),
17
+ });
18
+ /** Review entry schema (DEC-4.7: review record) */
19
+ export const reviewEntrySchema = z.object({
20
+ id: z.string().default(() => randomUUID()),
21
+ date: z.string(),
22
+ by: userIdentitySchema.optional(),
23
+ updates_reviewed: z.array(z.string()), // UUIDs of update entries
24
+ note: z.string().optional(),
25
+ });
26
+ //# sourceMappingURL=schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"schemas.js","sourceRoot":"","sources":["../../src/provenance/schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,kBAAkB,EAAE,MAAM,qBAAqB,CAAC;AAEzD,qDAAqD;AACrD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,oBAAoB;IACtC,EAAE,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CAClC,CAAC,CAAC;AAEH,mDAAmD;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,WAAW,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,KAAK,CAAC;CACnD,CAAC,CAAC;AAEH,mDAAmD;AACnD,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,UAAU,EAAE,CAAC;IAC1C,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE;IAChB,EAAE,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IACjC,gBAAgB,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,0BAA0B;IACjE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CAC5B,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { Element } from '../model/element.js';
2
+ /**
3
+ * Check if an element is stale (DEC-4.7).
4
+ * An element is stale if it has any non-skip-review update whose ID
5
+ * does not appear in any review's updates_reviewed list.
6
+ */
7
+ export declare function isStale(element: Element): boolean;
8
+ /**
9
+ * Get the list of unreviewed update IDs for an element.
10
+ */
11
+ export declare function getUnreviewedUpdates(element: Element): string[];
12
+ //# sourceMappingURL=staleness.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staleness.d.ts","sourceRoot":"","sources":["../../src/provenance/staleness.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAGnD;;;;GAIG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAuBjD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAgB/D"}
@@ -0,0 +1,46 @@
1
+ /**
2
+ * Check if an element is stale (DEC-4.7).
3
+ * An element is stale if it has any non-skip-review update whose ID
4
+ * does not appear in any review's updates_reviewed list.
5
+ */
6
+ export function isStale(element) {
7
+ const updatedBy = (element.get('updated_by') ?? []);
8
+ const reviewedBy = (element.get('reviewed_by') ?? []);
9
+ // Get all reviewed update IDs across all reviews
10
+ const reviewedUpdateIds = new Set();
11
+ for (const review of reviewedBy) {
12
+ if (review.updates_reviewed) {
13
+ for (const id of review.updates_reviewed) {
14
+ reviewedUpdateIds.add(id);
15
+ }
16
+ }
17
+ }
18
+ // Check if any non-skip-review update is unreviewed
19
+ for (const update of updatedBy) {
20
+ if (update.skip_review)
21
+ continue;
22
+ if (!reviewedUpdateIds.has(update.id)) {
23
+ return true; // This update hasn't been reviewed
24
+ }
25
+ }
26
+ return false;
27
+ }
28
+ /**
29
+ * Get the list of unreviewed update IDs for an element.
30
+ */
31
+ export function getUnreviewedUpdates(element) {
32
+ const updatedBy = (element.get('updated_by') ?? []);
33
+ const reviewedBy = (element.get('reviewed_by') ?? []);
34
+ const reviewedUpdateIds = new Set();
35
+ for (const review of reviewedBy) {
36
+ if (review.updates_reviewed) {
37
+ for (const id of review.updates_reviewed) {
38
+ reviewedUpdateIds.add(id);
39
+ }
40
+ }
41
+ }
42
+ return updatedBy
43
+ .filter(u => !u.skip_review && !reviewedUpdateIds.has(u.id))
44
+ .map(u => u.id);
45
+ }
46
+ //# sourceMappingURL=staleness.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"staleness.js","sourceRoot":"","sources":["../../src/provenance/staleness.ts"],"names":[],"mappings":"AAGA;;;;GAIG;AACH,MAAM,UAAU,OAAO,CAAC,OAAgB;IACtC,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAkB,CAAC;IACrE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAkB,CAAC;IAEvE,iDAAiD;IACjD,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACzC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,KAAK,MAAM,MAAM,IAAI,SAAS,EAAE,CAAC;QAC/B,IAAI,MAAM,CAAC,WAAW;YAAE,SAAS;QACjC,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,EAAE,CAAC;YACtC,OAAO,IAAI,CAAC,CAAC,mCAAmC;QAClD,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAgB;IACnD,MAAM,SAAS,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,EAAE,CAAkB,CAAC;IACrE,MAAM,UAAU,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE,CAAkB,CAAC;IAEvE,MAAM,iBAAiB,GAAG,IAAI,GAAG,EAAU,CAAC;IAC5C,KAAK,MAAM,MAAM,IAAI,UAAU,EAAE,CAAC;QAChC,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;YAC5B,KAAK,MAAM,EAAE,IAAI,MAAM,CAAC,gBAAgB,EAAE,CAAC;gBACzC,iBAAiB,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YAC5B,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,SAAS;SACb,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,WAAW,IAAI,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;SAC3D,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AACpB,CAAC"}
@@ -0,0 +1,35 @@
1
+ import type { Element } from '../model/element.js';
2
+ import type { Catalog } from '../catalog/catalog.js';
3
+ export interface RefChange {
4
+ element: Element;
5
+ ref: {
6
+ file: string;
7
+ identifier: string;
8
+ role: string;
9
+ };
10
+ changeType: 'modified' | 'removed' | 'added';
11
+ /** Lines of the identifier block at commit A (null if added) */
12
+ blockBefore: string | null;
13
+ /** Lines of the identifier block at commit B (null if removed) */
14
+ blockAfter: string | null;
15
+ }
16
+ export interface DiffTraceResult {
17
+ commitA: string;
18
+ commitB: string;
19
+ changedFiles: string[];
20
+ refChanges: RefChange[];
21
+ }
22
+ /**
23
+ * Trace changes between two commits back to GVP decisions via refs.
24
+ *
25
+ * 1. Get changed files between commitA and commitB
26
+ * 2. Find all elements with refs pointing to changed files
27
+ * 3. For each matching ref, extract the identifier block at both commits
28
+ * 4. Compare — report if the identifier changed, was added, or was removed
29
+ */
30
+ export declare function traceGitDiff(catalog: Catalog, commitA: string, commitB: string, cwd: string): DiffTraceResult;
31
+ /**
32
+ * Format a DiffTraceResult for display.
33
+ */
34
+ export declare function formatDiffTrace(result: DiffTraceResult, catalog: Catalog): string;
35
+ //# sourceMappingURL=git-diff-tracer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-tracer.d.ts","sourceRoot":"","sources":["../../src/refs/git-diff-tracer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAIrD,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;IACxD,UAAU,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC;IAC7C,gEAAgE;IAChE,WAAW,EAAE,MAAM,GAAG,IAAI,CAAC;IAC3B,kEAAkE;IAClE,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,SAAS,EAAE,CAAC;CACzB;AA+BD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,GACV,eAAe,CA0DjB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,eAAe,EAAE,OAAO,EAAE,OAAO,GAAG,MAAM,CAmCjF"}
@@ -0,0 +1,143 @@
1
+ import { execSync } from 'child_process';
2
+ import * as path from 'path';
3
+ import { createRefParserRegistry, findParser } from '../parsers/registry.js';
4
+ /**
5
+ * Get the list of files changed between two commits.
6
+ */
7
+ function getChangedFiles(commitA, commitB, cwd) {
8
+ try {
9
+ const output = execSync(`git diff --name-only ${commitA} ${commitB}`, { cwd, encoding: 'utf-8' });
10
+ return output.trim().split('\n').filter(f => f.length > 0);
11
+ }
12
+ catch {
13
+ return [];
14
+ }
15
+ }
16
+ /**
17
+ * Get file content at a specific commit.
18
+ */
19
+ function getFileAtCommit(filePath, commit, cwd) {
20
+ try {
21
+ return execSync(`git show ${commit}:${filePath}`, { cwd, encoding: 'utf-8', stdio: ['pipe', 'pipe', 'pipe'] });
22
+ }
23
+ catch {
24
+ return null; // File doesn't exist at this commit
25
+ }
26
+ }
27
+ /**
28
+ * Trace changes between two commits back to GVP decisions via refs.
29
+ *
30
+ * 1. Get changed files between commitA and commitB
31
+ * 2. Find all elements with refs pointing to changed files
32
+ * 3. For each matching ref, extract the identifier block at both commits
33
+ * 4. Compare — report if the identifier changed, was added, or was removed
34
+ */
35
+ export function traceGitDiff(catalog, commitA, commitB, cwd) {
36
+ const parsers = createRefParserRegistry();
37
+ const changedFiles = getChangedFiles(commitA, commitB, cwd);
38
+ // Build a set of changed file paths for quick lookup
39
+ const changedSet = new Set(changedFiles);
40
+ // Find all elements with refs pointing to changed files
41
+ const refChanges = [];
42
+ for (const element of catalog.getAllElements()) {
43
+ const refs = element.get('refs');
44
+ if (!refs || !Array.isArray(refs))
45
+ continue;
46
+ for (const ref of refs) {
47
+ if (!changedSet.has(ref.file))
48
+ continue;
49
+ // This ref points to a changed file — check the identifier
50
+ const ext = path.extname(ref.file);
51
+ const parser = findParser(ext, parsers);
52
+ const contentBefore = getFileAtCommit(ref.file, commitA, cwd);
53
+ const contentAfter = getFileAtCommit(ref.file, commitB, cwd);
54
+ let blockBefore = null;
55
+ let blockAfter = null;
56
+ if (parser) {
57
+ if (contentBefore)
58
+ blockBefore = parser.extractBlock(contentBefore, ref.identifier);
59
+ if (contentAfter)
60
+ blockAfter = parser.extractBlock(contentAfter, ref.identifier);
61
+ }
62
+ else {
63
+ // No parser — use file-level comparison (DEC-10.15)
64
+ blockBefore = contentBefore;
65
+ blockAfter = contentAfter;
66
+ }
67
+ let changeType;
68
+ if (!blockBefore && blockAfter) {
69
+ changeType = 'added';
70
+ }
71
+ else if (blockBefore && !blockAfter) {
72
+ changeType = 'removed';
73
+ }
74
+ else if (blockBefore !== blockAfter) {
75
+ changeType = 'modified';
76
+ }
77
+ else {
78
+ continue; // No change to this identifier
79
+ }
80
+ refChanges.push({
81
+ element,
82
+ ref,
83
+ changeType,
84
+ blockBefore,
85
+ blockAfter,
86
+ });
87
+ }
88
+ }
89
+ return { commitA, commitB, changedFiles, refChanges };
90
+ }
91
+ /**
92
+ * Format a DiffTraceResult for display.
93
+ */
94
+ export function formatDiffTrace(result, catalog) {
95
+ const lines = [];
96
+ lines.push(`Git diff: ${result.commitA.substring(0, 7)}..${result.commitB.substring(0, 7)}`);
97
+ lines.push(`Changed files: ${result.changedFiles.length}`);
98
+ lines.push('');
99
+ if (result.refChanges.length === 0) {
100
+ lines.push('No GVP-traced changes detected.');
101
+ return lines.join('\n');
102
+ }
103
+ lines.push(`Traced changes: ${result.refChanges.length}`);
104
+ lines.push('');
105
+ for (const change of result.refChanges) {
106
+ const icon = change.changeType === 'modified' ? '~' :
107
+ change.changeType === 'added' ? '+' :
108
+ '-';
109
+ lines.push(`[${icon}] ${change.ref.file}::${change.ref.identifier}`);
110
+ lines.push(` Role: ${change.ref.role}`);
111
+ lines.push(` Element: ${change.element.toString()} (${change.element.categoryName})`);
112
+ // Trace the element upward through maps_to
113
+ const ancestors = traceAncestors(change.element, catalog);
114
+ if (ancestors.length > 0) {
115
+ lines.push(` Traces to:`);
116
+ for (const ancestor of ancestors) {
117
+ lines.push(` → ${ancestor.toString()} (${ancestor.categoryName})`);
118
+ }
119
+ }
120
+ lines.push('');
121
+ }
122
+ return lines.join('\n');
123
+ }
124
+ /**
125
+ * Simple ancestor tracing — follow maps_to to find goals/values.
126
+ */
127
+ function traceAncestors(element, catalog) {
128
+ const visited = new Set();
129
+ const ancestors = [];
130
+ function walk(el) {
131
+ for (const ref of el.maps_to) {
132
+ const target = catalog.getAllElements().find(e => e.toLibraryId() === ref || e.hashKey() === ref);
133
+ if (target && !visited.has(target.hashKey())) {
134
+ visited.add(target.hashKey());
135
+ ancestors.push(target);
136
+ walk(target);
137
+ }
138
+ }
139
+ }
140
+ walk(element);
141
+ return ancestors;
142
+ }
143
+ //# sourceMappingURL=git-diff-tracer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-diff-tracer.js","sourceRoot":"","sources":["../../src/refs/git-diff-tracer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ import { z } from 'zod';
2
+ import type { FieldSchemaEntry } from './field-schema.js';
3
+ interface BuildOptions {
4
+ defaultTimezone?: string;
5
+ }
6
+ /**
7
+ * Build a Zod object schema from a field_schemas definition (DEC-3.1).
8
+ * This is the TypeScript equivalent of Pydantic's create_model().
9
+ *
10
+ * Each field in fieldSchemas becomes a property on the resulting Zod object schema.
11
+ * Fields are optional unless `required: true`.
12
+ */
13
+ export declare function buildZodSchema(fieldSchemas: Record<string, FieldSchemaEntry>, options?: BuildOptions): z.ZodObject<Record<string, z.ZodType>>;
14
+ export {};
15
+ //# sourceMappingURL=build-schema.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-schema.d.ts","sourceRoot":"","sources":["../../src/schema/build-schema.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAI1D,UAAU,YAAY;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B;AA8ED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAC5B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,EAC9C,OAAO,GAAE,YAAiB,GACzB,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAYxC"}
@@ -0,0 +1,83 @@
1
+ import { z } from 'zod';
2
+ import { createDatetimeSchema } from './datetime.js';
3
+ import { SchemaError } from '../errors.js';
4
+ /**
5
+ * Convert a single FieldSchemaEntry into a Zod schema.
6
+ * Handles all 8 types recursively (DEC-3.1, DEC-3.4, DEC-3.10, DEC-3.12, DEC-10.11).
7
+ */
8
+ function fieldEntryToZod(entry, options) {
9
+ let schema;
10
+ switch (entry.type) {
11
+ case 'string':
12
+ schema = z.string();
13
+ break;
14
+ case 'number':
15
+ schema = z.number();
16
+ break;
17
+ case 'boolean':
18
+ schema = z.boolean();
19
+ break;
20
+ case 'datetime':
21
+ schema = createDatetimeSchema(options.defaultTimezone);
22
+ break;
23
+ case 'enum': {
24
+ const values = entry.values;
25
+ if (!Array.isArray(values) || values.length === 0) {
26
+ throw new SchemaError(`Enum field requires a non-empty 'values' array of strings`);
27
+ }
28
+ schema = z.enum(values);
29
+ break;
30
+ }
31
+ case 'list': {
32
+ const itemSchema = entry.items
33
+ ? fieldEntryToZod(entry.items, options)
34
+ : z.unknown();
35
+ schema = z.array(itemSchema);
36
+ break;
37
+ }
38
+ case 'dict': {
39
+ const valueSchema = entry.values && !Array.isArray(entry.values)
40
+ ? fieldEntryToZod(entry.values, options)
41
+ : z.unknown();
42
+ schema = z.record(z.string(), valueSchema);
43
+ break;
44
+ }
45
+ case 'model': {
46
+ if (!entry.fields) {
47
+ throw new SchemaError(`Model field requires a 'fields' definition`);
48
+ }
49
+ const shape = {};
50
+ for (const [key, fieldEntry] of Object.entries(entry.fields)) {
51
+ let fieldSchema = fieldEntryToZod(fieldEntry, options);
52
+ if (!fieldEntry.required) {
53
+ fieldSchema = fieldSchema.optional();
54
+ }
55
+ shape[key] = fieldSchema;
56
+ }
57
+ schema = z.object(shape);
58
+ break;
59
+ }
60
+ default:
61
+ throw new SchemaError(`Unknown field type: '${entry.type}'`);
62
+ }
63
+ return schema;
64
+ }
65
+ /**
66
+ * Build a Zod object schema from a field_schemas definition (DEC-3.1).
67
+ * This is the TypeScript equivalent of Pydantic's create_model().
68
+ *
69
+ * Each field in fieldSchemas becomes a property on the resulting Zod object schema.
70
+ * Fields are optional unless `required: true`.
71
+ */
72
+ export function buildZodSchema(fieldSchemas, options = {}) {
73
+ const shape = {};
74
+ for (const [key, entry] of Object.entries(fieldSchemas)) {
75
+ let fieldSchema = fieldEntryToZod(entry, options);
76
+ if (!entry.required) {
77
+ fieldSchema = fieldSchema.optional();
78
+ }
79
+ shape[key] = fieldSchema;
80
+ }
81
+ return z.object(shape);
82
+ }
83
+ //# sourceMappingURL=build-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"build-schema.js","sourceRoot":"","sources":["../../src/schema/build-schema.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ import { z } from 'zod';
2
+ import type { FieldSchemaEntry } from './field-schema.js';
3
+ /**
4
+ * Category definition from defaults.yaml or user library (DOM-5).
5
+ */
6
+ export interface CategoryDefinition {
7
+ yaml_key: string;
8
+ id_prefix: string;
9
+ primary_field?: string;
10
+ display_label?: string;
11
+ color?: string;
12
+ is_root?: boolean;
13
+ mapping_rules?: string[][];
14
+ field_schemas?: Record<string, FieldSchemaEntry>;
15
+ export_options?: Record<string, unknown>;
16
+ }
17
+ /** Zod schema for category definitions */
18
+ export declare const categoryDefinitionSchema: z.ZodType<CategoryDefinition>;
19
+ /**
20
+ * The _all block that applies field_schemas to all categories.
21
+ */
22
+ export interface AllFieldSchemas {
23
+ field_schemas?: Record<string, FieldSchemaEntry>;
24
+ }
25
+ export declare const allFieldSchemasSchema: z.ZodObject<{
26
+ field_schemas: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<FieldSchemaEntry, unknown, z.core.$ZodTypeInternals<FieldSchemaEntry, unknown>>>>;
27
+ }, z.core.$strip>;
28
+ /**
29
+ * The full defaults.yaml file structure.
30
+ */
31
+ export interface DefaultsFile {
32
+ _all?: AllFieldSchemas;
33
+ categories: Record<string, CategoryDefinition>;
34
+ }
35
+ export declare const defaultsFileSchema: z.ZodObject<{
36
+ _all: z.ZodOptional<z.ZodObject<{
37
+ field_schemas: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodType<FieldSchemaEntry, unknown, z.core.$ZodTypeInternals<FieldSchemaEntry, unknown>>>>;
38
+ }, z.core.$strip>>;
39
+ categories: z.ZodRecord<z.ZodString, z.ZodType<CategoryDefinition, unknown, z.core.$ZodTypeInternals<CategoryDefinition, unknown>>>;
40
+ }, z.core.$strip>;
41
+ //# sourceMappingURL=category-definition.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-definition.d.ts","sourceRoot":"","sources":["../../src/schema/category-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAG1D;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,EAAE,EAAE,CAAC;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;IACjD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC1C;AAED,0CAA0C;AAC1C,eAAO,MAAM,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC,kBAAkB,CAUjE,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;CAClD;AAED,eAAO,MAAM,qBAAqB;;iBAEhC,CAAC;AAEH;;GAEG;AACH,MAAM,WAAW,YAAY;IAC3B,IAAI,CAAC,EAAE,eAAe,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;CAChD;AAED,eAAO,MAAM,kBAAkB;;;;;iBAG7B,CAAC"}
@@ -0,0 +1,22 @@
1
+ import { z } from 'zod';
2
+ import { fieldSchemaEntrySchema } from './field-schema.js';
3
+ /** Zod schema for category definitions */
4
+ export const categoryDefinitionSchema = z.object({
5
+ yaml_key: z.string(),
6
+ id_prefix: z.string(),
7
+ primary_field: z.string().optional(),
8
+ display_label: z.string().optional(),
9
+ color: z.string().optional(),
10
+ is_root: z.boolean().optional(),
11
+ mapping_rules: z.array(z.array(z.string())).optional(),
12
+ field_schemas: z.record(z.string(), fieldSchemaEntrySchema).optional(),
13
+ export_options: z.record(z.string(), z.unknown()).optional(),
14
+ });
15
+ export const allFieldSchemasSchema = z.object({
16
+ field_schemas: z.record(z.string(), fieldSchemaEntrySchema).optional(),
17
+ });
18
+ export const defaultsFileSchema = z.object({
19
+ _all: allFieldSchemasSchema.optional(),
20
+ categories: z.record(z.string(), categoryDefinitionSchema),
21
+ });
22
+ //# sourceMappingURL=category-definition.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"category-definition.js","sourceRoot":"","sources":["../../src/schema/category-definition.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,sBAAsB,EAAE,MAAM,mBAAmB,CAAC;AAiB3D,0CAA0C;AAC1C,MAAM,CAAC,MAAM,wBAAwB,GAAkC,CAAC,CAAC,MAAM,CAAC;IAC9E,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;IACpB,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE;IACrB,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACpC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC5B,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC/B,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE;IACtD,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,QAAQ,EAAE;IACtE,cAAc,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE;CAC7D,CAAC,CAAC;AASH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC5C,aAAa,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,QAAQ,EAAE;CACvE,CAAC,CAAC;AAUH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,IAAI,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,wBAAwB,CAAC;CAC3D,CAAC,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { z } from 'zod';
2
+ import type { FieldSchemaEntry } from './field-schema.js';
3
+ interface BuildOptions {
4
+ defaultTimezone?: string;
5
+ }
6
+ /**
7
+ * Build a complete element Zod schema: reserved fields + dynamic fields (DEC-3.7).
8
+ *
9
+ * 1. Checks for reserved field collisions (DEC-3.2) — throws SchemaError
10
+ * 2. Builds dynamic schema from field_schemas
11
+ * 3. Merges reserved + dynamic into one flat Zod object schema
12
+ *
13
+ * The resulting schema validates a complete element in one pass.
14
+ */
15
+ export declare function buildElementSchema(fieldSchemas: Record<string, FieldSchemaEntry>, options?: BuildOptions): z.ZodObject<Record<string, z.ZodType>>;
16
+ export {};
17
+ //# sourceMappingURL=combined-schema.d.ts.map