@intentius/chant 0.101.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/builder.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/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 +1 -1
- package/dist/cli/mcp/workspace-tools.d.ts.map +1 -1
- package/dist/cli/registry.d.ts +11 -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 +19 -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 +55 -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-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 +8 -8
- 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 +11 -11
- 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/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 +2 -0
- 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/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 +5 -0
- package/dist/workspace/agent-cli.d.ts.map +1 -1
- package/dist/workspace/box-factory.d.ts +73 -0
- package/dist/workspace/box-factory.d.ts.map +1 -0
- 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.d.ts +5 -0
- package/dist/workspace/checks.d.ts.map +1 -1
- package/dist/workspace/compose-graph.d.ts +10 -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 +91 -4
- package/dist/workspace/declaration.d.ts.map +1 -1
- package/dist/workspace/declaration.schema.json +234 -5
- 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/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 +18 -4
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/lineage-hash-index.d.ts.map +1 -1
- package/dist/workspace/lineage-lock.d.ts +2 -2
- package/dist/workspace/lineage-lock.d.ts.map +1 -1
- package/dist/workspace/links.d.ts.map +1 -1
- 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 +21 -1
- package/dist/workspace/reason-codes.d.ts.map +1 -1
- package/dist/workspace/record-assets.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 +27 -1
- package/dist/workspace/records-cli.d.ts.map +1 -1
- package/dist/workspace/records-close.d.ts +1 -1
- 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 +5 -4
- package/dist/workspace/records-write.d.ts.map +1 -1
- package/dist/workspace/records.d.ts +15 -0
- package/dist/workspace/records.d.ts.map +1 -1
- 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/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.map +1 -1
- package/dist/workspace/trust/rotation.d.ts.map +1 -1
- package/dist/workspace/trust/seal.d.ts +33 -0
- package/dist/workspace/trust/seal.d.ts.map +1 -1
- package/dist/workspace/trust/test-repo.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 +79 -19
- package/dist/workspace/write-scope.d.ts.map +1 -1
- 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/cli/commands/__fixtures__/init-lexicon-output/package.json +1 -1
- 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 +18 -0
- package/src/cli/commands/import-parser-options.test.ts +133 -0
- package/src/cli/commands/import.ts +21 -3
- 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/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 +87 -3
- 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 +1 -0
- package/src/cli/main.ts +65 -11
- package/src/cli/mcp/workspace-tools.test.ts +5 -2
- package/src/cli/mcp/workspace-tools.ts +29 -2
- package/src/cli/registry.ts +11 -2
- 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/testdata/postgres-tags.json +242 -0
- package/src/config.test.ts +21 -0
- package/src/config.ts +15 -0
- 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 +55 -3
- package/src/lifecycle/gate-ledger.ts +16 -0
- package/src/lifecycle/observe.test.ts +18 -0
- package/src/lifecycle/observe.ts +6 -4
- 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/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/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 +74 -0
- package/src/op/gate-approval.ts +5 -1
- package/src/op/gate.ts +31 -5
- package/src/op/index.ts +2 -0
- 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/workspace/__fixtures__/studio-template-84c8b21.json +1 -1
- package/src/workspace/agent-cli.ts +7 -3
- package/src/workspace/agent.schema.json +22 -0
- package/src/workspace/box-factory.test.ts +320 -0
- package/src/workspace/box-factory.ts +103 -0
- package/src/workspace/changes.schema.json +12 -20
- package/src/workspace/changes.ts +4 -1
- package/src/workspace/checks/boxes.test.ts +2 -0
- package/src/workspace/checks.ts +29 -5
- package/src/workspace/compose-graph.ts +7 -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 +234 -5
- package/src/workspace/declaration.ts +174 -10
- package/src/workspace/graph-cli.ts +5 -2
- package/src/workspace/graph.schema.json +247 -0
- package/src/workspace/identity.test.ts +196 -0
- package/src/workspace/identity.ts +186 -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.ts +44 -37
- package/src/workspace/points-write.schema.json +1 -0
- package/src/workspace/principal-classes.test.ts +175 -0
- package/src/workspace/principal-classes.ts +307 -0
- package/src/workspace/reason-codes.test.ts +11 -3
- package/src/workspace/reason-codes.ts +24 -1
- package/src/workspace/records-amend.schema.json +2 -0
- package/src/workspace/records-checkout.ts +106 -0
- package/src/workspace/records-cli.ts +103 -11
- package/src/workspace/records-close.schema.json +1 -0
- package/src/workspace/records-new.schema.json +2 -0
- package/src/workspace/records-review.schema.json +2 -0
- package/src/workspace/records-uncommitted.test.ts +171 -0
- package/src/workspace/records-write.ts +28 -6
- package/src/workspace/records.schema.json +72 -1
- package/src/workspace/records.ts +27 -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/status-contract.test.ts +5 -0
- package/src/workspace/status-gates.ts +22 -8
- 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/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/seal.ts +52 -1
- 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 +2 -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 +128 -2
- package/src/workspace/write-scope.ts +170 -45
- package/src/yaml.test.ts +111 -1
- package/src/yaml.ts +141 -549
package/dist/workspace/work.d.ts
CHANGED
|
@@ -17,6 +17,9 @@
|
|
|
17
17
|
* - `implements`: each decision it names, with that decision's state;
|
|
18
18
|
* - `acceptance`, for a kind with acceptance criteria (#2772): how many of the
|
|
19
19
|
* record's criteria passing evidence of the expected verification meets;
|
|
20
|
+
* - `contract`, for a kind with a contract link (#3147): the contract record
|
|
21
|
+
* the item builds, with its state, read from the contract kind at the same
|
|
22
|
+
* revision;
|
|
20
23
|
*
|
|
21
24
|
* and each decision `implementedBy`, the work records naming it. The
|
|
22
25
|
* warnings are closed codes. `work-done-gap-open` is not raised here: it
|
|
@@ -25,7 +28,7 @@
|
|
|
25
28
|
*/
|
|
26
29
|
import { type LoadedRecordKind, type ReadRecordsOptions, type RecordEntry } from "./records.js";
|
|
27
30
|
/** Why a work record carries a warning. Closed, like the record warning codes. */
|
|
28
|
-
export declare const WORK_WARNING_CODES: readonly ["work-needs-unknown", "work-implements-unknown", "work-needs-cycle", "work-implements-undecided", "work-done-unpinned", "work-closed-without-date", "work-done-gap-open", "work-acceptance-unmet", "work-acceptance-self-verified"];
|
|
31
|
+
export declare const WORK_WARNING_CODES: readonly ["work-needs-unknown", "work-implements-unknown", "work-needs-cycle", "work-implements-undecided", "work-done-unpinned", "work-closed-without-date", "work-done-gap-open", "work-acceptance-unmet", "work-acceptance-self-verified", "work-contract-unknown", "work-contract-undecided", "work-tier-unknown"];
|
|
29
32
|
export type WorkWarningCode = (typeof WORK_WARNING_CODES)[number];
|
|
30
33
|
/** A link from a work record to another record, with that record's state now. */
|
|
31
34
|
export interface WorkLink {
|
|
@@ -33,6 +36,28 @@ export interface WorkLink {
|
|
|
33
36
|
/** The linked record's state, or null when no record has the id. */
|
|
34
37
|
state: string | null;
|
|
35
38
|
}
|
|
39
|
+
/**
|
|
40
|
+
* One decision-point answer about a work item (#3147), as `records --json`
|
|
41
|
+
* joins it from the answer kind the work kind names: the answer records whose
|
|
42
|
+
* `constrains` names the item's id. The item never copies them.
|
|
43
|
+
*/
|
|
44
|
+
export interface WorkAnswer {
|
|
45
|
+
/** The answer record's id, such as understand-0123456789ab. */
|
|
46
|
+
id: string;
|
|
47
|
+
/** The decision point it answers. */
|
|
48
|
+
point: string | null;
|
|
49
|
+
/** escalated, proposed or answered. */
|
|
50
|
+
state: string | null;
|
|
51
|
+
/** The answer, or null while there is none. */
|
|
52
|
+
answer: string | boolean | null;
|
|
53
|
+
/** The people who answered or confirmed it, empty when a table or model did. */
|
|
54
|
+
answeredBy: string[];
|
|
55
|
+
}
|
|
56
|
+
/**
|
|
57
|
+
* The answers about each work item: every answer record whose `constrains`
|
|
58
|
+
* names the item's id, in path order, by item id.
|
|
59
|
+
*/
|
|
60
|
+
export declare function workAnswers(answerRecords: readonly RecordEntry[], ids: Iterable<string>): Map<string, WorkAnswer[]>;
|
|
36
61
|
/** A decision as a work read lists it: its state and the work records implementing it. */
|
|
37
62
|
export interface DecisionWork {
|
|
38
63
|
id: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/workspace/work.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"work.d.ts","sourceRoot":"","sources":["../../src/workspace/work.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
3
|
+
"$id": "https://intentius.io/chant/schemas/workspace/principals/v1/workspace-principals.schema.json",
|
|
4
|
+
"title": "workspace-principals.json",
|
|
5
|
+
"description": "Principal classes a plugin supplies (#2524 D5, #3080, ws-079). A package publishes this file as data at its ./workspace-principals subpath, beside ./workspace-kinds. chant reads it with the file system and never imports the package. A class is a name for the principals holding one role in the trust policy at base; the declaration's writeScope may then give it an entry.",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"required": ["schema", "classes"],
|
|
8
|
+
"properties": {
|
|
9
|
+
"$schema": {
|
|
10
|
+
"type": "string",
|
|
11
|
+
"description": "An editor hint. chant ignores it."
|
|
12
|
+
},
|
|
13
|
+
"$comment": {
|
|
14
|
+
"type": "string",
|
|
15
|
+
"description": "A note for people. chant ignores it."
|
|
16
|
+
},
|
|
17
|
+
"schema": {
|
|
18
|
+
"const": 1,
|
|
19
|
+
"description": "The principal classes format version."
|
|
20
|
+
},
|
|
21
|
+
"classes": {
|
|
22
|
+
"type": "array",
|
|
23
|
+
"minItems": 1,
|
|
24
|
+
"items": {
|
|
25
|
+
"$ref": "#/$defs/class"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
},
|
|
29
|
+
"patternProperties": {
|
|
30
|
+
"^x-": true
|
|
31
|
+
},
|
|
32
|
+
"additionalProperties": false,
|
|
33
|
+
"$defs": {
|
|
34
|
+
"class": {
|
|
35
|
+
"type": "object",
|
|
36
|
+
"required": ["name", "description", "role"],
|
|
37
|
+
"properties": {
|
|
38
|
+
"name": {
|
|
39
|
+
"type": "string",
|
|
40
|
+
"pattern": "^(?!x-)[a-z][a-z0-9-]{0,39}$",
|
|
41
|
+
"description": "The class's name, as a key of the declaration's writeScope names it. human, agent, runner and service are the core classes and can't be supplied."
|
|
42
|
+
},
|
|
43
|
+
"description": {
|
|
44
|
+
"type": "string",
|
|
45
|
+
"minLength": 1,
|
|
46
|
+
"description": "One line saying who is in the class, for listings and error messages."
|
|
47
|
+
},
|
|
48
|
+
"role": {
|
|
49
|
+
"type": "string",
|
|
50
|
+
"pattern": "^[a-z][a-z0-9-]*$",
|
|
51
|
+
"description": "The role whose grant in the trust policy at base (.chant/trust.json roles) puts a principal in this class. The agent, runner and service roles belong to the core classes and can't be named here. One role puts a principal in one class."
|
|
52
|
+
}
|
|
53
|
+
},
|
|
54
|
+
"patternProperties": {
|
|
55
|
+
"^x-": true
|
|
56
|
+
},
|
|
57
|
+
"additionalProperties": false
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
@@ -25,27 +25,40 @@
|
|
|
25
25
|
* detection only (ws-002).
|
|
26
26
|
*
|
|
27
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
|
|
28
|
+
* through {@link principalClass} alone (the agent, runner and service roles,
|
|
29
|
+
* then the role each domain class a pinned package supplies names, #3080),
|
|
29
30
|
* or from naming an agent session. Claiming a session only ever narrows what
|
|
30
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.
|
|
31
37
|
*/
|
|
32
|
-
import { type AgentDeclaration, type ClassScope, type Declaration, type PrincipalClass, type WriteVerb } from "./declaration.js";
|
|
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";
|
|
33
40
|
import { type TrustPolicy } from "./trust/policy.js";
|
|
41
|
+
import { AGENT_TRAILER } from "./trailers.js";
|
|
34
42
|
/** The environment variable naming the agent session a write is made in. */
|
|
35
43
|
export declare const AGENT_ENV = "CHANT_AGENT";
|
|
36
|
-
/** The commit trailer naming the agent session a commit was made in. */
|
|
37
|
-
export
|
|
44
|
+
/** The commit trailer naming the agent session a commit was made in, one of chant's trailers (`trailers.ts`). */
|
|
45
|
+
export { AGENT_TRAILER };
|
|
38
46
|
/** Why a write is outside its writer's scope. Closed. */
|
|
39
|
-
export declare const WRITE_SCOPE_CODES: readonly ["write-scope-member", "write-scope-kind", "agent-unknown"];
|
|
47
|
+
export declare const WRITE_SCOPE_CODES: readonly ["write-scope-member", "write-scope-kind", "write-scope-class-unknown", "agent-unknown"];
|
|
40
48
|
export type WriteScopeCode = (typeof WRITE_SCOPE_CODES)[number];
|
|
41
49
|
/**
|
|
42
|
-
*
|
|
43
|
-
*
|
|
44
|
-
|
|
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.
|
|
45
60
|
*/
|
|
46
|
-
export declare function
|
|
47
|
-
/** The class a principal is in: the first of agent, runner and service whose role it holds at base, or human. */
|
|
48
|
-
export declare function principalClass(policy: TrustPolicy, principal: string | null): PrincipalClass;
|
|
61
|
+
export declare function principalClass(policy: TrustPolicy, principal: string | null, classes?: ClassRegistry): PrincipalClass;
|
|
49
62
|
/** Who is writing, as the scope judges it. */
|
|
50
63
|
export interface Writer {
|
|
51
64
|
/** The principal named, or null when none is. */
|
|
@@ -66,11 +79,32 @@ export declare class WriteScopeError extends Error {
|
|
|
66
79
|
export declare function resolveWriter(declaration: Declaration | null, policy: TrustPolicy, given: {
|
|
67
80
|
agent?: string | null;
|
|
68
81
|
principal?: string | null;
|
|
69
|
-
}): Writer;
|
|
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
|
+
};
|
|
70
96
|
/** The scope that applies to `writer`, or null when its class is not restricted. An agent is always restricted to its member. */
|
|
71
97
|
export declare function scopeOf(declaration: Declaration | null, writer: Writer): ClassScope | null;
|
|
72
98
|
export type ScopeVerdict = {
|
|
73
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;
|
|
74
108
|
} | {
|
|
75
109
|
ok: false;
|
|
76
110
|
code: Exclude<WriteScopeCode, "agent-unknown">;
|
|
@@ -88,9 +122,30 @@ export interface ScopedKind {
|
|
|
88
122
|
declared: boolean;
|
|
89
123
|
}
|
|
90
124
|
/** Whether `writer` may write a record of `kind` with `verb`. A delete is never in a restricted scope. */
|
|
91
|
-
export declare function judgeRecord(declaration: Declaration | null, writer: Writer, kind: ScopedKind, verb: WriteVerb | "delete"):
|
|
92
|
-
/**
|
|
93
|
-
|
|
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;
|
|
94
149
|
/** The declaration and policy a write on this machine is judged by. */
|
|
95
150
|
export interface ScopeSource {
|
|
96
151
|
declaration: Declaration | null;
|
|
@@ -101,6 +156,8 @@ export interface ScopeSource {
|
|
|
101
156
|
/** The workspace root from the git root, "." for the git root, or null without a declaration. */
|
|
102
157
|
root: string | null;
|
|
103
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;
|
|
104
161
|
}
|
|
105
162
|
/**
|
|
106
163
|
* The scope for a write from `cwd`: the declaration and the trust policy at
|
|
@@ -119,6 +176,7 @@ export declare function scopedKind(source: ScopeSource, kindName: string, kindFi
|
|
|
119
176
|
* Refuse a record write outside the writer's scope (#2548): throws a
|
|
120
177
|
* {@link WriteScopeError}. `agent` is the session the write names
|
|
121
178
|
* (`CHANT_AGENT`), and `principal` who the write names as its author.
|
|
179
|
+
* Returns what it read at base, for the identity rule (#3163).
|
|
122
180
|
*/
|
|
123
181
|
export declare function refuseRecordWrite(cwd: string, write: {
|
|
124
182
|
kindName: string;
|
|
@@ -127,7 +185,7 @@ export declare function refuseRecordWrite(cwd: string, write: {
|
|
|
127
185
|
verb: WriteVerb;
|
|
128
186
|
agent?: string | null;
|
|
129
187
|
principal?: string | null;
|
|
130
|
-
}):
|
|
188
|
+
}): ScopeSource;
|
|
131
189
|
/** A commit as the scope check judged it. */
|
|
132
190
|
export interface ScopeCommit {
|
|
133
191
|
commit: string;
|
|
@@ -143,9 +201,9 @@ export interface ScopeCommit {
|
|
|
143
201
|
paths: number;
|
|
144
202
|
}
|
|
145
203
|
export interface ScopeFinding {
|
|
146
|
-
/** `finding:<code>:<commit>:<path>`, or `finding
|
|
204
|
+
/** `finding:<code>:<commit>:<path>`, or `finding:<code>:<commit>` for agent-unknown and write-scope-class-unknown, which judge the whole commit. */
|
|
147
205
|
id: string;
|
|
148
|
-
code:
|
|
206
|
+
code: ScopeFindingCode;
|
|
149
207
|
commit: string;
|
|
150
208
|
/** From the workspace root, or null for a finding on the whole commit. */
|
|
151
209
|
path: string | null;
|
|
@@ -159,7 +217,7 @@ export interface ScopeFinding {
|
|
|
159
217
|
export interface ScopeReport {
|
|
160
218
|
/** The commit the declaration and the trust policy were read at. */
|
|
161
219
|
base: string;
|
|
162
|
-
/** The classes with a writeScope entry, and agent when any session is declared. */
|
|
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. */
|
|
163
221
|
restricted: PrincipalClass[];
|
|
164
222
|
agents: string[];
|
|
165
223
|
commits: ScopeCommit[];
|
|
@@ -195,5 +253,7 @@ export declare function checkWriteScope(q: {
|
|
|
195
253
|
prefix: string;
|
|
196
254
|
declaration: Declaration;
|
|
197
255
|
kinds: CheckKind[];
|
|
256
|
+
/** The principal classes the declaration's pins supply at base (#3080). Without it, the core four. */
|
|
257
|
+
classes?: ClassRegistry;
|
|
198
258
|
}): Promise<ScopeReport | null>;
|
|
199
259
|
//# sourceMappingURL=write-scope.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"write-scope.d.ts","sourceRoot":"","sources":["../../src/workspace/write-scope.ts"],"names":[],"mappings":"AAAA
|
|
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;
|
|
@@ -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
|
+
});
|