@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,157 @@
|
|
|
1
|
+
import type { EvaluatorCatalog, EvidencePolicy } from './catalog.js';
|
|
2
|
+
import type { Assessment } from './types.js';
|
|
3
|
+
export type ScopeFact = string | number | boolean | null | readonly ScopeFact[] | {
|
|
4
|
+
readonly [key: string]: ScopeFact;
|
|
5
|
+
};
|
|
6
|
+
/** Captured package/resource scope facts (JSON data). Predicates receive a deeply frozen copy, never the caller's object. */
|
|
7
|
+
export type ScopeFacts = Readonly<Record<string, ScopeFact>>;
|
|
8
|
+
/**
|
|
9
|
+
* Applicability. not-applicable always carries resolver evidence (D2): either the trusted predicate `name@version`
|
|
10
|
+
* that returned it, or the package metadata source that disabled a package-adopted obligation.
|
|
11
|
+
*/
|
|
12
|
+
export type Applicability = {
|
|
13
|
+
readonly status: 'applicable';
|
|
14
|
+
readonly predicate?: string;
|
|
15
|
+
} | {
|
|
16
|
+
readonly status: 'not-applicable';
|
|
17
|
+
readonly reason: string;
|
|
18
|
+
readonly basis: 'predicate';
|
|
19
|
+
readonly predicate: string;
|
|
20
|
+
} | {
|
|
21
|
+
readonly status: 'not-applicable';
|
|
22
|
+
readonly reason: string;
|
|
23
|
+
readonly basis: 'package-metadata';
|
|
24
|
+
readonly source: string;
|
|
25
|
+
} | {
|
|
26
|
+
readonly status: 'undetermined';
|
|
27
|
+
readonly reason: string;
|
|
28
|
+
readonly predicate?: string;
|
|
29
|
+
};
|
|
30
|
+
/** A trusted, versioned host predicate (`name@version`) over captured facts; never native prose or a selector. */
|
|
31
|
+
export type ApplicabilityPredicate = (facts: ScopeFacts) => {
|
|
32
|
+
readonly status: 'applicable';
|
|
33
|
+
} | {
|
|
34
|
+
readonly status: 'not-applicable' | 'undetermined';
|
|
35
|
+
readonly reason: string;
|
|
36
|
+
};
|
|
37
|
+
export interface ObligationAdoption {
|
|
38
|
+
readonly identity: string;
|
|
39
|
+
readonly source: 'root' | 'package';
|
|
40
|
+
readonly mandatory: boolean;
|
|
41
|
+
}
|
|
42
|
+
export interface ObligationOccurrence {
|
|
43
|
+
/** The selected law, contract or check occurrence identity. */
|
|
44
|
+
readonly identity: string;
|
|
45
|
+
readonly word: 'law' | 'contract' | 'check';
|
|
46
|
+
/** The adoption that selected this occurrence. */
|
|
47
|
+
readonly adoption: string;
|
|
48
|
+
/** The requirement fragment, e.g. a contract REQ id, a law obligation label or a profile requirement. */
|
|
49
|
+
readonly requirement: string;
|
|
50
|
+
/** The check.runs evaluator id: a built-in CHECK_IDS id or a catalog id. */
|
|
51
|
+
readonly runs: string;
|
|
52
|
+
readonly provenance: {
|
|
53
|
+
readonly path: string;
|
|
54
|
+
readonly line: number;
|
|
55
|
+
};
|
|
56
|
+
readonly applicability?: string;
|
|
57
|
+
readonly required?: boolean;
|
|
58
|
+
/** JSON input; validated and normalized by the evaluator's input codec before digesting. */
|
|
59
|
+
readonly input?: unknown;
|
|
60
|
+
}
|
|
61
|
+
export interface PackageDirective {
|
|
62
|
+
readonly occurrence: string;
|
|
63
|
+
readonly requirement: string;
|
|
64
|
+
readonly action: 'optional' | 'disable';
|
|
65
|
+
readonly source: string;
|
|
66
|
+
}
|
|
67
|
+
export interface ObligationInput {
|
|
68
|
+
readonly subject: string;
|
|
69
|
+
readonly policyRevision: string;
|
|
70
|
+
readonly catalog: EvaluatorCatalog;
|
|
71
|
+
/** The catalog digest the policy pins; it must equal catalog.digest. */
|
|
72
|
+
readonly catalogDigest: string;
|
|
73
|
+
readonly facts: ScopeFacts;
|
|
74
|
+
readonly adoptions: readonly ObligationAdoption[];
|
|
75
|
+
readonly occurrences: readonly ObligationOccurrence[];
|
|
76
|
+
readonly predicates?: ReadonlyMap<string, ApplicabilityPredicate>;
|
|
77
|
+
readonly packageMetadata?: readonly PackageDirective[];
|
|
78
|
+
}
|
|
79
|
+
export interface ObligationEvaluator {
|
|
80
|
+
readonly id: string;
|
|
81
|
+
readonly contractVersion: string;
|
|
82
|
+
readonly implementationVersion: string;
|
|
83
|
+
readonly implementationDigest: string;
|
|
84
|
+
readonly builtin: boolean;
|
|
85
|
+
readonly availability: 'supported' | 'unavailable' | 'revoked';
|
|
86
|
+
}
|
|
87
|
+
export interface Obligation {
|
|
88
|
+
readonly obligationId: string;
|
|
89
|
+
readonly subject: string;
|
|
90
|
+
readonly occurrence: string;
|
|
91
|
+
readonly word: ObligationOccurrence['word'];
|
|
92
|
+
readonly requirement: string;
|
|
93
|
+
readonly runs: string;
|
|
94
|
+
readonly provenance: {
|
|
95
|
+
readonly path: string;
|
|
96
|
+
readonly line: number;
|
|
97
|
+
readonly adoption: string;
|
|
98
|
+
readonly source: 'root' | 'package';
|
|
99
|
+
};
|
|
100
|
+
readonly applicability: Applicability;
|
|
101
|
+
readonly required: boolean;
|
|
102
|
+
readonly evaluator: ObligationEvaluator;
|
|
103
|
+
readonly inputDigest: string;
|
|
104
|
+
readonly evidencePolicy: EvidencePolicy;
|
|
105
|
+
}
|
|
106
|
+
export interface ObligationResolution {
|
|
107
|
+
readonly status: 'resolved' | 'refused';
|
|
108
|
+
readonly subject: string;
|
|
109
|
+
readonly policyRevision: string;
|
|
110
|
+
readonly catalogDigest: string;
|
|
111
|
+
readonly obligations: readonly Obligation[];
|
|
112
|
+
readonly assessment: Assessment;
|
|
113
|
+
/** resolutionDigest of this resolution (D2); admission recomputes it. */
|
|
114
|
+
readonly digest: string;
|
|
115
|
+
}
|
|
116
|
+
export interface ObligationRow {
|
|
117
|
+
readonly occurrence: string;
|
|
118
|
+
readonly word: ObligationOccurrence['word'];
|
|
119
|
+
readonly adoption: string;
|
|
120
|
+
readonly requirement: string;
|
|
121
|
+
readonly runs: string;
|
|
122
|
+
readonly support: 'builtin' | 'supported' | 'unavailable' | 'revoked' | 'unknown';
|
|
123
|
+
readonly supportReason?: string;
|
|
124
|
+
readonly contractVersion?: string;
|
|
125
|
+
readonly implementationVersion?: string;
|
|
126
|
+
readonly implementationDigest?: string;
|
|
127
|
+
readonly applicability: Applicability;
|
|
128
|
+
readonly required: boolean;
|
|
129
|
+
readonly obligationId: string;
|
|
130
|
+
}
|
|
131
|
+
export interface ObligationExplanation {
|
|
132
|
+
readonly subject: string;
|
|
133
|
+
readonly policyRevision: string;
|
|
134
|
+
readonly catalogFormat: string;
|
|
135
|
+
readonly catalogDigest: string;
|
|
136
|
+
readonly rows: readonly ObligationRow[];
|
|
137
|
+
readonly assessment: Assessment;
|
|
138
|
+
}
|
|
139
|
+
export declare const PREDICATE_ID: RegExp;
|
|
140
|
+
export declare const RESOLUTION_FORMAT = "ia-obligation-resolution/1";
|
|
141
|
+
/** The stable obligation id: `obl:` sha256 of subject, occurrence, requirement and runs. */
|
|
142
|
+
export declare function obligationIdOf(subject: string, occurrence: string, requirement: string, runs: string): string;
|
|
143
|
+
/** The D2 integrity digest over a resolution's canonical content (every field except `digest`). */
|
|
144
|
+
export declare function resolutionDigest(resolution: Omit<ObligationResolution, 'digest'>): string;
|
|
145
|
+
/** True only for a resolution returned by resolveObligations in this module instance (deeply frozen, so unmodified). */
|
|
146
|
+
export declare const isIssuedResolution: (value: unknown) => boolean;
|
|
147
|
+
/**
|
|
148
|
+
* Pure obligation resolver (C27, OBL-01..03): explicit root adoptions, selected occurrences, a trusted catalog,
|
|
149
|
+
* the pinned catalog digest, the policy revision and captured facts yield immutable obligations sorted by id.
|
|
150
|
+
* An unresolved reference or policy conflict refuses with no partial obligations; undetermined required
|
|
151
|
+
* applicability is a blocking finding; package metadata cannot change a root-adopted obligation (D1).
|
|
152
|
+
* The result carries its D2 digest and is recorded as issued by this module.
|
|
153
|
+
*/
|
|
154
|
+
export declare function resolveObligations(input: ObligationInput): ObligationResolution;
|
|
155
|
+
/** Inspection (OBL-03): selected definitions, versions, applicability and missing support. Executes no evaluator. */
|
|
156
|
+
export declare function inspectObligations(input: ObligationInput): ObligationExplanation;
|
|
157
|
+
//# sourceMappingURL=obligations.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obligations.d.ts","sourceRoot":"","sources":["../src/obligations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
import { stableSerialize } from '@inventarch/graph';
|
|
2
|
+
import { isBuiltinCheck } from './check-ids.js';
|
|
3
|
+
import { assertCatalog, codecOf, selectEvaluator } from './catalog.js';
|
|
4
|
+
import { compareText, deepFreeze, echo, exactKeys, frozenCopy, jsonData, record, sanitized, sha256 } from './shape.js';
|
|
5
|
+
import { assess } from './types.js';
|
|
6
|
+
export const PREDICATE_ID = /^[a-z][a-z0-9]*(-[a-z0-9]+)*@[1-9][0-9]*$/;
|
|
7
|
+
export const RESOLUTION_FORMAT = 'ia-obligation-resolution/1';
|
|
8
|
+
const REFUSING = ['IA-COMP-OBLIGATION-UNRESOLVED', 'IA-COMP-OBLIGATION-CONFLICT'];
|
|
9
|
+
const WORDS = ['law', 'contract', 'check'];
|
|
10
|
+
const resolutions = new WeakSet();
|
|
11
|
+
const nonempty = (value) => typeof value === 'string' && value.trim() !== '' && value.length <= 512;
|
|
12
|
+
function note(code, path, line, message, warning = false, identity) {
|
|
13
|
+
const where = echo(path, 200);
|
|
14
|
+
return {
|
|
15
|
+
code,
|
|
16
|
+
severity: warning ? 'warning' : 'error',
|
|
17
|
+
path: where,
|
|
18
|
+
line,
|
|
19
|
+
...(identity === undefined ? {} : { identity }),
|
|
20
|
+
message: `${where}:${line}: ${message}`,
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** The stable obligation id: `obl:` sha256 of subject, occurrence, requirement and runs. */
|
|
24
|
+
export function obligationIdOf(subject, occurrence, requirement, runs) {
|
|
25
|
+
return `obl:${sha256({ subject, occurrence, requirement, runs }).slice('sha256:'.length)}`;
|
|
26
|
+
}
|
|
27
|
+
/** The D2 integrity digest over a resolution's canonical content (every field except `digest`). */
|
|
28
|
+
export function resolutionDigest(resolution) {
|
|
29
|
+
const { status, subject, policyRevision, catalogDigest, obligations, assessment } = resolution;
|
|
30
|
+
return sha256({ format: RESOLUTION_FORMAT, status, subject, policyRevision, catalogDigest, obligations, assessment });
|
|
31
|
+
}
|
|
32
|
+
/** True only for a resolution returned by resolveObligations in this module instance (deeply frozen, so unmodified). */
|
|
33
|
+
export const isIssuedResolution = (value) => typeof value === 'object' && value !== null && resolutions.has(value);
|
|
34
|
+
function applicabilityOf(occurrence, input, facts) {
|
|
35
|
+
const key = occurrence.applicability;
|
|
36
|
+
if (key === undefined)
|
|
37
|
+
return { status: 'applicable' };
|
|
38
|
+
const known = PREDICATE_ID.test(key), predicate = known ? input.predicates?.get(key) : undefined;
|
|
39
|
+
if (predicate === undefined)
|
|
40
|
+
return {
|
|
41
|
+
status: 'undetermined',
|
|
42
|
+
reason: `Applicability predicate ${known ? key : '<invalid>'} is not installed`,
|
|
43
|
+
...(known ? { predicate: key } : {}),
|
|
44
|
+
};
|
|
45
|
+
let result;
|
|
46
|
+
try {
|
|
47
|
+
result = predicate(facts);
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
return { status: 'undetermined', reason: `Applicability predicate ${key} failed`, predicate: key };
|
|
51
|
+
}
|
|
52
|
+
const shape = record(result) ? result : undefined;
|
|
53
|
+
if (shape?.['status'] === 'applicable')
|
|
54
|
+
return { status: 'applicable', predicate: key };
|
|
55
|
+
if (shape?.['status'] === 'not-applicable' && sanitized(shape['reason']))
|
|
56
|
+
return { status: 'not-applicable', reason: shape['reason'], basis: 'predicate', predicate: key };
|
|
57
|
+
if (shape?.['status'] === 'undetermined' && sanitized(shape['reason']))
|
|
58
|
+
return { status: 'undetermined', reason: shape['reason'], predicate: key };
|
|
59
|
+
return {
|
|
60
|
+
status: 'undetermined',
|
|
61
|
+
reason: `Applicability predicate ${key} returned an invalid result`,
|
|
62
|
+
predicate: key,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
function validOccurrence(occurrence) {
|
|
66
|
+
if (!record(occurrence))
|
|
67
|
+
return false;
|
|
68
|
+
const provenance = occurrence['provenance'];
|
|
69
|
+
return (nonempty(occurrence['identity']) &&
|
|
70
|
+
nonempty(occurrence['requirement']) &&
|
|
71
|
+
nonempty(occurrence['runs']) &&
|
|
72
|
+
nonempty(occurrence['adoption']) &&
|
|
73
|
+
WORDS.includes(occurrence['word']) &&
|
|
74
|
+
exactKeys(provenance, ['path', 'line']) &&
|
|
75
|
+
nonempty(provenance.path) &&
|
|
76
|
+
Number.isSafeInteger(provenance.line) &&
|
|
77
|
+
provenance.line >= 1 &&
|
|
78
|
+
(occurrence['applicability'] === undefined || typeof occurrence['applicability'] === 'string') &&
|
|
79
|
+
(occurrence['required'] === undefined || typeof occurrence['required'] === 'boolean'));
|
|
80
|
+
}
|
|
81
|
+
const validDirective = (directive) => exactKeys(directive, ['occurrence', 'requirement', 'action', 'source']) &&
|
|
82
|
+
nonempty(directive.occurrence) &&
|
|
83
|
+
nonempty(directive.requirement) &&
|
|
84
|
+
(directive.action === 'optional' || directive.action === 'disable') &&
|
|
85
|
+
sanitized(directive.source, 160);
|
|
86
|
+
/** Validate and codec-normalize an input, returning its digest or a refusal reason. */
|
|
87
|
+
function inputDigestOf(subject, occurrence, codecId, catalog) {
|
|
88
|
+
const value = occurrence.input === undefined ? null : occurrence.input;
|
|
89
|
+
try {
|
|
90
|
+
if (!jsonData(value))
|
|
91
|
+
return { reason: 'input is not JSON data' };
|
|
92
|
+
let normalized = value;
|
|
93
|
+
if (codecId !== undefined) {
|
|
94
|
+
const codec = codecOf(catalog, codecId);
|
|
95
|
+
if (codec === undefined || codec.validate(frozenCopy(value)) !== true)
|
|
96
|
+
return { reason: `input does not satisfy codec ${codecId}` };
|
|
97
|
+
if (codec.normalize !== undefined)
|
|
98
|
+
normalized = codec.normalize(frozenCopy(value));
|
|
99
|
+
if (!jsonData(normalized))
|
|
100
|
+
return { reason: `codec ${codecId} normalized the input to non-JSON data` };
|
|
101
|
+
}
|
|
102
|
+
return {
|
|
103
|
+
digest: sha256({ subject, runs: occurrence.runs, requirement: occurrence.requirement, input: normalized }),
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
catch {
|
|
107
|
+
return { reason: `input codec ${codecId ?? ''} failed` };
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
function collect(input) {
|
|
111
|
+
assertCatalog(input.catalog);
|
|
112
|
+
if (!nonempty(input.subject) || !nonempty(input.policyRevision))
|
|
113
|
+
throw new TypeError('Obligation resolution requires an explicit subject and policy revision');
|
|
114
|
+
if (!jsonData(input.facts) || !record(input.facts))
|
|
115
|
+
throw new TypeError('Obligation facts must be a JSON object');
|
|
116
|
+
const { catalog } = input, findings = [], facts = frozenCopy(input.facts);
|
|
117
|
+
if (input.catalogDigest !== catalog.digest)
|
|
118
|
+
findings.push(note('IA-COMP-OBLIGATION-CONFLICT', '<policy>', 1, `Policy ${input.policyRevision} pins catalog ${echo(input.catalogDigest, 80)} but ${catalog.digest} was supplied`));
|
|
119
|
+
const adoptions = new Map();
|
|
120
|
+
for (const [index, adoption] of input.adoptions.entries()) {
|
|
121
|
+
if (!exactKeys(adoption, ['identity', 'source', 'mandatory']) ||
|
|
122
|
+
!nonempty(adoption.identity) ||
|
|
123
|
+
(adoption.source !== 'root' && adoption.source !== 'package') ||
|
|
124
|
+
typeof adoption.mandatory !== 'boolean') {
|
|
125
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', '<policy>', index + 1, 'Malformed adoption'));
|
|
126
|
+
continue;
|
|
127
|
+
}
|
|
128
|
+
const previous = adoptions.get(adoption.identity);
|
|
129
|
+
if (previous !== undefined && (previous.source !== adoption.source || previous.mandatory !== adoption.mandatory))
|
|
130
|
+
findings.push(note('IA-COMP-OBLIGATION-CONFLICT', '<policy>', index + 1, `Adoption ${echo(adoption.identity)} is declared with conflicting source or mandatory status; source precedence cannot weaken a root adoption`));
|
|
131
|
+
else
|
|
132
|
+
adoptions.set(adoption.identity, adoption);
|
|
133
|
+
}
|
|
134
|
+
const byId = new Map(), rows = new Map();
|
|
135
|
+
for (const [index, occurrence] of input.occurrences.entries()) {
|
|
136
|
+
if (!validOccurrence(occurrence)) {
|
|
137
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', '<occurrences>', index + 1, 'Malformed obligation occurrence: identity, word, adoption, requirement, runs and provenance {path, line} are required'));
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
const { path, line } = occurrence.provenance, label = `${echo(occurrence.identity)}#${echo(occurrence.requirement)}`;
|
|
141
|
+
const adoption = adoptions.get(occurrence.adoption);
|
|
142
|
+
const obligationId = obligationIdOf(input.subject, occurrence.identity, occurrence.requirement, occurrence.runs);
|
|
143
|
+
// D4: only CHECK_IDS are built in; reserved ids are never entries and so never resolve.
|
|
144
|
+
const builtin = isBuiltinCheck(occurrence.runs), entry = builtin ? undefined : selectEvaluator(catalog, occurrence.runs);
|
|
145
|
+
const applicability = applicabilityOf(occurrence, input, facts);
|
|
146
|
+
const required = (adoption?.source === 'root' && adoption.mandatory) || (occurrence.required ?? adoption?.mandatory ?? true);
|
|
147
|
+
const support = builtin ? 'builtin' : entry === undefined ? 'unknown' : entry.availability.status;
|
|
148
|
+
rows.set(`${index}`, {
|
|
149
|
+
occurrence: occurrence.identity,
|
|
150
|
+
word: occurrence.word,
|
|
151
|
+
adoption: occurrence.adoption,
|
|
152
|
+
requirement: occurrence.requirement,
|
|
153
|
+
runs: occurrence.runs,
|
|
154
|
+
support,
|
|
155
|
+
...(entry !== undefined && entry.availability.status !== 'supported'
|
|
156
|
+
? { supportReason: entry.availability.reason }
|
|
157
|
+
: {}),
|
|
158
|
+
...(entry === undefined
|
|
159
|
+
? {}
|
|
160
|
+
: {
|
|
161
|
+
contractVersion: entry.contractVersion,
|
|
162
|
+
implementationVersion: entry.implementationVersion,
|
|
163
|
+
implementationDigest: entry.implementationDigest,
|
|
164
|
+
}),
|
|
165
|
+
applicability,
|
|
166
|
+
required,
|
|
167
|
+
obligationId,
|
|
168
|
+
});
|
|
169
|
+
if (adoption === undefined) {
|
|
170
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', path, line, `${label}: adoption ${echo(occurrence.adoption)} is not in the root adoption set`, false, occurrence.identity));
|
|
171
|
+
continue;
|
|
172
|
+
}
|
|
173
|
+
if (!builtin && entry === undefined) {
|
|
174
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', path, line, `${label}: check.runs '${echo(occurrence.runs)}' is neither built in nor in catalog ${catalog.digest}`, false, occurrence.identity));
|
|
175
|
+
continue;
|
|
176
|
+
}
|
|
177
|
+
const digest = inputDigestOf(input.subject, occurrence, entry?.inputSchemaId, catalog);
|
|
178
|
+
if ('reason' in digest) {
|
|
179
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', path, line, `${label}: ${digest.reason}`, false, occurrence.identity));
|
|
180
|
+
continue;
|
|
181
|
+
}
|
|
182
|
+
const obligation = {
|
|
183
|
+
obligationId,
|
|
184
|
+
subject: input.subject,
|
|
185
|
+
occurrence: occurrence.identity,
|
|
186
|
+
word: occurrence.word,
|
|
187
|
+
requirement: occurrence.requirement,
|
|
188
|
+
runs: occurrence.runs,
|
|
189
|
+
provenance: { path, line, adoption: adoption.identity, source: adoption.source },
|
|
190
|
+
applicability,
|
|
191
|
+
required,
|
|
192
|
+
evaluator: entry === undefined
|
|
193
|
+
? {
|
|
194
|
+
id: occurrence.runs,
|
|
195
|
+
contractVersion: '1.0.0',
|
|
196
|
+
implementationVersion: 'builtin',
|
|
197
|
+
implementationDigest: `builtin:${occurrence.runs}`,
|
|
198
|
+
builtin: true,
|
|
199
|
+
availability: 'supported',
|
|
200
|
+
}
|
|
201
|
+
: {
|
|
202
|
+
id: entry.id,
|
|
203
|
+
contractVersion: entry.contractVersion,
|
|
204
|
+
implementationVersion: entry.implementationVersion,
|
|
205
|
+
implementationDigest: entry.implementationDigest,
|
|
206
|
+
builtin: false,
|
|
207
|
+
availability: entry.availability.status,
|
|
208
|
+
},
|
|
209
|
+
inputDigest: digest.digest,
|
|
210
|
+
evidencePolicy: entry === undefined ? { kind: 'fresh-run' } : entry.evidencePolicy,
|
|
211
|
+
};
|
|
212
|
+
const serial = stableSerialize(obligation), previous = byId.get(obligationId);
|
|
213
|
+
if (previous !== undefined && previous.serial !== serial)
|
|
214
|
+
findings.push(note('IA-COMP-OBLIGATION-CONFLICT', path, line, `${label}: selected more than once with different input, applicability or requirement status (occurrence ${index + 1})`, false, occurrence.identity));
|
|
215
|
+
else
|
|
216
|
+
byId.set(obligationId, { obligation, serial });
|
|
217
|
+
}
|
|
218
|
+
for (const [index, directive] of (input.packageMetadata ?? []).entries()) {
|
|
219
|
+
if (!validDirective(directive)) {
|
|
220
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', '<package-metadata>', index + 1, 'Malformed package directive: occurrence, requirement, action optional | disable and a sanitized source are required'));
|
|
221
|
+
continue;
|
|
222
|
+
}
|
|
223
|
+
const matches = [...byId.values()].filter(({ obligation }) => obligation.occurrence === directive.occurrence && obligation.requirement === directive.requirement);
|
|
224
|
+
const label = `${echo(directive.occurrence)}#${echo(directive.requirement)}`;
|
|
225
|
+
if (matches.length === 0) {
|
|
226
|
+
findings.push(note('IA-COMP-OBLIGATION-UNRESOLVED', directive.source, index + 1, `Package metadata names ${label}, which is not a selected obligation`));
|
|
227
|
+
continue;
|
|
228
|
+
}
|
|
229
|
+
for (const match of matches) {
|
|
230
|
+
const { obligation } = match;
|
|
231
|
+
// D1: package metadata never changes a root-adopted obligation, whether the root made it mandatory or required.
|
|
232
|
+
if (obligation.provenance.source === 'root') {
|
|
233
|
+
findings.push(note('IA-COMP-OBLIGATION-WEAKENED', directive.source, index + 1, `Package metadata cannot ${directive.action === 'disable' ? 'disable' : 'relax'} root-adopted obligation ${label}; it is unchanged`, true, obligation.occurrence));
|
|
234
|
+
continue;
|
|
235
|
+
}
|
|
236
|
+
match.obligation =
|
|
237
|
+
directive.action === 'optional'
|
|
238
|
+
? { ...obligation, required: false }
|
|
239
|
+
: {
|
|
240
|
+
...obligation,
|
|
241
|
+
applicability: {
|
|
242
|
+
status: 'not-applicable',
|
|
243
|
+
reason: `Disabled by package metadata ${directive.source}`,
|
|
244
|
+
basis: 'package-metadata',
|
|
245
|
+
source: directive.source,
|
|
246
|
+
},
|
|
247
|
+
};
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
const obligations = [...byId.values()]
|
|
251
|
+
.map(({ obligation }) => obligation)
|
|
252
|
+
.sort((a, b) => compareText(a.obligationId, b.obligationId));
|
|
253
|
+
for (const obligation of obligations)
|
|
254
|
+
if (obligation.required && obligation.applicability.status === 'undetermined')
|
|
255
|
+
findings.push(note('IA-COMP-OBLIGATION-UNDETERMINED', obligation.provenance.path, obligation.provenance.line, `${echo(obligation.occurrence)}#${echo(obligation.requirement)}: required applicability is undetermined (${obligation.applicability.reason})`, false, obligation.occurrence));
|
|
256
|
+
const rowList = [...rows.values()]
|
|
257
|
+
.map((row) => {
|
|
258
|
+
const final = byId.get(row.obligationId)?.obligation;
|
|
259
|
+
return final === undefined ? row : { ...row, required: final.required, applicability: final.applicability };
|
|
260
|
+
})
|
|
261
|
+
.sort((a, b) => compareText(a.occurrence, b.occurrence) ||
|
|
262
|
+
compareText(a.requirement, b.requirement) ||
|
|
263
|
+
compareText(a.runs, b.runs) ||
|
|
264
|
+
compareText(a.obligationId, b.obligationId));
|
|
265
|
+
const unique = rowList.filter((row, i) => i === 0 || stableSerialize(row) !== stableSerialize(rowList[i - 1]));
|
|
266
|
+
return { obligations, rows: unique, findings };
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Pure obligation resolver (C27, OBL-01..03): explicit root adoptions, selected occurrences, a trusted catalog,
|
|
270
|
+
* the pinned catalog digest, the policy revision and captured facts yield immutable obligations sorted by id.
|
|
271
|
+
* An unresolved reference or policy conflict refuses with no partial obligations; undetermined required
|
|
272
|
+
* applicability is a blocking finding; package metadata cannot change a root-adopted obligation (D1).
|
|
273
|
+
* The result carries its D2 digest and is recorded as issued by this module.
|
|
274
|
+
*/
|
|
275
|
+
export function resolveObligations(input) {
|
|
276
|
+
const { obligations, findings } = collect(input), refused = findings.some((f) => REFUSING.includes(f.code));
|
|
277
|
+
const content = {
|
|
278
|
+
status: refused ? 'refused' : 'resolved',
|
|
279
|
+
subject: input.subject,
|
|
280
|
+
policyRevision: input.policyRevision,
|
|
281
|
+
catalogDigest: input.catalog.digest,
|
|
282
|
+
obligations: refused ? [] : obligations,
|
|
283
|
+
assessment: assess('COMP-OBLIGATION', input.subject, findings),
|
|
284
|
+
};
|
|
285
|
+
const resolution = deepFreeze({ ...content, digest: resolutionDigest(content) });
|
|
286
|
+
resolutions.add(resolution);
|
|
287
|
+
return resolution;
|
|
288
|
+
}
|
|
289
|
+
/** Inspection (OBL-03): selected definitions, versions, applicability and missing support. Executes no evaluator. */
|
|
290
|
+
export function inspectObligations(input) {
|
|
291
|
+
const { rows, findings } = collect(input);
|
|
292
|
+
return deepFreeze({
|
|
293
|
+
subject: input.subject,
|
|
294
|
+
policyRevision: input.policyRevision,
|
|
295
|
+
catalogFormat: input.catalog.format,
|
|
296
|
+
catalogDigest: input.catalog.digest,
|
|
297
|
+
rows,
|
|
298
|
+
assessment: assess('COMP-OBLIGATION', input.subject, findings),
|
|
299
|
+
});
|
|
300
|
+
}
|
|
301
|
+
//# sourceMappingURL=obligations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"obligations.js","sourceRoot":"","sources":["../src/obligations.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type { ObligationOccurrence } from './obligations.js';
|
|
2
|
+
/**
|
|
3
|
+
* Consumer evaluation profiles (C29, OBL-02). A profile id such as strict-typing-v1 is a consumer contract id, not a
|
|
4
|
+
* native word: it maps one selected law/contract occurrence to required obligations that host catalog evaluators
|
|
5
|
+
* discharge. Cases and declarations never satisfy them; only valid receipts do.
|
|
6
|
+
*/
|
|
7
|
+
export declare const EVALUATION_PROFILES: Readonly<{
|
|
8
|
+
'strict-typing-v1': readonly ["configuration", "included-file-coverage", "compiler-run"];
|
|
9
|
+
}>;
|
|
10
|
+
export type EvaluationProfile = keyof typeof EVALUATION_PROFILES;
|
|
11
|
+
export interface ProfileBinding {
|
|
12
|
+
readonly occurrence: string;
|
|
13
|
+
readonly word: ObligationOccurrence['word'];
|
|
14
|
+
readonly adoption: string;
|
|
15
|
+
readonly provenance: ObligationOccurrence['provenance'];
|
|
16
|
+
/** Catalog evaluator id for each profile requirement; built-in CHECK_IDS are refused. */
|
|
17
|
+
readonly evaluators: Readonly<Record<string, string>>;
|
|
18
|
+
readonly input?: unknown;
|
|
19
|
+
readonly applicability?: string;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Expand a profile into required obligation occurrences with requirement `<profile>/<name>`, for resolveObligations.
|
|
23
|
+
* Throws TypeError for an unknown profile, a missing or extra requirement mapping, or an evaluator id that is not a
|
|
24
|
+
* catalog id (built-ins cannot discharge a profile; the real compiler run must come from an installed evaluator).
|
|
25
|
+
*/
|
|
26
|
+
export declare function profileOccurrences(profile: EvaluationProfile, binding: ProfileBinding): readonly ObligationOccurrence[];
|
|
27
|
+
//# sourceMappingURL=profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.d.ts","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAG7D;;;;GAIG;AACH,eAAO,MAAM,mBAAmB;;EAE9B,CAAC;AACH,MAAM,MAAM,iBAAiB,GAAG,MAAM,OAAO,mBAAmB,CAAC;AACjE,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,IAAI,EAAE,oBAAoB,CAAC,MAAM,CAAC,CAAC;IAC5C,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,oBAAoB,CAAC,YAAY,CAAC,CAAC;IACxD,yFAAyF;IACzF,QAAQ,CAAC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACtD,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AACD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,iBAAiB,EAC1B,OAAO,EAAE,cAAc,GACtB,SAAS,oBAAoB,EAAE,CAwBjC"}
|
package/dist/profiles.js
ADDED
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import { isBuiltinCheck } from './check-ids.js';
|
|
2
|
+
import { EVALUATOR_ID } from './catalog.js';
|
|
3
|
+
import { exactKeys } from './shape.js';
|
|
4
|
+
/**
|
|
5
|
+
* Consumer evaluation profiles (C29, OBL-02). A profile id such as strict-typing-v1 is a consumer contract id, not a
|
|
6
|
+
* native word: it maps one selected law/contract occurrence to required obligations that host catalog evaluators
|
|
7
|
+
* discharge. Cases and declarations never satisfy them; only valid receipts do.
|
|
8
|
+
*/
|
|
9
|
+
export const EVALUATION_PROFILES = Object.freeze({
|
|
10
|
+
'strict-typing-v1': Object.freeze(['configuration', 'included-file-coverage', 'compiler-run']),
|
|
11
|
+
});
|
|
12
|
+
/**
|
|
13
|
+
* Expand a profile into required obligation occurrences with requirement `<profile>/<name>`, for resolveObligations.
|
|
14
|
+
* Throws TypeError for an unknown profile, a missing or extra requirement mapping, or an evaluator id that is not a
|
|
15
|
+
* catalog id (built-ins cannot discharge a profile; the real compiler run must come from an installed evaluator).
|
|
16
|
+
*/
|
|
17
|
+
export function profileOccurrences(profile, binding) {
|
|
18
|
+
const names = EVALUATION_PROFILES[profile];
|
|
19
|
+
if (!Object.hasOwn(EVALUATION_PROFILES, profile) || names === undefined)
|
|
20
|
+
throw new TypeError(`Unknown evaluation profile ${String(profile)}`);
|
|
21
|
+
if (!exactKeys(binding.evaluators, names))
|
|
22
|
+
throw new TypeError(`${profile} requires exactly the evaluators ${names.join(', ')}`);
|
|
23
|
+
return Object.freeze(names.map((name) => {
|
|
24
|
+
const runs = binding.evaluators[name];
|
|
25
|
+
if (typeof runs !== 'string' || !EVALUATOR_ID.test(runs) || isBuiltinCheck(runs))
|
|
26
|
+
throw new TypeError(`${profile}/${name} must map to a catalog evaluator id`);
|
|
27
|
+
return Object.freeze({
|
|
28
|
+
identity: binding.occurrence,
|
|
29
|
+
word: binding.word,
|
|
30
|
+
adoption: binding.adoption,
|
|
31
|
+
requirement: `${profile}/${name}`,
|
|
32
|
+
runs,
|
|
33
|
+
provenance: binding.provenance,
|
|
34
|
+
required: true,
|
|
35
|
+
...(binding.input === undefined ? {} : { input: binding.input }),
|
|
36
|
+
...(binding.applicability === undefined ? {} : { applicability: binding.applicability }),
|
|
37
|
+
});
|
|
38
|
+
}));
|
|
39
|
+
}
|
|
40
|
+
//# sourceMappingURL=profiles.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"profiles.js","sourceRoot":"","sources":["../src/profiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAE5C,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,MAAM,CAAC,MAAM,CAAC;IAC/C,kBAAkB,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,eAAe,EAAE,wBAAwB,EAAE,cAAc,CAAU,CAAC;CACxG,CAAC,CAAC;AAYH;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAChC,OAA0B,EAC1B,OAAuB;IAEvB,MAAM,KAAK,GAAI,mBAAmE,CAAC,OAAO,CAAC,CAAC;IAC5F,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,mBAAmB,EAAE,OAAO,CAAC,IAAI,KAAK,KAAK,SAAS;QACrE,MAAM,IAAI,SAAS,CAAC,8BAA8B,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IACvE,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,UAAU,EAAE,KAAK,CAAC;QACvC,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,oCAAoC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACxF,OAAO,MAAM,CAAC,MAAM,CAClB,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACjB,MAAM,IAAI,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC;YAC9E,MAAM,IAAI,SAAS,CAAC,GAAG,OAAO,IAAI,IAAI,qCAAqC,CAAC,CAAC;QAC/E,OAAO,MAAM,CAAC,MAAM,CAAC;YACnB,QAAQ,EAAE,OAAO,CAAC,UAAU;YAC5B,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,WAAW,EAAE,GAAG,OAAO,IAAI,IAAI,EAAE;YACjC,IAAI;YACJ,UAAU,EAAE,OAAO,CAAC,UAAU;YAC9B,QAAQ,EAAE,IAAI;YACd,GAAG,CAAC,OAAO,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC;SACzF,CAAC,CAAC;IACL,CAAC,CAAC,CACH,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { CompiledRecord } from '@inventarch/language';
|
|
2
|
+
import type { Assessment } from './types.js';
|
|
3
|
+
export { cite, fieldText, governanceClauses, text } from './record-text.js';
|
|
4
|
+
export { LEGACY_STEWARD_TOOLS, REQUIRE_STEWARD_PROFILES, STEWARD_HOST_TABLE } from './steward-profile.js';
|
|
5
|
+
export declare const PROJECTION_MARKER = "<!-- Generated by tools/projections/generate.ts; edit the cited native records. -->";
|
|
6
|
+
export interface HostArtifact {
|
|
7
|
+
readonly path: string;
|
|
8
|
+
readonly text: string;
|
|
9
|
+
}
|
|
10
|
+
export interface HostArtifacts {
|
|
11
|
+
readonly assessment: Assessment;
|
|
12
|
+
readonly artifacts: readonly HostArtifact[];
|
|
13
|
+
}
|
|
14
|
+
/** Revision-bound physical membership supplied by an admitted-view composition root. */
|
|
15
|
+
export interface ProjectionMembership {
|
|
16
|
+
readonly revision: string;
|
|
17
|
+
readonly members: readonly {
|
|
18
|
+
readonly path: string;
|
|
19
|
+
readonly system: string | null;
|
|
20
|
+
readonly root: string | null;
|
|
21
|
+
}[];
|
|
22
|
+
}
|
|
23
|
+
type Member = ProjectionMembership['members'][number];
|
|
24
|
+
/** One admitted non-floor system with its uniquely resolved, correctly rooted steward. */
|
|
25
|
+
export interface AdmittedSteward {
|
|
26
|
+
readonly system: CompiledRecord;
|
|
27
|
+
readonly member: Member;
|
|
28
|
+
readonly agent: CompiledRecord;
|
|
29
|
+
}
|
|
30
|
+
export interface Admission {
|
|
31
|
+
readonly byPath: ReadonlyMap<string, Member>;
|
|
32
|
+
readonly systems: readonly AdmittedSteward[];
|
|
33
|
+
}
|
|
34
|
+
export declare const invalidAssessment: (message: string) => HostArtifacts;
|
|
35
|
+
/**
|
|
36
|
+
* Spec §6.1: the refusal conditions every host renderer shares. Checks, in order: a fresh, matching revision;
|
|
37
|
+
* a portable, non-aliased, correctly rooted membership covering every admitted source; unique record identities;
|
|
38
|
+
* and, per admitted non-floor system, a single unfragmented steward ref resolving to a uniquely named agent
|
|
39
|
+
* declared under that system's own membership root. Callers render artifacts from the returned admission.
|
|
40
|
+
*/
|
|
41
|
+
export declare function admittedStewards(records: readonly CompiledRecord[], revision: string, membership: ProjectionMembership): Admission | HostArtifacts;
|
|
42
|
+
export interface RenderOptions {
|
|
43
|
+
/** Refuse a steward without an `@agent-profile`. Defaults to REQUIRE_STEWARD_PROFILES. */
|
|
44
|
+
readonly requireStewardProfiles?: boolean;
|
|
45
|
+
}
|
|
46
|
+
/** C22: interpret admitted semantic products; no filesystem or source parser. */
|
|
47
|
+
export declare function renderHostArtifacts(records: readonly CompiledRecord[], revision: string, membership?: ProjectionMembership, _modes?: readonly {
|
|
48
|
+
readonly invocation: string;
|
|
49
|
+
readonly meaning: string;
|
|
50
|
+
}[], _options?: RenderOptions): HostArtifacts;
|
|
51
|
+
//# sourceMappingURL=projections.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"projections.d.ts","sourceRoot":"","sources":["../src/projections.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAE3D,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAE7C,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,iBAAiB,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAC5E,OAAO,EAAE,oBAAoB,EAAE,wBAAwB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1G,eAAO,MAAM,iBAAiB,wFAAwF,CAAC;AACvH,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AACD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,UAAU,EAAE,UAAU,CAAC;IAChC,QAAQ,CAAC,SAAS,EAAE,SAAS,YAAY,EAAE,CAAC;CAC7C;AACD,wFAAwF;AACxF,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,SAAS;QAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,EAAE,CAAC;CACtH;AACD,KAAK,MAAM,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAAC;AACtD,0FAA0F;AAC1F,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,MAAM,EAAE,cAAc,CAAC;IAChC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC;CAChC;AACD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7C,QAAQ,CAAC,OAAO,EAAE,SAAS,eAAe,EAAE,CAAC;CAC9C;AAED,eAAO,MAAM,iBAAiB,GAAI,SAAS,MAAM,KAAG,aAMhD,CAAC;AACL;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,EAAE,oBAAoB,GAC/B,SAAS,GAAG,aAAa,CA2E3B;AACD,MAAM,WAAW,aAAa;IAC5B,0FAA0F;IAC1F,QAAQ,CAAC,sBAAsB,CAAC,EAAE,OAAO,CAAC;CAC3C;AACD,iFAAiF;AACjF,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,SAAS,cAAc,EAAE,EAClC,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,oBAAoB,EACjC,MAAM,CAAC,EAAE,SAAS;IAAE,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CAAE,EAAE,EAC7E,QAAQ,GAAE,aAAkB,GAC3B,aAAa,CAyCf"}
|