@intentius/chant 0.124.13 → 0.124.15
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/bin/chant +11 -0
- package/dist/agents/checks.js +326 -0
- package/dist/agents/discover.js +885 -0
- package/dist/agents/importer.js +17 -0
- package/dist/agents/index.js +12 -0
- package/dist/agents/types.js +19 -0
- package/dist/apply.js +151 -0
- package/dist/attrref.js +70 -0
- package/dist/audit/catalog.js +350 -0
- package/dist/audit/core.js +252 -0
- package/dist/audit/discover.js +633 -0
- package/dist/audit/fetch.js +666 -0
- package/dist/audit/lineage.js +91 -0
- package/dist/audit/nginx.js +366 -0
- package/dist/audit/prior-art.js +132 -0
- package/dist/audit/proof.js +321 -0
- package/dist/audit/report-html.js +194 -0
- package/dist/audit/report-model.js +198 -0
- package/dist/audit/report.js +102 -0
- package/dist/audit/rules-doc.js +144 -0
- package/dist/audit/secrets.js +405 -0
- package/dist/audit/terraform-state.js +140 -0
- package/dist/audit/wrangler.js +262 -0
- package/dist/behaviour-delta.js +401 -0
- package/dist/behaviour-engine.js +357 -0
- package/dist/behaviour-graph.js +83 -0
- package/dist/behaviour-http.js +188 -0
- package/dist/behaviour-kinds.js +172 -0
- package/dist/behaviour-overlay.js +50 -0
- package/dist/behaviour-predict.js +188 -0
- package/dist/behaviour-request.js +194 -0
- package/dist/behaviour.js +1325 -0
- package/dist/build-params.js +108 -0
- package/dist/build.d.ts +6 -0
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +669 -0
- package/dist/builder.js +44 -0
- package/dist/cdk/advise.js +30 -0
- package/dist/cdk/assembly.js +122 -0
- package/dist/cdk/graph.js +444 -0
- package/dist/cdk/tier-map.js +64 -0
- package/dist/cdk/types.js +24 -0
- package/dist/change-set.d.ts +24 -2
- package/dist/change-set.d.ts.map +1 -1
- package/dist/change-set.js +361 -0
- package/dist/child-project.js +21 -0
- package/dist/ci-jobs.d.ts +227 -0
- package/dist/ci-jobs.d.ts.map +1 -0
- package/dist/ci-jobs.js +448 -0
- package/dist/claimed-fields.js +135 -0
- package/dist/cli/build-options.js +70 -0
- package/dist/cli/build-params-cli.js +139 -0
- package/dist/cli/command-group.js +123 -0
- package/dist/cli/commands/audit-agents.js +326 -0
- package/dist/cli/commands/audit.js +571 -0
- package/dist/cli/commands/build.js +920 -0
- package/dist/cli/commands/carve-apply.js +153 -0
- package/dist/cli/commands/carve-bridge.js +201 -0
- package/dist/cli/commands/carve-emit.js +332 -0
- package/dist/cli/commands/carve-status.js +119 -0
- package/dist/cli/commands/carve.js +204 -0
- package/dist/cli/commands/check-lexicon-docs.js +79 -0
- package/dist/cli/commands/check-lexicon-examples.js +177 -0
- package/dist/cli/commands/check-lexicon-intrinsics.js +291 -0
- package/dist/cli/commands/check-lexicon-mcp.js +82 -0
- package/dist/cli/commands/check-lexicon-plugin.d.ts.map +1 -1
- package/dist/cli/commands/check-lexicon-plugin.js +104 -0
- package/dist/cli/commands/check-lexicon.js +766 -0
- package/dist/cli/commands/describe.js +85 -0
- package/dist/cli/commands/diff.js +175 -0
- package/dist/cli/commands/doctor.js +350 -0
- package/dist/cli/commands/import-agents.js +155 -0
- package/dist/cli/commands/import.js +670 -0
- package/dist/cli/commands/init-lexicon/templates/codegen.js +194 -0
- package/dist/cli/commands/init-lexicon/templates/docs.js +100 -0
- package/dist/cli/commands/init-lexicon/templates/examples.js +29 -0
- package/dist/cli/commands/init-lexicon/templates/lint.js +34 -0
- package/dist/cli/commands/init-lexicon/templates/lsp.js +37 -0
- package/dist/cli/commands/init-lexicon/templates/plugin.js +108 -0
- package/dist/cli/commands/init-lexicon/templates/project.js +240 -0
- package/dist/cli/commands/init-lexicon/templates/spec.js +56 -0
- package/dist/cli/commands/init-lexicon/templates/tests.js +66 -0
- package/dist/cli/commands/init-lexicon.js +172 -0
- package/dist/cli/commands/init.js +381 -0
- package/dist/cli/commands/lexicon-rolling-upgrade.js +145 -0
- package/dist/cli/commands/lexicon-surface-diff.js +145 -0
- package/dist/cli/commands/licenses.js +125 -0
- package/dist/cli/commands/lint.d.ts.map +1 -1
- package/dist/cli/commands/lint.js +948 -0
- package/dist/cli/commands/list.js +63 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -1
- package/dist/cli/commands/migrate.js +423 -0
- package/dist/cli/commands/onboard.js +403 -0
- package/dist/cli/commands/pinned-upgrade.js +191 -0
- package/dist/cli/commands/update.js +194 -0
- package/dist/cli/commands/vendor.js +217 -0
- package/dist/cli/conflict-check.js +104 -0
- package/dist/cli/debug.js +8 -0
- package/dist/cli/format.js +104 -0
- package/dist/cli/handlers/build.js +267 -0
- package/dist/cli/handlers/carve-apply.js +30 -0
- package/dist/cli/handlers/carve-bridge.js +28 -0
- package/dist/cli/handlers/carve-emit.js +50 -0
- package/dist/cli/handlers/carve-status.js +26 -0
- package/dist/cli/handlers/carve.js +40 -0
- package/dist/cli/handlers/change-set.js +46 -0
- package/dist/cli/handlers/components.js +730 -0
- package/dist/cli/handlers/dev.js +113 -0
- package/dist/cli/handlers/emulator.js +233 -0
- package/dist/cli/handlers/explain.js +54 -0
- package/dist/cli/handlers/fan-out.js +422 -0
- package/dist/cli/handlers/gate-resume.js +275 -0
- package/dist/cli/handlers/generate.js +84 -0
- package/dist/cli/handlers/graph.js +969 -0
- package/dist/cli/handlers/init.js +102 -0
- package/dist/cli/handlers/lifecycle.js +1727 -0
- package/dist/cli/handlers/lint.js +62 -0
- package/dist/cli/handlers/migrate.js +48 -0
- package/dist/cli/handlers/misc.js +391 -0
- package/dist/cli/handlers/operator.js +1162 -0
- package/dist/cli/handlers/override-approve.js +102 -0
- package/dist/cli/handlers/pr.js +503 -0
- package/dist/cli/handlers/promote.js +342 -0
- package/dist/cli/handlers/run-generate.js +206 -0
- package/dist/cli/handlers/run-wave.js +66 -0
- package/dist/cli/handlers/run.js +1191 -0
- package/dist/cli/handlers/scenario.js +325 -0
- package/dist/cli/handlers/search.js +924 -0
- package/dist/cli/handlers/serve.js +32 -0
- package/dist/cli/handlers/vendor.js +154 -0
- package/dist/cli/index.js +3 -0
- package/dist/cli/is-entry-point.js +23 -0
- package/dist/cli/lsp/capabilities.js +28 -0
- package/dist/cli/lsp/diagnostics.js +34 -0
- package/dist/cli/lsp/server.js +329 -0
- package/dist/cli/main.d.ts.map +1 -1
- package/dist/cli/main.js +2540 -0
- package/dist/cli/mcp/lifecycle-tools.js +80 -0
- package/dist/cli/mcp/op-tools.js +306 -0
- package/dist/cli/mcp/resource-handlers.js +258 -0
- package/dist/cli/mcp/resources/context.js +85 -0
- package/dist/cli/mcp/server.js +353 -0
- package/dist/cli/mcp/tools/build.js +111 -0
- package/dist/cli/mcp/tools/composites.js +95 -0
- package/dist/cli/mcp/tools/explain.js +166 -0
- package/dist/cli/mcp/tools/import.js +49 -0
- package/dist/cli/mcp/tools/lint.js +41 -0
- package/dist/cli/mcp/tools/scaffold.js +111 -0
- package/dist/cli/mcp/tools/search.js +112 -0
- package/dist/cli/mcp/types.js +1 -0
- package/dist/cli/mcp/workspace-plugins.js +91 -0
- package/dist/cli/mcp/workspace-tools.d.ts +1 -1
- package/dist/cli/mcp/workspace-tools.js +564 -0
- package/dist/cli/mcp-config.js +70 -0
- package/dist/cli/plugins.js +313 -0
- package/dist/cli/registry.js +23 -0
- package/dist/cli/reporters/stylish.js +329 -0
- package/dist/cli/version.js +15 -0
- package/dist/cli/watch.js +79 -0
- package/dist/codegen/bound-property-types.js +82 -0
- package/dist/codegen/coverage.js +119 -0
- package/dist/codegen/docs-file-markers.js +60 -0
- package/dist/codegen/docs-pages.js +115 -0
- package/dist/codegen/docs-rule-scanning.js +164 -0
- package/dist/codegen/docs-rules.js +76 -0
- package/dist/codegen/docs-sections.js +117 -0
- package/dist/codegen/docs-sidebar.js +65 -0
- package/dist/codegen/docs-types.js +4 -0
- package/dist/codegen/docs.js +356 -0
- package/dist/codegen/fetch.js +340 -0
- package/dist/codegen/generate-post-synth-barrel.js +63 -0
- package/dist/codegen/generate-registry.js +71 -0
- package/dist/codegen/generate-runtime-index.js +56 -0
- package/dist/codegen/generate-typescript.js +119 -0
- package/dist/codegen/generate.js +115 -0
- package/dist/codegen/json-patch.js +141 -0
- package/dist/codegen/json-schema-to-ts.js +344 -0
- package/dist/codegen/json-schema.js +246 -0
- package/dist/codegen/lexicon-regen.js +412 -0
- package/dist/codegen/naming.js +217 -0
- package/dist/codegen/okf-lexicon.js +245 -0
- package/dist/codegen/package.js +150 -0
- package/dist/codegen/pinned-upgrade.d.ts.map +1 -1
- package/dist/codegen/pinned-upgrade.js +494 -0
- package/dist/codegen/registry.js +60 -0
- package/dist/codegen/rehype-base-url.mjs +68 -0
- package/dist/codegen/rolling-upgrade.js +217 -0
- package/dist/codegen/surface-snapshot.js +537 -0
- package/dist/codegen/testdata/postgres-tags.json +242 -0
- package/dist/codegen/topo-sort.js +36 -0
- package/dist/codegen/typecheck.js +115 -0
- package/dist/codegen/validate.js +200 -0
- package/dist/codegen/version-bump.js +35 -0
- package/dist/components/auto-release.js +143 -0
- package/dist/components/builders.js +47 -0
- package/dist/components/capability-plugin-loader.js +175 -0
- package/dist/components/capability-plugin-schema.js +46 -0
- package/dist/components/capability-plugin.js +99 -0
- package/dist/components/capability.js +60 -0
- package/dist/components/changed-files.js +72 -0
- package/dist/components/cli-support.js +427 -0
- package/dist/components/component.js +120 -0
- package/dist/components/component.schema.json +271 -0
- package/dist/components/config-defaults.js +130 -0
- package/dist/components/deploy-units.js +60 -0
- package/dist/components/discover.d.ts.map +1 -1
- package/dist/components/discover.js +189 -0
- package/dist/components/driver-output.js +86 -0
- package/dist/components/driver.js +728 -0
- package/dist/components/fan-out-output.js +165 -0
- package/dist/components/fan-out-record.js +94 -0
- package/dist/components/fan-out-run.js +373 -0
- package/dist/components/fan-out-support.js +60 -0
- package/dist/components/fan-out.js +273 -0
- package/dist/components/gate-plan.js +41 -0
- package/dist/components/gated-wave-pipeline.js +46 -0
- package/dist/components/index.js +24 -0
- package/dist/components/layers.js +28 -0
- package/dist/components/manifest-persistence.js +108 -0
- package/dist/components/pilots/alb-ecs.pilot.js +59 -0
- package/dist/components/pilots/dynamodb.pilot.js +51 -0
- package/dist/components/pilots/jar-emr.pilot.js +65 -0
- package/dist/components/pilots/lambda.pilot.js +52 -0
- package/dist/components/pilots/neo4j-fanout.pilot.js +68 -0
- package/dist/components/pilots/project.js +12 -0
- package/dist/components/pr-pipeline.d.ts.map +1 -1
- package/dist/components/pr-pipeline.js +135 -0
- package/dist/components/pr-run.js +363 -0
- package/dist/components/presets/ecs-fargate.js +72 -0
- package/dist/components/presets/index.js +28 -0
- package/dist/components/presets/lambda.js +34 -0
- package/dist/components/presets/single-host-compose.js +41 -0
- package/dist/components/promote.js +549 -0
- package/dist/components/registry.js +34 -0
- package/dist/components/run-progress.js +33 -0
- package/dist/components/sandbox/driver.d.ts.map +1 -1
- package/dist/components/sandbox/driver.js +93 -0
- package/dist/components/sandbox/run.js +115 -0
- package/dist/components/starter-plugin.js +104 -0
- package/dist/components/verbs/__tests__/mock-cloud-executor.js +68 -0
- package/dist/components/verbs/__tests__/mock-process-runner.js +45 -0
- package/dist/components/verbs/__tests__/mock-sbom-generator.js +56 -0
- package/dist/components/verbs/bom-writer.js +287 -0
- package/dist/components/verbs/build-archive.js +188 -0
- package/dist/components/verbs/build.js +142 -0
- package/dist/components/verbs/cloud-executor.js +110 -0
- package/dist/components/verbs/component-bom.js +125 -0
- package/dist/components/verbs/ensure-secret.js +50 -0
- package/dist/components/verbs/index.js +61 -0
- package/dist/components/verbs/license-policy.js +75 -0
- package/dist/components/verbs/lockfile-sbom-generator.js +191 -0
- package/dist/components/verbs/process-runner.js +78 -0
- package/dist/components/verbs/r2-sync.js +93 -0
- package/dist/components/verbs/reproducibility.js +62 -0
- package/dist/components/verbs/run-agent.js +577 -0
- package/dist/components/verbs/sbom-generator.js +119 -0
- package/dist/components/verbs/sbom.js +97 -0
- package/dist/components/verbs/shell.js +32 -0
- package/dist/components/verbs/sign.js +221 -0
- package/dist/components/verbs/stub.js +28 -0
- package/dist/components/verbs/tool-sbom-generator.js +154 -0
- package/dist/components/verbs/verify.js +112 -0
- package/dist/components/verbs/vex.js +131 -0
- package/dist/components/verbs/vuln-gate.js +152 -0
- package/dist/components/verbs/vuln-scan.js +288 -0
- package/dist/components/verbs/wait-verify.js +106 -0
- package/dist/components/verbs/wrangler.js +179 -0
- package/dist/components/wave-plan.js +102 -0
- package/dist/composite.d.ts +10 -2
- package/dist/composite.d.ts.map +1 -1
- package/dist/composite.js +313 -0
- package/dist/config-import.d.ts.map +1 -1
- package/dist/config-import.js +22 -0
- package/dist/config-sandbox.js +122 -0
- package/dist/config-static.js +206 -0
- package/dist/config.js +605 -0
- package/dist/content-digest.js +23 -0
- package/dist/declarable.js +114 -0
- package/dist/deep-observation.js +437 -0
- package/dist/detectLexicon.js +54 -0
- package/dist/discovery/cache.js +70 -0
- package/dist/discovery/collect.d.ts +2 -1
- package/dist/discovery/collect.d.ts.map +1 -1
- package/dist/discovery/collect.js +223 -0
- package/dist/discovery/cycles.js +95 -0
- package/dist/discovery/entity-wire-codec.js +391 -0
- package/dist/discovery/entity-wire.js +42 -0
- package/dist/discovery/files.js +121 -0
- package/dist/discovery/fold-import.d.ts.map +1 -1
- package/dist/discovery/fold-import.js +4073 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/host-composite.d.ts +35 -0
- package/dist/discovery/host-composite.d.ts.map +1 -0
- package/dist/discovery/host-composite.js +93 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- package/dist/discovery/index.d.ts +9 -0
- package/dist/discovery/index.d.ts.map +1 -1
- package/dist/discovery/index.js +333 -0
- package/dist/discovery/param-deps.js +487 -0
- package/dist/discovery/resolve.js +39 -0
- package/dist/discovery/sandbox/bundle.js +214 -0
- package/dist/discovery/sandbox/child-errors.js +26 -0
- package/dist/discovery/sandbox/config-run.js +100 -0
- package/dist/discovery/sandbox/config-wire.js +183 -0
- package/dist/discovery/sandbox/driver.d.ts.map +1 -1
- package/dist/discovery/sandbox/driver.js +333 -0
- package/dist/discovery/sandbox/fork.js +229 -0
- package/dist/discovery/sandbox/policy-run.js +142 -0
- package/dist/discovery/sandbox/policy-wire.js +152 -0
- package/dist/discovery/sandbox/run.js +77 -0
- package/dist/discovery/specifier-resolve.js +320 -0
- package/dist/discovery/walk.js +284 -0
- package/dist/effect-receipt.js +340 -0
- package/dist/env.js +55 -0
- package/dist/errors.js +62 -0
- package/dist/fold/fold.js +1434 -0
- package/dist/fold/foldable-helpers.js +229 -0
- package/dist/fold/subset.js +696 -0
- package/dist/fold-provenance.js +414 -0
- package/dist/gate-decision.d.ts +20 -9
- package/dist/gate-decision.d.ts.map +1 -1
- package/dist/gate-decision.js +313 -0
- package/dist/gate-resume-run.js +154 -0
- package/dist/gated-waves.js +165 -0
- package/dist/governance.js +43 -0
- package/dist/graph-declared.js +45 -0
- package/dist/graph-detail.js +207 -0
- package/dist/graph-dot.js +54 -0
- package/dist/graph-effective.js +107 -0
- package/dist/graph-ir.js +623 -0
- package/dist/graph-layout.js +184 -0
- package/dist/graph-lens.js +105 -0
- package/dist/graph-mermaid.js +83 -0
- package/dist/graph-ops.js +39 -0
- package/dist/graph-refs.js +156 -0
- package/dist/held-elsewhere.js +87 -0
- package/dist/identity.js +251 -0
- package/dist/import/base-parser.js +34 -0
- package/dist/import/embedded.js +255 -0
- package/dist/import/generator.js +1 -0
- package/dist/import/ir-utils.js +85 -0
- package/dist/import/parser-options.js +45 -0
- package/dist/import/parser.js +1 -0
- package/dist/index.js +118 -0
- package/dist/intrinsic-interpolation.js +73 -0
- package/dist/intrinsic.js +31 -0
- package/dist/join-key.js +35 -0
- package/dist/kubectl-context.js +150 -0
- package/dist/lexicon-config.js +58 -0
- package/dist/lexicon-integrity.js +47 -0
- package/dist/lexicon-manifest.js +70 -0
- package/dist/lexicon-module.d.ts.map +1 -1
- package/dist/lexicon-module.js +241 -0
- package/dist/lexicon-output.js +218 -0
- package/dist/lexicon-plugin-helpers.js +104 -0
- package/dist/lexicon-schema.js +136 -0
- package/dist/lexicon.js +130 -0
- package/dist/lifecycle/affected.js +224 -0
- package/dist/lifecycle/assert-live.js +110 -0
- package/dist/lifecycle/build-ledger-store.js +160 -0
- package/dist/lifecycle/build-ledger.js +155 -0
- package/dist/lifecycle/change-set.js +356 -0
- package/dist/lifecycle/converge-ledger.js +161 -0
- package/dist/lifecycle/deep-diff.js +233 -0
- package/dist/lifecycle/deep-observe.js +147 -0
- package/dist/lifecycle/digest.js +143 -0
- package/dist/lifecycle/disruption.js +135 -0
- package/dist/lifecycle/gate-applied.js +113 -0
- package/dist/lifecycle/gate-audit.d.ts +69 -2
- package/dist/lifecycle/gate-audit.d.ts.map +1 -1
- package/dist/lifecycle/gate-audit.js +415 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.d.ts +24 -0
- package/dist/lifecycle/gate-ledger.d.ts.map +1 -1
- package/dist/lifecycle/gate-ledger.js +201 -0
- package/dist/lifecycle/gate-origin.js +117 -0
- package/dist/lifecycle/gate-pending.js +58 -0
- package/dist/lifecycle/git.js +1182 -0
- package/dist/lifecycle/identity.js +58 -0
- package/dist/lifecycle/index.js +26 -0
- package/dist/lifecycle/lease.js +283 -0
- package/dist/lifecycle/ledger-port.js +1 -0
- package/dist/lifecycle/legacy-digest.js +91 -0
- package/dist/lifecycle/live-diff.js +274 -0
- package/dist/lifecycle/local-note.js +15 -0
- package/dist/lifecycle/member-ledger.js +122 -0
- package/dist/lifecycle/observation-baseline.js +155 -0
- package/dist/lifecycle/observe.js +375 -0
- package/dist/lifecycle/oras-referrer-lookup.js +82 -0
- package/dist/lifecycle/override-ledger.js +54 -0
- package/dist/lifecycle/plan-digest.js +110 -0
- package/dist/lifecycle/plan-ledger.js +129 -0
- package/dist/lifecycle/receipt-plan.js +192 -0
- package/dist/lifecycle/release-ledger.js +155 -0
- package/dist/lifecycle/release-read.js +64 -0
- package/dist/lifecycle/replay.js +193 -0
- package/dist/lifecycle/rollback.js +102 -0
- package/dist/lifecycle/run-ledger.js +183 -0
- package/dist/lifecycle/scenario-eval.js +204 -0
- package/dist/lifecycle/scenario.js +214 -0
- package/dist/lifecycle/snapshot.js +239 -0
- package/dist/lifecycle/status.js +447 -0
- package/dist/lifecycle/symptoms.js +117 -0
- package/dist/lifecycle/teardown.js +255 -0
- package/dist/lifecycle/types.js +1 -0
- package/dist/lifecycle/unobserved-gate.js +33 -0
- package/dist/lifecycle/wave-plans.js +68 -0
- package/dist/lifecycle/work-item-id.js +36 -0
- package/dist/lifecycle/work-lease.js +393 -0
- package/dist/lint/component-checks.js +87 -0
- package/dist/lint/config.js +483 -0
- package/dist/lint/declarative.js +122 -0
- package/dist/lint/discover.d.ts.map +1 -1
- package/dist/lint/discover.js +138 -0
- package/dist/lint/engine.js +246 -0
- package/dist/lint/knowledge-checks.js +64 -0
- package/dist/lint/named-checks.js +22 -0
- package/dist/lint/output-checks.js +87 -0
- package/dist/lint/output-docs.js +163 -0
- package/dist/lint/parser.js +33 -0
- package/dist/lint/pipeline-change-gate.js +70 -0
- package/dist/lint/policy-import.d.ts +1 -1
- package/dist/lint/policy-import.d.ts.map +1 -1
- package/dist/lint/policy-import.js +62 -0
- package/dist/lint/policy-sandbox.js +86 -0
- package/dist/lint/policy.js +122 -0
- package/dist/lint/post-synth.js +87 -0
- package/dist/lint/presets/relaxed.json +26 -0
- package/dist/lint/presets/strict.json +24 -24
- package/dist/lint/receipt-checks.js +83 -0
- package/dist/lint/rule-loader.d.ts.map +1 -1
- package/dist/lint/rule-loader.js +89 -0
- package/dist/lint/rule-registry.js +86 -0
- package/dist/lint/rule.js +1 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-a.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp000-discovery-error/broken-b.component.js +7 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/fail/orphan-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/emr-job.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp001/pass/jar-lib.component.js +9 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/fail/search-service.component.js +25 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/jar-lib.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp002/pass/search-service.component.js +21 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/fail/migrator.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/agent-turn.component.js +24 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/migrator.component.js +17 -0
- package/dist/lint/rules/__fixtures__/comp/comp003/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/fail/neo4j-cluster.component.js +18 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/neo4j-cluster.component.js +20 -0
- package/dist/lint/rules/__fixtures__/comp/comp004/pass/orders-table.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/fail/search-service.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp005/pass/search-service.component.js +16 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/fail/legacy-tool.component.js +8 -0
- package/dist/lint/rules/__fixtures__/comp/comp006/pass/legacy-tool.component.js +12 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/inventory-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/fail/orders-table.component.js +11 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/orders-table.component.js +10 -0
- package/dist/lint/rules/__fixtures__/comp/comp007/pass/search-service.component.js +16 -0
- package/dist/lint/rules/comp/comp001-publishes-never-applies.js +69 -0
- package/dist/lint/rules/comp/comp002-dangling-wiring-ref.js +84 -0
- package/dist/lint/rules/comp/comp003-mutating-no-rollback.js +103 -0
- package/dist/lint/rules/comp/comp004-gate-needs-durable-runtime.js +70 -0
- package/dist/lint/rules/comp/comp005-capability-kind-is-noun.js +109 -0
- package/dist/lint/rules/comp/comp006-shell-needs-reason.js +49 -0
- package/dist/lint/rules/comp/comp007-composition-sprawl.js +64 -0
- package/dist/lint/rules/comp/index.js +33 -0
- package/dist/lint/rules/comp/support.js +129 -0
- package/dist/lint/rules/composite-scope.js +51 -0
- package/dist/lint/rules/cor017-composite-name-match.js +93 -0
- package/dist/lint/rules/cor018-composite-prefer-lexicon-type.js +136 -0
- package/dist/lint/rules/cor021-env-literal-name.js +100 -0
- package/dist/lint/rules/cor022-receipt-leaf.js +118 -0
- package/dist/lint/rules/cor024-receipt-secret-pointer.js +199 -0
- package/dist/lint/rules/declarable-naming-convention.js +62 -0
- package/dist/lint/rules/evl001-non-literal-expression.js +66 -0
- package/dist/lint/rules/evl002-control-flow-resource.js +69 -0
- package/dist/lint/rules/evl003-dynamic-property-access.js +44 -0
- package/dist/lint/rules/evl004-spread-non-const.js +94 -0
- package/dist/lint/rules/evl005-resource-block-body.js +41 -0
- package/dist/lint/rules/evl007-invalid-siblings.js +105 -0
- package/dist/lint/rules/evl009-composite-no-constant.js +158 -0
- package/dist/lint/rules/evl010-composite-no-transform.js +59 -0
- package/dist/lint/rules/evl011-symbolic-in-template.js +106 -0
- package/dist/lint/rules/export-required.js +115 -0
- package/dist/lint/rules/file-declarable-limit.js +88 -0
- package/dist/lint/rules/flat-declarations.js +62 -0
- package/dist/lint/rules/index.js +90 -0
- package/dist/lint/rules/no-cyclic-declarable-ref.js +138 -0
- package/dist/lint/rules/no-redundant-type-import.js +76 -0
- package/dist/lint/rules/no-redundant-value-cast.js +41 -0
- package/dist/lint/rules/no-string-ref.js +59 -0
- package/dist/lint/rules/no-unused-declarable-import.js +75 -0
- package/dist/lint/rules/no-unused-declarable.js +142 -0
- package/dist/lint/rules/op/index.js +28 -0
- package/dist/lint/rules/op/ops012-activity-contract.js +54 -0
- package/dist/lint/rules/op/ops013-step-output-ref.js +88 -0
- package/dist/lint/rules/op/ops014-converge-rule-refusals.js +114 -0
- package/dist/lint/rules/op/ops015-gate-approval.js +45 -0
- package/dist/lint/rules/op/support.js +11 -0
- package/dist/lint/rules/op/sys010-key-over-plain-http.js +100 -0
- package/dist/lint/rules/property-kind.js +56 -0
- package/dist/lint/rules/single-concern-file.js +71 -0
- package/dist/lint/rules/sys001-no-literal-key.js +60 -0
- package/dist/lint/selectors.js +168 -0
- package/dist/lint/suppressions.js +129 -0
- package/dist/lint/typescript.js +17 -0
- package/dist/live-endpoint.js +113 -0
- package/dist/live-read-session.js +76 -0
- package/dist/lsp/lexicon-providers.js +163 -0
- package/dist/lsp/types.js +5 -0
- package/dist/managed-fields.js +293 -0
- package/dist/mcp/types.js +4 -0
- package/dist/notify-verify.js +0 -1
- package/dist/notify.js +0 -1
- package/dist/notify.schema.json +72 -0
- package/dist/observation.js +266 -0
- package/dist/okf-read.js +134 -0
- package/dist/okf.js +275 -0
- package/dist/op/__fixtures__/decide-stub-backend.js +125 -0
- package/dist/op/activities/activity-contracts.d.ts +1 -1
- package/dist/op/activities/activity-contracts.js +313 -0
- package/dist/op/activities/apply.js +582 -0
- package/dist/op/activities/build.js +18 -0
- package/dist/op/activities/change-coverage.js +40 -0
- package/dist/op/activities/change-set.d.ts +8 -3
- package/dist/op/activities/change-set.d.ts.map +1 -1
- package/dist/op/activities/change-set.js +67 -0
- package/dist/op/activities/converge.js +492 -0
- package/dist/op/activities/decide.js +211 -0
- package/dist/op/activities/env-teardown.js +110 -0
- package/dist/op/activities/factory.js +591 -0
- package/dist/op/activities/forge-pull-request.js +82 -0
- package/dist/op/activities/gh-host.js +78 -0
- package/dist/op/activities/guard-validate.js +165 -0
- package/dist/op/activities/http-check.js +40 -0
- package/dist/op/activities/index.js +59 -0
- package/dist/op/activities/lexicon-upgrade.js +629 -0
- package/dist/op/activities/lifecycle.js +109 -0
- package/dist/op/activities/pipeline-audit.js +147 -0
- package/dist/op/activities/policy.js +26 -0
- package/dist/op/activities/predict-behaviour.js +341 -0
- package/dist/op/activities/propose-upgrade.js +165 -0
- package/dist/op/activities/reconcile.d.ts +28 -16
- package/dist/op/activities/reconcile.d.ts.map +1 -1
- package/dist/op/activities/reconcile.js +1011 -0
- package/dist/op/activities/shell.js +118 -0
- package/dist/op/activities/source-release.js +97 -0
- package/dist/op/activities/source-rollback.js +165 -0
- package/dist/op/activities/teardown.js +17 -0
- package/dist/op/activities/util.js +6 -0
- package/dist/op/activities/wait.js +51 -0
- package/dist/op/activities/work-evidence.js +35 -0
- package/dist/op/activities/workflow-audit.js +133 -0
- package/dist/op/activity-contract-registry.js +106 -0
- package/dist/op/activity-contract.js +232 -0
- package/dist/op/activity-failure.js +31 -0
- package/dist/op/activity-profiles.js +129 -0
- package/dist/op/activity-registry.js +105 -0
- package/dist/op/activity-runtime.js +28 -0
- package/dist/op/builders.d.ts +1 -1
- package/dist/op/builders.d.ts.map +1 -1
- package/dist/op/builders.js +801 -0
- package/dist/op/change-signal.js +118 -0
- package/dist/op/composites/apply-op.js +151 -0
- package/dist/op/composites/behaviour-op.js +65 -0
- package/dist/op/composites/converge-op.js +141 -0
- package/dist/op/composites/index.js +19 -0
- package/dist/op/composites/lexicon-upgrade-op.js +107 -0
- package/dist/op/composites/pipeline-audit-op.js +50 -0
- package/dist/op/composites/reconcile-op.js +84 -0
- package/dist/op/composites/watch-op.js +69 -0
- package/dist/op/composites/workflow-audit-op.js +57 -0
- package/dist/op/converge-rule.js +205 -0
- package/dist/op/cron.js +146 -0
- package/dist/op/decide-backend.js +181 -0
- package/dist/op/decide-config.js +68 -0
- package/dist/op/decide-read-inputs.js +141 -0
- package/dist/op/discover.d.ts.map +1 -1
- package/dist/op/discover.js +213 -0
- package/dist/op/duration.js +21 -0
- package/dist/op/emulator-freshness.js +80 -0
- package/dist/op/emulator-lifecycle.js +269 -0
- package/dist/op/factory.js +83 -0
- package/dist/op/gate-approval.js +172 -0
- package/dist/op/gate-name.js +86 -0
- package/dist/op/gate-plan-context.js +167 -0
- package/dist/op/gate-point-run.js +67 -0
- package/dist/op/gate-point.js +111 -0
- package/dist/op/gate-resume-plan.js +155 -0
- package/dist/op/gate-resume.js +31 -0
- package/dist/op/gate-review.js +290 -0
- package/dist/op/gate-run-locator.js +85 -0
- package/dist/op/gate-summary.js +100 -0
- package/dist/op/gate-wait.js +56 -0
- package/dist/op/gate.js +449 -0
- package/dist/op/generate-pipeline.js +124 -0
- package/dist/op/index.js +51 -0
- package/dist/op/lifecycle-receipt-store.js +45 -0
- package/dist/op/local-executor.js +1164 -0
- package/dist/op/local-output.js +140 -0
- package/dist/op/op-ir.js +317 -0
- package/dist/op/op-verb-class.js +131 -0
- package/dist/op/op-waves-notify.js +136 -0
- package/dist/op/op-waves-run.d.ts +1 -1
- package/dist/op/op-waves-run.d.ts.map +1 -1
- package/dist/op/op-waves-run.js +1657 -0
- package/dist/op/op-waves.js +409 -0
- package/dist/op/operator.js +743 -0
- package/dist/op/receipt-store.js +94 -0
- package/dist/op/resource.js +23 -0
- package/dist/op/run-context.js +28 -0
- package/dist/op/run-live.js +256 -0
- package/dist/op/runtime.js +21 -0
- package/dist/op/runtimes/local.js +195 -0
- package/dist/op/source-archive.js +131 -0
- package/dist/op/step-output-ref.js +397 -0
- package/dist/op/steward-beside.js +169 -0
- package/dist/op/steward-points.js +138 -0
- package/dist/op/steward-turn.js +59 -0
- package/dist/op/steward.js +317 -0
- package/dist/op/types.js +25 -0
- package/dist/op/work-lease-decl.js +81 -0
- package/dist/op/work-lease-run.js +393 -0
- package/dist/override-gate.js +284 -0
- package/dist/owner-chain.js +74 -0
- package/dist/ownership.js +92 -0
- package/dist/params.js +61 -0
- package/dist/plan-summary.js +711 -0
- package/dist/point-decision.js +211 -0
- package/dist/pr-forge.js +810 -0
- package/dist/pr-loop.js +203 -0
- package/dist/project-codegen.js +191 -0
- package/dist/project-root.js +74 -0
- package/dist/project-validation.js +50 -0
- package/dist/provenance.js +157 -0
- package/dist/pseudo-parameter.js +40 -0
- package/dist/reconcile.js +450 -0
- package/dist/resource-attributes.js +33 -0
- package/dist/runtime-adapter.js +77 -0
- package/dist/runtime.js +66 -0
- package/dist/secret-materialization.js +153 -0
- package/dist/secret-provenance.js +250 -0
- package/dist/serializer-walker.js +112 -0
- package/dist/serializer.js +1 -0
- package/dist/sort.js +45 -0
- package/dist/stack-output.js +115 -0
- package/dist/telemetry-attribution.js +149 -0
- package/dist/terraform/__fixtures__/build-graph.js +63 -0
- package/dist/terraform/adopt-state.js +40 -0
- package/dist/terraform/aws-resources.js +384 -0
- package/dist/terraform/bridge.js +204 -0
- package/dist/terraform/carve-provider.js +155 -0
- package/dist/terraform/carve.js +138 -0
- package/dist/terraform/data-source-shape.js +57 -0
- package/dist/terraform/emit-source.js +36 -0
- package/dist/terraform/excise.js +123 -0
- package/dist/terraform/graduate.js +128 -0
- package/dist/terraform/graph.js +435 -0
- package/dist/terraform/hcl2json.js +60 -0
- package/dist/terraform/manifest.js +149 -0
- package/dist/terraform/parse.js +81 -0
- package/dist/terraform/providers/aws.js +146 -0
- package/dist/terraform/providers/gcp.js +294 -0
- package/dist/terraform/providers/index.js +17 -0
- package/dist/terraform/providers/kubernetes.js +253 -0
- package/dist/terraform/score.js +151 -0
- package/dist/terraform/state.js +67 -0
- package/dist/terraform/tier-map.js +74 -0
- package/dist/terraform/types.js +13 -0
- package/dist/terraform/unified-diff.js +132 -0
- package/dist/testing.js +295 -0
- package/dist/toml-emit.js +153 -0
- package/dist/toml-parse.js +355 -0
- package/dist/toml-utils.js +60 -0
- package/dist/toml.js +428 -0
- package/dist/ts-loader.d.ts +46 -0
- package/dist/ts-loader.d.ts.map +1 -0
- package/dist/ts-loader.js +103 -0
- package/dist/types.js +1 -0
- package/dist/utils.js +61 -0
- package/dist/validation.js +20 -0
- package/dist/vendor/js-yaml-load.js +1662 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts +7 -0
- package/dist/workspace/__fixtures__/contract-repo.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/contract-repo.js +119 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- package/dist/workspace/__fixtures__/sessions.d.ts +1 -1
- package/dist/workspace/__fixtures__/sessions.d.ts.map +1 -1
- package/dist/workspace/__fixtures__/sessions.js +91 -0
- package/dist/workspace/__fixtures__/two-member-workspace.js +34 -0
- package/dist/workspace/agent-cli.js +99 -0
- package/dist/workspace/agent.schema.json +390 -0
- package/dist/workspace/answers-ledger.js +89 -0
- package/dist/workspace/box-cli.js +142 -0
- package/dist/workspace/box-factory-write.js +196 -0
- package/dist/workspace/box-factory-write.schema.json +342 -0
- package/dist/workspace/box-factory.js +88 -0
- package/dist/workspace/box-intent.js +126 -0
- package/dist/workspace/box-isolation.js +169 -0
- package/dist/workspace/box-listing-write.schema.json +204 -0
- package/dist/workspace/box-listing.js +298 -0
- package/dist/workspace/box-publish.js +352 -0
- package/dist/workspace/box-publish.schema.json +498 -0
- package/dist/workspace/box-services.js +39 -0
- package/dist/workspace/broker-protocol.js +359 -0
- package/dist/workspace/broker-protocol.schema.json +228 -0
- package/dist/workspace/change-set.schema.json +462 -0
- package/dist/workspace/changes-cli.js +56 -0
- package/dist/workspace/changes.js +446 -0
- package/dist/workspace/changes.schema.json +642 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-fly-site.js +198 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-live-names.js +155 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-rollback.js +214 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-inputs.js +180 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit-ship-policy.js +99 -0
- package/dist/workspace/chant-migrations/chud-lexicon-exit.js +847 -0
- package/dist/workspace/chant-migrations.js +113 -0
- package/dist/workspace/check.schema.json +433 -0
- package/dist/workspace/checks/box-isolation.js +62 -0
- package/dist/workspace/checks/boxes.js +491 -0
- package/dist/workspace/checks/diagrams.js +104 -0
- package/dist/workspace/checks/generated.js +419 -0
- package/dist/workspace/checks/ledgers.js +212 -0
- package/dist/workspace/checks/links.js +191 -0
- package/dist/workspace/checks/live.js +100 -0
- package/dist/workspace/checks/pipelines.js +188 -0
- package/dist/workspace/checks/records.js +169 -0
- package/dist/workspace/checks.js +426 -0
- package/dist/workspace/ci-green-cli.js +125 -0
- package/dist/workspace/ci-green-forge.js +83 -0
- package/dist/workspace/ci-green-workflow.d.ts +3 -1
- package/dist/workspace/ci-green-workflow.d.ts.map +1 -1
- package/dist/workspace/ci-green-workflow.js +202 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -0
- package/dist/workspace/class-data.d.ts +84 -0
- package/dist/workspace/class-data.d.ts.map +1 -0
- package/dist/workspace/class-data.js +238 -0
- package/dist/workspace/compose-graph.js +235 -0
- package/dist/workspace/compose-reports.js +146 -0
- package/dist/workspace/composites.js +264 -0
- package/dist/workspace/composites.schema.json +617 -0
- package/dist/workspace/conformance/__fixture__/app/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/app/src/server.mjs +29 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.kind.mjs +54 -0
- package/dist/workspace/conformance/__fixture__/decisions/decision.schema.json +512 -0
- package/dist/workspace/conformance/__fixture__/decisions/fix-001-how-the-app-is-deployed.md +40 -0
- package/dist/workspace/conformance/__fixture__/delivery/chant.config.ts +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/lexicon/index.ts +26 -0
- package/dist/workspace/conformance/__fixture__/delivery/package.json +7 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.component.ts +14 -0
- package/dist/workspace/conformance/__fixture__/delivery/src/app.ts +4 -0
- package/dist/workspace/conformance/__fixtures__/reference-broker.js +205 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.kind.mjs +32 -0
- package/dist/workspace/conformance/__writer_fixture__/answers/answer.schema.json +135 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.kind.mjs +37 -0
- package/dist/workspace/conformance/__writer_fixture__/contracts/contract.schema.json +213 -0
- package/dist/workspace/conformance/__writer_fixture__/decisions/points.json +228 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.kind.mjs +15 -0
- package/dist/workspace/conformance/__writer_fixture__/drivers/driver.schema.json +38 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.kind.mjs +54 -0
- package/dist/workspace/conformance/__writer_fixture__/sessions/session.schema.json +289 -0
- package/dist/workspace/conformance/__writer_fixture__/work/W-001-the-writer-suite-works-this-item.md +25 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.kind.mjs +60 -0
- package/dist/workspace/conformance/__writer_fixture__/work/work.schema.json +603 -0
- package/dist/workspace/conformance/broker.js +736 -0
- package/dist/workspace/conformance/index.js +673 -0
- package/dist/workspace/conformance/vitest.js +108 -0
- package/dist/workspace/conformance/writer.js +1080 -0
- package/dist/workspace/decide.js +879 -0
- package/dist/workspace/decision-points.schema.json +135 -135
- package/dist/workspace/declaration-write-cli.js +74 -0
- package/dist/workspace/declaration-write.js +238 -0
- package/dist/workspace/declaration.js +938 -0
- package/dist/workspace/declaration.schema.json +1413 -1413
- package/dist/workspace/declared-kinds.js +106 -0
- package/dist/workspace/environments.js +164 -0
- package/dist/workspace/evidence.schema.json +279 -0
- package/dist/workspace/export-cli.js +185 -0
- package/dist/workspace/export.js +499 -0
- package/dist/workspace/factory-rules.js +175 -0
- package/dist/workspace/generated-files.js +92 -0
- package/dist/workspace/glob.js +45 -0
- package/dist/workspace/graph-cache.js +352 -0
- package/dist/workspace/graph-cli.js +348 -0
- package/dist/workspace/graph.schema.json +1338 -0
- package/dist/workspace/identity-gate-rule.js +75 -0
- package/dist/workspace/identity.js +126 -0
- package/dist/workspace/import.js +283 -0
- package/dist/workspace/init.js +620 -0
- package/dist/workspace/intent-cli.js +263 -0
- package/dist/workspace/intent-joins.js +201 -0
- package/dist/workspace/intent-record.js +352 -0
- package/dist/workspace/intent-record.schema.json +864 -0
- package/dist/workspace/intent.js +1582 -0
- package/dist/workspace/intent.schema.json +2420 -0
- package/dist/workspace/json-edit.js +221 -0
- package/dist/workspace/jsonc.js +235 -0
- package/dist/workspace/kind-readers.js +103 -0
- package/dist/workspace/kinds.d.ts +3 -7
- package/dist/workspace/kinds.d.ts.map +1 -1
- package/dist/workspace/kinds.js +553 -0
- package/dist/workspace/lexicon-symbols.js +112 -0
- package/dist/workspace/lineage-adopt-cli.js +102 -0
- package/dist/workspace/lineage-adopt.js +360 -0
- package/dist/workspace/lineage-check.js +282 -0
- package/dist/workspace/lineage-cli.js +121 -0
- package/dist/workspace/lineage-hash-index.js +284 -0
- package/dist/workspace/lineage-init.js +507 -0
- package/dist/workspace/lineage-lock.js +387 -0
- package/dist/workspace/lineage-merge.js +45 -0
- package/dist/workspace/lineage-migrations.d.ts.map +1 -1
- package/dist/workspace/lineage-migrations.js +329 -0
- package/dist/workspace/lineage-provenance.js +36 -0
- package/dist/workspace/lineage-update.js +138 -0
- package/dist/workspace/lineage-upgrade-cli.js +131 -0
- package/dist/workspace/lineage-upgrade.js +889 -0
- package/dist/workspace/lineage-vendor.js +171 -0
- package/dist/workspace/lineage-version.js +128 -0
- package/dist/workspace/lineage-versions.js +275 -0
- package/dist/workspace/links.js +330 -0
- package/dist/workspace/ls-generated.js +95 -0
- package/dist/workspace/ls.js +277 -0
- package/dist/workspace/ls.schema.json +333 -0
- package/dist/workspace/member-commands.js +508 -0
- package/dist/workspace/member-handles.js +216 -0
- package/dist/workspace/member-pipeline.js +258 -0
- package/dist/workspace/member-run.js +117 -0
- package/dist/workspace/member-write.schema.json +193 -0
- package/dist/workspace/nested-graph.js +156 -0
- package/dist/workspace/nesting.js +38 -0
- package/dist/workspace/patch.js +301 -0
- package/dist/workspace/patch.schema.json +321 -0
- package/dist/workspace/pin-cli.js +55 -0
- package/dist/workspace/pin-integrity.js +100 -0
- package/dist/workspace/plan-summary.schema.json +155 -0
- package/dist/workspace/point-answer.schema.json +129 -129
- package/dist/workspace/points-cli.js +291 -0
- package/dist/workspace/points-write.schema.json +660 -0
- package/dist/workspace/points.js +521 -0
- package/dist/workspace/points.schema.json +916 -0
- package/dist/workspace/pr-report.schema.json +108 -0
- package/dist/workspace/principal-classes.d.ts +4 -11
- package/dist/workspace/principal-classes.d.ts.map +1 -1
- package/dist/workspace/principal-classes.js +162 -0
- package/dist/workspace/reason-codes.js +326 -0
- package/dist/workspace/record-assets.js +151 -0
- package/dist/workspace/record-decided.js +105 -0
- package/dist/workspace/record-sessions.js +96 -0
- package/dist/workspace/record-source.js +114 -0
- package/dist/workspace/records-amend.schema.json +284 -0
- package/dist/workspace/records-checkout.js +76 -0
- package/dist/workspace/records-cli.js +707 -0
- package/dist/workspace/records-close.js +116 -0
- package/dist/workspace/records-close.schema.json +278 -0
- package/dist/workspace/records-new.schema.json +202 -0
- package/dist/workspace/records-review.schema.json +367 -0
- package/dist/workspace/records-since.js +317 -0
- package/dist/workspace/records-since.schema.json +218 -0
- package/dist/workspace/records-write.js +1229 -0
- package/dist/workspace/records.js +1345 -0
- package/dist/workspace/records.schema.json +604 -0
- package/dist/workspace/reference-kinds/app/package.json +10 -0
- package/dist/workspace/reference-kinds/app/workspace-kinds.json +45 -0
- package/dist/workspace/returns.js +303 -0
- package/dist/workspace/root-refusal.js +75 -0
- package/dist/workspace/run-statement.schema.json +622 -0
- package/dist/workspace/runs-cli.js +584 -0
- package/dist/workspace/runs-write.schema.json +994 -0
- package/dist/workspace/runs.js +708 -0
- package/dist/workspace/runs.schema.json +1257 -0
- package/dist/workspace/runtimes.js +76 -0
- package/dist/workspace/session-kinds.js +83 -0
- package/dist/workspace/signers.schema.json +206 -0
- package/dist/workspace/source-block.js +125 -0
- package/dist/workspace/squash.js +177 -0
- package/dist/workspace/status-gates.js +162 -0
- package/dist/workspace/status-stewards.js +330 -0
- package/dist/workspace/status.js +514 -0
- package/dist/workspace/status.schema.json +998 -0
- package/dist/workspace/steward-index.js +191 -0
- package/dist/workspace/symbols.js +188 -0
- package/dist/workspace/template-manifest.js +227 -0
- package/dist/workspace/template-pins.js +115 -0
- package/dist/workspace/trailer-joins.js +65 -0
- package/dist/workspace/trailers.js +111 -0
- package/dist/workspace/tree.js +136 -0
- package/dist/workspace/trust/attestor.js +63 -0
- package/dist/workspace/trust/dsse.js +108 -0
- package/dist/workspace/trust/evidence-cli.js +175 -0
- package/dist/workspace/trust/evidence.js +161 -0
- package/dist/workspace/trust/gate-seal.js +226 -0
- package/dist/workspace/trust/policy.js +190 -0
- package/dist/workspace/trust/provenance.js +180 -0
- package/dist/workspace/trust/rotation.js +298 -0
- package/dist/workspace/trust/run-commits.js +101 -0
- package/dist/workspace/trust/run-statement.js +182 -0
- package/dist/workspace/trust/seal.js +272 -0
- package/dist/workspace/trust/signers-cli.js +152 -0
- package/dist/workspace/trust/ssh-commit.js +178 -0
- package/dist/workspace/trust/test-repo.js +118 -0
- package/dist/workspace/trust/trust-files.js +193 -0
- package/dist/workspace/trust/verify-cli.js +63 -0
- package/dist/workspace/trust/verify.js +192 -0
- package/dist/workspace/which-chant.js +141 -0
- package/dist/workspace/wip-cli.js +95 -0
- package/dist/workspace/wip-write.schema.json +504 -0
- package/dist/workspace/wip.js +631 -0
- package/dist/workspace/wip.schema.json +334 -0
- package/dist/workspace/work-cli.js +448 -0
- package/dist/workspace/work-evidence.js +122 -0
- package/dist/workspace/work-evidence.schema.json +222 -0
- package/dist/workspace/work-history.schema.json +421 -0
- package/dist/workspace/work-lease.schema.json +246 -0
- package/dist/workspace/work-size.js +77 -0
- package/dist/workspace/work.js +283 -0
- package/dist/workspace/workspace-kinds.schema.json +259 -259
- package/dist/workspace/workspace-principals.schema.json +53 -53
- package/dist/workspace/write-lock-cli.js +105 -0
- package/dist/workspace/write-lock.js +424 -0
- package/dist/workspace/write-lock.schema.json +172 -0
- package/dist/workspace/write-scope.js +484 -0
- package/dist/yaml.js +459 -0
- package/package.json +2 -2
- package/src/build.ts +8 -0
- package/src/change-set.test.ts +48 -0
- package/src/change-set.ts +52 -2
- package/src/ci-jobs.test.ts +49 -0
- package/src/ci-jobs.ts +515 -0
- package/src/cli/commands/check-lexicon-plugin.ts +2 -0
- package/src/cli/commands/lint.ts +3 -0
- package/src/cli/commands/migrate.ts +2 -0
- package/src/cli/compiled-cli.e2e.test.ts +165 -0
- package/src/cli/main.ts +121 -27
- package/src/cli/mcp/workspace-tools.ts +1 -1
- package/src/codegen/pinned-upgrade.ts +2 -0
- package/src/components/discover.ts +2 -0
- package/src/components/pr-pipeline.ts +3 -2
- package/src/components/sandbox/driver.ts +3 -1
- package/src/composite.ts +15 -3
- package/src/config-import.ts +3 -0
- package/src/discovery/collect.ts +15 -1
- package/src/discovery/fold-build-parity.test.ts +71 -0
- package/src/discovery/fold-import.ts +25 -127
- package/src/discovery/fold-project-provenance.test.ts +21 -4
- package/src/discovery/host-composite.ts +101 -0
- package/src/discovery/import.ts +2 -0
- package/src/discovery/index.ts +11 -1
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/gate-decision-bundle.test.ts +5 -4
- package/src/gate-decision-identity.test.ts +59 -6
- package/src/gate-decision.ts +81 -21
- package/src/lexicon-module.ts +3 -0
- package/src/lifecycle/gate-audit.test.ts +55 -1
- package/src/lifecycle/gate-audit.ts +116 -3
- package/src/lifecycle/gate-ledger.test.ts +20 -1
- package/src/lifecycle/gate-ledger.ts +33 -1
- package/src/lint/config.ts +1 -1
- package/src/lint/discover.ts +28 -8
- package/src/lint/policy-import.ts +4 -1
- package/src/lint/rule-loader.ts +2 -0
- package/src/op/activities/activity-contracts.ts +1 -1
- package/src/op/activities/change-set.ts +11 -3
- package/src/op/activities/lexicon-upgrade.test.ts +2 -0
- package/src/op/activities/reconcile.test.ts +62 -2
- package/src/op/activities/reconcile.ts +46 -22
- package/src/op/builders.ts +1 -1
- package/src/op/discover.ts +3 -0
- package/src/op/op-waves-run.ts +4 -3
- package/src/op/op-waves.test.ts +2 -0
- package/src/op/work-lease-run.test.ts +12 -4
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/__fixtures__/contract-repo.ts +17 -1
- package/src/workspace/__fixtures__/sessions.ts +3 -3
- package/src/workspace/change-set.schema.json +5 -3
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/ci-green-workflow.test.ts +4 -4
- package/src/workspace/ci-green-workflow.ts +5 -2
- package/src/workspace/class-data.test.ts +64 -0
- package/src/workspace/class-data.ts +236 -0
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +7 -36
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +12 -95
- package/src/workspace/records-formats.test.ts +7 -2
- package/src/workspace/records-sessions-write.test.ts +3 -3
- package/src/workspace/status-contract.e2e.test.ts +37 -0
- package/src/workspace/status-contract.test.ts +23 -21
package/dist/yaml.js
ADDED
|
@@ -0,0 +1,459 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* YAML emitter and parser.
|
|
3
|
+
*
|
|
4
|
+
* The emitter writes the block-style YAML chant's serializers produce. The
|
|
5
|
+
* parser is a vendored js-yaml loader 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.
|
|
9
|
+
*/
|
|
10
|
+
import { FLOAT_TYPE, INT_TYPE, load, MAP_TYPE, NULL_TYPE, SEQ_TYPE, STR_TYPE, YAMLException, } from "./vendor/js-yaml-load.js";
|
|
11
|
+
// ---------------------------------------------------------------------------
|
|
12
|
+
// Emitter
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* Emit a YAML value with proper indentation.
|
|
16
|
+
*
|
|
17
|
+
* - Primitives render inline.
|
|
18
|
+
* - Arrays and objects render as block YAML, returning a string that starts
|
|
19
|
+
* with `\n` so the caller can append it after a key.
|
|
20
|
+
* - Tagged values `{ tag, value }` emit `!tag [...]` or `!tag scalar`.
|
|
21
|
+
*/
|
|
22
|
+
/**
|
|
23
|
+
* An object's entries minus those whose value is `undefined`. An `undefined`
|
|
24
|
+
* property is "not supplied" in TypeScript (a declared-but-unset optional
|
|
25
|
+
* build parameter, `{ x: cond ? v : undefined }`), which `JSON.stringify`
|
|
26
|
+
* already omits; the YAML emitter must agree, or the same source ships
|
|
27
|
+
* `key: null` under `-o out.yaml` and no key at all under `-o out.json`. An
|
|
28
|
+
* explicit `null` is a value and is kept (chant #1371).
|
|
29
|
+
*/
|
|
30
|
+
function definedEntries(obj) {
|
|
31
|
+
return Object.entries(obj).filter(([, val]) => val !== undefined);
|
|
32
|
+
}
|
|
33
|
+
export function emitYAML(value, indent) {
|
|
34
|
+
const prefix = " ".repeat(indent);
|
|
35
|
+
// `undefined` only reaches here as a top-level value or an array element —
|
|
36
|
+
// an object entry whose value is `undefined` is dropped below, the same way
|
|
37
|
+
// `JSON.stringify` omits it. A bare `undefined` renders as `null` for the
|
|
38
|
+
// same reason `JSON.stringify([undefined])` is `[null]`: YAML has no way to
|
|
39
|
+
// say "absent" in a sequence slot.
|
|
40
|
+
if (value === null || value === undefined) {
|
|
41
|
+
return "null";
|
|
42
|
+
}
|
|
43
|
+
if (typeof value === "boolean") {
|
|
44
|
+
return value ? "true" : "false";
|
|
45
|
+
}
|
|
46
|
+
if (typeof value === "number") {
|
|
47
|
+
return String(value);
|
|
48
|
+
}
|
|
49
|
+
if (typeof value === "string") {
|
|
50
|
+
// Multiline strings use YAML literal block scalar (|)
|
|
51
|
+
if (value.includes("\n")) {
|
|
52
|
+
const lines = value.split("\n");
|
|
53
|
+
// Trim trailing empty line if present (common for template strings)
|
|
54
|
+
const trimmed = lines[lines.length - 1] === "" ? lines.slice(0, -1) : lines;
|
|
55
|
+
return "|\n" + trimmed.map((l) => `${prefix}${l}`).join("\n");
|
|
56
|
+
}
|
|
57
|
+
// Quote strings that could be misinterpreted
|
|
58
|
+
if (value === "" ||
|
|
59
|
+
value === "true" ||
|
|
60
|
+
value === "false" ||
|
|
61
|
+
value === "null" ||
|
|
62
|
+
value === "yes" ||
|
|
63
|
+
value === "no" ||
|
|
64
|
+
value.includes(": ") ||
|
|
65
|
+
value.includes("#") ||
|
|
66
|
+
value.startsWith("*") ||
|
|
67
|
+
value.startsWith("&") ||
|
|
68
|
+
value.startsWith("!") ||
|
|
69
|
+
value.startsWith("{") ||
|
|
70
|
+
value.startsWith("[") ||
|
|
71
|
+
value.startsWith("'") ||
|
|
72
|
+
value.startsWith('"') ||
|
|
73
|
+
value.startsWith("$") ||
|
|
74
|
+
/^\d/.test(value) ||
|
|
75
|
+
// What a YAML parser reads as something other than this string: an
|
|
76
|
+
// indicator that cannot start a plain scalar, a trailing colon, edge
|
|
77
|
+
// whitespace, a signed or dotted number, and the other spellings of
|
|
78
|
+
// booleans, null and the float constants (#3006).
|
|
79
|
+
/^[-?:](?:\s|$)|^[,\]}|>%@`]|:$|^\s|\s$|^[-+.]\d/.test(value) ||
|
|
80
|
+
/^(?:true|false|null|~|yes|no|[-+]?\.(?:inf|nan))$/i.test(value)) {
|
|
81
|
+
// Use single quotes, escaping internal single quotes
|
|
82
|
+
return `'${value.replace(/'/g, "''")}'`;
|
|
83
|
+
}
|
|
84
|
+
return value;
|
|
85
|
+
}
|
|
86
|
+
if (Array.isArray(value)) {
|
|
87
|
+
if (value.length === 0)
|
|
88
|
+
return "[]";
|
|
89
|
+
const lines = [];
|
|
90
|
+
for (const item of value) {
|
|
91
|
+
if (typeof item === "object" && item !== null && !Array.isArray(item)) {
|
|
92
|
+
// Object items in arrays
|
|
93
|
+
const entries = definedEntries(item);
|
|
94
|
+
if (entries.length > 0) {
|
|
95
|
+
const [firstKey, firstVal] = entries[0];
|
|
96
|
+
const firstEmitted = emitYAML(firstVal, indent + 2);
|
|
97
|
+
if (firstEmitted.startsWith("\n")) {
|
|
98
|
+
lines.push(`${prefix}- ${firstKey}:${firstEmitted}`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
lines.push(`${prefix}- ${firstKey}: ${firstEmitted}`);
|
|
102
|
+
}
|
|
103
|
+
for (let i = 1; i < entries.length; i++) {
|
|
104
|
+
const [key, val] = entries[i];
|
|
105
|
+
const emitted = emitYAML(val, indent + 2);
|
|
106
|
+
if (emitted.startsWith("\n")) {
|
|
107
|
+
lines.push(`${prefix} ${key}:${emitted}`);
|
|
108
|
+
}
|
|
109
|
+
else {
|
|
110
|
+
lines.push(`${prefix} ${key}: ${emitted}`);
|
|
111
|
+
}
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
else {
|
|
115
|
+
// An empty mapping is still an item: `egress: [{}]` allows all
|
|
116
|
+
// egress, and dropping it leaves an empty list.
|
|
117
|
+
lines.push(`${prefix}- {}`);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
else {
|
|
121
|
+
lines.push(`${prefix}- ${emitYAML(item, indent + 1).trimStart()}`);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
return "\n" + lines.join("\n");
|
|
125
|
+
}
|
|
126
|
+
if (typeof value === "object") {
|
|
127
|
+
const obj = value;
|
|
128
|
+
// Handle tagged values (e.g. { tag: "!reference", value: [...] })
|
|
129
|
+
if ("tag" in obj && "value" in obj && typeof obj.tag === "string") {
|
|
130
|
+
if (Array.isArray(obj.value)) {
|
|
131
|
+
return `${obj.tag} [${obj.value.map(String).join(", ")}]`;
|
|
132
|
+
}
|
|
133
|
+
return `${obj.tag} ${emitYAML(obj.value, indent)}`;
|
|
134
|
+
}
|
|
135
|
+
const entries = definedEntries(obj);
|
|
136
|
+
if (entries.length === 0)
|
|
137
|
+
return "{}";
|
|
138
|
+
const lines = [];
|
|
139
|
+
for (const [key, val] of entries) {
|
|
140
|
+
const emitted = emitYAML(val, indent + 1);
|
|
141
|
+
if (emitted.startsWith("\n")) {
|
|
142
|
+
lines.push(`${prefix}${key}:${emitted}`);
|
|
143
|
+
}
|
|
144
|
+
else {
|
|
145
|
+
lines.push(`${prefix}${key}: ${emitted}`);
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
return "\n" + lines.join("\n");
|
|
149
|
+
}
|
|
150
|
+
return String(value);
|
|
151
|
+
}
|
|
152
|
+
/**
|
|
153
|
+
* `key: value` at column `indent * 2`, for a serializer that writes a
|
|
154
|
+
* document key by key. A block value follows the colon on the next line; an
|
|
155
|
+
* inline one (a scalar, `{}`, `[]`) needs a space after the colon, or
|
|
156
|
+
* `jobs:{}` is the plain scalar "jobs:{}" rather than a key (#3006).
|
|
157
|
+
*/
|
|
158
|
+
export function emitYAMLEntry(key, value, indent = 0) {
|
|
159
|
+
const emitted = emitYAML(value, indent + 1);
|
|
160
|
+
return `${" ".repeat(indent)}${key}:${emitted.startsWith("\n") ? "" : " "}${emitted}`;
|
|
161
|
+
}
|
|
162
|
+
// ---------------------------------------------------------------------------
|
|
163
|
+
// Parser
|
|
164
|
+
// ---------------------------------------------------------------------------
|
|
165
|
+
/**
|
|
166
|
+
* A document the parser cannot read. Its message and `line` name the line,
|
|
167
|
+
* so `chant import` can report "YAML line N: ..." instead of a stack trace.
|
|
168
|
+
*/
|
|
169
|
+
export class YAMLParseError extends Error {
|
|
170
|
+
constructor(line, message) {
|
|
171
|
+
super(`YAML line ${line}: ${message}`);
|
|
172
|
+
this.name = "YAMLParseError";
|
|
173
|
+
this.line = line;
|
|
174
|
+
}
|
|
175
|
+
}
|
|
176
|
+
/** A document start (`---`) or end (`...`) marker, optionally followed by a comment. */
|
|
177
|
+
const DOCUMENT_MARKER = /^(?:---|\.\.\.)(?:[ \t]+#.*)?[ \t]*$/;
|
|
178
|
+
/**
|
|
179
|
+
* Booleans as YAML 1.2's core schema reads them, plus `yes` and `no`, which
|
|
180
|
+
* this parser has always read as booleans and its callers expect.
|
|
181
|
+
*/
|
|
182
|
+
const BOOL = {
|
|
183
|
+
tag: "tag:yaml.org,2002:bool",
|
|
184
|
+
kind: "scalar",
|
|
185
|
+
resolve: (data) => data !== null && /^(?:true|True|TRUE|false|False|FALSE|yes|no)$/.test(data),
|
|
186
|
+
construct: (data) => /^(?:true|True|TRUE|yes)$/.test(data),
|
|
187
|
+
};
|
|
188
|
+
/** A tagged value written back as text, the way it appeared: `!reference [.base, script]`. */
|
|
189
|
+
function flowText(value) {
|
|
190
|
+
if (Array.isArray(value))
|
|
191
|
+
return `[${value.map(flowText).join(", ")}]`;
|
|
192
|
+
if (typeof value === "object" && value !== null) {
|
|
193
|
+
return `{${Object.entries(value).map(([k, v]) => `${k}: ${flowText(v)}`).join(", ")}}`;
|
|
194
|
+
}
|
|
195
|
+
return String(value);
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Local tags (`!reference`, `!Ref`, `!GetAtt`) on a scalar or a sequence read
|
|
199
|
+
* as the string `"<tag> <value>"`, as they always have: GitLab CI's
|
|
200
|
+
* `!reference [.base, script]` is the string `"!reference [.base, script]"`.
|
|
201
|
+
* A tag on a mapping has no such form and is an error.
|
|
202
|
+
*/
|
|
203
|
+
const TAGGED_SCALAR = {
|
|
204
|
+
tag: "!",
|
|
205
|
+
kind: "scalar",
|
|
206
|
+
multi: true,
|
|
207
|
+
construct: (data, tag) => (data === null || data === "" ? tag : `${tag} ${data}`),
|
|
208
|
+
};
|
|
209
|
+
const TAGGED_SEQUENCE = {
|
|
210
|
+
tag: "!",
|
|
211
|
+
kind: "sequence",
|
|
212
|
+
multi: true,
|
|
213
|
+
construct: (data, tag) => `${tag} ${flowText(data ?? [])}`,
|
|
214
|
+
};
|
|
215
|
+
/** The merge key `<<`, as js-yaml's own merge type reads it. */
|
|
216
|
+
const MERGE = {
|
|
217
|
+
tag: "tag:yaml.org,2002:merge",
|
|
218
|
+
kind: "scalar",
|
|
219
|
+
resolve: (data) => data === "<<" || data === null,
|
|
220
|
+
};
|
|
221
|
+
/**
|
|
222
|
+
* YAML 1.2's core schema (no timestamps, so a date stays a string) with merge
|
|
223
|
+
* keys, `yes`/`no` booleans and local tags read as strings.
|
|
224
|
+
*/
|
|
225
|
+
const SCHEMA = {
|
|
226
|
+
implicit: [NULL_TYPE, BOOL, INT_TYPE, FLOAT_TYPE, MERGE],
|
|
227
|
+
explicit: [STR_TYPE, SEQ_TYPE, MAP_TYPE, TAGGED_SCALAR, TAGGED_SEQUENCE],
|
|
228
|
+
};
|
|
229
|
+
/**
|
|
230
|
+
* Give every alias its own copy of the anchored value. js-yaml shares one
|
|
231
|
+
* object between an anchor and its aliases, so a caller editing the alias
|
|
232
|
+
* would edit the anchor too.
|
|
233
|
+
*/
|
|
234
|
+
function unshareAliases(value, seen = new Set()) {
|
|
235
|
+
if (typeof value !== "object" || value === null)
|
|
236
|
+
return value;
|
|
237
|
+
if (seen.has(value))
|
|
238
|
+
return unshareAliases(structuredClone(value), seen);
|
|
239
|
+
seen.add(value);
|
|
240
|
+
if (Array.isArray(value)) {
|
|
241
|
+
for (let i = 0; i < value.length; i++)
|
|
242
|
+
value[i] = unshareAliases(value[i], seen);
|
|
243
|
+
}
|
|
244
|
+
else {
|
|
245
|
+
const obj = value;
|
|
246
|
+
for (const key of Object.keys(obj))
|
|
247
|
+
obj[key] = unshareAliases(obj[key], seen);
|
|
248
|
+
}
|
|
249
|
+
return value;
|
|
250
|
+
}
|
|
251
|
+
/**
|
|
252
|
+
* The 1-based line to report for a js-yaml error. js-yaml marks where it
|
|
253
|
+
* gave up, which for a stray line of text above a key is the key's line:
|
|
254
|
+
* `a: 1\njust text\nb: 2` fails at `b: 2`, reading `just text b` as one
|
|
255
|
+
* multiline key. Report the line where that key starts instead, the text
|
|
256
|
+
* that is not a key.
|
|
257
|
+
*/
|
|
258
|
+
function errorLine(lines, err) {
|
|
259
|
+
let line = err.mark?.line ?? 0;
|
|
260
|
+
if (/multiline key may not be an implicit key/.test(err.reason)) {
|
|
261
|
+
const indent = lines[line]?.search(/\S/) ?? -1;
|
|
262
|
+
for (let k = line - 1; k >= 0; k--) {
|
|
263
|
+
const prev = lines[k];
|
|
264
|
+
if (prev.trim() === "" || prev.trim().startsWith("#"))
|
|
265
|
+
continue;
|
|
266
|
+
if (prev.search(/\S/) !== indent || /:(?:\s|$)/.test(prev) || /^\s*-(?:\s|$)/.test(prev))
|
|
267
|
+
break;
|
|
268
|
+
line = k;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
return line + 1;
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Read one YAML document with js-yaml (#3006).
|
|
275
|
+
*
|
|
276
|
+
* Kept from the line parser this replaced: `---` and `...` lines are skipped
|
|
277
|
+
* (so a stream reads as one document, as it always has), duplicate keys take
|
|
278
|
+
* the last value, and a document that is not a mapping or a sequence is a
|
|
279
|
+
* {@link YAMLParseError}, as is anything js-yaml rejects. An empty document is
|
|
280
|
+
* `{}`.
|
|
281
|
+
*/
|
|
282
|
+
function loadDocument(content) {
|
|
283
|
+
const text = content
|
|
284
|
+
.replace(/\r\n?/g, "\n")
|
|
285
|
+
.split("\n")
|
|
286
|
+
.map((line) => (DOCUMENT_MARKER.test(line) ? "" : line))
|
|
287
|
+
.join("\n");
|
|
288
|
+
let value;
|
|
289
|
+
try {
|
|
290
|
+
value = load(text, SCHEMA);
|
|
291
|
+
}
|
|
292
|
+
catch (err) {
|
|
293
|
+
if (!(err instanceof YAMLException))
|
|
294
|
+
throw err;
|
|
295
|
+
const line = errorLine(text.split("\n"), err);
|
|
296
|
+
const tag = err.reason.match(/^unknown tag !<(![^>]*)>/)?.[1];
|
|
297
|
+
throw new YAMLParseError(line, tag ? `the tag ${JSON.stringify(tag)} on a mapping is not supported` : err.reason);
|
|
298
|
+
}
|
|
299
|
+
if (value === undefined || value === null)
|
|
300
|
+
return {};
|
|
301
|
+
if (typeof value !== "object") {
|
|
302
|
+
const line = text.split("\n").findIndex((l) => l.trim() !== "" && !l.trim().startsWith("#")) + 1;
|
|
303
|
+
throw new YAMLParseError(line, `expected a mapping or a sequence, found the scalar ${JSON.stringify(value)}`);
|
|
304
|
+
}
|
|
305
|
+
return /[&]/.test(text) ? unshareAliases(value) : value;
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Parse a YAML document (or JSON document) into a plain object.
|
|
309
|
+
*
|
|
310
|
+
* Tries `JSON.parse` first, then js-yaml (#3006). A top-level sequence reads
|
|
311
|
+
* as `{}`, since callers rely on getting a mapping back; use
|
|
312
|
+
* {@link parseYAMLDocument} for the list. Throws {@link YAMLParseError} with
|
|
313
|
+
* the line number on input it cannot read.
|
|
314
|
+
*/
|
|
315
|
+
export function parseYAML(content) {
|
|
316
|
+
try {
|
|
317
|
+
return JSON.parse(content);
|
|
318
|
+
}
|
|
319
|
+
catch {
|
|
320
|
+
// Fall through to YAML parsing
|
|
321
|
+
}
|
|
322
|
+
const value = loadDocument(content);
|
|
323
|
+
return Array.isArray(value) ? {} : value;
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Parse one YAML (or JSON) document whose top level may be a sequence
|
|
327
|
+
* (#2965). {@link parseYAML} returns `{}` for a file like `- a\n- b`; this
|
|
328
|
+
* returns the list.
|
|
329
|
+
*/
|
|
330
|
+
export function parseYAMLDocument(content) {
|
|
331
|
+
try {
|
|
332
|
+
return JSON.parse(content);
|
|
333
|
+
}
|
|
334
|
+
catch {
|
|
335
|
+
// Fall through to YAML parsing
|
|
336
|
+
}
|
|
337
|
+
return loadDocument(content);
|
|
338
|
+
}
|
|
339
|
+
/**
|
|
340
|
+
* Split a YAML stream into its documents (#2965). A line holding only `---`
|
|
341
|
+
* starts a document and a line holding only `...` ends one; either may carry
|
|
342
|
+
* a trailing `# comment`. Documents that are empty or hold only comments are
|
|
343
|
+
* dropped. The text of each document is returned unparsed, with `\r\n`
|
|
344
|
+
* normalized to `\n`.
|
|
345
|
+
*/
|
|
346
|
+
export function splitYAMLDocuments(content) {
|
|
347
|
+
const documents = [];
|
|
348
|
+
let current = [];
|
|
349
|
+
const flush = () => {
|
|
350
|
+
const text = current.join("\n");
|
|
351
|
+
if (text.replace(/#[^\n]*/g, "").trim() !== "")
|
|
352
|
+
documents.push(text);
|
|
353
|
+
current = [];
|
|
354
|
+
};
|
|
355
|
+
for (const line of content.replace(/\r\n?/g, "\n").split("\n")) {
|
|
356
|
+
if (DOCUMENT_MARKER.test(line))
|
|
357
|
+
flush();
|
|
358
|
+
else
|
|
359
|
+
current.push(line);
|
|
360
|
+
}
|
|
361
|
+
flush();
|
|
362
|
+
return documents;
|
|
363
|
+
}
|
|
364
|
+
/**
|
|
365
|
+
* Coerce a scalar string to a typed value.
|
|
366
|
+
*/
|
|
367
|
+
export function parseScalar(value) {
|
|
368
|
+
if (value === "" || value === "~" || value === "null")
|
|
369
|
+
return null;
|
|
370
|
+
if (value === "true" || value === "yes")
|
|
371
|
+
return true;
|
|
372
|
+
if (value === "false" || value === "no")
|
|
373
|
+
return false;
|
|
374
|
+
// Quoted scalars carry escapes, and stripping the quotes is only half the
|
|
375
|
+
// job: a double-quoted `\n` is a newline, a single-quoted `''` is one
|
|
376
|
+
// quote. Dropping that step leaves the escape sequence in the value as
|
|
377
|
+
// literal characters, which is how a multiline `setup_script` reached a
|
|
378
|
+
// shell as one line of `set -e\nsudo ...` (#1860).
|
|
379
|
+
if (value.length >= 2) {
|
|
380
|
+
if (value.startsWith('"') && value.endsWith('"')) {
|
|
381
|
+
const unescaped = unescapeDoubleQuoted(value.slice(1, -1));
|
|
382
|
+
// `null` means the body held a bare `"`, so this was never a single
|
|
383
|
+
// well-formed scalar (`"a" + "b"`). Keep the old behaviour there.
|
|
384
|
+
return unescaped ?? value.slice(1, -1);
|
|
385
|
+
}
|
|
386
|
+
if (value.startsWith("'") && value.endsWith("'")) {
|
|
387
|
+
return value.slice(1, -1).replace(/''/g, "'");
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// Number
|
|
391
|
+
const num = Number(value);
|
|
392
|
+
if (!isNaN(num) && value !== "")
|
|
393
|
+
return num;
|
|
394
|
+
return value;
|
|
395
|
+
}
|
|
396
|
+
/** YAML double-quoted escapes, per the spec's escape table. */
|
|
397
|
+
const DQ_ESCAPES = {
|
|
398
|
+
"0": "\0",
|
|
399
|
+
a: "\x07",
|
|
400
|
+
b: "\b",
|
|
401
|
+
t: "\t",
|
|
402
|
+
"\t": "\t",
|
|
403
|
+
n: "\n",
|
|
404
|
+
v: "\v",
|
|
405
|
+
f: "\f",
|
|
406
|
+
r: "\r",
|
|
407
|
+
e: "\x1b",
|
|
408
|
+
" ": " ",
|
|
409
|
+
'"': '"',
|
|
410
|
+
"/": "/",
|
|
411
|
+
"\\": "\\",
|
|
412
|
+
N: "\x85",
|
|
413
|
+
_: "\xa0",
|
|
414
|
+
L: "\u2028",
|
|
415
|
+
P: "\u2029",
|
|
416
|
+
};
|
|
417
|
+
/**
|
|
418
|
+
* Decode the body of a double-quoted YAML scalar.
|
|
419
|
+
*
|
|
420
|
+
* Returns `null` when the body holds an unescaped `"`, which means the caller
|
|
421
|
+
* was not looking at one quoted scalar after all.
|
|
422
|
+
*/
|
|
423
|
+
function unescapeDoubleQuoted(body) {
|
|
424
|
+
let out = "";
|
|
425
|
+
for (let i = 0; i < body.length; i++) {
|
|
426
|
+
const ch = body[i];
|
|
427
|
+
if (ch === '"')
|
|
428
|
+
return null;
|
|
429
|
+
if (ch !== "\\") {
|
|
430
|
+
out += ch;
|
|
431
|
+
continue;
|
|
432
|
+
}
|
|
433
|
+
const esc = body[++i];
|
|
434
|
+
if (esc === undefined)
|
|
435
|
+
return null;
|
|
436
|
+
// \xXX, \uXXXX, \UXXXXXXXX
|
|
437
|
+
const width = esc === "x" ? 2 : esc === "u" ? 4 : esc === "U" ? 8 : 0;
|
|
438
|
+
if (width > 0) {
|
|
439
|
+
const hex = body.slice(i + 1, i + 1 + width);
|
|
440
|
+
if (hex.length < width || !/^[0-9a-fA-F]+$/.test(hex))
|
|
441
|
+
return null;
|
|
442
|
+
out += String.fromCodePoint(parseInt(hex, 16));
|
|
443
|
+
i += width;
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
// An escaped line break is a line continuation: it and the following
|
|
447
|
+
// indentation fold away to nothing.
|
|
448
|
+
if (esc === "\n") {
|
|
449
|
+
while (body[i + 1] === " " || body[i + 1] === "\t")
|
|
450
|
+
i++;
|
|
451
|
+
continue;
|
|
452
|
+
}
|
|
453
|
+
const mapped = DQ_ESCAPES[esc];
|
|
454
|
+
if (mapped === undefined)
|
|
455
|
+
return null;
|
|
456
|
+
out += mapped;
|
|
457
|
+
}
|
|
458
|
+
return out;
|
|
459
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@intentius/chant",
|
|
3
|
-
"version": "0.124.
|
|
3
|
+
"version": "0.124.15",
|
|
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",
|
|
@@ -115,7 +115,7 @@
|
|
|
115
115
|
}
|
|
116
116
|
},
|
|
117
117
|
"scripts": {
|
|
118
|
-
"build": "../../scripts/tsc7.sh -p tsconfig.build.json && tsc-alias -p tsconfig.build.json &&
|
|
118
|
+
"build": "../../scripts/tsc7.sh -p tsconfig.build.json --sourceMap false && tsc-alias -p tsconfig.build.json && node scripts/copy-assets.mjs",
|
|
119
119
|
"prepack": "npm run build"
|
|
120
120
|
},
|
|
121
121
|
"dependencies": {
|
package/src/build.ts
CHANGED
|
@@ -232,6 +232,13 @@ export interface BuildOptions {
|
|
|
232
232
|
*/
|
|
233
233
|
lexicons?: readonly string[];
|
|
234
234
|
|
|
235
|
+
/**
|
|
236
|
+
* chant#3612 — host package specifiers to follow a bare import into. Passed
|
|
237
|
+
* straight through to {@link DiscoveryOptions.lexiconPackages}; ignored
|
|
238
|
+
* unless {@link fold} is set. Never needed for a chant project.
|
|
239
|
+
*/
|
|
240
|
+
lexiconPackages?: readonly string[];
|
|
241
|
+
|
|
235
242
|
/**
|
|
236
243
|
* chant #1442 — lexicon name → the version of the plugin that served it.
|
|
237
244
|
* Recorded on {@link BuildResult.lexiconVersions} so a build digest can say
|
|
@@ -723,6 +730,7 @@ export async function build(
|
|
|
723
730
|
fold: options?.fold,
|
|
724
731
|
intrinsics: options?.intrinsics,
|
|
725
732
|
lexicons: options?.lexicons,
|
|
733
|
+
lexiconPackages: options?.lexiconPackages,
|
|
726
734
|
sandbox: options?.sandbox,
|
|
727
735
|
executing: options?.executing,
|
|
728
736
|
buildParams: options?.buildParams,
|
package/src/change-set.test.ts
CHANGED
|
@@ -23,11 +23,13 @@ import { readdirSync, readFileSync, writeFileSync } from "node:fs";
|
|
|
23
23
|
import { join } from "node:path";
|
|
24
24
|
import { describe, expect, test } from "vitest";
|
|
25
25
|
import {
|
|
26
|
+
CHANGE_SET_PLANNERS,
|
|
26
27
|
CHANGE_SET_SCHEMA_ID,
|
|
27
28
|
changeSetDigest,
|
|
28
29
|
changeSetDocumentDigest,
|
|
29
30
|
composeChangeSet,
|
|
30
31
|
lifecyclePlanPart,
|
|
32
|
+
readChangeSetPartFile,
|
|
31
33
|
reconcilePlanPart,
|
|
32
34
|
verifyChangeSetDigest,
|
|
33
35
|
type ChangeSetPart,
|
|
@@ -243,3 +245,49 @@ describe("the digest", () => {
|
|
|
243
245
|
expect(doc.summary.replacements.map((d) => `${d.member}:${d.address}`)).toEqual(["estate:terraform_data.worker"]);
|
|
244
246
|
});
|
|
245
247
|
});
|
|
248
|
+
|
|
249
|
+
describe("readChangeSetPartFile (#3767)", () => {
|
|
250
|
+
/** A part as the sql lexicon's adapter writes it; `lexicons/sql/src/change-set.test.ts` pins the adapter itself. */
|
|
251
|
+
const sqlPart = (): ChangeSetPart => ({
|
|
252
|
+
member: { member: "written-as", lexicon: "sql", planner: "sql", scope: "prod", status: "planned", planDigest: computePlanDigest("sql-versioned-plan", { id: "0002" }), holes: [] },
|
|
253
|
+
entries: [
|
|
254
|
+
{ member: "written-as", lexicon: "sql", planner: "sql", address: "analytics.events", type: "ClickHouse::Table", action: "update", disruption: "rolling", scope: "prod", attributes: [{ path: "sql", after: ["ALTER TABLE analytics.events ADD COLUMN region String"] }] },
|
|
255
|
+
],
|
|
256
|
+
});
|
|
257
|
+
|
|
258
|
+
test("the schema lists every planner, sql included", () => {
|
|
259
|
+
const planners = (schema as { $defs: { member: { properties: { planner: { enum: string[] } } }; entry: { properties: { planner: { enum: string[] } } } } }).$defs;
|
|
260
|
+
expect(planners.member.properties.planner.enum).toEqual([...CHANGE_SET_PLANNERS]);
|
|
261
|
+
expect(planners.entry.properties.planner.enum).toEqual([...CHANGE_SET_PLANNERS]);
|
|
262
|
+
});
|
|
263
|
+
|
|
264
|
+
test("reads a written part back as the run's member, through JSON, and composes it", () => {
|
|
265
|
+
const part = readChangeSetPartFile(JSON.parse(JSON.stringify(sqlPart())), "sql", "warehouse");
|
|
266
|
+
expect(part.member.member).toBe("warehouse");
|
|
267
|
+
expect(part.entries.map((e) => e.member)).toEqual(["warehouse"]);
|
|
268
|
+
expect(part.member.planDigest).toBe(sqlPart().member.planDigest);
|
|
269
|
+
expect(readChangeSetPartFile(sqlPart(), "sql", "warehouse", "clickhouse").entries[0].lexicon).toBe("clickhouse");
|
|
270
|
+
const doc = composeChangeSet([part, reconcilePlanPart({ member: "warden", plan: wardenPlan() })]);
|
|
271
|
+
expectValid(doc);
|
|
272
|
+
expect(doc.summary.byMember.warehouse).toEqual({ update: 1 });
|
|
273
|
+
// The name the run gives it is what the set digest pairs with the writer's plan digest.
|
|
274
|
+
expect(composeChangeSet([readChangeSetPartFile(sqlPart(), "sql", "other")]).digest).not.toBe(composeChangeSet([part]).digest);
|
|
275
|
+
});
|
|
276
|
+
|
|
277
|
+
test("refuses what is not a part of that planner", () => {
|
|
278
|
+
const p = sqlPart();
|
|
279
|
+
expect(() => readChangeSetPartFile([], "sql", "w")).toThrow(/not a change-set part/);
|
|
280
|
+
expect(() => readChangeSetPartFile({ ...p, member: { ...p.member, planner: "chant" } }, "sql", "w")).toThrow(/names planner chant, not sql/);
|
|
281
|
+
expect(() => readChangeSetPartFile({ ...p, member: { ...p.member, planDigest: null } }, "sql", "w")).toThrow(/planned but has no planDigest/);
|
|
282
|
+
expect(() => readChangeSetPartFile({ ...p, member: { ...p.member, holes: undefined } }, "sql", "w")).toThrow(/no holes array/);
|
|
283
|
+
expect(() => readChangeSetPartFile({ ...p, entries: [{ ...p.entries[0], planner: "terraform" }] }, "sql", "w")).toThrow(/entries\[0\] names planner terraform/);
|
|
284
|
+
expect(() => readChangeSetPartFile({ ...p, entries: [{ ...p.entries[0], action: "upsert" }] }, "sql", "w")).toThrow(/entries\[0\] has action upsert/);
|
|
285
|
+
expect(() => readChangeSetPartFile({ ...p, entries: [{ address: "x" }] }, "sql", "w")).toThrow(/entries\[0\] needs address/);
|
|
286
|
+
});
|
|
287
|
+
|
|
288
|
+
test("a failed member keeps a null digest", () => {
|
|
289
|
+
const p = sqlPart();
|
|
290
|
+
const failed = readChangeSetPartFile({ ...p, member: { ...p.member, status: "failed", error: "out of order", planDigest: null } }, "sql", "w");
|
|
291
|
+
expect(failed.member).toMatchObject({ status: "failed", error: "out of order", planDigest: null });
|
|
292
|
+
});
|
|
293
|
+
});
|
package/src/change-set.ts
CHANGED
|
@@ -11,7 +11,9 @@
|
|
|
11
11
|
* Each planner reaches it through an adapter that returns a
|
|
12
12
|
* {@link ChangeSetPart}: one member and its entries. The lifecycle and
|
|
13
13
|
* reconcile adapters are here; the terraform-family ones live in the
|
|
14
|
-
* terraform lexicon's `change-set` subpath
|
|
14
|
+
* terraform lexicon's `change-set` subpath and the SQL ones in the sql
|
|
15
|
+
* lexicon's. A part another process wrote to a file reads back through
|
|
16
|
+
* {@link readChangeSetPartFile}. {@link composeChangeSet} joins
|
|
15
17
|
* the parts.
|
|
16
18
|
*
|
|
17
19
|
* ## The digest
|
|
@@ -60,7 +62,15 @@ export const CHANGE_SET_ACTIONS: readonly ChangeSetAction[] = ["create", "update
|
|
|
60
62
|
export type ChangeSetDisruption = "in-place" | "rolling" | "replace" | "destroy" | "unknown";
|
|
61
63
|
|
|
62
64
|
/** Which tool produced a member's plan. */
|
|
63
|
-
|
|
65
|
+
/**
|
|
66
|
+
* Which tool produced a member's plan. `sql` is a SQL schema change: a
|
|
67
|
+
* versioned plan (a product's migrations) or one of the sql lexicon's
|
|
68
|
+
* migration Ops' plans, through `@intentius/chant-lexicon-sql/change-set`.
|
|
69
|
+
*/
|
|
70
|
+
export type ChangeSetPlanner = "terraform" | "tofu" | "choudoufu" | "chant" | "warden" | "sql";
|
|
71
|
+
|
|
72
|
+
/** Every planner, in the order the schema lists them. */
|
|
73
|
+
export const CHANGE_SET_PLANNERS: readonly ChangeSetPlanner[] = ["terraform", "tofu", "choudoufu", "chant", "warden", "sql"];
|
|
64
74
|
|
|
65
75
|
/** One attribute a change writes, at top-level granularity. */
|
|
66
76
|
export interface ChangeSetAttribute {
|
|
@@ -482,3 +492,43 @@ export function reconcilePlanPart(input: ReconcilePlanPartInput): ChangeSetPart
|
|
|
482
492
|
entries,
|
|
483
493
|
};
|
|
484
494
|
}
|
|
495
|
+
|
|
496
|
+
// ── a part written to a file ───────────────────────────────────────────────────
|
|
497
|
+
|
|
498
|
+
const isRecord = (v: unknown): v is Record<string, unknown> => typeof v === "object" && v !== null && !Array.isArray(v);
|
|
499
|
+
|
|
500
|
+
/**
|
|
501
|
+
* A part an adapter in another process wrote as JSON, read back as `member`'s
|
|
502
|
+
* part. The `sql` planner's plans arrive this way: the sql lexicon's
|
|
503
|
+
* `change-set` adapters, or a product that fills them, write the part, and
|
|
504
|
+
* `readChangeSetPart` with `planner: "sql"` reads it.
|
|
505
|
+
*
|
|
506
|
+
* The part must name `planner` on its member and on every entry, and say
|
|
507
|
+
* `status`, `planDigest` and `holes`. Its member and entries are renamed to
|
|
508
|
+
* `member`, so the file need not know the name the run gives it; a `lexicon`
|
|
509
|
+
* given here replaces the part's. Nothing is recomputed: the plan digest is
|
|
510
|
+
* the one the writer took, over a plan this process never sees.
|
|
511
|
+
*/
|
|
512
|
+
export function readChangeSetPartFile(part: unknown, planner: ChangeSetPlanner, member: string, lexicon?: string): ChangeSetPart {
|
|
513
|
+
const where = `the ${planner} part for ${member}`;
|
|
514
|
+
if (!isRecord(part) || !isRecord(part.member) || !Array.isArray(part.entries)) throw new Error(`${where} is not a change-set part: it needs member and entries`);
|
|
515
|
+
const m = part.member;
|
|
516
|
+
if (m.planner !== planner) throw new Error(`${where} names planner ${String(m.planner)}, not ${planner}`);
|
|
517
|
+
if (m.status !== "planned" && m.status !== "failed") throw new Error(`${where} has no status`);
|
|
518
|
+
if (m.planDigest !== null && typeof m.planDigest !== "string") throw new Error(`${where} has no planDigest`);
|
|
519
|
+
if (m.status === "planned" && m.planDigest === null) throw new Error(`${where} planned but has no planDigest`);
|
|
520
|
+
if (!Array.isArray(m.holes)) throw new Error(`${where} has no holes array`);
|
|
521
|
+
const entries = part.entries.map((e, i) => {
|
|
522
|
+
if (!isRecord(e) || typeof e.address !== "string" || typeof e.type !== "string" || typeof e.action !== "string" || !Array.isArray(e.attributes)) {
|
|
523
|
+
throw new Error(`${where}: entries[${i}] needs address, type, action and attributes`);
|
|
524
|
+
}
|
|
525
|
+
if (!(CHANGE_SET_ACTIONS as readonly string[]).includes(e.action)) throw new Error(`${where}: entries[${i}] has action ${e.action}`);
|
|
526
|
+
if (e.planner !== planner) throw new Error(`${where}: entries[${i}] names planner ${String(e.planner)}, not ${planner}`);
|
|
527
|
+
return { ...(e as unknown as ChangeSetEntry), member, ...(lexicon !== undefined ? { lexicon } : {}) };
|
|
528
|
+
});
|
|
529
|
+
return {
|
|
530
|
+
member: { ...(m as unknown as ChangeSetMember), member, ...(lexicon !== undefined ? { lexicon } : {}) },
|
|
531
|
+
entries,
|
|
532
|
+
...(Array.isArray(part.sideEffects) ? { sideEffects: part.sideEffects as ChangeSetPart["sideEffects"] } : {}),
|
|
533
|
+
};
|
|
534
|
+
}
|