@inventarch/compliance 0.0.0-stage → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (511) hide show
  1. package/LICENSE +202 -0
  2. package/NOTICE +4 -0
  3. package/README.md +8 -2
  4. package/SPEC.md +128 -0
  5. package/dist/adoption.d.ts +18 -0
  6. package/dist/adoption.d.ts.map +1 -0
  7. package/dist/adoption.js +76 -0
  8. package/dist/adoption.js.map +1 -0
  9. package/dist/catalog.d.ts +112 -0
  10. package/dist/catalog.d.ts.map +1 -0
  11. package/dist/catalog.js +265 -0
  12. package/dist/catalog.js.map +1 -0
  13. package/dist/check-ids.d.ts +4 -0
  14. package/dist/check-ids.d.ts.map +1 -0
  15. package/dist/check-ids.js +22 -0
  16. package/dist/check-ids.js.map +1 -0
  17. package/dist/evidence.d.ts +145 -0
  18. package/dist/evidence.d.ts.map +1 -0
  19. package/dist/evidence.js +468 -0
  20. package/dist/evidence.js.map +1 -0
  21. package/dist/fixtures.d.ts +29 -0
  22. package/dist/fixtures.d.ts.map +1 -0
  23. package/dist/fixtures.js +107 -0
  24. package/dist/fixtures.js.map +1 -0
  25. package/dist/graph-checks.d.ts +27 -0
  26. package/dist/graph-checks.d.ts.map +1 -0
  27. package/dist/graph-checks.js +184 -0
  28. package/dist/graph-checks.js.map +1 -0
  29. package/dist/host-plugin.d.ts +23 -0
  30. package/dist/host-plugin.d.ts.map +1 -0
  31. package/dist/host-plugin.js +204 -0
  32. package/dist/host-plugin.js.map +1 -0
  33. package/dist/index.d.ts +31 -0
  34. package/dist/index.d.ts.map +1 -0
  35. package/dist/index.js +18 -0
  36. package/dist/index.js.map +1 -0
  37. package/dist/obligations.d.ts +157 -0
  38. package/dist/obligations.d.ts.map +1 -0
  39. package/dist/obligations.js +301 -0
  40. package/dist/obligations.js.map +1 -0
  41. package/dist/profiles.d.ts +27 -0
  42. package/dist/profiles.d.ts.map +1 -0
  43. package/dist/profiles.js +40 -0
  44. package/dist/profiles.js.map +1 -0
  45. package/dist/projections.d.ts +51 -0
  46. package/dist/projections.d.ts.map +1 -0
  47. package/dist/projections.js +124 -0
  48. package/dist/projections.js.map +1 -0
  49. package/dist/record-text.d.ts +26 -0
  50. package/dist/record-text.d.ts.map +1 -0
  51. package/dist/record-text.js +73 -0
  52. package/dist/record-text.js.map +1 -0
  53. package/dist/report.d.ts +25 -0
  54. package/dist/report.d.ts.map +1 -0
  55. package/dist/report.js +80 -0
  56. package/dist/report.js.map +1 -0
  57. package/dist/schema.d.ts +23 -0
  58. package/dist/schema.d.ts.map +1 -0
  59. package/dist/schema.js +229 -0
  60. package/dist/schema.js.map +1 -0
  61. package/dist/shape.d.ts +18 -0
  62. package/dist/shape.d.ts.map +1 -0
  63. package/dist/shape.js +106 -0
  64. package/dist/shape.js.map +1 -0
  65. package/dist/steward-profile.d.ts +39 -0
  66. package/dist/steward-profile.d.ts.map +1 -0
  67. package/dist/steward-profile.js +143 -0
  68. package/dist/steward-profile.js.map +1 -0
  69. package/dist/systems.d.ts +11 -0
  70. package/dist/systems.d.ts.map +1 -0
  71. package/dist/systems.js +86 -0
  72. package/dist/systems.js.map +1 -0
  73. package/dist/types.d.ts +23 -0
  74. package/dist/types.d.ts.map +1 -0
  75. package/dist/types.js +92 -0
  76. package/dist/types.js.map +1 -0
  77. package/dist/values.d.ts +8 -0
  78. package/dist/values.d.ts.map +1 -0
  79. package/dist/values.js +47 -0
  80. package/dist/values.js.map +1 -0
  81. package/dist/variants.d.ts +4 -0
  82. package/dist/variants.d.ts.map +1 -0
  83. package/dist/variants.js +82 -0
  84. package/dist/variants.js.map +1 -0
  85. package/dist/workspace-projection.d.ts +22 -0
  86. package/dist/workspace-projection.d.ts.map +1 -0
  87. package/dist/workspace-projection.js +68 -0
  88. package/dist/workspace-projection.js.map +1 -0
  89. package/fixtures/language/cases/fail/duplicate-given.diagnostics.json +10 -0
  90. package/fixtures/language/cases/fail/duplicate-given.ia +72 -0
  91. package/fixtures/language/cases/fail/given-scalar.diagnostics.json +6 -0
  92. package/fixtures/language/cases/fail/given-scalar.ia +71 -0
  93. package/fixtures/language/cases/fail/head-verdict.diagnostics.json +6 -0
  94. package/fixtures/language/cases/fail/head-verdict.ia +72 -0
  95. package/fixtures/language/cases/fail/missing-evaluator.diagnostics.json +6 -0
  96. package/fixtures/language/cases/fail/missing-evaluator.ia +70 -0
  97. package/fixtures/language/cases/fail/missing-expected.diagnostics.json +6 -0
  98. package/fixtures/language/cases/fail/missing-expected.ia +70 -0
  99. package/fixtures/language/cases/fail/missing-given.diagnostics.json +6 -0
  100. package/fixtures/language/cases/fail/missing-given.ia +70 -0
  101. package/fixtures/language/cases/fail/missing-kind.diagnostics.json +6 -0
  102. package/fixtures/language/cases/fail/missing-kind.ia +70 -0
  103. package/fixtures/language/cases/fail/missing-request.diagnostics.json +6 -0
  104. package/fixtures/language/cases/fail/missing-request.ia +70 -0
  105. package/fixtures/language/cases/fail/scenario-conditioned-field.diagnostics.json +6 -0
  106. package/fixtures/language/cases/fail/scenario-conditioned-field.ia +71 -0
  107. package/fixtures/language/cases/fail/scenario-verdict.diagnostics.json +6 -0
  108. package/fixtures/language/cases/fail/scenario-verdict.ia +72 -0
  109. package/fixtures/language/cases/fail/unbound.diagnostics.json +6 -0
  110. package/fixtures/language/cases/fail/unbound.ia +71 -0
  111. package/fixtures/language/cases/fail/unknown-kind.diagnostics.json +6 -0
  112. package/fixtures/language/cases/fail/unknown-kind.ia +71 -0
  113. package/fixtures/language/cases/fail/verdict-block.diagnostics.json +6 -0
  114. package/fixtures/language/cases/fail/verdict-block.ia +73 -0
  115. package/fixtures/language/cases/fail/wrong-fragment.diagnostics.json +6 -0
  116. package/fixtures/language/cases/fail/wrong-fragment.ia +71 -0
  117. package/fixtures/language/cases/pass/all-scenario-kinds.ia +107 -0
  118. package/fixtures/language/cases/pass/all-scenario-kinds.records.json +1558 -0
  119. package/fixtures/language/cells/fail/duplicate-phase-sections.diagnostics.json +10 -0
  120. package/fixtures/language/cells/fail/duplicate-phase-sections.ia +64 -0
  121. package/fixtures/language/cells/fail/duplicate-primary.diagnostics.json +10 -0
  122. package/fixtures/language/cells/fail/duplicate-primary.ia +63 -0
  123. package/fixtures/language/cells/fail/duplicate-primitive.diagnostics.json +10 -0
  124. package/fixtures/language/cells/fail/duplicate-primitive.ia +63 -0
  125. package/fixtures/language/cells/fail/legacy-primary-move.diagnostics.json +6 -0
  126. package/fixtures/language/cells/fail/legacy-primary-move.ia +61 -0
  127. package/fixtures/language/cells/fail/means-list.diagnostics.json +6 -0
  128. package/fixtures/language/cells/fail/means-list.ia +61 -0
  129. package/fixtures/language/cells/fail/means-reference.diagnostics.json +6 -0
  130. package/fixtures/language/cells/fail/means-reference.ia +61 -0
  131. package/fixtures/language/cells/fail/means-scalar.diagnostics.json +6 -0
  132. package/fixtures/language/cells/fail/means-scalar.ia +61 -0
  133. package/fixtures/language/cells/fail/means-unsupported-child.diagnostics.json +6 -0
  134. package/fixtures/language/cells/fail/means-unsupported-child.ia +62 -0
  135. package/fixtures/language/cells/fail/phase-unknown.diagnostics.json +6 -0
  136. package/fixtures/language/cells/fail/phase-unknown.ia +61 -0
  137. package/fixtures/language/cells/fail/primary-quoted.diagnostics.json +6 -0
  138. package/fixtures/language/cells/fail/primary-quoted.ia +61 -0
  139. package/fixtures/language/cells/fail/primary-requires-means.diagnostics.json +6 -0
  140. package/fixtures/language/cells/fail/primary-requires-means.ia +61 -0
  141. package/fixtures/language/cells/fail/primary-unknown.diagnostics.json +6 -0
  142. package/fixtures/language/cells/fail/primary-unknown.ia +61 -0
  143. package/fixtures/language/cells/fail/primitive-case.diagnostics.json +6 -0
  144. package/fixtures/language/cells/fail/primitive-case.ia +61 -0
  145. package/fixtures/language/cells/fail/primitive-unknown.diagnostics.json +6 -0
  146. package/fixtures/language/cells/fail/primitive-unknown.ia +61 -0
  147. package/fixtures/language/cells/fail/unsupported-item.diagnostics.json +6 -0
  148. package/fixtures/language/cells/fail/unsupported-item.ia +61 -0
  149. package/fixtures/language/cells/pass/full-opal-grid.ia +92 -0
  150. package/fixtures/language/cells/pass/full-opal-grid.records.json +1450 -0
  151. package/fixtures/language/compile/fail/blocked-keyword.diagnostics.json +1 -0
  152. package/fixtures/language/compile/fail/blocked-keyword.ia +22 -0
  153. package/fixtures/language/compile/fail/discriminator-unregistered.diagnostics.json +1 -0
  154. package/fixtures/language/compile/fail/discriminator-unregistered.ia +19 -0
  155. package/fixtures/language/compile/pass/minimal-floor.ia +22 -0
  156. package/fixtures/language/compile/pass/minimal-floor.records.json +293 -0
  157. package/fixtures/language/compile/pass/nested-and-items.ia +27 -0
  158. package/fixtures/language/compile/pass/nested-and-items.records.json +373 -0
  159. package/fixtures/language/conditions/fail/conflicting-name.diagnostics.json +6 -0
  160. package/fixtures/language/conditions/fail/conflicting-name.ia +60 -0
  161. package/fixtures/language/conditions/fail/dangling-and.diagnostics.json +6 -0
  162. package/fixtures/language/conditions/fail/dangling-and.ia +60 -0
  163. package/fixtures/language/conditions/fail/empty-child.diagnostics.json +6 -0
  164. package/fixtures/language/conditions/fail/empty-child.ia +61 -0
  165. package/fixtures/language/conditions/fail/misplaced-head.diagnostics.json +6 -0
  166. package/fixtures/language/conditions/fail/misplaced-head.ia +59 -0
  167. package/fixtures/language/conditions/fail/misplaced-meaning.diagnostics.json +6 -0
  168. package/fixtures/language/conditions/fail/misplaced-meaning.ia +60 -0
  169. package/fixtures/language/conditions/fail/misplaced-ordinary-deep.diagnostics.json +6 -0
  170. package/fixtures/language/conditions/fail/misplaced-ordinary-deep.ia +61 -0
  171. package/fixtures/language/conditions/fail/misplaced-phase.diagnostics.json +6 -0
  172. package/fixtures/language/conditions/fail/misplaced-phase.ia +61 -0
  173. package/fixtures/language/conditions/fail/misplaced-primary.diagnostics.json +6 -0
  174. package/fixtures/language/conditions/fail/misplaced-primary.ia +62 -0
  175. package/fixtures/language/conditions/fail/misplaced-severity.diagnostics.json +6 -0
  176. package/fixtures/language/conditions/fail/misplaced-severity.ia +60 -0
  177. package/fixtures/language/conditions/fail/misplaced-standalone.diagnostics.json +6 -0
  178. package/fixtures/language/conditions/fail/misplaced-standalone.ia +60 -0
  179. package/fixtures/language/conditions/fail/missing-is.diagnostics.json +6 -0
  180. package/fixtures/language/conditions/fail/missing-is.ia +60 -0
  181. package/fixtures/language/conditions/fail/mixed-carriers.diagnostics.json +6 -0
  182. package/fixtures/language/conditions/fail/mixed-carriers.ia +61 -0
  183. package/fixtures/language/conditions/fail/quoted-value.diagnostics.json +6 -0
  184. package/fixtures/language/conditions/fail/quoted-value.ia +60 -0
  185. package/fixtures/language/conditions/fail/repeated-child.diagnostics.json +6 -0
  186. package/fixtures/language/conditions/fail/repeated-child.ia +62 -0
  187. package/fixtures/language/conditions/fail/repeated-name.diagnostics.json +6 -0
  188. package/fixtures/language/conditions/fail/repeated-name.ia +60 -0
  189. package/fixtures/language/conditions/fail/schema-when-block.diagnostics.json +6 -0
  190. package/fixtures/language/conditions/fail/schema-when-block.ia +64 -0
  191. package/fixtures/language/conditions/fail/unknown-term.diagnostics.json +6 -0
  192. package/fixtures/language/conditions/fail/unknown-term.ia +60 -0
  193. package/fixtures/language/conditions/fail/unknown-value.diagnostics.json +6 -0
  194. package/fixtures/language/conditions/fail/unknown-value.ia +60 -0
  195. package/fixtures/language/conditions/pass/all-carriers-and-dimensions.ia +71 -0
  196. package/fixtures/language/conditions/pass/all-carriers-and-dimensions.records.json +1131 -0
  197. package/fixtures/language/contracts/fail/duplicate-requirement-records.diagnostics.json +10 -0
  198. package/fixtures/language/contracts/fail/duplicate-requirement-records.ia +67 -0
  199. package/fixtures/language/contracts/fail/duplicate-requirement-sections.diagnostics.json +10 -0
  200. package/fixtures/language/contracts/fail/duplicate-requirement-sections.ia +64 -0
  201. package/fixtures/language/contracts/fail/extra-word.diagnostics.json +6 -0
  202. package/fixtures/language/contracts/fail/extra-word.ia +62 -0
  203. package/fixtures/language/contracts/fail/id-case.diagnostics.json +6 -0
  204. package/fixtures/language/contracts/fail/id-case.ia +62 -0
  205. package/fixtures/language/contracts/fail/id-empty.diagnostics.json +6 -0
  206. package/fixtures/language/contracts/fail/id-empty.ia +62 -0
  207. package/fixtures/language/contracts/fail/retired-binds.diagnostics.json +6 -0
  208. package/fixtures/language/contracts/fail/retired-binds.ia +59 -0
  209. package/fixtures/language/contracts/fail/retired-schema.diagnostics.json +6 -0
  210. package/fixtures/language/contracts/fail/retired-schema.ia +62 -0
  211. package/fixtures/language/contracts/fail/text-reference.diagnostics.json +6 -0
  212. package/fixtures/language/contracts/fail/text-reference.ia +62 -0
  213. package/fixtures/language/contracts/fail/text-scalar.diagnostics.json +6 -0
  214. package/fixtures/language/contracts/fail/text-scalar.ia +62 -0
  215. package/fixtures/language/contracts/fail/unbound.diagnostics.json +6 -0
  216. package/fixtures/language/contracts/fail/unbound.ia +60 -0
  217. package/fixtures/language/contracts/fail/unsupported-child.diagnostics.json +6 -0
  218. package/fixtures/language/contracts/fail/unsupported-child.ia +63 -0
  219. package/fixtures/language/contracts/pass/all-requirement-kinds.ia +76 -0
  220. package/fixtures/language/contracts/pass/all-requirement-kinds.records.json +1101 -0
  221. package/fixtures/language/edges/fail/identity-fragment.diagnostics.json +6 -0
  222. package/fixtures/language/edges/fail/identity-fragment.ia +60 -0
  223. package/fixtures/language/edges/fail/identity-kind.diagnostics.json +6 -0
  224. package/fixtures/language/edges/fail/identity-kind.ia +60 -0
  225. package/fixtures/language/edges/fail/identity-short.diagnostics.json +6 -0
  226. package/fixtures/language/edges/fail/identity-short.ia +60 -0
  227. package/fixtures/language/edges/fail/missing-target.diagnostics.json +6 -0
  228. package/fixtures/language/edges/fail/missing-target.ia +60 -0
  229. package/fixtures/language/edges/fail/source-side-unconsented.diagnostics.json +6 -0
  230. package/fixtures/language/edges/fail/source-side-unconsented.ia +60 -0
  231. package/fixtures/language/edges/fail/target-absent.diagnostics.json +6 -0
  232. package/fixtures/language/edges/fail/target-absent.ia +60 -0
  233. package/fixtures/language/edges/fail/target-ambiguous.diagnostics.json +6 -0
  234. package/fixtures/language/edges/fail/target-ambiguous.ia +60 -0
  235. package/fixtures/language/edges/fail/target-ambiguous.pool.json +26 -0
  236. package/fixtures/language/edges/fail/target-bare.diagnostics.json +6 -0
  237. package/fixtures/language/edges/fail/target-bare.ia +60 -0
  238. package/fixtures/language/edges/fail/target-list.diagnostics.json +6 -0
  239. package/fixtures/language/edges/fail/target-list.ia +60 -0
  240. package/fixtures/language/edges/fail/target-quoted.diagnostics.json +6 -0
  241. package/fixtures/language/edges/fail/target-quoted.ia +60 -0
  242. package/fixtures/language/edges/fail/target-side-unconsented.diagnostics.json +6 -0
  243. package/fixtures/language/edges/fail/target-side-unconsented.ia +60 -0
  244. package/fixtures/language/edges/fail/target-trailing-word.diagnostics.json +6 -0
  245. package/fixtures/language/edges/fail/target-trailing-word.ia +60 -0
  246. package/fixtures/language/edges/fail/unknown-verb.diagnostics.json +6 -0
  247. package/fixtures/language/edges/fail/unknown-verb.ia +60 -0
  248. package/fixtures/language/edges/pass/all-verbs-and-addresses.ia +114 -0
  249. package/fixtures/language/edges/pass/all-verbs-and-addresses.records.json +2221 -0
  250. package/fixtures/language/format/fail/lost-comment.candidate.txt +5 -0
  251. package/fixtures/language/format/fail/lost-comment.diagnostics.json +3 -0
  252. package/fixtures/language/format/fail/lost-comment.ia +5 -0
  253. package/fixtures/language/format/pass/token-spacing.ast.json +100 -0
  254. package/fixtures/language/format/pass/token-spacing.formatted.txt +7 -0
  255. package/fixtures/language/format/pass/token-spacing.ia +7 -0
  256. package/fixtures/language/identity/fail/facet-undeclared.diagnostics.json +1 -0
  257. package/fixtures/language/identity/fail/facet-undeclared.ia +20 -0
  258. package/fixtures/language/identity/fail/identity-collision.diagnostics.json +1 -0
  259. package/fixtures/language/identity/fail/identity-collision.ia +20 -0
  260. package/fixtures/language/identity/pass/facets.ia +21 -0
  261. package/fixtures/language/identity/pass/facets.records.json +300 -0
  262. package/fixtures/language/indent/fail/odd-block-with-prose.diagnostics.json +1 -0
  263. package/fixtures/language/indent/fail/odd-block-with-prose.ia +6 -0
  264. package/fixtures/language/indent/fail/odd-block.diagnostics.json +1 -0
  265. package/fixtures/language/indent/fail/odd-block.ia +4 -0
  266. package/fixtures/language/indent/fail/odd.diagnostics.json +1 -0
  267. package/fixtures/language/indent/fail/odd.ia +3 -0
  268. package/fixtures/language/indent/fail/step-block.diagnostics.json +1 -0
  269. package/fixtures/language/indent/fail/step-block.ia +4 -0
  270. package/fixtures/language/indent/fail/step-in-block.diagnostics.json +1 -0
  271. package/fixtures/language/indent/fail/step-in-block.ia +6 -0
  272. package/fixtures/language/indent/fail/step-under-header.diagnostics.json +1 -0
  273. package/fixtures/language/indent/fail/step-under-header.ia +3 -0
  274. package/fixtures/language/indent/fail/tab-block.diagnostics.json +1 -0
  275. package/fixtures/language/indent/fail/tab-block.ia +5 -0
  276. package/fixtures/language/indent/fail/tab.diagnostics.json +1 -0
  277. package/fixtures/language/indent/fail/tab.ia +3 -0
  278. package/fixtures/language/indent/fail/under-item.diagnostics.json +1 -0
  279. package/fixtures/language/indent/fail/under-item.ia +5 -0
  280. package/fixtures/language/indent/pass/blocks.ast.json +127 -0
  281. package/fixtures/language/indent/pass/blocks.ia +9 -0
  282. package/fixtures/language/lists/fail/dash-without-value.diagnostics.json +1 -0
  283. package/fixtures/language/lists/fail/dash-without-value.ia +4 -0
  284. package/fixtures/language/lists/fail/empty-item.diagnostics.json +1 -0
  285. package/fixtures/language/lists/fail/empty-item.ia +4 -0
  286. package/fixtures/language/lists/fail/item-line-list.diagnostics.json +1 -0
  287. package/fixtures/language/lists/fail/item-line-list.ia +4 -0
  288. package/fixtures/language/lists/fail/item-line-prose.diagnostics.json +1 -0
  289. package/fixtures/language/lists/fail/item-line-prose.ia +4 -0
  290. package/fixtures/language/lists/fail/missing-separator.diagnostics.json +1 -0
  291. package/fixtures/language/lists/fail/missing-separator.ia +4 -0
  292. package/fixtures/language/lists/fail/nested-list.diagnostics.json +1 -0
  293. package/fixtures/language/lists/fail/nested-list.ia +4 -0
  294. package/fixtures/language/lists/fail/unterminated.diagnostics.json +1 -0
  295. package/fixtures/language/lists/fail/unterminated.ia +5 -0
  296. package/fixtures/language/lists/pass/multi-line.ast.json +117 -0
  297. package/fixtures/language/lists/pass/multi-line.ia +9 -0
  298. package/fixtures/language/pragma/fail/missing.diagnostics.json +1 -0
  299. package/fixtures/language/pragma/fail/missing.ia +1 -0
  300. package/fixtures/language/pragma/fail/unsupported.diagnostics.json +1 -0
  301. package/fixtures/language/pragma/fail/unsupported.ia +2 -0
  302. package/fixtures/language/pragma/pass/minimal.ast.json +20 -0
  303. package/fixtures/language/pragma/pass/minimal.ia +2 -0
  304. package/fixtures/language/prose/fail/trailing.diagnostics.json +1 -0
  305. package/fixtures/language/prose/fail/trailing.ia +4 -0
  306. package/fixtures/language/prose/fail/unterminated.diagnostics.json +1 -0
  307. package/fixtures/language/prose/fail/unterminated.ia +5 -0
  308. package/fixtures/language/prose/pass/paragraphs.ast.json +48 -0
  309. package/fixtures/language/prose/pass/paragraphs.ia +7 -0
  310. package/fixtures/language/records/fail/head-after-section.diagnostics.json +1 -0
  311. package/fixtures/language/records/fail/head-after-section.ia +5 -0
  312. package/fixtures/language/records/fail/header-discriminator-class.diagnostics.json +1 -0
  313. package/fixtures/language/records/fail/header-discriminator-class.ia +2 -0
  314. package/fixtures/language/records/fail/header-extra-token.diagnostics.json +1 -0
  315. package/fixtures/language/records/fail/header-extra-token.ia +2 -0
  316. package/fixtures/language/records/fail/header-missing-name.diagnostics.json +1 -0
  317. package/fixtures/language/records/fail/header-missing-name.ia +2 -0
  318. package/fixtures/language/records/fail/header-name-class.diagnostics.json +1 -0
  319. package/fixtures/language/records/fail/header-name-class.ia +2 -0
  320. package/fixtures/language/records/fail/indented-preamble.diagnostics.json +1 -0
  321. package/fixtures/language/records/fail/indented-preamble.ia +3 -0
  322. package/fixtures/language/records/fail/item-under-header.diagnostics.json +1 -0
  323. package/fixtures/language/records/fail/item-under-header.ia +3 -0
  324. package/fixtures/language/records/fail/nested-under-header.diagnostics.json +1 -0
  325. package/fixtures/language/records/fail/nested-under-header.ia +3 -0
  326. package/fixtures/language/records/fail/toplevel.diagnostics.json +1 -0
  327. package/fixtures/language/records/fail/toplevel.ia +3 -0
  328. package/fixtures/language/records/pass/full.ast.json +31 -0
  329. package/fixtures/language/records/pass/full.ia +11 -0
  330. package/fixtures/language/refs/fail/discriminator-class.diagnostics.json +1 -0
  331. package/fixtures/language/refs/fail/discriminator-class.ia +4 -0
  332. package/fixtures/language/refs/fail/name-class.diagnostics.json +1 -0
  333. package/fixtures/language/refs/fail/name-class.ia +4 -0
  334. package/fixtures/language/refs/pass/cell-fragment.ast.json +50 -0
  335. package/fixtures/language/refs/pass/cell-fragment.ia +4 -0
  336. package/fixtures/language/refs/pass/fragments.ast.json +104 -0
  337. package/fixtures/language/refs/pass/fragments.ia +6 -0
  338. package/fixtures/language/registry/fail/category-missing.diagnostics.json +1 -0
  339. package/fixtures/language/registry/fail/category-missing.ia +8 -0
  340. package/fixtures/language/registry/fail/category-unknown.diagnostics.json +1 -0
  341. package/fixtures/language/registry/fail/category-unknown.ia +9 -0
  342. package/fixtures/language/registry/fail/condition-in-entry.diagnostics.json +1 -0
  343. package/fixtures/language/registry/fail/condition-in-entry.ia +9 -0
  344. package/fixtures/language/registry/fail/condition-on-head.diagnostics.json +1 -0
  345. package/fixtures/language/registry/fail/condition-on-head.ia +4 -0
  346. package/fixtures/language/registry/fail/consent-predicate-unknown.diagnostics.json +1 -0
  347. package/fixtures/language/registry/fail/consent-predicate-unknown.ia +6 -0
  348. package/fixtures/language/registry/fail/consent-row-malformed.diagnostics.json +1 -0
  349. package/fixtures/language/registry/fail/consent-row-malformed.ia +6 -0
  350. package/fixtures/language/registry/fail/discriminator-conflict.diagnostics.json +1 -0
  351. package/fixtures/language/registry/fail/discriminator-conflict.ia +21 -0
  352. package/fixtures/language/registry/fail/entry-malformed.diagnostics.json +1 -0
  353. package/fixtures/language/registry/fail/entry-malformed.ia +6 -0
  354. package/fixtures/language/registry/fail/facets-missing.diagnostics.json +1 -0
  355. package/fixtures/language/registry/fail/facets-missing.ia +9 -0
  356. package/fixtures/language/registry/fail/keyword-reserved.diagnostics.json +1 -0
  357. package/fixtures/language/registry/fail/keyword-reserved.ia +9 -0
  358. package/fixtures/language/registry/fail/kind-unknown.diagnostics.json +1 -0
  359. package/fixtures/language/registry/fail/kind-unknown.ia +9 -0
  360. package/fixtures/language/registry/fail/provider-missing.diagnostics.json +1 -0
  361. package/fixtures/language/registry/fail/provider-missing.ia +3 -0
  362. package/fixtures/language/registry/fail/requires-head-field.diagnostics.json +1 -0
  363. package/fixtures/language/registry/fail/requires-head-field.ia +5 -0
  364. package/fixtures/language/registry/fail/retired-interface.diagnostics.json +6 -0
  365. package/fixtures/language/registry/fail/retired-interface.ia +9 -0
  366. package/fixtures/language/registry/fail/retired-protocol.diagnostics.json +6 -0
  367. package/fixtures/language/registry/fail/retired-protocol.ia +9 -0
  368. package/fixtures/language/registry/fail/retired-shape.diagnostics.json +6 -0
  369. package/fixtures/language/registry/fail/retired-shape.ia +9 -0
  370. package/fixtures/language/registry/fail/schema-entry-missing.diagnostics.json +1 -0
  371. package/fixtures/language/registry/fail/schema-entry-missing.ia +9 -0
  372. package/fixtures/language/registry/fail/schema-kind-mismatch.diagnostics.json +1 -0
  373. package/fixtures/language/registry/fail/schema-kind-mismatch.ia +13 -0
  374. package/fixtures/language/registry/fail/schema-missing.diagnostics.json +1 -0
  375. package/fixtures/language/registry/fail/schema-missing.ia +9 -0
  376. package/fixtures/language/registry/fail/system-cycle.diagnostics.json +1 -0
  377. package/fixtures/language/registry/fail/system-cycle.ia +11 -0
  378. package/fixtures/language/registry/fail/system-missing.diagnostics.json +1 -0
  379. package/fixtures/language/registry/fail/system-missing.ia +6 -0
  380. package/fixtures/language/registry/fail/version-not-semver.diagnostics.json +1 -0
  381. package/fixtures/language/registry/fail/version-not-semver.ia +4 -0
  382. package/fixtures/language/registry/pass/requires-order.ia +44 -0
  383. package/fixtures/language/registry/pass/requires-order.records.json +633 -0
  384. package/fixtures/language/schema/fail/edge-as-field.diagnostics.json +1 -0
  385. package/fixtures/language/schema/fail/edge-as-field.ia +7 -0
  386. package/fixtures/language/schema/fail/edge-cardinality-unknown.diagnostics.json +1 -0
  387. package/fixtures/language/schema/fail/edge-cardinality-unknown.ia +7 -0
  388. package/fixtures/language/schema/fail/edge-predicate-unknown.diagnostics.json +1 -0
  389. package/fixtures/language/schema/fail/edge-predicate-unknown.ia +7 -0
  390. package/fixtures/language/schema/fail/field-form-unknown.diagnostics.json +1 -0
  391. package/fixtures/language/schema/fail/field-form-unknown.ia +7 -0
  392. package/fixtures/language/schema/fail/field-path-malformed.diagnostics.json +1 -0
  393. package/fixtures/language/schema/fail/field-path-malformed.ia +7 -0
  394. package/fixtures/language/schema/fail/field-set-not-id.diagnostics.json +1 -0
  395. package/fixtures/language/schema/fail/field-set-not-id.ia +7 -0
  396. package/fixtures/language/schema/fail/field-type-unknown.diagnostics.json +1 -0
  397. package/fixtures/language/schema/fail/field-type-unknown.ia +7 -0
  398. package/fixtures/language/schema/fail/kind-unknown.diagnostics.json +1 -0
  399. package/fixtures/language/schema/fail/kind-unknown.ia +5 -0
  400. package/fixtures/language/schema/fail/lowers-to-missing.diagnostics.json +1 -0
  401. package/fixtures/language/schema/fail/lowers-to-missing.ia +4 -0
  402. package/fixtures/language/schema/fail/sections-unclosed.diagnostics.json +1 -0
  403. package/fixtures/language/schema/fail/sections-unclosed.ia +5 -0
  404. package/fixtures/language/schema/pass/field-narrowing.ia +13 -0
  405. package/fixtures/language/schema/pass/field-narrowing.records.json +170 -0
  406. package/fixtures/language/schema/pass/full-dialect.ia +16 -0
  407. package/fixtures/language/schema/pass/full-dialect.records.json +179 -0
  408. package/fixtures/language/selectors/fail/child-condition.diagnostics.json +6 -0
  409. package/fixtures/language/selectors/fail/child-condition.ia +61 -0
  410. package/fixtures/language/selectors/fail/dangling-and.diagnostics.json +6 -0
  411. package/fixtures/language/selectors/fail/dangling-and.ia +60 -0
  412. package/fixtures/language/selectors/fail/dimension-not-axis.diagnostics.json +6 -0
  413. package/fixtures/language/selectors/fail/dimension-not-axis.ia +60 -0
  414. package/fixtures/language/selectors/fail/missing-is.diagnostics.json +6 -0
  415. package/fixtures/language/selectors/fail/missing-is.ia +60 -0
  416. package/fixtures/language/selectors/fail/quoted-value.diagnostics.json +6 -0
  417. package/fixtures/language/selectors/fail/quoted-value.ia +60 -0
  418. package/fixtures/language/selectors/fail/repeated-axis.diagnostics.json +6 -0
  419. package/fixtures/language/selectors/fail/repeated-axis.ia +60 -0
  420. package/fixtures/language/selectors/fail/unknown-axis.diagnostics.json +6 -0
  421. package/fixtures/language/selectors/fail/unknown-axis.ia +60 -0
  422. package/fixtures/language/selectors/fail/unknown-value.diagnostics.json +6 -0
  423. package/fixtures/language/selectors/fail/unknown-value.ia +60 -0
  424. package/fixtures/language/selectors/fail/wrong-grammar-case.diagnostics.json +6 -0
  425. package/fixtures/language/selectors/fail/wrong-grammar-case.ia +60 -0
  426. package/fixtures/language/selectors/pass/all-axes-canonical-values.ia +136 -0
  427. package/fixtures/language/selectors/pass/all-axes-canonical-values.records.json +2437 -0
  428. package/fixtures/language/strings/fail/unterminated-block.diagnostics.json +1 -0
  429. package/fixtures/language/strings/fail/unterminated-block.ia +6 -0
  430. package/fixtures/language/strings/fail/unterminated.diagnostics.json +1 -0
  431. package/fixtures/language/strings/fail/unterminated.ia +4 -0
  432. package/fixtures/language/strings/pass/structural-words.ast.json +21 -0
  433. package/fixtures/language/strings/pass/structural-words.ia +4 -0
  434. package/fixtures/language/values/fail/key-missing.diagnostics.json +1 -0
  435. package/fixtures/language/values/fail/key-missing.ia +4 -0
  436. package/fixtures/language/values/fail/trailing.diagnostics.json +1 -0
  437. package/fixtures/language/values/fail/trailing.ia +4 -0
  438. package/fixtures/language/values/fail/when-empty.diagnostics.json +1 -0
  439. package/fixtures/language/values/fail/when-empty.ia +4 -0
  440. package/fixtures/language/values/fail/when-list.diagnostics.json +1 -0
  441. package/fixtures/language/values/fail/when-list.ia +4 -0
  442. package/fixtures/language/values/pass/forms.ast.json +177 -0
  443. package/fixtures/language/values/pass/forms.ia +11 -0
  444. package/fixtures/language/variants/fail/duplicate-canonical-conjunction.diagnostics.json +14 -0
  445. package/fixtures/language/variants/fail/duplicate-canonical-conjunction.ia +63 -0
  446. package/fixtures/language/variants/fail/duplicate-fallback.diagnostics.json +10 -0
  447. package/fixtures/language/variants/fail/duplicate-fallback.ia +61 -0
  448. package/fixtures/language/variants/pass/fallback-and-coordinate-families.ia +65 -0
  449. package/fixtures/language/variants/pass/fallback-and-coordinate-families.records.json +971 -0
  450. package/fixtures/loop/.ia/src/blocking.ia +8 -0
  451. package/fixtures/loop/.ia/src/choice-a.ia +9 -0
  452. package/fixtures/loop/.ia/src/choice-b.ia +9 -0
  453. package/fixtures/loop/.ia/src/declared-decision.ia +12 -0
  454. package/fixtures/loop/.ia/src/fallback.ia +9 -0
  455. package/fixtures/loop/.ia/src/floor/artifact-set.ia +65 -0
  456. package/fixtures/loop/.ia/src/floor/axis.ia +74 -0
  457. package/fixtures/loop/.ia/src/floor/cardinality.ia +23 -0
  458. package/fixtures/loop/.ia/src/floor/category.ia +107 -0
  459. package/fixtures/loop/.ia/src/floor/dimension.ia +29 -0
  460. package/fixtures/loop/.ia/src/floor/floor.schema.ia +23 -0
  461. package/fixtures/loop/.ia/src/floor/intent-shape.ia +73 -0
  462. package/fixtures/loop/.ia/src/floor/kernel.schema.ia +173 -0
  463. package/fixtures/loop/.ia/src/floor/kind.ia +59 -0
  464. package/fixtures/loop/.ia/src/floor/lane.ia +44 -0
  465. package/fixtures/loop/.ia/src/floor/move.ia +37 -0
  466. package/fixtures/loop/.ia/src/floor/phase.ia +30 -0
  467. package/fixtures/loop/.ia/src/floor/placement.ia +42 -0
  468. package/fixtures/loop/.ia/src/floor/predicate.ia +164 -0
  469. package/fixtures/loop/.ia/src/floor/primitive.ia +50 -0
  470. package/fixtures/loop/.ia/src/floor/taxonomy.system.ia +67 -0
  471. package/fixtures/loop/.ia/src/floor/value-type.ia +44 -0
  472. package/fixtures/loop/.ia/src/systems/agent-system/records/foreign.ia +9 -0
  473. package/fixtures/loop/.ia/src/systems/agent-system/records/sample-mandate.ia +8 -0
  474. package/fixtures/loop/.ia/src/systems/agent-system/schemas/agent.schema.ia +13 -0
  475. package/fixtures/loop/.ia/src/systems/agent-system/schemas/mandate.schema.ia +12 -0
  476. package/fixtures/loop/.ia/src/systems/agent-system/steward.ia +9 -0
  477. package/fixtures/loop/.ia/src/systems/agent-system/system.ia +25 -0
  478. package/fixtures/loop/.ia/src/systems/compliance-system/cases/foreign-vocabulary.ia +14 -0
  479. package/fixtures/loop/.ia/src/systems/compliance-system/cases/missing-required-field.ia +14 -0
  480. package/fixtures/loop/.ia/src/systems/compliance-system/cases/valid-native-record.ia +15 -0
  481. package/fixtures/loop/.ia/src/systems/compliance-system/checks/instance-schema-check.ia +13 -0
  482. package/fixtures/loop/.ia/src/systems/compliance-system/contracts/foundation-authoring-contract.ia +15 -0
  483. package/fixtures/loop/.ia/src/systems/compliance-system/schemas/case.schema.ia +17 -0
  484. package/fixtures/loop/.ia/src/systems/compliance-system/schemas/check.schema.ia +15 -0
  485. package/fixtures/loop/.ia/src/systems/compliance-system/schemas/contract.schema.ia +20 -0
  486. package/fixtures/loop/.ia/src/systems/compliance-system/steward.ia +9 -0
  487. package/fixtures/loop/.ia/src/systems/compliance-system/system.ia +29 -0
  488. package/fixtures/loop/.ia/src/systems/governance-system/records/sample-convention.ia +9 -0
  489. package/fixtures/loop/.ia/src/systems/governance-system/records/sample-principle.ia +9 -0
  490. package/fixtures/loop/.ia/src/systems/governance-system/records/sample-procedure.ia +44 -0
  491. package/fixtures/loop/.ia/src/systems/governance-system/records/sample-rule.ia +13 -0
  492. package/fixtures/loop/.ia/src/systems/governance-system/schemas/convention.schema.ia +13 -0
  493. package/fixtures/loop/.ia/src/systems/governance-system/schemas/law.schema.ia +13 -0
  494. package/fixtures/loop/.ia/src/systems/governance-system/schemas/playbook.schema.ia +14 -0
  495. package/fixtures/loop/.ia/src/systems/governance-system/schemas/principle.schema.ia +13 -0
  496. package/fixtures/loop/.ia/src/systems/governance-system/steward.ia +9 -0
  497. package/fixtures/loop/.ia/src/systems/governance-system/system.ia +35 -0
  498. package/fixtures/loop/.ia/src/systems/session-system/records/sample-session.ia +10 -0
  499. package/fixtures/loop/.ia/src/systems/session-system/schemas/run.schema.ia +15 -0
  500. package/fixtures/loop/.ia/src/systems/session-system/steward.ia +9 -0
  501. package/fixtures/loop/.ia/src/systems/session-system/system.ia +23 -0
  502. package/fixtures/loop/.ia/src/systems/workspace-system/records/foundation-distribution.ia +8 -0
  503. package/fixtures/loop/.ia/src/systems/workspace-system/records/foundation-workspace.ia +10 -0
  504. package/fixtures/loop/.ia/src/systems/workspace-system/schemas/distribution.schema.ia +13 -0
  505. package/fixtures/loop/.ia/src/systems/workspace-system/schemas/workspace.schema.ia +13 -0
  506. package/fixtures/loop/.ia/src/systems/workspace-system/steward.ia +9 -0
  507. package/fixtures/loop/.ia/src/systems/workspace-system/system.ia +26 -0
  508. package/fixtures/loop/README.md +3 -0
  509. package/fixtures/loop/SPEC.md +9 -0
  510. package/fixtures/refusals.ts +434 -0
  511. package/package.json +129 -3
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ import type { CompiledValue, FieldType, TextForm } from '@inventarch/language';
2
+ /** Whether a schema field type is `list of T`: the one family a key may carry more than once (D3). */
3
+ export declare function isListType(type: FieldType): boolean;
4
+ /** Type predicates over already parsed values, never over IA source. */
5
+ export declare function matchesType(value: CompiledValue, type: FieldType): boolean;
6
+ /** Text-form predicates (W0-L5) over already type-checked text. `iso-date` is `YYYY-MM-DD` and a real calendar date. */
7
+ export declare function matchesForm(text: string, form: TextForm): boolean;
8
+ //# sourceMappingURL=values.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.d.ts","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAa,MAAM,sBAAsB,CAAC;AAE1F,sGAAsG;AACtG,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,OAAO,CAEnD;AACD,wEAAwE;AACxE,wBAAgB,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,GAAG,OAAO,CAK1E;AAmBD,wHAAwH;AACxH,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,GAAG,OAAO,CAajE"}
package/dist/values.js ADDED
@@ -0,0 +1,47 @@
1
+ import { isId, isKind } from '@inventarch/language';
2
+ /** Whether a schema field type is `list of T`: the one family a key may carry more than once (D3). */
3
+ export function isListType(type) {
4
+ return type.startsWith('list of ');
5
+ }
6
+ /** Type predicates over already parsed values, never over IA source. */
7
+ export function matchesType(value, type) {
8
+ if (isListType(type)) {
9
+ return value.kind === 'list' && value.items.every((item) => matchesScalar(item, type.slice(8)));
10
+ }
11
+ return matchesScalar(value, type);
12
+ }
13
+ function matchesScalar(value, type) {
14
+ if (type === 'ref')
15
+ return value.kind === 'ref';
16
+ if (type === 'flag')
17
+ return value.kind === 'none' || (value.kind === 'scalar' && ['true', 'false'].includes(value.text));
18
+ if (type === 'text')
19
+ return value.kind === 'scalar' || value.kind === 'string' || value.kind === 'prose';
20
+ if (value.kind !== 'scalar' && value.kind !== 'string')
21
+ return false;
22
+ switch (type) {
23
+ case 'id':
24
+ return isId(value.text);
25
+ case 'number':
26
+ return /^[+-]?(?:\d+(?:\.\d+)?|\.\d+)(?:[eE][+-]?\d+)?$/.test(value.text) && Number.isFinite(Number(value.text));
27
+ case 'qname': {
28
+ const slots = value.text.split('/');
29
+ return slots.length === 4 && slots.every((slot) => /^[a-z][a-z0-9-]*$/.test(slot)) && isKind(slots[1]);
30
+ }
31
+ }
32
+ }
33
+ /** Text-form predicates (W0-L5) over already type-checked text. `iso-date` is `YYYY-MM-DD` and a real calendar date. */
34
+ export function matchesForm(text, form) {
35
+ switch (form) {
36
+ case 'iso-date': {
37
+ const match = /^(\d{4})-(\d{2})-(\d{2})$/.exec(text);
38
+ if (match === null)
39
+ return false;
40
+ const year = Number(match[1]), month = Number(match[2]), day = Number(match[3]);
41
+ const leap = year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);
42
+ const days = [31, leap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month - 1];
43
+ return days !== undefined && day >= 1 && day <= days;
44
+ }
45
+ }
46
+ }
47
+ //# sourceMappingURL=values.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"values.js","sourceRoot":"","sources":["../src/values.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Node } from '@inventarch/graph';
2
+ import type { Assessment } from './types.js';
3
+ export declare function validateVariants(node: Node): Assessment;
4
+ //# sourceMappingURL=variants.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../src/variants.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAc,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAG1D,OAAO,KAAK,EAAE,UAAU,EAAW,MAAM,YAAY,CAAC;AAoDtD,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,IAAI,GAAG,UAAU,CA8CvD"}
@@ -0,0 +1,82 @@
1
+ import { CONDITION_AXES, valuesFor } from '@inventarch/language';
2
+ import { conditionHolds } from '@inventarch/graph';
3
+ import { finding } from './graph-checks.js';
4
+ import { assess } from './types.js';
5
+ function constraint(variant, node) {
6
+ const cube = new Map();
7
+ for (const term of variant.condition ?? []) {
8
+ if (term.axis === 'provenance' || term.axis === 'artifact-set') {
9
+ if (!conditionHolds([term], node.dimensions, {}))
10
+ return undefined;
11
+ }
12
+ else if (term.axis === 'severity') {
13
+ const values = [undefined, ...valuesFor('severity')].filter((value) => conditionHolds([term], node.dimensions, value === undefined ? {} : { severity: value }));
14
+ if (values.length === 0)
15
+ return undefined;
16
+ cube.set('severity', values);
17
+ }
18
+ else
19
+ cube.set(term.axis, [term.value]);
20
+ }
21
+ return cube;
22
+ }
23
+ const intersects = (a, b) => a.some((value) => b.includes(value));
24
+ /** Find a point in base outside the union of stronger clause cubes. Each split
25
+ * strictly reduces a finite domain; no Cartesian-product allocation or cutoff. */
26
+ function uncovered(base, stronger) {
27
+ const overlaps = stronger.filter((cube) => [...cube].every(([axis, values]) => intersects(base.get(axis), values)));
28
+ if (overlaps.length === 0)
29
+ return Object.freeze(Object.fromEntries([...base].filter(([, values]) => values[0] !== undefined).map(([axis, values]) => [axis, values[0]])));
30
+ if (overlaps.some((cube) => [...cube].every(([axis, values]) => base.get(axis).every((value) => values.includes(value)))))
31
+ return undefined;
32
+ for (const [axis, values] of overlaps[0]) {
33
+ const domain = base.get(axis);
34
+ const inside = domain.filter((value) => values.includes(value)), outside = domain.filter((value) => !values.includes(value));
35
+ if (inside.length === 0 || outside.length === 0)
36
+ continue;
37
+ for (const part of [outside, inside]) {
38
+ const narrowed = new Map(base);
39
+ narrowed.set(axis, part);
40
+ const witness = uncovered(narrowed, overlaps);
41
+ if (witness !== undefined)
42
+ return witness;
43
+ }
44
+ return undefined;
45
+ }
46
+ throw new Error('Finite ambiguity search failed to refine an overlapping region');
47
+ }
48
+ export function validateVariants(node) {
49
+ const families = new Map(), findings = [];
50
+ for (const variant of node.variants) {
51
+ const group = families.get(variant.key) ?? [];
52
+ group.push(variant);
53
+ families.set(variant.key, group);
54
+ }
55
+ for (const [key, family] of [...families].sort(([a], [b]) => (a < b ? -1 : a > b ? 1 : 0))) {
56
+ const clauses = family
57
+ .map((variant) => ({ variant, cube: constraint(variant, node), specificity: variant.condition?.length ?? 0 }))
58
+ .filter((entry) => entry.cube !== undefined)
59
+ .sort((a, b) => a.variant.span.line - b.variant.span.line);
60
+ const axes = CONDITION_AXES.filter((axis) => clauses.some((clause) => clause.cube.has(axis)));
61
+ let found = false;
62
+ for (let i = 0; i < clauses.length && !found; i++)
63
+ for (let j = i + 1; j < clauses.length && !found; j++) {
64
+ const a = clauses[i], b = clauses[j];
65
+ if (a.specificity !== b.specificity)
66
+ continue;
67
+ const base = new Map(axes.map((axis) => [
68
+ axis,
69
+ [undefined, ...valuesFor(axis)].filter((value) => (a.cube.get(axis)?.includes(value) ?? true) && (b.cube.get(axis)?.includes(value) ?? true)),
70
+ ]));
71
+ if ([...base.values()].some((values) => values.length === 0))
72
+ continue;
73
+ const witness = uncovered(base, clauses.filter((clause) => clause.specificity > a.specificity).map((clause) => clause.cube));
74
+ if (witness === undefined)
75
+ continue;
76
+ findings.push(finding('IA-COMP-VARIANT-AMBIGUOUS', node, `${key} ties at maximum specificity ${a.specificity} between lines ${a.variant.span.line} and ${b.variant.span.line}; coordinate ${JSON.stringify(witness)}`, a.variant.span.line));
77
+ found = true;
78
+ }
79
+ }
80
+ return assess('COMP-VARIANT', node.identity, findings);
81
+ }
82
+ //# sourceMappingURL=variants.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"variants.js","sourceRoot":"","sources":["../src/variants.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { CompiledRecord } from '@inventarch/language';
2
+ import type { HostArtifacts, ProjectionMembership } from './projections.js';
3
+ export declare const WORKSPACE_PROJECTION_MARKER = "<!-- Generated by ia host; edit the cited native records. -->";
4
+ export interface WorkspaceProjectionInput {
5
+ readonly host: 'claude' | 'codex';
6
+ /** HOST_MODES rows from @inventarch/distribution/host-modes, rendered with the literal `<cache>` placeholder. */
7
+ readonly modes: readonly {
8
+ readonly invocation: string;
9
+ readonly meaning: string;
10
+ }[];
11
+ readonly distributions: readonly {
12
+ readonly id: string;
13
+ readonly version: string;
14
+ }[];
15
+ readonly operations: readonly string[];
16
+ }
17
+ /**
18
+ * Spec §6.1: systems, stewards, distributions, door, launcher modes. No named procedure is required.
19
+ * Shares every refusal condition with renderHostArtifacts through admittedStewards (projections.ts).
20
+ */
21
+ export declare function renderWorkspaceProjection(records: readonly CompiledRecord[], revision: string, membership: ProjectionMembership, input: WorkspaceProjectionInput): HostArtifacts;
22
+ //# sourceMappingURL=workspace-projection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-projection.d.ts","sourceRoot":"","sources":["../src/workspace-projection.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAI3D,OAAO,KAAK,EAAgB,aAAa,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAE1F,eAAO,MAAM,2BAA2B,kEAAkE,CAAC;AAC3G,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IAClC,iHAAiH;IACjH,QAAQ,CAAC,KAAK,EAAE,SAAS;QAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrF,QAAQ,CAAC,aAAa,EAAE,SAAS;QAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IACrF,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;CACxC;AACD;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,oBAAoB,EAChC,KAAK,EAAE,wBAAwB,GAC9B,aAAa,CA2Df"}
@@ -0,0 +1,68 @@
1
+ import { assess } from './types.js';
2
+ import { admittedStewards, cite, governanceClauses, invalidAssessment } from './projections.js';
3
+ import { says } from './record-text.js';
4
+ export const WORKSPACE_PROJECTION_MARKER = '<!-- Generated by ia host; edit the cited native records. -->';
5
+ /**
6
+ * Spec §6.1: systems, stewards, distributions, door, launcher modes. No named procedure is required.
7
+ * Shares every refusal condition with renderHostArtifacts through admittedStewards (projections.ts).
8
+ */
9
+ export function renderWorkspaceProjection(records, revision, membership, input) {
10
+ const admitted = admittedStewards(records, revision, membership);
11
+ if ('artifacts' in admitted)
12
+ return admitted;
13
+ const rows = [], agents = [];
14
+ for (const { system, member, agent } of admitted.systems) {
15
+ rows.push(`- ${system.name}: steward ${agent.name}; ${cite(system)}; ${cite(agent)}.`);
16
+ // Host plugin distribution spec §10 (amends M5.3 §6.2): a steward follows its system into the workspace, authored
17
+ // or installed; admittedStewards already excludes the floor, so every file here has records to ground on.
18
+ if (input.host === 'claude') {
19
+ // A list-form (block) clause renders as bullets; an empty clause is refused, as in renderHostArtifacts.
20
+ const rendered = governanceClauses(agent, ['applies', 'requires']);
21
+ if (!rendered.ok)
22
+ return invalidAssessment(`Steward ${agent.name}: empty ${rendered.key} clause`);
23
+ const clauses = rendered.text;
24
+ // C24, as projections.ts marks adopted sources: a steward whose system is installed or adopted cannot repair its
25
+ // definitions (the steward guard refuses those paths), so it reviews them and authors only local contributions.
26
+ const local = member.root === `.ia/src/systems/${system.name}`;
27
+ const description = local
28
+ ? `Use for authoring, reviewing or repairing records owned by ${system.name}.`
29
+ : `Use for reviewing records owned by ${system.name} and for authoring its permitted local contributions.`;
30
+ const immutable = local
31
+ ? ''
32
+ : '\nInstalled or adopted definition sources are immutable. Author permitted project contributions in the local system folder; do not edit the cited source paths.\n';
33
+ agents.push({
34
+ path: `.claude/agents/${agent.name}.md`,
35
+ text: `---\nname: ${agent.name}\ndescription: ${JSON.stringify(description)}\n---\n\n${WORKSPACE_PROJECTION_MARKER}\n\nSource revision: ${revision}\n\nSources: ${cite(system)}; ${cite(agent)}.\n\n# ${agent.name}\n\n${says(agent)}\n${clauses ? '\n' + clauses + '\n' : ''}${immutable}`,
36
+ });
37
+ }
38
+ }
39
+ const distributions = input.distributions.length
40
+ ? input.distributions
41
+ .slice()
42
+ .sort((a, b) => (a.id < b.id ? -1 : 1))
43
+ .map((d) => `- ${d.id} ${d.version}`)
44
+ .join('\n')
45
+ : '- none';
46
+ const modes = input.modes.map((m) => `- \`${m.invocation}\`: ${m.meaning}`).join('\n');
47
+ // Operator decision 2026-09-23: Claude is the host that registers the steward guard; the sentence states its rule, not that it ran.
48
+ const guard = input.host === 'claude'
49
+ ? `\n\nWhen the steward guard is registered, edits under .ia/src/systems/<name>/ are accepted only from that system's steward subagent.`
50
+ : '';
51
+ const instructions = `${WORKSPACE_PROJECTION_MARKER}\n\n# IA workspace\n\nSource revision: ${revision}\n\n## Systems and stewards\n\n${rows.join('\n')}${guard}\n\n## Installed distributions\n\n${distributions}\n\n## Reaching the door\n\nThe MCP server \`ia-workspace\` serves this workspace read-only. For one-shot queries run \`ia <operation> --root <workspace>\`, where the operation is one of: ${input.operations.join(', ')}.\n\n## Launcher modes\n\n\`ia doctor\` reports the path of \`<cache>\`.\n\n${modes}\n\n\n## User-level state\n\n~/.ia is the user-level IA home, not a workspace; ia doctor reports it.\n\nThis file is a projection of records. Adding text to it creates no rule; rules are authored records.\n`;
52
+ const skill = `---\nname: ia-authoring\ndescription: Author or review IA records in this workspace.\n---\n\n${WORKSPACE_PROJECTION_MARKER}\n\nSource revision: ${revision}\n\nFind a word and its schema with \`ia vocabulary <word> --schema\`. Check records with \`ia validate\`. Inspect an admitted record with \`ia inspect <identity>\`. Validation establishes conformance to the declared schemas, not design quality.\n`;
53
+ const artifacts = input.host === 'claude'
54
+ ? [
55
+ { path: '.claude/rules/ia-workspace.md', text: instructions },
56
+ { path: '.claude/skills/ia-authoring/SKILL.md', text: skill },
57
+ ...agents,
58
+ ]
59
+ : [
60
+ { path: 'AGENTS.md', text: instructions },
61
+ { path: '.agents/skills/ia-authoring/SKILL.md', text: skill },
62
+ ];
63
+ return Object.freeze({
64
+ assessment: assess('COMP-PROJECTIONS', 'repository', []),
65
+ artifacts: Object.freeze(artifacts.map((a) => Object.freeze(a))),
66
+ });
67
+ }
68
+ //# sourceMappingURL=workspace-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"workspace-projection.js","sourceRoot":"","sources":["../src/workspace-projection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ [
2
+ {
3
+ "code": "IA-LANG-CASE-MALFORMED",
4
+ "line": 61
5
+ },
6
+ {
7
+ "code": "IA-LANG-CASE-MALFORMED",
8
+ "line": 65
9
+ }
10
+ ]
@@ -0,0 +1,72 @@
1
+ #! ia 1.0
2
+ @system fixture-system
3
+ provider "conformance"
4
+ version "1.0.0"
5
+ discriminators
6
+ playbook lowers to governance
7
+ category process
8
+ facets [head]
9
+ schema @schema playbook
10
+ law lowers to governance
11
+ category process
12
+ facets [head]
13
+ schema @schema law
14
+ contract lowers to contract
15
+ category process
16
+ facets [head]
17
+ schema @schema contract
18
+ case lowers to check
19
+ category process
20
+ facets [head]
21
+ schema @schema case
22
+ edges
23
+ govern * using *
24
+ enforce * using *
25
+ ground * using *
26
+ constrain * using *
27
+ implement * using *
28
+ produce * using *
29
+ consume * using *
30
+ record-lineage-from * using *
31
+ grant-access-to * using *
32
+ run-before * using *
33
+ trigger * using *
34
+ cite * using *
35
+ supersede * using *
36
+ require * using *
37
+ use * using *
38
+ forbid * using *
39
+ route * using *
40
+ land * using *
41
+ @schema playbook
42
+ lowers to governance
43
+ sections
44
+ open
45
+ @schema law
46
+ lowers to governance
47
+ sections
48
+ open
49
+ @schema contract
50
+ lowers to contract
51
+ sections
52
+ open
53
+ @schema case
54
+ lowers to check
55
+ sections
56
+ open
57
+ @playbook target
58
+ @case example
59
+ scenario
60
+ kind success
61
+ given "input"
62
+ request "act"
63
+ expected "output"
64
+ evaluator "reviewer"
65
+ given "again"
66
+ relationships
67
+ implements @contract signature#REQ-A
68
+ @contract signature
69
+ relationships
70
+ governs @playbook target
71
+ inputs
72
+ REQ-A "text"
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "code": "IA-LANG-CASE-MALFORMED",
4
+ "line": 61
5
+ }
6
+ ]
@@ -0,0 +1,71 @@
1
+ #! ia 1.0
2
+ @system fixture-system
3
+ provider "conformance"
4
+ version "1.0.0"
5
+ discriminators
6
+ playbook lowers to governance
7
+ category process
8
+ facets [head]
9
+ schema @schema playbook
10
+ law lowers to governance
11
+ category process
12
+ facets [head]
13
+ schema @schema law
14
+ contract lowers to contract
15
+ category process
16
+ facets [head]
17
+ schema @schema contract
18
+ case lowers to check
19
+ category process
20
+ facets [head]
21
+ schema @schema case
22
+ edges
23
+ govern * using *
24
+ enforce * using *
25
+ ground * using *
26
+ constrain * using *
27
+ implement * using *
28
+ produce * using *
29
+ consume * using *
30
+ record-lineage-from * using *
31
+ grant-access-to * using *
32
+ run-before * using *
33
+ trigger * using *
34
+ cite * using *
35
+ supersede * using *
36
+ require * using *
37
+ use * using *
38
+ forbid * using *
39
+ route * using *
40
+ land * using *
41
+ @schema playbook
42
+ lowers to governance
43
+ sections
44
+ open
45
+ @schema law
46
+ lowers to governance
47
+ sections
48
+ open
49
+ @schema contract
50
+ lowers to contract
51
+ sections
52
+ open
53
+ @schema case
54
+ lowers to check
55
+ sections
56
+ open
57
+ @playbook target
58
+ @case example
59
+ scenario
60
+ kind success
61
+ given bare
62
+ request "act"
63
+ expected "output"
64
+ evaluator "reviewer"
65
+ relationships
66
+ implements @contract signature#REQ-A
67
+ @contract signature
68
+ relationships
69
+ governs @playbook target
70
+ inputs
71
+ REQ-A "text"
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "code": "IA-LANG-CASE-MALFORMED",
4
+ "line": 59
5
+ }
6
+ ]
@@ -0,0 +1,72 @@
1
+ #! ia 1.0
2
+ @system fixture-system
3
+ provider "conformance"
4
+ version "1.0.0"
5
+ discriminators
6
+ playbook lowers to governance
7
+ category process
8
+ facets [head]
9
+ schema @schema playbook
10
+ law lowers to governance
11
+ category process
12
+ facets [head]
13
+ schema @schema law
14
+ contract lowers to contract
15
+ category process
16
+ facets [head]
17
+ schema @schema contract
18
+ case lowers to check
19
+ category process
20
+ facets [head]
21
+ schema @schema case
22
+ edges
23
+ govern * using *
24
+ enforce * using *
25
+ ground * using *
26
+ constrain * using *
27
+ implement * using *
28
+ produce * using *
29
+ consume * using *
30
+ record-lineage-from * using *
31
+ grant-access-to * using *
32
+ run-before * using *
33
+ trigger * using *
34
+ cite * using *
35
+ supersede * using *
36
+ require * using *
37
+ use * using *
38
+ forbid * using *
39
+ route * using *
40
+ land * using *
41
+ @schema playbook
42
+ lowers to governance
43
+ sections
44
+ open
45
+ @schema law
46
+ lowers to governance
47
+ sections
48
+ open
49
+ @schema contract
50
+ lowers to contract
51
+ sections
52
+ open
53
+ @schema case
54
+ lowers to check
55
+ sections
56
+ open
57
+ @playbook target
58
+ @case example
59
+ verdict "pass"
60
+ scenario
61
+ kind success
62
+ given "input"
63
+ request "act"
64
+ expected "output"
65
+ evaluator "reviewer"
66
+ relationships
67
+ implements @contract signature#REQ-A
68
+ @contract signature
69
+ relationships
70
+ governs @playbook target
71
+ inputs
72
+ REQ-A "text"
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "code": "IA-LANG-CASE-MALFORMED",
4
+ "line": 59
5
+ }
6
+ ]
@@ -0,0 +1,70 @@
1
+ #! ia 1.0
2
+ @system fixture-system
3
+ provider "conformance"
4
+ version "1.0.0"
5
+ discriminators
6
+ playbook lowers to governance
7
+ category process
8
+ facets [head]
9
+ schema @schema playbook
10
+ law lowers to governance
11
+ category process
12
+ facets [head]
13
+ schema @schema law
14
+ contract lowers to contract
15
+ category process
16
+ facets [head]
17
+ schema @schema contract
18
+ case lowers to check
19
+ category process
20
+ facets [head]
21
+ schema @schema case
22
+ edges
23
+ govern * using *
24
+ enforce * using *
25
+ ground * using *
26
+ constrain * using *
27
+ implement * using *
28
+ produce * using *
29
+ consume * using *
30
+ record-lineage-from * using *
31
+ grant-access-to * using *
32
+ run-before * using *
33
+ trigger * using *
34
+ cite * using *
35
+ supersede * using *
36
+ require * using *
37
+ use * using *
38
+ forbid * using *
39
+ route * using *
40
+ land * using *
41
+ @schema playbook
42
+ lowers to governance
43
+ sections
44
+ open
45
+ @schema law
46
+ lowers to governance
47
+ sections
48
+ open
49
+ @schema contract
50
+ lowers to contract
51
+ sections
52
+ open
53
+ @schema case
54
+ lowers to check
55
+ sections
56
+ open
57
+ @playbook target
58
+ @case example
59
+ scenario
60
+ kind success
61
+ given "input"
62
+ request "act"
63
+ expected "output"
64
+ relationships
65
+ implements @contract signature#REQ-A
66
+ @contract signature
67
+ relationships
68
+ governs @playbook target
69
+ inputs
70
+ REQ-A "text"
@@ -0,0 +1,6 @@
1
+ [
2
+ {
3
+ "code": "IA-LANG-CASE-MALFORMED",
4
+ "line": 59
5
+ }
6
+ ]