@intentius/chant 0.100.0 → 0.102.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/dist/agents/checks.d.ts.map +1 -1
- package/dist/attrref.d.ts.map +1 -1
- package/dist/audit/discover.d.ts.map +1 -1
- package/dist/audit/nginx.d.ts.map +1 -1
- package/dist/audit/prior-art.d.ts +48 -0
- package/dist/audit/prior-art.d.ts.map +1 -1
- package/dist/behaviour-kinds.d.ts.map +1 -1
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/builder.d.ts.map +1 -1
- package/dist/cli/build-options.d.ts +2 -0
- package/dist/cli/build-options.d.ts.map +1 -1
- package/dist/cli/commands/build.d.ts.map +1 -1
- package/dist/cli/commands/carve-emit.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon.d.ts +16 -0
- package/dist/cli/commands/check-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/import.d.ts +8 -0
- package/dist/cli/commands/import.d.ts.map +1 -1
- package/dist/cli/commands/init-lexicon.d.ts.map +1 -1
- package/dist/cli/commands/init.d.ts +19 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/onboard.d.ts +9 -0
- package/dist/cli/commands/onboard.d.ts.map +1 -1
- package/dist/cli/commands/pinned-upgrade.d.ts +19 -5
- package/dist/cli/commands/pinned-upgrade.d.ts.map +1 -1
- package/dist/cli/handlers/dev.d.ts.map +1 -1
- package/dist/cli/handlers/fan-out.d.ts.map +1 -1
- package/dist/cli/handlers/lifecycle.d.ts.map +1 -1
- package/dist/cli/handlers/misc.d.ts.map +1 -1
- package/dist/cli/handlers/operator.d.ts +9 -0
- package/dist/cli/handlers/operator.d.ts.map +1 -1
- package/dist/cli/handlers/run.d.ts.map +1 -1
- package/dist/cli/lsp/server.d.ts.map +1 -1
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/mcp/server.d.ts.map +1 -1
- package/dist/cli/mcp/tools/build.d.ts.map +1 -1
- package/dist/cli/mcp/tools/composites.d.ts.map +1 -1
- package/dist/cli/mcp/tools/explain.d.ts.map +1 -1
- package/dist/cli/mcp/tools/import.d.ts.map +1 -1
- package/dist/cli/mcp/tools/lint.d.ts.map +1 -1
- package/dist/cli/mcp/tools/scaffold.d.ts.map +1 -1
- package/dist/cli/mcp/tools/search.d.ts.map +1 -1
- package/dist/cli/mcp/workspace-tools.d.ts +9 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +33 -2
- package/dist/cli/registry.d.ts.map +1 -1
- package/dist/codegen/fetch.d.ts.map +1 -1
- package/dist/codegen/naming.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.d.ts +67 -3
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/registry.d.ts.map +1 -1
- package/dist/components/capability-plugin-loader.d.ts.map +1 -1
- package/dist/components/capability.d.ts.map +1 -1
- package/dist/components/driver.d.ts.map +1 -1
- package/dist/components/fan-out.d.ts.map +1 -1
- package/dist/components/starter-plugin.d.ts.map +1 -1
- package/dist/components/verbs/process-runner.d.ts.map +1 -1
- package/dist/components/verbs/r2-sync.d.ts.map +1 -1
- package/dist/components/verbs/run-agent.d.ts.map +1 -1
- package/dist/components/verbs/sbom-generator.d.ts.map +1 -1
- package/dist/components/verbs/sign.d.ts.map +1 -1
- package/dist/components/verbs/verify.d.ts.map +1 -1
- package/dist/components/verbs/vuln-gate.d.ts.map +1 -1
- package/dist/components/verbs/vuln-scan.d.ts.map +1 -1
- package/dist/components/verbs/wrangler.d.ts.map +1 -1
- package/dist/composite.d.ts.map +1 -1
- package/dist/config.d.ts +30 -7
- package/dist/config.d.ts.map +1 -1
- package/dist/declarable.d.ts +16 -0
- package/dist/declarable.d.ts.map +1 -1
- package/dist/discovery/cache.d.ts.map +1 -1
- package/dist/discovery/fold-import.d.ts +15 -5
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/param-deps.d.ts +16 -0
- package/dist/discovery/param-deps.d.ts.map +1 -1
- package/dist/discovery/sandbox/policy-wire.d.ts.map +1 -1
- package/dist/discovery/specifier-resolve.d.ts +37 -0
- package/dist/discovery/specifier-resolve.d.ts.map +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/fold/fold.d.ts +3 -1
- package/dist/fold/fold.d.ts.map +1 -1
- package/dist/graph-detail.d.ts.map +1 -1
- package/dist/graph-ir.d.ts.map +1 -1
- package/dist/graph-layout.d.ts.map +1 -1
- package/dist/import/base-parser.d.ts.map +1 -1
- package/dist/import/embedded.d.ts +7 -0
- package/dist/import/embedded.d.ts.map +1 -1
- package/dist/import/parser-options.d.ts +14 -0
- package/dist/import/parser-options.d.ts.map +1 -0
- package/dist/import/parser.d.ts +17 -0
- package/dist/import/parser.d.ts.map +1 -1
- package/dist/kubectl-context.d.ts.map +1 -1
- package/dist/lexicon-output.d.ts.map +1 -1
- package/dist/lexicon-schema.d.ts +3 -3
- package/dist/lexicon.d.ts +78 -3
- package/dist/lexicon.d.ts.map +1 -1
- package/dist/lifecycle/assert-live.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.d.ts +15 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/git.d.ts.map +1 -1
- package/dist/lifecycle/member-ledger.d.ts.map +1 -1
- package/dist/lifecycle/observe.d.ts.map +1 -1
- package/dist/lifecycle/plan-digest.d.ts +26 -5
- package/dist/lifecycle/plan-digest.d.ts.map +1 -1
- package/dist/lifecycle/plan-ledger.d.ts.map +1 -1
- package/dist/lifecycle/release-ledger.d.ts.map +1 -1
- package/dist/lifecycle/scenario.d.ts.map +1 -1
- package/dist/lifecycle/status.d.ts.map +1 -1
- package/dist/lifecycle/work-lease.d.ts +61 -2
- package/dist/lifecycle/work-lease.d.ts.map +1 -1
- package/dist/lint/config.d.ts +4 -4
- package/dist/lint/engine.d.ts +6 -0
- package/dist/lint/engine.d.ts.map +1 -1
- package/dist/lsp/lexicon-providers.d.ts.map +1 -1
- package/dist/op/activities/activity-contracts.d.ts +12 -11
- package/dist/op/activities/activity-contracts.d.ts.map +1 -1
- package/dist/op/activities/apply.d.ts +79 -9
- package/dist/op/activities/apply.d.ts.map +1 -1
- package/dist/op/activities/decide.d.ts.map +1 -1
- package/dist/op/activities/index.d.ts +1 -1
- package/dist/op/activities/index.d.ts.map +1 -1
- package/dist/op/activities/lexicon-upgrade.d.ts +44 -12
- package/dist/op/activities/lexicon-upgrade.d.ts.map +1 -1
- package/dist/op/activities/propose-upgrade.d.ts +2 -0
- package/dist/op/activities/propose-upgrade.d.ts.map +1 -1
- package/dist/op/activity-contract.d.ts +1 -1
- package/dist/op/activity-failure.d.ts.map +1 -1
- package/dist/op/activity-profiles.d.ts.map +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/composites/apply-op.d.ts +12 -5
- package/dist/op/composites/apply-op.d.ts.map +1 -1
- package/dist/op/composites/lexicon-upgrade-op.d.ts +22 -6
- package/dist/op/composites/lexicon-upgrade-op.d.ts.map +1 -1
- package/dist/op/decide-backend.d.ts.map +1 -1
- package/dist/op/decide-read-inputs.d.ts.map +1 -1
- package/dist/op/emulator-lifecycle.d.ts +21 -2
- package/dist/op/emulator-lifecycle.d.ts.map +1 -1
- package/dist/op/gate-approval.d.ts +5 -1
- package/dist/op/gate-approval.d.ts.map +1 -1
- package/dist/op/gate-wait.d.ts.map +1 -1
- package/dist/op/gate.d.ts +19 -3
- package/dist/op/gate.d.ts.map +1 -1
- package/dist/op/index.d.ts +3 -1
- package/dist/op/index.d.ts.map +1 -1
- package/dist/op/local-executor.d.ts +6 -0
- package/dist/op/local-executor.d.ts.map +1 -1
- package/dist/op/operator.d.ts.map +1 -1
- package/dist/op/run-context.d.ts +39 -0
- package/dist/op/run-context.d.ts.map +1 -0
- package/dist/op/run-live.d.ts.map +1 -1
- package/dist/op/runtimes/local.d.ts.map +1 -1
- package/dist/op/source-archive.d.ts.map +1 -1
- package/dist/op/steward-beside.d.ts.map +1 -1
- package/dist/op/steward-points.d.ts.map +1 -1
- package/dist/op/steward.d.ts.map +1 -1
- package/dist/op/types.d.ts +8 -3
- package/dist/op/types.d.ts.map +1 -1
- package/dist/op/work-lease-run.d.ts +24 -4
- package/dist/op/work-lease-run.d.ts.map +1 -1
- package/dist/project-root.d.ts.map +1 -1
- package/dist/provenance.d.ts +21 -0
- package/dist/provenance.d.ts.map +1 -1
- package/dist/pseudo-parameter.d.ts.map +1 -1
- package/dist/reconcile.d.ts.map +1 -1
- package/dist/secret-materialization.d.ts.map +1 -1
- package/dist/serializer.d.ts +8 -0
- package/dist/serializer.d.ts.map +1 -1
- package/dist/telemetry-attribution.d.ts +77 -0
- package/dist/telemetry-attribution.d.ts.map +1 -0
- package/dist/terraform/emit-source.d.ts.map +1 -1
- package/dist/terraform/parse.d.ts.map +1 -1
- package/dist/testing.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/decide-workspace.d.ts +1 -1
- package/dist/workspace/__fixtures__/decide-workspace.d.ts.map +1 -1
- package/dist/workspace/agent-cli.d.ts +88 -0
- package/dist/workspace/agent-cli.d.ts.map +1 -0
- package/dist/workspace/box-factory.d.ts +73 -0
- package/dist/workspace/box-factory.d.ts.map +1 -0
- package/dist/workspace/changes-cli.d.ts.map +1 -1
- package/dist/workspace/changes.d.ts +8 -1
- package/dist/workspace/changes.d.ts.map +1 -1
- package/dist/workspace/chant-migrations/chud-lexicon-exit.d.ts.map +1 -1
- package/dist/workspace/checks/boxes.d.ts.map +1 -1
- package/dist/workspace/checks/links.d.ts +1 -0
- package/dist/workspace/checks/links.d.ts.map +1 -1
- package/dist/workspace/checks/live.d.ts +40 -0
- package/dist/workspace/checks/live.d.ts.map +1 -0
- package/dist/workspace/checks.d.ts +26 -2
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/compose-graph.d.ts +73 -0
- package/dist/workspace/compose-graph.d.ts.map +1 -1
- package/dist/workspace/conformance/index.d.ts +67 -6
- package/dist/workspace/conformance/index.d.ts.map +1 -1
- package/dist/workspace/conformance/vitest.d.ts +12 -3
- package/dist/workspace/conformance/vitest.d.ts.map +1 -1
- package/dist/workspace/conformance/writer.d.ts +368 -0
- package/dist/workspace/conformance/writer.d.ts.map +1 -0
- package/dist/workspace/decide.d.ts +1 -1
- package/dist/workspace/decide.d.ts.map +1 -1
- package/dist/workspace/declaration.d.ts +119 -0
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +368 -4
- package/dist/workspace/export-cli.d.ts +12 -0
- package/dist/workspace/export-cli.d.ts.map +1 -0
- package/dist/workspace/export.d.ts +145 -0
- package/dist/workspace/export.d.ts.map +1 -0
- package/dist/workspace/generated-files.d.ts.map +1 -1
- package/dist/workspace/graph-cache.d.ts.map +1 -1
- package/dist/workspace/graph-cli.d.ts +2 -0
- package/dist/workspace/graph-cli.d.ts.map +1 -1
- package/dist/workspace/identity.d.ts +111 -0
- package/dist/workspace/identity.d.ts.map +1 -0
- package/dist/workspace/import.d.ts +73 -0
- package/dist/workspace/import.d.ts.map +1 -0
- package/dist/workspace/intent-cli.d.ts +7 -4
- package/dist/workspace/intent-cli.d.ts.map +1 -1
- package/dist/workspace/intent-record.d.ts +8 -1
- package/dist/workspace/intent-record.d.ts.map +1 -1
- package/dist/workspace/intent.d.ts +149 -5
- package/dist/workspace/intent.d.ts.map +1 -1
- package/dist/workspace/kinds.d.ts +24 -6
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/lineage-adopt-cli.d.ts +15 -0
- package/dist/workspace/lineage-adopt-cli.d.ts.map +1 -0
- package/dist/workspace/lineage-adopt.d.ts +106 -0
- package/dist/workspace/lineage-adopt.d.ts.map +1 -0
- package/dist/workspace/lineage-check.d.ts +9 -2
- package/dist/workspace/lineage-check.d.ts.map +1 -1
- package/dist/workspace/lineage-cli.d.ts +6 -1
- package/dist/workspace/lineage-cli.d.ts.map +1 -1
- package/dist/workspace/lineage-hash-index.d.ts +110 -0
- package/dist/workspace/lineage-hash-index.d.ts.map +1 -0
- package/dist/workspace/lineage-init.d.ts +10 -0
- package/dist/workspace/lineage-init.d.ts.map +1 -1
- package/dist/workspace/lineage-lock.d.ts +149 -2
- package/dist/workspace/lineage-lock.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.d.ts +15 -3
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-provenance.d.ts +18 -0
- package/dist/workspace/lineage-provenance.d.ts.map +1 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts +2 -0
- package/dist/workspace/lineage-upgrade-cli.d.ts.map +1 -1
- package/dist/workspace/lineage-upgrade.d.ts +30 -1
- package/dist/workspace/lineage-upgrade.d.ts.map +1 -1
- package/dist/workspace/lineage-versions.d.ts +116 -0
- package/dist/workspace/lineage-versions.d.ts.map +1 -0
- package/dist/workspace/links.d.ts +31 -5
- package/dist/workspace/links.d.ts.map +1 -1
- package/dist/workspace/ls-generated.d.ts +37 -0
- package/dist/workspace/ls-generated.d.ts.map +1 -0
- package/dist/workspace/ls.d.ts +4 -0
- package/dist/workspace/ls.d.ts.map +1 -1
- package/dist/workspace/member-commands.d.ts.map +1 -1
- package/dist/workspace/nested-graph.d.ts +56 -0
- package/dist/workspace/nested-graph.d.ts.map +1 -0
- package/dist/workspace/nesting.d.ts +21 -0
- package/dist/workspace/nesting.d.ts.map +1 -0
- package/dist/workspace/pin-cli.d.ts +10 -0
- package/dist/workspace/pin-cli.d.ts.map +1 -0
- package/dist/workspace/pin-integrity.d.ts +51 -0
- package/dist/workspace/pin-integrity.d.ts.map +1 -0
- package/dist/workspace/points.d.ts.map +1 -1
- package/dist/workspace/principal-classes.d.ts +114 -0
- package/dist/workspace/principal-classes.d.ts.map +1 -0
- package/dist/workspace/reason-codes.d.ts +47 -3
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-assets.d.ts.map +1 -1
- package/dist/workspace/record-sessions.d.ts +7 -11
- package/dist/workspace/record-sessions.d.ts.map +1 -1
- package/dist/workspace/records-checkout.d.ts +54 -0
- package/dist/workspace/records-checkout.d.ts.map +1 -0
- package/dist/workspace/records-cli.d.ts +57 -2
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-close.d.ts +5 -2
- package/dist/workspace/records-close.d.ts.map +1 -1
- package/dist/workspace/records-since.d.ts.map +1 -1
- package/dist/workspace/records-write.d.ts +23 -4
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records.d.ts +58 -5
- package/dist/workspace/records.d.ts.map +1 -1
- package/dist/workspace/returns.d.ts +129 -0
- package/dist/workspace/returns.d.ts.map +1 -0
- package/dist/workspace/runs-cli.d.ts +164 -0
- package/dist/workspace/runs-cli.d.ts.map +1 -0
- package/dist/workspace/runs.d.ts +423 -0
- package/dist/workspace/runs.d.ts.map +1 -0
- package/dist/workspace/source-block.d.ts +1 -1
- package/dist/workspace/source-block.d.ts.map +1 -1
- package/dist/workspace/status-gates.d.ts +15 -3
- package/dist/workspace/status-gates.d.ts.map +1 -1
- package/dist/workspace/status.d.ts +10 -0
- package/dist/workspace/status.d.ts.map +1 -1
- package/dist/workspace/symbols.d.ts +52 -0
- package/dist/workspace/symbols.d.ts.map +1 -0
- package/dist/workspace/template-manifest.d.ts +11 -3
- package/dist/workspace/template-manifest.d.ts.map +1 -1
- package/dist/workspace/trailer-joins.d.ts +46 -0
- package/dist/workspace/trailer-joins.d.ts.map +1 -0
- package/dist/workspace/trailers.d.ts +89 -0
- package/dist/workspace/trailers.d.ts.map +1 -0
- package/dist/workspace/trust/attestor.d.ts +8 -0
- package/dist/workspace/trust/attestor.d.ts.map +1 -1
- package/dist/workspace/trust/dsse.d.ts +58 -0
- package/dist/workspace/trust/dsse.d.ts.map +1 -0
- package/dist/workspace/trust/evidence-cli.d.ts +66 -0
- package/dist/workspace/trust/evidence-cli.d.ts.map +1 -0
- package/dist/workspace/trust/evidence.d.ts +93 -0
- package/dist/workspace/trust/evidence.d.ts.map +1 -0
- package/dist/workspace/trust/policy.d.ts +54 -1
- package/dist/workspace/trust/policy.d.ts.map +1 -1
- package/dist/workspace/trust/provenance.d.ts +21 -1
- package/dist/workspace/trust/provenance.d.ts.map +1 -1
- package/dist/workspace/trust/rotation.d.ts +132 -0
- package/dist/workspace/trust/rotation.d.ts.map +1 -0
- package/dist/workspace/trust/seal.d.ts +33 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/signers-cli.d.ts +49 -0
- package/dist/workspace/trust/signers-cli.d.ts.map +1 -0
- package/dist/workspace/trust/ssh-commit.d.ts +12 -0
- package/dist/workspace/trust/ssh-commit.d.ts.map +1 -1
- package/dist/workspace/trust/test-repo.d.ts +13 -0
- package/dist/workspace/trust/test-repo.d.ts.map +1 -1
- package/dist/workspace/trust/verify.d.ts +15 -0
- package/dist/workspace/trust/verify.d.ts.map +1 -1
- package/dist/workspace/work-cli.d.ts +39 -3
- package/dist/workspace/work-cli.d.ts.map +1 -1
- package/dist/workspace/work-evidence.d.ts +1 -1
- package/dist/workspace/work-evidence.d.ts.map +1 -1
- package/dist/workspace/work.d.ts +26 -1
- package/dist/workspace/work.d.ts.map +1 -1
- package/dist/workspace/workspace-principals.schema.json +60 -0
- package/dist/workspace/write-scope.d.ts +259 -0
- package/dist/workspace/write-scope.d.ts.map +1 -0
- package/dist/yaml.d.ts +21 -39
- package/dist/yaml.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/audit/prior-art.ts +15 -0
- package/src/build.ts +8 -0
- package/src/cli/build-options.ts +4 -1
- package/src/cli/commands/__fixtures__/init-lexicon-output/package.json +1 -1
- package/src/cli/commands/build.ts +2 -0
- package/src/cli/commands/carve-emit-state.test.ts +4 -0
- package/src/cli/commands/carve-emit.ts +5 -19
- package/src/cli/commands/check-lexicon.test.ts +62 -1
- package/src/cli/commands/check-lexicon.ts +36 -6
- package/src/cli/commands/import-live.test.ts +87 -1
- package/src/cli/commands/import-parser-options.test.ts +133 -0
- package/src/cli/commands/import.ts +69 -25
- package/src/cli/commands/init-lexicon/templates/project.ts +1 -1
- package/src/cli/commands/init.test.ts +8 -1
- package/src/cli/commands/init.ts +23 -8
- package/src/cli/commands/lint.test.ts +37 -0
- package/src/cli/commands/onboard.test.ts +53 -3
- package/src/cli/commands/onboard.ts +52 -4
- package/src/cli/commands/pinned-upgrade.ts +73 -33
- package/src/cli/handlers/__snapshots__/build-member.test.ts.snap +2 -2
- package/src/cli/handlers/components.ts +2 -2
- package/src/cli/handlers/dev.ts +8 -6
- package/src/cli/handlers/fan-out.test.ts +6 -6
- package/src/cli/handlers/fan-out.ts +2 -1
- package/src/cli/handlers/graph.test.ts +42 -0
- package/src/cli/handlers/graph.ts +22 -0
- package/src/cli/handlers/lifecycle.test.ts +67 -0
- package/src/cli/handlers/lifecycle.ts +6 -5
- package/src/cli/handlers/misc.ts +2 -0
- package/src/cli/handlers/operator.ts +88 -4
- package/src/cli/handlers/run.test.ts +111 -0
- package/src/cli/handlers/run.ts +85 -24
- package/src/cli/handlers/scenario.ts +2 -2
- package/src/cli/main.test.ts +33 -0
- package/src/cli/main.ts +168 -17
- package/src/cli/mcp/workspace-tools.test.ts +5 -2
- package/src/cli/mcp/workspace-tools.ts +62 -4
- package/src/cli/registry.ts +33 -2
- package/src/cli/serve-mcp-workspace.test.ts +1 -1
- package/src/codegen/pinned-upgrade-multi.test.ts +157 -0
- package/src/codegen/pinned-upgrade-tags.test.ts +112 -0
- package/src/codegen/pinned-upgrade.test.ts +104 -0
- package/src/codegen/pinned-upgrade.ts +250 -56
- package/src/codegen/release-wiring.test.ts +5 -1
- package/src/codegen/testdata/postgres-tags.json +242 -0
- package/src/components/fan-out-output.test.ts +1 -1
- package/src/components/fan-out.test.ts +1 -1
- package/src/components/promote.test.ts +1 -1
- package/src/config.test.ts +21 -0
- package/src/config.ts +27 -0
- package/src/content-digest.test.ts +2 -2
- package/src/declarable.test.ts +21 -0
- package/src/declarable.ts +19 -0
- package/src/discovery/fold-composite.test.ts +41 -5
- package/src/discovery/fold-import.test.ts +129 -0
- package/src/discovery/fold-import.ts +643 -131
- package/src/discovery/fold-package-composite.test.ts +264 -0
- package/src/discovery/fold-specifiers.test.ts +191 -0
- package/src/discovery/param-deps.test.ts +66 -1
- package/src/discovery/param-deps.ts +45 -0
- package/src/discovery/specifier-resolve.ts +344 -0
- package/src/fold/fold.test.ts +39 -1
- package/src/fold/fold.ts +83 -9
- package/src/fold-provenance.test.ts +140 -0
- package/src/graph-ir.test.ts +83 -0
- package/src/graph-ir.ts +29 -0
- package/src/import/embedded.test.ts +20 -0
- package/src/import/embedded.ts +13 -0
- package/src/import/parser-options.ts +46 -0
- package/src/import/parser.ts +20 -0
- package/src/lexicon.ts +79 -3
- package/src/lifecycle/gate-ledger.test.ts +14 -0
- package/src/lifecycle/gate-ledger.ts +18 -1
- package/src/lifecycle/observe.test.ts +18 -0
- package/src/lifecycle/observe.ts +6 -4
- package/src/lifecycle/plan-digest.test.ts +54 -3
- package/src/lifecycle/plan-digest.ts +38 -8
- package/src/lifecycle/snapshot.ts +2 -2
- package/src/lifecycle/work-lease.test.ts +1 -1
- package/src/lifecycle/work-lease.ts +93 -2
- package/src/lint/engine.test.ts +55 -0
- package/src/lint/engine.ts +30 -4
- package/src/lint/output-docs.test.ts +59 -56
- package/src/op/activities/activity-contracts.ts +1 -0
- package/src/op/activities/apply.test.ts +189 -5
- package/src/op/activities/apply.ts +230 -8
- package/src/op/activities/index.ts +3 -0
- package/src/op/activities/lexicon-upgrade.test.ts +160 -6
- package/src/op/activities/lexicon-upgrade.ts +154 -51
- package/src/op/activities/propose-upgrade.ts +8 -5
- package/src/op/composites/apply-op.ts +12 -5
- package/src/op/composites/composites.test.ts +30 -3
- package/src/op/composites/lexicon-upgrade-op.test.ts +7 -2
- package/src/op/composites/lexicon-upgrade-op.ts +29 -8
- package/src/op/emulator-lifecycle.test.ts +23 -0
- package/src/op/emulator-lifecycle.ts +52 -14
- package/src/op/gate-approval.test.ts +91 -0
- package/src/op/gate-approval.ts +5 -1
- package/src/op/gate.ts +34 -8
- package/src/op/index.ts +3 -1
- package/src/op/local-executor.test.ts +15 -0
- package/src/op/local-executor.ts +40 -12
- package/src/op/local-output.ts +1 -1
- package/src/op/operator.ts +4 -0
- package/src/op/run-context.test.ts +141 -0
- package/src/op/run-context.ts +51 -0
- package/src/op/runtimes/local.test.ts +14 -0
- package/src/op/runtimes/local.ts +2 -0
- package/src/op/steward-beside.ts +2 -0
- package/src/op/types.ts +8 -3
- package/src/op/work-lease-run.test.ts +47 -0
- package/src/op/work-lease-run.ts +73 -11
- package/src/provenance.ts +35 -0
- package/src/serializer.ts +9 -0
- package/src/telemetry-attribution.test.ts +91 -0
- package/src/telemetry-attribution.ts +145 -0
- package/src/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
- package/src/workspace/agent-cli.ts +138 -0
- package/src/workspace/agent.schema.json +378 -0
- package/src/workspace/behold-kinds.test.ts +1 -1
- package/src/workspace/box-factory.test.ts +320 -0
- package/src/workspace/box-factory.ts +103 -0
- package/src/workspace/changes-cli.ts +5 -0
- package/src/workspace/changes.schema.json +171 -1
- package/src/workspace/changes.ts +61 -4
- package/src/workspace/check-live.test.ts +192 -0
- package/src/workspace/check.schema.json +64 -0
- package/src/workspace/checks/boxes.test.ts +2 -0
- package/src/workspace/checks/links.ts +23 -2
- package/src/workspace/checks/live.ts +113 -0
- package/src/workspace/checks.test.ts +2 -2
- package/src/workspace/checks.ts +49 -8
- package/src/workspace/compose-graph.test.ts +47 -0
- package/src/workspace/compose-graph.ts +127 -3
- package/src/workspace/conformance/__fixture__/decisions/decision.kind.mjs +7 -1
- package/src/workspace/conformance/__fixture__/decisions/decision.schema.json +5 -0
- package/src/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +27 -0
- package/src/workspace/conformance/__writer_fixture__/answers/answer.schema.json +95 -0
- package/src/workspace/conformance/__writer_fixture__/decisions/points.json +132 -0
- package/src/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +48 -0
- package/src/workspace/conformance/__writer_fixture__/sessions/session.schema.json +108 -0
- package/src/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/src/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/src/workspace/conformance/__writer_fixture__/work/work.schema.json +578 -0
- package/src/workspace/conformance/conformance.e2e.test.ts +35 -3
- package/src/workspace/conformance/index.mjs +30 -3
- package/src/workspace/conformance/index.ts +103 -15
- package/src/workspace/conformance/vitest.ts +44 -2
- package/src/workspace/conformance/writer-conformance.e2e.test.ts +131 -0
- package/src/workspace/conformance/writer.test.ts +156 -0
- package/src/workspace/conformance/writer.ts +880 -0
- package/src/workspace/decide.ts +7 -1
- package/src/workspace/declaration.schema.json +368 -4
- package/src/workspace/declaration.ts +270 -1
- package/src/workspace/declared-kinds.test.ts +33 -0
- package/src/workspace/evidence.schema.json +279 -0
- package/src/workspace/export-cli.ts +180 -0
- package/src/workspace/export-import.test.ts +282 -0
- package/src/workspace/export.ts +486 -0
- package/src/workspace/graph-cli.ts +51 -2
- package/src/workspace/graph-contract.test.ts +89 -4
- package/src/workspace/graph.schema.json +453 -1
- package/src/workspace/identity.test.ts +196 -0
- package/src/workspace/identity.ts +186 -0
- package/src/workspace/import.ts +325 -0
- package/src/workspace/intent-cli.ts +64 -10
- package/src/workspace/intent-record.schema.json +208 -0
- package/src/workspace/intent-record.ts +35 -1
- package/src/workspace/intent-why.test.ts +274 -0
- package/src/workspace/intent.schema.json +718 -7
- package/src/workspace/intent.test.ts +11 -2
- package/src/workspace/intent.ts +495 -32
- package/src/workspace/kinds.test.ts +5 -5
- package/src/workspace/kinds.ts +62 -33
- package/src/workspace/lineage-adopt-cli.ts +103 -0
- package/src/workspace/lineage-adopt.test.ts +552 -0
- package/src/workspace/lineage-adopt.ts +452 -0
- package/src/workspace/lineage-check.ts +26 -5
- package/src/workspace/lineage-cli.ts +12 -2
- package/src/workspace/lineage-hash-index.ts +305 -0
- package/src/workspace/lineage-init.test.ts +9 -0
- package/src/workspace/lineage-init.ts +29 -9
- package/src/workspace/lineage-lock.ts +54 -0
- package/src/workspace/lineage-migrations.test.ts +27 -0
- package/src/workspace/lineage-migrations.ts +44 -14
- package/src/workspace/lineage-provenance.ts +40 -0
- package/src/workspace/lineage-upgrade-cli.ts +9 -5
- package/src/workspace/lineage-upgrade.test.ts +92 -1
- package/src/workspace/lineage-upgrade.ts +111 -16
- package/src/workspace/lineage-versions.ts +348 -0
- package/src/workspace/links.test.ts +121 -2
- package/src/workspace/links.ts +97 -6
- package/src/workspace/ls-contract.test.ts +84 -1
- package/src/workspace/ls-generated.ts +111 -0
- package/src/workspace/ls.schema.json +19 -0
- package/src/workspace/ls.ts +8 -1
- package/src/workspace/member-commands.ts +3 -1
- package/src/workspace/nested-graph.test.ts +176 -0
- package/src/workspace/nested-graph.ts +169 -0
- package/src/workspace/nesting.ts +37 -0
- package/src/workspace/pin-cli.test.ts +71 -0
- package/src/workspace/pin-cli.ts +57 -0
- package/src/workspace/pin-integrity.test.ts +121 -0
- package/src/workspace/pin-integrity.ts +104 -0
- package/src/workspace/points-write.schema.json +2 -0
- package/src/workspace/principal-classes.test.ts +175 -0
- package/src/workspace/principal-classes.ts +307 -0
- package/src/workspace/read-contract.test.ts +24 -0
- package/src/workspace/reason-codes.test.ts +20 -2
- package/src/workspace/reason-codes.ts +53 -3
- package/src/workspace/record-sessions.ts +12 -14
- package/src/workspace/records-amend.schema.json +6 -0
- package/src/workspace/records-checkout.ts +106 -0
- package/src/workspace/records-cli.ts +195 -22
- package/src/workspace/records-close.schema.json +7 -2
- package/src/workspace/records-close.ts +10 -2
- package/src/workspace/records-formats.test.ts +13 -5
- package/src/workspace/records-new.schema.json +6 -0
- package/src/workspace/records-review.schema.json +6 -0
- package/src/workspace/records-sessions.test.ts +23 -6
- package/src/workspace/records-uncommitted.test.ts +171 -0
- package/src/workspace/records-write.test.ts +65 -8
- package/src/workspace/records-write.ts +92 -6
- package/src/workspace/records.schema.json +127 -4
- package/src/workspace/records.ts +123 -5
- package/src/workspace/returns.ts +328 -0
- package/src/workspace/runs-cli.ts +381 -0
- package/src/workspace/runs-write.schema.json +583 -0
- package/src/workspace/runs.schema.json +810 -0
- package/src/workspace/runs.test.ts +242 -0
- package/src/workspace/runs.ts +709 -0
- package/src/workspace/signers.schema.json +206 -0
- package/src/workspace/status-contract.test.ts +5 -0
- package/src/workspace/status-gates.ts +24 -9
- package/src/workspace/status.schema.json +127 -2
- package/src/workspace/status.ts +21 -1
- package/src/workspace/symbols.ts +180 -0
- package/src/workspace/template-manifest.ts +22 -4
- package/src/workspace/trailer-joins.test.ts +171 -0
- package/src/workspace/trailer-joins.ts +82 -0
- package/src/workspace/trailers.ts +148 -0
- package/src/workspace/trust/attestor.ts +15 -0
- package/src/workspace/trust/dsse.ts +134 -0
- package/src/workspace/trust/evidence-cli.ts +195 -0
- package/src/workspace/trust/evidence.test.ts +241 -0
- package/src/workspace/trust/evidence.ts +207 -0
- package/src/workspace/trust/policy.ts +110 -3
- package/src/workspace/trust/provenance.ts +41 -4
- package/src/workspace/trust/record-seal.test.ts +1 -1
- package/src/workspace/trust/rotation.test.ts +258 -0
- package/src/workspace/trust/rotation.ts +336 -0
- package/src/workspace/trust/seal.ts +63 -1
- package/src/workspace/trust/signers-cli.ts +178 -0
- package/src/workspace/trust/ssh-commit.ts +53 -4
- package/src/workspace/trust/test-repo.ts +18 -0
- package/src/workspace/trust/trust.test.ts +8 -2
- package/src/workspace/trust/verify-cli.ts +1 -0
- package/src/workspace/trust/verify.ts +22 -0
- package/src/workspace/work-cli.e2e.test.ts +28 -1
- package/src/workspace/work-cli.ts +133 -8
- package/src/workspace/work-evidence.schema.json +6 -0
- package/src/workspace/work-history.schema.json +73 -1
- package/src/workspace/work-history.test.ts +48 -5
- package/src/workspace/work-kind-fields.test.ts +154 -0
- package/src/workspace/work-lease.schema.json +14 -1
- package/src/workspace/work.ts +82 -0
- package/src/workspace/workspace-principals.schema.json +60 -0
- package/src/workspace/write-scope.test.ts +466 -0
- package/src/workspace/write-scope.ts +573 -0
- package/src/yaml.test.ts +111 -1
- package/src/yaml.ts +141 -549
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Write scope per member and record kind, for each principal class, and the
|
|
3
|
+
* agent sessions bound to one member (#2524 D5, D20; #2548; ws-067).
|
|
4
|
+
*
|
|
5
|
+
* The declaration's `writeScope` block gives a restricted class the members
|
|
6
|
+
* whose files it may write and the record kinds it may write, with which
|
|
7
|
+
* verbs (`new`, `amend`, `review`, `close`). A class with no entry is not
|
|
8
|
+
* restricted. The declaration's `agents` list names agent sessions, each
|
|
9
|
+
* bound to one member: a session writes that member's files, and the records
|
|
10
|
+
* of kinds that member or the workspace declares, as `writeScope.agent`
|
|
11
|
+
* allows. An agent's members can't be widened.
|
|
12
|
+
*
|
|
13
|
+
* Two places apply it, both reading the scope from the base revision so a
|
|
14
|
+
* change can't widen its own scope (#2524 threat model):
|
|
15
|
+
*
|
|
16
|
+
* - The write paths: `chant workspace records new|amend|review|close` and the
|
|
17
|
+
* MCP record tools refuse a write outside the writer's scope with
|
|
18
|
+
* `write-scope-member` or `write-scope-kind`, and an unknown session with
|
|
19
|
+
* `agent-unknown`. The session comes from `CHANT_AGENT`.
|
|
20
|
+
* - The enforcement boundary: `chant workspace check --changes <range>`
|
|
21
|
+
* judges every commit in the range, by its `Chant-Agent` trailer, its
|
|
22
|
+
* attested principal, or its author, and reports each path written outside
|
|
23
|
+
* that writer's scope. Run in CI with an attestation policy, the principal
|
|
24
|
+
* is the signer the policy at base trusts; on a developer machine it is
|
|
25
|
+
* detection only (ws-002).
|
|
26
|
+
*
|
|
27
|
+
* A principal's class comes from the role grants in the trust policy at base,
|
|
28
|
+
* through {@link principalClass} alone (the agent, runner and service roles,
|
|
29
|
+
* then the role each domain class a pinned package supplies names, #3080),
|
|
30
|
+
* or from naming an agent session. Claiming a session only ever narrows what
|
|
31
|
+
* a writer may do, so an unverified `CHANT_AGENT` or trailer is safe to honour.
|
|
32
|
+
*
|
|
33
|
+
* A writeScope key no pinned package supplies fails closed: a writer judged
|
|
34
|
+
* `human` might be in that class, so it is refused with
|
|
35
|
+
* `write-scope-class-unknown` until the plugin is installed at the pinned
|
|
36
|
+
* version or the entry is removed.
|
|
37
|
+
*/
|
|
38
|
+
import { type AgentDeclaration, type ClassScope, type Declaration, type PrincipalClass, type ProtectedPath, type WriteVerb } from "./declaration.js";
|
|
39
|
+
import { classesOf, roleGrants, type ClassRegistry } from "./principal-classes.js";
|
|
40
|
+
import { type TrustPolicy } from "./trust/policy.js";
|
|
41
|
+
import { AGENT_TRAILER } from "./trailers.js";
|
|
42
|
+
/** The environment variable naming the agent session a write is made in. */
|
|
43
|
+
export declare const AGENT_ENV = "CHANT_AGENT";
|
|
44
|
+
/** The commit trailer naming the agent session a commit was made in, one of chant's trailers (`trailers.ts`). */
|
|
45
|
+
export { AGENT_TRAILER };
|
|
46
|
+
/** Why a write is outside its writer's scope. Closed. */
|
|
47
|
+
export declare const WRITE_SCOPE_CODES: readonly ["write-scope-member", "write-scope-kind", "write-scope-class-unknown", "agent-unknown"];
|
|
48
|
+
export type WriteScopeCode = (typeof WRITE_SCOPE_CODES)[number];
|
|
49
|
+
/**
|
|
50
|
+
* What `check --changes` reports a path with: the record-write codes, and a
|
|
51
|
+
* write to a protected path (#3146), which a record write never is. Closed.
|
|
52
|
+
*/
|
|
53
|
+
export declare const SCOPE_FINDING_CODES: readonly ["write-scope-member", "write-scope-kind", "write-scope-class-unknown", "agent-unknown", "write-scope-protected"];
|
|
54
|
+
export type ScopeFindingCode = (typeof SCOPE_FINDING_CODES)[number];
|
|
55
|
+
export { classesOf, roleGrants };
|
|
56
|
+
/**
|
|
57
|
+
* The class a principal is in: the first of agent, runner and service whose
|
|
58
|
+
* role it holds at base, then the first domain class in `classes` whose role
|
|
59
|
+
* it holds (#3080), or human.
|
|
60
|
+
*/
|
|
61
|
+
export declare function principalClass(policy: TrustPolicy, principal: string | null, classes?: ClassRegistry): PrincipalClass;
|
|
62
|
+
/** Who is writing, as the scope judges it. */
|
|
63
|
+
export interface Writer {
|
|
64
|
+
/** The principal named, or null when none is. */
|
|
65
|
+
principal: string | null;
|
|
66
|
+
class: PrincipalClass;
|
|
67
|
+
/** The agent session the writer is bound to, or null. */
|
|
68
|
+
agent: AgentDeclaration | null;
|
|
69
|
+
}
|
|
70
|
+
export declare class WriteScopeError extends Error {
|
|
71
|
+
readonly code: WriteScopeCode;
|
|
72
|
+
constructor(code: WriteScopeCode, message: string);
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* The writer: in the session `agent` names (refused with agent-unknown when
|
|
76
|
+
* the declaration declares none by that name), in the session that lists
|
|
77
|
+
* `principal`, or else in the class `principal`'s roles give it.
|
|
78
|
+
*/
|
|
79
|
+
export declare function resolveWriter(declaration: Declaration | null, policy: TrustPolicy, given: {
|
|
80
|
+
agent?: string | null;
|
|
81
|
+
principal?: string | null;
|
|
82
|
+
}, classes?: ClassRegistry): Writer;
|
|
83
|
+
/**
|
|
84
|
+
* Refuse `writer` when the declaration's writeScope names a class `classes`
|
|
85
|
+
* doesn't know and the writer is judged human (#3080): nothing says which
|
|
86
|
+
* role puts a principal in the unknown class, so this writer may be in it.
|
|
87
|
+
* A writer in another class is judged by that class, which comes first.
|
|
88
|
+
*/
|
|
89
|
+
export declare function unknownClassVerdict(declaration: Declaration | null, writer: Writer, classes: ClassRegistry): {
|
|
90
|
+
ok: true;
|
|
91
|
+
} | {
|
|
92
|
+
ok: false;
|
|
93
|
+
code: "write-scope-class-unknown";
|
|
94
|
+
message: string;
|
|
95
|
+
};
|
|
96
|
+
/** The scope that applies to `writer`, or null when its class is not restricted. An agent is always restricted to its member. */
|
|
97
|
+
export declare function scopeOf(declaration: Declaration | null, writer: Writer): ClassScope | null;
|
|
98
|
+
export type ScopeVerdict = {
|
|
99
|
+
ok: true;
|
|
100
|
+
} | {
|
|
101
|
+
ok: false;
|
|
102
|
+
code: Exclude<ScopeFindingCode, "agent-unknown">;
|
|
103
|
+
message: string;
|
|
104
|
+
};
|
|
105
|
+
/** A record write's verdict: never write-scope-protected, since protected paths judge files that aren't records. */
|
|
106
|
+
export type RecordVerdict = {
|
|
107
|
+
ok: true;
|
|
108
|
+
} | {
|
|
109
|
+
ok: false;
|
|
110
|
+
code: Exclude<WriteScopeCode, "agent-unknown">;
|
|
111
|
+
message: string;
|
|
112
|
+
};
|
|
113
|
+
/** The record kind a write goes to, as the scope reads it. */
|
|
114
|
+
export interface ScopedKind {
|
|
115
|
+
/** The kind file's `recordKind.name`. */
|
|
116
|
+
name: string;
|
|
117
|
+
/** The name the declaration gives it, or null. */
|
|
118
|
+
declaredName: string | null;
|
|
119
|
+
/** The member that declares the kind, or null for the workspace's own kinds. */
|
|
120
|
+
member: string | null;
|
|
121
|
+
/** True when the declaration names the kind; an undeclared kind belongs to the member holding its records. */
|
|
122
|
+
declared: boolean;
|
|
123
|
+
}
|
|
124
|
+
/** Whether `writer` may write a record of `kind` with `verb`. A delete is never in a restricted scope. */
|
|
125
|
+
export declare function judgeRecord(declaration: Declaration | null, writer: Writer, kind: ScopedKind, verb: WriteVerb | "delete"): RecordVerdict;
|
|
126
|
+
/**
|
|
127
|
+
* The protected entry of `entries` that covers `path` (#3146, ws-077): one
|
|
128
|
+
* whose glob matches the path or a directory above it. Null when none does.
|
|
129
|
+
*/
|
|
130
|
+
export declare function protectedEntry(entries: readonly ProtectedPath[], path: string): ProtectedPath | null;
|
|
131
|
+
/**
|
|
132
|
+
* Whether JSON text `before` and `after` differ only in the top-level keys
|
|
133
|
+
* `except` names. False when either is missing or isn't a JSON object.
|
|
134
|
+
*/
|
|
135
|
+
export declare function onlyKeysChanged(before: string | null, after: string | null, except: readonly string[]): boolean;
|
|
136
|
+
/** A file's text before and after a write, read only when a protected entry with `except` needs it. */
|
|
137
|
+
export interface PathChange {
|
|
138
|
+
before(): string | null;
|
|
139
|
+
after(): string | null;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Whether `writer` may write the file at `path`, from the workspace root:
|
|
143
|
+
* the path is in a member the writer may write, and no protected entry of
|
|
144
|
+
* its scope covers it, unless the entry's `except` allows the change (#3146).
|
|
145
|
+
* Without `change`, a write to a path an `except` entry covers is judged as a
|
|
146
|
+
* change outside the allowed keys.
|
|
147
|
+
*/
|
|
148
|
+
export declare function judgePath(declaration: Declaration | null, writer: Writer, path: string, change?: PathChange): ScopeVerdict;
|
|
149
|
+
/** The declaration and policy a write on this machine is judged by. */
|
|
150
|
+
export interface ScopeSource {
|
|
151
|
+
declaration: Declaration | null;
|
|
152
|
+
/** Where the declaration was read: the base revision, or the working tree when there is no base or no declaration at it. */
|
|
153
|
+
from: "base" | "working-tree" | null;
|
|
154
|
+
/** The workspace root on disk, or null without a declaration. */
|
|
155
|
+
rootOnDisk: string | null;
|
|
156
|
+
/** The workspace root from the git root, "." for the git root, or null without a declaration. */
|
|
157
|
+
root: string | null;
|
|
158
|
+
policy: TrustPolicy;
|
|
159
|
+
/** The principal classes: the core four and those the declaration's pins supply, path pins read where the declaration was (#3080). */
|
|
160
|
+
classes: ClassRegistry;
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* The scope for a write from `cwd`: the declaration and the trust policy at
|
|
164
|
+
* the base revision (`origin/HEAD`, `main` or `master`), so a write can't
|
|
165
|
+
* widen its own scope by editing its copy of the declaration. Without a base,
|
|
166
|
+
* or without a declaration at it, the working tree's declaration.
|
|
167
|
+
*/
|
|
168
|
+
export declare function scopeSource(cwd: string): ScopeSource;
|
|
169
|
+
/**
|
|
170
|
+
* The kind a write goes to, as {@link judgeRecord} reads it: the declared
|
|
171
|
+
* entry whose file is `kindFile`, or, for a kind the declaration does not
|
|
172
|
+
* name, the member holding `recordsDir`.
|
|
173
|
+
*/
|
|
174
|
+
export declare function scopedKind(source: ScopeSource, kindName: string, kindFile: string, recordsDir: string): ScopedKind;
|
|
175
|
+
/**
|
|
176
|
+
* Refuse a record write outside the writer's scope (#2548): throws a
|
|
177
|
+
* {@link WriteScopeError}. `agent` is the session the write names
|
|
178
|
+
* (`CHANT_AGENT`), and `principal` who the write names as its author.
|
|
179
|
+
* Returns what it read at base, for the identity rule (#3163).
|
|
180
|
+
*/
|
|
181
|
+
export declare function refuseRecordWrite(cwd: string, write: {
|
|
182
|
+
kindName: string;
|
|
183
|
+
kindFile: string;
|
|
184
|
+
recordsDir: string;
|
|
185
|
+
verb: WriteVerb;
|
|
186
|
+
agent?: string | null;
|
|
187
|
+
principal?: string | null;
|
|
188
|
+
}): ScopeSource;
|
|
189
|
+
/** A commit as the scope check judged it. */
|
|
190
|
+
export interface ScopeCommit {
|
|
191
|
+
commit: string;
|
|
192
|
+
subject: string;
|
|
193
|
+
/** The attested principal, or the author's email when the commit is not attested. */
|
|
194
|
+
principal: string;
|
|
195
|
+
/** Whether the principal is a signer the policy at base attests, or only the author the commit claims. */
|
|
196
|
+
attested: boolean;
|
|
197
|
+
class: PrincipalClass;
|
|
198
|
+
/** The agent session, from the Chant-Agent trailer or the principal, or null. */
|
|
199
|
+
agent: string | null;
|
|
200
|
+
/** Paths in the workspace the commit writes. */
|
|
201
|
+
paths: number;
|
|
202
|
+
}
|
|
203
|
+
export interface ScopeFinding {
|
|
204
|
+
/** `finding:<code>:<commit>:<path>`, or `finding:<code>:<commit>` for agent-unknown and write-scope-class-unknown, which judge the whole commit. */
|
|
205
|
+
id: string;
|
|
206
|
+
code: ScopeFindingCode;
|
|
207
|
+
commit: string;
|
|
208
|
+
/** From the workspace root, or null for a finding on the whole commit. */
|
|
209
|
+
path: string | null;
|
|
210
|
+
principal: string;
|
|
211
|
+
class: PrincipalClass;
|
|
212
|
+
agent: string | null;
|
|
213
|
+
/** For a record file: how it was written, as the records commands name it, or delete. */
|
|
214
|
+
verb: WriteVerb | "delete" | null;
|
|
215
|
+
message: string;
|
|
216
|
+
}
|
|
217
|
+
export interface ScopeReport {
|
|
218
|
+
/** The commit the declaration and the trust policy were read at. */
|
|
219
|
+
base: string;
|
|
220
|
+
/** The classes with a writeScope entry, and agent when any session is declared: core first, then domain classes in pin order, then any no pinned package supplies. */
|
|
221
|
+
restricted: PrincipalClass[];
|
|
222
|
+
agents: string[];
|
|
223
|
+
commits: ScopeCommit[];
|
|
224
|
+
findings: ScopeFinding[];
|
|
225
|
+
}
|
|
226
|
+
/** A record kind the check knows, to tell a record file from another path. */
|
|
227
|
+
export interface CheckKind {
|
|
228
|
+
scoped: ScopedKind;
|
|
229
|
+
/** The records directory, from the repository root. */
|
|
230
|
+
dir: string;
|
|
231
|
+
match: RegExp;
|
|
232
|
+
/** The reviews field, when the kind has one; the verdicts field of a session kind. */
|
|
233
|
+
reviewFields: string[];
|
|
234
|
+
/** The state field and closed states of a session kind, for telling a close. */
|
|
235
|
+
session: {
|
|
236
|
+
stateField: string;
|
|
237
|
+
closed: string[];
|
|
238
|
+
fills: string[];
|
|
239
|
+
} | null;
|
|
240
|
+
format: string;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Judge every commit in `base..head` against the write scope the declaration
|
|
244
|
+
* at `base` gives (#2548). Returns null when that declaration restricts no
|
|
245
|
+
* one: no writeScope block and no agent session. Merges are skipped; the
|
|
246
|
+
* commits they bring are judged instead.
|
|
247
|
+
*/
|
|
248
|
+
export declare function checkWriteScope(q: {
|
|
249
|
+
top: string;
|
|
250
|
+
base: string;
|
|
251
|
+
head: string;
|
|
252
|
+
/** The workspace root from the repository root, "" for the top. */
|
|
253
|
+
prefix: string;
|
|
254
|
+
declaration: Declaration;
|
|
255
|
+
kinds: CheckKind[];
|
|
256
|
+
/** The principal classes the declaration's pins supply at base (#3080). Without it, the core four. */
|
|
257
|
+
classes?: ClassRegistry;
|
|
258
|
+
}): Promise<ScopeReport | null>;
|
|
259
|
+
//# sourceMappingURL=write-scope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"write-scope.d.ts","sourceRoot":"","sources":["../../src/workspace/write-scope.ts"],"names":[],"mappings":"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"}
|
package/dist/yaml.d.ts
CHANGED
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
/**
|
|
2
|
-
*
|
|
2
|
+
* YAML emitter and parser.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* keys
|
|
7
|
-
*
|
|
8
|
-
* parser throws a `YAMLParseError`
|
|
9
|
-
* dropping it (#2991).
|
|
4
|
+
* The emitter writes the block-style YAML chant's serializers produce. The
|
|
5
|
+
* parser is js-yaml with chant's schema (#3006): YAML 1.2 core types,
|
|
6
|
+
* merge keys, `yes`/`no` booleans, and local tags such as `!reference` read
|
|
7
|
+
* as strings. `splitYAMLDocuments` splits a multi-document stream. Input the
|
|
8
|
+
* parser cannot read throws a `YAMLParseError` naming the line.
|
|
10
9
|
*/
|
|
11
10
|
export declare function emitYAML(value: unknown, indent: number): string;
|
|
12
|
-
/** Result of parsing a YAML block. */
|
|
13
|
-
export interface ParseResult {
|
|
14
|
-
value: unknown;
|
|
15
|
-
endIndex: number;
|
|
16
|
-
}
|
|
17
11
|
/**
|
|
18
|
-
*
|
|
19
|
-
*
|
|
20
|
-
*
|
|
21
|
-
*
|
|
12
|
+
* `key: value` at column `indent * 2`, for a serializer that writes a
|
|
13
|
+
* document key by key. A block value follows the colon on the next line; an
|
|
14
|
+
* inline one (a scalar, `{}`, `[]`) needs a space after the colon, or
|
|
15
|
+
* `jobs:{}` is the plain scalar "jobs:{}" rather than a key (#3006).
|
|
16
|
+
*/
|
|
17
|
+
export declare function emitYAMLEntry(key: string, value: unknown, indent?: number): string;
|
|
18
|
+
/**
|
|
19
|
+
* A document the parser cannot read. Its message and `line` name the line,
|
|
20
|
+
* so `chant import` can report "YAML line N: ..." instead of a stack trace.
|
|
22
21
|
*/
|
|
23
22
|
export declare class YAMLParseError extends Error {
|
|
24
23
|
/** 1-based line number within the text handed to the parser. */
|
|
@@ -28,17 +27,16 @@ export declare class YAMLParseError extends Error {
|
|
|
28
27
|
/**
|
|
29
28
|
* Parse a YAML document (or JSON document) into a plain object.
|
|
30
29
|
*
|
|
31
|
-
* Tries `JSON.parse` first
|
|
32
|
-
*
|
|
33
|
-
* {@link
|
|
30
|
+
* Tries `JSON.parse` first, then js-yaml (#3006). A top-level sequence reads
|
|
31
|
+
* as `{}`, since callers rely on getting a mapping back; use
|
|
32
|
+
* {@link parseYAMLDocument} for the list. Throws {@link YAMLParseError} with
|
|
33
|
+
* the line number on input it cannot read.
|
|
34
34
|
*/
|
|
35
35
|
export declare function parseYAML(content: string): Record<string, unknown>;
|
|
36
36
|
/**
|
|
37
37
|
* Parse one YAML (or JSON) document whose top level may be a sequence
|
|
38
|
-
* (#2965). {@link parseYAML}
|
|
39
|
-
*
|
|
40
|
-
* it keeps doing that. This returns the list instead, and otherwise defers to
|
|
41
|
-
* `parseYAML`.
|
|
38
|
+
* (#2965). {@link parseYAML} returns `{}` for a file like `- a\n- b`; this
|
|
39
|
+
* returns the list.
|
|
42
40
|
*/
|
|
43
41
|
export declare function parseYAMLDocument(content: string): unknown;
|
|
44
42
|
/**
|
|
@@ -49,22 +47,6 @@ export declare function parseYAMLDocument(content: string): unknown;
|
|
|
49
47
|
* normalized to `\n`.
|
|
50
48
|
*/
|
|
51
49
|
export declare function splitYAMLDocuments(content: string): string[];
|
|
52
|
-
/**
|
|
53
|
-
* Parse indentation-based YAML lines into a key-value object: the mapping
|
|
54
|
-
* whose keys sit at column `baseIndent`, starting at `startIndex`.
|
|
55
|
-
*
|
|
56
|
-
* It ends at the first line that is not one of its keys: a line at another
|
|
57
|
-
* column, a sequence entry, or text that is not `key:`. That line goes back
|
|
58
|
-
* to the caller in `endIndex`; if no caller owns it, `parseYAML` reports it
|
|
59
|
-
* (#2991). This function never skips a content line.
|
|
60
|
-
*/
|
|
61
|
-
export declare function parseYAMLLines(lines: string[], startIndex: number, baseIndent: number): ParseResult;
|
|
62
|
-
/**
|
|
63
|
-
* Parse a block array: the `- ` entries at column `baseIndent`, starting at
|
|
64
|
-
* `startIndex`. Like {@link parseYAMLLines} it ends at the first line that is
|
|
65
|
-
* not one of its entries and hands that line back in `endIndex`.
|
|
66
|
-
*/
|
|
67
|
-
export declare function parseYAMLArray(lines: string[], startIndex: number, baseIndent: number): ParseResult;
|
|
68
50
|
/**
|
|
69
51
|
* Coerce a scalar string to a typed value.
|
|
70
52
|
*/
|
package/dist/yaml.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"yaml.d.ts","sourceRoot":"","sources":["../src/yaml.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AA4BH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsH/D;AAED;;;;;GAKG;AACH,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,MAAM,SAAI,GAAG,MAAM,CAG7E;AAMD;;;GAGG;AACH,qBAAa,cAAe,SAAQ,KAAK;IACvC,gEAAgE;IAChE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAEtB,YAAY,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAIxC;CACF;AAkID;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAQlE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAO1D;AAED;;;;;;GAMG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAc5D;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAwBlD"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.102.0",
|
|
4
4
|
"description": "Declarative infrastructure-as-code toolkit — TypeScript on Node.js",
|
|
5
5
|
"license": "Apache-2.0",
|
|
6
6
|
"homepage": "https://intentius.io/chant",
|
|
@@ -97,7 +97,7 @@
|
|
|
97
97
|
}
|
|
98
98
|
},
|
|
99
99
|
"scripts": {
|
|
100
|
-
"build": "
|
|
100
|
+
"build": "../../scripts/tsc7.sh -p tsconfig.build.json && tsc-alias -p tsconfig.build.json && find dist -type f \\( -name \"*.js\" -o -name \"*.js.map\" \\) -delete",
|
|
101
101
|
"prepack": "npm run build"
|
|
102
102
|
},
|
|
103
103
|
"dependencies": {
|
package/src/audit/prior-art.ts
CHANGED
|
@@ -117,11 +117,26 @@ export const PRIOR_ART = {
|
|
|
117
117
|
// docs site. The three `general/secrets` checks chant credits live only here:
|
|
118
118
|
// trivy dropped them when it absorbed tfsec.
|
|
119
119
|
"tfsec": { name: "tfsec", url: "https://github.com/aquasecurity/tfsec", license: "MIT", kind: "scanner" },
|
|
120
|
+
"trivy-checks": { name: "trivy-checks", url: "https://github.com/aquasecurity/trivy-checks", license: "MIT", kind: "scanner" },
|
|
120
121
|
// Semgrep's engine is LGPL-2.1 but its rules are not: they ship under the
|
|
121
122
|
// proprietary Semgrep Rules License v1.0, which forbids redistribution. So
|
|
122
123
|
// this entry carries no SPDX id, and no semgrep rule text is ever copied into
|
|
123
124
|
// this repository — a credit by name and link is the whole of it (#2107).
|
|
124
125
|
"semgrep": { name: "Semgrep Registry rules", url: "https://github.com/semgrep/semgrep-rules", license: "Semgrep Rules License v1.0 (proprietary, not an SPDX id)", kind: "scanner" },
|
|
126
|
+
// Prometheus and Grafana observability family (#2916). promtool and amtool
|
|
127
|
+
// ship in the Prometheus and Alertmanager repositories and have no per-rule
|
|
128
|
+
// ids: credits to them name the check (`check rules`, `check-config`) in the
|
|
129
|
+
// lineage file's comments and omit `rule`.
|
|
130
|
+
"promtool": { name: "promtool check rules", url: "https://prometheus.io/docs/prometheus/latest/command-line/promtool/#promtool-check-rules", license: "Apache-2.0", kind: "vendor-validator" },
|
|
131
|
+
"amtool": { name: "amtool check-config", url: "https://github.com/prometheus/alertmanager/blob/main/cmd/amtool/check_config.go", license: "Apache-2.0", kind: "vendor-validator" },
|
|
132
|
+
"pint": { name: "pint (Cloudflare)", url: "https://github.com/cloudflare/pint", license: "Apache-2.0", kind: "scanner" },
|
|
133
|
+
"dashboard-linter": { name: "Grafana dashboard-linter", url: "https://github.com/grafana/dashboard-linter", license: "Apache-2.0", kind: "scanner" },
|
|
134
|
+
// Postgres schema and migration checks (#3285). squawk and strong_migrations
|
|
135
|
+
// are migration linters; their type rules overlap schema-level checks. The
|
|
136
|
+
// wiki page is documentation, not a tool.
|
|
137
|
+
"squawk": { name: "squawk", url: "https://github.com/sbdchd/squawk", license: "Apache-2.0", kind: "scanner" },
|
|
138
|
+
"strong_migrations": { name: "strong_migrations", url: "https://github.com/ankane/strong_migrations", license: "MIT", kind: "scanner" },
|
|
139
|
+
"postgres-wiki-dont-do-this": { name: "PostgreSQL wiki: Don't Do This", url: "https://wiki.postgresql.org/wiki/Don%27t_Do_This", license: "n/a", kind: "specification" },
|
|
125
140
|
} as const satisfies Record<string, PriorArtEntry>;
|
|
126
141
|
|
|
127
142
|
export type PriorArtTool = keyof typeof PRIOR_ART;
|
package/src/build.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { Declarable } from "./declarable";
|
|
2
2
|
import type { Serializer, SerializerResult } from "./serializer";
|
|
3
3
|
import type { OwnershipMarker } from "./ownership";
|
|
4
|
+
import type { TelemetryAttribution } from "./telemetry-attribution";
|
|
4
5
|
import type { BuildError, DiscoveryErrorType } from "./errors";
|
|
5
6
|
import type { IntrinsicDef, BuildRootContribution, BuildRootContributor } from "./lexicon";
|
|
6
7
|
import { getProvenance, type BuildParamProvenance } from "./provenance";
|
|
@@ -194,6 +195,12 @@ export interface BuildOptions {
|
|
|
194
195
|
*/
|
|
195
196
|
ownership?: OwnershipMarker;
|
|
196
197
|
|
|
198
|
+
/**
|
|
199
|
+
* Telemetry attribution facts (#2558), passed to each serializer's
|
|
200
|
+
* {@link SerializeContext}. Resolved by the build command; unset at level 0.
|
|
201
|
+
*/
|
|
202
|
+
telemetry?: TelemetryAttribution;
|
|
203
|
+
|
|
197
204
|
/**
|
|
198
205
|
* The resolved project configuration, passed through to each serializer's
|
|
199
206
|
* {@link SerializeContext} so a dialect can read its lexicon-scoped settings.
|
|
@@ -876,6 +883,7 @@ async function buildFromDiscoveryResult(
|
|
|
876
883
|
const serialized = serializer.serialize(applyBound, lexiconLexiconOutputs, {
|
|
877
884
|
ownership: options?.ownership,
|
|
878
885
|
config: options?.config,
|
|
886
|
+
...(options?.telemetry ? { telemetry: options.telemetry } : {}),
|
|
879
887
|
...(receipts.size > 0 ? { receipts } : {}),
|
|
880
888
|
});
|
|
881
889
|
// Collect any non-fatal serializer diagnostics into the build warnings.
|
package/src/cli/build-options.ts
CHANGED
|
@@ -64,6 +64,8 @@ export interface ProjectBuildOptionsInput {
|
|
|
64
64
|
ownership?: OwnershipMarker;
|
|
65
65
|
/** This build's resolved build-time parameters (#1064). */
|
|
66
66
|
buildParams?: BuildParamProvenance[];
|
|
67
|
+
/** Telemetry attribution facts (#2558), from `resolveTelemetryAttribution`; unset at level 0. */
|
|
68
|
+
telemetry?: import("../telemetry-attribution").TelemetryAttribution;
|
|
67
69
|
}
|
|
68
70
|
|
|
69
71
|
/**
|
|
@@ -75,7 +77,7 @@ export interface ProjectBuildOptionsInput {
|
|
|
75
77
|
* in this function, never at a call site.
|
|
76
78
|
*/
|
|
77
79
|
export function resolveProjectBuildOptions(input: ProjectBuildOptionsInput): BuildOptions {
|
|
78
|
-
const { config, configDir, plugins, modes, ownership, buildParams } = input;
|
|
80
|
+
const { config, configDir, plugins, modes, ownership, buildParams, telemetry } = input;
|
|
79
81
|
|
|
80
82
|
// #1039 — each loaded plugin's registered intrinsics (e.g. AWS's `Sub`), so
|
|
81
83
|
// a file using a registered intrinsic tagged template folds instead of
|
|
@@ -90,6 +92,7 @@ export function resolveProjectBuildOptions(input: ProjectBuildOptionsInput): Bui
|
|
|
90
92
|
|
|
91
93
|
return {
|
|
92
94
|
ownership,
|
|
95
|
+
...(telemetry ? { telemetry } : {}),
|
|
93
96
|
config: config as unknown as Record<string, unknown>,
|
|
94
97
|
fold: modes.fold,
|
|
95
98
|
sandbox: modes.sandbox,
|
|
@@ -8,6 +8,7 @@ import {
|
|
|
8
8
|
resolveKnowledgeDir,
|
|
9
9
|
} from "../../config";
|
|
10
10
|
import { resolveBuildModes, resolveProjectBuildOptions } from "../build-options";
|
|
11
|
+
import { resolveTelemetryAttribution } from "../../telemetry-attribution";
|
|
11
12
|
import { loadOkfBundle } from "../../okf-read";
|
|
12
13
|
import { unknownEnvError } from "../../env";
|
|
13
14
|
import type { OwnershipMarker } from "../../ownership";
|
|
@@ -320,6 +321,7 @@ export async function buildCommand(options: BuildOptions): Promise<BuildResult>
|
|
|
320
321
|
modes,
|
|
321
322
|
ownership,
|
|
322
323
|
buildParams: paramsResolution.provenance,
|
|
324
|
+
telemetry: await resolveTelemetryAttribution(configDir, config as unknown as Record<string, unknown>, env),
|
|
323
325
|
}),
|
|
324
326
|
);
|
|
325
327
|
|
|
@@ -3,6 +3,7 @@ import { mkdtempSync, writeFileSync, rmSync, readFileSync } from "fs";
|
|
|
3
3
|
import { tmpdir } from "os";
|
|
4
4
|
import { join } from "path";
|
|
5
5
|
import { carveEmit, formatCarveEmit } from "./carve-emit";
|
|
6
|
+
import { generateTsConfig, SCAFFOLD_DEV_DEPENDENCIES } from "./init";
|
|
6
7
|
import { lintCommand } from "./lint";
|
|
7
8
|
import { loadHcl2json } from "../../terraform/parse";
|
|
8
9
|
import { readCarveManifest } from "../../terraform/manifest";
|
|
@@ -136,6 +137,9 @@ describe("carve emit --state (real adoption from tfstate)", () => {
|
|
|
136
137
|
const pkg = JSON.parse(readFileSync(join(out, "package.json"), "utf-8"));
|
|
137
138
|
expect(pkg.scripts.build).toBe("chant build src --lexicon aws");
|
|
138
139
|
expect(Object.keys(pkg.dependencies)).toEqual(["@intentius/chant", "@intentius/chant-lexicon-aws"]);
|
|
140
|
+
// What `chant init` writes, which test/example-tsconfigs.e2e.test.ts compiles under TS 5.9 and 7 (#3233).
|
|
141
|
+
expect(pkg.devDependencies).toEqual(SCAFFOLD_DEV_DEPENDENCIES);
|
|
142
|
+
expect(JSON.parse(readFileSync(join(out, "tsconfig.json"), "utf-8"))).toEqual(JSON.parse(generateTsConfig()));
|
|
139
143
|
expect(readFileSync(join(out, "chant.config.ts"), "utf-8")).toContain('lexicons: ["aws"]');
|
|
140
144
|
|
|
141
145
|
// A second emit into the same dir leaves the scaffold (and edits) alone.
|
|
@@ -22,7 +22,7 @@ import { resolveEmitProvider } from "../../terraform/carve-provider";
|
|
|
22
22
|
import { readStateResource, type StateResource } from "../../terraform/state";
|
|
23
23
|
import { writeCarveManifest, type CarveManifest } from "../../terraform/manifest";
|
|
24
24
|
import { adoptFromState, type DeferredParam, type FoldedContribution } from "../../terraform/adopt-state";
|
|
25
|
-
import { getChantVersion } from "./init";
|
|
25
|
+
import { generateTsConfig, getChantVersion, SCAFFOLD_DEV_DEPENDENCIES } from "./init";
|
|
26
26
|
import type { LexiconPlugin, ResourceSelector } from "../../lexicon";
|
|
27
27
|
import type { ImportResult, LiveImportOptions } from "./import";
|
|
28
28
|
|
|
@@ -242,8 +242,8 @@ function deferredParams(report: CarveReport, attributes: Record<string, unknown>
|
|
|
242
242
|
|
|
243
243
|
/**
|
|
244
244
|
* Scaffold the emitted source into a buildable chant project: chant.config.ts,
|
|
245
|
-
* package.json, tsconfig.json
|
|
246
|
-
* `npm install && npm run build` works in the output dir as-is. Existing files
|
|
245
|
+
* package.json, tsconfig.json, with the tsconfig and devDependencies `chant init`
|
|
246
|
+
* writes (#3233), so `npm install && npm run build` works in the output dir as-is. Existing files
|
|
247
247
|
* are never overwritten (re-emits and user edits survive). Deferred inputs are
|
|
248
248
|
* declared as `buildParams` (#998), defaults taken from the state's resolved
|
|
249
249
|
* values, so the first build reproduces what is live while every survivor-fed
|
|
@@ -263,26 +263,12 @@ function scaffoldProject(outDir: string, lexicon: string, params: DeferredParam[
|
|
|
263
263
|
"@intentius/chant": `^${ver}`,
|
|
264
264
|
[`@intentius/chant-lexicon-${lexicon}`]: `^${ver}`,
|
|
265
265
|
},
|
|
266
|
-
devDependencies: {
|
|
267
|
-
typescript: "^5.0.0",
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
const tsconfig = {
|
|
271
|
-
compilerOptions: {
|
|
272
|
-
target: "ES2022",
|
|
273
|
-
module: "NodeNext",
|
|
274
|
-
moduleResolution: "NodeNext",
|
|
275
|
-
strict: true,
|
|
276
|
-
esModuleInterop: true,
|
|
277
|
-
skipLibCheck: true,
|
|
278
|
-
},
|
|
279
|
-
include: ["src"],
|
|
280
|
-
exclude: ["node_modules"],
|
|
266
|
+
devDependencies: { ...SCAFFOLD_DEV_DEPENDENCIES },
|
|
281
267
|
};
|
|
282
268
|
const files: Array<[string, string]> = [
|
|
283
269
|
["package.json", JSON.stringify(packageJson, null, 2) + "\n"],
|
|
284
270
|
["chant.config.ts", renderConfig(lexicon, params)],
|
|
285
|
-
["tsconfig.json",
|
|
271
|
+
["tsconfig.json", generateTsConfig() + "\n"],
|
|
286
272
|
];
|
|
287
273
|
|
|
288
274
|
const written: string[] = [];
|
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { describe, test, expect } from "vitest";
|
|
2
2
|
import { join, dirname } from "node:path";
|
|
3
3
|
import { fileURLToPath } from "node:url";
|
|
4
|
-
import {
|
|
4
|
+
import { mkdtempSync, mkdirSync, writeFileSync, rmSync } from "node:fs";
|
|
5
|
+
import { tmpdir } from "node:os";
|
|
6
|
+
import { checkLexicon, countComposites, coverageReportCheck } from "./check-lexicon";
|
|
5
7
|
import { loadLexiconFromDir } from "./check-lexicon-plugin";
|
|
6
8
|
import type { LexiconPlugin } from "../../lexicon";
|
|
7
9
|
|
|
@@ -76,3 +78,62 @@ describe("coverageReportCheck", () => {
|
|
|
76
78
|
expect(item.detail).toBe("all spec kinds accounted for");
|
|
77
79
|
});
|
|
78
80
|
});
|
|
81
|
+
|
|
82
|
+
// chant #3104 — the composite rows counted every .ts file in src/composites/
|
|
83
|
+
// but index.ts, so otel's one composite (NodeAgent) reported as four: the
|
|
84
|
+
// catalog, its test and composites.test.ts counted too.
|
|
85
|
+
describe("countComposites", () => {
|
|
86
|
+
const entry = (name: string) => ({ name, lexicon: "x", description: "", bundles: [], params: [] });
|
|
87
|
+
|
|
88
|
+
test("asks the plugin's composites() when it has one, not the files", () => {
|
|
89
|
+
const plugin = { composites: () => [entry("A"), entry("B")] } as unknown as LexiconPlugin;
|
|
90
|
+
expect(countComposites(plugin, "/nonexistent")).toEqual({
|
|
91
|
+
count: 2,
|
|
92
|
+
detail: "2 composite(s) in composites()",
|
|
93
|
+
});
|
|
94
|
+
});
|
|
95
|
+
|
|
96
|
+
test("counts zero, with the error, when composites() throws", () => {
|
|
97
|
+
const plugin = {
|
|
98
|
+
composites: () => {
|
|
99
|
+
throw new Error("catalog broken");
|
|
100
|
+
},
|
|
101
|
+
} as unknown as LexiconPlugin;
|
|
102
|
+
const result = countComposites(plugin, "/nonexistent");
|
|
103
|
+
expect(result.count).toBe(0);
|
|
104
|
+
expect(result.detail).toContain("catalog broken");
|
|
105
|
+
});
|
|
106
|
+
|
|
107
|
+
test("without composites(), counts files but not tests, the catalog, the barrel or helpers", () => {
|
|
108
|
+
const dir = mkdtempSync(join(tmpdir(), "check-lexicon-3104-"));
|
|
109
|
+
try {
|
|
110
|
+
mkdirSync(join(dir, "src/composites"), { recursive: true });
|
|
111
|
+
for (const f of [
|
|
112
|
+
"web-app.ts",
|
|
113
|
+
"worker.ts",
|
|
114
|
+
"index.ts",
|
|
115
|
+
"catalog.ts",
|
|
116
|
+
"catalog.test.ts",
|
|
117
|
+
"composites.test.ts",
|
|
118
|
+
"web-app.snapshot.test.ts",
|
|
119
|
+
"otel-helpers.ts",
|
|
120
|
+
"helpers.ts",
|
|
121
|
+
"shared.ts",
|
|
122
|
+
]) {
|
|
123
|
+
writeFileSync(join(dir, "src/composites", f), "");
|
|
124
|
+
}
|
|
125
|
+
expect(countComposites({} as LexiconPlugin, dir).count).toBe(2);
|
|
126
|
+
expect(countComposites(undefined, dir).count).toBe(2);
|
|
127
|
+
} finally {
|
|
128
|
+
rmSync(dir, { recursive: true, force: true });
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
|
|
132
|
+
test("otel reports its one composite", async () => {
|
|
133
|
+
const loaded = await loadLexiconFromDir(join(repoRoot, "lexicons", "otel"));
|
|
134
|
+
expect(countComposites(loaded.plugin, join(repoRoot, "lexicons", "otel"))).toEqual({
|
|
135
|
+
count: 1,
|
|
136
|
+
detail: "1 composite(s) in composites()",
|
|
137
|
+
});
|
|
138
|
+
});
|
|
139
|
+
});
|