@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.
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +8 -2
- package/SPEC.md +128 -0
- package/dist/adoption.d.ts +18 -0
- package/dist/adoption.d.ts.map +1 -0
- package/dist/adoption.js +76 -0
- package/dist/adoption.js.map +1 -0
- package/dist/catalog.d.ts +112 -0
- package/dist/catalog.d.ts.map +1 -0
- package/dist/catalog.js +265 -0
- package/dist/catalog.js.map +1 -0
- package/dist/check-ids.d.ts +4 -0
- package/dist/check-ids.d.ts.map +1 -0
- package/dist/check-ids.js +22 -0
- package/dist/check-ids.js.map +1 -0
- package/dist/evidence.d.ts +145 -0
- package/dist/evidence.d.ts.map +1 -0
- package/dist/evidence.js +468 -0
- package/dist/evidence.js.map +1 -0
- package/dist/fixtures.d.ts +29 -0
- package/dist/fixtures.d.ts.map +1 -0
- package/dist/fixtures.js +107 -0
- package/dist/fixtures.js.map +1 -0
- package/dist/graph-checks.d.ts +27 -0
- package/dist/graph-checks.d.ts.map +1 -0
- package/dist/graph-checks.js +184 -0
- package/dist/graph-checks.js.map +1 -0
- package/dist/host-plugin.d.ts +23 -0
- package/dist/host-plugin.d.ts.map +1 -0
- package/dist/host-plugin.js +204 -0
- package/dist/host-plugin.js.map +1 -0
- package/dist/index.d.ts +31 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/obligations.d.ts +157 -0
- package/dist/obligations.d.ts.map +1 -0
- package/dist/obligations.js +301 -0
- package/dist/obligations.js.map +1 -0
- package/dist/profiles.d.ts +27 -0
- package/dist/profiles.d.ts.map +1 -0
- package/dist/profiles.js +40 -0
- package/dist/profiles.js.map +1 -0
- package/dist/projections.d.ts +51 -0
- package/dist/projections.d.ts.map +1 -0
- package/dist/projections.js +124 -0
- package/dist/projections.js.map +1 -0
- package/dist/record-text.d.ts +26 -0
- package/dist/record-text.d.ts.map +1 -0
- package/dist/record-text.js +73 -0
- package/dist/record-text.js.map +1 -0
- package/dist/report.d.ts +25 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +80 -0
- package/dist/report.js.map +1 -0
- package/dist/schema.d.ts +23 -0
- package/dist/schema.d.ts.map +1 -0
- package/dist/schema.js +229 -0
- package/dist/schema.js.map +1 -0
- package/dist/shape.d.ts +18 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +106 -0
- package/dist/shape.js.map +1 -0
- package/dist/steward-profile.d.ts +39 -0
- package/dist/steward-profile.d.ts.map +1 -0
- package/dist/steward-profile.js +143 -0
- package/dist/steward-profile.js.map +1 -0
- package/dist/systems.d.ts +11 -0
- package/dist/systems.d.ts.map +1 -0
- package/dist/systems.js +86 -0
- package/dist/systems.js.map +1 -0
- package/dist/types.d.ts +23 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +92 -0
- package/dist/types.js.map +1 -0
- package/dist/values.d.ts +8 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +47 -0
- package/dist/values.js.map +1 -0
- package/dist/variants.d.ts +4 -0
- package/dist/variants.d.ts.map +1 -0
- package/dist/variants.js +82 -0
- package/dist/variants.js.map +1 -0
- package/dist/workspace-projection.d.ts +22 -0
- package/dist/workspace-projection.d.ts.map +1 -0
- package/dist/workspace-projection.js +68 -0
- package/dist/workspace-projection.js.map +1 -0
- package/fixtures/language/cases/fail/duplicate-given.diagnostics.json +10 -0
- package/fixtures/language/cases/fail/duplicate-given.ia +72 -0
- package/fixtures/language/cases/fail/given-scalar.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/given-scalar.ia +71 -0
- package/fixtures/language/cases/fail/head-verdict.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/head-verdict.ia +72 -0
- package/fixtures/language/cases/fail/missing-evaluator.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/missing-evaluator.ia +70 -0
- package/fixtures/language/cases/fail/missing-expected.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/missing-expected.ia +70 -0
- package/fixtures/language/cases/fail/missing-given.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/missing-given.ia +70 -0
- package/fixtures/language/cases/fail/missing-kind.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/missing-kind.ia +70 -0
- package/fixtures/language/cases/fail/missing-request.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/missing-request.ia +70 -0
- package/fixtures/language/cases/fail/scenario-conditioned-field.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/scenario-conditioned-field.ia +71 -0
- package/fixtures/language/cases/fail/scenario-verdict.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/scenario-verdict.ia +72 -0
- package/fixtures/language/cases/fail/unbound.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/unbound.ia +71 -0
- package/fixtures/language/cases/fail/unknown-kind.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/unknown-kind.ia +71 -0
- package/fixtures/language/cases/fail/verdict-block.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/verdict-block.ia +73 -0
- package/fixtures/language/cases/fail/wrong-fragment.diagnostics.json +6 -0
- package/fixtures/language/cases/fail/wrong-fragment.ia +71 -0
- package/fixtures/language/cases/pass/all-scenario-kinds.ia +107 -0
- package/fixtures/language/cases/pass/all-scenario-kinds.records.json +1558 -0
- package/fixtures/language/cells/fail/duplicate-phase-sections.diagnostics.json +10 -0
- package/fixtures/language/cells/fail/duplicate-phase-sections.ia +64 -0
- package/fixtures/language/cells/fail/duplicate-primary.diagnostics.json +10 -0
- package/fixtures/language/cells/fail/duplicate-primary.ia +63 -0
- package/fixtures/language/cells/fail/duplicate-primitive.diagnostics.json +10 -0
- package/fixtures/language/cells/fail/duplicate-primitive.ia +63 -0
- package/fixtures/language/cells/fail/legacy-primary-move.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/legacy-primary-move.ia +61 -0
- package/fixtures/language/cells/fail/means-list.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/means-list.ia +61 -0
- package/fixtures/language/cells/fail/means-reference.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/means-reference.ia +61 -0
- package/fixtures/language/cells/fail/means-scalar.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/means-scalar.ia +61 -0
- package/fixtures/language/cells/fail/means-unsupported-child.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/means-unsupported-child.ia +62 -0
- package/fixtures/language/cells/fail/phase-unknown.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/phase-unknown.ia +61 -0
- package/fixtures/language/cells/fail/primary-quoted.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/primary-quoted.ia +61 -0
- package/fixtures/language/cells/fail/primary-requires-means.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/primary-requires-means.ia +61 -0
- package/fixtures/language/cells/fail/primary-unknown.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/primary-unknown.ia +61 -0
- package/fixtures/language/cells/fail/primitive-case.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/primitive-case.ia +61 -0
- package/fixtures/language/cells/fail/primitive-unknown.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/primitive-unknown.ia +61 -0
- package/fixtures/language/cells/fail/unsupported-item.diagnostics.json +6 -0
- package/fixtures/language/cells/fail/unsupported-item.ia +61 -0
- package/fixtures/language/cells/pass/full-opal-grid.ia +92 -0
- package/fixtures/language/cells/pass/full-opal-grid.records.json +1450 -0
- package/fixtures/language/compile/fail/blocked-keyword.diagnostics.json +1 -0
- package/fixtures/language/compile/fail/blocked-keyword.ia +22 -0
- package/fixtures/language/compile/fail/discriminator-unregistered.diagnostics.json +1 -0
- package/fixtures/language/compile/fail/discriminator-unregistered.ia +19 -0
- package/fixtures/language/compile/pass/minimal-floor.ia +22 -0
- package/fixtures/language/compile/pass/minimal-floor.records.json +293 -0
- package/fixtures/language/compile/pass/nested-and-items.ia +27 -0
- package/fixtures/language/compile/pass/nested-and-items.records.json +373 -0
- package/fixtures/language/conditions/fail/conflicting-name.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/conflicting-name.ia +60 -0
- package/fixtures/language/conditions/fail/dangling-and.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/dangling-and.ia +60 -0
- package/fixtures/language/conditions/fail/empty-child.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/empty-child.ia +61 -0
- package/fixtures/language/conditions/fail/misplaced-head.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-head.ia +59 -0
- package/fixtures/language/conditions/fail/misplaced-meaning.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-meaning.ia +60 -0
- package/fixtures/language/conditions/fail/misplaced-ordinary-deep.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-ordinary-deep.ia +61 -0
- package/fixtures/language/conditions/fail/misplaced-phase.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-phase.ia +61 -0
- package/fixtures/language/conditions/fail/misplaced-primary.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-primary.ia +62 -0
- package/fixtures/language/conditions/fail/misplaced-severity.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-severity.ia +60 -0
- package/fixtures/language/conditions/fail/misplaced-standalone.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/misplaced-standalone.ia +60 -0
- package/fixtures/language/conditions/fail/missing-is.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/missing-is.ia +60 -0
- package/fixtures/language/conditions/fail/mixed-carriers.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/mixed-carriers.ia +61 -0
- package/fixtures/language/conditions/fail/quoted-value.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/quoted-value.ia +60 -0
- package/fixtures/language/conditions/fail/repeated-child.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/repeated-child.ia +62 -0
- package/fixtures/language/conditions/fail/repeated-name.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/repeated-name.ia +60 -0
- package/fixtures/language/conditions/fail/schema-when-block.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/schema-when-block.ia +64 -0
- package/fixtures/language/conditions/fail/unknown-term.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/unknown-term.ia +60 -0
- package/fixtures/language/conditions/fail/unknown-value.diagnostics.json +6 -0
- package/fixtures/language/conditions/fail/unknown-value.ia +60 -0
- package/fixtures/language/conditions/pass/all-carriers-and-dimensions.ia +71 -0
- package/fixtures/language/conditions/pass/all-carriers-and-dimensions.records.json +1131 -0
- package/fixtures/language/contracts/fail/duplicate-requirement-records.diagnostics.json +10 -0
- package/fixtures/language/contracts/fail/duplicate-requirement-records.ia +67 -0
- package/fixtures/language/contracts/fail/duplicate-requirement-sections.diagnostics.json +10 -0
- package/fixtures/language/contracts/fail/duplicate-requirement-sections.ia +64 -0
- package/fixtures/language/contracts/fail/extra-word.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/extra-word.ia +62 -0
- package/fixtures/language/contracts/fail/id-case.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/id-case.ia +62 -0
- package/fixtures/language/contracts/fail/id-empty.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/id-empty.ia +62 -0
- package/fixtures/language/contracts/fail/retired-binds.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/retired-binds.ia +59 -0
- package/fixtures/language/contracts/fail/retired-schema.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/retired-schema.ia +62 -0
- package/fixtures/language/contracts/fail/text-reference.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/text-reference.ia +62 -0
- package/fixtures/language/contracts/fail/text-scalar.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/text-scalar.ia +62 -0
- package/fixtures/language/contracts/fail/unbound.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/unbound.ia +60 -0
- package/fixtures/language/contracts/fail/unsupported-child.diagnostics.json +6 -0
- package/fixtures/language/contracts/fail/unsupported-child.ia +63 -0
- package/fixtures/language/contracts/pass/all-requirement-kinds.ia +76 -0
- package/fixtures/language/contracts/pass/all-requirement-kinds.records.json +1101 -0
- package/fixtures/language/edges/fail/identity-fragment.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/identity-fragment.ia +60 -0
- package/fixtures/language/edges/fail/identity-kind.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/identity-kind.ia +60 -0
- package/fixtures/language/edges/fail/identity-short.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/identity-short.ia +60 -0
- package/fixtures/language/edges/fail/missing-target.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/missing-target.ia +60 -0
- package/fixtures/language/edges/fail/source-side-unconsented.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/source-side-unconsented.ia +60 -0
- package/fixtures/language/edges/fail/target-absent.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-absent.ia +60 -0
- package/fixtures/language/edges/fail/target-ambiguous.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-ambiguous.ia +60 -0
- package/fixtures/language/edges/fail/target-ambiguous.pool.json +26 -0
- package/fixtures/language/edges/fail/target-bare.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-bare.ia +60 -0
- package/fixtures/language/edges/fail/target-list.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-list.ia +60 -0
- package/fixtures/language/edges/fail/target-quoted.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-quoted.ia +60 -0
- package/fixtures/language/edges/fail/target-side-unconsented.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-side-unconsented.ia +60 -0
- package/fixtures/language/edges/fail/target-trailing-word.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/target-trailing-word.ia +60 -0
- package/fixtures/language/edges/fail/unknown-verb.diagnostics.json +6 -0
- package/fixtures/language/edges/fail/unknown-verb.ia +60 -0
- package/fixtures/language/edges/pass/all-verbs-and-addresses.ia +114 -0
- package/fixtures/language/edges/pass/all-verbs-and-addresses.records.json +2221 -0
- package/fixtures/language/format/fail/lost-comment.candidate.txt +5 -0
- package/fixtures/language/format/fail/lost-comment.diagnostics.json +3 -0
- package/fixtures/language/format/fail/lost-comment.ia +5 -0
- package/fixtures/language/format/pass/token-spacing.ast.json +100 -0
- package/fixtures/language/format/pass/token-spacing.formatted.txt +7 -0
- package/fixtures/language/format/pass/token-spacing.ia +7 -0
- package/fixtures/language/identity/fail/facet-undeclared.diagnostics.json +1 -0
- package/fixtures/language/identity/fail/facet-undeclared.ia +20 -0
- package/fixtures/language/identity/fail/identity-collision.diagnostics.json +1 -0
- package/fixtures/language/identity/fail/identity-collision.ia +20 -0
- package/fixtures/language/identity/pass/facets.ia +21 -0
- package/fixtures/language/identity/pass/facets.records.json +300 -0
- package/fixtures/language/indent/fail/odd-block-with-prose.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/odd-block-with-prose.ia +6 -0
- package/fixtures/language/indent/fail/odd-block.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/odd-block.ia +4 -0
- package/fixtures/language/indent/fail/odd.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/odd.ia +3 -0
- package/fixtures/language/indent/fail/step-block.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/step-block.ia +4 -0
- package/fixtures/language/indent/fail/step-in-block.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/step-in-block.ia +6 -0
- package/fixtures/language/indent/fail/step-under-header.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/step-under-header.ia +3 -0
- package/fixtures/language/indent/fail/tab-block.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/tab-block.ia +5 -0
- package/fixtures/language/indent/fail/tab.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/tab.ia +3 -0
- package/fixtures/language/indent/fail/under-item.diagnostics.json +1 -0
- package/fixtures/language/indent/fail/under-item.ia +5 -0
- package/fixtures/language/indent/pass/blocks.ast.json +127 -0
- package/fixtures/language/indent/pass/blocks.ia +9 -0
- package/fixtures/language/lists/fail/dash-without-value.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/dash-without-value.ia +4 -0
- package/fixtures/language/lists/fail/empty-item.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/empty-item.ia +4 -0
- package/fixtures/language/lists/fail/item-line-list.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/item-line-list.ia +4 -0
- package/fixtures/language/lists/fail/item-line-prose.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/item-line-prose.ia +4 -0
- package/fixtures/language/lists/fail/missing-separator.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/missing-separator.ia +4 -0
- package/fixtures/language/lists/fail/nested-list.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/nested-list.ia +4 -0
- package/fixtures/language/lists/fail/unterminated.diagnostics.json +1 -0
- package/fixtures/language/lists/fail/unterminated.ia +5 -0
- package/fixtures/language/lists/pass/multi-line.ast.json +117 -0
- package/fixtures/language/lists/pass/multi-line.ia +9 -0
- package/fixtures/language/pragma/fail/missing.diagnostics.json +1 -0
- package/fixtures/language/pragma/fail/missing.ia +1 -0
- package/fixtures/language/pragma/fail/unsupported.diagnostics.json +1 -0
- package/fixtures/language/pragma/fail/unsupported.ia +2 -0
- package/fixtures/language/pragma/pass/minimal.ast.json +20 -0
- package/fixtures/language/pragma/pass/minimal.ia +2 -0
- package/fixtures/language/prose/fail/trailing.diagnostics.json +1 -0
- package/fixtures/language/prose/fail/trailing.ia +4 -0
- package/fixtures/language/prose/fail/unterminated.diagnostics.json +1 -0
- package/fixtures/language/prose/fail/unterminated.ia +5 -0
- package/fixtures/language/prose/pass/paragraphs.ast.json +48 -0
- package/fixtures/language/prose/pass/paragraphs.ia +7 -0
- package/fixtures/language/records/fail/head-after-section.diagnostics.json +1 -0
- package/fixtures/language/records/fail/head-after-section.ia +5 -0
- package/fixtures/language/records/fail/header-discriminator-class.diagnostics.json +1 -0
- package/fixtures/language/records/fail/header-discriminator-class.ia +2 -0
- package/fixtures/language/records/fail/header-extra-token.diagnostics.json +1 -0
- package/fixtures/language/records/fail/header-extra-token.ia +2 -0
- package/fixtures/language/records/fail/header-missing-name.diagnostics.json +1 -0
- package/fixtures/language/records/fail/header-missing-name.ia +2 -0
- package/fixtures/language/records/fail/header-name-class.diagnostics.json +1 -0
- package/fixtures/language/records/fail/header-name-class.ia +2 -0
- package/fixtures/language/records/fail/indented-preamble.diagnostics.json +1 -0
- package/fixtures/language/records/fail/indented-preamble.ia +3 -0
- package/fixtures/language/records/fail/item-under-header.diagnostics.json +1 -0
- package/fixtures/language/records/fail/item-under-header.ia +3 -0
- package/fixtures/language/records/fail/nested-under-header.diagnostics.json +1 -0
- package/fixtures/language/records/fail/nested-under-header.ia +3 -0
- package/fixtures/language/records/fail/toplevel.diagnostics.json +1 -0
- package/fixtures/language/records/fail/toplevel.ia +3 -0
- package/fixtures/language/records/pass/full.ast.json +31 -0
- package/fixtures/language/records/pass/full.ia +11 -0
- package/fixtures/language/refs/fail/discriminator-class.diagnostics.json +1 -0
- package/fixtures/language/refs/fail/discriminator-class.ia +4 -0
- package/fixtures/language/refs/fail/name-class.diagnostics.json +1 -0
- package/fixtures/language/refs/fail/name-class.ia +4 -0
- package/fixtures/language/refs/pass/cell-fragment.ast.json +50 -0
- package/fixtures/language/refs/pass/cell-fragment.ia +4 -0
- package/fixtures/language/refs/pass/fragments.ast.json +104 -0
- package/fixtures/language/refs/pass/fragments.ia +6 -0
- package/fixtures/language/registry/fail/category-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/category-missing.ia +8 -0
- package/fixtures/language/registry/fail/category-unknown.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/category-unknown.ia +9 -0
- package/fixtures/language/registry/fail/condition-in-entry.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/condition-in-entry.ia +9 -0
- package/fixtures/language/registry/fail/condition-on-head.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/condition-on-head.ia +4 -0
- package/fixtures/language/registry/fail/consent-predicate-unknown.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/consent-predicate-unknown.ia +6 -0
- package/fixtures/language/registry/fail/consent-row-malformed.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/consent-row-malformed.ia +6 -0
- package/fixtures/language/registry/fail/discriminator-conflict.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/discriminator-conflict.ia +21 -0
- package/fixtures/language/registry/fail/entry-malformed.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/entry-malformed.ia +6 -0
- package/fixtures/language/registry/fail/facets-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/facets-missing.ia +9 -0
- package/fixtures/language/registry/fail/keyword-reserved.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/keyword-reserved.ia +9 -0
- package/fixtures/language/registry/fail/kind-unknown.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/kind-unknown.ia +9 -0
- package/fixtures/language/registry/fail/provider-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/provider-missing.ia +3 -0
- package/fixtures/language/registry/fail/requires-head-field.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/requires-head-field.ia +5 -0
- package/fixtures/language/registry/fail/retired-interface.diagnostics.json +6 -0
- package/fixtures/language/registry/fail/retired-interface.ia +9 -0
- package/fixtures/language/registry/fail/retired-protocol.diagnostics.json +6 -0
- package/fixtures/language/registry/fail/retired-protocol.ia +9 -0
- package/fixtures/language/registry/fail/retired-shape.diagnostics.json +6 -0
- package/fixtures/language/registry/fail/retired-shape.ia +9 -0
- package/fixtures/language/registry/fail/schema-entry-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/schema-entry-missing.ia +9 -0
- package/fixtures/language/registry/fail/schema-kind-mismatch.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/schema-kind-mismatch.ia +13 -0
- package/fixtures/language/registry/fail/schema-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/schema-missing.ia +9 -0
- package/fixtures/language/registry/fail/system-cycle.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/system-cycle.ia +11 -0
- package/fixtures/language/registry/fail/system-missing.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/system-missing.ia +6 -0
- package/fixtures/language/registry/fail/version-not-semver.diagnostics.json +1 -0
- package/fixtures/language/registry/fail/version-not-semver.ia +4 -0
- package/fixtures/language/registry/pass/requires-order.ia +44 -0
- package/fixtures/language/registry/pass/requires-order.records.json +633 -0
- package/fixtures/language/schema/fail/edge-as-field.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/edge-as-field.ia +7 -0
- package/fixtures/language/schema/fail/edge-cardinality-unknown.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/edge-cardinality-unknown.ia +7 -0
- package/fixtures/language/schema/fail/edge-predicate-unknown.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/edge-predicate-unknown.ia +7 -0
- package/fixtures/language/schema/fail/field-form-unknown.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/field-form-unknown.ia +7 -0
- package/fixtures/language/schema/fail/field-path-malformed.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/field-path-malformed.ia +7 -0
- package/fixtures/language/schema/fail/field-set-not-id.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/field-set-not-id.ia +7 -0
- package/fixtures/language/schema/fail/field-type-unknown.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/field-type-unknown.ia +7 -0
- package/fixtures/language/schema/fail/kind-unknown.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/kind-unknown.ia +5 -0
- package/fixtures/language/schema/fail/lowers-to-missing.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/lowers-to-missing.ia +4 -0
- package/fixtures/language/schema/fail/sections-unclosed.diagnostics.json +1 -0
- package/fixtures/language/schema/fail/sections-unclosed.ia +5 -0
- package/fixtures/language/schema/pass/field-narrowing.ia +13 -0
- package/fixtures/language/schema/pass/field-narrowing.records.json +170 -0
- package/fixtures/language/schema/pass/full-dialect.ia +16 -0
- package/fixtures/language/schema/pass/full-dialect.records.json +179 -0
- package/fixtures/language/selectors/fail/child-condition.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/child-condition.ia +61 -0
- package/fixtures/language/selectors/fail/dangling-and.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/dangling-and.ia +60 -0
- package/fixtures/language/selectors/fail/dimension-not-axis.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/dimension-not-axis.ia +60 -0
- package/fixtures/language/selectors/fail/missing-is.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/missing-is.ia +60 -0
- package/fixtures/language/selectors/fail/quoted-value.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/quoted-value.ia +60 -0
- package/fixtures/language/selectors/fail/repeated-axis.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/repeated-axis.ia +60 -0
- package/fixtures/language/selectors/fail/unknown-axis.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/unknown-axis.ia +60 -0
- package/fixtures/language/selectors/fail/unknown-value.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/unknown-value.ia +60 -0
- package/fixtures/language/selectors/fail/wrong-grammar-case.diagnostics.json +6 -0
- package/fixtures/language/selectors/fail/wrong-grammar-case.ia +60 -0
- package/fixtures/language/selectors/pass/all-axes-canonical-values.ia +136 -0
- package/fixtures/language/selectors/pass/all-axes-canonical-values.records.json +2437 -0
- package/fixtures/language/strings/fail/unterminated-block.diagnostics.json +1 -0
- package/fixtures/language/strings/fail/unterminated-block.ia +6 -0
- package/fixtures/language/strings/fail/unterminated.diagnostics.json +1 -0
- package/fixtures/language/strings/fail/unterminated.ia +4 -0
- package/fixtures/language/strings/pass/structural-words.ast.json +21 -0
- package/fixtures/language/strings/pass/structural-words.ia +4 -0
- package/fixtures/language/values/fail/key-missing.diagnostics.json +1 -0
- package/fixtures/language/values/fail/key-missing.ia +4 -0
- package/fixtures/language/values/fail/trailing.diagnostics.json +1 -0
- package/fixtures/language/values/fail/trailing.ia +4 -0
- package/fixtures/language/values/fail/when-empty.diagnostics.json +1 -0
- package/fixtures/language/values/fail/when-empty.ia +4 -0
- package/fixtures/language/values/fail/when-list.diagnostics.json +1 -0
- package/fixtures/language/values/fail/when-list.ia +4 -0
- package/fixtures/language/values/pass/forms.ast.json +177 -0
- package/fixtures/language/values/pass/forms.ia +11 -0
- package/fixtures/language/variants/fail/duplicate-canonical-conjunction.diagnostics.json +14 -0
- package/fixtures/language/variants/fail/duplicate-canonical-conjunction.ia +63 -0
- package/fixtures/language/variants/fail/duplicate-fallback.diagnostics.json +10 -0
- package/fixtures/language/variants/fail/duplicate-fallback.ia +61 -0
- package/fixtures/language/variants/pass/fallback-and-coordinate-families.ia +65 -0
- package/fixtures/language/variants/pass/fallback-and-coordinate-families.records.json +971 -0
- package/fixtures/loop/.ia/src/blocking.ia +8 -0
- package/fixtures/loop/.ia/src/choice-a.ia +9 -0
- package/fixtures/loop/.ia/src/choice-b.ia +9 -0
- package/fixtures/loop/.ia/src/declared-decision.ia +12 -0
- package/fixtures/loop/.ia/src/fallback.ia +9 -0
- package/fixtures/loop/.ia/src/floor/artifact-set.ia +65 -0
- package/fixtures/loop/.ia/src/floor/axis.ia +74 -0
- package/fixtures/loop/.ia/src/floor/cardinality.ia +23 -0
- package/fixtures/loop/.ia/src/floor/category.ia +107 -0
- package/fixtures/loop/.ia/src/floor/dimension.ia +29 -0
- package/fixtures/loop/.ia/src/floor/floor.schema.ia +23 -0
- package/fixtures/loop/.ia/src/floor/intent-shape.ia +73 -0
- package/fixtures/loop/.ia/src/floor/kernel.schema.ia +173 -0
- package/fixtures/loop/.ia/src/floor/kind.ia +59 -0
- package/fixtures/loop/.ia/src/floor/lane.ia +44 -0
- package/fixtures/loop/.ia/src/floor/move.ia +37 -0
- package/fixtures/loop/.ia/src/floor/phase.ia +30 -0
- package/fixtures/loop/.ia/src/floor/placement.ia +42 -0
- package/fixtures/loop/.ia/src/floor/predicate.ia +164 -0
- package/fixtures/loop/.ia/src/floor/primitive.ia +50 -0
- package/fixtures/loop/.ia/src/floor/taxonomy.system.ia +67 -0
- package/fixtures/loop/.ia/src/floor/value-type.ia +44 -0
- package/fixtures/loop/.ia/src/systems/agent-system/records/foreign.ia +9 -0
- package/fixtures/loop/.ia/src/systems/agent-system/records/sample-mandate.ia +8 -0
- package/fixtures/loop/.ia/src/systems/agent-system/schemas/agent.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/agent-system/schemas/mandate.schema.ia +12 -0
- package/fixtures/loop/.ia/src/systems/agent-system/steward.ia +9 -0
- package/fixtures/loop/.ia/src/systems/agent-system/system.ia +25 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/cases/foreign-vocabulary.ia +14 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/cases/missing-required-field.ia +14 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/cases/valid-native-record.ia +15 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/checks/instance-schema-check.ia +13 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/contracts/foundation-authoring-contract.ia +15 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/schemas/case.schema.ia +17 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/schemas/check.schema.ia +15 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/schemas/contract.schema.ia +20 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/steward.ia +9 -0
- package/fixtures/loop/.ia/src/systems/compliance-system/system.ia +29 -0
- package/fixtures/loop/.ia/src/systems/governance-system/records/sample-convention.ia +9 -0
- package/fixtures/loop/.ia/src/systems/governance-system/records/sample-principle.ia +9 -0
- package/fixtures/loop/.ia/src/systems/governance-system/records/sample-procedure.ia +44 -0
- package/fixtures/loop/.ia/src/systems/governance-system/records/sample-rule.ia +13 -0
- package/fixtures/loop/.ia/src/systems/governance-system/schemas/convention.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/governance-system/schemas/law.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/governance-system/schemas/playbook.schema.ia +14 -0
- package/fixtures/loop/.ia/src/systems/governance-system/schemas/principle.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/governance-system/steward.ia +9 -0
- package/fixtures/loop/.ia/src/systems/governance-system/system.ia +35 -0
- package/fixtures/loop/.ia/src/systems/session-system/records/sample-session.ia +10 -0
- package/fixtures/loop/.ia/src/systems/session-system/schemas/run.schema.ia +15 -0
- package/fixtures/loop/.ia/src/systems/session-system/steward.ia +9 -0
- package/fixtures/loop/.ia/src/systems/session-system/system.ia +23 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/records/foundation-distribution.ia +8 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/records/foundation-workspace.ia +10 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/schemas/distribution.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/schemas/workspace.schema.ia +13 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/steward.ia +9 -0
- package/fixtures/loop/.ia/src/systems/workspace-system/system.ia +26 -0
- package/fixtures/loop/README.md +3 -0
- package/fixtures/loop/SPEC.md +9 -0
- package/fixtures/refusals.ts +434 -0
- package/package.json +129 -3
|
@@ -0,0 +1,434 @@
|
|
|
1
|
+
/** Executable boundary fixtures over the actual native corpus. These mutate
|
|
2
|
+
* typed products to exercise refusal APIs; they are not substitute providers. */
|
|
3
|
+
import { KERNEL_DIGEST, LANGUAGE_VERSION } from '@inventarch/language';
|
|
4
|
+
import type { CompiledRecord, FrozenRegistry, SchemaField } from '@inventarch/language';
|
|
5
|
+
import {
|
|
6
|
+
GraphUsageError,
|
|
7
|
+
canonicalRoot,
|
|
8
|
+
load,
|
|
9
|
+
resolve,
|
|
10
|
+
traverse,
|
|
11
|
+
validateCoordinate,
|
|
12
|
+
variants,
|
|
13
|
+
} from '@inventarch/graph';
|
|
14
|
+
import type { Graph, Node, RevisionSource } from '@inventarch/graph';
|
|
15
|
+
import {
|
|
16
|
+
renderHostArtifacts,
|
|
17
|
+
validateAdoption,
|
|
18
|
+
validateCheck,
|
|
19
|
+
validateCoverage,
|
|
20
|
+
validateFragments,
|
|
21
|
+
validateParse,
|
|
22
|
+
validateSchema,
|
|
23
|
+
validateSelectors,
|
|
24
|
+
validateSystems,
|
|
25
|
+
validateVariants,
|
|
26
|
+
runLanguageFixture,
|
|
27
|
+
} from '../src/index.js';
|
|
28
|
+
import type { AdoptionEvaluators, Finding, FixtureResult, SystemFolder } from '../src/index.js';
|
|
29
|
+
import { assess } from '../src/types.js';
|
|
30
|
+
|
|
31
|
+
export function runRefusalFixtures(
|
|
32
|
+
graph: Graph,
|
|
33
|
+
inputs: readonly RevisionSource[],
|
|
34
|
+
folders: readonly SystemFolder[],
|
|
35
|
+
): readonly FixtureResult[] {
|
|
36
|
+
const records = [...graph.nodes.values()],
|
|
37
|
+
registry = graph.registry;
|
|
38
|
+
const agent = records.find((r) => r.discriminator === 'agent')!,
|
|
39
|
+
method = records.find((r) => r.name === 'sample-procedure')!;
|
|
40
|
+
const law = records.find((r) => r.discriminator === 'law')!,
|
|
41
|
+
contract = records.find((r) => r.name === 'foundation-authoring-contract')!,
|
|
42
|
+
check = records.find((r) => r.discriminator === 'check')!;
|
|
43
|
+
const ambiguous: Node = {
|
|
44
|
+
...law,
|
|
45
|
+
variants: [
|
|
46
|
+
{
|
|
47
|
+
key: 'requires',
|
|
48
|
+
value: { kind: 'string', text: 'one' },
|
|
49
|
+
condition: [{ axis: 'phase', value: 'act' }],
|
|
50
|
+
span: { line: 10, endLine: 10 },
|
|
51
|
+
},
|
|
52
|
+
{
|
|
53
|
+
key: 'requires',
|
|
54
|
+
value: { kind: 'string', text: 'two' },
|
|
55
|
+
condition: [{ axis: 'primitive', value: 'Memory' }],
|
|
56
|
+
span: { line: 11, endLine: 11 },
|
|
57
|
+
},
|
|
58
|
+
],
|
|
59
|
+
};
|
|
60
|
+
const rebuild = (changed: readonly CompiledRecord[] = records, vocabulary: FrozenRegistry = registry) =>
|
|
61
|
+
load(changed, vocabulary, {
|
|
62
|
+
sources: inputs,
|
|
63
|
+
languageVersion: LANGUAGE_VERSION,
|
|
64
|
+
kernelDigest: KERNEL_DIGEST,
|
|
65
|
+
location: '',
|
|
66
|
+
});
|
|
67
|
+
const schemaFindings = (changed: CompiledRecord = agent, vocabulary = registry) =>
|
|
68
|
+
validateSchema(changed, vocabulary, records).findings;
|
|
69
|
+
const systemFindings = (changed = folders, vocabulary = registry, pool: readonly CompiledRecord[] = records) =>
|
|
70
|
+
validateSystems(changed, vocabulary, pool).flatMap((a) => a.findings);
|
|
71
|
+
const rule = {
|
|
72
|
+
predicate: 'cite' as const,
|
|
73
|
+
target: 'playbook',
|
|
74
|
+
must: true,
|
|
75
|
+
cardinality: 'one' as const,
|
|
76
|
+
span: { line: 1, endLine: 1 },
|
|
77
|
+
};
|
|
78
|
+
const schemas = new Map(registry.schemas);
|
|
79
|
+
schemas.set('agent', { ...schemas.get('agent')!, edges: [rule] });
|
|
80
|
+
// W0 narrowing rows: the agent's `meaning.says` value re-typed, and its schema re-declared to narrow that one field.
|
|
81
|
+
const saying = (value: CompiledRecord['head'][number]['value']): CompiledRecord => ({
|
|
82
|
+
...agent,
|
|
83
|
+
sections: agent.sections.map((s) =>
|
|
84
|
+
s.name !== 'meaning'
|
|
85
|
+
? s
|
|
86
|
+
: { ...s, fields: s.fields.map((f) => ('key' in f && f.key === 'says' ? { ...f, value } : f)) },
|
|
87
|
+
),
|
|
88
|
+
});
|
|
89
|
+
const narrowed = (field: Partial<SchemaField>): FrozenRegistry => {
|
|
90
|
+
const declared = new Map(registry.schemas),
|
|
91
|
+
original = declared.get('agent')!;
|
|
92
|
+
declared.set('agent', {
|
|
93
|
+
...original,
|
|
94
|
+
fields: [{ section: 'meaning', key: 'says', type: 'text', must: true, span: original.span, ...field }],
|
|
95
|
+
});
|
|
96
|
+
return { ...registry, schemas: declared };
|
|
97
|
+
};
|
|
98
|
+
const edge = {
|
|
99
|
+
predicate: 'cite' as const,
|
|
100
|
+
direction: 'out' as const,
|
|
101
|
+
reference: { kind: 'ref' as const, discriminator: 'playbook', name: 'missing' },
|
|
102
|
+
target: null,
|
|
103
|
+
span: agent.source,
|
|
104
|
+
};
|
|
105
|
+
const examples: readonly [Finding['code'], () => readonly Finding[]][] = [
|
|
106
|
+
[
|
|
107
|
+
'IA-GRAPH-IDENTITY-TIE',
|
|
108
|
+
() => rebuild([...records, { ...method, source: { ...method.source, line: 1000 } }]).diagnostics,
|
|
109
|
+
],
|
|
110
|
+
['IA-GRAPH-TARGET-MISSING', () => rebuild(records.filter((r) => r.identity !== contract.identity)).diagnostics],
|
|
111
|
+
[
|
|
112
|
+
'IA-GRAPH-TARGET-AMBIGUOUS',
|
|
113
|
+
() => {
|
|
114
|
+
const result = resolve(
|
|
115
|
+
{ kind: 'ref', discriminator: method.discriminator, name: method.name },
|
|
116
|
+
[method, { ...method, source: { ...method.source, line: 1000 } }],
|
|
117
|
+
registry,
|
|
118
|
+
);
|
|
119
|
+
return result.ok
|
|
120
|
+
? []
|
|
121
|
+
: [
|
|
122
|
+
{
|
|
123
|
+
code: result.code,
|
|
124
|
+
path: method.source.path,
|
|
125
|
+
line: 1,
|
|
126
|
+
severity: 'error',
|
|
127
|
+
message: 'Ambiguous boundary reference',
|
|
128
|
+
},
|
|
129
|
+
];
|
|
130
|
+
},
|
|
131
|
+
],
|
|
132
|
+
['IA-GRAPH-EDGE-UNCONSENTED', () => rebuild(records, { ...registry, consent: new Map() }).diagnostics],
|
|
133
|
+
[
|
|
134
|
+
'IA-GRAPH-DIMENSION-UNKNOWN',
|
|
135
|
+
() =>
|
|
136
|
+
rebuild(
|
|
137
|
+
records.map((r) =>
|
|
138
|
+
r !== method
|
|
139
|
+
? r
|
|
140
|
+
: { ...r, head: [{ key: 'artifact-set', value: { kind: 'scalar', text: 'unknown' }, span: r.source }] },
|
|
141
|
+
),
|
|
142
|
+
).diagnostics,
|
|
143
|
+
],
|
|
144
|
+
[
|
|
145
|
+
'IA-GRAPH-COORDINATE-VALUE-UNKNOWN',
|
|
146
|
+
() => {
|
|
147
|
+
validateCoordinate({ phase: 'unknown' });
|
|
148
|
+
return [];
|
|
149
|
+
},
|
|
150
|
+
],
|
|
151
|
+
[
|
|
152
|
+
'IA-GRAPH-VERB-UNKNOWN',
|
|
153
|
+
() => {
|
|
154
|
+
traverse(graph, { start: [], follow: ['imagines'] });
|
|
155
|
+
return [];
|
|
156
|
+
},
|
|
157
|
+
],
|
|
158
|
+
[
|
|
159
|
+
'IA-GRAPH-TRAVERSAL-INVALID',
|
|
160
|
+
() => {
|
|
161
|
+
traverse(graph, { start: [], depth: 9 });
|
|
162
|
+
return [];
|
|
163
|
+
},
|
|
164
|
+
],
|
|
165
|
+
['IA-GRAPH-VARIANT-AMBIGUOUS', () => variants(ambiguous, { phase: 'act', primitive: 'Memory' }).diagnostics],
|
|
166
|
+
[
|
|
167
|
+
'IA-GRAPH-SCOPE-INVALID',
|
|
168
|
+
() => {
|
|
169
|
+
canonicalRoot('../escape');
|
|
170
|
+
return [];
|
|
171
|
+
},
|
|
172
|
+
],
|
|
173
|
+
['IA-COMP-SCHEMA-MISSING', () => schemaFindings(agent, { ...registry, schemas: new Map() })],
|
|
174
|
+
['IA-COMP-SCHEMA-KIND-MISMATCH', () => schemaFindings({ ...agent, kind: 'definition' })],
|
|
175
|
+
[
|
|
176
|
+
'IA-COMP-SECTION-MISSING',
|
|
177
|
+
() => schemaFindings({ ...agent, sections: agent.sections.filter((s) => s.name !== 'meaning') }),
|
|
178
|
+
],
|
|
179
|
+
[
|
|
180
|
+
'IA-COMP-SECTION-UNKNOWN',
|
|
181
|
+
() =>
|
|
182
|
+
schemaFindings({
|
|
183
|
+
...agent,
|
|
184
|
+
sections: [...agent.sections, { name: 'unknown', span: agent.source, fields: [] }],
|
|
185
|
+
}),
|
|
186
|
+
],
|
|
187
|
+
[
|
|
188
|
+
'IA-COMP-FIELD-MISSING',
|
|
189
|
+
() =>
|
|
190
|
+
schemaFindings({
|
|
191
|
+
...agent,
|
|
192
|
+
sections: agent.sections.map((s) => (s.name !== 'meaning' ? s : { ...s, fields: [] })),
|
|
193
|
+
}),
|
|
194
|
+
],
|
|
195
|
+
[
|
|
196
|
+
'IA-COMP-FIELD-DUPLICATE',
|
|
197
|
+
() =>
|
|
198
|
+
schemaFindings({
|
|
199
|
+
...agent,
|
|
200
|
+
sections: agent.sections.map((s) =>
|
|
201
|
+
s.name !== 'meaning'
|
|
202
|
+
? s
|
|
203
|
+
: { ...s, fields: [...s.fields, ...s.fields.filter((f) => 'key' in f && f.key === 'says')] },
|
|
204
|
+
),
|
|
205
|
+
}),
|
|
206
|
+
],
|
|
207
|
+
[
|
|
208
|
+
'IA-COMP-FIELD-UNKNOWN',
|
|
209
|
+
() =>
|
|
210
|
+
schemaFindings({
|
|
211
|
+
...agent,
|
|
212
|
+
sections: agent.sections.map((s) =>
|
|
213
|
+
s.name !== 'meaning'
|
|
214
|
+
? s
|
|
215
|
+
: {
|
|
216
|
+
...s,
|
|
217
|
+
fields: [...s.fields, { key: 'ready', value: { kind: 'scalar', text: 'true' }, span: agent.source }],
|
|
218
|
+
},
|
|
219
|
+
),
|
|
220
|
+
}),
|
|
221
|
+
],
|
|
222
|
+
[
|
|
223
|
+
'IA-COMP-FIELD-TYPE',
|
|
224
|
+
() =>
|
|
225
|
+
schemaFindings({
|
|
226
|
+
...agent,
|
|
227
|
+
sections: agent.sections.map((s) =>
|
|
228
|
+
s.name !== 'meaning'
|
|
229
|
+
? s
|
|
230
|
+
: {
|
|
231
|
+
...s,
|
|
232
|
+
fields: s.fields.map((f) =>
|
|
233
|
+
'key' in f && f.key === 'says' ? { ...f, value: { kind: 'list', items: [] } } : f,
|
|
234
|
+
),
|
|
235
|
+
},
|
|
236
|
+
),
|
|
237
|
+
}),
|
|
238
|
+
],
|
|
239
|
+
[
|
|
240
|
+
'IA-COMP-FIELD-VALUE',
|
|
241
|
+
() => schemaFindings(saying({ kind: 'scalar', text: 'nope' }), narrowed({ type: 'id', values: ['yes'] })),
|
|
242
|
+
],
|
|
243
|
+
[
|
|
244
|
+
'IA-COMP-FIELD-REF-TARGET',
|
|
245
|
+
() =>
|
|
246
|
+
schemaFindings(
|
|
247
|
+
saying({ kind: 'ref', discriminator: 'playbook', name: 'sample-procedure' }),
|
|
248
|
+
narrowed({ type: 'ref', target: 'agent' }),
|
|
249
|
+
),
|
|
250
|
+
],
|
|
251
|
+
[
|
|
252
|
+
'IA-COMP-FIELD-REF-MISSING',
|
|
253
|
+
() =>
|
|
254
|
+
schemaFindings(
|
|
255
|
+
saying({ kind: 'ref', discriminator: 'playbook', name: 'missing' }),
|
|
256
|
+
narrowed({ type: 'ref', target: 'playbook' }),
|
|
257
|
+
),
|
|
258
|
+
],
|
|
259
|
+
['IA-COMP-FIELD-FORM', () => schemaFindings(agent, narrowed({ type: 'text', form: 'iso-date' }))],
|
|
260
|
+
['IA-COMP-EDGE-CARDINALITY', () => schemaFindings(agent, { ...registry, schemas })],
|
|
261
|
+
['IA-COMP-EDGE-UNRESOLVED', () => schemaFindings({ ...agent, edges: [edge] }, { ...registry, schemas })],
|
|
262
|
+
['IA-COMP-SYSTEM-MALFORMED', () => systemFindings([{ name: 'empty', path: 'empty', sources: [], records: [] }])],
|
|
263
|
+
[
|
|
264
|
+
'IA-COMP-DISCRIMINATOR-FOREIGN',
|
|
265
|
+
() =>
|
|
266
|
+
systemFindings(folders.map((f) => (f.name !== 'agent-system' ? f : { ...f, records: [...f.records, method] }))),
|
|
267
|
+
],
|
|
268
|
+
['IA-COMP-BOOTSTRAP-ORDER', () => systemFindings(folders, { ...registry, order: [...registry.order].reverse() })],
|
|
269
|
+
[
|
|
270
|
+
'IA-COMP-STEWARD-MISSING',
|
|
271
|
+
() =>
|
|
272
|
+
systemFindings(
|
|
273
|
+
folders,
|
|
274
|
+
registry,
|
|
275
|
+
records.filter((r) => r.discriminator !== 'agent'),
|
|
276
|
+
),
|
|
277
|
+
],
|
|
278
|
+
[
|
|
279
|
+
'IA-COMP-CONSENT-EMPTY',
|
|
280
|
+
() =>
|
|
281
|
+
systemFindings(folders, {
|
|
282
|
+
...registry,
|
|
283
|
+
systems: new Map([...registry.systems].map(([key, value]) => [key, { ...value, consent: [] }])),
|
|
284
|
+
}),
|
|
285
|
+
],
|
|
286
|
+
[
|
|
287
|
+
'IA-COMP-SCHEMA-UNREFERENCED',
|
|
288
|
+
() =>
|
|
289
|
+
systemFindings(folders, {
|
|
290
|
+
...registry,
|
|
291
|
+
registrations: new Map([...registry.registrations].filter(([key]) => key !== 'agent')),
|
|
292
|
+
}),
|
|
293
|
+
],
|
|
294
|
+
[
|
|
295
|
+
'IA-COMP-SCHEMA-MULTIPLE',
|
|
296
|
+
() =>
|
|
297
|
+
systemFindings(folders, {
|
|
298
|
+
...registry,
|
|
299
|
+
registrations: new Map([
|
|
300
|
+
...registry.registrations,
|
|
301
|
+
['duplicate', { ...registry.registrations.get('agent')!, keyword: 'duplicate' }],
|
|
302
|
+
]),
|
|
303
|
+
}),
|
|
304
|
+
],
|
|
305
|
+
[
|
|
306
|
+
'IA-COMP-FRAGMENT-MISSING',
|
|
307
|
+
() =>
|
|
308
|
+
validateFragments(
|
|
309
|
+
rebuild(
|
|
310
|
+
records.map((r) =>
|
|
311
|
+
r.discriminator !== 'case'
|
|
312
|
+
? r
|
|
313
|
+
: {
|
|
314
|
+
...r,
|
|
315
|
+
edges: r.edges.map((e) => ({
|
|
316
|
+
...e,
|
|
317
|
+
fragment: 'REQ-MISSING',
|
|
318
|
+
reference: { ...e.reference, fragment: 'REQ-MISSING' },
|
|
319
|
+
})),
|
|
320
|
+
},
|
|
321
|
+
),
|
|
322
|
+
),
|
|
323
|
+
).findings,
|
|
324
|
+
],
|
|
325
|
+
[
|
|
326
|
+
'IA-COMP-COVERAGE-MISSING',
|
|
327
|
+
() => {
|
|
328
|
+
const g = rebuild(records.filter((r) => r.name !== 'valid-native-record'));
|
|
329
|
+
return validateCoverage(g.nodes.get(contract.identity)!, g).findings;
|
|
330
|
+
},
|
|
331
|
+
],
|
|
332
|
+
[
|
|
333
|
+
'IA-COMP-COVERAGE-KIND',
|
|
334
|
+
() => {
|
|
335
|
+
const g = rebuild(
|
|
336
|
+
records.map((r) =>
|
|
337
|
+
r.discriminator !== 'case'
|
|
338
|
+
? r
|
|
339
|
+
: {
|
|
340
|
+
...r,
|
|
341
|
+
sections: r.sections.map((s) =>
|
|
342
|
+
s.name !== 'scenario'
|
|
343
|
+
? s
|
|
344
|
+
: {
|
|
345
|
+
...s,
|
|
346
|
+
fields: s.fields.map((f) =>
|
|
347
|
+
'key' in f && f.key === 'kind' ? { ...f, value: { kind: 'scalar', text: 'success' } } : f,
|
|
348
|
+
),
|
|
349
|
+
},
|
|
350
|
+
),
|
|
351
|
+
},
|
|
352
|
+
),
|
|
353
|
+
);
|
|
354
|
+
return validateCoverage(g.nodes.get(contract.identity)!, g).findings;
|
|
355
|
+
},
|
|
356
|
+
],
|
|
357
|
+
[
|
|
358
|
+
'IA-COMP-SELECTOR-INVALID',
|
|
359
|
+
() => validateSelectors({ ...method, selectors: [[{ axis: 'phase', value: 'unknown' }]] }).findings,
|
|
360
|
+
],
|
|
361
|
+
['IA-COMP-CHECK-UNKNOWN', () => validateCheck({ ...check, sections: [] }).findings],
|
|
362
|
+
['IA-COMP-VARIANT-AMBIGUOUS', () => validateVariants(ambiguous).findings],
|
|
363
|
+
[
|
|
364
|
+
'IA-COMP-ADOPTION-FAILED',
|
|
365
|
+
() => {
|
|
366
|
+
const evaluators: AdoptionEvaluators = new Map([
|
|
367
|
+
[
|
|
368
|
+
contract.identity,
|
|
369
|
+
new Map(
|
|
370
|
+
contract.requirements.map((r) => [
|
|
371
|
+
r.id,
|
|
372
|
+
() => ({ outcome: 'fail' as const, message: 'Fixture rejects the structural claim' }),
|
|
373
|
+
]),
|
|
374
|
+
),
|
|
375
|
+
],
|
|
376
|
+
]);
|
|
377
|
+
return validateAdoption(graph, evaluators).flatMap((a) => a.findings);
|
|
378
|
+
},
|
|
379
|
+
],
|
|
380
|
+
['IA-COMP-NOT-EVALUATED', () => validateParse(undefined).findings],
|
|
381
|
+
['IA-COMP-PROJECTION-INVALID', () => renderHostArtifacts(records, '').assessment.findings],
|
|
382
|
+
[
|
|
383
|
+
'IA-COMP-FIXTURE-MISMATCH',
|
|
384
|
+
() =>
|
|
385
|
+
runLanguageFixture({
|
|
386
|
+
path: 'fixture.ia',
|
|
387
|
+
clause: 'parser',
|
|
388
|
+
mode: 'fail',
|
|
389
|
+
source: '#! ia 1.0\n',
|
|
390
|
+
diagnostics: [],
|
|
391
|
+
}).assessment.findings,
|
|
392
|
+
],
|
|
393
|
+
];
|
|
394
|
+
return Object.freeze(
|
|
395
|
+
examples.map(([code, run]): FixtureResult => {
|
|
396
|
+
let observed: readonly Finding[];
|
|
397
|
+
let unexpected = false;
|
|
398
|
+
try {
|
|
399
|
+
observed = run();
|
|
400
|
+
} catch (error) {
|
|
401
|
+
if (error instanceof GraphUsageError)
|
|
402
|
+
observed = [{ code: error.code, path: '', line: 1, severity: 'error', message: error.message }];
|
|
403
|
+
else {
|
|
404
|
+
unexpected = true;
|
|
405
|
+
observed = [
|
|
406
|
+
{
|
|
407
|
+
code: 'IA-COMP-FIXTURE-MISMATCH',
|
|
408
|
+
path: '',
|
|
409
|
+
line: 1,
|
|
410
|
+
severity: 'error',
|
|
411
|
+
message: `Boundary fixture threw: ${error instanceof Error ? error.message : String(error)}`,
|
|
412
|
+
},
|
|
413
|
+
];
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
const findings: Finding[] =
|
|
417
|
+
!unexpected && observed.some((d) => d.code === code)
|
|
418
|
+
? []
|
|
419
|
+
: [
|
|
420
|
+
{
|
|
421
|
+
code: 'IA-COMP-FIXTURE-MISMATCH',
|
|
422
|
+
path: '',
|
|
423
|
+
line: 1,
|
|
424
|
+
severity: 'error',
|
|
425
|
+
message: `${code} boundary fixture produced ${observed.map((d) => `${d.code}: ${d.message}`).join(', ')}`,
|
|
426
|
+
},
|
|
427
|
+
];
|
|
428
|
+
return Object.freeze({
|
|
429
|
+
assessment: assess('COMP-FIXTURES', `boundary/${code}`, findings),
|
|
430
|
+
observedCodes: Object.freeze([...new Set(observed.map((d) => d.code))].sort()),
|
|
431
|
+
});
|
|
432
|
+
}),
|
|
433
|
+
);
|
|
434
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,132 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inventarch/compliance",
|
|
3
|
-
"version": "
|
|
4
|
-
"
|
|
5
|
-
"
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"type": "module",
|
|
5
|
+
"main": "./dist/index.js",
|
|
6
|
+
"types": "./dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": {
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"default": "./dist/index.js"
|
|
11
|
+
},
|
|
12
|
+
"./internal/adoption": {
|
|
13
|
+
"types": "./dist/adoption.d.ts",
|
|
14
|
+
"default": "./dist/adoption.js"
|
|
15
|
+
},
|
|
16
|
+
"./internal/catalog": {
|
|
17
|
+
"types": "./dist/catalog.d.ts",
|
|
18
|
+
"default": "./dist/catalog.js"
|
|
19
|
+
},
|
|
20
|
+
"./internal/check-ids": {
|
|
21
|
+
"types": "./dist/check-ids.d.ts",
|
|
22
|
+
"default": "./dist/check-ids.js"
|
|
23
|
+
},
|
|
24
|
+
"./internal/evidence": {
|
|
25
|
+
"types": "./dist/evidence.d.ts",
|
|
26
|
+
"default": "./dist/evidence.js"
|
|
27
|
+
},
|
|
28
|
+
"./internal/fixtures": {
|
|
29
|
+
"types": "./dist/fixtures.d.ts",
|
|
30
|
+
"default": "./dist/fixtures.js"
|
|
31
|
+
},
|
|
32
|
+
"./internal/graph-checks": {
|
|
33
|
+
"types": "./dist/graph-checks.d.ts",
|
|
34
|
+
"default": "./dist/graph-checks.js"
|
|
35
|
+
},
|
|
36
|
+
"./internal/host-plugin": {
|
|
37
|
+
"types": "./dist/host-plugin.d.ts",
|
|
38
|
+
"default": "./dist/host-plugin.js"
|
|
39
|
+
},
|
|
40
|
+
"./internal/index": {
|
|
41
|
+
"types": "./dist/index.d.ts",
|
|
42
|
+
"default": "./dist/index.js"
|
|
43
|
+
},
|
|
44
|
+
"./internal/obligations": {
|
|
45
|
+
"types": "./dist/obligations.d.ts",
|
|
46
|
+
"default": "./dist/obligations.js"
|
|
47
|
+
},
|
|
48
|
+
"./internal/profiles": {
|
|
49
|
+
"types": "./dist/profiles.d.ts",
|
|
50
|
+
"default": "./dist/profiles.js"
|
|
51
|
+
},
|
|
52
|
+
"./internal/projections": {
|
|
53
|
+
"types": "./dist/projections.d.ts",
|
|
54
|
+
"default": "./dist/projections.js"
|
|
55
|
+
},
|
|
56
|
+
"./internal/record-text": {
|
|
57
|
+
"types": "./dist/record-text.d.ts",
|
|
58
|
+
"default": "./dist/record-text.js"
|
|
59
|
+
},
|
|
60
|
+
"./internal/report": {
|
|
61
|
+
"types": "./dist/report.d.ts",
|
|
62
|
+
"default": "./dist/report.js"
|
|
63
|
+
},
|
|
64
|
+
"./internal/schema": {
|
|
65
|
+
"types": "./dist/schema.d.ts",
|
|
66
|
+
"default": "./dist/schema.js"
|
|
67
|
+
},
|
|
68
|
+
"./internal/shape": {
|
|
69
|
+
"types": "./dist/shape.d.ts",
|
|
70
|
+
"default": "./dist/shape.js"
|
|
71
|
+
},
|
|
72
|
+
"./internal/steward-profile": {
|
|
73
|
+
"types": "./dist/steward-profile.d.ts",
|
|
74
|
+
"default": "./dist/steward-profile.js"
|
|
75
|
+
},
|
|
76
|
+
"./internal/systems": {
|
|
77
|
+
"types": "./dist/systems.d.ts",
|
|
78
|
+
"default": "./dist/systems.js"
|
|
79
|
+
},
|
|
80
|
+
"./internal/types": {
|
|
81
|
+
"types": "./dist/types.d.ts",
|
|
82
|
+
"default": "./dist/types.js"
|
|
83
|
+
},
|
|
84
|
+
"./internal/values": {
|
|
85
|
+
"types": "./dist/values.d.ts",
|
|
86
|
+
"default": "./dist/values.js"
|
|
87
|
+
},
|
|
88
|
+
"./internal/variants": {
|
|
89
|
+
"types": "./dist/variants.d.ts",
|
|
90
|
+
"default": "./dist/variants.js"
|
|
91
|
+
},
|
|
92
|
+
"./internal/workspace-projection": {
|
|
93
|
+
"types": "./dist/workspace-projection.d.ts",
|
|
94
|
+
"default": "./dist/workspace-projection.js"
|
|
95
|
+
}
|
|
96
|
+
},
|
|
97
|
+
"files": [
|
|
98
|
+
"dist",
|
|
99
|
+
"fixtures",
|
|
100
|
+
"README.md",
|
|
101
|
+
"SPEC.md",
|
|
102
|
+
"LICENSE",
|
|
103
|
+
"NOTICE"
|
|
104
|
+
],
|
|
105
|
+
"dependencies": {
|
|
106
|
+
"@inventarch/language": "1.0.0",
|
|
107
|
+
"@inventarch/graph": "1.0.0"
|
|
108
|
+
},
|
|
109
|
+
"devDependencies": {
|
|
110
|
+
"@types/node": "^22.19.0",
|
|
111
|
+
"typescript": "^5.9.3",
|
|
112
|
+
"vitest": "^4.1.4"
|
|
113
|
+
},
|
|
114
|
+
"license": "Apache-2.0",
|
|
115
|
+
"publishConfig": {
|
|
116
|
+
"access": "public",
|
|
117
|
+
"registry": "https://registry.npmjs.org"
|
|
118
|
+
},
|
|
119
|
+
"engines": {
|
|
120
|
+
"node": ">=22.22.0 <23"
|
|
121
|
+
},
|
|
122
|
+
"repository": {
|
|
123
|
+
"type": "git",
|
|
124
|
+
"url": "git+https://github.com/inventarch/ia.git",
|
|
125
|
+
"directory": "packages/compliance"
|
|
126
|
+
},
|
|
127
|
+
"scripts": {
|
|
128
|
+
"build": "tsc -p tsconfig.json",
|
|
129
|
+
"typecheck": "tsc --noEmit -p tsconfig.json && tsc -p tsconfig.tests.json",
|
|
130
|
+
"test": "vitest run --config vitest.config.mts"
|
|
131
|
+
}
|
|
6
132
|
}
|