@intentius/chant 0.124.13 → 0.124.14
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.js +668 -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.js +312 -0
- package/dist/child-project.js +21 -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.js +134 -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.js +305 -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.js +208 -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 +4178 -0
- package/dist/discovery/fold-rank.js +292 -0
- package/dist/discovery/graph.js +115 -0
- package/dist/discovery/import.d.ts.map +1 -1
- package/dist/discovery/import.js +65 -0
- 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.js +260 -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.js +341 -0
- package/dist/lifecycle/gate-ledger-select.js +89 -0
- package/dist/lifecycle/gate-ledger.js +193 -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.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.js +64 -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.js +997 -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.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.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.js +103 -0
- package/dist/workspace/__fixtures__/decide-workspace.js +112 -0
- 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 +460 -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.js +199 -0
- package/dist/workspace/ci-green.js +325 -0
- package/dist/workspace/ci-last-green.schema.json +158 -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.js +587 -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.js +245 -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/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/sandbox/driver.ts +3 -1
- package/src/config-import.ts +3 -0
- package/src/discovery/fold-import.ts +23 -14
- package/src/discovery/import.ts +2 -0
- package/src/discovery/sandbox/driver.ts +3 -1
- package/src/lexicon-module.ts +3 -0
- 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/discover.ts +3 -0
- package/src/ts-loader.test.ts +23 -0
- package/src/ts-loader.ts +122 -0
- package/src/workspace/chant-migrations/chud-lexicon-exit.ts +1 -1
- package/src/workspace/declaration.ts +1 -1
- package/src/workspace/kinds.ts +1 -1
- package/src/workspace/lineage-migrations.ts +2 -0
- package/src/workspace/points.ts +1 -1
- package/src/workspace/principal-classes.ts +1 -1
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marker symbol for Declarable type identification
|
|
3
|
+
*/
|
|
4
|
+
export const DECLARABLE_MARKER = Symbol.for("chant.declarable");
|
|
5
|
+
/**
|
|
6
|
+
* Type guard for `ResourceDeclarable` — replaces the ad-hoc `"props" in x`
|
|
7
|
+
* checks that were previously repeated (with an `as unknown as` cast) at every
|
|
8
|
+
* call site that reads `props`/`attributes` off a `Declarable`.
|
|
9
|
+
*/
|
|
10
|
+
export function isResourceDeclarable(value) {
|
|
11
|
+
return "props" in value;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* The suffix a declarable marker's symbol description ends with.
|
|
15
|
+
*
|
|
16
|
+
* chant#2444 — what makes a marker mean "entity" rather than "some other kind
|
|
17
|
+
* of chant value". `Symbol.for("chant.declarable")` has it; so does the
|
|
18
|
+
* specification host's `Symbol.for("tsad.conformance.declarable")`.
|
|
19
|
+
*/
|
|
20
|
+
const DECLARABLE_MARKER_SUFFIX = ".declarable";
|
|
21
|
+
/**
|
|
22
|
+
* Type guard to check if a value is a Declarable.
|
|
23
|
+
*
|
|
24
|
+
* chant#2444 — accepts an entity a HOST built, not only one chant built.
|
|
25
|
+
*
|
|
26
|
+
* `F-Host-Interface` item 1 says an entity carries a non-enumerable declarable
|
|
27
|
+
* marker, and a host supplies its own: the specification's conformance host
|
|
28
|
+
* marks with `Symbol.for("tsad.conformance.declarable")`. Testing identity
|
|
29
|
+
* against chant's symbol alone refused those for not being chant's rather than
|
|
30
|
+
* for being malformed, which is what chant#2442 hit inside composite member
|
|
31
|
+
* validation and what would otherwise keep biting in the entity tallies and the
|
|
32
|
+
* revival pass-through.
|
|
33
|
+
*
|
|
34
|
+
* ## Why NOT the reference implementation's reading
|
|
35
|
+
*
|
|
36
|
+
* The reference reads L6.1 as "any own symbol or non-enumerable own property",
|
|
37
|
+
* which is right in its domain and **unsafe in chant's**. Two measurements say
|
|
38
|
+
* so, and both were taken rather than assumed:
|
|
39
|
+
*
|
|
40
|
+
* - A real chant entity's non-enumerable own NAMES are `lexicon`,
|
|
41
|
+
* `entityType`, `kind`, `props`, `attributes`, `Ref`. "Any non-enumerable
|
|
42
|
+
* own property" is therefore close to "any chant object at all".
|
|
43
|
+
* - chant has SEVEN marker symbols, not one — `chant.intrinsic`,
|
|
44
|
+
* `chant.composite`, `chant.stackOutput`, `chant.lexiconOutput`,
|
|
45
|
+
* `chant.effect-receipt`, `chant.secret-declaration`, `chant.childProject`
|
|
46
|
+
* — each a non-enumerable own symbol set to `true`. Under "any own symbol"
|
|
47
|
+
* an Intrinsic and a StackOutput both classify as Declarable, which is a
|
|
48
|
+
* worse bug than the one being fixed: they would enter the entity tallies.
|
|
49
|
+
*
|
|
50
|
+
* The reference can read any symbol because its domain has one. chant
|
|
51
|
+
* distinguishes seven kinds BY symbol identity, so it needs the marker's name.
|
|
52
|
+
* Hence the suffix: the marker must say `declarable`, whoever owns it.
|
|
53
|
+
*
|
|
54
|
+
* ## What the suffix cannot do
|
|
55
|
+
*
|
|
56
|
+
* It is a convention, not a registry. A host that marks with, say,
|
|
57
|
+
* `Symbol.for("acme.entity")` carries a perfectly good non-enumerable marker
|
|
58
|
+
* and is refused here, because nothing in this function knows that package is
|
|
59
|
+
* one the caller named. The context that would settle it —
|
|
60
|
+
* `FoldProjectOptions.lexiconPackages`, chant#2438 — lives in the fold path and
|
|
61
|
+
* does not reach a type guard called from a dozen places.
|
|
62
|
+
*
|
|
63
|
+
* That is a deliberate trade, not an oversight: a convention that refuses an
|
|
64
|
+
* unknown-but-valid marker costs a host one symbol name, while a rule loose
|
|
65
|
+
* enough to accept any marker miscounts chant's own seven kinds on every build.
|
|
66
|
+
* If a real host ever needs the other side of it, the fix is to thread the
|
|
67
|
+
* named packages through rather than to widen the test.
|
|
68
|
+
*/
|
|
69
|
+
export function isDeclarable(value) {
|
|
70
|
+
if (typeof value !== "object" || value === null)
|
|
71
|
+
return false;
|
|
72
|
+
// chant's own, which is every entity a chant build makes.
|
|
73
|
+
if (value[DECLARABLE_MARKER] === true)
|
|
74
|
+
return true;
|
|
75
|
+
return carriesForeignDeclarableMarker(value);
|
|
76
|
+
}
|
|
77
|
+
/** A declarable marker some other implementation owns — see {@link isDeclarable}. */
|
|
78
|
+
function carriesForeignDeclarableMarker(value) {
|
|
79
|
+
for (const marker of Object.getOwnPropertySymbols(value)) {
|
|
80
|
+
const descriptor = Object.getOwnPropertyDescriptor(value, marker);
|
|
81
|
+
// Non-enumerable and `true`, per F-Host-Interface item 1. An enumerable
|
|
82
|
+
// symbol would travel through a spread and reach an artifact, which a
|
|
83
|
+
// marker must not.
|
|
84
|
+
if (descriptor === undefined || descriptor.enumerable || descriptor.value !== true)
|
|
85
|
+
continue;
|
|
86
|
+
if (marker.description?.endsWith(DECLARABLE_MARKER_SUFFIX) === true)
|
|
87
|
+
return true;
|
|
88
|
+
}
|
|
89
|
+
return false;
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Type guard to check if a Declarable is a property-level type
|
|
93
|
+
*/
|
|
94
|
+
export function isPropertyDeclarable(value) {
|
|
95
|
+
return value.kind === "property";
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* A declarable with a live counterpart of its own: what the live paths
|
|
99
|
+
* (`describeResources`, `observeResourcesDeep`, the snapshot, the diff and the
|
|
100
|
+
* change set) put in front of a lexicon's reader.
|
|
101
|
+
*
|
|
102
|
+
* Outputs, parameters and serializer directives carry no `props` and are
|
|
103
|
+
* already left out by {@link isResourceDeclarable}. A property-kind declarable
|
|
104
|
+
* (`createProperty`: Grafana's panels, an aws `SecurityGroup_Ingress`) does
|
|
105
|
+
* carry `props`, but it exists only inside the resource that holds it, and the
|
|
106
|
+
* deep diff already compares it as part of that resource's tree (#1314).
|
|
107
|
+
* Asking a reader about one on its own makes the answer either "absent", so
|
|
108
|
+
* `lifecycle plan` proposes a `create`, or "not observed", a hole for
|
|
109
|
+
* something read in full (#3001). This is the same test `graph-ir.ts` uses to
|
|
110
|
+
* keep property-kind declarables off the graph's nodes.
|
|
111
|
+
*/
|
|
112
|
+
export function isObservableDeclarable(value) {
|
|
113
|
+
return isResourceDeclarable(value) && !isPropertyDeclarable(value);
|
|
114
|
+
}
|
|
@@ -0,0 +1,437 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The deep observation contract (#1014) — what a lexicon's
|
|
3
|
+
* `observeResourcesDeep()` is allowed to mean, and how a live property tree is
|
|
4
|
+
* normalized before anything diffs it.
|
|
5
|
+
*
|
|
6
|
+
* `describeResources()` (./observation.ts) answers *whether* a declared entity
|
|
7
|
+
* exists and carries a handful of scrubbed outputs. That is thin by design, and
|
|
8
|
+
* it is why `lifecycle diff --live` only fires on a changed status, a replaced
|
|
9
|
+
* physical id, or a changed stack output. The drift people actually care about
|
|
10
|
+
* — a hand-edited security-group rule, an inline policy added in the console, a
|
|
11
|
+
* flipped bucket setting — lives one level down, in properties nobody was
|
|
12
|
+
* reading.
|
|
13
|
+
*
|
|
14
|
+
* This module adds the second, optional read: a normalized live property tree
|
|
15
|
+
* per declared entity. It composes with the tri-state contract rather than
|
|
16
|
+
* replacing it — {@link DeepObservationResult} carries the same
|
|
17
|
+
* {@link UnobservedEntity} map, so a deep read that fails for one entity is
|
|
18
|
+
* NOT-OBSERVED with a reason. A thin deep result is never allowed to pass for a
|
|
19
|
+
* clean one.
|
|
20
|
+
*
|
|
21
|
+
* ## The hard half is noise, not reading
|
|
22
|
+
*
|
|
23
|
+
* A raw live model is mostly fields nobody declared and nobody changed: arns,
|
|
24
|
+
* timestamps, generation counters, status subtrees, values the API filled in,
|
|
25
|
+
* fields a controller owns, and orderings that carry no meaning (tag order,
|
|
26
|
+
* policy statement order). Diffing that raw is all noise. So the contract is
|
|
27
|
+
* three parts, and a lexicon implements the last two:
|
|
28
|
+
*
|
|
29
|
+
* 1. **The normalization pass** (here, shared) — canonical key order,
|
|
30
|
+
* hook-driven array order, secret masking, non-JSON values collapsed to
|
|
31
|
+
* {@link UNRESOLVED}.
|
|
32
|
+
* 2. **The pruning hook** ({@link DeepNormalizationHooks.prune}) — the
|
|
33
|
+
* lexicon names its own read-only / server-populated / controller-managed /
|
|
34
|
+
* provider-defaulted fields.
|
|
35
|
+
* 3. **The ordering hook** ({@link DeepNormalizationHooks.orderKey}) — the
|
|
36
|
+
* lexicon names which arrays are sets, and by what key they canonicalize.
|
|
37
|
+
*
|
|
38
|
+
* Both hooks are applied to the *declared* tree and the *live* tree with the
|
|
39
|
+
* same rules, so the two sides are compared in the same shape. A hook sees
|
|
40
|
+
* which side it is normalizing ({@link DeepNode.side}) and whether the same path
|
|
41
|
+
* exists on the other side ({@link DeepNode.counterpart}) — that second flag is
|
|
42
|
+
* what makes default subtraction expressible: a provider default is only noise
|
|
43
|
+
* when nobody declared the property.
|
|
44
|
+
*/
|
|
45
|
+
import { isHeldElsewhere, isNormalizedHeldElsewhere, normalizeHeldElsewhere } from "./held-elsewhere.js";
|
|
46
|
+
/** True when `value` is the versioned {@link DeepObservationResult} envelope. */
|
|
47
|
+
export function isDeepObservationResult(value) {
|
|
48
|
+
return (typeof value === "object" &&
|
|
49
|
+
value !== null &&
|
|
50
|
+
value.deepObservation === "v1");
|
|
51
|
+
}
|
|
52
|
+
/** Build a {@link DeepObservationResult}. Lexicons use this rather than writing the discriminant by hand. */
|
|
53
|
+
export function deepObservation(resources, unobserved, pending) {
|
|
54
|
+
return {
|
|
55
|
+
deepObservation: "v1",
|
|
56
|
+
resources,
|
|
57
|
+
...(unobserved && Object.keys(unobserved).length > 0 ? { unobserved } : {}),
|
|
58
|
+
...(pending && pending.length > 0 ? { pending } : {}),
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Normalize a deep result. `undefined` (a lexicon that returned nothing at all)
|
|
63
|
+
* normalizes to two empty maps — which reads as "every declared entity's
|
|
64
|
+
* properties were read and there were none", so a reader that means "I could
|
|
65
|
+
* not look" must say so with `unobservedAll()` rather than returning nothing.
|
|
66
|
+
*/
|
|
67
|
+
export function normalizeDeepObservation(value) {
|
|
68
|
+
if (!value)
|
|
69
|
+
return { resources: {}, unobserved: {} };
|
|
70
|
+
return {
|
|
71
|
+
resources: value.resources ?? {},
|
|
72
|
+
unobserved: value.unobserved ?? {},
|
|
73
|
+
...(value.pending && value.pending.length > 0 ? { pending: value.pending } : {}),
|
|
74
|
+
};
|
|
75
|
+
}
|
|
76
|
+
// ── Normalization pass ──────────────────────────────────────────────────────
|
|
77
|
+
/**
|
|
78
|
+
* The placeholder a value takes when it is not JSON data — a class instance
|
|
79
|
+
* (an unevaluated intrinsic like `Sub`/`Ref` in a declared tree), a function, a
|
|
80
|
+
* symbol. The diff skips any path whose *declared* value is this: chant cannot
|
|
81
|
+
* know what `Fn::Sub` resolves to without deploying, and guessing would report
|
|
82
|
+
* every interpolated property as permanent drift.
|
|
83
|
+
*/
|
|
84
|
+
export const UNRESOLVED = "<chant:unresolved>";
|
|
85
|
+
/** Value a masked (secret-bearing) property takes. Matches the thin path's convention. */
|
|
86
|
+
export const MASKED = "[REDACTED]";
|
|
87
|
+
/**
|
|
88
|
+
* Property-name patterns that mark a value secret-bearing. Deliberately narrow
|
|
89
|
+
* and key-name based: broadening this to e.g. `/key/i` would mask an AWS tag's
|
|
90
|
+
* `Key` field and every `*KeyName` reference, which is how masking turns into
|
|
91
|
+
* its own drift signal.
|
|
92
|
+
*
|
|
93
|
+
* Shared with the thin snapshot path (`./lifecycle/snapshot.ts`), which warns
|
|
94
|
+
* on the same names — one list, so the two paths cannot disagree about what
|
|
95
|
+
* counts as a secret.
|
|
96
|
+
*/
|
|
97
|
+
export const SENSITIVE_KEY_PATTERNS = [
|
|
98
|
+
/password/i,
|
|
99
|
+
/secret/i,
|
|
100
|
+
/token/i,
|
|
101
|
+
/private.?key/i,
|
|
102
|
+
/credential/i,
|
|
103
|
+
/connection.?string/i,
|
|
104
|
+
];
|
|
105
|
+
/** True when a property name looks secret-bearing (see {@link SENSITIVE_KEY_PATTERNS}). */
|
|
106
|
+
export function isSensitiveKey(key) {
|
|
107
|
+
return SENSITIVE_KEY_PATTERNS.some((p) => p.test(key));
|
|
108
|
+
}
|
|
109
|
+
/** True for a value the pass will walk into rather than treat as a leaf. */
|
|
110
|
+
function isPlainObject(value) {
|
|
111
|
+
if (typeof value !== "object" || value === null || Array.isArray(value))
|
|
112
|
+
return false;
|
|
113
|
+
const proto = Object.getPrototypeOf(value);
|
|
114
|
+
return proto === Object.prototype || proto === null;
|
|
115
|
+
}
|
|
116
|
+
/** True for a value that can be compared and serialized as-is. */
|
|
117
|
+
function isJsonPrimitive(value) {
|
|
118
|
+
return (value === null ||
|
|
119
|
+
typeof value === "string" ||
|
|
120
|
+
typeof value === "number" ||
|
|
121
|
+
typeof value === "boolean");
|
|
122
|
+
}
|
|
123
|
+
function joinPath(parent, key) {
|
|
124
|
+
return parent ? `${parent}.${key}` : key;
|
|
125
|
+
}
|
|
126
|
+
function joinIndex(parent, index) {
|
|
127
|
+
return `${parent}[${index}]`;
|
|
128
|
+
}
|
|
129
|
+
function joinPattern(parent) {
|
|
130
|
+
return `${parent}[]`;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Every path in a raw tree — both the exact form (`Tags[0].Value`) and the
|
|
134
|
+
* index-erased pattern (`Tags[].Value`) — for {@link
|
|
135
|
+
* NormalizeDeepOptions.counterpartPaths}. The two forms never collide (`[]` vs
|
|
136
|
+
* `[0]`), so one set answers both questions.
|
|
137
|
+
*
|
|
138
|
+
* Computed on the *raw* tree, before pruning: whether a property was declared
|
|
139
|
+
* cannot depend on whether the pruning rules kept it.
|
|
140
|
+
*/
|
|
141
|
+
export function deepPathSet(tree) {
|
|
142
|
+
const out = new Set();
|
|
143
|
+
const walk = (value, path, pattern) => {
|
|
144
|
+
if (path) {
|
|
145
|
+
out.add(path);
|
|
146
|
+
out.add(pattern);
|
|
147
|
+
}
|
|
148
|
+
// A held marker (#2162) is one declared value, not a `{ by, reason }`
|
|
149
|
+
// object to walk into — same leaf treatment `normalizeDeepProperties`
|
|
150
|
+
// gives it, so this path set agrees with what the normalized tree
|
|
151
|
+
// actually looks like a path down.
|
|
152
|
+
if (isHeldElsewhere(value))
|
|
153
|
+
return;
|
|
154
|
+
// A property-kind declarable is walked as its props, exactly as
|
|
155
|
+
// `normalizeDeepProperties` inlines it (#1314). Stopping at it left every
|
|
156
|
+
// path under a typed nested property out of the set, so the other tree's
|
|
157
|
+
// nodes there read `counterpart: "absent"` and default subtraction fired
|
|
158
|
+
// on properties the author did declare.
|
|
159
|
+
if (isPropertyDeclarableValue(value)) {
|
|
160
|
+
walk(value.props ?? {}, path, pattern);
|
|
161
|
+
return;
|
|
162
|
+
}
|
|
163
|
+
if (Array.isArray(value)) {
|
|
164
|
+
value.forEach((el, i) => walk(el, joinIndex(path, i), joinPattern(pattern)));
|
|
165
|
+
return;
|
|
166
|
+
}
|
|
167
|
+
if (isPlainObject(value)) {
|
|
168
|
+
for (const [k, v] of Object.entries(value))
|
|
169
|
+
walk(v, joinPath(path, k), joinPath(pattern, k));
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
walk(tree, "", "");
|
|
173
|
+
return out;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* Normalize one property tree: prune by hook, mask secret-bearing leaves,
|
|
177
|
+
* canonicalize key order, canonicalize array order where the hook knows how,
|
|
178
|
+
* and collapse anything that isn't JSON data to {@link UNRESOLVED}.
|
|
179
|
+
*
|
|
180
|
+
* Pure and total. Key order is canonicalized unconditionally because JSON
|
|
181
|
+
* object order is not semantic and a provider is free to return it differently
|
|
182
|
+
* on every read; array order is canonicalized only where the lexicon says the
|
|
183
|
+
* array is a set, because list order often *is* semantic.
|
|
184
|
+
*/
|
|
185
|
+
/**
|
|
186
|
+
* A container whose every member the rules pruned.
|
|
187
|
+
*
|
|
188
|
+
* The distinction it carries is between a value that was empty in the source
|
|
189
|
+
* and one this pass emptied: `{}` a lexicon actually declared is a fact worth
|
|
190
|
+
* diffing, while `{}` left behind after both of a rule's fields were subtracted
|
|
191
|
+
* as provider defaults is a husk. Reporting the husk turns a suppressed default
|
|
192
|
+
* into `SecurityGroupEgress[#{}]: <undeclared> → {}` — noise wearing the shape
|
|
193
|
+
* of drift, which is the one thing the noise rules exist to prevent.
|
|
194
|
+
*
|
|
195
|
+
* Module-private: it never leaves this function's recursion.
|
|
196
|
+
*/
|
|
197
|
+
const EMPTIED = Symbol("emptied-by-pruning");
|
|
198
|
+
/**
|
|
199
|
+
* A property-kind Declarable — a nested property authored through a lexicon's
|
|
200
|
+
* generated constructor rather than as a plain object (#1314).
|
|
201
|
+
*
|
|
202
|
+
* Duck-typed on the same three facts `declarable.ts` defines it by
|
|
203
|
+
* (`entityType`, `kind === "property"`, `props`) rather than imported, keeping
|
|
204
|
+
* this module free of a dependency on the authoring types it only ever
|
|
205
|
+
* inspects. A resource-kind Declarable deliberately does not match.
|
|
206
|
+
*/
|
|
207
|
+
function isPropertyDeclarableValue(value) {
|
|
208
|
+
if (typeof value !== "object" || value === null)
|
|
209
|
+
return false;
|
|
210
|
+
const v = value;
|
|
211
|
+
return typeof v.entityType === "string" && v.kind === "property" && typeof v.props === "object" && v.props !== null;
|
|
212
|
+
}
|
|
213
|
+
export function normalizeDeepProperties(tree, options) {
|
|
214
|
+
const { entityType, side, hooks, counterpartPaths } = options;
|
|
215
|
+
const nodeOf = (path, pattern, key, value) => ({
|
|
216
|
+
entityType,
|
|
217
|
+
path,
|
|
218
|
+
pattern,
|
|
219
|
+
key,
|
|
220
|
+
value,
|
|
221
|
+
side,
|
|
222
|
+
counterpart: !counterpartPaths
|
|
223
|
+
? "unknown"
|
|
224
|
+
: counterpartPaths.has(path) || counterpartPaths.has(pattern)
|
|
225
|
+
? "present"
|
|
226
|
+
: "absent",
|
|
227
|
+
});
|
|
228
|
+
const prune = (path, pattern, key, value) => {
|
|
229
|
+
if (!hooks?.prune)
|
|
230
|
+
return false;
|
|
231
|
+
return hooks.prune(nodeOf(path, pattern, key, value));
|
|
232
|
+
};
|
|
233
|
+
const normalizeValue = (value, path, pattern, key) => {
|
|
234
|
+
// A `heldElsewhere()` marker (#2162) — declared on purpose, not
|
|
235
|
+
// unresolved and not a plain object to walk into. Checked ahead of even
|
|
236
|
+
// the secret-masking rules below: the marker carries no value at all,
|
|
237
|
+
// only who holds the field and why, so there is nothing for masking to
|
|
238
|
+
// protect and masking it would destroy the one thing worth reporting —
|
|
239
|
+
// a `heldElsewhere()` on a `password`-shaped key ("an operator rotates
|
|
240
|
+
// this out of band") must still say so, not collapse to `[REDACTED]`.
|
|
241
|
+
// Normalized to a JSON-safe tagged leaf so its identity survives this
|
|
242
|
+
// pass and a `--json` round-trip; `deep-diff.ts` reads the tag to
|
|
243
|
+
// report a live difference here as held rather than as drift, on
|
|
244
|
+
// either side (a lexicon's own reader never produces this shape, so
|
|
245
|
+
// the check is safe on the live tree too, though only the declared
|
|
246
|
+
// side ever carries one in practice). Checked ahead of the
|
|
247
|
+
// array/object branches too, same reason a property-Declarable is: it
|
|
248
|
+
// would otherwise be walked as a two-key plain object and lose the
|
|
249
|
+
// very identity that makes it a marker rather than authored data.
|
|
250
|
+
if (isHeldElsewhere(value))
|
|
251
|
+
return normalizeHeldElsewhere(value);
|
|
252
|
+
if (isSensitiveKey(key))
|
|
253
|
+
return MASKED;
|
|
254
|
+
// The lexicon's structural mask — same collapse, path-shaped rather than
|
|
255
|
+
// key-named (a k8s Secret's `data.*` no matter what the key is called).
|
|
256
|
+
if (hooks?.mask?.(nodeOf(path, pattern, key, value)))
|
|
257
|
+
return MASKED;
|
|
258
|
+
// A value the lexicon says cannot be known without deploying — an
|
|
259
|
+
// expression-string reference — collapses exactly like a class-instance
|
|
260
|
+
// intrinsic does below.
|
|
261
|
+
if (hooks?.unresolved?.(nodeOf(path, pattern, key, value)))
|
|
262
|
+
return UNRESOLVED;
|
|
263
|
+
if (isJsonPrimitive(value))
|
|
264
|
+
return value;
|
|
265
|
+
// A PROPERTY-kind Declarable is authored data wearing a class, not an
|
|
266
|
+
// opaque instance (#1314). The generated property constructors —
|
|
267
|
+
// `SecurityGroup_Ingress`, `Role_Policy`, `MicrovmImage_Logging` — are the
|
|
268
|
+
// typed way to write a nested property, and the serializer inlines their
|
|
269
|
+
// `.props` (serializer-walker.ts `visitor.propertyDeclarable`). The
|
|
270
|
+
// declared tree has to do the same, or the two sides disagree about a
|
|
271
|
+
// property the author did write: without this the declared side held
|
|
272
|
+
// UNRESOLVED while the live side held the real rule, so every one of its
|
|
273
|
+
// fields reported `<undeclared> → <value>` on a clean apply, and the noise
|
|
274
|
+
// scaled with how strictly a project typed its properties.
|
|
275
|
+
//
|
|
276
|
+
// Checked ahead of the array/object branches rather than in the non-JSON
|
|
277
|
+
// fallback below, so it holds whether the declarable arrives as a class
|
|
278
|
+
// instance (what a lexicon constructs) or as an equivalent plain object.
|
|
279
|
+
//
|
|
280
|
+
// Deliberately property-kind only. A RESOURCE-kind Declarable in another
|
|
281
|
+
// resource's props is a reference, which has no source-side value to
|
|
282
|
+
// compare against a live one, so UNRESOLVED stays correct for it — and a
|
|
283
|
+
// resource-kind instance falls through to that fallback unchanged.
|
|
284
|
+
if (isPropertyDeclarableValue(value)) {
|
|
285
|
+
return normalizeValue(value.props ?? {}, path, pattern, key);
|
|
286
|
+
}
|
|
287
|
+
if (Array.isArray(value)) {
|
|
288
|
+
const elements = [];
|
|
289
|
+
for (let i = 0; i < value.length; i++) {
|
|
290
|
+
const elPath = joinIndex(path, i);
|
|
291
|
+
const elPattern = joinPattern(pattern);
|
|
292
|
+
if (prune(elPath, elPattern, String(i), value[i]))
|
|
293
|
+
continue;
|
|
294
|
+
const element = normalizeValue(value[i], elPath, elPattern, String(i));
|
|
295
|
+
if (element === EMPTIED)
|
|
296
|
+
continue;
|
|
297
|
+
elements.push(element);
|
|
298
|
+
}
|
|
299
|
+
// An array that had elements and has none left was emptied by pruning,
|
|
300
|
+
// not declared empty. Reporting `[]` for it is reporting the husk of a
|
|
301
|
+
// value the rules just decided was noise.
|
|
302
|
+
if (elements.length === 0 && value.length > 0)
|
|
303
|
+
return EMPTIED;
|
|
304
|
+
return orderElements(elements, path, pattern);
|
|
305
|
+
}
|
|
306
|
+
if (isPlainObject(value)) {
|
|
307
|
+
const out = {};
|
|
308
|
+
let had = 0;
|
|
309
|
+
for (const childKey of Object.keys(value).sort()) {
|
|
310
|
+
const childPath = joinPath(path, childKey);
|
|
311
|
+
const childPattern = joinPath(pattern, childKey);
|
|
312
|
+
const childValue = value[childKey];
|
|
313
|
+
if (childValue === undefined)
|
|
314
|
+
continue;
|
|
315
|
+
had += 1;
|
|
316
|
+
if (prune(childPath, childPattern, childKey, childValue))
|
|
317
|
+
continue;
|
|
318
|
+
const child = normalizeValue(childValue, childPath, childPattern, childKey);
|
|
319
|
+
if (child === EMPTIED)
|
|
320
|
+
continue;
|
|
321
|
+
out[childKey] = child;
|
|
322
|
+
}
|
|
323
|
+
if (Object.keys(out).length === 0 && had > 0)
|
|
324
|
+
return EMPTIED;
|
|
325
|
+
return out;
|
|
326
|
+
}
|
|
327
|
+
// A class instance (an unevaluated intrinsic), a function, a symbol, a
|
|
328
|
+
// bigint — not JSON data, and not something the diff may guess at.
|
|
329
|
+
return UNRESOLVED;
|
|
330
|
+
};
|
|
331
|
+
const orderElements = (elements, path, pattern) => {
|
|
332
|
+
if (!hooks?.orderKey || elements.length < 2)
|
|
333
|
+
return elements;
|
|
334
|
+
const keyed = [];
|
|
335
|
+
for (let i = 0; i < elements.length; i++) {
|
|
336
|
+
const key = hooks.orderKey({
|
|
337
|
+
entityType,
|
|
338
|
+
path,
|
|
339
|
+
pattern,
|
|
340
|
+
element: elements[i],
|
|
341
|
+
index: i,
|
|
342
|
+
side,
|
|
343
|
+
});
|
|
344
|
+
// A partial answer is not an answer — leave the order alone.
|
|
345
|
+
if (key === undefined)
|
|
346
|
+
return elements;
|
|
347
|
+
keyed.push({ key, element: elements[i] });
|
|
348
|
+
}
|
|
349
|
+
keyed.sort((a, b) => (a.key < b.key ? -1 : a.key > b.key ? 1 : 0));
|
|
350
|
+
return keyed.map((k) => k.element);
|
|
351
|
+
};
|
|
352
|
+
const root = normalizeValue(tree, "", "", "");
|
|
353
|
+
return isPlainObject(root) ? root : {};
|
|
354
|
+
}
|
|
355
|
+
/** Longest order key that may appear inside a path segment before it stops being readable. */
|
|
356
|
+
const MAX_KEYED_SEGMENT = 60;
|
|
357
|
+
/**
|
|
358
|
+
* Flatten a normalized tree to `path → leaf value`. Leaves are JSON primitives,
|
|
359
|
+
* {@link UNRESOLVED}, and empty containers (an empty object/array is itself a
|
|
360
|
+
* value — `Tags: []` differs from no `Tags` at all).
|
|
361
|
+
*
|
|
362
|
+
* Arrays the ordering hook can key are addressed **by that key**
|
|
363
|
+
* (`Tags[#env].Value`) rather than by position. Positional paths would make the
|
|
364
|
+
* diff shift-sensitive: one tag added in the console renames every tag after
|
|
365
|
+
* it, so a single new tag reports as a change to every other tag and a
|
|
366
|
+
* baseline entry stops matching the moment the set changes. Keying holds a
|
|
367
|
+
* property's identity still while the set around it moves.
|
|
368
|
+
*
|
|
369
|
+
* Positional paths remain for arrays the hook cannot key, arrays whose keys
|
|
370
|
+
* collide, and keys too long to read.
|
|
371
|
+
*/
|
|
372
|
+
export function flattenDeepProperties(tree, options) {
|
|
373
|
+
const out = new Map();
|
|
374
|
+
const indexSegments = (elements, path, pattern) => {
|
|
375
|
+
const positional = elements.map((_, i) => joinIndex(path, i));
|
|
376
|
+
if (!options?.hooks?.orderKey)
|
|
377
|
+
return positional;
|
|
378
|
+
const keys = [];
|
|
379
|
+
for (let i = 0; i < elements.length; i++) {
|
|
380
|
+
const key = options.hooks.orderKey({
|
|
381
|
+
entityType: options.entityType,
|
|
382
|
+
path,
|
|
383
|
+
pattern,
|
|
384
|
+
element: elements[i],
|
|
385
|
+
index: i,
|
|
386
|
+
side: options.side,
|
|
387
|
+
});
|
|
388
|
+
if (key === undefined || key.length > MAX_KEYED_SEGMENT)
|
|
389
|
+
return positional;
|
|
390
|
+
keys.push(key);
|
|
391
|
+
}
|
|
392
|
+
if (new Set(keys).size !== keys.length)
|
|
393
|
+
return positional;
|
|
394
|
+
return keys.map((k) => `${path}[#${k}]`);
|
|
395
|
+
};
|
|
396
|
+
const walk = (value, path, pattern) => {
|
|
397
|
+
// A normalized held marker (#2162) is one value, not a two-key object to
|
|
398
|
+
// descend into — same reason UNRESOLVED and a JSON primitive are leaves.
|
|
399
|
+
if (isNormalizedHeldElsewhere(value)) {
|
|
400
|
+
out.set(path, value);
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
if (Array.isArray(value)) {
|
|
404
|
+
if (value.length === 0) {
|
|
405
|
+
out.set(path, []);
|
|
406
|
+
return;
|
|
407
|
+
}
|
|
408
|
+
const segments = indexSegments(value, path, pattern);
|
|
409
|
+
value.forEach((el, i) => walk(el, segments[i], joinPattern(pattern)));
|
|
410
|
+
return;
|
|
411
|
+
}
|
|
412
|
+
if (isPlainObject(value)) {
|
|
413
|
+
const keys = Object.keys(value);
|
|
414
|
+
if (keys.length === 0) {
|
|
415
|
+
out.set(path, {});
|
|
416
|
+
return;
|
|
417
|
+
}
|
|
418
|
+
for (const k of keys)
|
|
419
|
+
walk(value[k], joinPath(path, k), joinPath(pattern, k));
|
|
420
|
+
return;
|
|
421
|
+
}
|
|
422
|
+
out.set(path, value);
|
|
423
|
+
};
|
|
424
|
+
for (const [k, v] of Object.entries(tree))
|
|
425
|
+
walk(v, k, k);
|
|
426
|
+
return out;
|
|
427
|
+
}
|
|
428
|
+
/** Structural equality over JSON-shaped values, order-sensitive (post-canonicalization). */
|
|
429
|
+
export function deepValueEqual(a, b) {
|
|
430
|
+
if (a === b)
|
|
431
|
+
return true;
|
|
432
|
+
if (a === null || b === null || a === undefined || b === undefined)
|
|
433
|
+
return false;
|
|
434
|
+
if (typeof a !== "object" || typeof b !== "object")
|
|
435
|
+
return false;
|
|
436
|
+
return JSON.stringify(a) === JSON.stringify(b);
|
|
437
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
/**
|
|
3
|
+
* The message {@link detectLexicons} throws when a scan of the project's
|
|
4
|
+
* source files turns up no `@intentius/chant-lexicon-*` import at all.
|
|
5
|
+
*
|
|
6
|
+
* Named (chant #2222) because one caller has to tell this failure apart from
|
|
7
|
+
* every other one: `chant lint` reports a lexicon it cannot resolve as an
|
|
8
|
+
* error diagnostic, but "this directory declares no lexicon and imports none"
|
|
9
|
+
* is not that. It is a project that lints under the core rules alone, and it
|
|
10
|
+
* has always been allowed to. See {@link isNoLexiconDetected}.
|
|
11
|
+
*/
|
|
12
|
+
export const NO_LEXICON_DETECTED_MESSAGE = "No lexicon detected in infrastructure files";
|
|
13
|
+
/** Whether `error` is the {@link NO_LEXICON_DETECTED_MESSAGE} failure. */
|
|
14
|
+
export function isNoLexiconDetected(error) {
|
|
15
|
+
return error instanceof Error && error.message === NO_LEXICON_DETECTED_MESSAGE;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Detects which lexicons are being used by analyzing import statements
|
|
19
|
+
* in the provided infrastructure files. Matches any `@intentius/chant-lexicon-*` package,
|
|
20
|
+
* imported by its root or by a subpath (`@intentius/chant-lexicon-sql/postgres`).
|
|
21
|
+
*
|
|
22
|
+
* @param files - Array of file paths to analyze
|
|
23
|
+
* @returns Array of detected lexicon names
|
|
24
|
+
* @throws Error if no lexicon is detected
|
|
25
|
+
*/
|
|
26
|
+
export async function detectLexicons(files) {
|
|
27
|
+
const detectedLexicons = new Set();
|
|
28
|
+
for (const file of files) {
|
|
29
|
+
let content;
|
|
30
|
+
try {
|
|
31
|
+
content = await readFile(file, "utf-8");
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
// Skip files that can't be read
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
// Match @intentius/chant-lexicon-<name> in import/export statements.
|
|
38
|
+
// Uses [\s\S] instead of . to handle multiline imports like:
|
|
39
|
+
// import { Foo, Bar } from "@intentius/chant-lexicon-k8s";
|
|
40
|
+
// chant #3648: a subpath import names the same lexicon, so
|
|
41
|
+
// "@intentius/chant-lexicon-sql/clickhouse" detects "sql". A project that
|
|
42
|
+
// imports a lexicon only through its subpaths (every sql project) has no
|
|
43
|
+
// other import for this scan to find.
|
|
44
|
+
const regex = /(?:import|export)\s+[\s\S]*?\s+from\s+['"]@intentius\/chant-lexicon-([a-z][\w-]*)(?:\/[^'"\s]*)?['"]/g;
|
|
45
|
+
for (const match of content.matchAll(regex)) {
|
|
46
|
+
detectedLexicons.add(match[1]);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
// Validate results
|
|
50
|
+
if (detectedLexicons.size === 0) {
|
|
51
|
+
throw new Error(NO_LEXICON_DETECTED_MESSAGE);
|
|
52
|
+
}
|
|
53
|
+
return Array.from(detectedLexicons);
|
|
54
|
+
}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { statSync } from "fs";
|
|
2
|
+
/**
|
|
3
|
+
* Discovery cache for incremental rebuilds.
|
|
4
|
+
*
|
|
5
|
+
* Tracks file mtimes and file→entity mappings so that only changed files
|
|
6
|
+
* need to be re-imported during watch-mode rebuilds.
|
|
7
|
+
*/
|
|
8
|
+
export class DiscoveryCache {
|
|
9
|
+
constructor() {
|
|
10
|
+
this.files = new Map();
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Check if a file has changed since it was last tracked.
|
|
14
|
+
* Returns true if the file is new or its mtime has changed.
|
|
15
|
+
*/
|
|
16
|
+
hasFileChanged(filePath) {
|
|
17
|
+
const entry = this.files.get(filePath);
|
|
18
|
+
if (!entry)
|
|
19
|
+
return true;
|
|
20
|
+
try {
|
|
21
|
+
const stat = statSync(filePath);
|
|
22
|
+
return stat.mtimeMs !== entry.mtime;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// File may have been deleted
|
|
26
|
+
return true;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Record a successful import, storing the file's mtime and entity names.
|
|
31
|
+
*/
|
|
32
|
+
trackFileImport(filePath, mtime, entityNames) {
|
|
33
|
+
this.files.set(filePath, { mtime, entityNames });
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Invalidate cache entries for the given files.
|
|
37
|
+
* Returns the set of entity names that were invalidated.
|
|
38
|
+
*/
|
|
39
|
+
invalidate(changedFiles) {
|
|
40
|
+
const invalidatedEntities = new Set();
|
|
41
|
+
for (const file of changedFiles) {
|
|
42
|
+
const entry = this.files.get(file);
|
|
43
|
+
if (entry) {
|
|
44
|
+
for (const name of entry.entityNames) {
|
|
45
|
+
invalidatedEntities.add(name);
|
|
46
|
+
}
|
|
47
|
+
this.files.delete(file);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return invalidatedEntities;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Get all tracked file paths.
|
|
54
|
+
*/
|
|
55
|
+
trackedFiles() {
|
|
56
|
+
return [...this.files.keys()];
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Get entity names for a tracked file.
|
|
60
|
+
*/
|
|
61
|
+
getFileEntities(filePath) {
|
|
62
|
+
return this.files.get(filePath)?.entityNames;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Clear all cached data.
|
|
66
|
+
*/
|
|
67
|
+
clear() {
|
|
68
|
+
this.files.clear();
|
|
69
|
+
}
|
|
70
|
+
}
|